Git init
authorKibum Kim <kb0929.kim@samsung.com>
Fri, 6 Jan 2012 16:12:26 +0000 (01:12 +0900)
committerKibum Kim <kb0929.kim@samsung.com>
Fri, 6 Jan 2012 16:12:26 +0000 (01:12 +0900)
547 files changed:
AUTHORS [new file with mode: 0755]
COPYING [new file with mode: 0755]
ChangeLog [new file with mode: 0755]
ChangeLog.pre-1-0 [new file with mode: 0755]
ChangeLog.pre-1-10 [new file with mode: 0755]
ChangeLog.pre-1-12 [new file with mode: 0755]
ChangeLog.pre-1-14 [new file with mode: 0755]
ChangeLog.pre-1-16 [new file with mode: 0755]
ChangeLog.pre-1-18 [new file with mode: 0755]
ChangeLog.pre-1-2 [new file with mode: 0755]
ChangeLog.pre-1-20 [new file with mode: 0755]
ChangeLog.pre-1-23 [new file with mode: 0755]
ChangeLog.pre-1-4 [new file with mode: 0755]
ChangeLog.pre-1-6 [new file with mode: 0755]
ChangeLog.pre-1-8 [new file with mode: 0755]
HACKING [new file with mode: 0755]
INSTALL [new file with mode: 0755]
MAINTAINERS [new file with mode: 0755]
Makefile.am [new file with mode: 0755]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0755]
README [new file with mode: 0755]
README.win32 [new file with mode: 0755]
THANKS [new file with mode: 0755]
acinclude.m4 [new file with mode: 0755]
aclocal.m4 [new file with mode: 0755]
autogen.sh [new file with mode: 0755]
compile [new file with mode: 0755]
config.guess [new file with mode: 0755]
config.h.in [new file with mode: 0755]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0755]
debian/README.Defoma [new file with mode: 0755]
debian/changelog [new file with mode: 0755]
debian/compat [new file with mode: 0755]
debian/control [new file with mode: 0755]
debian/control.in [new file with mode: 0755]
debian/copyright [new file with mode: 0755]
debian/defoma/pango.conf [new file with mode: 0755]
debian/dh_pangomodules.in [new file with mode: 0755]
debian/libpango1.0-common.README.Debian [new file with mode: 0755]
debian/libpango1.0-common.dirs [new file with mode: 0755]
debian/libpango1.0-common.docs [new file with mode: 0755]
debian/libpango1.0-common.install [new file with mode: 0755]
debian/libpango1.0-common.manpages [new file with mode: 0755]
debian/libpango1.0-common.postinst [new file with mode: 0755]
debian/libpango1.0-common.postrm [new file with mode: 0755]
debian/libpango1.0-common.preinst.in [new file with mode: 0755]
debian/libpango1.0-common.prerm [new file with mode: 0755]
debian/libpango1.0-dev.install.in [new file with mode: 0755]
debian/libpango1.0-dev.links.in [new file with mode: 0755]
debian/libpango1.0-dev.manpages [new file with mode: 0755]
debian/libpango1.0.install.in [new file with mode: 0755]
debian/libpango1.0.install.opt [new file with mode: 0755]
debian/libpango1.0.links.in [new file with mode: 0755]
debian/libpango1.0.postinst.in [new file with mode: 0755]
debian/libpango1.0.symbols [new file with mode: 0755]
debian/pango.defoma [new file with mode: 0755]
debian/patches/10_scan-module-files-in-dirs.patch [new file with mode: 0755]
debian/patches/11_module-files-append-module-files-d.patch [new file with mode: 0755]
debian/patches/12_module-files-append-compat-module-files-d.patch [new file with mode: 0755]
debian/patches/series [new file with mode: 0755]
debian/rules [new file with mode: 0755]
debian/update-pangox-aliases [new file with mode: 0755]
debian/update-pangox-aliases.8 [new file with mode: 0755]
debian/update-pangox-aliases.fr.8 [new file with mode: 0755]
debian/watch [new file with mode: 0755]
depcomp [new file with mode: 0755]
docs/Makefile.am [new file with mode: 0755]
docs/Makefile.in [new file with mode: 0644]
docs/check.docs [new file with mode: 0755]
docs/html/PangoEngineLang.html [new file with mode: 0755]
docs/html/PangoEngineShape.html [new file with mode: 0755]
docs/html/PangoFcDecoder.html [new file with mode: 0755]
docs/html/PangoFcFont.html [new file with mode: 0755]
docs/html/PangoFcFontMap.html [new file with mode: 0755]
docs/html/PangoMarkupFormat.html [new file with mode: 0755]
docs/html/PangoRenderer.html [new file with mode: 0755]
docs/html/home.png [new file with mode: 0755]
docs/html/index-1.10.html [new file with mode: 0755]
docs/html/index-1.12.html [new file with mode: 0755]
docs/html/index-1.14.html [new file with mode: 0755]
docs/html/index-1.16.html [new file with mode: 0755]
docs/html/index-1.18.html [new file with mode: 0755]
docs/html/index-1.2.html [new file with mode: 0755]
docs/html/index-1.20.html [new file with mode: 0755]
docs/html/index-1.22.html [new file with mode: 0755]
docs/html/index-1.24.html [new file with mode: 0755]
docs/html/index-1.26.html [new file with mode: 0755]
docs/html/index-1.4.html [new file with mode: 0755]
docs/html/index-1.6.html [new file with mode: 0755]
docs/html/index-1.8.html [new file with mode: 0755]
docs/html/index-all.html [new file with mode: 0755]
docs/html/index-deprecated.html [new file with mode: 0755]
docs/html/index.html [new file with mode: 0755]
docs/html/index.sgml [new file with mode: 0755]
docs/html/layout.gif [new file with mode: 0755]
docs/html/left.png [new file with mode: 0755]
docs/html/lowlevel.html [new file with mode: 0755]
docs/html/pango-ATSUI-Fonts.html [new file with mode: 0755]
docs/html/pango-Bidirectional-Text.html [new file with mode: 0755]
docs/html/pango-Cairo-Rendering.html [new file with mode: 0755]
docs/html/pango-Coverage-Maps.html [new file with mode: 0755]
docs/html/pango-Engines.html [new file with mode: 0755]
docs/html/pango-Fonts.html [new file with mode: 0755]
docs/html/pango-FreeType-Fonts-and-Rendering.html [new file with mode: 0755]
docs/html/pango-Glyph-Storage.html [new file with mode: 0755]
docs/html/pango-Layout-Objects.html [new file with mode: 0755]
docs/html/pango-Miscellaneous-Utilities.html [new file with mode: 0755]
docs/html/pango-Modules.html [new file with mode: 0755]
docs/html/pango-OpenType-Font-Handling.html [new file with mode: 0755]
docs/html/pango-Scripts-and-Languages.html [new file with mode: 0755]
docs/html/pango-Tab-Stops.html [new file with mode: 0755]
docs/html/pango-Text-Attributes.html [new file with mode: 0755]
docs/html/pango-Text-Processing.html [new file with mode: 0755]
docs/html/pango-Version-Checking.html [new file with mode: 0755]
docs/html/pango-Vertical-Text.html [new file with mode: 0755]
docs/html/pango-Win32-Fonts-and-Rendering.html [new file with mode: 0755]
docs/html/pango-X-Fonts-and-Rendering.html [new file with mode: 0755]
docs/html/pango-Xft-Fonts-and-Rendering.html [new file with mode: 0755]
docs/html/pango-hierarchy.html [new file with mode: 0755]
docs/html/pango-querymodules.html [new file with mode: 0755]
docs/html/pango.devhelp [new file with mode: 0755]
docs/html/pango.devhelp2 [new file with mode: 0755]
docs/html/pango.html [new file with mode: 0755]
docs/html/rendering.html [new file with mode: 0755]
docs/html/right.png [new file with mode: 0755]
docs/html/rotated-text.png [new file with mode: 0755]
docs/html/style.css [new file with mode: 0755]
docs/html/tools.html [new file with mode: 0755]
docs/html/up.png [new file with mode: 0755]
docs/layout.eps [new file with mode: 0755]
docs/layout.fig [new file with mode: 0755]
docs/layout.gif [new file with mode: 0755]
docs/pango-docs.sgml [new file with mode: 0755]
docs/pango-overrides.txt [new file with mode: 0755]
docs/pango-querymodules.1 [new file with mode: 0755]
docs/pango-querymodules.xml [new file with mode: 0755]
docs/pango-sections.txt [new file with mode: 0755]
docs/pango.types [new file with mode: 0755]
docs/pango_markup.sgml [new file with mode: 0755]
docs/rotated-text.png [new file with mode: 0755]
docs/tmpl/atsui-fonts.sgml [new file with mode: 0755]
docs/tmpl/bidi.sgml [new file with mode: 0755]
docs/tmpl/coverage-maps.sgml [new file with mode: 0755]
docs/tmpl/engines.sgml [new file with mode: 0755]
docs/tmpl/fonts.sgml [new file with mode: 0755]
docs/tmpl/freetype-fonts.sgml [new file with mode: 0755]
docs/tmpl/glyphs.sgml [new file with mode: 0755]
docs/tmpl/layout.sgml [new file with mode: 0755]
docs/tmpl/main.sgml [new file with mode: 0755]
docs/tmpl/modules.sgml [new file with mode: 0755]
docs/tmpl/opentype.sgml [new file with mode: 0755]
docs/tmpl/pango-engine-lang.sgml [new file with mode: 0755]
docs/tmpl/pango-engine-shape.sgml [new file with mode: 0755]
docs/tmpl/pango-renderer.sgml [new file with mode: 0755]
docs/tmpl/pango-unused.sgml [new file with mode: 0755]
docs/tmpl/pango-version.sgml [new file with mode: 0755]
docs/tmpl/pangocairo.sgml [new file with mode: 0755]
docs/tmpl/pangofc-decoder.sgml [new file with mode: 0755]
docs/tmpl/pangofc-font.sgml [new file with mode: 0755]
docs/tmpl/pangofc-fontmap.sgml [new file with mode: 0755]
docs/tmpl/scripts.sgml [new file with mode: 0755]
docs/tmpl/tab-stops.sgml [new file with mode: 0755]
docs/tmpl/text-attributes.sgml [new file with mode: 0755]
docs/tmpl/utils.sgml [new file with mode: 0755]
docs/tmpl/vertical.sgml [new file with mode: 0755]
docs/tmpl/win32-fonts.sgml [new file with mode: 0755]
docs/tmpl/x-fonts.sgml [new file with mode: 0755]
docs/tmpl/xft-fonts.sgml [new file with mode: 0755]
docs/version.xml [new file with mode: 0755]
docs/version.xml.in [new file with mode: 0755]
docs/xml/annotation-glossary.xml [new file with mode: 0755]
docs/xml/api-index-1.10.xml [new file with mode: 0755]
docs/xml/api-index-1.12.xml [new file with mode: 0755]
docs/xml/api-index-1.14.xml [new file with mode: 0755]
docs/xml/api-index-1.16.xml [new file with mode: 0755]
docs/xml/api-index-1.18.xml [new file with mode: 0755]
docs/xml/api-index-1.2.xml [new file with mode: 0755]
docs/xml/api-index-1.20.xml [new file with mode: 0755]
docs/xml/api-index-1.22.xml [new file with mode: 0755]
docs/xml/api-index-1.24.xml [new file with mode: 0755]
docs/xml/api-index-1.26..xml [new file with mode: 0755]
docs/xml/api-index-1.26.xml [new file with mode: 0755]
docs/xml/api-index-1.4.xml [new file with mode: 0755]
docs/xml/api-index-1.6..xml [new file with mode: 0755]
docs/xml/api-index-1.6.xml [new file with mode: 0755]
docs/xml/api-index-1.8.xml [new file with mode: 0755]
docs/xml/api-index-deprecated.xml [new file with mode: 0755]
docs/xml/api-index-full.xml [new file with mode: 0755]
docs/xml/atsui-fonts.xml [new file with mode: 0755]
docs/xml/bidi.xml [new file with mode: 0755]
docs/xml/coverage-maps.xml [new file with mode: 0755]
docs/xml/engines.xml [new file with mode: 0755]
docs/xml/fonts.xml [new file with mode: 0755]
docs/xml/freetype-fonts.xml [new file with mode: 0755]
docs/xml/glyphs.xml [new file with mode: 0755]
docs/xml/layout.xml [new file with mode: 0755]
docs/xml/main.xml [new file with mode: 0755]
docs/xml/modules.xml [new file with mode: 0755]
docs/xml/opentype.xml [new file with mode: 0755]
docs/xml/pango-engine-lang.xml [new file with mode: 0755]
docs/xml/pango-engine-shape.xml [new file with mode: 0755]
docs/xml/pango-renderer.xml [new file with mode: 0755]
docs/xml/pango-version.xml [new file with mode: 0755]
docs/xml/pangocairo.xml [new file with mode: 0755]
docs/xml/pangofc-decoder.xml [new file with mode: 0755]
docs/xml/pangofc-font.xml [new file with mode: 0755]
docs/xml/pangofc-fontmap.xml [new file with mode: 0755]
docs/xml/scripts.xml [new file with mode: 0755]
docs/xml/tab-stops.xml [new file with mode: 0755]
docs/xml/text-attributes.xml [new file with mode: 0755]
docs/xml/utils.xml [new file with mode: 0755]
docs/xml/vertical.xml [new file with mode: 0755]
docs/xml/win32-fonts.xml [new file with mode: 0755]
docs/xml/x-fonts.xml [new file with mode: 0755]
docs/xml/xft-fonts.xml [new file with mode: 0755]
examples/Makefile.am [new file with mode: 0755]
examples/Makefile.in [new file with mode: 0644]
examples/cairoshape.c [new file with mode: 0755]
examples/cairosimple.c [new file with mode: 0755]
examples/cairotwisted.c [new file with mode: 0755]
examples/pangowin32tobmp.c [new file with mode: 0755]
gtk-doc.make [new file with mode: 0644]
install-sh [new file with mode: 0755]
ltmain.sh [new file with mode: 0644]
missing [new file with mode: 0755]
modules/Makefile.am [new file with mode: 0755]
modules/Makefile.in [new file with mode: 0644]
modules/Module.mk [new file with mode: 0755]
modules/arabic/Makefile.am [new file with mode: 0755]
modules/arabic/Makefile.in [new file with mode: 0644]
modules/arabic/arabic-fc.c [new file with mode: 0755]
modules/arabic/arabic-lang.c [new file with mode: 0755]
modules/arabic/arabic-ot.c [new file with mode: 0755]
modules/arabic/arabic-ot.h [new file with mode: 0755]
modules/basic/Makefile.am [new file with mode: 0755]
modules/basic/Makefile.in [new file with mode: 0644]
modules/basic/basic-atsui.c [new file with mode: 0755]
modules/basic/basic-fc.c [new file with mode: 0755]
modules/basic/basic-win32.c [new file with mode: 0755]
modules/basic/basic-x.c [new file with mode: 0755]
modules/basic/tables-big.i [new file with mode: 0755]
modules/basic/tables-small.i [new file with mode: 0755]
modules/hangul/Makefile.am [new file with mode: 0755]
modules/hangul/Makefile.in [new file with mode: 0644]
modules/hangul/hangul-defs.h [new file with mode: 0755]
modules/hangul/hangul-fc.c [new file with mode: 0755]
modules/hangul/tables-jamos.i [new file with mode: 0755]
modules/hebrew/Makefile.am [new file with mode: 0755]
modules/hebrew/Makefile.in [new file with mode: 0644]
modules/hebrew/hebrew-fc.c [new file with mode: 0755]
modules/hebrew/hebrew-shaper.c [new file with mode: 0755]
modules/hebrew/hebrew-shaper.h [new file with mode: 0755]
modules/indic/Makefile.am [new file with mode: 0755]
modules/indic/Makefile.in [new file with mode: 0644]
modules/indic/indic-fc.c [new file with mode: 0755]
modules/indic/indic-lang.c [new file with mode: 0755]
modules/indic/indic-ot-class-tables.c [new file with mode: 0755]
modules/indic/indic-ot.c [new file with mode: 0755]
modules/indic/indic-ot.h [new file with mode: 0755]
modules/indic/mprefixups.c [new file with mode: 0755]
modules/indic/mprefixups.h [new file with mode: 0755]
modules/khmer/Makefile.am [new file with mode: 0755]
modules/khmer/Makefile.in [new file with mode: 0644]
modules/khmer/khmer-fc.c [new file with mode: 0755]
modules/module.def [new file with mode: 0755]
modules/pangorc [new file with mode: 0755]
modules/syriac/Makefile.am [new file with mode: 0755]
modules/syriac/Makefile.in [new file with mode: 0644]
modules/syriac/syriac-fc.c [new file with mode: 0755]
modules/syriac/syriac-ot.c [new file with mode: 0755]
modules/syriac/syriac-ot.h [new file with mode: 0755]
modules/thai/Makefile.am [new file with mode: 0755]
modules/thai/Makefile.in [new file with mode: 0644]
modules/thai/thai-charprop.c [new file with mode: 0755]
modules/thai/thai-charprop.h [new file with mode: 0755]
modules/thai/thai-fc.c [new file with mode: 0755]
modules/thai/thai-lang.c [new file with mode: 0755]
modules/thai/thai-shaper.c [new file with mode: 0755]
modules/thai/thai-shaper.h [new file with mode: 0755]
modules/tibetan/Makefile.am [new file with mode: 0755]
modules/tibetan/Makefile.in [new file with mode: 0644]
modules/tibetan/tibetan-fc.c [new file with mode: 0755]
omf.make [new file with mode: 0644]
packaging/pango.spec [new file with mode: 0644]
pango-uninstalled.pc.in [new file with mode: 0755]
pango-view/GLASS.txt [new file with mode: 0755]
pango-view/HELLO.txt [new file with mode: 0755]
pango-view/Makefile.am [new file with mode: 0755]
pango-view/Makefile.in [new file with mode: 0644]
pango-view/pango-view.1.in [new file with mode: 0755]
pango-view/pango-view.c [new file with mode: 0755]
pango-view/test-arabic.txt [new file with mode: 0755]
pango-view/test-chinese.txt [new file with mode: 0755]
pango-view/test-devanagari.txt [new file with mode: 0755]
pango-view/test-gurmukhi.txt [new file with mode: 0755]
pango-view/test-hebrew.txt [new file with mode: 0755]
pango-view/test-ipa.txt [new file with mode: 0755]
pango-view/test-justify.txt [new file with mode: 0755]
pango-view/test-lao.txt [new file with mode: 0755]
pango-view/test-latin.txt [new file with mode: 0755]
pango-view/test-long-paragraph.txt [new file with mode: 0755]
pango-view/test-mixed.markup [new file with mode: 0755]
pango-view/test-mixed.txt [new file with mode: 0755]
pango-view/test-nko.txt [new file with mode: 0755]
pango-view/test-opentype-language.markup [new file with mode: 0755]
pango-view/test-syriac.txt [new file with mode: 0755]
pango-view/test-tamil.txt [new file with mode: 0755]
pango-view/test-thai.txt [new file with mode: 0755]
pango-view/test-tibetan.txt [new file with mode: 0755]
pango-view/viewer-cairo.c [new file with mode: 0755]
pango-view/viewer-cairo.h [new file with mode: 0755]
pango-view/viewer-main.c [new file with mode: 0755]
pango-view/viewer-pangocairo.c [new file with mode: 0755]
pango-view/viewer-pangoft2.c [new file with mode: 0755]
pango-view/viewer-pangox.c [new file with mode: 0755]
pango-view/viewer-pangoxft.c [new file with mode: 0755]
pango-view/viewer-render.c [new file with mode: 0755]
pango-view/viewer-render.h [new file with mode: 0755]
pango-view/viewer-x.c [new file with mode: 0755]
pango-view/viewer-x.h [new file with mode: 0755]
pango-view/viewer.h [new file with mode: 0755]
pango-zip.sh.in [new file with mode: 0755]
pango.doap [new file with mode: 0755]
pango.pc.in [new file with mode: 0755]
pango/Makefile.am [new file with mode: 0755]
pango/Makefile.in [new file with mode: 0644]
pango/break.c [new file with mode: 0755]
pango/check.defs [new file with mode: 0755]
pango/ellipsize.c [new file with mode: 0755]
pango/fonts.c [new file with mode: 0755]
pango/glyphstring.c [new file with mode: 0755]
pango/makefile.msc [new file with mode: 0755]
pango/mini-fribidi/Makefile.am [new file with mode: 0755]
pango/mini-fribidi/Makefile.in [new file with mode: 0644]
pango/mini-fribidi/README [new file with mode: 0755]
pango/mini-fribidi/fribidi.c [new file with mode: 0755]
pango/mini-fribidi/fribidi.h [new file with mode: 0755]
pango/mini-fribidi/fribidi_char_type.c [new file with mode: 0755]
pango/mini-fribidi/fribidi_config.h [new file with mode: 0755]
pango/mini-fribidi/fribidi_tab_char_type_2.i [new file with mode: 0755]
pango/mini-fribidi/fribidi_types.c [new file with mode: 0755]
pango/mini-fribidi/fribidi_types.h [new file with mode: 0755]
pango/mini-fribidi/fribidi_types.i [new file with mode: 0755]
pango/module-defs-atsui.c [new file with mode: 0755]
pango/module-defs-fc.c [new file with mode: 0755]
pango/module-defs-fc.c.win32 [new file with mode: 0755]
pango/module-defs-lang.c [new file with mode: 0755]
pango/module-defs-win32.c [new file with mode: 0755]
pango/module-defs-win32.c.win32 [new file with mode: 0755]
pango/module-defs-x.c [new file with mode: 0755]
pango/module-defs.h [new file with mode: 0755]
pango/modules.c [new file with mode: 0755]
pango/modules.h [new file with mode: 0755]
pango/opentype/COPYING [new file with mode: 0755]
pango/opentype/Makefile.am [new file with mode: 0755]
pango/opentype/Makefile.in [new file with mode: 0644]
pango/opentype/README [new file with mode: 0755]
pango/opentype/TODO [new file with mode: 0755]
pango/opentype/hb-blob.c [new file with mode: 0755]
pango/opentype/hb-blob.h [new file with mode: 0755]
pango/opentype/hb-buffer-private.h [new file with mode: 0755]
pango/opentype/hb-buffer.c [new file with mode: 0755]
pango/opentype/hb-buffer.h [new file with mode: 0755]
pango/opentype/hb-common.h [new file with mode: 0755]
pango/opentype/hb-font-private.h [new file with mode: 0755]
pango/opentype/hb-font.cc [new file with mode: 0755]
pango/opentype/hb-font.h [new file with mode: 0755]
pango/opentype/hb-glib.c [new file with mode: 0755]
pango/opentype/hb-glib.h [new file with mode: 0755]
pango/opentype/hb-object-private.h [new file with mode: 0755]
pango/opentype/hb-open-file-private.hh [new file with mode: 0755]
pango/opentype/hb-open-type-private.hh [new file with mode: 0755]
pango/opentype/hb-ot-layout-common-private.hh [new file with mode: 0755]
pango/opentype/hb-ot-layout-gdef-private.hh [new file with mode: 0755]
pango/opentype/hb-ot-layout-gpos-private.hh [new file with mode: 0755]
pango/opentype/hb-ot-layout-gsub-private.hh [new file with mode: 0755]
pango/opentype/hb-ot-layout-gsubgpos-private.hh [new file with mode: 0755]
pango/opentype/hb-ot-layout-private.h [new file with mode: 0755]
pango/opentype/hb-ot-layout.cc [new file with mode: 0755]
pango/opentype/hb-ot-layout.h [new file with mode: 0755]
pango/opentype/hb-ot.h [new file with mode: 0755]
pango/opentype/hb-private.h [new file with mode: 0755]
pango/opentype/hb-shape.c [new file with mode: 0755]
pango/opentype/hb-shape.h [new file with mode: 0755]
pango/opentype/hb-unicode-private.h [new file with mode: 0755]
pango/opentype/hb-unicode.c [new file with mode: 0755]
pango/opentype/hb-unicode.h [new file with mode: 0755]
pango/opentype/hb.h [new file with mode: 0755]
pango/opentype/main.cc [new file with mode: 0755]
pango/pango-attributes.c [new file with mode: 0755]
pango/pango-attributes.h [new file with mode: 0755]
pango/pango-bidi-type.c [new file with mode: 0755]
pango/pango-bidi-type.h [new file with mode: 0755]
pango/pango-break.h [new file with mode: 0755]
pango/pango-color-table.h [new file with mode: 0755]
pango/pango-color.c [new file with mode: 0755]
pango/pango-context.c [new file with mode: 0755]
pango/pango-context.h [new file with mode: 0755]
pango/pango-coverage.c [new file with mode: 0755]
pango/pango-coverage.h [new file with mode: 0755]
pango/pango-engine-private.h [new file with mode: 0755]
pango/pango-engine.c [new file with mode: 0755]
pango/pango-engine.h [new file with mode: 0755]
pango/pango-enum-types.c [new file with mode: 0755]
pango/pango-enum-types.h [new file with mode: 0755]
pango/pango-features.h [new file with mode: 0755]
pango/pango-font.h [new file with mode: 0755]
pango/pango-fontmap.c [new file with mode: 0755]
pango/pango-fontmap.h [new file with mode: 0755]
pango/pango-fontset.c [new file with mode: 0755]
pango/pango-fontset.h [new file with mode: 0755]
pango/pango-glyph-item.c [new file with mode: 0755]
pango/pango-glyph-item.h [new file with mode: 0755]
pango/pango-glyph.h [new file with mode: 0755]
pango/pango-gravity.c [new file with mode: 0755]
pango/pango-gravity.h [new file with mode: 0755]
pango/pango-impl-utils.h [new file with mode: 0755]
pango/pango-item.c [new file with mode: 0755]
pango/pango-item.h [new file with mode: 0755]
pango/pango-language-sample-table.h [new file with mode: 0755]
pango/pango-language.c [new file with mode: 0755]
pango/pango-language.h [new file with mode: 0755]
pango/pango-layout-private.h [new file with mode: 0755]
pango/pango-layout.c [new file with mode: 0755]
pango/pango-layout.h [new file with mode: 0755]
pango/pango-markup.c [new file with mode: 0755]
pango/pango-matrix.c [new file with mode: 0755]
pango/pango-matrix.h [new file with mode: 0755]
pango/pango-modules.h [new file with mode: 0755]
pango/pango-ot-buffer.c [new file with mode: 0755]
pango/pango-ot-info.c [new file with mode: 0755]
pango/pango-ot-private.h [new file with mode: 0755]
pango/pango-ot-ruleset.c [new file with mode: 0755]
pango/pango-ot-tag.c [new file with mode: 0755]
pango/pango-ot.h [new file with mode: 0755]
pango/pango-renderer.c [new file with mode: 0755]
pango/pango-renderer.h [new file with mode: 0755]
pango/pango-script-lang-table.h [new file with mode: 0755]
pango/pango-script-private.h [new file with mode: 0755]
pango/pango-script.c [new file with mode: 0755]
pango/pango-script.h [new file with mode: 0755]
pango/pango-tabs.c [new file with mode: 0755]
pango/pango-tabs.h [new file with mode: 0755]
pango/pango-types.h [new file with mode: 0755]
pango/pango-utils.c [new file with mode: 0755]
pango/pango-utils.h [new file with mode: 0755]
pango/pango.def [new file with mode: 0755]
pango/pango.h [new file with mode: 0755]
pango/pango.rc [new file with mode: 0755]
pango/pango.rc.in [new file with mode: 0755]
pango/pangoatsui-fontmap.c [new file with mode: 0755]
pango/pangoatsui-private.h [new file with mode: 0755]
pango/pangoatsui.c [new file with mode: 0755]
pango/pangoatsui.h [new file with mode: 0755]
pango/pangocairo-atsui.h [new file with mode: 0755]
pango/pangocairo-atsuifont.c [new file with mode: 0755]
pango/pangocairo-atsuifont.h [new file with mode: 0755]
pango/pangocairo-atsuifontmap.c [new file with mode: 0755]
pango/pangocairo-context.c [new file with mode: 0755]
pango/pangocairo-fc.h [new file with mode: 0755]
pango/pangocairo-fcfont.c [new file with mode: 0755]
pango/pangocairo-fcfontmap.c [new file with mode: 0755]
pango/pangocairo-font.c [new file with mode: 0755]
pango/pangocairo-fontmap.c [new file with mode: 0755]
pango/pangocairo-private.h [new file with mode: 0755]
pango/pangocairo-render.c [new file with mode: 0755]
pango/pangocairo-win32.h [new file with mode: 0755]
pango/pangocairo-win32font.c [new file with mode: 0755]
pango/pangocairo-win32fontmap.c [new file with mode: 0755]
pango/pangocairo.def [new file with mode: 0755]
pango/pangocairo.h [new file with mode: 0755]
pango/pangofc-decoder.c [new file with mode: 0755]
pango/pangofc-decoder.h [new file with mode: 0755]
pango/pangofc-font.c [new file with mode: 0755]
pango/pangofc-font.h [new file with mode: 0755]
pango/pangofc-fontmap.c [new file with mode: 0755]
pango/pangofc-fontmap.h [new file with mode: 0755]
pango/pangofc-private.h [new file with mode: 0755]
pango/pangoft2-fontmap.c [new file with mode: 0755]
pango/pangoft2-private.h [new file with mode: 0755]
pango/pangoft2-render.c [new file with mode: 0755]
pango/pangoft2.c [new file with mode: 0755]
pango/pangoft2.def [new file with mode: 0755]
pango/pangoft2.h [new file with mode: 0755]
pango/pangoft2.rc [new file with mode: 0755]
pango/pangoft2.rc.in [new file with mode: 0755]
pango/pangowin32-fontcache.c [new file with mode: 0755]
pango/pangowin32-fontmap.c [new file with mode: 0755]
pango/pangowin32-private.h [new file with mode: 0755]
pango/pangowin32.c [new file with mode: 0755]
pango/pangowin32.def [new file with mode: 0755]
pango/pangowin32.h [new file with mode: 0755]
pango/pangowin32.rc [new file with mode: 0755]
pango/pangowin32.rc.in [new file with mode: 0755]
pango/pangox-fontcache.c [new file with mode: 0755]
pango/pangox-fontmap.c [new file with mode: 0755]
pango/pangox-private.h [new file with mode: 0755]
pango/pangox.aliases [new file with mode: 0755]
pango/pangox.c [new file with mode: 0755]
pango/pangox.h [new file with mode: 0755]
pango/pangox.rc [new file with mode: 0755]
pango/pangox.rc.in [new file with mode: 0755]
pango/pangoxft-font.c [new file with mode: 0755]
pango/pangoxft-fontmap.c [new file with mode: 0755]
pango/pangoxft-private.h [new file with mode: 0755]
pango/pangoxft-render.c [new file with mode: 0755]
pango/pangoxft-render.h [new file with mode: 0755]
pango/pangoxft.h [new file with mode: 0755]
pango/pangoxft.rc [new file with mode: 0755]
pango/pangoxft.rc.in [new file with mode: 0755]
pango/querymodules.c [new file with mode: 0755]
pango/reorder-items.c [new file with mode: 0755]
pango/shape.c [new file with mode: 0755]
pangocairo-uninstalled.pc.in [new file with mode: 0755]
pangocairo.pc.in [new file with mode: 0755]
pangoft2-uninstalled.pc.in [new file with mode: 0755]
pangoft2.pc.in [new file with mode: 0755]
pangowin32-uninstalled.pc.in [new file with mode: 0755]
pangowin32.pc.in [new file with mode: 0755]
pangox-uninstalled.pc.in [new file with mode: 0755]
pangox.pc.in [new file with mode: 0755]
pangoxft-uninstalled.pc.in [new file with mode: 0755]
pangoxft.pc.in [new file with mode: 0755]
sanitize-la.sh [new file with mode: 0755]
tests/Makefile.am [new file with mode: 0755]
tests/Makefile.in [new file with mode: 0644]
tests/all-unicode.txt [new file with mode: 0755]
tests/boundaries.utf8 [new file with mode: 0755]
tests/cxx-test.C [new file with mode: 0755]
tests/dump-boundaries.c [new file with mode: 0755]
tests/gen-all-unicode.c [new file with mode: 0755]
tests/runtests.sh [new file with mode: 0755]
tests/runtests.sh.in [new file with mode: 0755]
tests/test-ot-tags.c [new file with mode: 0755]
tests/testboundaries.c [new file with mode: 0755]
tests/testboundaries_ucd.c [new file with mode: 0755]
tests/testcolor.c [new file with mode: 0755]
tests/testiter.c [new file with mode: 0755]
tests/testscript.c [new file with mode: 0755]
tools/Makefile.am [new file with mode: 0755]
tools/Makefile.in [new file with mode: 0644]
tools/gen-color-table.pl [new file with mode: 0755]
tools/gen-script-for-lang.c [new file with mode: 0755]
xmldocs.make [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100755 (executable)
index 0000000..181b49d
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+Owen Taylor <otaylor@redhat.com>, with help from many others.
+See file named THANKS for a list.
diff --git a/COPYING b/COPYING
new file mode 100755 (executable)
index 0000000..bf50f20
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,482 @@
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                   59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+\f
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+\f
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the 
+    Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
+    Boston, MA  02111-1307  USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/ChangeLog b/ChangeLog
new file mode 100755 (executable)
index 0000000..049cc4f
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,5540 @@
+commit 640404de481360206d0c08f7528ff14cf9166814
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 17 21:38:53 2009 -0500
+
+    Release 1.26.1
+
+ NEWS         |   12 ++++++++++++
+ configure.in |    2 +-
+ 2 files changed, 13 insertions(+), 1 deletions(-)
+
+commit df2d2ecbedfcc9fd470313c08f3d7edad148a0d1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 17 21:09:05 2009 -0500
+
+    Fix pangocairo-fc fontsize weirdness
+
+ pango/pangocairo-fcfont.c |    5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+commit d9abcaf566e9cd7f702c98958f99f90fd53b4c0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 17 19:31:23 2009 -0500
+
+    Bug 341481 - pangocairo kerning problem with nonidentity scaling
+
+    Finally fix this embarrassing bug.  The fix is a kludge, but it will
+    be redone for 1.28 (harfbuzz-ng) anyway.
+
+ pango/pango-ot-buffer.c |   56
+ +++++++++++++++++++++++++++++++++++++++++-----
+ pango/pangofc-font.c    |   19 ++++++++++++++++
+ pango/pangofc-private.h |   44 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 113 insertions(+), 6 deletions(-)
+
+commit 4ccabeffc20f899163bf610356871afb197e9bf8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 17 16:20:42 2009 -0500
+
+    Bug 596614 - Pango application receives SIGSEGV on pasting text
+    with U+202E
+
+    Fixed all modules to reverse glyphs if run is rtl.  Except for
+    Hangul module.
+    Fixed pango_shape() to detect that, warn, and reverse.
+
+ modules/indic/indic-fc.c     |    1 +
+ modules/khmer/khmer-fc.c     |    1 +
+ modules/thai/thai-fc.c       |    1 +
+ modules/tibetan/tibetan-fc.c |    1 +
+ pango/glyphstring.c          |    2 --
+ pango/pango-engine.c         |    3 +++
+ pango/pango-impl-utils.h     |   26 +++++++++++++++++++++++++-
+ pango/pango-ot-buffer.c      |   23 ++---------------------
+ pango/shape.c                |   34 +++++++++++++++++++++++++++++++---
+ 9 files changed, 65 insertions(+), 27 deletions(-)
+
+commit 718c533d28cb760e45c7b874420b14003445a9c1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Nov 11 11:57:59 2009 -0500
+
+    Fix typo in previous commit
+
+ pango-view/Makefile.am |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 28e179b4f24e11f2af3b739c6c5c3bd560d2de74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Nov 11 11:03:29 2009 -0500
+
+    Bug 587768 - [patch] Don't build pango-view twice
+
+    Second try.
+
+ pango-view/Makefile.am |   28 +++++++++++++---------------
+ 1 files changed, 13 insertions(+), 15 deletions(-)
+
+commit 16c3f1d491a04eb8b12f209f97904c7862fbb9db
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 10 17:09:31 2009 -0500
+
+    Bug 587768 - [patch] Don't build pango-view twice
+
+    Try to fix parallel build..
+
+ pango-view/Makefile.am |   25 ++++++++++++++++---------
+ 1 files changed, 16 insertions(+), 9 deletions(-)
+
+commit 5f3d21b78679694f76e788e9308062380a0d0c8e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 10 16:44:54 2009 -0500
+
+    Remove REBUILD black magic
+
+    Shouldn't be needed.
+
+ configure.in      |   13 -------------
+ pango/Makefile.am |    4 ++--
+ 2 files changed, 2 insertions(+), 15 deletions(-)
+
+commit 8e9d153733cac83bfc8ce0c068d2af455d0e9a76
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Nov 3 17:11:53 2009 -0500
+
+    Fix leak with non-mmapped fonts
+
+ pango/pango-ot-info.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit bfbe9aea599bc98ffd4640268a66c90d6fa21736
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Oct 29 03:08:42 2009 -0400
+
+    [HB] Add glyph_metrics typedef
+
+ pango/opentype/hb-font.h |    9 +++++++++
+ 1 files changed, 9 insertions(+), 0 deletions(-)
+
+commit cdb7383be41b4ace0e6d9f3a05ac3983e8d4eaf0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Oct 29 03:05:18 2009 -0400
+
+    [HB] Add point_index to get_contour_point()
+
+    Pointed out by Keith Stribley on HarfBuzz list.
+
+ pango/opentype/hb-font.h |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 44164ee60f5ef2fc4f7a03846b60d72eb67ecb0e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Oct 29 03:00:44 2009 -0400
+
+    [HB] Fix lookup_flag ignoring
+
+    Reported by Keith Stribley on HarfBuzz list.
+
+ pango/opentype/hb-ot-layout-common-private.hh |    1 +
+ pango/opentype/hb-ot-layout.cc                |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+commit 078b2d5b20c4c9e8b3f0a11d1d40e5510ef94cf6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Oct 23 16:45:36 2009 -0400
+
+    Bug 594101 - [Indic] character class data updates to support
+    unicode 5.1
+
+    Add classification for new characters.  Patch from Parag AN.
+
+ modules/indic/indic-ot-class-tables.c |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 1038b7959944dd25d7c2a76a3c769eb26b5fd6a2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Oct 22 17:24:21 2009 -0400
+
+    Allow using uninstalled glib
+
+    Reported by mpsuzuki on gtk-i18n-list on 2009-10-09.
+
+ configure.in      |    5 +++++
+ pango/Makefile.am |    4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 72b3642ec8f689eee5463ae8675323d91496238e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Oct 22 17:17:38 2009 -0400
+
+    [configure] Allow using uninstalled cairo
+
+    Reported by mpsuzuki on gtk-i18n-list on 2009-10-16.
+
+ configure.in |    6 ++----
+ 1 files changed, 2 insertions(+), 4 deletions(-)
+
+commit 8598817414ab8bde6c218c6255faf378597394ea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Oct 21 18:26:27 2009 -0400
+
+    Update from vte
+
+ git.mk |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+commit 6cf73f0034b6db8f10a5cdc096c7a5d1ac53af94
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Oct 5 15:31:31 2009 -0400
+
+    Typo
+
+ pango/pangocairo-font.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 8299e480df42f0c1c6481a87c83a6497e76856f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Sep 30 16:35:40 2009 -0400
+
+    Bug 596837 - Typo in pango_cairo_show_layout documentation
+
+ pango/pangocairo-render.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 18b4ad750528cf5018dc7aa53ba37d1a8af44e1f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Sep 21 16:58:52 2009 -0400
+
+    Release 1.26.0
+
+ NEWS         |    6 ++++++
+ configure.in |    4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 07bb283c9f2d5a1403964dc083c981d9b2e4919f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Sep 21 13:58:56 2009 -0400
+
+    [HB] Add comment
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+commit d50615c838ef7b448021dacbe4daa49aa26ea388
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Sep 21 13:43:54 2009 -0400
+
+    [HB] Fix apply_lookup() loop
+
+    Part of Bug 595539 - Regressions in rendering certain Thai sequences
+    with
+    OpenType font
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+commit 73f94ec879476f52adac105570f4cebe5bd02c0c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Sep 21 13:40:38 2009 -0400
+
+    [HB] Fix bug in chain_context_lookup() invocations
+
+    Part of Bug 595539 - Regressions in rendering certain Thai sequences
+    with
+    OpenType font
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 730bed768e8eb4ed14d21bd390403d8bfed71742
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Sep 16 15:43:57 2009 -0400
+
+    Bug 595350 - set LC_ALL=C, not LANG=C
+
+ docs/check.docs  |    4 +++-
+ git.mk           |    2 +-
+ pango/check.defs |    3 ++-
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+
+commit 24bb7774579627b25a61a348ffe0fb25988a12f3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Sep 11 16:57:25 2009 -0400
+
+    Bug 594936 - pango_layout_set_wrap
+
+    Remove wrong optimization in pango_layout_set_wrap().  The assumption
+    that
+    if the layout was not wrapped before, it will not wrap now is
+    simply wrong.
+
+ pango/pango-layout.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit ce01a496c7dad90c672e673c0e7ba8c5de350137
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Sep 11 16:51:34 2009 -0400
+
+    Bug 594934 - pango_layout_copy
+
+    Use memcpy() to copy value fields so we don't miss any.
+
+ pango/pango-layout-private.h |   27 +++++++++++++++------------
+ pango/pango-layout.c         |   27 +++++++--------------------
+ 2 files changed, 22 insertions(+), 32 deletions(-)
+
+commit 33bb108bd8c053de4ce37c6db26dd32ea20f46e2
+Author: Tor Lillqvist <tml@iki.fi>
+Date:   Thu Sep 10 18:49:31 2009 +0300
+
+    Revert "[basic-win32] Increase performance of Uniscribe code"
+
+    Unfortunately this change breaks complex script shaping.
+
+    This reverts commit ea608c0bd7721d3019bed7ef2472289b1ea6fa53.
+
+ modules/basic/basic-win32.c |   13 +++++++------
+ 1 files changed, 7 insertions(+), 6 deletions(-)
+
+commit 7f821fb6f714095c431f2195eb42ea2d288f84af
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Sep 9 20:25:32 2009 -0400
+
+    Only check doc coverage if building docs
+
+ docs/Makefile.am |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 03e20e37a11971de6717c88d392362ec9e858880
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Sep 8 11:41:38 2009 -0400
+
+    Release 1.25.6
+
+ NEWS         |    7 +++++++
+ configure.in |    2 +-
+ 2 files changed, 8 insertions(+), 1 deletions(-)
+
+commit 29f4c73be091fa950269d5923923482905bcd14b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 30 21:02:28 2009 -0400
+
+    [HB] Add TODO item
+
+ pango/opentype/TODO |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit e10a17f28cbb8c6c4bd707b79af7e7d2b1370c16
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 28 17:17:11 2009 -0400
+
+    [HB] Rename DEBUG to TRACE where appropriate
+
+ pango/opentype/hb-open-file-private.hh          |    8 +-
+ pango/opentype/hb-open-type-private.hh          |   50 ++++++------
+ pango/opentype/hb-ot-layout-common-private.hh   |   32 ++++----
+ pango/opentype/hb-ot-layout-gdef-private.hh     |   20 +++---
+ pango/opentype/hb-ot-layout-gpos-private.hh     |   92
+ +++++++++++-----------
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   72 +++++++++---------
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   78
+ ++++++++++----------
+ 7 files changed, 176 insertions(+), 176 deletions(-)
+
+commit a6fbd0752ada8f1ae64b77b09b84202c969a3b9b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 28 17:14:33 2009 -0400
+
+    [HB] Add GSUB/GPOS tracing
+
+ pango/opentype/hb-ot-layout-gpos-private.hh     |   29 ++++++++++++-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   28 ++++++++++++-
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   49
+ ++++++++++++++++++++++-
+ 3 files changed, 98 insertions(+), 8 deletions(-)
+
+commit a9ab729acf465253f29a65481eb8730d1547f974
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 28 16:31:20 2009 -0400
+
+    [HB] Allow enabling different debug facilities individually
+
+ pango/opentype/hb-blob.c               |   28
+ ++++++++++++++++------------
+ pango/opentype/hb-open-type-private.hh |   32
+ ++++++++++++++++++--------------
+ 2 files changed, 34 insertions(+), 26 deletions(-)
+
+commit 3e74e62983e77a83a74be5de3470595e3b6d7f2b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 28 14:01:49 2009 -0400
+
+    Enable silent rules by default
+
+ configure.in |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 735e2efc3369d4ad28a1ab73352232e39f768e27
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 28 09:46:14 2009 -0400
+
+    Fix stupid array growing bug
+
+ pango/opentype/hb-ot-layout.cc |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+commit d82431ec05b92cef903d02d47d8069a9427e96b9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 27 01:32:17 2009 -0400
+
+    [HB] Simplify counting
+
+ pango/opentype/hb-ot-layout.cc |    9 +++++----
+ 1 files changed, 5 insertions(+), 4 deletions(-)
+
+commit 98428c0680625be6737d89bca6104ff95cd7037b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 27 01:16:28 2009 -0400
+
+    Fix bug with lookup_index overflowing our static array
+
+    Part of Bug 593240 - updating pango to latest git master makes
+    things crash
+
+ pango/pango-ot-info.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit ca180e1f0e2a453bd9ae16791b6bba1328cfffeb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 27 00:21:04 2009 -0400
+
+    [HB] Indent
+
+ pango/opentype/hb-blob.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit b16c2664af5be02dfa987f3e8449dcb04d108c00
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 26 18:53:43 2009 -0400
+
+    [HB] Bug 593231 - < c99 compiler dislikes ValueRecord
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+commit 364548d8014ba4e29b486a5d430f23415f27742e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 24 16:52:05 2009 -0400
+
+    Release 1.25.5
+
+ NEWS         |    7 +++++++
+ configure.in |    2 +-
+ 2 files changed, 8 insertions(+), 1 deletions(-)
+
+commit 3831dec6ed827fb7854743413b1936ab65b578b3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 20 15:26:12 2009 -0400
+
+    Update git.mk
+
+ git.mk |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 4c68b4bf575e6d02c658507374c9fb3cb0f958c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 20 14:01:37 2009 -0400
+
+    Bug 592484 -  invalid write in HB
+
+    Fix off-by-one.
+
+ pango/opentype/hb-ot-layout.cc |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 48d7faba771a738504e0c431c29458cac305275f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 20 13:07:50 2009 -0400
+
+    [HB][glib] Make glib unicode funcs static
+
+ pango/opentype/hb-glib.c |   36 +++++++++++++++++-------------------
+ 1 files changed, 17 insertions(+), 19 deletions(-)
+
+commit c18e50d95f6283031e9fe365d914bdcc85f339cc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 19 18:16:50 2009 -0400
+
+    [HB] Fix more casts
+
+ pango/opentype/hb-open-type-private.hh |   10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 6f73b497a2f4d22611a136ef360b68a78547074f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 19 18:07:36 2009 -0400
+
+    [HB] Rename CAIRO_ in macro prefix to HB_
+
+    Hiss!
+
+ pango/opentype/hb-private.h |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 392f1f1ddb24c0e7d1d64ee8d36c739ac6482b81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 19 16:45:41 2009 -0400
+
+    [HB] Remove HB_MEMORY_MODE_READONLY_NEVER_DUPLICATE
+
+    Unlike the rest of the memory-mode enum, this one didn't only
+    describe the access mode of the input memory region.  Remove it.
+
+    If someone wants to inhibit duplicating, they can lock the blob
+    and throw away the key.
+
+    Based on mailing list discussion with Carl Worth.
+
+ pango/opentype/hb-blob.c |   51
+ ++++++++++++++++++++++-----------------------
+ pango/opentype/hb-blob.h |    1 -
+ 2 files changed, 25 insertions(+), 27 deletions(-)
+
+commit 446d7a2cce64aeee26b94f59a3f518e61c6d5c41
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 19 16:17:24 2009 -0400
+
+    [HB] s/writeable/writable/g
+
+ pango/opentype/hb-blob.c               |   38
+ ++++++++++++++++----------------
+ pango/opentype/hb-blob.h               |   10 ++++----
+ pango/opentype/hb-open-type-private.hh |    6 ++--
+ pango/pango-ot-info.c                  |    4 +-
+ 4 files changed, 29 insertions(+), 29 deletions(-)
+
+commit 2bd2cd6ed88671df1d7db1ede9a8c02208cb8f48
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 19 16:07:40 2009 -0400
+
+    [HB] Hide lig_id and component members of hb_glyph_info_t
+
+ pango/opentype/hb-buffer.h |    5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+commit 34810eedcd0fe0c5347a69e511a16b27ef0499d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 19 14:45:24 2009 -0400
+
+    [HB] Fix typo
+
+ pango/opentype/hb-font.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 0a8034ea52c1297e330e75ce5cccb3a6bf602fff
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 18 18:37:36 2009 -0400
+
+    [HB] Add font funcs prototypes
+
+ pango/opentype/hb-font-private.h |    2 --
+ pango/opentype/hb-font.cc        |   14 ++++++--------
+ pango/opentype/hb-font.h         |   23 ++++++++++++++++-------
+ 3 files changed, 22 insertions(+), 17 deletions(-)
+
+commit 82edd870bd4a86ceaeea93afc59e5c3096c740c9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 18 16:41:59 2009 -0400
+
+    Fix a few other pedantic warnings
+
+ pango/opentype/hb-ot-layout-common-private.hh |    2 +-
+ pango/opentype/hb-ot-layout-gdef-private.hh   |    2 +-
+ pango/opentype/hb-ot-layout-gpos-private.hh   |    4 ++--
+ pango/opentype/hb-ot-layout-gsub-private.hh   |    2 +-
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+commit f397c67d5b23b35b6488c00b821f727d2e67cab4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 18 16:38:48 2009 -0400
+
+    [HB] Fix pedantic warnings
+
+ pango/opentype/hb-blob.h           |    2 +-
+ pango/opentype/hb-buffer-private.h |   18 +++++++++---------
+ pango/opentype/hb-buffer.h         |    6 +++---
+ 3 files changed, 13 insertions(+), 13 deletions(-)
+
+commit 6ace51e45c90184fe62ad3efbb0d84fd8e415fde
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 18 16:32:31 2009 -0400
+
+    [HB] Fix more wrong method signatures
+
+ pango/opentype/hb-ot-layout-common-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 602c83982359f98916967dc88da6b5731fc06798
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 18 16:27:48 2009 -0400
+
+    [HB] Fix wrong method signature
+
+ pango/opentype/hb-ot-layout-common-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 8f6e589aaab62f384c6c8dbc4d0087147bc22237
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 18 15:49:23 2009 -0400
+
+    Bug 592194 -  Fix missing _SC_PAGE_SIZE macro
+
+    Autoconfiscate a simple call to mprotect() even more.
+
+ configure.in             |    1 +
+ pango/opentype/hb-blob.c |   94
+ +++++++++++++++++++++++++++++----------------
+ 2 files changed, 61 insertions(+), 34 deletions(-)
+
+commit a90b692a43bc94a7d204ff36422e3b0b3c5ba27d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 19:16:53 2009 -0400
+
+    Release 1.25.4
+
+ NEWS         |   13 +++++++++++++
+ configure.in |    2 +-
+ 2 files changed, 14 insertions(+), 1 deletions(-)
+
+commit cad422da3d653dae3f55eb9fc93d09b8a9530c9d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 19:13:30 2009 -0400
+
+    AM_V_GEN ChangeLog too
+
+ Makefile.am |    3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+commit d4f8da3f4855db24484a8924d883df362561b7ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 18:39:00 2009 -0400
+
+    Bug 592131 -  Add AM_SILENT_RULES
+
+    And sprinkle some $(AM_V_GEN) around. Silent rules are disabled by
+    default.
+
+ configure.in           |    1 +
+ modules/Makefile.am    |    2 +-
+ pango-view/Makefile.am |    3 +--
+ pango/Makefile.am      |   44
+ ++++++++++++++++++++++----------------------
+ 4 files changed, 25 insertions(+), 25 deletions(-)
+
+commit caed415f553a60176b33e30ee37e891cb720e9c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 18:29:37 2009 -0400
+
+    Make pango_interface_age automatic
+
+    For unstable releases, we act as if each micro release has new API.
+    For stable releases, no micro release adds new API.
+
+ configure.in |   10 ++++++++++
+ 1 files changed, 10 insertions(+), 0 deletions(-)
+
+commit 5f256c2fd14b2cd18978a3963c8b49a2b68966f5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 17:10:04 2009 -0400
+
+    [introspection] Don't this gir files, really
+
+ pango/Makefile.am |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 59fbdf8efd88d72c587dc55a22b6eabd7184284b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 17:07:12 2009 -0400
+
+    [Makefile] Remove GIR files from EXTRA_DIST
+
+ pango/Makefile.am |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit 078300ef69ab0855a7cc39503880cbc8b2e23494
+Author: Colin Walters <walters@verbum.org>
+Date:   Mon Aug 17 16:50:57 2009 -0400
+
+    Re-enable introspection, delete PangoX
+
+    This patch relies on the latest GObject Introspection; bump
+    requirement to 0.6.4.
+
+    First, delete the PangoX.gir since it's "incredibly deprecated"
+    in Owen's words =)
+
+    Next, clean up the PangoCairo.gir logic; we need to include the .gir
+    for the relevant font backend (currently just FT2), because the
+    font object gets expanded.
+
+ configure.in      |    2 +-
+ pango/Makefile.am |   69
+ ++++++++++++++++++++--------------------------------
+ 2 files changed, 28 insertions(+), 43 deletions(-)
+
+commit f1d8d01c81b10a8c5ed47fef7a3fba10aa66140c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 17 16:48:13 2009 -0400
+
+    [HB] Avoid int overflow in GPOS
+
+    Bug 592036 - integer overflow bug causes misrendering of Nepali
+    characters
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |   20 ++++++++++----------
+ pango/opentype/hb-private.h                 |    3 +++
+ 2 files changed, 13 insertions(+), 10 deletions(-)
+
+commit a465d3c1854033f2c3c05616bde7762ff0cf2d5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 19:37:18 2009 -0400
+
+    [HB] Simplify loop
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |   31
+ ++++++++++++--------------
+ 1 files changed, 14 insertions(+), 17 deletions(-)
+
+commit 400a17544e80d46ef9d7aaca4d1c33a6e11f5f97
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 19:33:24 2009 -0400
+
+    [HB] Merge mark positionin code between three types of lookups
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |   95
+ ++++++++------------------
+ 1 files changed, 29 insertions(+), 66 deletions(-)
+
+commit ae76417677db1d7a8daf454bf043269479b7910d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 18:42:42 2009 -0400
+
+    [HB] More minor shuffling
+
+ pango/opentype/hb-open-type-private.hh        |    3 ---
+ pango/opentype/hb-ot-layout-common-private.hh |    5 +++++
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 1b91a23d57d1aef4349f28e0154aff68ad855357
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 18:40:56 2009 -0400
+
+    [HB] Move code around
+
+ pango/opentype/hb-open-type-private.hh        |   21
+ +++++++++++++++++++++
+ pango/opentype/hb-ot-layout-common-private.hh |   19 -------------------
+ 2 files changed, 21 insertions(+), 19 deletions(-)
+
+commit 165203e4f57c39d292f4a010561948b58c6196ab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 18:32:56 2009 -0400
+
+    [HB] Correctly sanitize LigatureAttach
+
+ pango/opentype/hb-open-type-private.hh        |   14 ++++++++++----
+ pango/opentype/hb-ot-layout-common-private.hh |    4 ++++
+ pango/opentype/hb-ot-layout-gdef-private.hh   |    4 ++--
+ pango/opentype/hb-ot-layout-gpos-private.hh   |    6 +++---
+ 4 files changed, 19 insertions(+), 9 deletions(-)
+
+commit 8aa69042d86497c1dd45bd4ad89e7f0e247f244f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 18:14:03 2009 -0400
+
+    [HB] Simplify MarkBase and MarkLig too
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |  127
+ ++++++++++-----------------
+ 1 files changed, 48 insertions(+), 79 deletions(-)
+
+commit 279a5bd1bbd085493a1ce882274481a80a443e46
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 17:53:31 2009 -0400
+
+    [HB] Simplify MarkMark
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |   29
+ ++++++++++++++------------
+ 1 files changed, 16 insertions(+), 13 deletions(-)
+
+commit 10bc378f81fb2fd21fd7ef5f8d6242ad18b88132
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 17:31:16 2009 -0400
+
+    [HB] Fix possible int overflows during sanitize
+
+ pango/opentype/TODO                         |    1 -
+ pango/opentype/hb-open-type-private.hh      |   22 ++++++++++++++++++++++
+ pango/opentype/hb-ot-layout-gpos-private.hh |   15 ++++++++-------
+ 3 files changed, 30 insertions(+), 8 deletions(-)
+
+commit 23dd984c1647179d8431c0879e8477f52a626ed0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 16:41:00 2009 -0400
+
+    [HB] Debug output for SANITIZE_MEM()
+
+ pango/opentype/hb-open-type-private.hh |   34
+ +++++++++++++++++++++----------
+ 1 files changed, 23 insertions(+), 11 deletions(-)
+
+commit 397196a3758a4f0e645df876937ccc88d529b865
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 16:25:33 2009 -0400
+
+    [HB] Use inline function for SANITIZE_MEM()
+
+ pango/opentype/hb-open-type-private.hh |   33
+ +++++++++++++++++++------------
+ 1 files changed, 20 insertions(+), 13 deletions(-)
+
+commit 6e5affe549e571c4bfa46be48963001bcc1b3d74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 16:17:32 2009 -0400
+
+    [HB] Use SANITIZE_THIS() when applicable
+
+ pango/opentype/hb-open-type-private.hh |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 578e321d3b5a08b86e6f1576f09973a94924e448
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 14 16:12:22 2009 -0400
+
+    [HB] Add note about auditing sanitize code for overflows
+
+ pango/opentype/TODO                         |    1 +
+ pango/opentype/hb-ot-layout-gpos-private.hh |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+commit d683b37b8817aef334281aada550bf8974fde1a8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 13 17:13:25 2009 -0400
+
+    [HB] Add empty hb_shape() API
+
+ pango/opentype/Makefile.am |    2 +
+ pango/opentype/hb-shape.c  |   40 +++++++++++++++++++++++++++++++++
+ pango/opentype/hb-shape.h  |   53
+ ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 95 insertions(+), 0 deletions(-)
+
+commit f4868084a55e3abd0b45ee2fb7b477e038a81d1a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 13 11:47:08 2009 -0400
+
+    [HB] Bitfield packing *is* very delicate
+
+    Fix the second instance.
+
+ pango/opentype/hb-buffer.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit ea608c0bd7721d3019bed7ef2472289b1ea6fa53
+Author: David E. Hollingsworth <deh@curl.com>
+Date:   Thu Aug 13 15:55:50 2009 +0300
+
+    [basic-win32] Increase performance of Uniscribe code
+
+    A few weeks ago I reported a performance issue regarding the use of
+    Uniscribe in the win32 basic shaper.
+
+    It turns out that the issue was with the use of Uniscribe's
+    SCRIPT_CACHE.  Despite the name, this value is for caching
+    per-font-plus-size values, not per-script values.  See:
+
+      http://msdn.microsoft.com/en-us/library/dd317726(VS.85).aspx
+
+    Since shaping occurs on runs containing a single font, we only need
+    one SCRIPT_CACHE in uniscribe_shape.  I'm including a patch below that
+    does this.  With the patch applied, the time for one of my tests went
+    from 20s to .3s.
+
+ modules/basic/basic-win32.c |   13 ++++++-------
+ 1 files changed, 6 insertions(+), 7 deletions(-)
+
+commit b4f10583ea84d02ed0278fc2cb2846aaf075864d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 13 05:25:23 2009 -0400
+
+    Bug 591511 – hh-blob.c does not compile using mingw on windows
+
+    Check for sys/mman.h, not mprotect().
+
+ configure.in             |    2 +-
+ pango/opentype/hb-blob.c |    8 ++++----
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 87f9fedcd27baa62043cb59b03dfd5ce0a9214db
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 13 05:20:46 2009 -0400
+
+    [HB] Fix buffer sizing issue with mingw gcc
+
+    Bit field packing is a delicate field.  Issue reported in comment
+    3 here:
+    http://bugzilla.gnome.org/show_bug.cgi?id=591511
+
+ pango/opentype/hb-buffer-private.h |   14 +++++++-------
+ 1 files changed, 7 insertions(+), 7 deletions(-)
+
+commit c4f35720bc1310c37b41af134dace628ff35a221
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 19:56:26 2009 -0400
+
+    Release 1.25.3
+
+ NEWS         |   16 ++++++++++++++++
+ configure.in |    4 ++--
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+commit 4770396ca172bab95dd4d0b34a272816f1b26922
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 19:45:50 2009 -0400
+
+    Bug 591413 – needs to link with libstdc++
+
+    Enforce -fno-exceptions better.
+
+ configure.in               |   29 ++++++++++++++++++++++++++---
+ pango/opentype/Makefile.am |    2 +-
+ 2 files changed, 27 insertions(+), 4 deletions(-)
+
+commit 7380a171e933b8690146d2976caf0c5abafbed91
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 19:36:29 2009 -0400
+
+    Bug 591511 – hb-blob.c does not compile using mingw on windows
+
+    Only call mprotect() when available.  For optimal performance, a win32
+    way to make memory writeable needs to be added.
+
+ configure.in             |    3 ++-
+ pango/opentype/hb-blob.c |    8 ++++++++
+ 2 files changed, 10 insertions(+), 1 deletions(-)
+
+commit 2059465b5d9440126d99a78aae7f785d89572194
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 19:23:16 2009 -0400
+
+    [HB] Add comment
+
+ pango/opentype/hb-buffer-private.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 7b1b94b255d616759672b03b2cf4b88aa013271a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 18:36:36 2009 -0400
+
+    New public API: pango_glyph_item_get_logical_widths()
+
+ docs/pango-sections.txt  |    1 +
+ docs/tmpl/glyphs.sgml    |   10 +++++++
+ pango/glyphstring.c      |   39 +++--------------------------
+ pango/pango-glyph-item.c |   60
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ pango/pango-glyph-item.h |    3 ++
+ pango/pango-layout.c     |    5 +--
+ pango/pango.def          |    1 +
+ 7 files changed, 81 insertions(+), 38 deletions(-)
+
+commit 1f1b4df1d08f5b9a8e85d9282240aaaf3d8d8023
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 18:13:37 2009 -0400
+
+    Fix compiler warnings
+
+ pango/pangoft2.c      |    2 +-
+ pango/pangoxft-font.c |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit a38803a01f9e7f0cddd98c9b14ce8f9c1d878620
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 18:11:03 2009 -0400
+
+    Remove G_GNUC_PURE attr from pango_glyph_string_get_width()
+
+    Since the glyph widths can be adjusted directly.
+
+ pango/pango-glyph.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 075e9925cc9d4675e5a6be65e599e4ee97f2d018
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 17:50:19 2009 -0400
+
+    [OT] Enlarge lookup array
+
+    We'll fix it properly later when ruleset logic is moved into HarfBuzz.
+    In the mean time, IranNastaliq was hitting the 100 limit.
+
+ pango/pango-ot-info.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 68b88d292b4be0bffe321c3da84891c4a7b3ba6f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 16:51:46 2009 -0400
+
+    [layout] clear state->log_widths after freeing
+
+ pango/pango-layout.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 1e53d4d5904445c740a374ea8492935f95bf1654
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 16:50:28 2009 -0400
+
+    [HB] Always clear positions if dirty, before returning to user
+
+ pango/opentype/hb-buffer.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 141dfa186403bb22e1e3875fdc263d402b2abb1d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 16:47:27 2009 -0400
+
+    [HB] Fix _hb_buffer_next() when positioning
+
+    We were copying glyphs to output.  This should not happen when in
+    GPOS.  Back then it was fine, then some optimizations broke then
+    assumption.
+
+ pango/opentype/hb-buffer-private.h |    1 +
+ pango/opentype/hb-buffer.c         |   12 ++++++++++++
+ 2 files changed, 13 insertions(+), 0 deletions(-)
+
+commit 996eab4e5f35432692fc76939a2f586a1298c1da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 15:55:23 2009 -0400
+
+    [HB] Fixed signedness warnings
+
+ pango/opentype/hb-open-type-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 4d5bd658c7b78392d24ad4cc82d800b6d0fc8434
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 15:48:44 2009 -0400
+
+    [HB] Ouch.  Fix compilation.
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit ebdcfbeb5aeb3e827326844f2f942570e503e26a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 12 15:40:04 2009 -0400
+
+    [HB] Fix invalid access / overflow on x86-64
+
+    Bug 591557 – [HB] crash scrolling the evolution message list
+    Bug 591576 – crashed with SIGSEGV at pango
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |   21 ++++++++++++---------
+ pango/opentype/hb-ot-layout-gsub-private.hh |    2 --
+ 2 files changed, 12 insertions(+), 11 deletions(-)
+
+commit 6b7265c4d6fab1181d0453a845b67ab53fb19d2e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 11 17:06:57 2009 -0400
+
+    Bug 591465 – Gimp crashes upon opening the font selection dialog
+
+    Initialize count variables.
+
+ pango/pango-ot-info.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit c556ca970a90850b6c6a96033bb862e1ceb00866
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 11 11:13:04 2009 -0400
+
+    [doc] Update doc templates
+
+ docs/tmpl/atsui-fonts.sgml |    9 +++++++++
+ 1 files changed, 9 insertions(+), 0 deletions(-)
+
+commit c99c7784e5c65e9c67721ec7335bce57cbd59fe3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 11 10:29:49 2009 -0400
+
+    Release 1.25.2
+
+ NEWS         |    8 ++++++++
+ configure.in |    4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit 6035823cb335de9b05c4446935ea1d09d58c8921
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 11 10:31:22 2009 -0400
+
+    [doc] Update for ATSUI change
+
+    Bug 562100 – docs check fails
+
+ docs/pango-sections.txt |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 954319c6eb2eb3dc74a3e271ee5ae6f1ce12ee32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 11 10:09:19 2009 -0400
+
+    Bug 591409 – crash in firefox.  Handle non-mmapped FT_Face
+
+ pango/pango-ot-info.c |   50
+ +++++++++++++++++++++++++++++++++++++++---------
+ 1 files changed, 40 insertions(+), 10 deletions(-)
+
+commit 620858ee966c7999b206dd3a883542a1057a8d41
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:50:51 2009 -0400
+
+    [HB] Add hb_font_funcs_make_immutable()
+
+ pango/opentype/hb-font-private.h |    4 ++++
+ pango/opentype/hb-font.cc        |   17 +++++++++++++++--
+ pango/opentype/hb-font.h         |    3 +++
+ 3 files changed, 22 insertions(+), 2 deletions(-)
+
+commit 3f57b1a9e78a50651a6dcca7443085bf9fc307b2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:45:57 2009 -0400
+
+    [HB] Add missing initializer
+
+ pango/opentype/hb-font.cc |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+commit 106c0db2c0d88d956a3e2184259c19948d9ea4b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:40:28 2009 -0400
+
+    [OT] Hookup glib unicode funcs
+
+ pango/opentype/hb-buffer.c     |   14 +++++++-------
+ pango/opentype/hb-glib.c       |    4 +++-
+ pango/opentype/hb-glib.h       |    4 ++--
+ pango/opentype/hb-ot-layout.cc |   10 +++++-----
+ pango/opentype/hb-private.h    |    2 +-
+ pango/pango-ot-info.c          |    2 ++
+ pango/pango-ot-private.h       |    1 +
+ 7 files changed, 21 insertions(+), 16 deletions(-)
+
+commit 5586ef604f0212f8edebbbffbe7596d3bdca3474
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:35:05 2009 -0400
+
+    [HB] Add hb-glib
+
+ pango/opentype/Makefile.am          |    4 ++-
+ pango/opentype/hb-glib.c            |   56
+ +++++++++++++++++++++++++++++++++++
+ pango/opentype/hb-glib.h            |   41 +++++++++++++++++++++++++
+ pango/opentype/hb-unicode-private.h |    2 +-
+ pango/opentype/hb-unicode.c         |   10 +++---
+ pango/opentype/hb-unicode.h         |    6 ++--
+ 6 files changed, 109 insertions(+), 10 deletions(-)
+
+commit e434cc3d4f720a453eaff20f8d6ab61ae098c4a0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:25:28 2009 -0400
+
+    [HB] Add hb_unicode_funcs_make_immutable()
+
+ pango/opentype/hb-unicode-private.h |    2 ++
+ pango/opentype/hb-unicode.c         |   22 +++++++++++++++++-----
+ pango/opentype/hb-unicode.h         |    2 ++
+ 3 files changed, 21 insertions(+), 5 deletions(-)
+
+commit 8b3ad4afc0ce0f4db72142e1a6ee7883e5702dd6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:21:33 2009 -0400
+
+    [HB] Use nil unicode funcs in nil face
+
+ pango/opentype/hb-font.cc           |    7 ++++---
+ pango/opentype/hb-unicode-private.h |    3 +++
+ pango/opentype/hb-unicode.c         |    2 +-
+ 3 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 4c1f130ea8328ff492e72b9a0eebbe6a083d7b7a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 23:05:05 2009 -0400
+
+    [HB] Initialize unicode funcs to nil getters
+
+ pango/opentype/hb-unicode.c |   29 +++++++++++++++++++----------
+ 1 files changed, 19 insertions(+), 10 deletions(-)
+
+commit f2fab897d32061d9a0329384cd4b0fd71748ea97
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 22:58:56 2009 -0400
+
+    [HB] Flesh out Unicode funcs
+
+ pango/opentype/hb-object-private.h  |    2 +-
+ pango/opentype/hb-unicode-private.h |   12 +++----
+ pango/opentype/hb-unicode.c         |   67
+ ++++++++++++++++++++++++++++++----
+ pango/opentype/hb-unicode.h         |    3 --
+ 4 files changed, 65 insertions(+), 19 deletions(-)
+
+commit cedd227822a0c8540fff4152b302e4d701fcac81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 22:47:57 2009 -0400
+
+    [HB] Implement buffer UTF-X input
+
+ pango/opentype/hb-buffer.c |  110
+ ++++++++++++++++++++++++++++++++++++++++++++
+ pango/opentype/hb-buffer.h |   12 ++--
+ 2 files changed, 116 insertions(+), 6 deletions(-)
+
+commit 640709e6008ffcd9dc969aec71fcd717acbb8797
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 21:10:37 2009 -0400
+
+    [HB] Add buffer UTF-X API
+
+ pango/opentype/hb-buffer.h |   21 +++++++++++++++++++++
+ 1 files changed, 21 insertions(+), 0 deletions(-)
+
+commit dfa2cfce0dac5ba1d9f87aea5ff3ab3ed36be6ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 20:59:25 2009 -0400
+
+    [HB] Add hb_buffer_reverse()
+
+ pango/opentype/hb-buffer.c |   32 +++++++++++++++++++++++++++++---
+ pango/opentype/hb-buffer.h |    7 +++++++
+ 2 files changed, 36 insertions(+), 3 deletions(-)
+
+commit 200ba28b0f0e1b90e5f958960b62b0fe657be3ba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 20:24:49 2009 -0400
+
+    [HB] Reuse the positions array as alt string array
+
+ pango/opentype/hb-buffer-private.h |    1 -
+ pango/opentype/hb-buffer.c         |   28 +++++++++-------------------
+ 2 files changed, 9 insertions(+), 20 deletions(-)
+
+commit a6abd02a45946959a4f3c64fb25cb84d83913e2a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 20:05:16 2009 -0400
+
+    [HB] Start adding Unicode funcs
+
+ pango/opentype/Makefile.am          |    3 +
+ pango/opentype/hb-font-private.h    |   29 +----
+ pango/opentype/hb-font.cc           |  163 +++++++-------------------
+ pango/opentype/hb-font.h            |  140 ++++++++---------------
+ pango/opentype/hb-unicode-private.h |   54 +++++++++
+ pango/opentype/hb-unicode.c         |   89 ++++++++++++++
+ pango/opentype/hb-unicode.h         |  220
+ +++++++++++++++++++++++++++++++++++
+ pango/pango-ot-info.c               |    2 +-
+ 8 files changed, 464 insertions(+), 236 deletions(-)
+
+commit 0934f1596280945c07c733cdc81acb3275835a53
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 19:00:36 2009 -0400
+
+    [HB] Put C++ inline's back
+
+    Apparetly in C++, inline means a totally different thing.
+
+ pango/opentype/hb-open-file-private.hh          |   14 +++++++-------
+ pango/opentype/hb-open-type-private.hh          |   16 ++++++++--------
+ pango/opentype/hb-ot-layout-common-private.hh   |   12 ++++++------
+ pango/opentype/hb-ot-layout-gdef-private.hh     |    4 ++--
+ pango/opentype/hb-ot-layout-gpos-private.hh     |   12 ++++++------
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   12 ++++++------
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   12 ++++++------
+ 7 files changed, 41 insertions(+), 41 deletions(-)
+
+commit 5a53c4d3c134dfc502a91783106374e6e158b225
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 14:45:44 2009 -0400
+
+    Add CXX check to configure
+
+ configure.in |   11 +----------
+ 1 files changed, 1 insertions(+), 10 deletions(-)
+
+commit b2ff4fa41d33af6c3f784d26667d5aa2ad81ebd3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 13:57:02 2009 -0400
+
+    [HB] Don't override CXX compiler
+
+    Just add couple of options to it (still assuming gcc)
+
+ pango/opentype/Makefile.am |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+commit e6e9681411d07bbbca4c2c00052896aab3459fef
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 11:50:30 2009 -0400
+
+    Release 1.25.1
+
+ NEWS         |   18 ++++++++++++++++++
+ configure.in |    4 ++--
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+commit a2017573b50a7b739dab20f343a60ee7e2ea322f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 11:57:15 2009 -0400
+
+    [OT] Remove list of private (and gone) symbols from public def file
+
+    Oops!
+
+ pango/pangoft2.def |    3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+commit 7eea3552420ab23562c44777fceba91f5da5d883
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 11:49:57 2009 -0400
+
+    Revert "Build introspection again"
+
+    This reverts commit 853f3ddd12ea2fbf3bed551ebfd542536e7f42e0.
+    The introspection stuff doesn't hook into the build system correctly
+    and hence breaks "distcheck".  Need to look into it again.
+
+ pango/Makefile.am |   31 ++++++++++++++++---------------
+ 1 files changed, 16 insertions(+), 15 deletions(-)
+
+commit f5a10f5ce603cdd7dc70513c09975ca0535089b2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 10 09:35:11 2009 -0400
+
+    [HB] Indent
+
+ pango/opentype/hb-ot-layout.h |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 7736059a852b4951ae2a14f02bb552262dd179fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 9 22:25:17 2009 -0400
+
+    [HB] Remove unused code
+
+ pango/opentype/hb-ot-layout-gdef-private.hh |   10 ----------
+ 1 files changed, 0 insertions(+), 10 deletions(-)
+
+commit 845e7a7a35bd65af32a188b6cf89adb611ac35bc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 9 22:10:39 2009 -0400
+
+    [HB] Add a NEXT() macro
+
+ pango/opentype/hb-open-type-private.hh          |    2 +
+ pango/opentype/hb-ot-layout-common-private.hh   |    4 +-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |    8 +++---
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   24
+ +++++++++++-----------
+ 4 files changed, 20 insertions(+), 18 deletions(-)
+
+commit 4cd222b23494b2dd3511169be90f382922c5f210
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 9 18:31:47 2009 -0400
+
+    [HB] Remove done TODO item
+
+ pango/opentype/TODO |    1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+commit 88bfabba705331762f369364bbb38becf56d83ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 9 13:05:08 2009 -0400
+
+    [HB] Print mark sets in main.cc
+
+ pango/opentype/main.cc |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 0956094754c054a9cafc7ead4bac24ca2c77439a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 8 16:57:27 2009 -0400
+
+    [HB] Remove hb_ot_layout_table_find_feature()
+
+    That function doesn't make much sense as multiple features in the
+    table may
+    have the same tag.
+
+ pango/opentype/hb-ot-layout.cc |   16 ----------------
+ pango/opentype/hb-ot-layout.h  |    6 ------
+ 2 files changed, 0 insertions(+), 22 deletions(-)
+
+commit 3616d0b02412d86aa8d2370e67002c2ef5b31da3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 8 16:53:23 2009 -0400
+
+    [HB] Rename hb_ot_layout_feature_mask_t to hb_mask_t
+
+ pango/opentype/TODO                         |    1 -
+ pango/opentype/hb-buffer-private.h          |    4 +-
+ pango/opentype/hb-buffer.c                  |   12 ++++----
+ pango/opentype/hb-buffer.h                  |    4 +-
+ pango/opentype/hb-common.h                  |    1 +
+ pango/opentype/hb-ot-layout-gpos-private.hh |   12 ++++----
+ pango/opentype/hb-ot-layout-gsub-private.hh |   14 +++++-----
+ pango/opentype/hb-ot-layout.cc              |   18 +++++++-------
+ pango/opentype/hb-ot-layout.h               |   34
+ +++++++-------------------
+ pango/pango-ot-info.c                       |    4 +-
+ 10 files changed, 44 insertions(+), 60 deletions(-)
+
+commit 005058069f1638e207859c2898129fd1375458d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 8 16:37:22 2009 -0400
+
+    [HB] Fix bug introduced recently
+
+ pango/opentype/hb-open-type-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit c899bfddd1aaa0f0b4242910080f80a9889cb27c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Fri Aug 7 19:46:30 2009 -0400
+
+    [HB] Remove clumsy macros and improve API
+
+ pango/opentype/TODO                             |    2 -
+ pango/opentype/hb-open-file-private.hh          |   41 ++++++-
+ pango/opentype/hb-open-type-private.hh          |  104 +----------------
+ pango/opentype/hb-ot-layout-common-private.hh   |  103 ++++++++++++----
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   35 +++++-
+ pango/opentype/hb-ot-layout.cc                  |  146
+ ++++++++---------------
+ pango/opentype/hb-ot-layout.h                   |  101 +++++++---------
+ pango/pango-ot-info.c                           |   96 ++++++----------
+ 8 files changed, 274 insertions(+), 354 deletions(-)
+
+commit ca89182f510d3627526b3f5e7379ce5a89440354
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 18:34:47 2009 -0400
+
+    [HB] Fix various XXX issues
+
+ pango/opentype/hb-open-type-private.hh      |   13 ++++++++++---
+ pango/opentype/hb-ot-layout-gdef-private.hh |    5 ++---
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+commit eb3029af018c1e70a3bc387fee6a9fa7373d06c4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 18:28:45 2009 -0400
+
+    [HB] Remove unused var
+
+ pango/opentype/hb-ot-layout-private.h |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit a5e0c175ef3b63b3db53ff861f8847ffe9cea03d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 18:28:00 2009 -0400
+
+    [HB] Remove another stale XXX
+
+ pango/opentype/hb-ot-layout.cc |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit 2b067b28aee93c2275644b0a1dc3b04ad751bda6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 18:27:28 2009 -0400
+
+    [HB] Rebrand XXX as TODO
+
+ pango/opentype/hb-open-file-private.hh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit bdf7aec5550061d8924673dbebda0221eec45dfd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 18:26:38 2009 -0400
+
+    [HB] Remove stale XXX
+
+ pango/opentype/hb-blob.c |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit 374f30c9d62a0559d71bbd610b10249d049e7778
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 18:24:55 2009 -0400
+
+    [HB] Fix unaligned access
+
+ pango/opentype/hb-open-type-private.hh |   20 +++++++++++++++++---
+ pango/opentype/hb-private.h            |   22 ++++++++++++++++++++++
+ 2 files changed, 39 insertions(+), 3 deletions(-)
+
+commit d653b893b1cf5def17dda4dbcb1e0e70e8f1bae2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 14:28:18 2009 -0400
+
+    [HB] Remove a few 'inline's, though the compiler mostly ignores them
+
+ pango/opentype/hb-open-file-private.hh          |    1 -
+ pango/opentype/hb-open-type-private.hh          |   16 ++++++++--------
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    6 +++---
+ 3 files changed, 11 insertions(+), 12 deletions(-)
+
+commit d898dc6ff2a2ebdfcccef59ec3c044b7542b1009
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 13:33:51 2009 -0400
+
+    [HB] Fix blob to use a actual mutex
+
+ pango/opentype/hb-blob.c           |  125
+ ++++++++++++++++++++++++++----------
+ pango/opentype/hb-object-private.h |    4 +-
+ pango/opentype/hb-private.h        |   20 ++++--
+ 3 files changed, 106 insertions(+), 43 deletions(-)
+
+commit 991de7d8d973cf914b4038348370c2ad86c7ce7f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 12:32:35 2009 -0400
+
+    [HB] Use glib again
+
+ pango/opentype/Makefile.am         |    5 ++-
+ pango/opentype/hb-blob.c           |    4 +-
+ pango/opentype/hb-object-private.h |   19 ++++----------
+ pango/opentype/hb-private.h        |   45
+ ++++++++++++++++++++---------------
+ 4 files changed, 37 insertions(+), 36 deletions(-)
+
+commit d29e8fcd57cd62627c4fdbbaf4cbcf2e58c5df89
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 12:12:25 2009 -0400
+
+    [OT] Remove SFNT special-casing.  HB knows how to do that
+
+ pango/pango-ot-info.c |   30 +++++++++++++-----------------
+ 1 files changed, 13 insertions(+), 17 deletions(-)
+
+commit 6ab6f0042aa081007af8a1ae7e8871c8a6f13ab2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 10:40:12 2009 -0400
+
+    [OT] Fix crash with non-SFNT fonts
+
+ pango/pango-ot-info.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 7a1539df497997a4d97b9d27cfb082454e4ab694
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 10:37:02 2009 -0400
+
+    [OT] Make sure we own face generic data before using it
+
+ pango/pango-ot-info.c |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+commit 20588ed32aadba157bb2fcf1c8b2447890854234
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 10:27:38 2009 -0400
+
+    [HB] Improve debug output
+
+ pango/opentype/hb-open-type-private.hh |    7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 6caa02aee9d614077c9ae4b5dfe8fec0058f7356
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Aug 6 10:24:49 2009 -0400
+
+    [HB] Minor
+
+ pango/opentype/hb-private.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 1761cd11cb12b033df73ae265900733c0d8f4231
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 5 15:35:02 2009 -0400
+
+    [HB] Add a few TODO items
+
+ pango/opentype/TODO |    8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 895a98508dc408bd232dadb33bb5ac313b96ffbb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 5 15:27:42 2009 -0400
+
+    [HB] Improve debug output
+
+ pango/opentype/hb-open-type-private.hh |    8 ++++++++
+ 1 files changed, 8 insertions(+), 0 deletions(-)
+
+commit 1aab84b8b2ed0f35fcf5265e6b8432d8ecc07162
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 5 15:21:48 2009 -0400
+
+    [HB] Fix blob unlock
+
+ pango/opentype/hb-blob.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 77bde84243e5e03ffaf6940678ca920e00eea253
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 5 15:20:34 2009 -0400
+
+    [HB] Improve debug output and fix mprotect bug
+
+ pango/opentype/hb-blob.c               |   57
+ +++++++++++++++++++++++++++----
+ pango/opentype/hb-open-type-private.hh |   30 ++++++++---------
+ pango/opentype/hb-private.h            |    3 +-
+ 3 files changed, 65 insertions(+), 25 deletions(-)
+
+commit 0fc28b73eb32a6ac7566fb1d4ee0a3e07eac1b16
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 5 14:52:03 2009 -0400
+
+    [HB] Minor
+
+ pango/opentype/hb-private.h |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit c96b2a6a3b2b2bb106163254b034a8fdcc3081e5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Aug 5 14:49:25 2009 -0400
+
+    [HB] Fix build of main.cc
+
+ pango/Makefile.am          |    4 ++--
+ pango/opentype/Makefile.am |    8 ++++----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 413af41134a5a1686191fdfe30dab2179f8c042d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 23:43:40 2009 -0400
+
+    [HB] turn debugging off
+
+ pango/opentype/hb-private.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit f250cc489b961d77e5104c16d030ed495c1c4b46
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 23:42:57 2009 -0400
+
+    Update doc templates
+
+ docs/tmpl/atsui-fonts.sgml |    9 ---------
+ docs/tmpl/opentype.sgml    |    2 +-
+ 2 files changed, 1 insertions(+), 10 deletions(-)
+
+commit 85c2e96bee9c19cec66f2b7fefabcab1bb1fe57f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 23:30:32 2009 -0400
+
+    [HB] Fix another sanitize() bug;  hopefully it's the last one
+
+ pango/opentype/hb-ot-layout-common-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 2e28925934eac99d59ba3a9257071e0e735d0819
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 23:24:35 2009 -0400
+
+    [HB] Fix a couple other sanitize() bugs
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |    4 ++--
+ pango/opentype/hb-ot-layout-gsub-private.hh |    4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 4928a22c1eb696d4f9b2d52837ac229c0eb63307
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 23:01:23 2009 -0400
+
+    [HB] More debugging output
+
+ pango/opentype/hb-open-type-private.hh |   45
+ ++++++++++++++++++++++++++++---
+ 1 files changed, 40 insertions(+), 5 deletions(-)
+
+commit a990ba0d2b8599ee3eab8bea6ac96aec99b1ee1d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 22:55:44 2009 -0400
+
+    [HB] Fix fatal Sanitizer bug
+
+ pango/opentype/hb-open-type-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 7762880223a110e41cb1f1c256564f6809747fb8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 22:43:47 2009 -0400
+
+    [HB] Add missing sanitize
+
+ pango/opentype/hb-open-file-private.hh |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit b4c1057497e2498a3391b2536aa1fbc7efe9723a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 22:35:36 2009 -0400
+
+    [HB] Add sanitize debugging facilities
+
+ pango/opentype/hb-open-file-private.hh          |    4 ++
+ pango/opentype/hb-open-type-private.hh          |   43
+ ++++++++++++++++++++---
+ pango/opentype/hb-ot-layout-common-private.hh   |   17 +++++++++
+ pango/opentype/hb-ot-layout-gdef-private.hh     |   10 +++++
+ pango/opentype/hb-ot-layout-gpos-private.hh     |   28 +++++++++++++++
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   18 +++++++++
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   16 ++++++++
+ pango/opentype/hb-private.h                     |    6 +++-
+ 8 files changed, 136 insertions(+), 6 deletions(-)
+
+commit 076b06fdb85cd64e2a460ccb383b964dee31ebd7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 22:06:57 2009 -0400
+
+    [HB] Rename open-types to open-type; beauty
+
+ pango/opentype/Makefile.am                    |    2 +-
+ pango/opentype/hb-open-file-private.hh        |    2 +-
+ pango/opentype/hb-open-type-private.hh        |  565
+ +++++++++++++++++++++++++
+ pango/opentype/hb-open-types-private.hh       |  565
+ -------------------------
+ pango/opentype/hb-ot-layout-common-private.hh |    2 +-
+ 5 files changed, 568 insertions(+), 568 deletions(-)
+
+commit b4cfda4e811852a1ad11aa3686c95600b1d5d0c0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 21:47:29 2009 -0400
+
+    [HB] Save edit even if not writeable
+
+ pango/opentype/hb-open-types-private.hh |    6 ++----
+ 1 files changed, 2 insertions(+), 4 deletions(-)
+
+commit c63d3b1b1fbe7a796f2722b467830ce726b78619
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 21:45:40 2009 -0400
+
+    Fix warnings
+
+ pango/pangofc-fontmap.c |    5 +----
+ pango/querymodules.c    |    2 +-
+ 2 files changed, 2 insertions(+), 5 deletions(-)
+
+commit 50295f03b7684e5fb72e3446d0ae3dcf3cacb384
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 21:42:23 2009 -0400
+
+    [HB] Fix warnings
+
+ pango/opentype/hb-open-file-private.hh      |    1 +
+ pango/opentype/hb-open-types-private.hh     |    5 +++++
+ pango/opentype/hb-ot-layout-gsub-private.hh |    3 +--
+ 3 files changed, 7 insertions(+), 2 deletions(-)
+
+commit cb971493ec7013eaee032cbc6e3f399a413808fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 21:35:32 2009 -0400
+
+    [HB] Avoid infinite recusion in Extension sanitize()
+
+ pango/opentype/hb-ot-layout-gpos-private.hh |    1 +
+ pango/opentype/hb-ot-layout-gsub-private.hh |    1 +
+ 2 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 23663fe3b506d0f9b44168dcf0b0a80d102b0877
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 21:32:57 2009 -0400
+
+    [HB] Hook Sanitizer up.  Hell's breaking loose right now
+
+ pango/opentype/hb-font.cc               |    7 ++-----
+ pango/opentype/hb-open-types-private.hh |    2 +-
+ pango/opentype/hb-ot-layout.cc          |   12 ++++++------
+ 3 files changed, 9 insertions(+), 12 deletions(-)
+
+commit d55d065f2ad518879ae1992f13d1b86e109548a1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 21:32:06 2009 -0400
+
+    [HB] Fix leak
+
+ pango/opentype/hb-ot-layout.cc |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit c04edb57948948bc2fcb24060bf12bdb6dfcebb9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 20:52:47 2009 -0400
+
+    [HB] Add Sanitizer
+
+ pango/opentype/hb-open-types-private.hh |   58
+ ++++++++++++++++++++++++++++---
+ 1 files changed, 53 insertions(+), 5 deletions(-)
+
+commit 64563fcff29aeac442f152c4643328730184763a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 20:50:18 2009 -0400
+
+    [HB] Add XXX
+
+ pango/opentype/hb-open-file-private.hh |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 02c12b3802bfe4163d1b19a6a3a1daaf947f192d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 20:27:05 2009 -0400
+
+    [HB] Minor cleanup
+
+ pango/opentype/hb-ot-layout-gdef-private.hh     |    2 +-
+ pango/opentype/hb-ot-layout-gpos-private.hh     |    2 +-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |    2 +-
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    4 ++--
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 782943efe043e2bc1ecf973271505471b469f185
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 19:31:02 2009 -0400
+
+    [HB] Shuffle code around
+
+ pango/opentype/hb-open-types-private.hh |  127
+ ++++++++++++++++---------------
+ 1 files changed, 65 insertions(+), 62 deletions(-)
+
+commit d327d7fed4068f0fd69673cbc73b22d57476baa2
+Merge: 6a4933a 091be0f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 15:59:23 2009 -0400
+
+    Merge branch 'master' into harfbuzz-ng
+
+commit 6a4933ab14b6786fc7f347f1e1c41c0b038a0a6f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 15:28:49 2009 -0400
+
+    [HB] More sanitize infrastructure
+
+ pango/opentype/hb-open-types-private.hh |   29
+ ++++++++++++++++++++++++++++-
+ 1 files changed, 28 insertions(+), 1 deletions(-)
+
+commit f92f7d301c7219cc1478759e2a5729cfba821529
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 15:07:24 2009 -0400
+
+    [HB] open-file sanitize()
+
+ pango/opentype/hb-open-file-private.hh  |   46
+ ++++++++++++++++++++++++++++---
+ pango/opentype/hb-open-types-private.hh |   13 +++++++++
+ 2 files changed, 55 insertions(+), 4 deletions(-)
+
+commit c436b687c4d9ba59d0badbd8edb37c936cc3bcc9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 14:42:46 2009 -0400
+
+    [HB] Tag sanitize()
+
+ pango/opentype/hb-open-types-private.hh       |    8 ++++++++
+ pango/opentype/hb-ot-layout-common-private.hh |    6 +-----
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+commit 7e7f9f5a7f6aef9bacd9782b943883e127aae49b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 14:33:23 2009 -0400
+
+    [HB] GDEF sanitize()
+
+ pango/opentype/hb-ot-layout-gdef-private.hh     |   54
+ +++++++++++++++++++++++
+ pango/opentype/hb-ot-layout-gpos-private.hh     |    2 +-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |    2 +-
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ 4 files changed, 57 insertions(+), 3 deletions(-)
+
+commit 091b0e7a2f0799235b95ed80ab35302d1eaf849c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 14:27:56 2009 -0400
+
+    [HB] Fix Extension sanitize()
+
+ pango/opentype/hb-ot-layout-gpos-private.hh     |    3 ++-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |    3 ++-
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    2 +-
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 14ac615c743186c8aa86691b99d7fef8bfa73f32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 14:12:46 2009 -0400
+
+    [HB] Remove stale TODO
+
+ pango/opentype/hb-ot-layout.cc |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit 7a0a97bc1b8ee09004140fdec8529d52f5702c18
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 14:10:39 2009 -0400
+
+    [HB] Hookup NEUTER()
+
+ pango/opentype/hb-open-types-private.hh |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit b2eb172416f9ad32a60bb33a26df6bf40ae69453
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 13:57:41 2009 -0400
+
+    [HB] Fix mix warnings
+
+ pango/opentype/Makefile.am                    |    2 +-
+ pango/opentype/hb-font.cc                     |   15 +++------------
+ pango/opentype/hb-open-types-private.hh       |    2 +-
+ pango/opentype/hb-ot-layout-common-private.hh |    6 +++---
+ pango/opentype/hb-ot-layout-gdef-private.hh   |    2 +-
+ pango/opentype/hb-ot-layout-gpos-private.hh   |    9 ++++-----
+ pango/opentype/hb-ot-layout.cc                |    2 +-
+ pango/opentype/main.cc                        |    4 +---
+ 8 files changed, 15 insertions(+), 27 deletions(-)
+
+commit 36c73171738ce9e51c370ad54753a8f882172e75
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 13:30:49 2009 -0400
+
+    [HB] GPOS sanitize()
+
+ pango/opentype/hb-open-types-private.hh     |   22 +++-
+ pango/opentype/hb-ot-layout-gpos-private.hh |  195
+ ++++++++++++++++++++++++++-
+ pango/opentype/hb-ot-layout-gsub-private.hh |    2 -
+ 3 files changed, 213 insertions(+), 6 deletions(-)
+
+commit b78fad2673a7477c4ee16ffa416409cd1a2eac5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 12:26:26 2009 -0400
+
+    [HB] Sanitize DeviceTable
+
+ pango/opentype/hb-open-types-private.hh       |    8 ++++----
+ pango/opentype/hb-ot-layout-common-private.hh |   17 ++++++++++++++---
+ pango/opentype/hb-ot-layout-gsub-private.hh   |    2 +-
+ 3 files changed, 19 insertions(+), 8 deletions(-)
+
+commit ff0047094bbea056c99c9b500c10234b579ff0ba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 12:13:52 2009 -0400
+
+    [HB] More casts
+
+ pango/opentype/hb-ot-layout-gsub-private.hh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 7d0dc6328b60b9a1244dca21d1bc2ffe7411f5d3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 12:05:24 2009 -0400
+
+    [HB] Fix couple of bugs
+
+ pango/opentype/hb-open-types-private.hh |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 7c897c7a2452ec740ac434561d2334c72c1ffdd8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 11:38:50 2009 -0400
+
+    [HB] More cast cleanup
+
+ pango/opentype/hb-open-types-private.hh         |   23 +++++---
+ pango/opentype/hb-ot-layout-common-private.hh   |    7 +--
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   27 ++++------
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   64
+ ++++++++--------------
+ 4 files changed, 50 insertions(+), 71 deletions(-)
+
+commit 5e8a31e45cd4b837e1c5e2fa5fb6e78dda1d1df8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 11:04:32 2009 -0400
+
+    [Hb] Use reinterpret casts instead of direct casts to char *
+
+ pango/opentype/hb-open-file-private.hh          |    4 +-
+ pango/opentype/hb-open-types-private.hh         |   19 +++++++---
+ pango/opentype/hb-ot-layout-common-private.hh   |    8 ++--
+ pango/opentype/hb-ot-layout-gpos-private.hh     |   12 +++---
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   20 +++++-----
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   44
+ +++++++++++-----------
+ 6 files changed, 57 insertions(+), 50 deletions(-)
+
+commit c8c04266568d23e2efa12b7c073562ac7b5b0b2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 10:41:32 2009 -0400
+
+    [HB] Merge more templates
+
+ pango/opentype/hb-open-types-private.hh |  167
+ ++++++++++---------------------
+ 1 files changed, 55 insertions(+), 112 deletions(-)
+
+commit a501ac401398cc85d2c9695bb2fc41dc4f7efb39
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 10:23:01 2009 -0400
+
+    [HB] Simplify indirect sanitize()
+
+ pango/opentype/hb-open-types-private.hh       |   52
+ ++++++++++++-------------
+ pango/opentype/hb-ot-layout-common-private.hh |   11 +-----
+ 2 files changed, 26 insertions(+), 37 deletions(-)
+
+commit 477a991e5e89462fc186cc1d797af7d05ee9fd89
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 02:27:37 2009 -0400
+
+    [HB] Finish GSUB sanitize()
+
+ pango/opentype/hb-ot-layout-gsub-private.hh |   21 ++++++++++++++++++++-
+ 1 files changed, 20 insertions(+), 1 deletions(-)
+
+commit 8c48985195d3b1cafb7852f2d70b9d82a01d1d78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 02:14:24 2009 -0400
+
+    [HB] Add comment
+
+ pango/opentype/hb-ot-layout-common-private.hh |    6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+commit 15e1f268f52a61ebdcdcf0d3c7cd643f897cdcde
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 02:10:48 2009 -0400
+
+    [HB] Optimize sanitize()
+
+ pango/opentype/hb-open-types-private.hh |    7 ++++++-
+ 1 files changed, 6 insertions(+), 1 deletions(-)
+
+commit f786c9d501099f3c989fb6e34469381f4be8681f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 02:09:34 2009 -0400
+
+    [HB] More sanitize()
+
+ pango/opentype/hb-open-file-private.hh          |    2 +-
+ pango/opentype/hb-open-types-private.hh         |   12 +++--
+ pango/opentype/hb-ot-layout-common-private.hh   |   64
+ ++++++++++++++++++++---
+ pango/opentype/hb-ot-layout-gdef-private.hh     |    2 +-
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |   15 +++++-
+ 5 files changed, 79 insertions(+), 16 deletions(-)
+
+commit dc6fe7c38db8c74453770d74961e708722d7621e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Aug 4 00:58:28 2009 -0400
+
+    [HB] Start sanitize()
+
+ pango/opentype/hb-open-types-private.hh         |  105
+ ++++++++++++++++++-
+ pango/opentype/hb-ot-layout-common-private.hh   |   48 ++++++++-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |  125
+ ++++++++++++++++++++++-
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |  104
+ +++++++++++++++++++
+ 4 files changed, 376 insertions(+), 6 deletions(-)
+
+commit 2f19c9ae2e1e7f2d13b8e78d09fb992f55caf00b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 3 22:43:02 2009 -0400
+
+    [HB] Remove use of typeof()
+
+ pango/opentype/hb-blob.c           |    4 ++--
+ pango/opentype/hb-buffer.c         |    2 +-
+ pango/opentype/hb-font.cc          |   14 +++++++-------
+ pango/opentype/hb-object-private.h |    4 ++--
+ 4 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 832cb0e4680d4274869ee67b84418e5ec06de247
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 3 22:01:47 2009 -0400
+
+    [HB] Make it all work again
+
+ pango/opentype/hb-font.cc             |   23 ++++++++------
+ pango/opentype/hb-ot-layout-private.h |    9 ++++--
+ pango/opentype/hb-ot-layout.cc        |   51
+ ++++++++++++++++-----------------
+ 3 files changed, 44 insertions(+), 39 deletions(-)
+
+commit b638ece392bb64c1f43767d98ddc3f446b282d43
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 3 21:40:20 2009 -0400
+
+    [HB] Use face_t directly instead of ot_layout_t
+
+ pango/opentype/TODO                             |    1 +
+ pango/opentype/hb-font-private.h                |    4 +
+ pango/opentype/hb-font.cc                       |   74 ++++++--
+ pango/opentype/hb-font.h                        |    3 +
+ pango/opentype/hb-object-private.h              |   36 +++--
+ pango/opentype/hb-ot-layout-gdef-private.hh     |    2 +
+ pango/opentype/hb-ot-layout-gpos-private.hh     |   14 +-
+ pango/opentype/hb-ot-layout-gsub-private.hh     |   32 ++--
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |    8 +-
+ pango/opentype/hb-ot-layout-private.h           |   40 +++--
+ pango/opentype/hb-ot-layout.cc                  |  220
+ ++++++++++-------------
+ 11 files changed, 237 insertions(+), 197 deletions(-)
+
+commit da2a76270a0109111b465ec6ae0041ec09a2b554
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 3 21:27:08 2009 -0400
+
+    [HB] Simplify sub-blob support
+
+ pango/opentype/hb-blob.c |  172
+ +++++++++++++++++----------------------------
+ pango/opentype/hb-blob.h |   14 +++--
+ 2 files changed, 74 insertions(+), 112 deletions(-)
+
+commit ab5a714897efa61da57d8a7fc060b57a6ff4991c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Mon Aug 3 17:53:29 2009 -0400
+
+    [HB] Add sub-blobs
+
+ pango/opentype/hb-blob.c |  162
+ +++++++++++++++++++++++++++++++++++++++-------
+ pango/opentype/hb-blob.h |   12 +++-
+ 2 files changed, 147 insertions(+), 27 deletions(-)
+
+commit 48cc6e95b7b16c56ebad8636204b0f9599400ac5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 2 20:06:48 2009 -0400
+
+    [HB] Rename hb-font.c to hb-font.cc
+
+ pango/opentype/Makefile.am |    2 +-
+ pango/opentype/hb-font.c   |  349
+ --------------------------------------------
+ pango/opentype/hb-font.cc  |  349
+ ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 350 insertions(+), 350 deletions(-)
+
+commit c71d6fc16863a662dad7eba81832624201a16533
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 2 20:03:12 2009 -0400
+
+    [OT] Rename C++ header files from *.h to *.hh
+
+ pango/opentype/Makefile.am                      |   14 +-
+ pango/opentype/hb-open-file-private.h           |  145 ---
+ pango/opentype/hb-open-file-private.hh          |  145 +++
+ pango/opentype/hb-open-types-private.h          |  386 -------
+ pango/opentype/hb-open-types-private.hh         |  386 +++++++
+ pango/opentype/hb-ot-layout-common-private.h    |  447 --------
+ pango/opentype/hb-ot-layout-common-private.hh   |  447 ++++++++
+ pango/opentype/hb-ot-layout-gdef-private.h      |  320 ------
+ pango/opentype/hb-ot-layout-gdef-private.hh     |  320 ++++++
+ pango/opentype/hb-ot-layout-gpos-private.h      | 1355
+ -----------------------
+ pango/opentype/hb-ot-layout-gpos-private.hh     | 1355
+ +++++++++++++++++++++++
+ pango/opentype/hb-ot-layout-gsub-private.h      |  751 -------------
+ pango/opentype/hb-ot-layout-gsub-private.hh     |  751 +++++++++++++
+ pango/opentype/hb-ot-layout-gsubgpos-private.h  |  773 -------------
+ pango/opentype/hb-ot-layout-gsubgpos-private.hh |  773 +++++++++++++
+ pango/opentype/hb-ot-layout.cc                  |    8 +-
+ pango/opentype/main.cc                          |    6 +-
+ 17 files changed, 4191 insertions(+), 4191 deletions(-)
+
+commit ed1f17cc19458b5a5e775a004cb53c3c89f6b7a4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 2 19:57:00 2009 -0400
+
+    [HB] Move OT file handling out of ot-layout
+
+ pango/opentype/Makefile.am                   |    3 +-
+ pango/opentype/hb-open-file-private.h        |  145 ++++++++
+ pango/opentype/hb-open-types-private.h       |  386 ++++++++++++++++++++
+ pango/opentype/hb-ot-layout-common-private.h |    4 +-
+ pango/opentype/hb-ot-layout-open-private.h   |  495
+ --------------------------
+ pango/opentype/hb-ot-layout.cc               |    2 +-
+ pango/opentype/main.cc                       |    4 +-
+ 7 files changed, 539 insertions(+), 500 deletions(-)
+
+commit 6624880f1dc2d14187c4548f7bbddd78f3dbf64d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 2 17:41:36 2009 -0400
+
+    [HB] Port ot-layout to new public API
+
+ pango/opentype/TODO                            |    1 +
+ pango/opentype/hb-common.h                     |    1 +
+ pango/opentype/hb-font.c                       |    9 +
+ pango/opentype/hb-font.h                       |    3 +
+ pango/opentype/hb-ot-layout-gdef-private.h     |   32 ++--
+ pango/opentype/hb-ot-layout-gpos-private.h     |  106 ++++----
+ pango/opentype/hb-ot-layout-gsub-private.h     |   50 ++--
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   12 +-
+ pango/opentype/hb-ot-layout-private.h          |   36 ++-
+ pango/opentype/hb-ot-layout.cc                 |  342
+ +++++++++++++-----------
+ pango/opentype/hb-ot-layout.h                  |  207 +++++++--------
+ pango/pango-ot-buffer.c                        |    6 +-
+ pango/pango-ot-info.c                          |  110 ++++----
+ pango/pango-ot-private.h                       |    6 +-
+ 14 files changed, 485 insertions(+), 436 deletions(-)
+
+commit 5bb23c0024827fb180e17c9b8dde13e872eed464
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 2 15:35:31 2009 -0400
+
+    [HB] Add top-level header files
+
+ pango/opentype/Makefile.am |    2 ++
+ pango/opentype/hb-ot.h     |   34 ++++++++++++++++++++++++++++++++++
+ pango/opentype/hb.h        |   35 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 71 insertions(+), 0 deletions(-)
+
+commit fac416667fed565d3d61b25b6736e39b266e22f0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Aug 2 15:20:22 2009 -0400
+
+    [HB] Add XXX marks
+
+ pango/opentype/hb-ot-layout-private.h |    2 ++
+ pango/opentype/hb-ot-layout.cc        |    7 ++-----
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+commit 43514625e82ace469b2d2612bc8f890d192e7b78
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 23:06:27 2009 -0400
+
+    [HB] Rename _duplicate to _copy
+
+    To be in line with cairo
+
+ pango/opentype/hb-font.c |    4 ++--
+ pango/opentype/hb-font.h |    4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit e8238d14ed452b3e402fa65a9d3997254c1570d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 22:55:11 2009 -0400
+
+    [HB] Cleanup TODO
+
+ pango/opentype/TODO |   10 +---------
+ 1 files changed, 1 insertions(+), 9 deletions(-)
+
+commit 55b6ef4545bda8f12ae4c82aba3a61e8e7c47868
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 22:53:04 2009 -0400
+
+    [HB] Cleanup public buffer structs
+
+ pango/opentype/hb-buffer-private.h         |   46
+ +++++++++++++++++++++----
+ pango/opentype/hb-buffer.c                 |   49
+ ++++++++++++++-------------
+ pango/opentype/hb-buffer.h                 |   35 ++++++++++----------
+ pango/opentype/hb-ot-layout-gpos-private.h |    8 ++--
+ pango/opentype/hb-ot-layout-private.h      |    5 ++-
+ pango/opentype/hb-ot-layout.cc             |   20 ++++++------
+ 6 files changed, 97 insertions(+), 66 deletions(-)
+
+commit 019d335ec7710eea286ed0294cda69aace4ebb96
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 22:25:04 2009 -0400
+
+    [OT] Match struct with HB's
+
+ pango/opentype/hb-buffer.c     |    6 +++---
+ pango/opentype/hb-buffer.h     |    2 +-
+ pango/opentype/hb-ot-layout.cc |   12 ++++++------
+ pango/pango-ot.h               |    5 +++--
+ 4 files changed, 13 insertions(+), 12 deletions(-)
+
+commit b522838694c10d2f4055ff0a22167c0ace546e04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 22:19:06 2009 -0400
+
+    [HB] Port buffert to new object API
+
+ pango/opentype/hb-buffer-private.h |   24 +++++++++++--
+ pango/opentype/hb-buffer.c         |   65
+ +++++++++++++++++++++++++++--------
+ pango/opentype/hb-buffer.h         |   53 ++++++++++++++++++-----------
+ pango/pango-ot-buffer.c            |   33 +++++++++++-------
+ pango/pango-ot-info.c              |   10 +++---
+ 5 files changed, 129 insertions(+), 56 deletions(-)
+
+commit b0285768b9ea64f0d523edf14232ab870deacb9c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 21:38:39 2009 -0400
+
+    [HB] Move typedef's around
+
+ pango/opentype/hb-blob.h   |    2 ++
+ pango/opentype/hb-common.h |    9 ---------
+ pango/opentype/hb-font.h   |   10 ++++++++++
+ 3 files changed, 12 insertions(+), 9 deletions(-)
+
+commit 7f5ea9cb73607efaa77923f43e0636a3b051218c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 21:36:15 2009 -0400
+
+    [HB] Add get_reference_count()
+
+ pango/opentype/hb-blob.c           |    6 ++++++
+ pango/opentype/hb-blob.h           |    3 +++
+ pango/opentype/hb-font.c           |   24 ++++++++++++++++++++++++
+ pango/opentype/hb-font.h           |   12 ++++++++++++
+ pango/opentype/hb-object-private.h |    7 +++++++
+ 5 files changed, 52 insertions(+), 0 deletions(-)
+
+commit fe17dd9e5df9a7f0b118b42efc6bc0978842216b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 21:11:33 2009 -0400
+
+    [Makefile] Fix MOSTLYCLEANFILES
+
+ pango/Makefile.am |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 0ae1b78e7694204cb973c633d665d1f3e3d20dc4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 21:06:11 2009 -0400
+
+    [HB] Remove glib dependency
+
+ pango/opentype/Makefile.am  |    7 ++-----
+ pango/opentype/hb-buffer.c  |    2 +-
+ pango/opentype/hb-private.h |   30 ++++++++++++++++++------------
+ pango/opentype/main.cc      |    1 +
+ 4 files changed, 22 insertions(+), 18 deletions(-)
+
+commit 30791d4cac4b6b1222942a9a6ca32e7ddae768b1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 20:46:02 2009 -0400
+
+    [HB] Assorted compiler macros
+
+ pango/opentype/hb-ot-layout-open-private.h |    4 +-
+ pango/opentype/hb-private.h                |   88
+ +++++++++++++++++++++------
+ 2 files changed, 70 insertions(+), 22 deletions(-)
+
+commit 308259613a34f54151c20d616cd5c940d69de980
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 20:29:22 2009 -0400
+
+    [HB] Simplify object creation
+
+ pango/opentype/Makefile.am           |    2 +-
+ pango/opentype/hb-blob.c             |    6 +--
+ pango/opentype/hb-font-private.h     |    1 -
+ pango/opentype/hb-font.c             |   37 ++++---------
+ pango/opentype/hb-object-private.h   |   97
+ ++++++++++++++++++++++++++++++++++
+ pango/opentype/hb-private.h          |    2 +
+ pango/opentype/hb-refcount-private.h |   87
+ ------------------------------
+ 7 files changed, 112 insertions(+), 120 deletions(-)
+
+commit 661ade98a2930ad00d1383302a41a3984ef50ac8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 19:54:49 2009 -0400
+
+    [HB] Add abstract font and face API
+
+    Not used yet.
+
+ pango/opentype/Makefile.am           |    3 +
+ pango/opentype/hb-blob.c             |    6 +-
+ pango/opentype/hb-font-private.h     |  108 +++++++++++
+ pango/opentype/hb-font.c             |  331
+ ++++++++++++++++++++++++++++++++++
+ pango/opentype/hb-font.h             |  182 +++++++++++++++++++
+ pango/opentype/hb-refcount-private.h |   14 +-
+ 6 files changed, 636 insertions(+), 8 deletions(-)
+
+commit 3ebf3e536b645f86f7dea8d68be08d7b99498f35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 19:30:31 2009 -0400
+
+    [HB] Simplify refcounting functions
+
+ pango/opentype/hb-blob.c             |   32
+ ++++++++++----------------------
+ pango/opentype/hb-common.h           |    2 ++
+ pango/opentype/hb-private.h          |    2 ++
+ pango/opentype/hb-refcount-private.h |   31
+ ++++++++++++++++++++++++++++++-
+ 4 files changed, 44 insertions(+), 23 deletions(-)
+
+commit 7257d6625638eaeffa13acd614c0eb53875e8172
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 19:10:41 2009 -0400
+
+    [HB] Fix for dfont's with multiple faces
+
+ pango/opentype/hb-ot-layout-open-private.h |    6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+commit 86f7ff9415d71de495f6257edad2ba991692e042
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Aug 1 19:05:44 2009 -0400
+
+    [HB] Use calloc instead of malloc where feasible
+
+ pango/opentype/hb-blob.c   |    8 +++++---
+ pango/opentype/hb-buffer.c |    4 ++--
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+commit 2ea66938b387b3d492e45f6277666258366cf003
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 30 16:28:45 2009 -0400
+
+    [HB] Remove hinting setting and use ppem==0 to mean "no hinting"
+
+ pango/opentype/hb-blob.h                   |    3 --
+ pango/opentype/hb-common.h                 |    9 +++++++
+ pango/opentype/hb-ot-layout-gpos-private.h |   36
+ ++++++++++++++++++---------
+ pango/opentype/hb-ot-layout-private.h      |    2 -
+ pango/opentype/hb-ot-layout.cc             |    7 -----
+ pango/opentype/hb-ot-layout.h              |    4 ---
+ pango/pango-ot-info.c                      |   12 +++++----
+ 7 files changed, 40 insertions(+), 33 deletions(-)
+
+commit 112f0d741a24237e83922f8eee735b7f1ae74019
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Thu Jul 30 15:33:57 2009 -0400
+
+    [HB] Add a "blob" manager
+
+ pango/opentype/Makefile.am           |    5 +-
+ pango/opentype/hb-blob.c             |  181
+ ++++++++++++++++++++++++++++++++++
+ pango/opentype/hb-blob.h             |   74 ++++++++++++++
+ pango/opentype/hb-private.h          |    2 +
+ pango/opentype/hb-refcount-private.h |   54 ++++++++++
+ 5 files changed, 315 insertions(+), 1 deletions(-)
+
+commit 7444dad9ea3dde39b5276fef4f844237d1e661b1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 29 18:41:25 2009 -0400
+
+    [HB] Move direction to buffer
+
+ pango/opentype/hb-buffer.c                 |    9 +++++++++
+ pango/opentype/hb-buffer.h                 |   14 ++++++++++++++
+ pango/opentype/hb-ot-layout-gpos-private.h |    2 +-
+ pango/opentype/hb-ot-layout-private.h      |    1 -
+ pango/opentype/hb-ot-layout.cc             |    7 -------
+ pango/opentype/hb-ot-layout.h              |    5 -----
+ pango/pango-ot-buffer.c                    |    2 ++
+ pango/pango-ot-info.c                      |    2 --
+ 8 files changed, 26 insertions(+), 16 deletions(-)
+
+commit 7f734d99a5f9cef1362a6f9f0257a683e01ceb48
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 29 18:37:57 2009 -0400
+
+    [HB] Rename internal vars
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   56
+ ++++++++++++------------
+ 1 files changed, 28 insertions(+), 28 deletions(-)
+
+commit 11c229d522b9bda910805d571eb29a564b81e926
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 28 15:50:58 2009 -0400
+
+    [HB] Adapt to new buffer API
+
+ pango/pango-ot-buffer.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 603479e35c849285078238275510c0c89170ff9d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 28 15:50:42 2009 -0400
+
+    [HB] Fix buffer enlargement.  Ouch
+
+ pango/opentype/hb-buffer.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 59f8868cf32691cce37060b30c3d16503a003df7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 28 15:43:34 2009 -0400
+
+    Apply patch from Jonathan Kew
+
+ pango/opentype/hb-buffer.c     |   75
+ +++++++++++++++++++++-------------------
+ pango/opentype/hb-buffer.h     |    6 +++-
+ pango/opentype/hb-ot-layout.cc |   31 ++++++++++++++++
+ pango/opentype/hb-ot-layout.h  |   15 ++++++++
+ pango/opentype/hb-private.h    |    2 +-
+ 5 files changed, 91 insertions(+), 38 deletions(-)
+
+commit 091be0f7d8d06d38bf72c8f2521b2ab8808043d5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Tue Jul 28 14:33:02 2009 -0400
+
+    Bug 590042 – pango-view.1 manpage should not be gzipped
+
+ pango-view/Makefile.am |    6 ------
+ 1 files changed, 0 insertions(+), 6 deletions(-)
+
+commit 01783de926a09dd8a3b11699bc8b1a6b6dce0556
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sun Jul 26 23:54:28 2009 -0400
+
+    [atsui] Port to use CoreText instead of ATS
+
+    Patch from http://trac.macports.org/ticket/17049
+
+ modules/basic/basic-atsui.c  |    6 +++---
+ pango/pangoatsui-private.h   |    4 ++--
+ pango/pangoatsui.c           |   16 ++++++++--------
+ pango/pangoatsui.h           |    2 +-
+ pango/pangocairo-atsuifont.c |   33 +++++++++++++++++----------------
+ 5 files changed, 31 insertions(+), 30 deletions(-)
+
+commit 2ea6180b690c885b5436629596e2a7d236e6653e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 25 19:09:01 2009 -0400
+
+    Revert "XX"
+
+    This reverts commit c939f6aff405ca7b10b1f1538f46148bff719fcb.
+
+ pango/opentype/Makefile.am                     |    2 -
+ pango/opentype/hb-buffer.c                     |    9 --
+ pango/opentype/hb-buffer.h                     |   14 ---
+ pango/opentype/hb-common.h                     |    3 -
+ pango/opentype/hb-ot-layout-gdef-private.h     |   32 ++++----
+ pango/opentype/hb-ot-layout-gpos-private.h     |  108
+ ++++++++++++------------
+ pango/opentype/hb-ot-layout-gsub-private.h     |   46 +++++-----
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   68 ++++++++--------
+ pango/opentype/hb-ot-layout-private.h          |   28 +++----
+ pango/opentype/hb-ot-layout.cc                 |   30 +++++++
+ pango/opentype/hb-ot-layout.h                  |    5 +
+ pango/opentype/hb-private.h                    |   16 ----
+ 12 files changed, 174 insertions(+), 187 deletions(-)
+
+commit a1fb36307d0e7fe9f1b282da831ec7c551f37296
+Merge: c939f6a 7280086
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Sat Jul 25 19:08:41 2009 -0400
+
+    Merge branch 'master' into harfbuzz-ng
+
+commit 72800869fb784189bac1066265d95a1226bcf212
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 22 16:26:52 2009 -0400
+
+    [docs] Add index of symbols new in 1.24 and 1.26
+
+ docs/pango-docs.sgml |    6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+commit ac2ce962e9c257657eeceaf08d6aeeddd6faaa83
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:   Wed Jul 22 16:24:43 2009 -0400
+
+    Bug 410169 – gravity problem with Common chars
+
+    Only show wide chars (as in g_unichar_iswide()) upright.
+    This improves rendering of 1) digits in CJK context, and 2) Narrow
+    Hangul characters.
+
+    New public API:
+
+       pango_gravity_get_for_script_and_width()
+
+ docs/pango-sections.txt |    1 +
+ docs/tmpl/vertical.sgml |   12 +++++++++
+ pango/pango-context.c  |   13 ++++------
+ pango/pango-gravity.c  |   58
+ ++++++++++++++++++++++++++++++++++++++++++-----
+ pango/pango-gravity.h  |    5 ++++
+ pango/pango.def        |    1 +
+ 6 files changed, 76 insertions(+), 14 deletions(-)
+
+commit 0df5c40d43a8d87a917991780595d9fadd19afb6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 22 16:24:01 2009 -0400
+
+    Remove DOS newline
+
+ pango/pangox.def |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit a9a416de60ce42fea78e8283253d07a018bf2778
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 22 13:39:41 2009 -0400
+
+    Bug 589113 – Some characters rotated incorrectly in vertical text
+
+    Always show full-width Unicode characters upright.
+
+ pango-view/test-mixed.markup |    2 +-
+ pango-view/test-mixed.txt    |    2 +-
+ pango/pango-context.c       |   69
+ ++++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 68 insertions(+), 5 deletions(-)
+
+commit 72f2d4ac7ca20e5931f4b33e67598d0059ad1527
+Author: Carlo Bramini <carlo.bramix@libero.it>
+Date:  Tue Jul 21 10:52:56 2009 +0300
+
+    Bug 582851 -- Little fix for compiling with Cygwin
+
+    Use .def and .rc files on Cygwin, too. Use them for the pangox and
+    pangoxft libraries, too on Cygwin.
+
+ configure.in        |    6 ++++--
+ pango/Makefile.am    |   37 +++++++++++++++++++++++++++++++++----
+ pango/pangox.def     |   35 +++++++++++++++++++++++++++++++++++
+ pango/pangox.rc.in   |   30 ++++++++++++++++++++++++++++++
+ pango/pangoxft.def   |   24 ++++++++++++++++++++++++
+ pango/pangoxft.rc.in |   30 ++++++++++++++++++++++++++++++
+ 6 files changed, 156 insertions(+), 6 deletions(-)
+
+commit 8888c1c1ba25f1c527c4e7aeb7f426e20329b165
+Author: Tor Lillqvist <tml@iki.fi>
+Date:  Tue Jul 21 10:10:27 2009 +0300
+
+    Bug 588060 -- Fonts missing on Cygwin
+
+    Use HAVE_CAIRO_WIN32 instead of G_OS_WIN32 to decide whether to
+    use the built-in aliases code.
+
+ pango/pango-utils.c |   4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 8e348718e57d3f4ed04c9fdcb16a0019a6e13675
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 17:19:14 2009 -0400
+
+    Bump version to 1.25.0
+
+ configure.in |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 47ab634106a27b49085d26150999380e18bd3946
+Merge: 1eadda9 a7d12be
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 17:18:19 2009 -0400
+
+    Merge branch '1.24'
+
+commit a7d12be6599f9e833cc1e623c8c103128adee8f2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 16:52:53 2009 -0400
+
+    Release 1.24.5
+
+ NEWS        |    8 ++++++++
+ configure.in |    4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+commit c29637c366fe2229f6749cb1cb5336fa6d956790
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 16:49:16 2009 -0400
+
+    Bug 589133 – Firefox 3.5 complains about invalid weak references
+
+ pango/pangofc-font.c |   13 +++++++++++--
+ 1 files changed, 11 insertions(+), 2 deletions(-)
+
+commit fe07285144de9146822bce5667aadcf1bc0d4111
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 16:31:33 2009 -0400
+
+    Bug 585806 – crash during pango_fc_font_map_shutdown
+
+ pango/pangofc-font.c   |    3 ---
+ pango/pangofc-fontmap.c |    5 -----
+ 2 files changed, 0 insertions(+), 8 deletions(-)
+
+commit 1eadda908f0f9262dcb4c301f487b5a190dc0e54
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 16:49:16 2009 -0400
+
+    Bug 589133 – Firefox 3.5 complains about invalid weak references
+
+ pango/pangofc-font.c |   13 +++++++++++--
+ 1 files changed, 11 insertions(+), 2 deletions(-)
+
+commit 5a75ce1414f43a36a5e510cc5cfac085671bfdca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jul 20 16:31:33 2009 -0400
+
+    Bug 585806 – crash during pango_fc_font_map_shutdown
+
+ pango/pangofc-font.c   |    3 ---
+ pango/pangofc-fontmap.c |    5 -----
+ 2 files changed, 0 insertions(+), 8 deletions(-)
+
+commit 853f3ddd12ea2fbf3bed551ebfd542536e7f42e0
+Author: Colin Walters <walters@verbum.org>
+Date:  Fri Jul 17 14:01:25 2009 -0400
+
+    Build introspection again
+
+    Remove libpangocairo_1_0_la_SOURCES for now from PangoCairo.gir;
+    if we do those it pulls in parts of the PangoFT2 bits.
+
+    This allows us to re-enable the introspection build.
+
+ pango/Makefile.am |   31 +++++++++++++++----------------
+ 1 files changed, 15 insertions(+), 16 deletions(-)
+
+commit efd34a719271d3c386d5fd4d852619829355fc88
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jul 17 01:41:42 2009 -0400
+
+    Fix typo
+
+ pango/pango-layout.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 67052645e6afcd7f72ef852c99ee88897d2022da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jul 15 13:59:20 2009 -0400
+
+    Handle NUL in text in places that g_utf8_strlen () was used
+
+    While pango-layout doesn't allow NUL in text, the lower level
+    API should
+    handle it correctly.  We were using g_utf8_strlen() in a number of
+    places.  This is problematic since that function stops processing at
+    NUL even if length>1.  We now use an internal pango_utf8_strlen()
+    instead.
+
+    Inspired by:
+    Bug 588678 – pango crash: install a new theme from
+    gnome-appearance-properties
+
+ pango/break.c           |    3 ++-
+ pango/ellipsize.c       |    5 +++--
+ pango/glyphstring.c     |    6 ++++--
+ pango/pango-engine.c    |    2 +-
+ pango/pango-glyph-item.c |    8 ++++----
+ pango/pango-impl-utils.h |   27 +++++++++++++++++++++++++++
+ pango/pango-layout.c    |   16 ++++++++--------
+ 7 files changed, 49 insertions(+), 18 deletions(-)
+
+commit 4d6f980b9f67e7e969e6f5afeb6f216c0a99e6f4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Jun 29 18:33:18 2009 -0400
+
+    Release 1.24.4
+
+ NEWS        |    5 +++++
+ configure.in |    4 ++--
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 643b70644aabdbebd6bdfe7a5f128efde39caced
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 24 23:03:39 2009 -0400
+
+    Bug 586814 – Crashes related to fontmap destruction after upgrade
+
+    Followup patch from Morten.
+
+ pango/pangofc-font.c |    6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+commit f868f085dd22f74ea43426d21b13165ebcd091b4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 24 22:12:37 2009 -0400
+
+    Bug 586814 – Crashes related to fontmap destruction after upgrade
+
+    Avoid modifying hashtable while walking it.
+
+ pango/pangofc-fontmap.c |   14 +++++++++-----
+ 1 files changed, 9 insertions(+), 5 deletions(-)
+
+commit fd5f93fc6bdf5d8985826c3caa56e2081279cf0e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Jun 19 14:05:14 2009 -0400
+
+    Release 1.24.3
+
+ NEWS        |   11 +++++++++++
+ configure.in |    4 ++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit 64aaa40a1ff2e80cb9eb36eabf8f5839641c7630
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 10 23:28:57 2009 -0400
+
+    Bug 585337 – Fails to install: install: will not overwrite
+    just-created
+    `/home/yavor/gnome-trunk/include/pango-1.0/pango/pango-ot.h' with
+    `pango-ot.h'
+
+    Remove duplicate entry for pango-ot.h.
+
+ pango/Makefile.am |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 0fd3bb3036fb2621c5a0f80e3a9d495b84b30449
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 10 23:25:57 2009 -0400
+
+    Bug 585164 – 'man preload' shows man page for pango-view
+
+    Fix pango-view manual installation.
+
+ pango-view/Makefile.am |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit c939f6aff405ca7b10b1f1538f46148bff719fcb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 10 23:26:51 2009 -0400
+
+    XX
+
+ pango/opentype/Makefile.am                    |    2 +
+ pango/opentype/hb-buffer.c                    |    9 ++
+ pango/opentype/hb-buffer.h                    |   14 +++
+ pango/opentype/hb-common.h                    |    3 +
+ pango/opentype/hb-ot-layout-gdef-private.h    |   32 ++++----
+ pango/opentype/hb-ot-layout-gpos-private.h    |  108
+ ++++++++++++------------
+ pango/opentype/hb-ot-layout-gsub-private.h    |   46 +++++-----
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   68 ++++++++--------
+ pango/opentype/hb-ot-layout-private.h         |   28 ++++---
+ pango/opentype/hb-ot-layout.cc                        |   30 -------
+ pango/opentype/hb-ot-layout.h                 |    5 -
+ pango/opentype/hb-private.h                   |   16 ++++
+ 12 files changed, 187 insertions(+), 174 deletions(-)
+
+commit 2bf2d827cf2409cd774be14ff1d94e0fb7794377
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Jun 10 23:25:57 2009 -0400
+
+    Bug 585164 – 'man preload' shows man page for pango-view
+
+    Fix pango-view manual installation.
+
+ pango-view/Makefile.am |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 6209a6230cce6c9b1af3c699f0f18335e820e1ea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 30 23:44:22 2009 -0400
+
+    Bug 584328 – Persian sample text is not good
+
+    Remove Alef Maksura from sample text.
+
+ pango/pango-language-sample-table.h |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit f0e5e54917286dd18471d76ed099bccf0eb85053
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 30 23:40:35 2009 -0400
+
+    Bug 583250 – pango_font_metrics_get_approximate_char_width is
+    wrong when LANG=fa_IR
+
+    When computing approximate char width for context metrics use
+    the actual
+    size the sample string renders to. Previously it was taking average
+    over all the fonts used by the sample str.
+
+ pango/pango-context.c |   29 ++++++++++-------------------
+ 1 files changed, 10 insertions(+), 19 deletions(-)
+
+commit eae0fecefc4e294f0c182a7063348a817c111dce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 30 22:17:32 2009 -0400
+
+    [GPOS] Advance buffer cursor in SinglePos lookups. Ouch!
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+commit 9fdfc9a06874820f94196c4802c96bc32d71ddc2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 30 12:02:46 2009 -0400
+
+    [HB] Improve buffer.  Don't dup out buffer unless out is longer
+    than in
+
+    That is, we work in-place even for ligatures now.
+
+ pango/opentype/hb-buffer.c |  156
+ +++++++++++++++++++-------------------------
+ pango/opentype/hb-buffer.h |   9 +--
+ 2 files changed, 72 insertions(+), 93 deletions(-)
+
+commit 3dbd37431ebcf8b24a5891a04e66a2f964178c1e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 27 18:16:55 2009 -0400
+
+    [GPOS] Fix property checking
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 810f4214af6438076da5014888d60d4bfe77ebd6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 27 00:17:37 2009 -0400
+
+    [GPOS] Add vertical TODO
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 157af6ba32a32c941cd5be9b0b0034bf8b7327cb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 22:29:02 2009 -0400
+
+    [HB] Remove useless include
+
+ pango/opentype/hb-ot-layout-private.h |    3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+commit 4921800a3ff9edc8b564cd49ae6e976767a16a0f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 22:26:08 2009 -0400
+
+    [GPOS] Remove unused variables
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+commit 07c0e3b1d239ab041e243b0543640c9001e04931
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 22:11:32 2009 -0400
+
+    Fall back to TT kerning if no GPOS
+
+ pango/pango-ot-info.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 6f9bd9a0e876bc49d25fb8e892b17adfa5b12b8c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 19:48:16 2009 -0400
+
+    [HB] Fix glyph properties
+
+ pango/opentype/hb-ot-layout-common-private.h |    6 +++---
+ pango/opentype/hb-ot-layout-open-private.h   |    2 +-
+ pango/opentype/hb-ot-layout.cc                      |    2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+commit dc08fb7281b86edacc2edd521da0212acffca985
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 18:57:56 2009 -0400
+
+    [GPOS] Fix PairPos signedness
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  11 ++++-------
+ 1 files changed, 4 insertions(+), 7 deletions(-)
+
+commit 74d8c52f6ac1787efb8d87b72f47c6933abaf4ae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 17:58:37 2009 -0400
+
+    [GPOS] Fix mark matching
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  44
+ ++++++++++++---------------
+ 1 files changed, 20 insertions(+), 24 deletions(-)
+
+commit fe789092d83e6d4da43126640af0150b6bb2555c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 17:31:56 2009 -0400
+
+    [HB] When looking back/forward, skip marks only
+
+ pango/opentype/TODO                           |    1 -
+ pango/opentype/hb-ot-layout-gpos-private.h    |   13 +----
+ pango/opentype/hb-ot-layout-gsub-private.h    |   38 ++++++--------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   14 +++---
+ pango/opentype/hb-ot-layout-private.h         |    6 ++
+ pango/opentype/hb-ot-layout.cc                        |   69
+ +++++++++++++++--------
+ 6 files changed, 76 insertions(+), 65 deletions(-)
+
+commit 746860bb7b54c16898264b248eb93a56e8af333b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 15:58:34 2009 -0400
+
+    [GDEF] Support MarkFilteringSets
+
+ pango/opentype/hb-ot-layout.cc |   59
+ ++++++++++++++-------------------------
+ 1 files changed, 21 insertions(+), 38 deletions(-)
+
+commit 95c3fffa8a2b102a3d5f88f3940e7f93e2368fec
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 15:45:41 2009 -0400
+
+    [HB] Simplify MarkAttachmentType handling
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   6 +++---
+ pango/opentype/hb-ot-layout-gsub-private.h |   6 ++----
+ pango/opentype/hb-ot-layout.cc                    |   18 ++++++++----------
+ 3 files changed, 13 insertions(+), 17 deletions(-)
+
+commit a6e2371d5c50cafd6a433ae19fcfb93fb820f1db
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 15:38:53 2009 -0400
+
+    [HB] Support parsing MarkFilteringSets introduced in OpenType 1.6
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  55
+ ++++++++++++++++++++++++----
+ pango/opentype/hb-ot-layout-gpos-private.h |   1 +
+ pango/opentype/hb-ot-layout.cc                    |    6 ++--
+ 3 files changed, 51 insertions(+), 11 deletions(-)
+
+commit d877d91e5c0617a82620a6a47406cd196e16e5d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 13:08:00 2009 -0400
+
+    [HB] More de-C++'ization
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   24
+ ++++++++++++------------
+ 1 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 3b1a840d2726772fb3a6ec0daedaf698fce29c52
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 13:04:59 2009 -0400
+
+    [HB] Start MarkFilteringSet support
+
+ pango/opentype/hb-ot-layout-common-private.h |   24
+ +++++++++++++++++++-----
+ 1 files changed, 19 insertions(+), 5 deletions(-)
+
+commit fb8da04aac1fe1b11b8a617342f1532e12c595db
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 12:40:10 2009 -0400
+
+    [HB] Implement get_lig_carets()
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  57
+ ++++++++++++++++++++++------
+ pango/opentype/hb-ot-layout.cc                    |   17 ++++++--
+ pango/opentype/hb-ot-layout.h             |    8 +++-
+ pango/opentype/main.cc                            |    9 +----
+ 4 files changed, 66 insertions(+), 25 deletions(-)
+
+commit 807581741d5331235004f2252de92a6de3ce23d0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 12:24:16 2009 -0400
+
+    [HB] Add get_attach_points()
+
+ pango/opentype/Makefile.am                |    2 +-
+ pango/opentype/hb-ot-layout-gdef-private.h |  35
+ ++++++++++++++++++++--------
+ pango/opentype/hb-ot-layout-gpos-private.h |  28 +++++----------------
+ pango/opentype/hb-ot-layout-gsub-private.h |  28 +++++----------------
+ pango/opentype/hb-ot-layout-open-private.h |  12 ++-------
+ pango/opentype/hb-ot-layout.cc                    |    9 +++++++
+ pango/opentype/hb-ot-layout.h             |    6 ++++
+ pango/opentype/main.cc                            |    8 +++---
+ 8 files changed, 62 insertions(+), 66 deletions(-)
+
+commit 298dadbd395a594176ed4cda4b9cf7004b724b66
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 26 12:00:28 2009 -0400
+
+    [HB] Remove more macros
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  18 +++++++++---------
+ 1 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 7b3f038ada310ac1f113d898a637df188177f8bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 04:04:24 2009 -0400
+
+    [HB] More buffer cleanup
+
+ pango/opentype/hb-buffer-private.h            |   39 ++-----
+ pango/opentype/hb-buffer.c                    |  138
+ ++++++++++++------------
+ pango/opentype/hb-buffer.h                    |   22 ++--
+ pango/opentype/hb-ot-layout-gpos-private.h    |   29 +++---
+ pango/opentype/hb-ot-layout-gsub-private.h    |   10 +-
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    8 +-
+ pango/opentype/hb-ot-layout-private.h         |   13 +--
+ pango/opentype/hb-ot-layout.cc                        |   16 ++--
+ pango/opentype/hb-private.h                   |   29 -----
+ pango/pango-ot-buffer.c                       |   18 ++--
+ pango/pango-ot-info.c                         |    3 +-
+ pango/pango-ot.h                              |    2 +-
+ 12 files changed, 138 insertions(+), 189 deletions(-)
+
+commit 76d05e87fb34a3f6cc5d914e91f755e964c690dc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 03:39:11 2009 -0400
+
+    [HB] Cleanup buffer
+
+ pango/opentype/hb-buffer-private.h            |    2 +-
+ pango/opentype/hb-buffer.c                    |   26 +++++----
+ pango/opentype/hb-ot-layout-gsub-private.h    |   26 +++------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    2 +-
+ pango/opentype/hb-ot-layout.cc                        |   71
+ ------------------------
+ 5 files changed, 25 insertions(+), 102 deletions(-)
+
+commit fdb536bbfd1575465abf4cdfa08706685a466244
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 03:30:31 2009 -0400
+
+    [HB] Clean more
+
+ pango/opentype/hb-ot-layout-private.h |   10 ++++------
+ pango/opentype/hb-ot-layout.cc        |    8 ++++----
+ 2 files changed, 8 insertions(+), 10 deletions(-)
+
+commit 8f0881c5d40224e820ce19e67259f75e8c82adb7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 03:24:19 2009 -0400
+
+    [HB] Remove one XXX, add another
+
+ pango/opentype/hb-buffer.h           |    2 ++
+ pango/opentype/hb-ot-layout-private.h |    3 +--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+commit 8c864af4b508feac57896fe4e0124d9031670b93
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 03:22:19 2009 -0400
+
+    [HB] Update copyright years
+
+ pango/opentype/hb-buffer-private.h    |    2 +-
+ pango/opentype/hb-buffer.h           |    2 +-
+ pango/opentype/hb-common.h           |    2 +-
+ pango/opentype/hb-ot-layout-private.h |    2 +-
+ pango/opentype/hb-ot-layout.h        |    2 +-
+ pango/opentype/hb-private.h          |    2 +-
+ 6 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 6e506f425a89d0ff330497b38ec8227e30d5681b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 03:20:18 2009 -0400
+
+    [HB] Would have helped if I actually knew C++ before using it...
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    4 ++--
+ pango/opentype/hb-ot-layout-open-private.h    |   24
+ ++++++++++++------------
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+commit 40c6f897dbdc4020c5aec07b7022caadb45cf3f1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 03:10:06 2009 -0400
+
+    [HB] More cleanup
+
+ pango/opentype/hb-ot-layout-common-private.h |    4 ++--
+ pango/opentype/hb-ot-layout-open-private.h   |    9 +++++----
+ 2 files changed, 7 insertions(+), 6 deletions(-)
+
+commit c783d19c9cee230e20cf4df504e729b5233ebe17
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 02:41:49 2009 -0400
+
+    [HB] Simplify Tag
+
+ pango/opentype/hb-ot-layout-open-private.h |  46
+ +++++++++++-----------------
+ 1 files changed, 18 insertions(+), 28 deletions(-)
+
+commit c53ed30cddcf3ed56ffb2756f2d8650ad012ff44
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 02:34:25 2009 -0400
+
+    [HB] Simplify more
+
+ pango/opentype/hb-ot-layout-open-private.h |  31
+ +++++++++-------------------
+ 1 files changed, 10 insertions(+), 21 deletions(-)
+
+commit d63d5c6cfc6e1584ca426e469e3a35c46aa4605f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 25 02:27:29 2009 -0400
+
+    [HB] Simplify some basic things
+
+ pango/opentype/hb-ot-layout-open-private.h |  90
+ ++++++++++++++++++----------
+ pango/opentype/main.cc                            |    8 ++-
+ 2 files changed, 64 insertions(+), 34 deletions(-)
+
+commit 8690ed7d482374c3d05eb52419d68ed7d29bee81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 15:01:16 2009 -0400
+
+    [HB] simplify macros
+
+ pango/opentype/hb-buffer-private.h    |    4 ++--
+ pango/opentype/hb-buffer.h           |    4 ++--
+ pango/opentype/hb-common.h           |    8 ++++----
+ pango/opentype/hb-ot-layout-private.h |    4 ++--
+ pango/opentype/hb-ot-layout.h        |    4 ++--
+ 5 files changed, 12 insertions(+), 12 deletions(-)
+
+commit ed60b2d914254d10765fae72a85e191a9a696bc7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 14:27:24 2009 -0400
+
+    [HB] Update text files
+
+ pango/opentype/COPYING |    7 -------
+ pango/opentype/README |   13 ++-----------
+ 2 files changed, 2 insertions(+), 18 deletions(-)
+
+commit f4ad4d87cba90c1d02255c34247b9ce09d0b6d67
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 14:24:35 2009 -0400
+
+    [HB] Remove stale makefile.msc too
+
+ pango/opentype/makefile.msc |  19 -------------------
+ 1 files changed, 0 insertions(+), 19 deletions(-)
+
+commit a7a715480db66148b1f487528887508a7991dcd0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 14:22:22 2009 -0400
+
+    [HB] Remove old code!
+
+    Goodbye 16 thousand lines of ten-year old code!
+
+ pango/opentype/harfbuzz-dump-main.c     |   97 -
+ pango/opentype/harfbuzz-dump.c                  |  768 ----
+ pango/opentype/harfbuzz-dump.h                  |   41 -
+ pango/opentype/harfbuzz-gdef-private.h   |  124 -
+ pango/opentype/harfbuzz-gdef.c                  | 1160 ------
+ pango/opentype/harfbuzz-gdef.h                  |  135 -
+ pango/opentype/harfbuzz-global.h        |   84 -
+ pango/opentype/harfbuzz-gpos-private.h   |  712 ----
+ pango/opentype/harfbuzz-gpos.c                  | 6071
+ ------------------------------
+ pango/opentype/harfbuzz-gpos.h                  |  174 -
+ pango/opentype/harfbuzz-gsub-private.h   |  476 ---
+ pango/opentype/harfbuzz-gsub.c                  | 4304 ---------------------
+ pango/opentype/harfbuzz-gsub.h                  |  140 -
+ pango/opentype/harfbuzz-impl.c                  |   84 -
+ pango/opentype/harfbuzz-impl.h                  |  126 -
+ pango/opentype/harfbuzz-open-private.h   |  102 -
+ pango/opentype/harfbuzz-open.c                  | 1405 -------
+ pango/opentype/harfbuzz-open.h                  |  282 --
+ pango/opentype/harfbuzz-stream-private.h |   83 -
+ pango/opentype/harfbuzz-stream.c        |  257 --
+ pango/opentype/harfbuzz.c               |   31 -
+ pango/opentype/harfbuzz.h               |   35 -
+ 22 files changed, 0 insertions(+), 16691 deletions(-)
+
+commit 4b90aa823cf91c586d0fd8a5d6154f46516a87ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 14:21:27 2009 -0400
+
+    [HB] Remove stale TODO mark
+
+ pango/opentype/hb-ot-layout-open-private.h |   1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+commit d11f8e6d41213d38b2b3ea2ec4843e2b6f34697b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 12:30:40 2009 -0400
+
+    [HB] Add FixedVersion cast to int
+
+ pango/opentype/hb-ot-layout-open-private.h |   2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 8ff827848f63ac61446735c8516a452177c16336
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 12:29:55 2009 -0400
+
+    [HB] Simplify tag
+
+ pango/opentype/hb-ot-layout-open-private.h |  10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+commit f89367b83225a5c0a2804ec122d66290a8feb8d5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 01:03:24 2009 -0400
+
+    [HB] Remove unused data types
+
+ pango/opentype/hb-ot-layout-gdef-private.h    |    2 +-
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    2 +-
+ pango/opentype/hb-ot-layout-open-private.h    |   54
+ ++---------------------
+ 3 files changed, 7 insertions(+), 51 deletions(-)
+
+commit 8259e8735babe30eaf3c017e022368bf796b411e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 00:53:28 2009 -0400
+
+    [HB] Simplify version check in GSUB/GPOS
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   5 ++++-
+ pango/opentype/hb-ot-layout-gsub-private.h |   5 ++++-
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+commit d36c93ee99362940c929e20282d2fab440265711
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 24 00:50:27 2009 -0400
+
+    [HB] Check for GDEF/GSUB/GPOS versions
+
+ pango/opentype/hb-ot-layout-gdef-private.h    |    3 +--
+ pango/opentype/hb-ot-layout-gpos-private.h    |    3 +--
+ pango/opentype/hb-ot-layout-gsub-private.h    |    3 +--
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    5 ++---
+ pango/opentype/hb-ot-layout-open-private.h    |   11 ++++++++++-
+ 5 files changed, 15 insertions(+), 10 deletions(-)
+
+commit 5c8fd8cb98e4f20ce02dd10f5b3edbbb15b1d91d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 23 22:39:42 2009 -0400
+
+    [HB] Minor
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   6 +++---
+ pango/opentype/hb-ot-layout-open-private.h |   4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit eca339bbb73aa1b826f3c1e12d1a27f53ee034db
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 23 18:50:44 2009 -0400
+
+    [HB] Add TODO items
+
+ pango/opentype/TODO |   6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+commit d2b11bb9bf3cfa3e1cdcf79a473626ec4ed51846
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 22 18:54:24 2009 -0400
+
+    [GDEF] Add some get_carret_value() code
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  36
+ ++++++++++++++--------------
+ 1 files changed, 18 insertions(+), 18 deletions(-)
+
+commit 191cfb73b04955d9af757d47dc85b1ae0ab6c6c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 22 18:29:45 2009 -0400
+
+    [GPOS] MarkLigPosFormat1
+
+    GPOS is complete now!  Yay!
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  128
+ ++++++++++++++++++++--------
+ 1 files changed, 92 insertions(+), 36 deletions(-)
+
+commit 31f627d786003824d189c786db532600d8701114
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 22 17:58:09 2009 -0400
+
+    [HB] Remove apply_subtables() again
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  31
+ +++++++++-----------------
+ pango/opentype/hb-ot-layout-gsub-private.h |  33
+ ++++++++++-----------------
+ 2 files changed, 23 insertions(+), 41 deletions(-)
+
+commit fb963a1a1e8f7c337af6b7fee4718c3f65bc8c51
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 22:31:33 2009 -0400
+
+    [HB] Share Extension lookup code between GSUB and GPOS
+
+ pango/opentype/hb-ot-layout-gpos-private.h    |   64 +++---------------
+ pango/opentype/hb-ot-layout-gsub-private.h    |   83
+ ++++--------------------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   52 +++++++++++++++
+ 3 files changed, 77 insertions(+), 122 deletions(-)
+
+commit a9688760104e24339e8c956bbdfc3e12387f02b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 15:51:04 2009 -0400
+
+    [GPOS] Remove printf.  MarkMarkPos1 is working
+
+    The "bug" was in the font.
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+commit 541e8ad0c666f895649fbe1df2393ef0f04f2655
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 12:46:29 2009 -0400
+
+    [HB] Ouch. Add files.
+
+ pango/opentype/hb-common.h  |  53 +++++++++++++++++
+ pango/opentype/hb-private.h | 132
+ +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 185 insertions(+), 0 deletions(-)
+
+commit 6e1a2662b3f9d5514c99a82f70e037749d95dc3c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 08:27:07 2009 -0400
+
+    [GPOS] MarkMarkPosFormat1
+
+    Still not quite working.
+
+ pango/opentype/TODO                       |    4 +-
+ pango/opentype/hb-ot-layout-gpos-private.h |  105
+ ++++++++++++++++++++--------
+ 2 files changed, 79 insertions(+), 30 deletions(-)
+
+commit 7c4677ad4d628a943066782df30720b6ae2f79c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 06:32:01 2009 -0400
+
+    [GPOS] MarkBasePosFormat1
+
+ pango/opentype/TODO                       |    1 +
+ pango/opentype/hb-ot-layout-gpos-private.h |  62
+ +++++++++++++++++++++++++--
+ 2 files changed, 58 insertions(+), 5 deletions(-)
+
+commit 180781efd0691964cc5b823c6b9274f208fd083c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 04:58:24 2009 -0400
+
+    [GPOS] Implement MarkArray interface
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+commit 164137a18e4b10c240c8d63bf676872cfdc934c3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 04:54:01 2009 -0400
+
+    [GPOS] Implement Device support in AnchorFormat3
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  11 ++++++++---
+ 1 files changed, 8 insertions(+), 3 deletions(-)
+
+commit 361cdf36b00a7e4632de45a8ad9697d3cb1b8670
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 04:49:04 2009 -0400
+
+    [GPOS] Remove apply_value() return value
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  75
+ +++++++++++++---------------
+ 1 files changed, 34 insertions(+), 41 deletions(-)
+
+commit 93e5da2de8070410b5e8978dfa3a261e6d7f00a4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 21 04:47:05 2009 -0400
+
+    [GPOS] Start MarkBasePosFormat1
+
+ pango/opentype/TODO                       |    1 +
+ pango/opentype/hb-ot-layout-gpos-private.h |  38
+ ++++++++++++---------------
+ 2 files changed, 18 insertions(+), 21 deletions(-)
+
+commit 25494c523822e837716bc1000b1d94ff06ca476f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 15:46:12 2009 -0400
+
+    [HB] Add TODO item
+
+ pango/opentype/hb-ot-layout-gpos-private.h |   1 +
+ pango/opentype/hb-ot-layout-gsub-private.h |   1 +
+ 2 files changed, 2 insertions(+), 0 deletions(-)
+
+commit 6fb8dab583378de48a39b1b25459e24b0162e5d4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 06:15:23 2009 -0400
+
+    [HB] Add TODO item
+
+ pango/opentype/TODO |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 5687dd7511fbf8503dcb6d7c215455e1f999cf03
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 06:01:16 2009 -0400
+
+    [HB] Remove last dependence on the old code base!
+
+ pango/opentype/hb-buffer-private.h        |   88
+ ++++++++++++++--------------
+ pango/opentype/hb-buffer.c                |   47 +++++++--------
+ pango/opentype/hb-ot-layout-gpos-private.h |  11 +--
+ pango/opentype/hb-ot-layout-gsub-private.h |  12 ++--
+ pango/opentype/hb-ot-layout.cc                    |   16 +++---
+ 5 files changed, 85 insertions(+), 89 deletions(-)
+
+commit c141180297254ef341e3e557c26b51eb7e964706
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 05:42:12 2009 -0400
+
+    [HB] Rename harfbuzz-buffer to hb-buffer
+
+ pango/opentype/Makefile.am                    |    5 +-
+ pango/opentype/harfbuzz-buffer-private.h      |  106 -------
+ pango/opentype/harfbuzz-buffer.c              |  349
+ ------------------------
+ pango/opentype/harfbuzz-buffer.h              |   94 -------
+ pango/opentype/hb-buffer-private.h            |  106 +++++++
+ pango/opentype/hb-buffer.c                    |  347
+ +++++++++++++++++++++++
+ pango/opentype/hb-buffer.h                    |   94 +++++++
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    2 +-
+ pango/opentype/hb-ot-layout-private.h         |    2 +-
+ pango/opentype/hb-ot-layout.cc                        |    5 +-
+ pango/opentype/hb-ot-layout.h                 |    2 +-
+ 11 files changed, 556 insertions(+), 556 deletions(-)
+
+commit 336bb3201096bdd0494d29926dd44e8cca8bed26
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 05:35:14 2009 -0400
+
+    [HB] Remove all references to the old code!
+
+ pango/opentype/Makefile.am           |   76 +++++-----------
+ pango/opentype/harfbuzz-buffer.c      |  154
+ +++++++++++++-------------------
+ pango/opentype/harfbuzz-buffer.h      |   80 +++++++++---------
+ pango/opentype/hb-ot-layout-private.h |    6 +-
+ pango/opentype/hb-ot-layout.cc        |   17 ++---
+ pango/opentype/hb-ot-layout.h        |    1 +
+ pango/pango-ot-buffer.c              |   14 ++--
+ pango/pango-ot-info.c                |   14 ++--
+ pango/pango-ot-private.h             |   10 +-
+ 9 files changed, 156 insertions(+), 216 deletions(-)
+
+commit 15a0220c336113a2df8de91ec0513b1bdde35a89
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 04:51:30 2009 -0400
+
+    [GPOS] Finally it's working, up to Cursive
+
+    Wow, IranNastaliq renders perfectly again!
+
+ pango/opentype/hb-ot-layout.cc |   24 ++++++++++++++++++++++++
+ pango/opentype/hb-ot-layout.h |   12 ++++++++++++
+ pango/pango-ot-info.c         |   15 +++++++++++++--
+ 3 files changed, 49 insertions(+), 2 deletions(-)
+
+commit ac8ad1e1c8958246add90cf6d7b6da4ad2a2ea87
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 04:16:35 2009 -0400
+
+    [GPOS] Fix more brokenness
+
+ pango/opentype/Makefile.am                |    2 +-
+ pango/opentype/hb-ot-layout-gpos-private.h |  37
+ +++++++++++++++-------------
+ pango/opentype/hb-ot-layout.cc                    |    7 +++++
+ pango/opentype/hb-ot-layout.h             |    5 ++++
+ pango/pango-ot-info.c                     |    2 +
+ 5 files changed, 35 insertions(+), 18 deletions(-)
+
+commit b77c4990efcd6f6ef77dc6e956bb3f1df9bf6bff
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 03:59:33 2009 -0400
+
+    [GPOS] Fix GPOS feature lookup lookups and application
+
+ pango/pango-ot-info.c |   51
+ ++++++++++++++++++++++++-------------------------
+ 1 files changed, 25 insertions(+), 26 deletions(-)
+
+commit 25db8f6de85f6f8ee11adbf423edb22e6259c543
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 03:53:00 2009 -0400
+
+    [HB] Move lookup types enum into subtable class
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  66
+ ++++++++++++++--------------
+ pango/opentype/hb-ot-layout-gsub-private.h |  44 +++++++++---------
+ 2 files changed, 55 insertions(+), 55 deletions(-)
+
+commit e97278164b1939d4b76128ff8bf520ca02b1debb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 20 00:00:09 2009 -0400
+
+    [GDEF] Simplify Device access
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  12 +++---------
+ 1 files changed, 3 insertions(+), 9 deletions(-)
+
+commit 0b092ed02b6cda94c1a4df87c25f88142f967f4f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 19 23:58:54 2009 -0400
+
+    [HB] Indentation
+
+ pango/opentype/hb-ot-layout-common-private.h  |  170
+ ++++++++++++------------
+ pango/opentype/hb-ot-layout-gdef-private.h    |   65 +++++----
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |  150
+ ++++++++++++---------
+ pango/opentype/hb-ot-layout-open-private.h    |  159
+ +++++++++++-----------
+ pango/opentype/hb-ot-layout-private.h         |    9 +-
+ 5 files changed, 288 insertions(+), 265 deletions(-)
+
+commit 2b57f9a6cbaeee708d19a4eda410fef15e4738c5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 19 23:43:04 2009 -0400
+
+    [HB] Remove unused methods
+
+ pango/opentype/hb-ot-layout-common-private.h |    6 ------
+ 1 files changed, 0 insertions(+), 6 deletions(-)
+
+commit 066d6ab77a5a95187f5865dd409c8b1ee0b79f7b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 19 23:42:30 2009 -0400
+
+    [HB] Indentation
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  253
+ +++++++++++++++------------
+ pango/opentype/hb-ot-layout-gsub-private.h |  262
+ +++++++++++++++-------------
+ 2 files changed, 284 insertions(+), 231 deletions(-)
+
+commit 852a03873cf0266cc1acadafc60ef2f4132b2019
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 19 23:25:41 2009 -0400
+
+    [GPOS] CursivePosFormat1
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  174
+ +++++++++++++++++++++++++++-
+ pango/opentype/hb-ot-layout-private.h     |    2 +-
+ 2 files changed, 169 insertions(+), 7 deletions(-)
+
+commit da5b04ad92c37846ace5ecd9a91c18e836759a23
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 19 22:30:09 2009 -0400
+
+    [GSUB] PairPosFormat2
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  43
+ ++++++++++++++++++++++++---
+ 1 files changed, 38 insertions(+), 5 deletions(-)
+
+commit 10ddad5aa5c15d589b3dd9330d75562abc21c03a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 19 22:16:04 2009 -0400
+
+    [GPOS] PairPosFormat1
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  91
+ ++++++++++++++++++++++------
+ 1 files changed, 73 insertions(+), 18 deletions(-)
+
+commit 9c25dfbd235bd155ad62f3a8d03e27af9a17b810
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 19:47:52 2009 -0400
+
+    [GPOS] Start filling apply() functions in
+
+ pango/opentype/harfbuzz-buffer-private.h     |    1 +
+ pango/opentype/harfbuzz-buffer.c            |    3 -
+ pango/opentype/hb-ot-layout-common-private.h |   35 +++++---
+ pango/opentype/hb-ot-layout-gpos-private.h   |  125
+ +++++++++++++++++++-------
+ 4 files changed, 115 insertions(+), 49 deletions(-)
+
+commit 51d81548dd52fbb6c90775eb3bc83289c0329ddf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 18:44:54 2009 -0400
+
+    [HB] Use enums
+
+ pango/opentype/hb-ot-layout-common-private.h |   14 ++++++++------
+ pango/opentype/hb-ot-layout-gdef-private.h   |   22
+ +++++++++++++---------
+ 2 files changed, 21 insertions(+), 15 deletions(-)
+
+commit 4c83d55575d3d05a29bb551dfc41b92b76e48a44
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 18:30:25 2009 -0400
+
+    [HB] More reference cast simplification
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |    8 +++---
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   28
+ ++++++++++++------------
+ pango/opentype/hb-ot-layout-open-private.h    |    2 +-
+ 3 files changed, 19 insertions(+), 19 deletions(-)
+
+commit 3112f9e9ce1a7e69ac9c95a029f5b6b65025e666
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 18:22:44 2009 -0400
+
+    [HB] Rename LOOKUP_ARGS to APPLY_ARGS
+
+ pango/opentype/hb-ot-layout-gpos-private.h    |   88
+ ++++++++++++------------
+ pango/opentype/hb-ot-layout-gsub-private.h    |   84
+ +++++++++++-----------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   90
+ ++++++++++++------------
+ 3 files changed, 131 insertions(+), 131 deletions(-)
+
+commit c08a686375ab4f3173a649f9bf825d24a5870096
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 18:21:44 2009 -0400
+
+    [HB] Internally rename position() and substitute() to apply()
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  110
+ ++++++++++++++--------------
+ pango/opentype/hb-ot-layout-gsub-private.h |  104
+ +++++++++++++-------------
+ 2 files changed, 107 insertions(+), 107 deletions(-)
+
+commit 293b1f902f9a730b486d9d92412dd6a1c13eef4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 18:01:19 2009 -0400
+
+    [HB] Simplify casts
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   2 +-
+ pango/opentype/hb-ot-layout-gpos-private.h |   6 +++---
+ pango/opentype/hb-ot-layout-gsub-private.h |   6 +++---
+ pango/opentype/hb-ot-layout-open-private.h |  10 +++++-----
+ 4 files changed, 12 insertions(+), 12 deletions(-)
+
+commit a483de8e2774ecf9bc281b46fdd21b4d58ed61a2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 17:43:49 2009 -0400
+
+    Switch Pango to new, defunt, GPOS
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  22 ++++--
+ pango/opentype/hb-ot-layout.cc                    |   13 ++++
+ pango/opentype/hb-ot-layout.h             |    5 ++
+ pango/pango-ot-info.c                     |   97
+ ++++++++++++++++++----------
+ pango/pango-ot-private.h                  |    5 +-
+ pango/pango-ot-ruleset.c                  |   32 +--------
+ 6 files changed, 102 insertions(+), 72 deletions(-)
+
+commit 68f88f1ca8e7057c8830c1c60a369e588745ebdc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 17:09:33 2009 -0400
+
+    [HB] Start GPOS!
+
+ pango/opentype/hb-ot-layout-gpos-private.h |  915
+ ++++++++++++++++++++++++++++
+ pango/opentype/hb-ot-layout-gsub-private.h |   2 -
+ pango/opentype/hb-ot-layout-private.h     |   15 +-
+ pango/opentype/hb-ot-layout.cc                    |    5 +-
+ pango/opentype/hb-ot-layout.h             |    8 +-
+ 5 files changed, 936 insertions(+), 9 deletions(-)
+
+commit 4781df2c257883e3507167218fd2bedc739571a2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 15:32:40 2009 -0400
+
+    [GSUB] Minor
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  16 ++++++----------
+ 1 files changed, 6 insertions(+), 10 deletions(-)
+
+commit 014a7567c6152b73218fe21a54e34ddc6ef1447d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 13:50:15 2009 -0400
+
+    [HB] Minor
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  22 +++++++++++-----------
+ 1 files changed, 11 insertions(+), 11 deletions(-)
+
+commit cda2b36b75bd7be71d830bee78b2ab5845e90831
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 06:00:12 2009 -0400
+
+    [GSUB] Protect against mismatching Extension subtable types
+
+ pango/opentype/hb-ot-layout-gsub-private.h |   9 ++++++---
+ 1 files changed, 6 insertions(+), 3 deletions(-)
+
+commit bba893b810b14c4e6bfc8cfded697fbe28282d35
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 05:47:47 2009 -0400
+
+    [GSUB] Implement ReverseChainSingleSubst
+
+    GSUB is done!
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |   55
+ ++++++++++++++++++------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   43 ++++++-------------
+ 2 files changed, 54 insertions(+), 44 deletions(-)
+
+commit 1927fb2efcecf445aadc3e2be51290f250554576
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 05:29:29 2009 -0400
+
+    [HB] Don't use G_LIKELY!
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |   12 ++++++------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   12 ++++++------
+ pango/opentype/hb-ot-layout-open-private.h    |    4 ++--
+ pango/opentype/hb-ot-layout.cc                        |    6 +++---
+ 4 files changed, 17 insertions(+), 17 deletions(-)
+
+commit 73460adabb9ccafa3cf990f0a8f78084b9a0973d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 05:22:32 2009 -0400
+
+    [GSUB] Oops, fix Extension check
+
+ pango/opentype/hb-ot-layout-gsub-private.h |   3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+commit 29f0ff90f687a82a630ca0212bbbac1aa3412f59
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 04:37:37 2009 -0400
+
+    [HB] Tweak some constants and fix Coverage
+
+ pango/opentype/hb-ot-layout-common-private.h  |   11 ++++++-----
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    2 ++
+ pango/opentype/hb-ot-layout-open-private.h    |    6 +++---
+ 3 files changed, 11 insertions(+), 8 deletions(-)
+
+commit e9e17057a108c858fe3c781ad66ce143edf61ca2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 04:25:22 2009 -0400
+
+    [HB] Cleanup TODOs
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  12 ++++++------
+ pango/opentype/hb-ot-layout-open-private.h |   2 +-
+ pango/opentype/hb-ot-layout.cc                    |    4 ++--
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 6cc2d15e154deb656967e5bdff1e3bbe9130f368
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 04:21:53 2009 -0400
+
+    [GSUB] Fix context_length handling in Ligature too
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |    9 ++++-----
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    5 +++--
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+commit 7641ec611671e9f8bb27d5b0f9cec79bd7ca3782
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 04:17:47 2009 -0400
+
+    [HB] Minor cleanup
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   10 ++++------
+ 1 files changed, 4 insertions(+), 6 deletions(-)
+
+commit 55fdb2a9d8b9520d62bc1168709188baaf42790c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 04:15:25 2009 -0400
+
+    [HB] Correctly skip glyphs when applying (Chain)Context lookups
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   14 +++++++++++---
+ 1 files changed, 11 insertions(+), 3 deletions(-)
+
+commit 16fb96b68b109d7f06db80e0174dba3f5e643964
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 04:09:05 2009 -0400
+
+    [HB] Fix context_length checking
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   23
+ +++++++++++++----------
+ pango/opentype/hb-ot-layout-open-private.h    |    2 +-
+ 2 files changed, 14 insertions(+), 11 deletions(-)
+
+commit e20c11f9434ce8322137f134d78e3c00db1b4d39
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 03:56:39 2009 -0400
+
+    [HB] ChainContext complete
+
+    IranNastaliq renders perfectly again!
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   63
+ +++++++++++++++++------
+ 1 files changed, 46 insertions(+), 17 deletions(-)
+
+commit b20970dc224472076c18e5a28ab40e38fc7ea605
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 03:47:31 2009 -0400
+
+    [HB] Implement backtrack matching
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   61
+ +++++++++++++++++------
+ 1 files changed, 45 insertions(+), 16 deletions(-)
+
+commit e1b4d68c0d4a6cf656288ba5d88419ce4b914228
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 02:47:57 2009 -0400
+
+    [HB] One more step to go, for fully working GSUB and ChainContext
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |  107
+ ++++++++++++++----------
+ 1 files changed, 61 insertions(+), 46 deletions(-)
+
+commit 21be5dfef4033ecd5e7c0f69fc2ca0038e2a8ea1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 02:36:18 2009 -0400
+
+    [HB] Further modularize Context matching
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   92
+ ++++++++++++++++--------
+ 1 files changed, 63 insertions(+), 29 deletions(-)
+
+commit d9acee5295e6dde5f672c9ce0456520543f5df66
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 02:14:37 2009 -0400
+
+    [HB] A step closer to working ChainContext
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   36
+ +++++++++++++++++------
+ 1 files changed, 26 insertions(+), 10 deletions(-)
+
+commit ac227e24dd98e77da9d548d81ac9efa3afa4d816
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 02:03:58 2009 -0400
+
+    [HB] Add HeadlessArrayTo<>
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |   10 ++++------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    5 ++---
+ pango/opentype/hb-ot-layout-open-private.h    |   19 +++++++++++++++++++
+ 3 files changed, 25 insertions(+), 9 deletions(-)
+
+commit 4dbe5b6afe47fec3344c450f3bcf5691118dd78b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 18 01:49:57 2009 -0400
+
+    [HB] More template goodness
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   37
+ +++++++++--------------
+ 1 files changed, 15 insertions(+), 22 deletions(-)
+
+commit f445e05b822699356536d138a0d5f02bdc8372ac
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 23:17:56 2009 -0400
+
+    [HB] More churning towards ChainContext lookups
+
+ pango/opentype/hb-ot-layout-common-private.h  |    6 +-
+ pango/opentype/hb-ot-layout-gsub-private.h    |   15 ++-
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |  174
+ +++++++++++++++---------
+ 3 files changed, 125 insertions(+), 70 deletions(-)
+
+commit d2c8763c55c4d59d1acf167c2614ecf76279e722
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 22:11:30 2009 -0400
+
+    [HB] Towards sharing Context and ChainContext code
+
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |  220
+ +++++++++++-------------
+ 1 files changed, 99 insertions(+), 121 deletions(-)
+
+commit d32b9ea104a606a92ad5a27999da7bce2090d675
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 21:11:49 2009 -0400
+
+    [HB] Add check to avoid infinite recursion
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  12 ++++++++----
+ 1 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 55fe0e4ea68c70815558a29d09fb139316cecc4d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 21:06:08 2009 -0400
+
+    [HB] Cosmetic
+
+ pango/opentype/hb-ot-layout-gsub-private.h |   4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit eea8dd6ee176dc275c23f84e5d42366f9bba8acf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 20:48:27 2009 -0400
+
+    [HB] Start ChainContext and ReverseChainSingleSubst lookups
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |  269
+ +++++-------------------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |  214
+ +++++++++++++++++++-
+ 2 files changed, 268 insertions(+), 215 deletions(-)
+
+commit 0c11bc365caaef22a125a1f315e5233df3f665cb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 20:30:05 2009 -0400
+
+    [HB] Remove stale TODO
+
+ pango/opentype/hb-ot-layout-private.h |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit fe01531dc12be28aaef610a0cd94c21dc476e9a6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 20:28:01 2009 -0400
+
+    [HB] Split Layout-common tables into new files
+
+ pango/opentype/hb-ot-layout-common-private.h  |  429
+ ++++++++++++++++++++++++
+ pango/opentype/hb-ot-layout-gdef-private.h    |    3 +-
+ pango/opentype/hb-ot-layout-gsub-private.h    |    1 +
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    2 +
+ pango/opentype/hb-ot-layout-open-private.h    |  408
+ ----------------------
+ 5 files changed, 434 insertions(+), 409 deletions(-)
+
+commit cd966a0ef311bc28e8d4a0025846c213f84cca9c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 20:13:02 2009 -0400
+
+    [HB] More shuffling
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |   71
+ ++++++++++++++----------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   30 ++++++++++
+ pango/opentype/hb-ot-layout-open-private.h    |   41 --------------
+ 3 files changed, 71 insertions(+), 71 deletions(-)
+
+commit 3b7ab5800e45a93ba3e58f8d1f9b67d6af2e529c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 19:47:54 2009 -0400
+
+    [HB] Cleanup format unions
+
+ pango/opentype/hb-ot-layout-gdef-private.h    |   18 +++---
+ pango/opentype/hb-ot-layout-gsub-private.h    |   87
+ ++++++++++++-----------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   16 ++--
+ pango/opentype/hb-ot-layout-open-private.h    |   41 ++++-------
+ 4 files changed, 77 insertions(+), 85 deletions(-)
+
+commit e2b95c6d00c5e7b2ad0c486ae3d3a7295a4109c7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 19:31:18 2009 -0400
+
+    [HB] Use four bytes for Null Tag, not 5
+
+ pango/opentype/hb-ot-layout-open-private.h |   4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+commit aec04a301f2e181626f7a3067d69e003ba915b32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 09:45:32 2009 -0400
+
+    [HB] Couple size checks
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |    7 +++++--
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    4 ++--
+ pango/opentype/hb-ot-layout-open-private.h    |    4 ++--
+ 3 files changed, 9 insertions(+), 6 deletions(-)
+
+commit 8bd68ca2afab4a0703c9a678bffbc683c310a408
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 09:34:41 2009 -0400
+
+    [HB] Propagate property of first glyph
+
+    This slightly grows code size.
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |  100
+ ++++++++++++-----------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |    7 +-
+ 2 files changed, 56 insertions(+), 51 deletions(-)
+
+commit 9222e0741549ba14a4edf153217fd95fc89d744d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 09:07:27 2009 -0400
+
+    [GSUB] Further optimize the main switch
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  31
+ +++++++++++++++------------
+ 1 files changed, 17 insertions(+), 14 deletions(-)
+
+commit 5bdc1ff677d37af311e887ef2717daa8fae008ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 08:59:01 2009 -0400
+
+    [HB] Unify first glyph property checking
+
+ pango/opentype/hb-ot-layout-gsub-private.h    |   81
+ ++++++++++-------------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |   12 ----
+ 2 files changed, 35 insertions(+), 58 deletions(-)
+
+commit ea8ac42a157bfdc0721886baf26a274c6494a742
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 08:28:42 2009 -0400
+
+    [HB] Move Context matching logic out of GSUB
+
+ pango/opentype/hb-ot-layout-gdef-private.h    |    2 -
+ pango/opentype/hb-ot-layout-gsub-private.h    |  331
+ +----------------------
+ pango/opentype/hb-ot-layout-gsubgpos-private.h |  347
+ ++++++++++++++++++++++++
+ 3 files changed, 352 insertions(+), 328 deletions(-)
+
+commit 908360671e03888edeb40a486f588c5fb2788b7d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 07:52:11 2009 -0400
+
+    [GSUB] Unify ContextSubst matching
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  378
+ +++++++++++----------------
+ 1 files changed, 154 insertions(+), 224 deletions(-)
+
+commit 264a07cd621fce810914c43bb43885519b819aab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 07:39:34 2009 -0400
+
+    [HB] Renames
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  122
+ ++++++++++++++--------------
+ 1 files changed, 61 insertions(+), 61 deletions(-)
+
+commit 92c65d29132105784b18b60ba938a3ec86dfcb76
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 06:03:42 2009 -0400
+
+    [HB] Simplify buffer
+
+ pango/opentype/harfbuzz-buffer-private.h   |  14 ++++------
+ pango/opentype/harfbuzz-buffer.c          |   35
+ ++++++++++++---------------
+ pango/opentype/harfbuzz-gsub.c                    |    6 ++--
+ pango/opentype/hb-ot-layout-gsub-private.h |  12 ++++----
+ 4 files changed, 31 insertions(+), 36 deletions(-)
+
+commit f1e6c0487f5c1bc72061f49a0faa3b134736b06a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 05:52:32 2009 -0400
+
+    [HB] Add TODO item
+
+ pango/opentype/TODO             |    1 +
+ pango/opentype/harfbuzz-buffer.c |    2 +-
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+commit a44105aa2196e782c730dc102aaf77e2c4247ed5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 05:14:33 2009 -0400
+
+    [HB] Update copyright years
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   2 +-
+ pango/opentype/hb-ot-layout-open-private.h |   2 +-
+ pango/opentype/hb-ot-layout.cc                    |    2 +-
+ pango/opentype/main.cc                            |    2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 3532e39c36720f6c93392ba71dd46d89252836a4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 04:59:56 2009 -0400
+
+    [HB] Simplify more arrays
+
+ pango/opentype/hb-ot-layout-open-private.h |  243
+ +++++++++++-----------------
+ pango/opentype/hb-ot-layout.cc                    |    8 +-
+ 2 files changed, 101 insertions(+), 150 deletions(-)
+
+commit 620d7f7fdc5a83047d6f0370c321a59918ae7dd3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 01:22:51 2009 -0400
+
+    [HB] Use ArrayOf<> in GSUB
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   3 +-
+ pango/opentype/hb-ot-layout-gsub-private.h |  157
+ +++++++++-------------------
+ pango/opentype/hb-ot-layout-open-private.h |   5 -
+ 3 files changed, 53 insertions(+), 112 deletions(-)
+
+commit 3d6f115c751830cff0b7389ae6e0c33322f1dcce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 00:54:25 2009 -0400
+
+    [HB] Add ArrayOf<>
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  62 +++++-----------------
+ pango/opentype/hb-ot-layout-open-private.h |  77
+ ++++++++++++++++++++-------
+ 2 files changed, 71 insertions(+), 68 deletions(-)
+
+commit 2cb82da2cf865cdc05e23745ea07bff773eedc0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 00:22:37 2009 -0400
+
+    [HB] Use OffsetTo<> for Coverage
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   1 +
+ pango/opentype/hb-ot-layout-gsub-private.h |  55
+ +++++++++++-----------------
+ pango/opentype/hb-ot-layout-open-private.h |  10 +-----
+ 3 files changed, 23 insertions(+), 43 deletions(-)
+
+commit fe6de1703567ddd2e3f5bf8f604d6f8961938340
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 00:15:51 2009 -0400
+
+    [HB] Use OffsetTo<> in more places
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  12 +++++-------
+ pango/opentype/hb-ot-layout-open-private.h |   4 ++++
+ 2 files changed, 9 insertions(+), 7 deletions(-)
+
+commit 0f7838ced386421f0bdf6692c0a383a4d308e270
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 17 00:09:20 2009 -0400
+
+    [HB] Add OffsetTo template.
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  26
+ ++++++++++++++------------
+ pango/opentype/hb-ot-layout-gsub-private.h |   6 +++---
+ pango/opentype/hb-ot-layout-open-private.h |  27
+ ++++++++++++++++++---------
+ 3 files changed, 35 insertions(+), 24 deletions(-)
+
+commit c18aecadc6be7a14a205d1c31ad8c1c6d018bd24
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 16 23:20:48 2009 -0400
+
+    [HB] Automate int-type size assertion
+
+ pango/opentype/hb-ot-layout-open-private.h |  13 +++----------
+ 1 files changed, 3 insertions(+), 10 deletions(-)
+
+commit d34fc6f5b7efc8d04a9dec527856a370b939dfc2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 16 22:48:14 2009 -0400
+
+    [HB] Use templates for Null objects
+
+    Also use a common pool for all nul-content ones.
+
+ pango/opentype/hb-ot-layout-gdef-private.h |  12 +-
+ pango/opentype/hb-ot-layout-gsub-private.h |  28 +++---
+ pango/opentype/hb-ot-layout-open-private.h |  142
+ ++++++++++++++++------------
+ pango/opentype/hb-ot-layout.cc                    |    8 +-
+ 4 files changed, 105 insertions(+), 85 deletions(-)
+
+commit c4f14a9a2a6cb947d6cd46fbaee84872446884b7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 16 20:15:16 2009 -0400
+
+    [HB] Remove obsolete comment
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+commit b05941e12b2891d9064c4a7717a155d8b622aa6c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 16 19:59:15 2009 -0400
+
+    [GSUB] Start ChainContextSubst
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  50
+ +++++++++++++++++++++------
+ 1 files changed, 39 insertions(+), 11 deletions(-)
+
+commit 241fbceffc58deff47323280915dfd67a6d23329
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat May 16 19:44:24 2009 -0400
+
+    [GSUB] Implement ContextSubstFormat3
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  62
+ +++++++++++++++++++++++++++-
+ 1 files changed, 61 insertions(+), 1 deletions(-)
+
+commit e9622c8c8c1dd88f63e1ba01df5295fc59eafde8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 15 20:25:37 2009 -0400
+
+    [GSUB] Implement ContextSubstFormat2
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  105
+ +++++++++++++++++++++++++--
+ 1 files changed, 97 insertions(+), 8 deletions(-)
+
+commit 75778ef4af51ce974fc9af25063f7bb239563b5a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 15 20:11:10 2009 -0400
+
+    [GSUB] Add GSUB::substitute_lookup()
+
+ pango/opentype/hb-ot-layout-gsub-private.h |   7 +++++++
+ pango/opentype/hb-ot-layout.cc                    |    5 +----
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+commit 761d13a4ead9b627bbfa561ffbb667b6a5704a5e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 15 18:54:53 2009 -0400
+
+    [GSUB] Finish ContextSubstFormat1
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  77
+ +++++++++++++++++++++------
+ pango/opentype/hb-ot-layout-private.h     |   14 +++++
+ pango/opentype/hb-ot-layout.cc                    |   13 -----
+ 3 files changed, 74 insertions(+), 30 deletions(-)
+
+commit 6ec3231cbe0014e43bdccb0588260595b6fb463f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 15 13:28:56 2009 -0400
+
+    [HB] Fix typo
+
+ pango/opentype/hb-ot-layout-open-private.h |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 35f3896cfc703b6b06fad76778f357a0c9fdde38
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 15 01:00:36 2009 -0400
+
+    [HB] Add TODO item
+
+ pango/opentype/TODO |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 9042dae8a1a4f4727a49b220f13487d50bc2e6fb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 8 21:17:56 2009 -0400
+
+    [HB] Remove DEFINE_NON_INSTANTIABLE
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   2 --
+ pango/opentype/hb-ot-layout-gsub-private.h |   3 ---
+ pango/opentype/hb-ot-layout-open-private.h |  18 +-----------------
+ 3 files changed, 1 insertions(+), 22 deletions(-)
+
+commit 384c824418c8510d77f47ea10adeaa234612500b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 8 21:12:18 2009 -0400
+
+    [HB] Remove get_size()
+
+ pango/opentype/hb-ot-layout-gdef-private.h |   9 ----
+ pango/opentype/hb-ot-layout-gsub-private.h |  63
+ ----------------------------
+ pango/opentype/hb-ot-layout-open-private.h |  42 +-----------------
+ 3 files changed, 3 insertions(+), 111 deletions(-)
+
+commit 9ca1c677b6f9e4329bbf9efc826621845b12b879
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 8 19:09:17 2009 -0400
+
+    [GSUB] ContextSubst format 1
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  52
+ ++++++++++++++++++++++++----
+ 1 files changed, 45 insertions(+), 7 deletions(-)
+
+commit dc7f2949972981ad3253df73c9562c1ac2032ef9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 8 18:45:53 2009 -0400
+
+    [GSUB] Shuffle
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  170
+ ++++++++++++++--------------
+ 1 files changed, 86 insertions(+), 84 deletions(-)
+
+commit 21d6ce8759a582bfdf475e0f7f149338909b7c04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu May 7 12:53:02 2009 -0400
+
+    [HarfBuzz] Start a TODO file
+
+ pango/opentype/TODO |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 24eb2f6e5bbde72b27f33a816d22cced57b9bbc2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 6 00:25:59 2009 -0400
+
+    [GSUB] minor
+
+ pango/opentype/hb-ot-layout-open-private.h |   6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+commit 5e2e37cbbb7612f595b9c8af72fe4709b2386857
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed May 6 00:12:29 2009 -0400
+
+    [GSUB] Towards Context subtitutes
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  137
+ ++++++++++++++++++++++------
+ 1 files changed, 108 insertions(+), 29 deletions(-)
+
+commit e3d3752ed67492358212ecff6f2e3ea71537b4b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 5 16:22:02 2009 -0400
+
+    [GSUB] Minor refactoring
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  42
+ +++++++++++++++------------
+ 1 files changed, 23 insertions(+), 19 deletions(-)
+
+commit 8afbf62147bca4db12e78426ea9c41b5e801c7ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue May 5 13:25:13 2009 -0400
+
+    [GSUB] Implement ligature substitutions
+
+ pango/opentype/Makefile.am                |    2 +
+ pango/opentype/hb-ot-layout-gsub-private.h |  113
+ ++++++++++++++++++++++------
+ 2 files changed, 93 insertions(+), 22 deletions(-)
+
+commit 0bb5d464baab47bb7b6e9852a5c7932bdb2df018
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 4 20:21:57 2009 -0400
+
+    [GSUB] Hook new GSUB up in Pango
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  15 ++++--
+ pango/pango-ot-info.c                     |   65
+ ++++++++++++++++------------
+ pango/pango-ot-private.h                  |   14 +++++-
+ pango/pango-ot-ruleset.c                  |   37 +--------------
+ 4 files changed, 62 insertions(+), 69 deletions(-)
+
+commit 644d9208ce6f916d702d41f35c3bd3f87552fa7b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 16 16:53:40 2009 -0400
+
+    [GSUB] Start Ligature subtable support
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  132
+ ++++++++++++++++++++--------
+ pango/opentype/hb-ot-layout.h             |    2 +-
+ 2 files changed, 96 insertions(+), 38 deletions(-)
+
+commit 2d1c3ed6ac99d73df640eaa8245771e32322aab5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 16 14:19:42 2009 -0400
+
+    [GSUB] Implement Alternate subtables
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  104
+ +++++++++++++++++++++++++--
+ pango/opentype/hb-ot-layout-open-private.h |   2 +-
+ 2 files changed, 97 insertions(+), 9 deletions(-)
+
+commit 031314080876e4507eed89315e3bde044e16ab05
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 16 13:40:13 2009 -0400
+
+    [GSUB] Implement Extension subtables
+
+ pango/opentype/hb-ot-layout-gsub-private.h |  169
+ ++++++++++++++++++----------
+ 1 files changed, 108 insertions(+), 61 deletions(-)
+
+commit 3be923835e89c9697d7c0ab24013a353fbafa9ab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 16 12:30:51 2009 -0400
+
+    [GSUB] Fix reverse lookup loop like we did in the old code before
+
+ pango/opentype/hb-ot-layout-gsub-private.h |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 25f2af64013f6d88289d526315d2d0c91b77e3a1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 16 04:45:30 2009 -0400
+
+    [harfbuzz/GSUB] towards a partially working GSUB
+
+ pango/opentype/harfbuzz-buffer.c          |    2 +-
+ pango/opentype/harfbuzz-impl.h                    |    2 +-
+ pango/opentype/harfbuzz.c                 |    1 -
+ pango/opentype/hb-ot-layout-gdef-private.h |   4 +-
+ pango/opentype/hb-ot-layout-gsub-private.h |  383
+ ++++++++++++++++++++-------
+ pango/opentype/hb-ot-layout-open-private.h |  31 ++-
+ pango/opentype/hb-ot-layout-private.h     |    6 +-
+ pango/opentype/hb-ot-layout.cc                    |   94 +++++--
+ pango/opentype/hb-ot-layout.h             |    2 -
+ 9 files changed, 381 insertions(+), 144 deletions(-)
+
+commit 6c68a82054505d3d1c8101cdb534fc8843354804
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 15 22:56:15 2009 -0400
+
+    Implement the first substitute()
+
+ pango/opentype/harfbuzz-buffer-private.h   |   8 +-
+ pango/opentype/harfbuzz-buffer.c          |    4 +-
+ pango/opentype/harfbuzz-buffer.h          |    2 +-
+ pango/opentype/harfbuzz-gdef-private.h     |   4 +-
+ pango/opentype/harfbuzz-gdef.c                    |    6 +-
+ pango/opentype/harfbuzz-gdef.h                    |    2 +-
+ pango/opentype/harfbuzz-gpos.c                    |    8 +-
+ pango/opentype/harfbuzz-gpos.h                    |    2 +-
+ pango/opentype/harfbuzz-gsub.h                    |    2 +-
+ pango/opentype/hb-ot-layout-gsub-private.h |  88
+ +++++++++++++++++++++++++---
+ pango/opentype/hb-ot-layout-open-private.h |   2 +-
+ pango/opentype/hb-ot-layout-private.h     |   23 ++++---
+ pango/opentype/hb-ot-layout.cc                    |   54 ++++++++++++-----
+ pango/opentype/hb-ot-layout.h             |    2 +-
+ 14 files changed, 151 insertions(+), 56 deletions(-)
+
+commit 23fe8a3b2aa15ea135704d8c25321a016a6972ae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 15 20:14:24 2009 -0400
+
+    Merge harfbuzz-ng
+
+ pango/opentype/Makefile.am                |   16 +-
+ pango/opentype/harfbuzz-buffer-private.h   |   6 +-
+ pango/opentype/harfbuzz-global.h          |    3 +
+ pango/opentype/harfbuzz-gpos.c                    |  121 ++--
+ pango/opentype/harfbuzz-gpos.h                    |    6 +-
+ pango/opentype/harfbuzz-gsub.c                    |  145 ++---
+ pango/opentype/harfbuzz-gsub.h                    |    4 +-
+ pango/opentype/harfbuzz-impl.h                    |   11 +-
+ pango/opentype/harfbuzz-open.c                    |    9 -
+ pango/opentype/harfbuzz.h                 |    1 -
+ pango/opentype/hb-ot-layout-gdef-private.h |  276 ++++++++
+ pango/opentype/hb-ot-layout-gsub-private.h |  583 ++++++++++++++++
+ pango/opentype/hb-ot-layout-open-private.h |  993
+ ++++++++++++++++++++++++++++
+ pango/opentype/hb-ot-layout-private.h     |   66 ++
+ pango/opentype/hb-ot-layout.cc                    |  565 ++++++++++++++++
+ pango/opentype/hb-ot-layout.h             |  229 +++++++
+ pango/opentype/main.cc                            |  174 +++++
+ pango/pango-ot-buffer.c                   |   12 +-
+ pango/pango-ot-info.c                     |  397 +++---------
+ pango/pango-ot-private.h                  |    4 +-
+ 20 files changed, 3127 insertions(+), 494 deletions(-)
+
+commit 8cf1dc67718227b27e79ba2694a93f4005d51db1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 4 16:23:51 2009 -0400
+
+    Released 1.24.2
+
+ NEWS        |   11 +++++++++++
+ configure.in |    4 ++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+commit 6054aeddf94d0fee1e9274510aa71c75d84c6f05
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 4 16:00:06 2009 -0400
+
+    [git.mk] Better deal with non-automake directories
+
+ git.mk |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 2dbd066cbab8b9bfcf967e9147415db4f5627ab5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon May 4 14:16:25 2009 -0400
+
+    [git.mk] Update
+
+ git.mk |  157
+ ++++++++++++++++++++++++++++++++-------------------------------
+ 1 files changed, 80 insertions(+), 77 deletions(-)
+
+commit 967e4eb92e3b7ce2bd92f18a84ecdc3f8bb39ed3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 3 20:29:17 2009 -0400
+
+    [git.mk] Fix DEST_SUBDIR recursion
+
+ git.mk |   15 ++++++++-------
+ 1 files changed, 8 insertions(+), 7 deletions(-)
+
+commit f7c76896afc0f34db01a039933ee64ddc23bc3ab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun May 3 20:25:33 2009 -0400
+
+    [git.mk] Recurse in DIST_SUBDIRS too
+
+ git.mk |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 2c9979d6a01b5fb4951f1413ad8468ed10415c64
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri May 1 14:05:31 2009 -0400
+
+    Bug 580987 – SIGFPE in pango_glyph_string_index_to_x
+
+    Be pedantic about broken cluster setup, avoid div-by-zero.
+
+ pango/glyphstring.c |   6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+commit 150573e610c0b14c34aba6fe17b1a6e36d282767
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 27 14:24:24 2009 -0400
+
+    [doap] Add mailto:
+
+ pango.doap |   4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit c91e757da1835900b73dcde3128ea4f5a5290c59
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 26 21:39:06 2009 -0400
+
+    Bug 580273 – Font metrics functions incorrectly listed as reporting
+    point sizes
+
+    [doc] Remove misleading sentence about points and Pango units
+
+ pango/fonts.c |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+commit ff7dc9ae5d9b1cc340c6859bd5f3aa3054b19bea
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 26 02:22:14 2009 -0400
+
+    [git.mk] Also ignore other vim buffer files
+
+ git.mk |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 131f9b20f0d8748baf7e9bf27166c91ec8bad88f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Apr 25 20:33:03 2009 -0400
+
+    Fix maintainer-clean
+
+ git.mk |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit abb1367e9942509a0e5e30df5451a5cfe07a415e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 23 23:17:38 2009 -0400
+
+    [git.mk] Replace "git stat" with "git status"
+
+    Apparently "stat" was aliased by me locally.
+
+ git.mk |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 37baf42b1b74884156162c317a6604951e4f2d19
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 21 15:15:08 2009 -0400
+
+    Bug 579694 – Cygwin parallel-build patch
+
+    Fix build on Cygwin.
+
+ pango-view/Makefile.am |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 049634718ff06752eb2722449a358a8248bcdea9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Apr 19 15:35:33 2009 -0400
+
+    [DOAP] Add category
+
+ pango.doap |   1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+commit 4ad7bc1ece28204a528561fa383ffc4664c5c578
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Apr 18 16:19:24 2009 -0400
+
+    [git.mk] Support out-of-tree builds
+
+ git.mk |   14 +++++++++-----
+ 1 files changed, 9 insertions(+), 5 deletions(-)
+
+commit d0830820f84eb28a27502306b6acbf0f2b57fc7d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Apr 18 15:04:41 2009 -0400
+
+    [git.mk] Remove copyright claim
+
+ git.mk |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit f88ab902430d3c01a83b980bf723058507c08d1f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 23:22:08 2009 -0400
+
+    [Makefile.am] Minor cleanup
+
+ Makefile.am |   5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+commit 0564202a417e3d8eb6aad2c93c6d5e716f967549
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 21:37:53 2009 -0400
+
+    [git.mk] Add gnome-doc-utils support
+
+ Makefile.am |   1 +
+ git.mk      |  23 ++++++++++++++++++++---
+ 2 files changed, 21 insertions(+), 3 deletions(-)
+
+commit 43e7787c1497fec5addc5db5bf5c29ed2191cf74
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 21:11:37 2009 -0400
+
+    [git.mk] Document more
+
+ git.mk |  107
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++------------
+ 1 files changed, 87 insertions(+), 20 deletions(-)
+
+commit 133839d1d7ae77cfc80638a3a29187794f87dddf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 17:55:39 2009 -0400
+
+    [git.mk] Document
+
+ Makefile.am |   3 +++
+ git.mk      |  22 ++++++++++++++++++++--
+ 2 files changed, 23 insertions(+), 2 deletions(-)
+
+commit d71b8b4c90fdce60ee3a5d3494c6ef589b120613
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 17:27:03 2009 -0400
+
+    [docs] Fix Makefile.am to not delete .gitignore on dist
+
+ docs/Makefile.am |    5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+commit 137f858f17f680e2487bf4614a33c411c69469c7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 17:24:02 2009 -0400
+
+    [doc] Update templates
+
+ docs/tmpl/pangofc-font.sgml |   5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+commit 1140637cc765e449d381ae2d3a2ef6e3c9a98334
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 17:03:39 2009 -0400
+
+    Use git.mk
+
+ Makefile.am                   |    2 ++
+ docs/Makefile.am              |    2 ++
+ examples/Makefile.am          |    2 ++
+ modules/Makefile.am           |    2 ++
+ modules/arabic/Makefile.am    |    2 ++
+ modules/basic/Makefile.am     |    2 ++
+ modules/hangul/Makefile.am    |    2 ++
+ modules/hebrew/Makefile.am    |    2 ++
+ modules/indic/Makefile.am     |    2 ++
+ modules/khmer/Makefile.am     |    2 ++
+ modules/syriac/Makefile.am    |    2 ++
+ modules/thai/Makefile.am      |    2 ++
+ modules/tibetan/Makefile.am   |    2 ++
+ pango-view/Makefile.am                |    2 ++
+ pango/Makefile.am             |    2 ++
+ pango/mini-fribidi/Makefile.am |    2 ++
+ pango/opentype/Makefile.am    |    2 ++
+ tests/Makefile.am             |    2 ++
+ tools/Makefile.am             |    2 ++
+ 19 files changed, 38 insertions(+), 0 deletions(-)
+
+commit 5016f4caab5ecaa3c6faf46746c19801a72e9f08
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 17:03:25 2009 -0400
+
+    Add git.mk
+
+ git.mk |   72
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 72 insertions(+), 0 deletions(-)
+
+commit b712138ad9d1f0eebb5f1ecc48d89ead7abf4a9f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Apr 17 13:28:56 2009 -0400
+
+    Doap it up
+
+ Makefile.am |   3 ++-
+ pango.doap  |  33 +++++++++++++++++++++++++++++++++
+ 2 files changed, 35 insertions(+), 1 deletions(-)
+
+commit f1bda36443d1759e02a4168563de21f08b39c566
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 14 14:09:42 2009 -0400
+
+    Bug 578944 – pango-1.24.1 fails its testsuite
+
+    Fix doc coverage.
+
+ docs/Makefile.am      |    1 +
+ docs/tmpl/scripts.sgml |    7 -------
+ 2 files changed, 1 insertions(+), 7 deletions(-)
+
+commit 8197b4d1721d905f1cda3207494df525be112f5d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Apr 14 11:09:41 2009 -0400
+
+    Bug 578935 – Syntax error (missing semicolon) in
+    pango/pangowin32-fontmap.c
+
+    Add missing semicolon.
+
+ NEWS                       |   19 +++++++++++++++++++
+ configure.in               |    4 ++--
+ docs/tmpl/pangofc-font.sgml |   5 -----
+ pango/pangowin32-fontmap.c  |   2 +-
+ 4 files changed, 22 insertions(+), 8 deletions(-)
+
+commit 2fc08eeb9daeabd9fbac1e8ae409581117601bb5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Apr 9 13:30:26 2009 -0400
+
+    Bug 577952 – Error loading {GDEF,GSUB,GPOS} table 0x6EAD
+
+    Detect TrueType Collections by checking the font data header instead
+    of checking for "face->num_faces >1".
+
+ pango/opentype/harfbuzz-stream.c |   11 +++++++++--
+ 1 files changed, 9 insertions(+), 2 deletions(-)
+
+commit c5921ca904f3ab25f975e4c719c7334a31d84434
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Apr 8 15:47:00 2009 -0400
+
+    [pangofc] Be more tolerant on the "fontmap" property setting
+
+    Bug 578336 – ABI breakage from 1.22 to 1.24 in fontmap field
+    of PangoFcFont
+
+    Commit 9305b9a9995e84ace3818a90346820ef8c47a3ce introduced a "fontmap"
+    property in PangoFcFont and expected all subclasses to set it upon
+    construction.  And PangoFcFontSet was changed to not set
+    fcfont->fontmap
+    anymore.
+
+    Relax this change to make it backward compatible by:
+
+      1) Making "fontmap" property a not-construct-only property
+
+      2) In PangoFcFontSet, set "fontmap" if not already set
+
+    This should make it backward compatible, while allowing new code to
+    set the
+    property instead of relying on PangoFcFontSet to do it.
+
+ pango/pangofc-font.c   |    2 +-
+ pango/pangofc-fontmap.c |    5 +++++
+ 2 files changed, 6 insertions(+), 1 deletions(-)
+
+commit 7a654f4999cdedf71d2c39cfa6ccf6fe2a7a8477
+Author: Peter Clifton <pcjc2@cam.ac.uk>
+Date:  Tue Apr 7 16:21:24 2009 -0400
+
+    [doc] Tag markup attributes with version they were introduced
+
+ docs/pango_markup.sgml |   16 ++++++++--------
+ docs/tmpl/scripts.sgml |    7 +++++++
+ 2 files changed, 15 insertions(+), 8 deletions(-)
+
+commit dd6ce709db5872132335fef9f75aa16a33d6e5aa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:49:02 2009 -0400
+
+    [layout] Truncate final whitespace in the line before ellipsizing
+
+    Bug 556132 – gnome-panel crashed with SIGSEGV in
+    g_cclosure_marshal_VOID__BOXED()
+
+    Not after. Also fixes invalid memory access in case line was both
+    wrapped and ellipsized.
+
+ pango/pango-layout.c |   16 +++++++---------
+ 1 files changed, 7 insertions(+), 9 deletions(-)
+
+commit b6b9a22500c3e760f7c05d6c1fd62ff1529dee1b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:47:40 2009 -0400
+
+    [layout] When computing empty line extents, use both layout and
+    context fontdesc
+
+    By merging them.  This is what happens for loading fonts in
+    pango-context.
+    We should do the same or we'll get zero-size fonts if layout has a
+    font desc
+    set with no size.
+
+ pango/pango-layout.c |   23 ++++++++++++++---------
+ 1 files changed, 14 insertions(+), 9 deletions(-)
+
+commit 5ea040faf98de83101d50d1dfa141cdaf0cc5c2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:46:49 2009 -0400
+
+    [layout] Don't break line on LINE_SEPARATOR if the line is to be
+    ellipsized
+
+ pango/pango-layout.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+commit caabe183c7747d7486695071ab592e677bbdce25
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:45:04 2009 -0400
+
+    Allow font_family=NULL in load_font() and load_fontset() methods
+
+ pango/pango-context.c     |    5 +----
+ pango/pango-fontmap.c     |    6 +++---
+ pango/pangoatsui-fontmap.c |   5 ++++-
+ pango/pangowin32-fontmap.c |   8 +++++---
+ pango/pangox-fontmap.c     |   4 +++-
+ 5 files changed, 16 insertions(+), 12 deletions(-)
+
+commit 1e990af007255d1137ec76bd86658198d73994c6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:43:17 2009 -0400
+
+    [xft,ft2] Fix empty-glyph logical extents
+
+    Previously we were returning zero. We now return the height of the
+    glyph for space.
+
+ pango/pangoft2.c      |   17 ++++++++++++-----
+ pango/pangoxft-font.c |   23 ++++++++++++++++++-----
+ 2 files changed, 30 insertions(+), 10 deletions(-)
+
+commit e61e53f197bf238269a9db736901e64fd999190a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:42:06 2009 -0400
+
+    Allow desc_to_merge=NULL in pango_font_description_merge()
+
+ pango/fonts.c |    8 ++++++--
+ 1 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 3948365307f6b70863d89af7da832b84af72c263
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Apr 6 19:41:32 2009 -0400
+
+    Use g_debug() instead of g_message()
+
+ pango/break.c       |    2 +-
+ pango/pango-layout.c |   10 +++++-----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit fed14242693db7f79c51190698aaf015d0e0a44f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 30 13:21:23 2009 -0400
+
+    [cairotwisted] Plug couple other leaks
+
+ examples/cairotwisted.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 434011df553c8d40c1e6508c9bdea4884e591f97
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 30 13:13:39 2009 -0400
+
+    [cairotwisted] Plug leak
+
+ examples/cairotwisted.c |    6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+commit 17ea2edc6defca2862bd45680d80e525998ea738
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 26 01:06:13 2009 -0400
+
+    [indic] Fix build
+
+ modules/indic/indic-ot-class-tables.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit cf13cde8a80c9a1a9d4c9e343c634350da59991a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 26 01:03:43 2009 -0400
+
+    Bug 571291 – Unicode 5.1 support in pango - Indic Lanuages
+
+    Add char class for new characters.
+    Patch from Rahul Bhalerao.
+
+ modules/indic/indic-ot-class-tables.c |   20 +++++++++++---------
+ 1 files changed, 11 insertions(+), 9 deletions(-)
+
+commit 477747bc1ef1078b06c4e1c615a1a912e6ada299
+Author: Sebastian Dröge <slomo@circular-chaos.org>
+Date:  Mon Mar 23 19:16:58 2009 -0400
+
+    Bug 576298 – Fails to link pango-view if --without-x is specified
+    but cairo has X11 support
+
+ pango-view/pango-view.c   |   2 +-
+ pango-view/viewer-cairo.c |   4 ++++
+ 2 files changed, 5 insertions(+), 1 deletions(-)
+
+commit 698203ab28bc679c2e62a2452a79d5785fd46ca7
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:  Wed Mar 18 13:02:13 2009 +0000
+
+    [pango] Allocate PangoScriptIter on stack.
+
+    Move the PangoScriptIter structure definition to a private header
+    file,
+    so that we can embed the iterator within other structures or allocate
+    a local iterator on the stack. This eliminates the frequent
+    short-lived
+    allocations associated with the iterator.
+
+ pango/Makefile.am           |    1 +
+ pango/break.c               |   13 ++++---
+ pango/pango-context.c       |   13 ++++---
+ pango/pango-script-private.h |   56 +++++++++++++++++++++++++++++++++
+ pango/pango-script.c        |   70
+ ++++++++++++++++++------------------------
+ 5 files changed, 101 insertions(+), 52 deletions(-)
+
+commit 3241972c4f4d9c1d98d166c38cb0d7b12afb5545
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 17 12:05:34 2009 -0400
+
+    [pango-context] Fix assertion with enable_fallback=FALSE and no fonts
+
+ pango/pango-context.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+commit 7c025dc9d4ef396d991c823ed015c34aaf0eb3ae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 18:34:47 2009 -0400
+
+    Release 1.24.0
+
+ NEWS        |   37 +++++++++++++++++++++++++++++++++++++
+ configure.in |    4 ++--
+ 2 files changed, 39 insertions(+), 2 deletions(-)
+
+commit 4b68c2eb18bafffd2466df30aaf892ec7cd46c9b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 18:08:31 2009 -0400
+
+    Rename ChangeLog.pre-1.23 -> ChangeLog.pre-1-23
+
+ ChangeLog.pre-1-23 | 1858
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ ChangeLog.pre-1.23 | 1858
+ ----------------------------------------------------
+ 2 files changed, 1858 insertions(+), 1858 deletions(-)
+
+commit a08ef98448054f28d686d8bba8850e44056e33d7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 18:07:50 2009 -0400
+
+    [Makefile.am] Generage ChangeLog from git-log
+
+ Makefile.am |  17 +++++++++++++++++
+ 1 files changed, 17 insertions(+), 0 deletions(-)
+
+commit c82e8ad9dda142b1acfbcb86054750e082600893
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 17:25:33 2009 -0400
+
+    Bug 547963 – man page for pango-view
+
+ pango-view/Makefile.am     |  26 ++++++++++++++++++++++++++
+ pango-view/viewer-main.c   |   1 +
+ pango-view/viewer-render.c |  13 +++++--------
+ 3 files changed, 32 insertions(+), 8 deletions(-)
+
+commit 69e1f7921525c2849d937b5a822475007a4f9a2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 16:57:58 2009 -0400
+
+    Bug 502804 – pango-view or pangocairo-view option to annotate
+
+    Added --annotate.
+
+    Also fixes:
+    Bug 502801 – per-backend pango-view options
+
+ pango-view/viewer-cairo.c     |    5 +++++
+ pango-view/viewer-cairo.h     |    2 ++
+ pango-view/viewer-pangocairo.c |   33 +++++++++++++++++++++++++++++++--
+ pango-view/viewer-render.c    |   15 ++++++++++++---
+ pango-view/viewer.h           |    1 +
+ 5 files changed, 51 insertions(+), 5 deletions(-)
+
+commit 56ff9ed93d1cc9fd091da609304bd153d706d818
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 16:33:48 2009 -0400
+
+    [pango-view] Add an extra level of mild annotation to cairo backend
+
+ pango-view/viewer-main.c      |    2 +-
+ pango-view/viewer-pangocairo.c |  133
+ ++++++++++++++++++++-------------------
+ pango-view/viewer-x.c         |   15 ++---
+ 3 files changed, 74 insertions(+), 76 deletions(-)
+
+commit c4f9a30634779bc985a470df2bc9f7e4fa0e6ad0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 16:32:02 2009 -0400
+
+    [pango-view] Clear background in _render
+
+ pango-view/viewer-cairo.c    |   90
+ ++++++++++++++++++++++++++----------------
+ pango-view/viewer-pangoxft.c |   21 ++++------
+ pango-view/viewer-x.c       |    8 ----
+ 3 files changed, 65 insertions(+), 54 deletions(-)
+
+commit a6af36b9c06b81ab8095afff85f68f37c27a4b3b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 16:03:36 2009 -0400
+
+    Bug 502805 – pango-view option for foreground/background color
+
+ pango-view/viewer-cairo.c     |   58 +++++++++++++++++-------
+ pango-view/viewer-cairo.h     |    3 +
+ pango-view/viewer-pangocairo.c |   13 +++++-
+ pango-view/viewer-pangoxft.c  |   26 +++++++----
+ pango-view/viewer-render.c    |   97
+ +++++++++++++++++++++++++++++++++++++++-
+ pango-view/viewer-render.h    |    7 +++-
+ pango-view/viewer-x.c         |    8 +++
+ 7 files changed, 182 insertions(+), 30 deletions(-)
+
+commit 2599e265eba6fd27b3f7684c484f3160f9a67595
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 16 11:23:22 2009 -0400
+
+    [configure.in] Look for pango.pc.in instead of ChangeLog
+
+ configure.in |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 4eb4cf81312691516c2129f04f245401b5566235
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Mar 15 15:50:13 2009 -0400
+
+    [pango-view] Don't clear the background for vector output
+
+ pango-view/viewer-cairo.c     |   28 ++++++++++++++++++++++++----
+ pango-view/viewer-pangocairo.c |    3 ---
+ 2 files changed, 24 insertions(+), 7 deletions(-)
+
+commit a3e3ba07b6da4bacb85ae6874cab10286d239903
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Mar 15 14:31:28 2009 -0400
+
+    [pango-view] Add ability to save to PS, EPS, PDF, and SVG
+
+ pango-view/viewer-cairo.c     |  192
+ +++++++++++++++++++++++++++++++++++++---
+ pango-view/viewer-cairo.h     |    2 +-
+ pango-view/viewer-pangocairo.c |    3 +-
+ 3 files changed, 183 insertions(+), 14 deletions(-)
+
+commit a4e47759bab59ce5b71a316dc4075c27eeece1e4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Mar 15 13:16:50 2009 -0400
+
+    [pango-view] Make the cairo backend save png natively
+
+ pango-view/viewer-pangocairo.c |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+commit a08cd2843ea38b142d375a15a08520c8758cd4ba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Mar 15 13:13:03 2009 -0400
+
+    [Makefile.am] Cleanup
+
+ pango-view/Makefile.am |   18 +++++-------------
+ 1 files changed, 5 insertions(+), 13 deletions(-)
+
+commit 9644e56231280151803e0bdbee7141507a6b899f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sun Mar 15 13:08:36 2009 -0400
+
+    Red Hat Bug 490331 -  Crash of galeon in libpango
+
+    Don't crash when no fonts installed.
+
+ pango/pangofc-fontmap.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit df05d117a5c168fb90138d7d6bae760c1b2851af
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 14 21:33:07 2009 -0400
+
+    Bug 523166 – pango-view opens display even when invoked with -q
+
+    Works now.
+
+ pango-view/viewer-cairo.c     |   85
+ ++++++++++++++++++++++++++++++++++++----
+ pango-view/viewer-cairo.h     |    2 +-
+ pango-view/viewer-main.c      |   12 +++++-
+ pango-view/viewer-pangocairo.c |    6 ++-
+ pango-view/viewer-x.c         |    4 +-
+ pango-view/viewer.h           |    1 -
+ 6 files changed, 93 insertions(+), 17 deletions(-)
+
+commit 3310b979c486e38182d89132d6b6b3e3d7ffb728
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 14 20:50:29 2009 -0400
+
+    [pango-view] Don't set metrics-hinting, fallback to surface default
+
+ pango-view/viewer-pangocairo.c |    2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+commit 5ca1d5b3373e6a2c2c69829a9ffd2a515d64e860
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 14 19:25:48 2009 -0400
+
+    [pango-view] Remove per-backend binaries
+
+ pango-view/Makefile.am       |   97
+ ------------------------------------------
+ pango-view/pangocairo-view.c |    8 ---
+ pango-view/pangoft2-view.c   |    8 ---
+ pango-view/pangox-view.c     |    8 ---
+ pango-view/pangoxft-view.c   |    8 ---
+ 5 files changed, 0 insertions(+), 129 deletions(-)
+
+commit f4508bc989919842e8df3ff5b9aeeffece29571c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 14 19:01:16 2009 -0400
+
+    Rebuild pango-script-lang-table.h with fontconfig-2.6.99.behdad
+
+ pango/pango-script-lang-table.h |  434
+ ++++++++++++++++++++++-----------------
+ 1 files changed, 241 insertions(+), 193 deletions(-)
+
+commit 46c65d090998b27a25ee89d36d444d645640934e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Sat Mar 14 19:00:54 2009 -0400
+
+    [Makefile.am] Fix build of gen-script-for-lang
+
+ tools/Makefile.am |   2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 04138218a9b515244f02202c5b18103e84e33d9e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Thu Mar 12 14:43:54 2009 -0400
+
+    [pangofc-fontmap] Document the caching structure
+
+ pango/pangofc-fontmap.c |   54
+ +++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 54 insertions(+), 0 deletions(-)
+
+commit 03a13541fbf3f49c21d73490570ca217f559acbb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 10 17:13:36 2009 -0400
+
+    [pangofc] Share cmap cache between PangoFcFont's of the same face
+    (#567160)
+
+ pango/pangofc-font.c   |   41 ++++--------
+ pango/pangofc-fontmap.c |  172
+ ++++++++++++++++++++++++++++++++--------------
+ pango/pangofc-private.h |   26 +++++++
+ 3 files changed, 158 insertions(+), 81 deletions(-)
+
+commit c84d4e6e068d802cd0fe2b23bee4c611ae9ef89f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 10 14:00:09 2009 -0400
+
+    [pangofc] Reuse filename from pattern in coverage key
+
+ pango/pangofc-fontmap.c |   28 ++++++++++++++++++++--------
+ 1 files changed, 20 insertions(+), 8 deletions(-)
+
+commit 9305b9a9995e84ace3818a90346820ef8c47a3ce
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 10 08:08:19 2009 -0400
+
+    [pangofc] Add a "fontmap" property to PangoFcFont
+
+    Gecko uses its own PangoFcFontMap subclass with its own PangoFontSet.
+    Previously we were setting font->fontmap in our own private
+    PangoFcFontSet.  Now it's up to the PangoFcFont subclass to set it
+    when creating the new font object.
+
+    Also adds the following backend-public symbol:
+
+       pango_fc_font_map_find_decoder()
+
+ docs/pango-sections.txt       |    1 +
+ docs/tmpl/pangofc-font.sgml   |    5 +++
+ docs/tmpl/pangofc-fontmap.sgml |   10 +++++
+ pango/pangocairo-fcfont.c     |    1 +
+ pango/pangofc-font.c          |   42 +++++++++++++++++++--
+ pango/pangofc-fontmap.c       |   79
+ +++++++++++++++++++++++++---------------
+ pango/pangofc-fontmap.h       |    2 +
+ pango/pangoft2.c              |    1 +
+ pango/pangoft2.def            |    1 +
+ pango/pangoxft-font.c         |    1 +
+ 10 files changed, 109 insertions(+), 34 deletions(-)
+
+commit ed941ddf131cbdd8f5e1e1efabd6e92c37010735
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 10 11:42:01 2009 -0400
+
+    [pango-coverage] Fix optimization bug in pango_coverage_to_bytes()
+
+ pango/pango-coverage.c |   19 +++++++++++--------
+ 1 files changed, 11 insertions(+), 8 deletions(-)
+
+commit fa908f4cb6db943b555a51d1ce4bf01112b1a710
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 10 09:05:39 2009 -0400
+
+    [pango-coverage] Use gslice for data arrays
+
+ pango/pango-coverage.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+commit b22da261e98702b95db83cd96175d0d655dc0df4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 10 08:26:20 2009 -0400
+
+    [pango-coverage] Remove unused struct member
+
+ pango/pango-coverage.c |    1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+commit e3cff8e0bb2926b2db1687182fab587ade7b64ee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Wed Mar 4 14:16:25 2009 +0330
+
+    Increase FONTSET_CACHE_SIZE from 64 to 256
+
+    Now that we keep a lot fewer objects per fontset, increase the
+    cache size.
+
+ pango/pangofc-fontmap.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+commit 5861e2609ded6495ebfd4110c4fc8f07ba32ebca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Tue Mar 3 01:30:03 2009 +0330
+
+    [pangofc-fontmap] Don't unref NULL object (RH bug# 487593)
+
+ pango/pangofc-fontmap.c |    6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+commit a45933e695a6a60ebae63b30b5a021859cb85305
+Author: Tor Lillqvist <tml@iki.fi>
+Date:  Mon Mar 9 14:21:49 2009 +0200
+
+    Revert change from 2008-05-28 that mapped words and word pairs that
+    indicate weight or stretch into the corrersponding Pango font
+    description setting and stripped those word(s) from the family name.
+
+    Personally I liked the effect this had on the GTK+ font picker,
+    combining all weight and stretch variants of what de facto is one
+    typeface family (for instance DejaVu) under one family name. But Bulia
+    Byak reported that this caused regressions in Inkscape. So OK then.
+
+ pango/pangowin32-fontmap.c |  100
+ +-------------------------------------------
+ 1 files changed, 2 insertions(+), 98 deletions(-)
+
+commit fab7a104d5c6f3182fe9bdc84bfcba5807f87f8a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 15:16:11 2009 +0330
+
+    [opentype] Protect against illegal access for arrays of length zero
+
+ pango/opentype/harfbuzz-gpos.c |   22 ++++++++++++++++++----
+ pango/opentype/harfbuzz-gsub.c |    6 ++++++
+ 2 files changed, 24 insertions(+), 4 deletions(-)
+
+commit caaa5d09e10d4fe01ef986c9a95826c3cbb13cfa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 14:20:20 2009 +0330
+
+    [opentype] Use size_t instead of uint for malloc wrappers
+
+ pango/opentype/harfbuzz-impl.c |    4 ++--
+ pango/opentype/harfbuzz-impl.h |    6 ++++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+commit 4de30e5500eaeb49f4bf0b7a07f718e149a2ed5e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 12:00:52 2009 +0330
+
+    [glyphstring] Handle overflow with very long glyphstrings
+
+ pango/glyphstring.c |  26 ++++++++++++++++++++------
+ 1 files changed, 20 insertions(+), 6 deletions(-)
+
+commit 1c9433bfe43890b102c8cead8ab3ee34b44c5c37
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 11:17:24 2009 +0330
+
+    [pango-language] Fix small leak
+
+    Reported by Tommi Rantala.
+
+ pango/pango-language.c |    6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+commit 7245e427818d88358f2c9fcfdbe777701d7b0ab9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 11:12:43 2009 +0330
+
+    Bug 572662 – Remove deprecated GTK+ symbols
+
+    Remove the obsolete file viewer-win32.c
+
+ pango-view/Makefile.am    |   1 -
+ pango-view/viewer-win32.c |  748
+ ---------------------------------------------
+ 2 files changed, 0 insertions(+), 749 deletions(-)
+
+commit e2f1e870a164dfe855542520c38b5d0b5758d433
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 11:11:09 2009 +0330
+
+    Rename ChangeLog to ChangeLog.pre-1.23
+
+ ChangeLog         | 1858
+ ----------------------------------------------------
+ ChangeLog.pre-1.23 | 1858
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Makefile.am       |    1 +
+ 3 files changed, 1859 insertions(+), 1858 deletions(-)
+
+commit 0586fb02661f1a8465ae94cd736d98200da7b147
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Mon Mar 2 11:09:29 2009 +0330
+
+    Fix Bug 572529 – Poor -I ordering can break build
+
+ pango/opentype/Makefile.am |   4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 44c9dd3d4c17776240a2bd7bdee93b5455ab76d5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date:  Fri Feb 6 19:23:48 2009 -0500
+
+    Fix warnings
+
+ tests/gen-all-unicode.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+commit d17a99734b13e3ea4886177c704d54fbb634a0f7
+Author: Behdad Esfahbod <behdad@src.gnome.org>
+Date:  Tue Feb 3 05:49:01 2009 +0000
+
+    Fix check.
+
+    svn path=/trunk/; revision=2829
+
+ pango/pangoft2.def |   6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+commit 400b54870729c2afe49d1aec2b43b2678e0d0844
+Author: Behdad Esfahbod <behdad@gnome.org>
+Date:  Tue Feb 3 05:34:15 2009 +0000
+
+    === Released 1.23.0 ===
+
+    2009-02-03 Behdad Esfahbod  <behdad@gnome.org>
+
+           * === Released 1.23.0 ===
+
+           * configure.in: Version 1.23.0
+
+           * NEWS: Updated.
+
+    svn path=/trunk/; revision=2828
+
+ ChangeLog |   8 ++++++++
+ NEWS     |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/ChangeLog.pre-1-0 b/ChangeLog.pre-1-0
new file mode 100755 (executable)
index 0000000..4b8b9ec
--- /dev/null
@@ -0,0 +1,5211 @@
+Thu Mar  7 22:55:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+       ===== Released 1.0.0 =====
+
+       * NEWS: Final updates for 1.0.0.
+
+       * README AUTHORS: Update.
+
+2002-03-07  jacob berkman  <jacob@ximian.com>
+
+       * autogen.sh: pass --enable-gtk-doc to configure
+
+2002-03-08  Tor Lillqvist  <tml@iki.fi>
+
+       * pango-zip.sh.in: Use PANGO_MODULE_VERSION in modules path.
+
+       * pango/pangoft2.def: Add the pango_ot_* symbols from the static
+       libpango-ot library.
+
+Thu Mar  7 14:42:50 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: As we do in other modules, default to
+       --disable-gtk-doc, and run the check we used to do
+       for the default when the --enable-gtk-doc is specified.
+       (Alain Rouge)
+
+Thu Mar  7 10:51:16 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Fix some problems with setting 
+       library variables for --enable-explicit-deps. (Laszlo Peter,
+       #73851) 
+
+Wed Mar  6 12:44:00 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Pango 1.0.0 rc2.
+
+Wed Mar  6 12:12:21 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c: Add some text names to weight map for
+       weights that were added to the PangoWeight enumeration
+       but not here. (#73728, Arnaud Charlet)
+
+2002-03-06  Manish Singh  <yosh@gimp.org>
+
+       * pango/Makefile.am: install-exec-hook should always exist,
+       because the automake rules assume it to be there if it is
+       included anywhere in the Makefile.am. So put only the body
+       of it inside DISABLE_EXPLICIT_DEPS.
+
+Wed Mar  6 11:43:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Fix problem where == was used instead if =.
+       (#73694, Martin Gansser)
+
+       * modules/Makefile.am (install-data-local): Simplify
+       the rule to create the pango.modules file to avoid
+       problems with differing shared library suffixes.
+       pango-querymodules run without any arguments does the
+       right thing by default. (#73694, Martin Gansser)
+
+       * configure.in: Add a PANGO_MODULE_VERSION variable
+       defining the subdir in which modules are installed.
+
+       * pango/querymodules.c pango/modules.c modules/*/*.am: 
+       Install modules in lib/pango/MODULE_VERSION/modules
+
+       * pango.pc.in (pango_module_version): Export pango_module_version
+       variable so that 3rd parties can determine where to install 
+       libraries.
+
+Wed Mar  6 11:40:45 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Pango 1.0.0 rc1.
+
+       * pango/Makefile.am: Use install-exec-hook not 
+       install-exec-local when running sanitize-la.sh.
+
+2002-03-06  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/Makefile.am (install-exec-local): Ignore return status
+       from for loop, in case the last test -f happens to fail. Handle
+       also the libpangowin32 .la file.
+
+       * pango/Makefile.am (libpangoft2_1_0_la_LDFLAGS): Use
+       pangoft2_export_symbols, not pangowin32_export_symbols.
+
+       * pango/pango.rc.in
+       * pango/pangowin32.rc.in
+       * pango/pangoft2.rc.in
+       * pango/Makefile.am
+       * pango-zip.sh.in: : Adapt to new shared library naming scheme,
+       also for Win32 import library names.
+
+2002-03-05  Manish Singh  <yosh@gimp.org>
+
+       * configure.in: require GLIB 2.0.0 at minimum
+
+2002-03-05  jacob berkman  <jacob@ximian.com>
+
+       * tests/Makefile.am (*boundaries_LDADD): more $(PANGO_API_VERSION)
+       fixing
+
+Tue Mar  5 15:41:17 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/*/Makefile.am: Fix pangoxft-$(PANGO_API_VERSION).
+       (Reported by Manish Singh.)
+
+Tue Mar  5 11:00:20 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in **/Makefile.am *.pc.in: Switch over to 
+       GLib/GTK+ style library versioning. Update version numbers
+       to 1.0.0.
+
+2002-03-03  jacob berkman  <jacob@ximian.com>
+
+       * Makefile.am (EXTRA_DIST): add sanitize-la.sh
+
+Sat Mar  2 21:57:55 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am (pango.modules): Write 
+       examples/pango.modules in terms of .la files rather than
+       direct shared objects to avoid having to know soname
+       extension.
+
+       * pango/querymodules.c (main): Use G_MODULE_SUFFIX or
+       .la to compare with filenames when querying modules,
+       rather than hardcoded .so/.la.
+
+       * configure.in (USE_LA_MODULES): On aix, load .la files
+       since we can't guess the soname extension.
+
+Fri Mar  1 00:46:49 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure: Default to --disable-static.
+
+       * configure.in pangoft2.pc.in pangoxft2.pc.in pangox.pc.in:
+       Add a --enable-explicit-deps option to control whether dependency 
+       libraries are written into .la files and .pc files. 
+       Default is auto: if static libraries are off
+       and shlib dependencies are found, don't write deps.
+
+       * pango/Makefile.am sanitize-la.sh: Shell script used
+       to strip dependencies out of .la files.
+
+       * configure.in: Default to --disable-gtk-doc.
+
+       * Makefile.am: Add a slightly modified distcheck rule
+       that passes --enable-gtk-doc to the configure inside.
+       (So that 'make dist' succeeds inside.)
+
+Fri Mar  1 14:37:47 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_glyph_extents):
+       Treat glyph 0 as an 0 size, non-drawn glyph consistent
+       with other backends. (#71931)
+
+Fri Mar  1 14:25:22 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c: Don't crash on out-of-BMP values.
+
+       * pango/mini-fribidi/fribidi_get_type.c (_pango_fribidi_get_type):
+       Return FRIBIDI_TYPE_LTR for all non-BMP characters.
+
+Fri Mar  1 12:11:50 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_get_vis2log_map):
+       Fix problem with positions at the ends of lines
+       (#63328, reported by Dov Grobgeld.)
+
+2002-02-28  Sven Neumann  <sven@gimp.org>
+
+       * configure.in: align --help output.
+
+2002-02-28  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2.c (pango_ft2_font_get_face):
+       Check for errors when loading font face, fall back to sans,
+       exit with warning if no font found.
+
+2002-02-28  Sven Neumann  <sven@gimp.org>
+
+       * modules/arabic/Makefile.am: don't link libpango-ot into the module.
+       * pango/Makefile.am: added libpango-ot.la to libpangoft2_la_LIBADD.
+       Should fix #72934, reported by Raymond Wan.
+
+2002-02-28  Sven Neumann  <sven@gimp.org>
+
+       * configure.in: beautified configure --help output.
+
+Wed Feb 27 11:10:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (libpangoft2_la_LIBADD): Move .la
+       files to beginning of link line ... may prevent some
+       problems with linking to installed libraries.
+       (#61359, _)
+
+Wed Feb 27 08:55:32 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (pango_querymodules_LDADD): Add
+       $(X_EXTRA_LIBS) (reported Richard Warren)
+
+Tue Feb 26 19:06:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-xft/minixftint.h: Fix some C++ style
+       comments. (David L. Cooper II)
+
+Tue Feb 26 16:43:05 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (pango-enum-types.c): Make
+       pango-enum-types.c depend on pango-enum-types.h
+
+Tue Feb 26 15:50:35 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_font): Try
+       to load something (load sans) if we can't load a font
+       that Xft listed. (Workaround for #72299, reported
+       by Gediminas Paulauskas)
+
+Mon Feb 25 16:36:47 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hebrew/hebrew-x.c pango/mini-fribidi/fribidi-types.h:
+       Fix trailing , on enumerations.
+       (#72572, Miroslaw Dobrzanski-Neumann)
+
+Sun Feb 24 13:40:55 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c (pango_xft_pattern_equal):
+       Rewrite to reduce the number of strcmps.
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_load_font):
+       Compute the patterns as for load_fontset(), then just
+       return the first. This takes advantage of our caching
+       strategy.
+
+Sun Feb 24 12:12:09 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_new_font): 
+       Fix problem where we unref'ed before we ref'ed resulting
+       in entries in the cache that shouldn't have been there.
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_new_font): 
+       Same.
+
+Sat Feb 23 21:40:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.26
+
+       * NEWS: Updates.
+
+Sat Feb 23 17:34:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-{ft2,x,xft}.c: Patch from Sven Neumann
+       to extend and make consistent the set of zero-width characters
+       that are not displayed. (#71931)
+
+Sat Feb 23 13:07:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-font.h pango/pango-fontmap.h pango/pango-fontset.h:
+       Add some class padding for future expansion.
+
+Wed Feb 20 16:58:24 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/{naqshfont.[ch],mulefont.[ch],langboxfont.[ch]}:
+       Fix recode functions to take gunichar * since we pass that in.
+       (#72059, reported by Miroslaw Dobrzanski-Neumann)
+
+Sun Feb 17 18:50:30 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.25
+
+       * configure.in: Add X_EXTRA_LIBS to XFT_LIBS.
+
+       * NEWS: Updates
+
+       * pango/mini-xft/minixftdpy.c
+       * pango/mini-xft/minixftstr.c: Fix some problems
+       with signed arguments to to isupper()/tolower().
+       (#71705, Morten Welinder)
+
+2002-02-15  Hans Breuer  <hans@breuer.org>
+
+       * examples/makefile.am pango/makefile.am : added
+       makefile.msc to EXTRA_DIST
+       
+Thu Feb 14 14:46:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Respect QTDIR if set. Look for qt3 as well as qt2.
+
+2002-02-14  Sven Neumann  <sven@gimp.org>
+
+       * configure.in: updated the list of available modules (bug #71411).
+
+2002-02-10  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : update version, 
+       use -FImsvc_recommended_pragmas.h and add $(DIRENT_LIBS) to
+       pangoft2 linking
+
+2002-02-09  Darin Adler  <darin@bentspoon.com>
+
+       * pango/fonts.c: (getword): isspace -> g_ascii_isspace
+       (pango_font_description_from_string): isspace -> g_ascii_isspace
+       * pango/modules.c: Remove unneeded <ctype.h> include.
+       * pango/pango-markup.c: (xml_isspace): New.
+       (pango_parse_markup): isspace -> xml_isspace
+       (span_parse_func): isdigit -> g_ascii_isdigit
+       * pango/pango-utils.c: (pango_trim_string): isspace -> g_ascii_isspace
+       (pango_skip_space): isspace -> g_ascii_isspace
+       (pango_scan_word): isspace -> g_ascii_isspace
+       (pango_scan_string): isspace -> g_ascii_isspace
+       (pango_scan_int): isspace -> g_ascii_isspace
+       * pango/pangoft2-fontmap.c: Remove unneeded <ctype.h> include.
+       * pango/pangox-fontmap.c: Remove unneeded <ctype.h> include.
+
+2002-02-07  Tor Lillqvist  <tml@iki.fi>
+
+       * examples/pangoft2topgm.c (main): Accept also outfile name on
+       command line, fopen it separately then. Needed on Windows where
+       stdout is in text mode.
+
+       * modules/arabic/Makefile.am
+       * modules/hebrew/Makefile.am: Use -no-undefined on Windows,
+       otherwise libtool won't produce DLLs, and there will be no such to
+       install
+
+Sat Feb  2 18:27:38 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (pango_querymodules_LDADD): Try removing
+       libpango.la from the link line since it will be pulled
+       in from the other libraries to avoid duplicate inclusion.
+       (#70400.)
+
+       * pangox.pc.in (Libs): Add @X_XTRA_LIBS@ (#70400)
+
+2002-02-01  Havoc Pennington  <hp@redhat.com>
+
+       * pangoxft.pc.in (Description, Name): fix cut-and-paste mess
+       name/description
+
+2002-02-01  Anders Carlsson  <andersca@gnu.org>
+
+       * pango/pangoxft-fontmap.c (pango_xft_get_font_map): 
+       move to next element in list.
+
+Tue Jan 29 11:35:11 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.24
+
+       * NEWS: Updates
+
+Mon Jan 28 20:23:59 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c (pango_parse_markup): Fix problem
+       with detected root node. (Based on patch from Matthias Clasen,
+       #69600)
+
+Mon Jan 28 19:41:20 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_context_load_font[set]): Add some
+       return-if-fails to catch loading size 0 fonts.
+
+Thu Jan 24 18:05:54 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (get_items_log_attrs): Fix problems with
+       computing the length of the paragraph delimiter. (Reported by Evan Martin)
+
+2002-01-24  Sven Neumann  <sven@gimp.org>
+
+       * configure.in
+       * modules/arabic/Makefile.am
+       * modules/arabic/arabic-ft2.c: added arabic shaper for FT2 ported 
+       from arabic-xft.c by Andreas Bogk <andreas@convergence.de>.
+
+Wed Jan 23 16:49:24 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer-ft2.c: Remove this file; pangofttopgm
+       is the test case for the FT2 backend now.
+
+       * examples/Makefile.am: Don't dist moc_viewer-qt.cc.
+
+       * examples/Makefile.am: Build pangofttopgm if we have FT2.
+
+       * examples/pangoft2topgm.c (main): Warning fixes.
+
+2002-01-21  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_markup_with_accel): fix
+       memory leak of "text", reported by Jason Tackaberry
+
+2002-01-20  Alexander Larsson  <alla@lysator.liu.se>
+
+       * pango/pangoft2.c (pango_ft2_draw_hline):
+       Clean up underline drawing. Fixes segfaults.
+
+Sat Jan 19 11:50:32 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Add a AC_TRY_LINK() for qt, since broken setups
+       seem to be common.
+
+       * configure.in: Save ACLOCAL_FLAGS for --enable-maintainer-mode rebuilds.
+
+2002-01-18  Alexander Larsson  <alla@lysator.liu.se>
+       
+        * pango/pangoft2-private.h:
+       Add glyph_cache_destroy to PangoFont. This is slightly ugly, we
+       should perhaps have it in the FontMap, but it was easy.
+       
+       Added cached_glyph to PangoFT2GlyphInfo. This can be used by
+       apps that want to have a glyph cache. Only one user per PangoContext
+       though. Right now it is only internally accessible.
+
+       Added pango_ft2_font_get_cache_glyph_data(), pango_ft2_font_set_cache_glyph_data() and
+       pango_ft2_font_set_glyph_cache_destroy() to access this functionallity
+       
+       * pango/pangoft2.c:
+       Implement glyph caching for pango_ft2_render_layout(). Unbounded
+       caching right now. We should probably limit this in order to not
+       use a lot of memory if the user displayed a lot of glyphs once,
+       and then doesn't use them anymore.
+
+2002-01-17  jacob berkman  <jacob@ximian.com>
+
+       * modules/hebrew/Makefile.am (common_sources): include missing
+       header file
+
+Wed Jan 16 14:45:23 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_check_lines): 
+       A string ending in a paragraph delimiter has an
+       empty line at the end. (#68079, Arjan J. Molenaar.)
+
+Wed Jan 16 09:25:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_from_string): Initialize
+       the static_family field. (Fix from Zack Rusin)
+
+2002-01-14  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pango-layout.c: slight correction to
+       pango_layout_get_extents(), docs still need to be clearer, but 
+       at least they aren't a cut-and-paste of glyph string docs now. 
+       
+       * docs/tmpl/glyphs.sgml: add note about special-case use of
+       PANGO_SCALE with font sizes
+
+       * pango/fonts.c: fix docs to be correct about PANGO_SCALE
+
+2002-01-13  Havoc Pennington  <hp@pobox.com>
+
+       * pango/fonts.c: fix up docs to be clearer about PANGO_SCALE, 
+       as suggested by Dennis Bjorklund
+
+2002-01-11  Havoc Pennington  <hp@pobox.com>
+
+       * docs/pango_markup.sgml: fix cross-references in here
+
+2002-01-11  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_attributes): allow
+       setting attrs to NULL
+
+2002-01-11  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_iter_get_index): docs tweak
+       (pango_layout_iter_next_cluster): update iter->index here
+
+Fri Jan 11 15:01:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_make_pattern) 
+       pango/pangoxft-fontmap.c (pango_xft_make_pattern): 
+       Split comma separated family names and add them in
+       pieces, so they are all visible to Xft.
+
+       * pango/pangoxft-fontmap.c: Remove duplicate XFT_FAMILY
+       in call to XftListFonts.
+
+Thu Jan 10 16:27:24 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-fribidi/fribidi.c: Fix read of unitialized
+       memory (#66067, Hidetoshi Tajima)
+
+Thu Jan 10 15:04:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c (pango_glyph_string_extents_range): 
+       Don't offset the logical rect by y_offset - this generally
+       is not desired, since it means that the logical height
+       of a line could change if it included accented characters.
+       (#67921, Dov Grobgeld)
+
+2002-01-09  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_load_fontset):
+       Add g_error if font match fails, referencing bug #68030, which
+       is the "libXrender is broken" bug.
+
+Wed Jan  9 18:51:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_context_load_font): 
+       g_return_if_fail() if the desc's family is NULL.
+       (#67947, report from Darin Adler.)
+
+Wed Jan  9 11:23:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (s-enum-types-h): Include glib-object.h,
+       Add G_BEGIN_DECLS/END_DECLS to pango-enum-types.h. (#68325,
+       Mikael Hermansson)
+
+Tue Jan  1 20:52:00 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_merge[_static]):
+       Update the field mask in the merged description.
+
+2002-01-02  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.c (pango_win32_render_layout_line): Silence gcc
+       -Wall, initialise a couple of variables.
+
+       * pango/pangowin32-fontcache.c (pango_win32_font_cache_load): Set
+       lfCharSet to DEFAULT_CHARSET always. Conditional debugging output
+       with the PING() macro.
+
+       * pango/pangowin32-fontmap.c: Make the size_infos hash table
+       actually work like it is suppposed to, not that I know if it
+       matters. I think that it's useless to store all the different
+       charset vviews of the same actual ttf font in the list. Will have
+       to do more testing.
+       (logfont_nosize_hash): Lowercase face name before calculating
+       hash.
+       (logfont_nosize_equal): Compare face names ignoring case.
+       (pango_win32_insert_font): Store "courier new" also under the name
+       "courier", as that is what gtk-demo (and presumably often other
+       applications, too?) looks for.
+
+Thu Dec 27 14:19:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-x.c: Mark as only an approximate
+       match for Hebrew, so the Hebrew shaper will be used
+       in preference. (#67557, Dov Grobgeld)
+
+Wed Dec 26 11:52:28 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-fontmap.c (pango_font_map_load_fontset) 
+       * pango/pango-context.c (pango_context_load_fontset): 
+       return_val_if_fail() if desc->family is not set.
+
+Sat Dec 22 12:14:25 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.23, require glib-1.3.12
+
+       * pango/makefile.msc (PANGO_VER): 0.23.
+
+       * NEWS: Updated.
+
+Sat Dec 22 11:49:38 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/arabic-ot.c: Patch from Roozbeh
+       Pournader to update for shaping class changes
+       in Unicode 3.1.1.
+
+Thu Dec 20 00:18:10 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_picture_render): Fix
+       doc comment.
+
+Wed Dec 19 22:40:24 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (get_line_extents_layout_coords): 
+       Remove incorrect special casing of initial line.
+       (Reported by Darin Adler)
+
+Tue Dec 18 12:33:03 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/*-x.c (pango_engine_shape): Syllable
+       array needs to start at length 2, not 1. Also, some
+       cleanups. (Memory overrun reported by Joshua Pritikin
+       #66850)
+
+2001-12-17  Darin Adler  <darin@bentspoon.com>
+
+       * pango/pangoft2.c: Fix doc comment.
+       * pango/pangoft2.h: Move include outside G_BEGIN_DECLS.
+       * pango/querymodules.c: (main): Add const to avoid warning.
+       * tests/dump-boundaries.c: (fail): Remove unused local.
+
+2001-12-14  Sven Neumann  <sven@gimp.org>
+
+       * modules/hebrew/hebrew-x.c (hebrew_engine_get_coverage): use
+       (PangoLanguage *) instead of (const gchar *) to please the compiler.
+
+2001-12-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * examples/Makefile.am, modules/arabic/Makefile.am,
+       modules/basic/Makefile.am, modules/hangul/Makefile.am,
+       modules/hebrew/Makefile.am, modules/indic/Makefile.am,
+       modules/tamil/Makefile.am, modules/thai/Makefile.am,
+       pango/Makefile.am, pango/mini-fribidi/Makefile.am,
+       pango/opentype/Makefile.am, tests/Makefile.am: Compile with
+       -DG_DISABLE_DEPRECATED. See #52790.
+
+2001-12-12  Sven Neumann  <sven@gimp.org>
+
+       * pango/mini-xft/minixftinit.c: include config.h so the definition 
+       of MINI_XFTCONFIG_DIR is actually used (spotted by Sebastian Klemke 
+       <packet@convergence.de>).
+
+2001-12-12  Alexander Larsson  <alla@lysator.liu.se>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_load_fontset):
+       Initialize MiniXft library before calling MiniXftConfigSubstitute.
+
+       * pango/mini-xft/minixftdir.c (MiniXftDirScan):
+       Changed back filename from MiniXftCache to XftCache for
+       compat with Xft.
+
+2001-12-11  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2.c (pango_ft2_render):
+       Fix the details in clipping to the bitmap size.
+
+Mon Dec 10 14:22:22 2001  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+       * modules/basic/tables-big.i: change "EUC-CN" to "GB2312" which
+       is the canonical name for gb2312.1980 charset used in libcharset.
+       (#66174)
+
+Mon Dec 10 09:18:09 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_index_to_pos): 
+       Fix problem with returned width on lines other than
+       the first line (#66274).
+
+       * pango/pangox,ft2,win32.c (pango_*_render_layout):
+       Fix problem where indent wasn't honored (#66275). 
+       [ Note, however, there are remaining problems - see, #66626 ]
+
+Thu Dec  6 19:07:31 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (get_items_log_attrs): Fix problem
+       where length passed in didn't get adjusted for paragraph
+       delimiters.
+
+Thu Dec  6 12:10:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c (pango_default_break): Simplify by
+       being lazy and calling g_utf8_strlen() (causes a
+       two passes over the array but shouldn't be a huge
+       performance loss). Fix bug where attributes weren't
+       set correctly for empty strings. Handle internal
+       NULLs consistently with other functions (truncate)
+       rather than dying with an assertion failure. (#65183)
+
+Thu Dec  6 10:03:49 2001  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+       * modules/basic/basic-x.c
+       (conv_eucjp): handle codeset1(right half of jisx0201.1976)
+       and codeset3(jisx0212.1990) of EUCJP
+       (conv_16bit): renamed from the old conv_euc - handle 16bit
+       character sets only.
+       * modules/basic/tables-big.i: add jisx0212, jisx0201 and big5.
+
+2001-12-04  Manish Singh  <yosh@gimp.org>
+
+       * pango/modules.c
+       * pango/querymodules.c:  g_module_symbol takes a gpointer *, not just
+        a gpointer.
+
+2001-12-03  Matthias Clasen  <matthiasc@poet.de>
+
+       * docs/pango-sections.txt, docs/tmpl/fonts.sgml, 
+       docs/tmpl/modules.sgml: Updates.
+
+       * pango/modules.c: Documentation fixes.
+
+2001-12-04  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-fontmap.c
+       (pango_ft2_font_map_init): set n_families to -1 (uninitialized).
+       (pango_ft2_font_map_list_families): set n_faces to -1 (uninitialized).
+       This makes list_families and list_faces work again for PangoFT2.
+
+2001-12-01  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/pango-fontset.c: Documentation fixes.
+       
+2001-11-29  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/pango-fontset.c: Documentation updates.
+
+Thu Nov 29 11:40:51 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer-qt.cc: Include qpainter.h - apparently
+       needed for Qt 3. (Patch from Dennis Dementiev)
+
+2001-11-27  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2-private.h
+       * pango/pangoft2-fontmap.c (_pango_ft2_font_desc_from_pattern):
+       Take extra parameter include_size that determines if the
+       descriptor includes the size.
+       
+       * pango/pangoft2.c (_pango_ft2_font_new):
+       Include size in ft2font->description.
+
+       * pango/pangoxft-private.h
+       * pango/pangoxft-fontmap.c (_pango_xft_font_desc_from_pattern):
+       Take extra parameter include_size that determines if the
+       descriptor includes the size.
+       
+       * pango/pangoxft-font.c:
+       Include size in xfont->description.
+
+Mon Nov 26 19:24:21 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in tests/Makefile.am tests/cxx-test.C: Add
+       a test program that includes all headers in a C++ program.
+       (#52606)
+
+2001-11-26  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_coverage):
+       Don't leak filename copy.
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_load_font):
+       Don't leak matched pattern
+
+Mon Nov 26 18:17:00 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * tests/Makefile.am tests/gen-all-unicode.c: Instead
+       of including all-unicode.txt in the distribution, include
+       a small program to generate it.
+
+       * modules/hangul/hangul-x.c (render_syllable_with_ksc5601): When 
+       falling back to uncomposed Jamos, if we can't render a Jamo
+       in any way, use the unknown glyph rather than nothing.
+
+       * modules/hangul/hangul-x.c (hangul_engine_shape): Prevent
+       overflows for invalid sequences which can be of arbitrary
+       length. (#50086)
+
+       * modules/arabic/arconv.c: New versions from Roozbeh Pournader.
+
+       - Replacing the tables with automatically-generated ones
+       - Using binary search instead of linear search for table lookup
+       - Updating all the names with Unicode names (eg Nun -> Noon)
+       - Fixed the Hamza mixup, using the Unicode rules
+       - Updating missed cases (eg Superscript Alef was missing from
+         arabic_isvowel)
+       - Removing too-intelligent cases which made the code non-compliant
+          (eg Alef with Hamza above+Kasra was changing to Alef with Hamza below)
+        - Removing 'connecttoleft' from 'charstruct' (replacing it with a macro)
+        - Indenting in the GNU style
+
+2001-11-26  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/pangoft2.c (pango_ft2_font_get_coverage): Documentation.
+       
+       * modules/basic/basic-ft2.c (basic_engine_get_coverage): Use 
+       pango_font_get_coverage().
+
+Mon Nov 26 11:31:01 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am: Workaround to work a little better with 
+       automake-1.5 - make $(libpango_la_OBJECTS) as well as $(OBJECTS)
+       depend on pango_built_headers.
+
+Sun Nov 25 22:35:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (have_fribidi) README: Disable --with-fribidi; it offers
+       no advantages and until either fribidi is updated to use Glib-2.0
+       always, or the Glib dependecy is removed from fribidi entirely, there
+       will be problems with this option.
+
+       * pango/mini-fribidi/README: Update fribidi URL.
+
+2001-11-24  Manish Singh  <yosh@gimp.org>
+
+       * acconfig.h
+       * configure.in: support for --with-xftconfig-dir= path to system
+       XftConfig file
+
+       * pango/pango-utils.c
+       * pango/pangox.c: include "config.h", not <config.h>
+
+       * pango/pangoxft-fontmap.c: this file is pangoxft-fontmap.c, not
+       pangoxft-fontmap.h :)
+
+       * pango/mini-xft/minixftint.h
+       * pango/mini-xft/minixftinit.c: add code for searching common
+       locations for the XftConfig file. We search MINI_XFTCONFIG_DIR
+       if configure defines it for us (as above), then $sysconfdir,
+       then (only on !_WIN32) /etc/X11 and /usr/X11R6/lib/X11.
+       
+
+Sat Nov 24 13:44:21 2001  Kristian Rietveld  <kristian@planet.nl>
+
+       * pango/pango-fontmap.c (pango_font_map_real_load_fontset):
+       free the font description when we don't need it anymore
+
+2001-11-23  Padraig O'Briain  <padraig.obriain@sun.com>
+
+       * pango/break.c (pango_default_break):
+       Fix for bug 65183; i.e. do not call g_utf8_next_char(next) when
+       next is end.
+       
+2001-11-23  Hans Breuer  <hans@breuer.org>
+
+       * testfonts.c : removed the arbitrary limit to 10 fonts. 
+       Instead make the command line params useful again and reduce
+       the default result bitmap size by decreasing the default 
+       font size.      
+
+       * pango/pangowin32-fontcache.c (pango_win32_font_cache_load):
+       Don't always turn on anti-aliasing. Respect the users settings 
+       from 'Properties of Display/Effects'.
+
+       * pango/makefile.msc : updated, version 0.22
+       * pango/pango.def : updated externals
+
+       * pango/font.c pango/pango-coverage.c pango-utils.c
+         pango/pangowin32.c pango/shape.c :
+       coding style and static correctness
+
+2001-11-22  Matthias Clasen  <matthiasc@poet.de>
+
+       * docs/pango-sections.txt: Remove duplicates. 
+       
+       * docs/tmpl/fonts.sgml: Document PANGO_TYPE_FONTSET
+       and PANGO_TYPE_FONTSET_SIMPLE.
+
+       * pango/pangoxft-font.c: Fix typos in some doc comments.
+
+Thu Nov 22 14:23:07 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * Version 0.22
+
+       * configure.in (GLIB_REQUIRED_VERSION): Require
+       GLib-1.3.11
+
+Wed Nov 21 12:54:39 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (PANGO_MINOR_VERSION): Version 0.22.
+
+       * NEWS: Updated
+
+       * docs/pango-sections.txt Makefile.am: Update.
+
+       * pango/pango-layout.c (process_item): Don't look
+       like a doc comment.
+
+2001-11-22  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontcache.c (pango_win32_font_cache_load):
+       Always turn on anti-aliasing.
+
+2001-11-21  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/testfonts.c: Fix a couple of bugs, update for current
+       Pango API. It's not completely clear to me what the program is
+       supposed to do with the command line args. It does load a matching
+       font, but does nothing with it. It then always lists *all* font
+       families, and renders a string in each. This causes a huge image
+       with associated swapping to death if you have lots of fonts... I
+       added a restriction, only the first 10 fonts are rendered.
+
+2001-11-20  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_finalize):
+       Don't free font_pattern if we opened the XftFont, since the
+       XftFont claims ownership of it.
+
+2001-11-20  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_load_font): Fix
+       typo.
+
+2001-11-18  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2.[ch] (pango_ft2_get_context):
+       Take both dpi_x and dpi_y as arguments. Doesn't currently handle
+       dpi_x correctly, but at least the API is in.
+       
+2001-11-18  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pango-context.[ch]:
+       Add new function pango_context_load_fontset() to wrap
+       pango_font_map_load_fontset().
+       Add PangoContext arguments to load_font and load_fontset.
+
+       * pango/pango-fontmap.[ch]:
+       * pango/pangoft2-fontmap.c:
+       * pango/pangowin32-fontmap.c:
+       * pango/pangox-fontmap.c:
+       * pango/pangoxft-font.c:
+       * pango/pangoxft-fontmap.c
+       Add PangoContext arguments to load_font and load_fontset.
+
+2001-11-19  Tor Lillqvist  <tml@iki.fi>
+
+       * pango-zip.sh.in: Suffix package names with datestamp. Add
+       the Pango modules.
+
+       * pango/pango.def: pango_context_add_font_map ->
+       pango_context_set_font_map. Add pango_fontset_*.
+
+       * pango/pangoft2.def: Reflect Alexander's changes.
+
+       * pango/mini-xft/minixftinit.c (get_xft_default_path): New
+       function. Use pango_get_sysconf_subdirectory () to construct a
+       suitable path.
+
+       * pango/mini-xft/minixftint.h: On Win32, don't use the hardcoded
+       /usr/X11R6/lib/X11/XftConfig path (or any other hardcoded path),
+       but instead the function get_xft_default_path().
+
+       * pango/mini-xft/minixftcache.c (MiniXftFileCacheSave): On Win32,
+       don't use link() and unlink() for the lock file. Instead, use a
+       lock directory.
+
+2001-11-18  Alexander Larsson  <alla@lysator.liu.se>
+
+       * pango/pangoxft-fontmap.c:
+       Add XFT_MATRIX and XFT_MINSPACE macro definitions if missing.
+
+2001-11-17  Alexander Larsson  <alla@lysator.liu.se>
+
+       * configure.in:
+       Check for LEX and YACC. This will be made optional later,
+       with the build sources checked in to cvs.
+       Generate pango/mini-xft/Makefile
+
+       * modules/basic/basic-ft2.c:
+       Use the new pangoft2 API.
+
+       * pango/Makefile.am:
+       Build mini-xft.
+       Add new files.
+
+       * pango/pango-context.[ch]:
+       Support only one fontmap per context.
+       Use pango_font_map_load_fontset() and PangoFontset instead
+       of internal fontset.
+
+       * pango/pango-fontmap.[ch]:
+       New virtual function pango_font_map_load_fontset() and
+       default implementation that uses pango_font_map_load_font().
+
+       * pango/pango-utils.[ch] (pango_lookup_aliases):
+       Utility function for looking up aliases. This can be
+       used by backend that has no backend specific aliases.
+
+       * pango/pangoft2-fontcache.c:
+       Removed file.
+
+       * pango/pangoft2-fontmap.c:
+       * pango/pangoft2-private.h:
+       * pango/pangoft2.c:
+       * pango/pangoft2.h:
+       Major rewrite. Doesn't handle fontsets. Uses mini-xft so that
+       it will always match the PangoXft backend. Simplified the
+       public API.
+
+       * pango/pangowin32.c:
+       * pango/pangox.c:
+       pango_context_add_font_map -> pango_context_set_font_map 
+
+       * pango/pangoxft-font.c:
+       * pango/pangoxft-fontmap.c:
+       * pango/pangoxft-private.h:
+       New code to handle fontsets.
+
+       * pango/mini-xft/*:
+       Mini version of libXft from XFree86 in order to have
+       the pangoFT2 and pangXft backends have same config files and
+       generate the same fonts.
+       
+2001-11-14  Matthias Clasen  <matthiasc@poet.de>
+       
+       * docs/Makefile.am (MKDB_OPTIONS): Add --sgml-mode.
+
+2001-11-11  Matthias Clasen  <matthiasc@poet.de>
+       
+       * docs/Makefile.am (IGNORE_HFILES): Add pangoxft-private.h.
+
+       * pango/pango-utils.c (pango_language_from_string): Fix typo in 
+       documentation.
+
+       * docs/tmpl/text-attributes.sgml: Document PangoColor, PangoLanguage,
+       PangoAttrLanguage, PangoAttrFloat and PangoAttrShape.
+
+       * docs/tmpl/layout.sgml: Document PangoWrapMode and PangoLayoutIter.
+
+       * docs/tmpl/tab-stops.sgml: Document PangoTabAlign and PangoTabArray.
+
+       * docs/tmpl/fonts.sgml: Document PangoFontMask.
+
+       * pango/fonts.c (pango_font_description_unset_fields): Fix typo in 
+       documentation. 
+
+       * docs/tmpl/opentype.sgml: Remove documentation templates of the 
+       unimplemented functions pango_ot_ruleset_set_glyph_loader and
+        pango_ot_ruleset_set_alternate_func and the related typedefs
+        PangoOTGlyphLoader and PangoOTAlternateFunc.
+
+       * docs/tmpl/x-rendering.sgml: Document PangoGetGCFunc and
+       PangoFreeGCFunc typedefs.
+
+2001-11-08  Tor Lillqvist  <tml@iki.fi>
+
+       * pango-zip.sh.in: Build separate developer package.
+
+       * pango/pango.def: Add pango_color_parse.
+
+Mon Nov  5 12:23:07 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft.h pango/pangoxft-font.c: Add a function
+       pango_xft_picture_render() to render onto an Xft picture
+       directly linstead of using the XftDraw wrapper object.
+
+2001-11-03  Hans Breuer  <hans@breuer.org>
+
+       * pango/modules.c : don't bother with module dir
+       recalculation if LIBDIR isn't defined
+
+       * pango/pangowin32-fontmap.c : make it compile again
+       after the g_ascii_* change below. Use EnumFontFamiliesExA
+       to ensure to use the ascii version, though defining
+       UNICODE for G_OS_WIN32 will break at other place anyway.
+
+       * pango/makefile.msc : use (hopefully temporary) DIRENT_CFLAGS
+       and DIRENT_LIBS (see #63667)
+
+Fri Nov  2 13:56:58 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c: Patch from Alex Larsson to improve
+       line breaking algorithm so that it doesn't do O(n^2) --
+       each character is shaped at most twice - once to get the
+       widths, and once if the run is broken. Also, quite a
+       bit of cleanup to consistently use the ParaBreakState
+       object to keep track of the state of the line-break
+       process. (#62014)
+
+Fri Nov  2 08:50:16 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/{fonts.c,pango-color.c,pango-utils.c,
+                pangoft2-fontmap.c,pangowin32-fontcache.c,
+                pangowin32-fontmap.c, pangox-fontmap.c}:
+       Patch from Darin Adler, with updates, to use 
+       g_ascii_* instead of locale-dependent variants
+       (#55833).
+
+       * pango/fonts.c: Use g_ascii_dtostr, g_ascii_strtod().
+
+2001-10-31  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/modules.c (process_module_file): Neat Win32 feature: A
+       prebuilt Pango package can be installed in a random location
+       (i.e., not the same used when configuring and building the
+       software). The pango.modules file provided with the package
+       contains paths on the packager's system, not the end-users. We
+       notice this, and replace with the corresponding path in the
+       installation directory on the end-user's machine.
+
+       * pango/pango-utils.c: Use G_WIN32_DLLMAIN_FOR_DLL_NAME.
+       (pango_get_sysconf_subdirectory,pango_get_lib_subdirectory): No
+       need to call g_path_get_basename on the DLL name, DllMain already
+       does it.
+
+Wed Oct 31 11:00:55 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/tamil/tamil-{xft,x}.c: Make a number of functions
+       static to avoid symbol clashes when both tamil-x.c and
+       tamil-xft.c are linked statically into the same library.
+       (#63436, Raymond Wan)
+
+2001-10-30  Matthias Clasen  <matthiasc@poet.de>
+
+       * docs/pango-sections.txt, pango/pango-ot.h: Remove declarations
+       of unimplemented functions pango_ot_ruleset_set_glyph_loader and
+       pango_ot_ruleset_set_alternate_func and the related typedefs 
+       PangoOTGlyphLoader and PangoOTAlternateFunc.
+
+       * pango/opentype/pango-ot-info.c, 
+       pango/opentype/pango-ot-ruleset.c: Documentation updates.
+
+2001-10-30  Sven Neumann  <sven@gimp.org>
+
+       * tests/Makefile.am: don't link against pangox at all. 
+
+       Please keep in mind that building on UNIX does not necessarily mean 
+       that X11 is available.
+
+Mon Oct 29 11:54:06 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pangox.pc.in (Cflags): Add @X_CFLAGS@ (#63095, Dan Winship)
+
+2001-10-29  Tor Lillqvist  <tml@iki.fi>
+
+       * pango-zip.sh.in: New file, used to build distribution package
+       for Windows.
+
+       * Makefile.am (EXTRA_DIST): Add pango-zip.sh.
+
+       * configure.in: Check for lib.exe, set MS_LIB_AVAILABLE. Generate
+       pango-zip.sh.
+
+       * README.win32: Mention the ways to build Pango on Windows.
+
+       * modules/Makefile.am
+       * examples/Makefile.am: Se SOSUFFIX to so on Unix, dll on Windows.
+
+       * pango/Makefile.am: Add rules to create MSVC import library if
+       MS_LIB_AVAILABLE. Add rules to install and uninstall mingw and
+       MSVC import libraries.
+
+       * tests/Makefile.am: Link with libpangox.la only on Unix. 
+
+2001-10-27  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/modules.c: Typo fix.
+
+       * docs/tmpl/text-attributes.sgml, docs/tmpl/freetype-fonts.sgml,
+       docs/tmpl/xft-fonts.sgml, docs/tmpl/win32-fonts.sgml,
+       docs/tmpl/glyphs.sgml, docs/tmpl/x-rendering.sgml,
+       docs/tmpl/pango-indic.sgml: Updates.
+
+2001-10-26  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/fonts.c, pango/pangoft2.c, pango/pangowin32.c,
+       pango/pango-fontmap.c, pango/pangoxft-font.c, pango/pangox-fontmap.c, 
+       pango/pangoft2-fontmap.c, pango/pangoxft-fontmap.c,
+       pango/pangowin32-fontmap.c, docs/pango-sections.txt,
+       docs/tmpl/coverage-maps.sgml, docs/tmpl/fonts.sgml,
+       docs/tmpl/freetype-fonts.sgml, docs/tmpl/glyphs.sgml,
+       docs/tmpl/layout.sgml, docs/tmpl/main.sgml, docs/tmpl/modules.sgml,
+       docs/tmpl/tab-stops.sgml, docs/tmpl/text-attributes.sgml, 
+       docs/tmpl/win32-fonts.sgml: Documentation updates.
+
+Thu Oct 25 11:06:54 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.21, require GLib-1.3.6
+
+       * NEWS: Updates.
+
+Fri Oct 26 12:32:25 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Don't use AC_CHECK_LIB to check for
+       win32, since that causes problems with autoconf-2.13.
+
+       * docs/Makefile.am: Fix to install images.
+
+Thu Oct 25 11:05:01 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_run_get_extents): Allow
+       NULL run_logical. (#63014, Tony Graham)
+
+Thu Oct 18 15:48:14 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.h: Remove the rest of the 
+       silly pango file-reading code from PANGO_ENABLE_BACKEND,
+       so I can use it in gtkimmodule.c. It's nothing
+       that should be in Pango longterm, but it's not
+       enough code to worry about removing before Pango-2.0.
+       (#61602, Sven Neumann)
+
+Thu Oct 18 14:40:04 2001  Owen Taylor  <otaylor@redhat.com>
+
+       (Fixes from Frank Belew, #58905)
+
+       * pango/pangox.c (pango_x_apply_ligatures): Fix label
+       at end of block.
+
+       * pango/mini-fribidi/fribidi.c pango/mini-fribidi/fribid.patch:
+       Use g_alloca() instead of mix of MSVC specific and GCC specific
+       stuff.
+
+2001-10-15  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/tmpl/x-fonts.sgml
+       * pango/break.c
+       * pango/fonts.c: small documentation fixes.
+
+2001-10-15  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoxft-font.c: another missing comment end marker and some
+       fixes in gtk-doc comments.
+
+       * pango/break.c
+       * pango/pango-layout.c
+       * pango/pangoft2.c
+       * docs/pango-sections.txt
+       * docs/tmpl/fonts.sgml
+       * docs/tmpl/x-fonts.sgml: documentation updates.
+
+Sun Oct 14 18:42:56 2001  Manish Singh  <yosh@gimp.org>
+       
+       * pango/pangox.c: add missing comment end marker to make it compile
+
+2001-10-14  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/pangox.c, pango/pangoxft-font.c, pango/pangoxft-fontmap.c,
+       docs/pango-sections.txt, docs/tmpl/fonts.sgml: Documentation updates.  
+
+2001-10-13  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/pango-utils.c, pango/pangoxft-font.c: Documentation updates.
+
+2001-10-10  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/.cvsignore: Add module-defs-win32.c.
+
+       * pango/Makefile.am (pangoinclude_HEADERS): Include also
+       WIN32_HFILES.
+
+2001-10-09  Matt Wilson  <msw@redhat.com>
+
+       * pango/pangox.c (get_font_metrics_from_string): protect from
+       indexing off the end of the embedding_levels array by only doing
+       so if we're not finished.
+
+2001-10-04  Havoc Pennington  <hp@pobox.com>
+
+       * pango/break.c (pango_default_break): fix wrong 
+       check for incorrect attrs_len
+
+2001-10-04  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_read_alias_file): 
+       use g_object_new() instead of g_new() to create a PangoFT2Face.
+       Fixes bug #61603.
+
+2001-10-04  Tor Lillqvist  <tml@iki.fi>
+
+       * configure.in: Retract my change to Xrender+Xft+Xft+FreeType.h
+       checks from yesterday, instead enclose nested AC_CHECK_* calls in
+       brackets.
+
+2001-10-03  Havoc Pennington  <hp@redhat.com>
+
+       * pango/break.c (MAYBE_START_NEW_SENTENCE): remove assertion I
+       shouldn't have put in there
+
+2001-10-03  Havoc Pennington  <hp@redhat.com>
+
+       * pango/break.c (pango_default_break): try to fix up the sentence
+       breaking a bit, specifically for sentences that started at the end
+       of a previous sentence we were messing things up.
+
+       * tests/dump-boundaries.c: new program to dump logical attrs to stdout
+
+       * tests/testboundaries.c (check_invariants): oops, fix for 
+       pango_get_log_attrs() change
+
+2001-10-03  Havoc Pennington  <hp@redhat.com>
+
+       * pango/break.c (pango_break)
+       (pango_default_break) (pango_get_log_attrs): require one more 
+       log attr in the buffer passed in, to account for the end position
+       (pango_default_break): allow length of -1
+
+       * pango/pango-engine.h (struct _PangoEngineLang): change
+       script_break virtual function to match pango_break
+
+       * pango/pango-layout.c (get_items_log_attrs): update pango_break usage
+       
+2001-10-03  Sven Neumann  <sven@gimp.org>
+
+       * pango/fonts.c (pango_font_description_to_string): don't include
+       family name if PANGO_FONT_MASK_FAMILY is not set.
+
+       * pango/pangoft2-fontmap.c: make it compile with DEBUGGING being
+       defined.
+
+2001-10-03  Tor Lillqvist  <tml@iki.fi>
+
+       Add the Win32 GDI Pango backend to autoconfiguration:
+
+       * configure.in: Call AC_LIBTOOL_WIN32_DLL. Check for native Win32
+       or Cygwin, set automake conditional PLATFORM_WIN32. Check for
+       native Win32, set OS_WIN32. Refactor the
+       Xrender+Xft+Xft+FreeType.h checks not to use AC_CHECK_LIBs inside
+       eachother, autoconf 2.52e on Cygwin generated bad shell code for
+       that. Check for gdi32 library, set automake conditional
+       HAVE_WIN32. Add the basic-win32 module, add INCLUDED_WIN32_MODULES
+       and INCLUDE_BASIC_WIN32. Write pango/module-defs-win32.c. Generate
+       pangowin32*.pc.
+
+       * pangowin32.pc.in
+       * pangowin32-uninstalled.pc.in: New files.
+
+       * Makefile.am: Add pangowin32*.pc.in.
+
+       * .cvsignore: Add pangowin32*.pc.
+
+       * modules/basic/Makefile.am: Add the basic-win32 backend. Use
+       -no-undefined on PLATFORM_WIN32.
+
+       * pango/Makefile.am: Add the Win32 backend. Use -no-undefined on
+       PLATFORM_WIN32. Use the .def files on OS_WIN32. Link libpangoft2
+       with GLIB_LIBS.
+
+       * pango/pango-utils.c: (DllMain): New function, on
+       G_OS_WIN32. Used to get the actual DLL name, which is tucked away.
+       (pango_get_sysconf_subdirectory, pango_get_lib_subdirectory):
+       (Win32): Append VERSION to the registry key passed to
+       g_win32_get_package_installation_subdirectory(). Use the real DLL
+       name from above instead of assuming the DLL has a certain name.
+
+       Other Win32 backend fixes:
+
+       * pango/pangowin32-fontmap.c: (free_coverages_foreach): Remove, unused.
+
+       * pango/pangowin32.c: Remove unused variables.
+
+       * pango/pangowin32.def: Add pango_win32_font_get_glyph_index.
+
+       * pango/pangowin32.h: Remove pango_win32_font_get_coverage, which
+       is static.
+
+Mon Oct  1 16:02:54 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c: g_string_printfa => g_string_append_printf.
+
+Sat Sep 29 12:21:44 2001  Manish Singh  <yosh@gimp.org>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_for_display):
+       Typo fix: s/pang/pango/ in warning message
+
+Fri Sep 28 11:27:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_iterator_get_font): Use
+       PANGO_FONT_MASK_* not PANGO_ATTR_* when manipulating the
+       mask. Add fields to mask for PANGO_ATTR_FONT_DESC so
+       it won't be overwritten by later attributes.
+       (Fixes from Tony Graham, #61297)
+       
+Thu Sep 27 12:08:23 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c (pango_log2vis_get_embedding_levels): 
+       Fix wrapper version to have boolean result. (#61248,
+       Eric Lemings.)
+
+Tue Sep 25 11:54:03 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.20
+
+       * NEWS: Updated
+
+       * configure.in (GLIB_REQUIRED_VERSION): Require GLib 1.3.9
+
+       * examples/Makefile.am (EXTRA_DIST): Add the viewer-qt
+       in case someone (say Tim) makes dist without qt installed.
+       (reported by Tony Graham)
+
+       * examples/Makefile.am (pango.modules): Don't use
+       grep -q (reported by Tony Graham)
+
+       * docs/pango-sections.txt: Fix small typo.
+
+Tue Sep 25 11:18:24 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_unset_fields): Change
+       things so that when you unset fields, the old values are
+       kept around persistantly. I don't like this much, but it
+       makes some hacks using PangoFontDescription easier. (In
+       particular, with GtkCellRendererText, being able to
+       toggle on-and-off a setting with a boolean.)
+
+       * pango/{pangoft2-fontmap.c, pangowin32-fontmap.c, pangox-fontmap.c}:
+       Fix for changed signature of g_ascii_strup/strdown.
+
+Mon Sep 24 19:18:48 2001  Owen Taylor  <otaylor@redhat.com>
+
+       Patch from Alex Larsson
+
+       * pango/pango-layout.c (pango_layout_index_to_line_and_extents,
+       pango_layout_index_to_line): Extract out some code portions
+       into separate functions and fix problems with cursor motion
+       in multi-paragraph layouts.
+
+       * pango/pango-layout.c (pango_layout_index_to_pos): Fix
+       for multi-paragraph layouts.
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): Fix
+       for multi-paragraph layouts.
+       
+Mon Sep 24 18:19:22 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_index_to_pos): Fix
+       handling of the last index in a paragraph.
+       (#60630, fix based on patch from Padraig O'Briain.)
+
+       * pango/pango-layout.c (update_run): Take the start
+       index of the run as an argument since we don't have
+       sufficient information to compute it when 
+       iter->run == NULL.
+
+Fri Sep 21 18:55:18 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_from_string): Set 
+       PANGO_FONT_MASK_FAMILY. (#60888, reported by Mario Motta)
+
+2001-09-21  Matthias Clasen  <matthiasc@poet.de>
+
+       * pango/fonts.c (append_field, pango_font_description_to_string):
+       replace g_string_sprintfa by g_string_printfa. 
+
+2001-09-21  Hans Breuer  <hans@breuer.org>
+
+       * pango/pango.def : updated externals
+
+       * pango/makefile.msc : build ft2 backend too.
+
+       * pango/pangowin32-fontmap.c 
+        - Convert PangoWin32FamilyEntry into PangoWin32Family deriving
+          from PangoFontFamily.
+        - Convert PangoWin32FontEntry into PangoWin32Face deriving
+          from PangoFontFace.
+        - Change the list_families() method of the PangoWin32FontMap
+          to list PangoFontFamily * rather than names.
+
+       * pango/pangowin32.c : reflect PangoFontDescription api change
+
+       * pango/pangowin32.h : don't include pango.h but only the
+       required headers
+
+       * modules/basic/basic-win32.c : #include "pango-engine.h"
+
+       * pango/testfonts.c : reflect recent pango api changes
+
+2001-09-20  Sven Neumann  <sven@gimp.org>
+
+       * pango/fonts.c (pango_font_description_set_family,
+       pango_font_description_copy): unset the static_family flag so the
+       family_name gets freed on the next call.
+
+2001-09-20  James Henstridge  <james@daa.com.au>
+
+       * pango/Makefile.am (s-enum-types-c): fix rule so that flags get
+       registered as flags and rather than enums (enums still get
+       registered as enums).
+
+       * pango/pango-font.h: add get_type routine to header.
+
+       * pango/fonts.c (pango_font_metrics_get_type): add get_type()
+       routine.
+
+Wed Sep 19 19:28:52 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-fontmap.c: Remove pango_font_map_free_families,
+       which was no longer in the headers, no longer needed, and
+       no longer working.
+
+       * pango/pango-fontmap.c (pango_font_map_list_families)
+       * pango/pango-context.c (pango_context_list_families): Remove
+       references to pango_font_map_free_families.
+
+2001-09-19  Havoc Pennington  <hp@redhat.com>
+
+       * pango/opentype/fterrcompat.h: header to abstract the difference
+       between FreeType 2.0.3 and 2.0.4 error codes, based on the
+       configure check.        
+
+       * configure.in: check for the tterrors.h header in FreeType 2.0.3,
+       and define HAVE_FREETYPE_2_0_3 if we have it
+
+Wed Sep 19 10:48:04 2001  Tim Janik  <timj@gtk.org>
+
+       * Released 0.19.
+
+Tue Sep 18 23:27:52 2001  Tim Janik  <timj@gtk.org>
+
+       * configure.in (GLIB_REQUIRED_VERSION): require glib 1.3.8.
+
+Tue Sep 18 17:29:20 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontmap.c pango/pangoft2-private.h: Include
+       parent_instance structures.
+
+       * pango/fonts.c (pango_font_family_get_type): Pass in right
+       class structure.
+
+Tue Sep 18 15:47:08 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (PANGO_MINOR_VERSION): Up to 0.19.
+
+       * pango/pango-font.h pango/pango-fontmap.[ch] pango/fonts.c
+       pango/pangoxft-fontmap.c pango/pangoft-fontmap.c pango/pango-context.[ch]
+       pango/pangox-fontmap.c: Add new PangoFontFace and PangoFontFamily
+       object types, and change the font listing API to list faces and
+       families, instead of face names and font descriptions.
+
+       * pango/pango-font.h pango/fonts.c: Make PangoFontDescription
+       an opaque heap-allocated structure, add accessors and
+       convenience functions.
+
+       * pango/pango-font.h pango/pango-private.h: Make PangoFontMetrics
+       heap allocated, protect the structure definition with
+       #ifdef PANGO_ENABLE_BACKEND, and add getters for the fields.
+
+       * pango/pango-attributes.[ch] ( pango_attr_iterator_get_font):
+       instead of providing a base font description and one to fill
+       in, provide a single font description to modify based on
+       the attributes.
+
+       * pango/pango-attributes.[ch]: Fix PangoAttrFontDesc to have
+       a PangoFontDescription by reference, not by value.
+
+       * pango/pango-utils.[ch]: make pango_parse_style() and friends
+       take pointers to individual enumerations instead of to a
+       PangoFontDescription structure.
+
+       * pango/*.c: Fix for the PangoFontDescription and PangoFontMetrics
+       changes.
+
+        * pango/pango-{break,engine,indic,ot,xft}.h pango/Makefile.am
+       pango/opentype/Makefile.am: Protect portions with
+       PANGO_ENABLE_ENGINE to shrink the public API.
+
+       * modules/*/Makefile.am: -DPANGO_ENABLE_ENGINE.
+
+       * pango/{pangox.h,pangox-private.h} modules/basic/basic-x.c: Move
+       pango_x_font_get_unknown_glyph() into public header since it is
+       used from modules.
+
+       * pango/pango-{context,font,fontmap,modules.utils}.h pango/Makefile.am:
+       Protect portions with PANGO_ENABLE_BACKEND to shrink the public API.
+
+       * pango/*.h: Use G_BEGIN/END_DECLS
+
+       * examples/viewer-qt.[cc,h]: Fix for changes to font listing API,
+       PangoFontDescription.
+
+       * pango/pango-indic.h modules/indic/*: Since we install this
+       header fix it up to Pango conventions, namespece
+       ZERO_WIDTH_JOINER, ZERO_WIDTH_NON_JOINER.
+
+       * docs/pango-sections.txt: Updated.
+
+2001-09-18  Matt Wilson  <msw@redhat.com>
+
+       * modules/basic/Makefile.am (basic_xft_libadd): add
+       $(pangoxftlibs) so we get proper dependencies noted in the module.
+       
+Tue Sep 11 11:31:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontmap.c pango/modules.c
+         pango/pango-utils.c pango/querymodules.c: Use 
+       g_build_filename() where appropriate.
+
+Thu Sep  6 21:13:56 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-color.c: Fix problem with green/blue 
+       confusion.
+
+2001-09-10  Alex Larsson  <alexl@redhat.com>
+
+       * pango/fonts.c:
+       * pango/glyphstring.c:
+       * pango/pango-attributes.c:
+       * pango/pango-color.c:
+       * pango/pango-tabs.c:
+       * pango/pango-utils.c:
+       Update to the new g_boxed_type_register_static API.
+       
+Mon Sep  3 19:37:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 0.18
+
+       * NEWS: Updated.
+
+       * pango/pangoxft-font.c (pango_xft_font_finalize): Actually
+       free the XftFont (and description). Lack of such pointed out
+       by David Turner.
+
+Sun Sep  2 12:08:15 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c pango/pango-utils.c: Make 
+       a couple of functions static.
+
+       * pango/mini-fribidi/{fribidi_tables.i,fribidi.patch}: 
+       Make data arrays static.
+
+Thu Aug 30 17:34:52 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-color.c: New file, move color handling
+       here.
+
+       * pango/pango-attributes.[ch] pango/pango-markup.c
+       pango/pango-color.c: Export pango_color_parse, change
+       it to take a PangoColor as its argument.
+
+Fri Aug 24 12:21:50 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_text): Handle
+       text == NULL, length == 0 again.
+
+Thu Aug 23 19:44:34 2001  Tim Janik  <timj@gtk.org>
+
+       * pango/pango-layout.c (pango_layout_check_lines): pass ""
+       as default text into pango_layout_set_text() as NULL isn't
+       allowed anymore.
+
+Wed Aug 22 19:52:18 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_text): Simply
+       use g_utf8_validate() to validate the text, avoiding
+       problem where layout was left in hosed state for invalid
+       UTF-8, and also a bug with reading one-past length.
+
+2001-08-16  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/pangowin32.c: 
+       Fully convert the truetype unicode table to host endianness when reading it.
+       Add a cache of one to find_segment since it showed up on a profile.
+
+2001-08-15  Jens Finke <jens@gnome.org>
+
+       * pango.spec.in: Updated to match gpp standard.
+
+2001-08-14  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_render): composite with "saturate"
+       semantics instead of "over" so joining glyphs get drawn correctly.
+
+2001-08-14  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_render): composite glyphs over the 
+       buffer instead of simply copying into it so glyphs with overlapping 
+       ink rectangles do not overwrite each other.
+
+Sun Aug 12 10:33:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/Makefile.am pango/Makefile.am: Set GPATH to fix srcdir !=
+       builddir problems with GNU make.
+
+2001-08-10  Hans Breuer  <hans@breuer.org>
+
+       * pango/pangowin32.c (pango_win32_render) : restore
+       the previously selected font into the device context.
+
+       (pango_win32_font_get_glyph_extents) : info->ink_rect.y needs
+       to be negative to get underlines right
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_list_fonts) :
+       Don't g_assert_not_reached () on !family case. This is what
+       the X version does as well. Testcase for win32: testfonts.c
+
+       * pango/testfonts.c : (new file) simple test program for win32
+       which renders all or selected fonts into a bitmap
+
+       * pango/makefile.msc : re-enable testfonts compiling
+
+2001-08-09  Matthias Clasen  <matthiasc@waldgeist.poet.de>
+
+       * pango/pango-layout.c (pango_layout_line_get_empty_extents): 
+       Remove unneeded inc_rect parameter.
+       (pango_layout_line_get_extents): Treat lines containing only
+       tabs as empty lines. (#57051)
+
+2001-08-09  Alexander Larsson <alexl@redhat.com>
+
+       * pango/pangowin32.h:
+       * pango/pangowin32-private.h:
+       * pango/pangowin32.c:
+       * pango/pangowin32-fontmap.c:
+       * modules/basic/basic-win32.c:
+       * pango/pangowin32.def:
+       Large rewrite of the win32 backend to use real glyph indexes
+       instead of unicode codes. Also drops the subfont thing, thereby
+       simplifying the code immensely. This looses some functionality, 
+       but i will add that back soon using global (non backend-specific)
+       aliases.
+       This is the first cut, and is not perfect. It still has some issues
+       and imperfections, but it so clearly better than the current 
+       imlementation that I'm checking it in anyway.
+
+2001-08-04  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/makefile.msc:
+       Don't build the non-existant testfont binary
+       Use glib-mkenums instead of the old mkenums.pl
+       copy module-defs-win32.c.win32 to module-defs-win32.c
+
+       * pango/module-defs-win32.c.win32:
+       Include the built in basic-win32 stuff.
+       
+2001-07-27  Darin Adler  <darin@bentspoon.com>
+
+       * modules/indic/gujarati-x.c: Remove unused prototype.
+
+2001-07-20  Hans Breuer  <hans@breuer.org>
+
+       * pango/pango-layout.c (pango_layout_line_get_vis2log_map) : 
+       make implementation static too.
+
+       * pango/pango.def pango/pangowin32.def : updated exports
+
+       * pango/pangowin32.c : correct PangoLanguage changes
+
+       * pango/mini-fribidi/fribidi.c : removed gccism for msvc build
+
+Thu Jul 19 16:44:43 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (font_set_load): Don't corrupt the
+       font description passed in.
+
+Fri Jul 13 14:24:59 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (pango_querymodules_DEPENDENCIES): Fix dependencies
+       to work without XFT.
+
+Thu Jul 12 16:32:42 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (pango_querymodules_DEPENDENCIES): Add
+       an explicit dependency on libpangoxft.la, to fix
+       parallel make problem (#56818)
+
+       * pango/Makefile.am (CLEANFILES): Fix problem where
+       name of stamp files didn't match actual name.
+
+2001-07-12  Darin Adler  <darin@bentspoon.com>
+
+       * modules/arabic/arabic-x.c: (arabic_engine_shape): Remove stray
+       semicolon.
+       
+       * modules/arabic/arconv.h:
+       * modules/arabic/arconv.c: (shape), (doublelig), (arabic_reshape):
+       Use long* instead of int* for parameter to match what's passed in.
+       
+       * modules/indic/bengali-x.c: Add missing <string.h> include.
+       (pango_indic_make_ligs): Use local variable that was added but not
+       ever used.
+       (pango_indic_engine_shape): Remove unused locals.
+       
+       * modules/indic/devanagari-x.c: Add missing <string.h> include.
+       (pango_indic_engine_shape): Remove unused local.
+       
+       * modules/indic/gujarati-x.c: Add missing <string.h> include.
+       (pango_indic_engine_shape): Remove unused local
+       
+       * modules/tamil/tamil-x.c: (tamil_engine_shape): Initialize a
+       variable to quiet the compiler's unused warning.
+       
+       * pango/.cvsignore: Ignore more generated files.
+       
+       * pango/opentype/ftxgpos.c: (Get_Anchor): Add code to set up the
+       ap variable. The old code would just use the uninitialized value.
+       
+       * pango/opentype/ftxopen.c: (Load_Coverage): Remove unused local.
+       
+       * pango/opentype/pango-ot-ruleset.c: (pango_ot_ruleset_shape):
+       Remove unused local.
+       
+       * pango/pango-attributes.c: (pango_attr_list_get_type),
+       (pango_color_get_type): Add needed function type casts (just
+       warnings under gcc, but could be errors in other compilers).
+       
+       * pango/pangoxft-font.c: (pango_xft_font_get_metrics),
+       (pango_xft_font_get_coverage), (pango_xft_get_shaper_map),
+       (pango_xft_font_find_shaper): Switch from lang char* to
+       PangoLanguage*. The code was still compiling, but would not have
+       worked.
+
+2001-07-02  James Henstridge  <james@daa.com.au>
+
+       * pango/glyphstring.c (pango_glyph_string_copy): copy function.
+       (pango_glyph_string_get_type): implement get_type function.
+
+       * pango/pango-glyph.h (pango_glyph_string_get_type): get_type
+       function prototype.
+       (pango_glyph_string_copy): prototype for copy function.
+
+       * pango/pango-utils.c (pango_language_get_type): implementation.
+
+       * pango/pango-types.h (pango_language_get_type): get_type function.
+
+       * pango/pango-tabs.c (pango_tab_array_get_type): implementation.
+
+       * pango/pango-tabs.h (pango_tab_array_get_type): get_type function.
+
+       * pango/fonts.c (pango_font_description_get_type): implementation.
+
+       * pango/pango-font.h (pango_font_description_get_type): add
+       get_type function for typecode.
+
+Mon Jul  2 06:12:18 2001  Tim Janik  <timj@gtk.org>
+
+       * pango/pangoxft-font.c: 
+       * pango/pangox.c: 
+       * pango/pangowin32.c: 
+       * pango/pangoft2.c: s/shutdown/dispose/ to adapt to
+       GObject changes.
+
+Sun Jul  1 22:59:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c (text_handler): Use gssize,
+       not size_t, gssize isn't defined here on all
+       systems.
+
+2001-06-29  Havoc Pennington  <hp@redhat.com>
+
+       * configure.in (QTDIR): don't get confused by qt3
+
+Thu Jun 28 21:49:30 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (GLIB_REQUIRED_VERSION): Require GLib-1.3.7
+
+       * pango/pangoft2-fontmap.c pango/pangowin32-fontmap.c
+         pango/pangox-fontmap.c pango/pangoxft-fontmap.c:
+       Fix args to g_type_init().
+
+Tue Jun 26 15:11:30 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (font_set_get_font)
+         pango/pango-context.c (add_engines): Couple of
+       bug fixes for the last change.
+
+       * configure.in: Abort out when AM_PATH_GLIB fails.
+
+Tue Jun 26 10:19:02 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c (pango_language_matches): Handle
+       language == NULL as matching nothing but '*'.
+
+       * pango/pango-context.[ch] (pango_context_get_metrics): Add a
+       (slowish) function to get the metrics for a font description,
+       including fallbacks as with pango_itemize(), rather than a single
+       font.
+
+Sat Jun 23 10:01:20 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_entry_get_coverage): 
+       * pango/pangoft2-fontmap.c (pango_ft2_font_entry_get_coverage):
+         pango/pango-markup.c:
+         modules/arabic/arabic-xft.c (arabic_engine_shape):
+         modules/arabic/arabic-x.c (arabic_engine_shape):
+         pango/pango-context.c (pango_itemize): 
+         pango/pangox.c (get_font_metrics_from_string):
+         pango/pangoft2.c (get_font_metrics_from_string):
+       Adapt to 64-bit changes in glib.
+
+       * pango/Makefile.am: Modify generation rules to
+       use glib-mkenums (ugh, loong command lines), and
+       to reduce rebuilding by using stamp files.
+
+2001-06-22  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : changed version to 0.17
+
+       * pango/pango.def : updated externals
+
+       * pango/pangowin32-fontmap.c :
+       * pango/pangowin32-private.h :
+       * pango/pangowin32.c : adapted to PangoLanguage usage
+
+Sat Jun  9 17:36:09 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h pango/pango-utils.c: Add a new PangoLanguage
+       type to represent language tags; these can efficiently be compared
+       and don't need to be copied. Also add pango_language_matches()
+       to match a language tag against a pattern.
+
+       * pango/pango-item.[ch] pango/pango-layout.c: Move extra_attrs
+       from PangoItem to PangoAnalysis. Add a language tag field to
+       PangoAnalysis. (#55894)
+
+       * pango/pango-attributes.[ch] (pango_attr_iterator_get_font): Return
+       the language tag as well.
+
+       * pango/pango-attributes.[ch]: Rename PangoAttrLang to PangoAttrLanguage,
+       and make it hold a PangoLanguage.
+
+       * pango/pango-context.[ch]: Rename pango_context_{get,set}_lang() to
+       pango_context_{get,set}_language().
+
+       * **.[ch]: Adapt to PangoLanguage and s/lang/language/ changes.
+
+       * modules/basic/basic-x.c modules/basic/tables-big.i: Add support
+       for ordering character sets differently for different language
+       tags.
+
+       * pango/itemize.c: Remove old, unused file.
+
+       * pango/pango-context.c (pango_itemize): Reduce number of mallocs
+       by allocating one array of PangoAnalysis instead of many arrays.
+
+2001-06-12  Havoc Pennington  <hp@redhat.com>
+
+       * docs/Makefile.am (dist-hook): don't ignore errors from missing
+       index.sgml
+
+       * NEWS: update
+
+       * configure.in: increment version to 0.17
+
+Thu Jun  7 14:06:25 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): 
+       Add a 'strong' parameter to allow moving either the strong
+       or the weak cursor visually, instead of the strong cursor.
+
+2001-06-07  Havoc Pennington  <hp@redhat.com>
+
+       * pango/Makefile.am: add libpango.la to _DEPENDENCIES for the
+       other libs
+
+       * configure.in: use AM_PATH_GLIB_2_0
+
+       * autogen.sh: support AUTOGEN_SUBDIR_MODE
+
+       * Makefile.am: dist the .pc.in files
+
+Tue Jun  5 10:40:17 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/reference/tmpl/*.smgl: Patch from Matthias 
+       Clasen fixing various typos. (#55744)
+
+Thu May 31 19:35:27 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index):
+       Make the hack for avoiding the last index of the line more
+       sophisticated in order to deal with newlines internal
+       to the layout and the case where the second half of the 
+       last character is specifically selected. (Fixes #51190)
+
+Thu May 31 12:31:20 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox-fontmap.c (pango_x_font_map_for_display):
+       Actually advance through list. (Problem noticed 
+       by Erwann Chenede)
+
+       * modules/Makefile.am (install-data-local): Move rule
+       for generation of /etc/pango/pango.modules to here,
+       since we are now built _after_ the library. (Problem
+       noticed by KUSANO Takayuki)
+
+Tue May 29 18:17:11 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * autogen.sh (have_libtool): Fix GNU sedism
+
+Tue May 29 17:41:44 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Use $PKG_CONFIG, not pkg-config.
+
+Mon May 28 18:15:55 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): 
+       Set *trailing properly at end of line.
+
+Mon May 28 11:51:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (map_add_engine): Fix problem with
+       information loss when converting leaves to branches.
+       (Problem found by Toshio MARUYAMA)
+
+Wed May 23 12:59:26 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_make_font_struct): Load the
+       font struct for "fixed" in the case of a broken font list
+       where fonts listed by XListFonts aren't loadable.
+
+Fri May 18 16:44:25 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (ensure_tab_width): Use the font
+       at the beginning of the paragraph, not the context's
+       font.
+
+Fri May 18 11:30:57 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/disasm.c: Use ISO C99 varargs when
+       available.
+
+Thu May 17 11:16:23 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mapping.c: Fixup docs, remove some FIXMEs that are 
+       no longer applicable.
+
+       * pango/pango-layout.c: Move by graphemes, not characters.
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index): 
+       Position at the closest grapheme boundary, not at character
+       boundaries.
+
+       * pango/pango-layout.c (pango_layout_line_index_to_x): 
+       Return positions of grapheme boundaries, not character 
+       boundaries.
+
+Tue May  1 16:03:48 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * autogen.sh (libtool_version): Require libtool 1.4 when
+       build out of CVS.
+
+       * **/Makefile.am: Add inter-library dependencies,
+       especially for the modules. Many cleanups to the
+       module makefiles.
+       
+       * configure.in modules/indic/Makefile.am: Remove 
+       INCLUDE_ANY_INDIC conditional which doesn't seem to have
+       any point and was definitely suspect as done.
+
+       * modules/tamil/tamil-xft.c (MODULE_ENTRY): Fix prefix
+       to be _pango_tamil instead of _pango_basic.
+
+        * Makefile.am: Build modules/ after pango/ so we can
+       make the modules depend on libpango/libpangox. 
+
+       * examples/Makefile.am: Remove spurious rule to rebuild
+       makefile.mingw.
+
+Mon May 14 19:10:11 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c: Fix to correspond to extremely
+       odd choice of sign convention in libXft. (#51476)
+
+Wed May  9 10:11:06 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (install-data-local): Get rid
+       of grep -q (pointed out by Tony Graham).
+
+2001-05-06  Alexander Larsson  <alla@lysator.liu.se>
+
+       * configure.in:
+       Fix Xft detection by setting CPPFLAGS before trying
+       the Xft/XftFreetyp.h header file.
+       Use CPPFLAGS instead of CFLAGS.
+
+2001-01-06  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : reflect new version number, removed
+       external fribidi dependency from link step as well
+
+       * pango/pango.def : updated externals
+
+       * pango/pangowin32.c : initialize approximate_(digit|char)_width
+        similar to what the other backends do
+
+Fri May  4 11:07:04 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * NEWS: Update for 0.16
+
+       * docs/pango-sections.txt: Update.
+
+       * configure.in (PANGO_MINOR_VERSION): 0.16
+
+Wed May  2 11:57:45 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am (QT_LIBS): Remove space that
+       was confusing libtool.
+
+2001-05-04  Alex Larsson  <alla@lysator.liu.se>
+
+       * pango/pangoft2.c (get_font_metrics_from_subfonts):
+       Set approximate_digit_width and approximate_char_width. The
+       digit one could be done better (see bug 53425).
+
+2001-05-03  Michael Natterer  <mitch@convergence.de>
+
+       * configure.in: also check for the the Xft header.
+
+Wed May  2 11:35:16 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (have_freetype): Add check to make sure
+       #include FT_ERRORS_H works. (#54043)
+
+2001-05-02  Sven Neumann  <sven@convergence.de>
+
+       * configure.in: do not try to build modules using Xft if X is not
+       available or was explicitely disabled.
+
+Tue May  1 23:30:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/hangul-x.c (hangul_engine_shape): Fix numeric
+       format in warning.
+
+       * pango/pangox.c (get_font_metrics_from_string): Fix assorted
+       brokenness.
+
+Tue May  1 19:27:00 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_render): Rewrite the newline
+       arrow drawing code to act a little better on a range
+       of different sizes of fonts.
+
+2001-04-27  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pangox-fontmap.c: Move some fontmap stuff to
+       pangox-private.h to access fontmap->resolution in pangox.c
+
+       * pango/pangox.c (get_font_metrics_from_subfonts): multiply
+       avg. width by PANGO_SCALE, and consider that avg width from X is
+       in decipoints
+
+       * modules/basic/basic-x.c: mark some chars unknown when shaping, 
+       with a flag PANGO_X_UNKNOWN_FLAG
+
+       * pango/pangox.c (pango_x_font_get_metrics): use lookup_lang not
+       lang when calling get_font_metrics_from_string
+       (pango_x_render): render unknown chars
+
+       * pango/pango-layout.c:
+       (pango_layout_set_single_paragraph_mode): add mode where we don't
+       break on para separators, instead we shape them and display glyphs
+       (pango_layout_get_single_paragraph_mode): getter for above
+       (pango_layout_check_lines): handle single paragraph mode
+
+Tue Apr 24 11:45:55 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgdef.c (TT_Load_GDEF_Table): Remove
+       excess call to DONE_Stream left over from conversion
+       from FT1. (reported by Michael Jansson)
+
+2001-04-20  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_metrics):
+       Set approximate_digit_width and approximate_char_width to
+       some cheesy value. Not good, but better than nothing.
+
+Fri Apr 20 11:38:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c (pango_parse_markup): Remove some 
+       conditionalization on (md->text == NULL) that is no
+       longer needed with the last change.
+
+2001-04-20  Anders Carlsson  <andersca@codefactory.se>
+
+       * pango/pango-markup.c (pango_parse_markup): Discard the parsed text if
+       the input variable text is NULL. This fixes a segfault.
+
+Tue Apr 17 15:44:53 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * Release 0.15
+
+       * tests/testboundaries.c: Look for files in $srcdir.
+
+       * Makefile.am (SUBDIRS): Add tests, remove fonts
+
+       * tests/Makefile.am (EXTRA_DIST): added missing stuff
+
+       * fonts/: Remove. Nothing in here is needed any more.
+
+2001-04-16  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pango-glyph.h: Removed pango_justify(), since it has no
+       implementation that I can find. 
+       
+       * pango/pango-attributes.c: docs
+
+       * pango/pango-layout.c: docs
+
+Mon Apr 16 19:20:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/tamil/tamil-x.c: Remove warning when using fallback
+       shaping.
+
+Mon Apr 16 19:14:00 2001  Owen Taylor  <otaylor@redhat.com>
+
+       [ Patches from Vikram Subramanian to update Tamil shapers ]
+
+       * configure.in modules/tamil/tamil-xft.c modules/tamil/Makefile.am:
+       Xft/TT based Tamil rendering engine. Uses glyphs in the
+       private-use-area instead of proper OpenType tables.
+
+       * examples/HELLO.utf8: Add Tamil line
+       * examples/pangox.aliases: Add tamil fonts
+
+       * modules/tamil/tadefs.h modules/tamil/tamil-x.c: Update
+       to use PANGO_LIGATURE_HACK ligatures from BDF files instead
+       of a fixed encoding.
+
+Mon Apr 16 18:12:06 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * README: Small updates
+
+       * examples/HELLO.utf8: Insert a RLM on the Yiddish line
+       to correct for fixes to the bidi algorithm.
+
+       * pango/mini-fribidi/*: Update to CVS fribidi which
+       has various bug fixes.
+
+Mon Apr 16 14:26:54 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/pango-sections.txt: Update.
+
+       * docs/Makefile.am (EXTRA_DIST): Update to the latest
+       version.
+       
+2001-04-14  Hans Breuer  <hans@breuer.org>
+
+       * pango/pangowin32-fontmap.c : instead of simply adding one
+       matching font for the magic font names (sans, serif, monospace)
+       stuff any mathing font in the respective family entries
+       (pango_win32_font_map_load_font) : do the same approximation for
+       oblique and italic as the X version does 
+
+       * pango/pangowin32.c (pango_win32_font_get_glyph_extents) :
+       initialize ink_rect and logical_rect to some more appropriate values 
+       (subfont_has_glyph) : implement glyph availability caching. IMO it
+       needs to be done different to the other backends, because even the
+       decision if a font has a specific glyph is increadeable slow on win32
+       
+Fri Apr 13 14:55:20 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-fribidi/{fribidi.c,fribidi_get_type.c,fribidi_tables.i}:
+       Update to correspond to FriBidi-0.9.0 (with some small fixes)
+
+       * pango/mini-fribidi/fribidi-0.9.0.patch: Update patch for
+       Fribidi-0.9.0.
+
+2001-04-13  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-font.h: Add macros for CSS font scale factors
+
+2001-04-13  James Henstridge  <james@daa.com.au>
+
+       * configure.in: AC_INIT should be the first statement in the file.
+       Also, use $PANGO_MAJOR_VERSION.$PANGO_MINOR_VERSION as the version
+       passed to AM_INIT_AUTOMAKE.
+
+Tue Apr  3 15:05:19 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * Release 0.14
+
+       * NEWS: updated.
+
+        * pango/pango/opentype/Makefile.am: make dist fixes.
+        
+       * configure.in (PANGO_MINOR_VERSION): Up to 0.14
+
+Mon Apr  2 12:01:03 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer-qt.cc (main): Add the mystic 
+         g_type_init ((GTypeDebugFlags) 0);.
+
+2001-04-02  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2-fontmap.c:
+       Add some initilaization failure warnings if no fonts found
+       or no fontaliases files found.
+
+2001-03-31  Fatih Demir <kabalak@gtranslator.org>
+
+       * .cvsignore: Extended the ignore list to be right
+               and make CVS quiet.
+
+2001-03-18  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/makefile.mingw.in
+       * pango/pango.def: Update.
+
+       * pango/module-defs-win32.c.win32: New file.
+
+       * pango/Makefile.am (EXTRA_DIST): Add here.
+
+       * pango/mini-fribidi/makefile.mingw: New file.
+
+       * pango/mini-fribidi/makefile.mingw (EXTRA_DIST): Add here.
+
+Fri Mar  9 11:57:46 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_find_subfont): Remove a lot of 
+       instances of "Error parsing ligature info" that somehow
+       crept in.
+
+       * docs/*: Some makefile tweaks, structure updates.
+
+2001-03-15  Sven Neumann  <sven@gimp.org>
+
+       * Makefile.am
+       * configure.in
+       * modules/*/Makefile.am
+       * pango/Makefile.am: make it compile without X headers
+
+2001-03-12  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_font_describe): set the size field
+       
+2001-03-07  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pangox.c (pango_x_font_get_metrics): fix a cheesy bug in
+       setting approximate_digit_width
+
+Wed Mar  7 09:21:14 2001  Tim Janik  <timj@gtk.org>
+
+       * pango/pango-attributes.c: fixed up g_boxed_type_register_static()
+       since GLib signature changed.
+       
+       * got rid of bogus g_type_init() calls.
+
+2001-02-28  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-font.h (struct _PangoFontMetrics): add
+       approximate_digit_width field
+
+       * pango/pangox.c (pango_x_font_get_metrics): make up an
+       approximate digit width number
+       
+2001-02-28  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-font.h (struct _PangoFontMetrics): Add
+       approximate_char_width field
+
+       * pango/pangox.c (get_font_metrics_from_subfonts): "compute" the
+       approximate char width. Other backends need to add this.
+       
+2001-02-28  Alexander Larsson  <alla@lysator.liu.se>
+
+       * pango/pango-attributes.[c]:
+       Added pango_attr_list_get_type, and PANGO_TYPE_ATTR_LIST.
+
+2001-02-20  Havoc Pennington  <hp@pobox.com>
+
+        Patch from Soeren Sandmann
+
+       * pango/pangox-fontcache.c (pango_x_font_cache_load): make xlfd
+       arg const
+
+       * pango/pango-utils.c (pango_get_sysconf_subdirectory):
+       G_CONST_RETURN
+       (pango_get_lib_subdirectory): G_CONST_RETURN
+
+2001-02-19  Hans Breuer <hans@breuer.org>
+       * pango/modules.h, pango/pangowin32.c (pango_win32_get_context) : 
+       added _pango_included_win32_modules[] to include modules with plain 
+       win32 build as well.
+
+       * pango/pango.def : added new exported functions
+
+       * pango/pangowin32-fontmap.c : add unspecified fonts for Monospace,
+       Sans and Serif to avoid crashes if no alias file is provided
+
+       * pango/*/makefile.msc : new files to build on windoze with msvc
+
+2001-02-15  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index): fix
+       *trailing = FALSE to read *trailing = 0
+
+2001-02-13  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_get_x_ranges): fix
+       another "count line lengths to get line start" bug
+
+2001-02-12  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_list_insert_internal):
+       properly update the tail of the list
+       (pango_attr_list_change): flip order of tmp_list2 =
+       tmp_list2->next and prev2 = tmp_list2 to avoid setting 
+       prev2 and tmp_list2 to the same value thus creating a 
+       mangled list.
+       * pango/pango-layout.c (pango_layout_xy_to_index): When returning
+       FALSE, set the index/trailing to the nearest location, instead 
+       of setting them to 0.
+       (pango_layout_line_x_to_index): Fix a bug where line->start_index
+       wasn't used. Return boolean for whether we had to clamp the
+       value to get an index.
+
+Mon Feb 12 15:01:38 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (gtk_doc_min_version): Add check for
+       gtk-doc version.
+
+Mon Feb 12 12:45:16 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am: srcdir != build dir fix.
+
+       * docs/Makefile.am: Switching over to the new gtk-doc 
+       Makefile.am.
+
+2001-02-11  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pangox.c (font_struct_get_ligatures): memory leak fix
+
+2001-02-10  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango-utils.c (pango_get_sysconf_subdirectory,
+       pango_get_lib_subdirectory): (Win32): Use
+       g_win32_get_package_installation_subdirectory(). Use the same
+       directory structure as on Unix, etc\pango and lib\pango under the
+       installation "prefix".
+       
+       * config.h.win32
+       * pango/makefile.mingw.in: Use mini-fribidi instead of full
+       FriBiDi.
+
+       * pango/pangowin32.c (pango_win32_render_layout_line): Adapt to
+       changed PangoAttrColor.
+
+       * pango/querymodules.c: Include <io.h> for getcwd() prototype.
+       (query_module): Handle modules with spaces in the path, and
+       backslashes, use g_strescape() (for Windows).
+
+       * pango/mini-fribidi/makefile.mingw: New file
+
+2001-02-05  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2.c (pango_ft2_render,
+       pango_ft2_render_layout_line): Remove bogus MIN when rendering
+       freetype text. Also draw full underlines.
+
+Sun Feb  4 07:48:47 2001  Tim Janik  <timj@gtk.org>
+
+       * pango/pango-attributes.c (pango_color_get_type): pass 0 as
+       first argument to g_type_init().
+
+       * pango/pangoxft-fontmap.c (pango_xft_get_font_map): 
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_for_display): 
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_for_display): 
+       * pango/pangox-fontmap.c (pango_x_font_map_for_display): 
+       * pango/pango-context.c (pango_context_new):  likewise.
+
+       * i dare saying that i doubt the usefullness of all these
+       g_type_init() calls though.
+
+2001-01-26  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pangox.h (PangoGetGCFunc): take a PangoColor not a
+       PangoAttrColor
+
+       * pango/pango-attributes.h: add PangoColor, add PANGO_ATTR_INVALID
+       as a placeholder for zero in the PangoAttrType enum, corresponds
+       to G_TYPE_INVALID.      
+
+       * pango/pango-attributes.c: Add PangoColor type, use for
+       PangoAttrColor
+       (pango_color_get_type): new function
+       (pango_color_copy): new function
+       (pango_color_free): new function
+
+Thu Jan 25 14:47:17 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-sections.txt pango/pango-docs.sgml pango/tmpl/*:
+       Updates for new functions.
+
+2001-01-23  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_copy): New function
+
+2001-01-23 Alex Larsson <alla@lysator.liu.se>
+
+       * pango/pango-item.c (pango_item_free):
+       Free item->extra_attrs list.
+
+       * pango/pango-layout.c (process_item):
+       Don't leak copy of item.
+
+       * pango/pango-utils.c (read_config_file):
+       If the config file open fails, don't leak the
+       temp buffers.
+
+2001-01-23    <alla@lysator.liu.se>
+
+       * modules/basic/basic-ft2.c (basic_engine_get_coverage):
+       Don't leak PangoCoverage.
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_load_font):
+       Move name free closer to allocation.
+       (pango_ft2_font_map_read_alias_file): Don't leak faces.
+       (pango_ft2_font_entry_get_coverage): Don't leak font as
+       filename and cache_file_name.
+
+2001-01-22  Havoc Pennington  <hp@redhat.com>
+
+       * tests/testboundaries.c (check_line_char): s/is_break/is_line_break/g;
+
+       * pango/pango-layout.c, pango/pango-layout.h: Add PangoWrapMode
+       for PangoLayout
+
+       * pango/break.c (pango_default_break): implement char break log
+       attr
+
+       * pango/pango-break.h (struct _PangoLogAttr): rename is_break 
+       is_line_break, add is_char_break field
+
+2001-01-18  Alex Larsson <alla@lysator.liu.se>
+
+       * pango/pangoft2.c (get_font_metrics_from_subfonts):
+       Use correct font metrics information.
+
+2001-01-07  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/fonts.c (pango_font_description_to_filename): Allow '+' in
+       the filename.
+
+       * pango/pangowin32.c (get_font_metrics_from_string): Adopt to new
+       prototype for g_utf8_to_ucs4).
+
+       * pango/module-defs.c.win32: Removed.
+
+       * pango/module-defs-ft2.c.win32: New file, hand-written until GNU
+       configure is used on Win32, too.
+
+       * pango/makefile.mingw.in
+       * pango/Makefile.am (EXTRA_DIST): Corresponding changes.
+
+       * pango/pango.def: Update.
+
+Sat Jan  6 20:23:54 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/arabic-x.c (arabic_engine_shape): Adapt
+       to new g_utf8_to_ucs4() prototype.
+
+       * modules/basic/basic-ft2.c: Include pango-engine.h
+
+       * pango/pangoft2.h: Don't include pango.h, which would
+       pull in pango-enums.h and thus break module building, 
+       just include neeeded pango-layout.h
+
+Fri Jan  5 16:12:37 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/{arabic-xft,arabic}.c pango/{pango-context.c,pangoft.c,pangox.c}:
+       Adopt to new prototype for g_utf8_to_ucs4 (etc.).
+
+2001-01-05  Alexander Larsson  <alla@lysator.liu.se>
+
+       * .cvsignore: Add pangoft2.pc
+
+       * Makefile.am:
+       * configure.in:
+       Build and install pangoft2.pc
+
+       * pangoft2.pc:
+       New file.
+
+2001-01-04  Havoc Pennington  <hp@redhat.com>
+
+       * modules/indic/Makefile.am (INCLUDES): add X_CFLAGS
+
+       * modules/hangul/Makefile.am (INCLUDES): add X_CFLAGS
+
+       * modules/tamil/Makefile.am (INCLUDES): add X_CFLAGS
+
+       * modules/thai/Makefile.am (INCLUDES): add X_CFLAGS
+
+2001-01-04  Havoc Pennington  <hp@redhat.com>
+
+       * pango/Makefile.am (install-data-local): put creation of module
+       file here. Fixes problem if you 'make install' with no preceding
+       'make' reported by Michael Meeks.
+
+       * modules/Makefile.am (install-data-local): remove creation of module file
+       from here
+
+       * Makefile.am (SUBDIRS): remove pango-config
+
+       * configure.in: use pkg-config to detect GLib cflags/libs
+
+       * pangoxft.pc (Description): fix name/description
+
+2001-01-04  Alexander Larsson  <alla@lysator.liu.se>
+
+       * modules/arabic/arabic-x.c:
+       * modules/arabic/arabic-xft.c:
+       * modules/basic/basic-ft2.c:
+       * modules/basic/basic-win32.c:
+       * modules/basic/basic-x.c:
+       * modules/hangul/hangul-x.c:
+       * modules/indic/bengali-x.c:
+       * modules/indic/devanagari-x.c:
+       * modules/indic/gujarati-x.c:
+       * modules/indic/gurmukhi-x.c:
+       * modules/indic/myanmar-x.c:
+       * modules/tamil/tamil-x.c:
+       * modules/thai/thai-x.c:
+       Change all modules to use a define to the script engine name. Also
+       Fixes some errors in the names (they were different in the same module).
+
+       * pango/.cvsignore:
+       add module-defs*.[ch]
+
+2001-01-03  Alexander Larsson  <alexl@redhat.com>
+
+       * configure.in:
+       * modules/arabic/Makefile.am:
+       * modules/arabic/arabic-x.c:
+       * modules/basic/Makefile.am:
+       * modules/basic/basic-x.c:
+       * modules/hangul/Makefile.am:
+       * modules/hangul/hangul-x.c:
+       * modules/indic/Makefile.am:
+       * modules/indic/bengali-x.c:
+       * modules/indic/devanagari-x.c:
+       * modules/indic/gujarati-x.c:
+       * modules/indic/gurmukhi-x.c:
+       * modules/indic/myanmar-x.c:
+       * modules/tamil/Makefile.am:
+       * modules/tamil/tamil-x.c:
+       * modules/thai/Makefile.am:
+       * modules/thai/thai-x.c:
+       Rename all x modules from abc to abc-x.
+       
+       * modules/arabic/arabic.c:
+       * modules/basic/basic.c:
+       * modules/hangul/hangul.c:
+       * modules/indic/bengali.c:
+       * modules/indic/devanagari.c:
+       * modules/indic/gujarati.c:
+       * modules/indic/gurmukhi.c:
+       * modules/indic/myanmar.c:
+       * modules/tamil/tamil.c:
+       * modules/thai/thai.c:
+       These were all copied to file-x.c and then removed.
+
+2001-01-03  Alexander Larsson  <alexl@redhat.com>
+
+       * configure.in:
+       Update the default list of included modules for
+       --with-included-modules=yes to include all new modules.
+       Split INCLUDED_MODULES and module-defs.c into per shaper
+       engine type lists.
+
+       * modules/arabic/Makefile.am:
+       Build libpango-arabic-xft.la if INCLUDE_ARABIC_XFT.
+
+       * modules/arabic/arabic-xft.c:
+       Change module prefix to _pango_arabic_xft_
+
+       * modules/basic/Makefile.am:
+       Build static libs for all included modules.
+
+       * modules/basic/basic-ft2.c:
+       Change module prefix to _pango_basic_ft2_
+
+       * modules/basic/basic-xft.c:
+       Change module prefix to _pango_basic_xft_
+
+       * pango/Makefile.am:
+       Include correct module-defs-XXX in libs.
+
+       * pango/modules.h:
+       Split _pango_included_modules[] into separate lists.
+
+       * pango/pangox.c:
+       * pango/pangoft2.c:
+       * pango/pangoxft-fontmap.c:
+       Register built in modules.
+
+2000-12-22  Alexander Larsson  <alla@lysator.liu.se>
+
+       * pango/pangoft2.c:
+       Remove timing printfs.
+
+       * pango/pangoft2-private.h:
+       Disable debug.
+
+2000-12-21  Tor Lillqvist  <tml@iki.fi>
+
+       * modules/basic/basic-win32.c (script_engine_load): Only a script
+       engine here.
+
+       * pango/makefile.mingw.in: Add the built pango-enum-types.[ch].
+
+       * pango/pango.def
+       * pango/pangoft2.def: Update.
+
+       * pango/opentype/pango-ot.def
+       * pango/opentype/makefile.mingw.in: New files.
+
+       * pango/opentype/Makefile.am (EXTRA_DIST): Add them.
+
+       * configure.in (included_modules): Generate
+       pango/opentype/makefile.mingw.
+
+2000-12-21  Alexander Larsson  <alexl@redhat.com>
+
+       * pango-config.in:
+       Change usage to say pango-config instead of glib-config.
+       Add support for pangoft2.
+
+       * modules/basic/Makefile.am:
+       Compile and install pango-basic-ft2 if freetype was found.
+
+       * modules/basic/basic-ft2.c:
+       Remove lang engine. Make the glyph from the glyph index instead
+       of the unicode index. The id is really BasicScriptEngineFT2.
+
+       * pango/Makefile.am:
+       Compile and install pangoft2 if freetype was found.
+
+       * pango/pangoft2-fontcache.c (pango_ft2_font_cache_load):
+       Init face->generic.data to 0, since this field will be used
+       to cache the current size of the face.
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_for_display):
+       Use g_object_new instead of g_type_create_instance.
+       (pango_ft2_font_entry_get_coverage): Use G_DIR_SEPARATOR_S
+       instead of \\. (pango_ft2_font_entry_get_coverage): Init result
+       to NULL. Don't write to file if open failed.
+
+       * pango/pangoft2-private.h:
+       Add PangoFT2GlyphInfo.
+       
+       * pango/pangoft2.c (pango_ft2_get_face): Export function, and make
+       sure it sets the correct face size. (pango_ft2_load_font,
+       pango_ft2_get_per_char, pango_ft2_font_get_kerning):
+       PANGO_FT2_GLYPH_INDEX stores the glyph index, not the unicode value.
+       (pango_ft2_font_get_glyph_extents): Cache glyph extents.
+       (pango_ft2_has_glyph): Remove function.
+       (pango_ft2_font_finalize): Free glyph info cache.
+
+       * pango/pangoft2.h:
+       Export pango_ft2_get_face, remove pango_ft2_has_glyph.
+
+Wed Dec 20 19:53:09 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/Makefile.am (IGNORE_HFILES): Add opentype/.
+
+       * modules/{basic/basic,arabic/arabic}-xft.c: Include
+       pango-engine.h.
+
+       * pango/pangoxft.h: Don't include pango.h to avoid
+       getting pango-enum-types.h.
+
+       * pango/Makefile.am (pangoinclude_HEADERS): Move 
+       XFT_HFILES out of pango_headers, since mkenums.pl
+       shouldn't be run on it.
+
+2000-12-20  Havoc Pennington  <hp@redhat.com>
+
+       * configure.in: fix freetype check a bit
+
+Tue Dec 19 22:47:16 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in pango-config.in pangoxft.pc.in
+       modules/basic/Makefile.am: Since Xft may only be available
+       statically without shlib deps, check for FreeType libs explicitly
+       and include them when linking, otherwise things won't work. Also,
+       define FREETYPE_CFLAGS from freetype-config --cflags.
+
+       * modules/basic/basic-xft.c pango/pangoxft-font{,map}.c: Fool
+       Xft into not converting glyph indices by loading the
+       face unencoded then calling FT_Set_Charmap ourselves.
+
+       * pango/Makefile.am pango/pango-ot.h pango/opentype/* :Add start
+       of opentype handling - most of the actually meat of the code here
+       is the OpenType layout code from FreeType 1 ported to freetype2
+       and adapted slighlty for our purposes.  Also, includes a
+       incomplete OpenType-table-dumping code useful for figuring
+       out what is going on.
+
+       * pango/pangoxft.h pango/pangoxft-font.h: Add calls for
+       getting FT_Face and PangoOTInfo from PangoXftFont.
+       
+       * modules/arabic/{Makefile.am,arabic-ot.[ch],arabic-xft.c}: 
+       Initial support for rendering Arabic with OpenType fonts.
+
+2000-12-18  Havoc Pennington  <hp@redhat.com> 
+
+        Fix build breakage, reported by Alex Larsson and Yasushi Shoji
+       
+       * pango/pangox.h: don't include pango.h, just individual headers
+
+       * configure.in: check for perl, add --disable-rebuilds configure
+       option, automatically disable rebuilds if no perl
+       
+       * pango/Makefile.am: use located perl to run makeenums.pl, 
+       and don't try to rebuild if we did --disable-rebuilds
+       (EXTRA_DIST): add built headers
+
+        * modules/*/*.[hc]: don't include pango.h, include specific headers
+       
+2000-12-15  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pango-glyph.h: move pango_shape and pango_reorder_items in
+       here.
+
+       * pango/pango-break.h: move most of pango.h in here, so that
+       pango.h can be the only file that includes pango-enum-types.h, so
+       that changing any header doesn't end up rebuilding all of pango
+       due to a rebuild of pango-enum-types.h.
+       
+       * pango/makeenums.pl: script to generate pango-enum-types.[hc]
+
+       * pango/Makefile.am (pango_headers): built pango-enum-types.h,
+       pango-enum-types.c that do enum type registration; add
+       pango-break.h; do some assorted rearranging to handle the 
+       built headers
+
+       * pango/pango.h: moved most of it to pango-break.h
+       
+       * pango/break.c: include individual headers, not pango.h
+       
+       * pango/shape.c: ditto
+
+       * pango/reorder-items.c: ditto
+
+       * pango/querymodules.c: ditto
+
+       * pango/pango-layout.c: ditto
+
+       * pango/pango-indic.c: ditto
+
+       * pango/mapping.c: ditto
+
+       * pango/itemize.c: ditto
+
+       * pango/fonts.c: ditto
+
+2000-12-15  Havoc Pennington  <hp@redhat.com>
+
+       * modules/Makefile.am (install-data-local): touch
+       sysconfdir/pango/pango.modules even if there are no dynamic
+       modules, so pango won't spew warnings about pango.modules not
+       existing, and to simplify RPM file lists        
+
+       * pango/pango-context.c (fallback_engine_shape): fix this to 
+       avoid incrementing i twice
+       (fallback_shaper): fix initializer
+
+       * pango/querymodules.c (query_module): don't call g_module_close()
+       on a module that doesn't get opened successfully
+
+       * pango/modules.c: do not include modules.h
+       (init_modules): do not do the builtin modules here,
+       they are done by pangox
+
+       * pango/pangox.c (pango_x_get_context): register included modules
+       here
+       
+       * pango/pangoxft-font.c: do not include modules.h
+
+       * pango/Makefile.am (libpango_la_SOURCES): move modules.c,
+       back in here (but not modules.h, which actually goes with 
+       module-defs.c)
+
+2000-12-14  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-context.c (add_engines): Use a fallback shaper if
+       no engine is found for a range, the fallback shaper shapes to
+       glyphs of 0. This is just to let other code depend on the
+       invariant that there's a shape engine for all characters.
+
+       * tests/all-unicode.txt: Huge file containing all Unicode
+       characters, for robustness testing. Not in EXTRA_DIST
+        for now, not sure we should torture people that way...
+
+        * pango/fonts.c (pango_font_find_shaper): remove the assert that 
+        we found a shaper, and instead let things fall back to the fallback
+        shaper
+       
+Thu Dec 14 20:34:18 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft.h pango/pangoxft-font.c: (PANGO_TYPE_XFT_FONT): Add
+       PANGO_XFT_IS_FONT to the public header.
+
+Thu Dec 14 19:00:46 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/pango-indic-script.h: Fix macro breakage.
+
+       * modules/basic/tables-big.i: Remove extra copy of basic_ranges.
+
+       * modules/thai/thai.c: Fix various warnings.
+       
+       * configure.in Makefile.am pangoxft.pc.in pango-config.in
+       modules/basic/Makefile.am modules/basic/basic-xft.c
+       pango/Makefile.am pango/pangoxft-font.[ch] pango/pangoxft-fontmap.c
+       pango/pangoxft.h pango/pangoxft-private.h: Initial support
+       for rendering via Xft and the Xrender extension.
+
+2000-12-14  Havoc Pennington  <hp@redhat.com>
+
+       * pango/fonts.c (pango_font_find_shaper): add assertion that
+       shaper != NULL to catch engine problems faster
+
+       * pango/Makefile.am (libpangox_la_SOURCES): modules.[hc] and
+       module-defs.c have to go in libpangox for now since the modules
+       use the X stuff, and static linkage won't let you play games here
+
+       * examples/Makefile.am (pango_viewer_LDADD): fix order of link
+
+       * modules/indic/pango-indic-script.h (pango_indic_get_char): make
+       this a macro, so it doesn't collide between modules
+
+       * modules/*/Makefile.am: Fix to work if the module isn't included
+       
+       * examples/Makefile.am: don't query modules if we didn't build any
+
+       * modules/indic/gurmukhi.c (MODULE_ENTRY): fix prefix
+
+       * modules/indic/bengali.c (MODULE_ENTRY): fix prefix
+
+       * modules/indic/gujarati.c (MODULE_ENTRY): fix prefix
+
+       * modules/indic/devanagari.c (MODULE_ENTRY): fix prefix
+
+       * modules/indic/myanmar.c (MODULE_ENTRY): uniquely prefix the functions
+
+       * modules/Makefile.am (MODULES): handle case where there are no
+       modules to query
+
+       * configure.in: Fix up include_modules stuff to work with Indic
+
+       * pango/glyphstring.c (pango_glyph_string_set_size): Just
+       g_error() if the glyph string exceeds maximum integer size, 
+       instead of mysteriously crashing later.
+
+2000-12-15  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangoft2.c (pango_ft2_ft_strerror): Update for newest
+       FreeType2.
+       (pango_ft2_font_finalize): gcc warns about empty format strings,
+       so use just a space...
+
+2000-12-11  Havoc Pennington  <hp@redhat.com>
+
+       * tests/boundaries.utf8: Add some jamo and viramas and unicode
+       para separators and \r\n and so on, crashes the text widget nicely
+
+2000-12-11 Elliot Lee <sopwith@redhat.com>
+
+       * modules/thai/thai.c, pango/break.c: #include <string.h>
+
+Mon Dec 11 15:20:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/HELLO.utf8: Add a tab into to Yiddish line
+       to force correct segmentation around the parentheses.
+
+2000-11-30  Havoc Pennington  <hp@pobox.com>
+
+       * modules/thai/thai.c: delete lang engine
+
+       * modules/tamil/tamil.c: delete lang engine
+       (tamil_engine_x_new): fix type tag for shape engine
+
+       * modules/indic/myanmar.c: delete lang engine
+       (pango_engine_x_new): fix type tag for shape engine
+
+       * modules/indic/gurmukhi.c: delete lang engine
+       (pango_indic_engine_x_new): fix type tag for shape engine
+
+       * modules/indic/gujarati.c: delete lang engine
+       (pango_indic_engine_x_new): fix type tag for shape engine
+
+       * modules/indic/devanagari.c: delete lang engine
+       (pango_indic_engine_x_new): fix type tag for shape engine
+
+       * modules/indic/pango-indic-script.h (SCRIPT_ENGINE_DEFINITION):
+       delete lang engine
+
+       * modules/indic/bengali.c: delete the lang engine
+       (pango_indic_engine_x_new): fix type tag for shape engine
+
+       * modules/hangul/hangul.c: delete the lang engine
+       (hangul_engine_x_new): fix type tag for shape engine
+
+       * modules/basic/basic.c: delete the lang engine
+       (basic_engine_x_new): fix type tag for shape engine
+
+       * modules/basic/basic-win32.c: delete the lang engine
+       (basic_engine_win32_new): this was a shape engine,
+       use correct type tag
+
+       * modules/basic/basic-ft2.c: delete the lang engine
+
+       * modules/arabic/arabic.c: Delete the lang engine
+       (arabic_engine_x_new): this is a shape
+       engine, not a lang engine, fix type tag
+
+       * pango/pango-layout.c (pango_layout_index_to_line_x): handle 
+       the fact that paragraph delimiters aren't in the layout lines
+       (pango_layout_index_to_pos): update to handle paragraph 
+       delimiters
+
+       * pango/break.c (pango_find_paragraph_boundary): New function
+       to find paragraph boundaries
+
+       * pango/pango-layout.c (get_items_log_attrs): don't separate calls
+       to pango_break() when directional level changes
+
+       * pango/pango-layout.h (struct _PangoLayoutLine): put start index
+       of the line into the struct
+       * pango/pango-layout.c (pango_layout_get_cursor_pos): Fixups to
+       reflect the fact that paragraph separators are removed from the
+       input text.
+       
+       * pango/pango-layout.c (can_break_at): don't 
+       special-case start of line and whitespace-following-alphabetic
+       here, because pango_break() already handles that properly
+
+       * tests/testboundaries.c, tests/Makefile.am, tests/runtests.sh:
+       Add directory for test programs, and a script to run them all
+
+       * configure.in: Create Makefile in tests
+
+       * pango/break.c (pango_break): Try for a real implementation of
+       the Unicode text boundary algorithms
+       (pango_get_log_attrs): Allow length to be -1
+       
+       * pango/pango-context.c (pango_itemize): use pango_item_new(),
+       assert that items added to the list are sane.
+       
+       * pango/pango-layout.c (pango_layout_check_lines): Reimplement 
+       to honor the paragraph boundaries from pango_break()
+
+       * pango/pango-layout.c (process_item): use pango_item_split() here
+
+       * pango/pango-item.c (pango_item_split): New function to split an
+       item into two items
+
+Fri Dec  1 11:49:50 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (get_tab_pos): Make sure that
+       we don't end up in an infinite loop due to zero-width
+       tabs. (Fix problem found by Hans Breuer)
+
+2000-12-01  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango-utils.c (pango_get_sysconf_subdirectory): Use
+       g_file_test().
+
+2000-11-30  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/makefile.mingw.in (DEFINES): Define PANGO_VERSION.
+
+       Changes by Hans Breuer:
+
+       * pango/pango-layout.c (shape_tab): Add a FIXME comment.
+
+       * pango/pango-markup.c (compare_xcolor_entries): Use g_strcasecmp.
+
+       * pango/pango-utils.c (pango_get_sysconf_subdirectory): Use second
+       fallback location if there is no pango subdir in the Windows
+       directory.
+
+       * pango/pangowin32-fontmap.c
+       (pango_win32_font_entry_get_coverage): Check if fopen succeeded.
+
+       * pango/pangowin32-private.h (DEBUGGING): Turn off.
+
+       * pango/pangowin32.c (pango_win32_unicode_classify): We can in
+       fact get out of the loop. Return invalid value in that case.
+       (subfont_has_glyph): Improve performance a bit.
+
+       * pango/querymodules.c: Small change for MSVC build.
+
+       * modules/basic/basic-win32.c (basic_engine_get_coverage):
+       Performance improvement.
+
+       * examples/viewer-win32.c (main): Disable double buffering on the
+       layout widget, but only when building with GTK+ 1.3.2 or newer.
+
+Wed Nov 29 11:08:52 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-fribidi/fribidi.c pango/mini-fribidi/fribidi-tables.i:
+       Some tiny changes to correspond to fribidi-0.15
+
+       * pango.pc.in pango-config.in pango/Makefile.am: 
+       Move headers into separate subdir, to avoid
+       clashes with future versions of Pango.
+       
+2000-11-20  Tor Lillqvist  <tml@iki.fi>
+
+       * Makefile.am (EXTRA_DIST): Add README.win32.
+
+       * examples/pangoft2.aliases: Add this file to CVS.
+
+       * examples/Makefile.am (EXTRA_DIST): Add it here.
+
+2000-11-21 Elliot Lee <sopwith@redhat.com>
+       
+       * modules/*/*.c: Fix warnings - mostly include string.h for strcmp.
+
+2000-11-20  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (update_run): Fix this to make iteration 
+       over runs work properly
+
+2000-11-19  Tor Lillqvist  <tml@iki.fi>
+
+       * README.win32: New file.
+
+       * pango/fonts.c (pango_font_description_to_filename): New
+       function. As pango_font_description_to_string, but with result
+       that is better suitable as a filename: No spaces or other strange
+       characters, all in lowercase.
+       (pango_font_describe): Implement this function, call the
+       corresponding method.
+
+       * pango/pango-font.h: Declare pango_font_description_to_filename.
+
+       * pango/pangowin32.c (pango_win32_font_describe)
+       * pango/pangoft2.c (pango_ft2_font_describe): Implement these.
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_entry_get_coverage)
+       * pango/pangowin32-fontmap.c (pango_win32_font_entry_get_coverage):
+       Implement file-based persistent caching of coverages.
+
+       * pango/pangoft2-private.h (struct _PangoFT2FontEntry)
+       * pango/pangowin32-private.h (struct _PangoWin32FontEntry): Move
+       struct definition here from the -fontmap files.
+
+       * pango/pango.def: Updates.
+
+Fri Nov 17 16:12:34 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * Released 0.13
+
+       * NEWS: Updates for 0.13
+
+Fri Nov 17 16:04:19 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * tools/Makefile.am (EXTRA_DIST): Add maps/tis-620
+
+       * Makefile.am (EXTRA_DIST): Added TODO.xml
+
+       * pango/Makefile.am (EXTRA_DIST): Add .def files
+       for Win32.
+
+       * examples/Makefile.am (EXTRA_DIST): Add a couple
+       of missing files.
+
+       * docs/Makefile.am (dist-hook): Add back accidentally
+       removed rule to distribute TEXT/*.
+       
+Thu Nov 16 18:59:21 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c (pango_glyph_string_extents_range): Test 
+       against start not zero.
+
+Thu Nov 16 13:23:43 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/pango-sections.txt docs/tmpl/modules.sgml: Add
+       pango_module_register ().
+
+       * pango/modules.c: Make ordering of module lookup
+       predictable.
+
+       * pango/modules.c (pango_module_register): Add a
+       useful doc comment. 
+
+       * pango/pango-modules.[ch]: Fix indentation.
+
+       * .cvsusers: Added
+       
+2000-11-16  Havoc Pennington  <hp@redhat.com>
+
+       * pango/modules.c (handle_included_module): Declare variable j so
+       it compiles
+
+2000-11-15  Elliot Lee  <sopwith@redhat.com>
+
+       * pango/modules.c: Make some vars static.
+         Implement pango_module_register function.
+       * pango/pango-modules.h, pango/modules.h: Move declaration of
+       PangoIncludedModule to pango-modules.h for public use.
+
+Wed Nov 15 16:56:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (process_item): Fix problem with
+       unbreakable words at start of line longer than line width.
+
+Wed Nov 15 15:04:00 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_extents_internal):
+       Fix problem where right-aligned lines weren't getting properly
+       offset because width was left as -1.
+
+Tue Nov 14 18:45:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/shape.c (pango_shape): Every character must
+       be part of some cluster, so when we dont' have an engine
+       at all (pathalogical, happens now for formatting characters),
+       create a cluster with one glyph=0 and 0 size.
+
+Wed Nov 15 10:50:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (process_line): Rewrite of good
+       portions of line-break code to be more readable, work
+       better, and maybe even be a little faster.
+
+2000-11-14  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_item_properties): get the 
+       value of any rise attribute
+       (pango_layout_run_get_extents): take rise into account
+
+2000-11-15  Tor Lillqvist  <tml@iki.fi>
+
+       * config.h.win32: Define HAVE_FRIBIDI.
+
+       * pango/pango.def: Add new functions.
+
+       * pango/pango{win32*,ft2*}.[ch]: Add my name to copyright notice.
+
+Tue Nov 14 11:10:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_run_get_extents): 
+       Fix low underline code to deal with run_ink == NULL.
+
+       * pango/pango-utils.c (pango_read_line): Return number
+       of lines read to allow decent parse errors line numbers.
+
+       * pango/pangox-fontmap.c (pango_x_font_map_read_alias_file):
+       Fix line number count.
+
+       * examples/pangox.aliases: Include extra international fonts
+       for all styles, not just roman, reindent so it looks 
+       halfway legible.
+
+Mon Nov 13 14:02:48 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c pango/pango-indic.c: Some doc comment
+       fixes.
+
+2000-11-13  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_cursor_pos): Don't need
+       to check_lines, pango_layout_get_iter() will do that
+       (next_cluster_start): don't ever return a value past the end 
+       of the glyph string
+
+2000-11-13  Havoc Pennington  <hp@redhat.com>
+
+       * examples/pangox.aliases: Add italic/bold variants
+
+2000-11-13  Elliot Lee  <sopwith@redhat.com>
+
+       Patches from long ago:
+       * pango/pango-layout.c: Make pango_layout slightly more robust.
+       Do check_lines before getting cursor position.
+
+2000-11-13  Havoc Pennington  <hp@redhat.com>
+
+       * docs/pango-sections.txt: Add new PangoLayoutIter entry points
+
+       * pango/glyphstring.c (pango_glyph_string_extents_range): New
+       function
+
+        * pango/pango-layout.c: Create PangoLayoutIter for iterating over
+       a layout's visual elements
+       
+       * pango/pango-layout.c (pango_layout_check_lines): plug 
+       a memleak (attr iterator not freed)
+
+       * pango/pango-tabs.c (pango_tab_array_free): plug a memleak
+       (array->tabs not freed)
+
+Mon Nov 13 09:17:34 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c: Remove fribidi include.
+
+       * pango.pc.in (Requires): Substitute fribidi reference only
+       when necessary
+
+       * Makefile.am (pkgconfigdir): pkgconfigdir is $(libdir)/pkgconfig
+
+       * modules/indic/Makefile.am (EXTRA_DIST): Add pango-indic-script.h
+
+       * fonts/Makefile.am (EXTRA_DIST): Remove devnag*
+
+        * configure.in: Up version to 0.13
+       
+       * docs/pango-docs.sgml: Reorganize, add all new chapters.
+
+       * docs/pango-sections.txt: Update
+
+       * docs/Makefile.am (IGNORE_HFILES): add mini-fribidi
+       pango-intset.h
+
+2000-11-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * pango/pango-attributes.c, pango/pango-attributes.h: Renamed
+       pango_attribute_compare to pango_attribute_equal. Renamed compare
+       member of PangoAttrClass to equal. Renamed some static functions
+       from ..._compare to ..._equal.
+       
+       * pango/fonts.c, pango/pango-font.h, pango/pango-context.c:
+       Renamed pango_font_description_compare to
+       pango_font_description_equal.
+
+       * docs/pango-sections.txt, docs/tmpl/fonts.sgml,
+       docs/tmpl/text-attributes.sgml: Changed accordingly.
+
+2000-11-12  Havoc Pennington  <hp@pobox.com>
+
+       * pango-config.in: Remove UNICODE_LIBS UNICODE_CFLAGS
+       
+       * modules/thai/Makefile.am (pango_thai_la_LIBADD): ditto
+
+       * modules/basic/Makefile.am: ditto
+
+       * pango/Makefile.am: ditto
+
+Mon Nov 13 02:55:38 2000  Robert Brady  <robert@suse.co.uk>
+
+       * examples/pangox.aliases: Added 
+       -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0, for 
+       this comes with X.
+
+Mon Nov 13 02:39:44 2000  Robert Brady  <robert@suse.co.uk>
+
+       * pango/modules/hangul/hangul.c: Replace fallback shaper
+       with a call to pango_x_fallback_shape, this sets the
+       cluster array properly.
+
+Sun Nov 12 18:36:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (included_modules): Remove checks
+       for iconv - we now depend on g_iconv wrapper defined
+       in GLib.
+
+       * modules/basic/basic.c: Use g_iconv_* not iconv().
+
+       * pango/itemize.c pango/pango-context.c modules/thai/thai.c: 
+       Remove spurious iconv.h includes.
+
+Sun Nov 12 16:07:06 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in pango/pango-utils.[ch] pango/Makefile.am
+       pango/mini-fribidi/*: Include a stripped-down version of fribidi
+       to avoid the extra dependency. No fribidi symbols are
+       exported so conflicts with the real fribidi should not
+       happen. Library can optionally be compiled with the 
+       real libfribidi.
+
+       * pango/pango-utils.[ch]: Wrappers for
+       fribidi_ functions when compiling with fribiid.
+       
+       * modules/basic/basic-ft2.c modules/basic/basic-win32.c
+       modules/basic/basic.c modules/thai/thai.c pango/Makefile.am
+       pango/itemize.c pango/pango-context.c pango/pangoft2.c
+       pango/pangowin32.c pango/pangox.c: Use pango_ versions of fribidi
+       functions.
+       
+2000-11-12  Robert Brady  <robert@suse.co.uk>
+
+       * pango/pango-indic.c (pango_shift_vowels): Don't corrupt the 
+       array.
+
+2000-11-12  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pango-layout.c (pango_layout_get_text): Add accessor to 
+       get the text from the layout
+
+2000-11-11  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.c (pango_win32_render): Add code to call
+       SetTextAlign, but commented out.
+
+       * pango/makefile.mingw.in (PANGO_OBJS): Add new objects.
+
+       * pango/pango.def: Add new functions.
+
+2000-11-08  Robert Brady  <rwb197@zepler.org>
+
+       * pango/fonts/devnag.README: Updated to point to the new fonts
+
+       * examples/HELLO.utf8: Added a few new entries.
+
+       * modules/Makefile.am, configure.in: s/devanagari/indic/
+       
+       * modules/devangari: Removed.
+
+       * modules/indic: New shapers for Devanagari,
+       Bengali, Gurmukhi, Gujarati, and Burmese, that make use of
+       the below facilities.
+
+       * pango/fonts/devnag18.bdf: Removed.
+
+       * pango/docs/TEXT/ligatures: Documentation on the ligatures.
+
+       * examples/pangox.aliases: Added fonts for the new Indic renderers
+       to sans, serif and monospace.
+
+       * pango/pangox-fontmap.c, pango/pangox-private.h: Add a 
+       per-PangoXFontMap cache for X Atoms.
+
+       * pango/pango-intset.c, pango/pango-intset.h: Integer set.
+
+       * pango/pangox.c, pango/pangox.h: Mainly add two new functions, 
+       font_struct_get_ligatures, to parse X font properties for ligature
+       info, and pango_x_apply_ligatures, which does that actual ligation.
+
+       Also add utility functions pango_x_fallback_shaper, 
+       pango_x_find_first_subfont.
+
+       * pango/pango-indic.c, pango/pango-indic.h: Utility functions for 
+       Indic scripts.
+
+       * pango/Makefile.am: Add pango-intset, pango-indic.
+       
+Thu Nov  2 16:21:22 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules/arabic: new version of Arabic shaper from Karl
+         Koehler.
+
+2000-11-01  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-markup.c (pango_parse_markup): Return the accel
+       keyval
+
+2000-11-01  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-markup.c (text_handler): Fix bug where not all text
+       was appended when parsing accelerators
+
+2000-11-01 Pablo Saratxaga <pablo@mandrakesoft.com>
+
+       * modules/thai/thai.c: added aliases for X11 font names used on
+       Solaris
+       * modules/arabic/{arabic,naqshfont}.c: changed X11 font registry from
+       "symbol-0" to "urdunaqsh-0"; using "symbol-0" isn't really usable;
+       you get almost always the bad font...
+
+2000-11-01  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pango-attributes.c (pango_attr_scale_new): Add a new
+       attribute for scaling a font; also required adding PangoAttrFloat.
+       (pango_attr_iterator_get_font): Add PANGO_ATTR_SCALE handling.
+
+       * pango/pango-utils.c (pango_parse_stretch): Take a plain string
+       not a GString
+       (pango_parse_weight): ditto
+       (pango_parse_variant): ditto
+       (pango_parse_style): ditto
+
+       * pango/pangox-fontmap.c (pango_x_font_map_read_alias_file): pass 
+       GString::str instead of the GString itself to pango_parse_*
+
+       * pango/pangoft2-fontmap.c (pango_ft2_insert_face): ditto
+
+       * pango/pangowin32-fontmap.c
+       (pango_win32_font_map_read_alias_file): ditto
+       
+       * pango/pango-layout.c (get_tab_pos): adapt to new pango_itemize()
+       signature
+       (pango_layout_check_lines): Raise attr list copy/creation out of
+       the loop over paragraphs. Adapt to pango_itemize() changes.
+
+       * pango/pango-context.c (pango_itemize): pass in a starting 
+       index and a cached iterator
+       (add_engines): Easy optimization, pass in
+       n_chars instead of recomputing it. Also, pass on the start
+       index and cached iterator.
+       
+       * docs/pango-sections.txt: Add new stuff
+       docs/pango_markup.sgml: Docs on markup format
+
+       * pango/pango-layout.c (pango_layout_get_attributes): New function 
+       to retrieve the AttrList from a layout
+       (pango_layout_set_markup): Set layout from markup
+       (pango_layout_set_markup_with_accel): Set layout from markup
+       including accelerator parsing.  
+
+       * pango/pango-attributes.h (pango_parse_markup): New function to 
+       convert a tag string to an attribute list
+
+       * pango/pango-markup.c (pango_parse_markup): implement
+
+       * docs/Makefile.am, docs/pango-docs.sgml, docs/pango-sections.txt,
+       docs/pango_markup.sgml: oooooh, documentation for the above patch!
+
+       * docs/tmpl/pango-unused.sgml: Remove from CVS; just causes
+       problems, and was full of checked-in conflict markers.
+       
+Tue Sep 12 10:21:08 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (pango_map_get_entry): Added docs
+       for the publically exported functions in this module,
+       even though they are really only semi-public
+       (for people implementing new types of #PangoFont),
+       not public
+
+       * pango/pango-utils.c (pango_read_line): Minor bug
+       tweak.
+
+Sun Oct 29 01:27:39 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontcache.c pango/pangoft2.[ch]
+       pango/pangowin32.h: Fix up doc comments not to 
+       have obvious errors that gtk-doc barfs on. Correct
+       parameter descriptions still need to be filled in.
+
+       * configure.in pango/docs/Makefile.am: upgrade to
+       have a real install rule, etc.
+
+       * pango/docs/pango-sections.txt: Add various missing
+       functions.
+
+Wed Oct 25 15:39:49 2000  Tim Janik  <timj@gtk.org>
+
+       * *.c: adapted g_Type_register_*() calls. GLib wants an additional
+       flag field to specify tape flags per node. added 0s all over the place,
+       making the assumption that no pango types are abstract ones.
+
+2000-10-03  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango.def
+       * pango/pangoft2.def: Add new entry points.
+
+       * pango/pango-coverage.c (pango_coverage_set): Remove unnecessary
+       loop calling memset() with same parameters 64 times ;-)
+
+       * pango/makefile.mingw.in (PANGO_OBJS): Add pango-tabs.o.
+
+       Some small changes that have been laying around on my disk. The
+       Win32 and FT2 backends aren't "production quality" yet. For
+       speedup, need to cache at least the coverage info.
+       
+       * pango/pangoft2.c (pango_ft2_get_coverage): New function.
+
+       * modules/basic/basic-win32.c: Use "BasicScriptEngineLangWin32" to
+       be unique.
+
+       * modules/basic/basic-ft2.c: Add comments explaining what Unicode
+       ranges the table entries covers. Use "BasicScriptEngineLangFT2" to
+       be unique.
+       (basic_engine_get_coverage): Test calling
+       pango_ft2_get_coverage().
+       (basic_engine_ft2_new): Set corect engine type. Not that this
+       apparently is used for anything, the X11 basic shaper module also
+       sets its type as TYPE_LANG.
+
+       * examples/viewer-ft2.c (split_paragraphs): Just end the string
+       upon encountering an invalid character. Don't return.
+
+2000-09-29  Martin Baulig  <baulig@suse.de>
+
+       * Makefile.am (pkgconfigdir): Set this to `$(libexecdir)/pkgconfig';
+       this is the directory where pkg-config actually looks.
+
+       * *.pc.in: Made the pkg-config scripts actually work.
+
+2000-09-28  Havoc Pennington  <hp@pobox.com>
+
+       * pango/pango-tabs.c (pango_tab_array_new_with_positions): was 
+       pango_tab_array_new_with_defaults; apparently I didn't check in
+       the modified version at work
+
+2000-09-27  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-tabs.c (pango_tab_array_get_tabs): Change to return
+       allocated array.
+
+2000-09-25  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c: Add a tab array field to PangoLayout,
+       and use it when laying out the text (if it's set, otherwise
+       use default tabs-are-8-spaces thing)
+
+       * pango/pango-tabs.c, pango/pango-tabs.h: tab-related data types
+       
+Sun Sep 10 03:01:53 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_attributes): Fix 
+       bug where wrong attribute list was unreferenced.
+
+       * pango/pango-attributes.[ch]: Add function
+       pango_attr_list_splice() to splice contents of one
+       attribute list into another attribute list.
+
+       * pango/pango-utils.h: Add include of pango-font.h since
+       it now depends on declarations from there.
+
+2000-09-08  Jonathan Blandford  <jrb@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_list_change): Minor fixes
+       to Owen's patch below to make it work.
+
+       * pango/pango-attributes.c (pango_attribute_copy): Copy the
+       start_index/end_index explicitly rather then rely on the copy
+       function doing it for you, as none did so.
+
+Thu Sep  7 05:12:09 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_list_change): Fix up to
+       match the docs, correct bugs found by Jonathan Blandford.
+
+2000-09-04  Robert W Brady  <robert@susu.org.uk>
+
+       * modules/basic/tables-big.i: Use iso10646-1 fonts
+       for Georgian, Ethiopic, Cherokee, Canadian, Ogham,
+       Runic.
+
+Thu Aug 31 11:29:33 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * tools/maps/tis-620: Check in this file, since it 
+       isn't from the Unicode consortium.
+
+Wed Aug 30 21:42:42 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (QTDIR): Add /usr/lib/qt-2.2.0 to the
+       list.
+
+       * modules/basic/tables-big.i: Updated using fixed
+       make-table.sh. Added koi8-r and iso8859-1
+
+       * modules/basic/tables-small.i: Add note noting
+       non-maintainence.
+
+       * tools/make-table.sh: Fix for mapping tables with
+       3 columns provided by KUSANO Takayuki.
+
+2000-08-29  Elliot Lee  <sopwith@redhat.com>
+
+       * pango/pango-context.h, pango/pango-font.h,
+       pango/pango-fontmap.h, pango/pango-layout.h: Utilize G_GNUC_CONST
+
+Mon Aug 21 22:02:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (load_font): Don't produce a warning
+       unless loading all fonts fails, if loading all fonts fails,
+       try with "Sans [style]", if that fails, try with "Sans",
+       if that fails, exit - we are completely screwed.
+
+       * pango/pangox-fontmap.c (pango_x_font_map_load_font): Equate
+       PANGO_STYLE_OBLIQUE and PANGO_STYLE_ITALIC, but with a big
+       penalty.
+
+2000-08-21  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangoft2-fontmap.c: Get font directory path with
+       pango_config_key_get("PangoFT2/FontPath"). If no such key exists
+       in the pangorc file, use the ft2fonts subdirectory of
+       LIBDIR/pango, and on Windows, also %WinDir%\fonts.
+
+       * pango/{pango,pangoft2,pangowin32}.rc.in: New files (resource
+       files used when building Win32 DLLs, contain version information).
+
+       * pango/Makefile.am: Add the new files.
+
+       * configure.in: Define major and minor version numbers separately.
+       Output also the makefile.mingw and *.rc files.
+
+       * pango/pangoft2.c (pango_ft2_render): Handle also ft_pixel_mode_mono
+       glyphs.
+
+       * pango/pangoft2*: Portability enhancements (non-gcc).
+
+Sun Aug 20 13:45:08 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * TODO.xml TODO: Move most all of the TODO items here to the XML file. 
+       This needs to be built using the Python script gtk+/docs/make-todo.
+
+2000-08-20  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango-utils.c (pango_parse_*): Add parameter telling
+       whether to print warning or not if string isn't recognised. Use
+       g_strncasecmp().
+
+       * pango/pango-utils.h: Change prototype accordingly.
+
+       * pango/pangox-fontmap.c
+       * pango/pangowin32-fontmap.c: Change calls correspondingly.
+
+       * pango/pangowin32.h: 
+       * pango/pangowin32.c: Cosmetic changes, dead code removal.
+
+       * pango/pangoft2.h
+       * pango/pangoft2-private.h
+       * pango/pangoft2.c
+       * pango/pangoft2-fontmap.c
+       * pango/pangoft2-fontcache.c: New files implementing a FreeType2
+       backend. Used only on Win32 so far, but doesn't contain
+       Win32-specific code per se, so if somebody wants to try it out on
+       X11, too, be my guest.
+
+       It works, more or less, but there are some details still to sort
+       out. Performance needs to be improved. Debugging printouts still
+       present. Font path currently hardcoded to C:\windows\fonts, heh.
+
+       Owen says he doesn't think it's a good idea to use ths on Win32,
+       but I'll try anyway. If it turns out using the native Win32 GDI
+       backend is better after all, oh well.
+
+       * pango/makefile.mingw: Delete. Move contents to
+       makefile.mingw.in.
+
+       * pango/makefile.mingw.in: New file. Add rules for
+       FreeType2 backend. Add FreeType2 CFLAGS and LIBS.
+
+       * pango/Makefile.am: Generate makefile.mingw.
+       (EXTRA_DIST): Add FreeType2 backend sources, and
+       makefile.mingw{,.in}
+
+       * pango/module-defs.c.win32
+       * pango/pangoft2.def: New files.
+
+       * modules/engine.def: Delete. Was duplicate of module.def.
+
+       * modules/basic/basic-win32.c: Couple of cosmetic changes.
+
+       * modules/basic/Makefile.am: Generate makefile.mingw.
+       (EXTRA_DIST): Add basic-ft2.c, and makefile.mingw{,.in}
+
+       * modules/basic/makefile.mingw: Delete. Move contents to
+       makefile.mingw.in.
+
+       * modules/basic/makefile.mingw.in: New file. Add rule for
+       basic-ft2. Add FreeType2 CFLAGS and LIBS.
+
+       * examples/viewer-win32.c: Replace division or multiplication with
+       1000 (which was the old PANGO_SCALE value) to use PANGO_SCALE and
+       PANGO_PIXELS instead. 
+       (read_file): Fix error messages.
+       (draw): Get HDC from GDK once for all paragraphs.
+       * examples/viewer-win32.c: 
+
+       * examples/viewer-ft2.c: New file. The FT_Bitmap (256-level
+       bitmap) produced by the FreeType2 backend is copied to the
+       GtkLayout window using gdk_draw_gray_image from GdkRGB (!). Yes,
+       this is kinda circular dependency between Pango and GTK+.
+
+       * examples/makefile.mingw: Delete. Move contents to
+       makefile.mingw.in.
+
+       * examples/makefile.mingw.in: New file. Add rules for
+       viewer-ft2. Add FreeType2 CFLAGS and LIBS.
+
+       * examples/Makefile.am: Generate makefile.mingw.
+       (EXTRA_DIST): Add viewer-win32.c and viewer-ft2.c, and
+       makefile.mingw{,.in}
+
+2000-08-11  Havoc Pennington  <hp@redhat.com>
+
+       * pangox.pc.in (Cflags): remove /usr/include
+
+       * pango.pc.in (Cflags): remove /usr/include
+
+2000-08-08  Elliot Lee  <sopwith@redhat.com>
+       
+       * modules/arabic/arabic.c: #include <string.h>
+       * pango/modules.c: Fix incorrect list rearrangement.
+       * pango/pango-layout.c (pango_layout_line_x_to_index): Pay
+       attention to shape attributes
+         (not perfect since the layout of chars inside a shape is
+       unknown, but gives start index).
+
+2000-08-07  Elliot Lee  <sopwith@redhat.com>
+
+       * pango/modules.c: If the first pango_skip_space fails, remember
+       to free enginepair before continuing.
+       * pango/pango-layout.c (pango_layout_set_attributes): unref old
+       attr list after reffing new one.
+       * pango/pango-attributes.c (pango_attr_list_insert_internal):
+        Proper fix from Owen for the infinite loop.
+
+2000-08-03  Elliot Lee  <sopwith@redhat.com>
+
+       * pango/modules.c: Fix segfault when tmp_list has no 'prev' pointer.
+       * pango/pango-attributes.c (pango_attr_list_insert_internal):
+       Infinite loops do not fast programs make.
+       * pango/pango-context.c: Set a default font size so that things
+       don't go boom if someone forgets to set it themselves.
+       * pango/pango-layout.c (pango_layout_index_to_pos): Exclude
+       newlines from consideration.
+       (pango_layout_line_index_to_x): Take shape attributes into
+       consideration when determining position.
+
+Wed Aug  2 12:00:53 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_extents):
+       Fix problem with the way extents for the layout lines
+       were summed together in the vertical direction.
+
+Sat Jul 29 21:26:30 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer-qt.[ch] (ViewerWindow): Remove 
+       hardcoded path to my home directory! Allow specifying
+       the file on the command line.
+
+       * pango/modules.c (process_module_file): Fix bug in
+       parsing of range strings.
+
+2000-07-31  Havoc Pennington  <hp@redhat.com>
+
+        * pango.pc.in, pangox.pc.in: pkg-config info files
+       
+       * Makefile.am: dist/install .pc files
+
+       * configure.in: output .pc files
+
+2000-07-28  Martin Baulig  <baulig@suse.de>
+
+       * pango/pango-layout.c (pango_layout_finalize): Destroy
+       the layout->font_desc to avoid a memory leak.
+
+2000-07-27  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango.def
+       * pango/pangowin32.def: New files, forgot to commit earlier.
+
+Sat Jul 22 10:52:06 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c: include <stdlib.h>
+
+       * configure.in: s/FRIBID_CONFIG/FRIBIDI_CONFIG/.
+
+Fri Jul 21 15:17:26 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_itemize): A bit of code
+       cleanup.
+
+       * pango/pango-attributes.[ch]: Add a new attribute type
+       PangoAttrShape, for imposing specific shapes on glyphs.
+       This is used for handling embedded pixmaps and similar
+       objects.
+
+       * pango/pango-layout.c: Hnadle PangoAttrShape.
+
+       * pango/pango-context.[ch]: 
+
+Fri Jul 21 09:59:10 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (process_module_file): Free buffer strings.
+
+       * pango/pangox-fontmap.c (pango_x_real_get_coverage_win): Add
+       caching of coverage maps on a persistant subwindow of the
+       root window. This window contains a property for
+       each "lang|xlfd,xlfd" which is the result of pango_coverage_to_bytes.
+
+       * pango/pango-context.c (pango_context_finalize): Free
+       the font description.
+
+       * pango/pango-coverage.c (pango_coverage_to/from_bytes): Added
+       functions to covert a PangoCoverage structure too and
+       from a flat block of bytes.
+
+       * configure.in (X_LIBS): Add a check to detect fribidi being
+       compiled against glib-1.2.x.
+
+2000-07-20  Tor Lillqvist  <tml@iki.fi>
+
+       * examples/pangowin32.aliases: Add some more fonts. Document where
+       to get the fonts.
+
+       * pango/pangowin32.c (subfont_has_glyph): Use 0xFFFE to produce
+       the default glyph.
+       (create_bitmap_dibsection): Zero out the bitmap.
+
+       * pango/pangowin32-fontmap.c (pango_win32_guess_subranges): Set
+       some additional Unicode subranges for fonts that claim covering
+       the Vietnamese codepage.
+
+2000-07-19  Tor Lillqvist  <tml@iki.fi>
+
+       * configure.in: Don't try to use the ! command, not available in all
+       systems. Move the ! inside the test instead.
+
+       * pango-config.in: Change order of --cflags output, so that we can
+       build with both GLib 1.2 and 1.3 installed.
+
+       * modules/devanagari/dev-ligatures.h: No C++ comments, thanks.
+
+       * pango/break.c: Fix gccism, non-constant initailiser.
+
+       * pango/pango-fontmap.c (pango_font_map_list_fonts,
+       pango_font_map_list_families): Don't return value from void
+       functions.
+
+       * pango/pango-utils.c: Must have at least empty statement after
+       a label.
+
+       * examples/pangowin32.aliases: Add Tahoma and Angsana New, these
+       common fonts have Thai characters.
+
+       * pango/pangowin32-private.h: Rename fonts and n_fonts members
+       to logfonts and n_logfonts, as that is what they are.
+
+       * pango/pangowin32.c: Bug fixes. Works much better now.
+       (pango_win32_font_get_glyph_extents): Set y offset correctly.
+       (subfont_has_glyph): Call SetTextAlign. Select the font into the
+       HDC before calling GetTextMetrics.
+       
+2000-07-18  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/Makefile.am (EXTRA_DIST): Add the pangowin32 sources.
+
+       * pango/pangox.c (lang_texts): Add some non-ASCII to the
+       Finnish and Swedish strings.
+
+       * modules/module.def: New file.
+
+       * modules/Makefile.am (EXTRA_DIST): Add it.
+
+       * modules/basic/Makefile.am (EXTRA_DIST): Add basic-win32.c.
+
+       * */makefile.mingw: Small updates.
+
+       * pango/pangowin32.c
+       * pango/pangowin32-fontmap.c
+       * modules/basic/basic-win32.c
+       * examples/viewer-win32.c: Bug fixes. Remove dead code.
+       Now the Win32 implementation seems to work, except
+       for a few glitches.
+
+2000-07-16  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango-utils.h
+       * pango/pango-utils.c
+       * pango/pangox-fontmap.c
+       * pango/pangowin32-fontmap.c: Move the get_{style,variant,
+       weight,stretch} functions to pango-utils.c, and rename
+       them to pango_parse_*. Would otherwise be duplicated in
+       pangox and angowin32.
+
+       * pango/pango.def: Export them.
+
+       * pango/pango-font.h: Add PANGO_WEIGHT_ULTRALIGHT,
+       PANGO_WEIGHT_LIGHT, PANGO_WEIGHT_EXTRABOLD and PANGO_WEIGHT_HEAVY
+       values to PangoWeight.
+       * pango/pango-utils.c: Recognize the new weight strings.
+
+       * pango/pangowin32.c (pango_win32_list_subfonts): Don't g_free the
+       subfont_list from the subfonts_by_subrange hash table...
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_read_alias_file): 
+       Also set the other properties in the LOGFONT, not only the face name.
+
+       (pango_win32_insert_font): Insert a pointer to a freshly allocated
+       LOGFONT in the hash table, not the one passed in as a parameter,
+       which could be (and in fact, *is*) a pointer to an auto
+       variable. Quantize the description weight values to exact
+       PANGO_WEIGHT_* values.
+       (pango_win32_get_unknown_glyph): Use subfont 1.
+
+       * examples/viewer-win32.c: (split_paragraphs): Don't include the
+       newline.
+       (draw): Correct 1st parameter to gdk_win32_hdc_{get,release}.
+
+2000-07-15  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.h
+       * pango/pangowin32-private.h
+       * pango/pangowin32-fontcache.c
+       * pango/pangowin32-fontmap.c
+       * pango/makefile.mingw
+       * modules/basic/basic-win32.c
+       * modules/basic/makefile.mingw
+       * examples/viewer-win32.c
+       * examples/makefile.mingw
+       * examples/pangowin32.aliases: New files. Start of a Win32
+       implementation. Does not work yet.
+
+       * configure.in: Chek for dirent.h and unistd.h.
+
+       * pango/pango-utils.h
+       * pango/pango-utils.c (pango_get_sysconf_subdirectory,
+       pango_get_lib_subdirectory): New functions, for better
+       portability, to enable installation-time choice of directory (on
+       Windows) instead of compile-time. Use these instead of SYSCONFDIR
+       "/pango" and LIBDIR "/pango".
+
+       (pango_split_file_list): Fix comment, the function splits on
+       searchpath separators, not commas. Use G_SEARCHPATH_SEPARATOR_S
+       for portability. Don't try to expand '~' as home directory on
+       Windows.
+
+       (read_config): Use pango_get_sysconf_subdirectory().
+
+       * pango/modules.c (read_modules): Use pango_get_sysconf_subdirectory().
+       Don't crash if a module file cannot be opened.
+
+       * pango/querymodules.c: Include config.h Conditionalize inclusion
+       of dirent.h and unistd.h. Use platform-specific shared library
+       extension. Use pango_get_lib_subdirectory().
+
+Thu Jul  6 15:24:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * Released 0.12
+
+       * examples/pangox.aliases: Add clealyu fonts
+
+        * configure.in: Use AM_PATH_GLIB_2_0()
+       
+       * pango-config.in: Use @FRIBIDI_LIBS@, not -lfribidi
+
+       * pango-config.in: Fix accidental inclusion 
+       -I lib/glib/include/
+
+Mon Jul 10 10:42:42 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c (pango_split_file_list): Fix
+       bug in home directory substitution.
+
+2000-07-06  Havoc Pennington  <hp@redhat.com>
+
+       * pango/break.c (pango_get_log_attrs): Implement this function, to
+       get logical attributes without a PangoAnalysis.
+       (pango_break): Fix bug in word stop location
+
+Thu Jul  6 15:24:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * gdk/Makefile.am: Fix missing \ which was causing
+       srcdir != builddir builds to fail.
+
+Thu Jul  6 15:16:28 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/pango-sections.txt docs/tmpl/*: Update
+
+2000-07-03  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_index_to_pos): Handle the
+       case where the byte offset is outside the layout.
+
+Sun Jul  2 18:06:01 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (get_tab_pos): Fix up set_font_description()
+       for tab spaces.
+
+Sun Jul  2 17:59:56 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.[ch] (pango_attr_list_insert_before): New
+       function that inserts before other attributes with matching
+       start index.
+
+       * pango/pango-layout.[ch] (pango_layout_set_font_description): Add
+       the ability to set a default font description on the layout, overriding
+       the font description from the context.
+
+Sun Jul  2 17:19:11 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h: Add a PANGO_PIXELS macro to convert
+       from pango units to device units and round.
+
+       * pango/pango-layout.[ch]: Add convenience functions
+       pango_layout_get_pixel_extents, pango_layout_get_size,
+       pango_layout_get_pixel_size pango_layout_line_get_pixel_extents.
+
+Fri Jun 30 16:46:31 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.[ch] Makefile.am: A bunch of simple functions
+       for reading from files, manipulating strings as necessary for
+       config files. Also, a simple gnome-config/win.ini style
+       config file reader.
+
+       * pango/modules.c: Remove DOTFILES stuff. Instead, read names
+       of modules file from pangorc. (Which can be set from PANGO_RC_FILE).
+       Rewrite parsing code using pango-utils.c.
+
+       * pango/pangox-fontmap.c: Read list of files from
+       PangoX/AliasFiles key. Rewrite parsing code for alias files using
+       pango-utils.c.
+       
+       * examples/pangox.aliases: Move to new name from pangox_aliases,
+       reformat using new parsing code.
+       
+       * examples/pangorc (AliasFiles) examples/pango-viewer: Add a
+       pangorc file for in-place testing.
+
+       * pango/querymodules.c (main): Add comment to the top of 
+       the output indicating that the file should not be hand-edited.
+
+Thu Jun 29 18:13:47 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-coverage.c: Fix various aspects of expanding
+       coverage tables beyond the first 256 blocks. (Based on
+       patch from ChiDeok Hwang.)
+
+Thu Jun 29 16:35:41 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/{*.c,Makefile.am}: New version from Karl
+       Koehler merged with the changes for the GLib unicode functions.
+
+Wed Jun 21 12:11:56 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Remove tests for libunicode
+
+       * pango/utils.[ch]: Removed. The functions from here are now in
+       GLib.
+
+       * **.[ch]: Removed use of libunicode and utils.c in favor of
+       Unicode functions in GLib. Requires latest GLib from CVS.
+
+2000-06-14  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_list_copy): Function to
+       copy the attribute list.
+
+2000-06-13  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-layout.h: Convert PangoLayout to GObject
+
+       * pango/pango-context.h: Convert to PangoContext to GObject
+
+2000-06-11  Elliot Lee  <sopwith@redhat.com>
+
+       * pango/fonts.c (pango_font_description_compare): g_strcasecmp
+       returns 0 when strings are equal - negate return value.
+
+2000-06-09  Elliot Lee  <sopwith@redhat.com>
+
+       * pango/pango-coverage.[ch]: Return 'coverage' from
+       pango_coverage_ref.
+
+2000-06-08  Elliot Lee  <sopwith@redhat.com>
+
+       * modules/Makefile.am: Add DOTMODULESDIR define to make it easier
+       to change location of .modules files.
+       * pango/modules.c: Likewise. Also scan the config directory for
+       multiple config files instead of pango.modules.  Also fclose()
+       opened files.
+
+Thu Jun  8 14:43:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-modules.h: pango/Makefile.am: Add a new
+       header pango-modules.h to export a few parts of the 
+       modules API needed by code for new types of fonts.      
+
+2000-06-08 Elliot Lee <sopwith@redhat.com>
+
+       * pango-config.in: Include X_LIBS in libraries for 'pangox' target.
+
+2000-06-07  Havoc Pennington  <hp@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_iterator_copy): New
+       function to copy a PangoAttrIterator.
+
+Mon Jun  5 20:45:12 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox-fontmap.c (pango_x_shutdown_display): Add
+       a function to free cached information for a particular
+       display. (This is basically pango_x_fontmap_destroy())
+
+       * pango/pangox.c pango/pangox-private.h pango/pangox-fontmap.c:
+       Make a XFont always keep a pointer to (and ref) a fontmap.
+
+Mon Jun  5 15:56:25 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox-fontmap.c (pango_x_font_map_for_display): Remove
+       excessive ref.
+
+       * pango/pangox-fontcache.c (pango_x_font_cache_unload): Fix
+       problem with unloading fonts.
+
+       * pango/pangox-fontmap.c pango/pangox-private.h pangox/pangox.c:
+       Add a simple cache for PangoXFonts; get rid of the eternal caching of
+       all fonts.
+
+Wed May 31 16:11:46 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-fontmap.h (struct _PangoFontMapClass): Remove unused
+       destroy vfunc.
+
+Sat Jun  3 06:01:38  Pablo Saratxaga <pablo@mandrakesoft.com>
+
+       * modules/thai/thai.c: added other common X11 font encoding
+       names fortis-620 fonts.
+
+Thu Jun  1 13:04:06 CEST 2000 Paolo Molaro <lupus@debian.org>
+
+       * configure.in: look for qt also in /usr/lib/qt2.
+
+Wed May 31 10:46:53 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Release 0.11
+
+       * pango.spec.in: Add missing make command.
+
+       * modules/basic/Makefile.am (EXTRA_DIST): Fix up extra-dist.
+
+       * pango/Makefile.am (libpangox_la_SOURCES): Add pangox-private.h
+
+Tue May 30 14:30:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_from_string): Use g_strtod().
+
+       * pango/fonts.c (pango_font_description_to_string): Fix bug
+       where spaces where not properly inserted into font description
+       string. 
+
+       * pango/fonts.c (pango_font_get_glyph_extents): Fix some 
+       1000 <=> PANGO_SCALE bugs.
+
+       * pango/pangox-fontcache.c (pango_x_font_cache_load): Fix list
+       manipulation bug.
+
+Mon May 29 13:22:36 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c pango/pangox.h (pango_x_font_subfont_xlfd): New
+       function to retrieve the XLFD for a given subfont.
+
+Mon May 29 11:14:34 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox-fontcache.c (pango_x_font_cache_load): Fix bug
+       in MRU list code.
+
+       * pango/pango-layout.c (pango_layout_check_lines): Fix infinite
+       loop in the case where the first item doesn't fit, but
+       whitespace follows that must go onto the same line.
+
+       * examples/viewer-qt.h: Minor changes so it compiles with
+       Qt-2.0. (Though the utf8 codec in Qt-2.0 seems to be slightly
+       buggy.)
+       
+Sun May 28 16:24:43 2000  Owen Taylor  <otaylor@redhat.com>
+
+        * examples/Makefile.am examples/viewer-qt.cc 
+         examples/viewer-qt.h: Since we require GLib-1.3,
+       and thus can no longer build the examples against
+       GTK+-1.2, and since there is a nasty circular dependency
+       if we build examples against GTK+-1.3, rewrite
+       (optional) example program in Qt. (I wasn't going
+       to do it in Xaw or straight Xlib...)
+       
+       * configure.in: Added checks for Qt.
+
+       * pango/pango-layout.h: Fix constness.
+
+Sat May 27 22:05:53 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (pangoinclude_HEADERS): Install
+       pango-fontmap.h.
+
+       * pango/pangox-fontcache.c pango/pangox.h: Add a simple
+       cache from XLFD => font struct.
+
+       * pango/pango-fontmap.c: Use this when loading and unloading
+       fonts.
+
+Sat May 27 21:57:03 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_context_add_font_map): 
+       Ref font map.
+
+Sat May 27 21:06:13 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/thai/thai.c modules/basic/basic: 
+       s/pango_font_set_data/g_object_set_qdata/
+
+       * pango/*.c: s/pango_font_[un]ref/g_object_un[ref]
+
+       * pango/pango-font.h fonts.c: GObject'ify PangoFont.
+
+Sat May 27 20:36:56 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am configure.in: Add libgobject.
+
+        * pango/pango-fontmap.[ch]: GObject'ify PangoFontMap. 
+       (Pango now requires GLib-1.3 to compile)
+       
+       * pango/pangox-fontmap.c pango/pangox-private.h: Break
+       the fontmap code in libpangox out into a separate file.
+
+Tue May 23 10:32:25 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_text): Allow -1 for
+       the length.
+
+2000-05-24  Matt Wilson  <msw@redhat.com>
+
+       * modules/basic/basic.c (conv_8bit): use size_t for arguments to
+       iconv, not int.  Fixes 64 bit platforms.
+
+       * modules/basic/basic.c (conv_euc): likewise
+
+Mon May 22 18:19:32 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (process_item): Fix <, <= confusion.
+
+Thu May 18 17:30:00 2000  Robert Brady  <rwb197@zepler.org>
+
+       * fonts/devnag18.bdf: Fix advance widths of some glyphs.
+
+Tue May  9 22:09:42 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h (PANGO_SCALE): Change PANGO_SCALE
+       from 1000 to 1024. Wee! Optimization! Actual performance
+       increase is ~1-2% probably not worth keeping it 1024,
+       but I'll leave it this way for a little bit. 
+
+       * pango/pango-layout.c (pango_layout_unref): Free the 
+       actual layout structure as well.
+
+       * pango/pangox.c: Various optimizations of the code for
+       looking up characters. (mark a few functions inline,
+       precompute signficiant quantities)
+
+Tue May  9 03:22:11 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_check_lines): Fix
+       memory leak by freeing correct list.
+
+       * pango/pango-context.c (pango_context_get_font_description): 
+       Change to return a pointer to the context's font description
+       instead of a copy. Not quite 100% kosher but a lot 
+       more efficient than the previous. (Should we just refcount
+       font descriptions and get it over with?)
+
+Mon May  8 16:39:48 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (free_run): Call pango_item_free
+       to free items properly including attributes.
+
+Mon May  8 16:19:22 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/thai/* modules/Makefile.am configure.in:
+       Add a simple Thai shaper. (Reasonably complete but
+       intended mostly for an example for the shape docs
+       right now.)
+
+       * pango/pangox.h (PANGO_X_GLYPH_INDEX): Protect
+       arguments to macros.
+
+Sun May  7 06:15:34 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic.c (basic_engine_shape): When
+       handling overstrikes, try to guess a bit better
+       how overstrike glyphs are positioned in the font.
+       (Now works with more of glyphs from clearlyu, though
+       not the Hebrew accents in that font)
+
+       * examples/HELLO.utf8: Insert tab characters to 
+       keep the columns in the right order for either
+       global direction. Insert left-to-right marks in
+       a few places to keep leading and trailing punctuation
+       in the right place.
+
+       * modules/basic/basic.c (basic_engine_shape): Don't
+       show RLM and LRM
+
+       * pango/glyphstring.c (pango_glyph_string_extents): Use
+       the logical width set in the glyph string rather than 
+       that from the font's metrics.
+
+       * pango/pangox.c (pango_x_render): Treat glyph index
+       0 as special - representing invisible, 0 size
+       character. We need this sometimes, and it is
+       easier and faster to have this special case
+       than to shape a space.
+
+       * pango/pango-context.c (pango_itemize): Put
+       tabs into separate items. (Sort of lame hack,
+       we do this to make line breaking with tab
+       handling simpler)
+
+       * examples/viewer.c (checkbutton_toggled): Notify
+       all the layouts that the context has changed so 
+       the RTL base dir change actually takes effect.
+
+Fri May  5 18:56:45 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c (pango_break): Add ZWS to hacky 
+       break algorithm.
+
+       * modules/basic/basic.c (basic_engine_shape): Special
+       case zero-width-space as a temporary hack. (What's the
+       right solution?)
+
+       * modules/basic/tables-big.i: Added support for TIS-620
+       encoding.
+
+       * configure.in pango/modules.[ch] pango/Makefile.am
+       modules/**: First stab at support for linking modules
+       directly into Pango. Add a --with-included-modules=
+       flag that causes the specified modules to be built
+       as convenience libraries and linked directly into
+       libpangox. 
+
+Tue May  2 22:59:52 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic.c: Get rid of link list of masks
+       in cache structure in favor of an array. (This is
+       easy to do now since we already have linear indices
+       for the masks from the new table format.)
+
+       * pango/modules.c pango/pango-context.c pango/pangox.c:
+       Modify _pango_find_map() to take quarks for the
+       engine type and render type instead of strings. 
+       Get rid of the map hash table in favor of a GList
+       with the most recently used map at the beginning.
+
+       * pango/modules.[ch] pango/pango-context.c pango/pangox.c:
+       Add some utility functions for getting the engine 
+       for a particular character in a map. Using modules.c
+       knowledge of map structure, this allows us to save
+       a bunch of useless strcmps.
+
+       * pango/pango-context.c (add_engines): Remove unused
+       lookup of shape mask.
+
+       * modules/basic/tables-{small,big}.i modules/basic/basic.c
+       tools/compress-table.pl: Reencode mask table to avoid binary
+       searches and save a bit of space.
+
+       * modules/basic/basic.c (find_converter): Get rid
+       of gratuitous use of hash tables for looking up
+       iconv converters.
+
+       * modules/basic/tables-{small,big}.i modules/basic/basic.c:
+       Use conv_ucs4 instead of conv_8bit for latin-1.
+
+       * pango/pango-layout.c: Avoid calling pango_glyph_string_extents() - 
+       just add up the widths from shaping.
+
+Tue May  2 19:16:17 PDT 2000 Manish Singh <yosh@gimp.org>
+
+       * examples/Makefile.am: typo fix
+
+Mon May  1 15:04:02 PDT 2000 Manish Singh <yosh@gimp.org>
+
+       * configure.in: add support for fribidi-config (needs fribidi v0.1.10
+       or higher). Also actually use the FOO_CONFIG variable filled by
+       AC_PATH_PROG for --cflags and --libs.
+
+       * examples/Makefile.am
+       * pango/Makefile.am: use $(FRIBIDI_LIBS)
+
+Mon May  1 11:58:55 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/*: Misc bug fixes from Karl Koehler.
+
+Wed Apr 26 19:55:40 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Add checks looking for iconv in libiconv.
+       (Thanks to Ross Campbell for helping me test this
+       out.)
+
+Mon Apr 24 22:51:06 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Released 0.10
+
+       * modules/arabic/*: Update from Karl Koehler, including
+       support for LangBox fonts
+
+Mon Apr 24 20:28:31 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/**: Updates for recent API changes.
+
+Mon Apr 24 18:09:29 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_get_empty_extents): Come
+       up with a reasonable guess for metrics for empty lines based
+       on the font metrics.
+
+       * modules/devanagari/devanagari.c (devanagari_engine_shape): A couple
+       of trivial fixups to make things compile.
+
+Sun Apr 23 23:33:10 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): New
+       function for visual (left-right, not forward-back) cursor
+       navigation within a layout.
+
+Thu Apr 20 22:16:39 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index): As a hack,
+       for x-positions at the edge of a line, fudge the position to be
+       one before the line end (which is, for programs that don't properly
+       handle the trailing flag), instead of at the end of the line.
+       This works fine for whitespace-broken languages, but won't work
+       right for languages that don't use whitespace to break lines.
+       (GtkText* needs to keep track of whether a cursor is trailing
+       or not)
+
+       * pango/pango-layout.c (pango_layout_check_lines): Prohibit breaking
+       a line at a non-whitespace -> space transition. (So that we
+       never put wrap single character of whitespace at the beginning of
+       a line)
+
+       * pango/break.c (pango_break): Always allow a break before
+       the first char.
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index): Remove the return
+       value from the function, make it return the appropriate index
+       depending on the base direction of the layoutt.
+
+Fri Apr  7 03:08:09 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in (UNICODE_LIBS): Add back in flockfile
+       check which was accidentally removed.
+
+2000-04-21  Robert Brady  <rwb197@zepler.org>
+
+       * modules/devanagari/dev-ligatures.h: Add some more ligature
+       mappings.
+       
+       * modules/devanagari.c: New version, now syllable-based, with
+       proper RA handling.
+
+Mon Apr 17 12:04:20 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.[ch]: Add a function pango_layout_line_get_x_ranges(),
+       to allow handling selections not as attributes. Which is necessary,
+       since currently setting the background/foreground results in
+       splitting shaped runs.
+
+Fri Apr 14 13:20:05 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_check_lines): Fix bug with
+       indent handling.
+
+       * pango/pango-layout.c (process_item): Never break a line at
+       a non-break position, even if that position ends an item.
+
+Fri Apr 14 10:43:09 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_render_layout_line): Fix a missing
+       PANGO_SCALE factor for UNDERLINE_SINGLE.
+
+       * pango/pango-layout.c (pango_layout_get_cursor_pos): New function
+       to determine cursor positions corresponding to a particular
+       index.
+
+Wed Apr 12 15:44:22 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.[ch]: Add PANGO_ATTR_FONT_DESC, which
+       allows an entire font description to be specified as a single
+       attribute, instead of as 6 separate attributes.
+
+Wed Apr 12 13:59:22 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in modules/Makefile.am modules/devanagari/*: Added Devanagari
+       shaper from Robert Brady <rwb197@zepler.org>
+
+       * examples/HELLO.utf8: Added Hindi from Emacs 
+
+       * examples/dev-example.utf: Some syllable strings for testing
+       the Devanagari shaper.
+       
+       * examples/pangox_aliases: Added 
+         -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev
+
+       * fonts/devnag18.bdf fonts/devnag.README: Devanagari font
+       from http://crl.NMSU.Edu/~mleisher/devnag.html currently
+       required for operation of the devanagari shaper.
+       
+Tue Apr  4 22:03:42 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Released 0.9
+
+       * modules/arabic/arabic.c (find_unic_font): Keep on
+       searching past the first iso-10646 font if the first
+       font doesn't have the required ligatures.
+
+Tue Apr  4 20:56:29 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/* docs/Makefile.am docs/pango-sections.txt
+         pango/pango-attributes.c pango/pangox.c: Doc updates.
+
+Tue Apr  4 20:13:06 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.h: Add user data to PangoContext
+
+       * pango/pangox.[ch] examples/viewer.c: Rework system for create GC's 
+       so that the necessary information is stored on the PangoContext
+       instead of being passed to layout_render()
+
+       * pango/utils.[ch] pango/pango-context.c: fribidi-0.1.9
+       wants UCS-4 not UCS2; switch accordingly.
+
+       * pango/fonts.c pango/pango-font.h pango/pangox.c: Add functions
+       to get overall font metrics, possibly per-language. (Right now,
+       just font ascent, descent.) The implementation of this for
+       X is horribly complex.
+       
+Mon Apr  3 20:30:20 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mapping.c (pango_glyph_string_x_to_index): Fix handling
+       of positions at character limits.
+
+       * modules/basic/basic.c (basic_engine_shape): Fix bug that
+       was causing mirrored characters not to mirror.
+
+Mon Apr  3 15:16:06 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c (pango_glyph_string_get_logical_widths):
+       Fix off-by-one error for RTL runs.
+
+       * configure.in: Add -lglib to AC_CHECK_LIB(fribidi...)
+        (How did this work?) From Matt Wilson.
+
+       * pango/pango-layout.c (pango_layout_check_lines): Correctly deal
+       with handling character offsets when breaking lines.
+
+       * modules/arabic/arabic.c (arabic_engine_shape): Fix problem with 
+       setting unknown glyph when no arabic-capable font found.
+
+Fri Mar 31 11:29:47 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.[ch] (pango_x_render_layout[_line]) examples/viewer.c: Add
+       capability to render foreground / background colors. The interfaces
+       here are possibly certainly not right, or convenient, but
+       they should be a start.
+
+Thu Mar 30 17:06:39 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/*.[ch]: New version of Arabic module
+       from Karl Koehler, supporting:
+
+       - More extensive ligatures
+       - Some Hamza handling
+       - Vowel marks
+       - mule-arabic font
+       - LangBox font
+       - Persian (farsi) (needs testing)
+
+Thu Mar 30 16:49:06 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic.c pango/utils.c (find_converter): Use
+       "UTF-8" with the dash as the charset name for utf-8. 
+       (Change suggested by Adrian Havill <havill@turbolinux.co.jp>)
+
+       * pango/pango-layout.[ch]: Add function to get logical attributes
+       of the text string.
+
+Mon Mar 13 11:47:53 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c pango/pangox.c (pango_x_render_layout): Handle right 
+       alignment for width == -1, align within total width of layout.
+
+Mon Mar 13 10:54:48 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-item.[ch]: Memory management functions for PangoItem.
+
+       * pango/*.[ch]: Random constification.
+       
+       * pango/pangox.c pango/pango-layout.c pango/pango-context.c:
+       Add an extra_attrs field to PangoItem. Use this to handle underlining
+       for PangoLayout.
+
+       * examples/viewer.c (reload_font): Make paragraphs global
+       to save the complexity of passing it around all over the place.
+
+       * pango/pango-layout.[ch] (pango_layout_context_changed): Add
+       a function to reset the layout on changes to the layout's
+       context.
+
+       * pango/pangox.c (pango_x_make_matching_xlfd): Prefer bitmap
+       to scaleable if the discrepancy is < 1 pixel. (Probably not
+       the ideal criterion.)
+
+       * pango/pangox.c (pango_x_font_map_for_display): Fix resolution
+       computation error.
+
+       * pango/pango-layout.c (pango_layout_check_lines): Handle
+       text with embedded newlines.
+
+       * pango/pangox.c (pango_x_render_layout): Fix y to refer
+       to the top of the layout, not the baseline of the first
+       line.
+
+       * pango/pango-layout.c (process_item): Don't wrap if width is
+       set to -1.
+
+       * Makefile.am configure.in **/*.[ch]: move libpango/ directory
+       and fix all headers to install under include/pango/
+
+Thu Mar  9 19:55:21 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * Release pango-0.8
+
+       * docs/TEXT/coding-style: Added some notes about coding style
+       within Pango.
+
+       * modules/*.[ch]: New version from Karl Koehler adding support
+       for vowels marks, better ligatures.
+       
+       * docs/tmpl/*: Doc updates
+
+        * libpango/pango-layout.[ch] libpango/pangox/.[ch]: Add functions
+       for handling paragraphs as 2-D objects, not simple lists of lines,
+       to make things easier for people using pango-layout.
+        
+        * examples/viewer.c: Simplify using the now 2-D layout-capabable
+       PangoLayout.
+       
+       * libpango/fonts.c (pango_font_{get_coverage,find_shaper}): Allow
+       NULL language tag.
+
+       * libpango/modules.c (_pango_find_map): Fix for allowing
+       NULL language tag.
+
+Wed Mar  8 13:34:57 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pango-layout.[ch]: First draft of highlevel
+       driver. It currently only handles a paragraph as a list
+       of lines, but it is probably necessary to make it handle
+       2D layout for a paragraph as well
+
+       * examples/viewer.c: Move over to new layout driver
+       (much of the code moved into pango-layout.c)
+
+       * libpango/glyphs.c libpango/pango-glyphs.h: Fixes to get_extents(),
+       add pango_glyph_string_get_logical_widths.
+
+       * libpango/pango-itemize.c: Handle 0-length text properly.
+
+       * libpango/pangox.c: When loading particular sized fonts,
+       use the original XLFD, since XFree86 doesn't handle wildcards
+       in aliases properly.
+
+       * libpango/pangox.[ch] (pango_x_render_layout_line): Add function
+       to render an entire PangoLayoutLine.
+
+       * libpango/reorder-items.c: Add a note to the effect
+       that pango_reorder_items() is basically replaced by a
+       similar function in PangoLayout.
+
+Wed Mar  8 10:58:56 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/arconv.c (shapecount): Fix from Karl
+       Koehler to joining behavior.
+
+       * modules/Makefile.am modules/arabic/*: Added arabic
+       shaper from Karl Koehler <koehler@or.uni-bonn.de>
+
+       * modules/basic/tables-{small,big}.i: Remove arabic
+       from the ranges that the basic shaper marks as "exact".
+
+       * examples/HELLO.utf8: Partially alphabetize, add arabic.
+
+Mon Mar  6 21:03:28 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pango-layout.[ch]: Started work on highlevel layout driver.
+
+Mon Mar  6 20:55:32 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/mapping.c example/viewer.c: 
+       * modules/hangul/hangul.c modules/basic/basic.c modules/tamil/tamil.c:
+       
+       Convert log_clusters[] use from char offsets to byte offset - should
+       make it easier to have all interface deal with stuff in byte offsets.
+
+       * libpango/mapping.c libpango/pango-glyph.h: Rename x_to_cp and cp_to_x
+       to make them "member functions" of glyph_string.
+       
+       * libpango/pango-types.h: Add a rectangle type for use in storing
+       glyph/glyph-string extents, plus macros for extracting ascent/descent.
+       
+       * libpango/fonts.c libpango/pango-font.h libpango/pangox.c: Virtualize
+       glyph extents function into the font.
+
+       * libpango/pangox.c modules/*/*.c examples/viewer.c: Convert over to
+       new rationalized unit system - everything in 1000ths of a point
+       or 1000ths of a glyph unit.
+
+       * libpango/pango-glyph.h libpango/glyphstring.c: Add function to get
+       extents of a glyph string. (We may want to fastpath the width in
+       the future, since getting the width seems to be a very common 
+       and time-critical operation)
+
+Mon Feb 28 19:46:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/fonts.c libpango/pango-fonts.h: Add functions
+       to convert font descriptions to and from human-readable
+       strings.
+
+       * examples/viewer.c: Use functions from libpango instead
+       of rolling our own font-description conversion functions.
+
+Fri Feb 25 15:04:21 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/{fonts.c,pango-font.h,pango-context.[ch],pangox.c,
+       pango-attributes.c,examples/viewer.c: Add size to the 
+       font description structure instead of continually passing
+       it around as an extra argument.
+
+       * libpango/pangox.c: Take screen resolution into account when
+       choosing fonts, instead of assumming point == pixel.
+
+Fri Feb 25 12:32:01 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in examples/Makefile.am: If GTK+ test fails,
+       just skip the example program.
+
+       * pango-config.in pango.spec.in: Add a simple pango-config
+       script to the build. (pango-config --libs pangox really
+       should add the X libraries, but we'll omit that for the
+       moment.)
+
+Sat Feb 19 18:51:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pangox.c (pango_x_make_matching_xlfd): Fix problem
+         where charsets specified in alias files where being ignored
+         and treated as wildcards.
+
+Sat Feb 19 17:46:49 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * README: Fix Dov's name.
+
+Wed Feb 16 19:55:05 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Release 0.7
+
+       * examples/Makefile.am (aliasdir): Install example
+         pangox_aliases file.
+
+       * examples/Makefile.am (bin_PROGRAMS): Install 
+         pango-viewer.
+
+       * docs/tmpl/*: Updated templates.
+
+Wed Feb 16 16:39:46 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pango-coverage.c (pango_coverage_get): Make refcounted.
+
+       * libpango/modules.c (struct _PangoEnginePair): Since we don't
+         currently unload engines, cache loaded engines. (Not really
+         quite satisfactory, but should work OK)
+
+       * libpango/pango-context.c (pango_context_get_font_description):
+         Added a global font description.
+
+       * libpango/modules.c (_pango_find_map): Allow NULL
+         language tags.
+
+       * libpango/pango-context.c (pango_itemize) examples/viewer.c:
+         Switch itemize over to take a PangoAttrList.
+
+       * examples/viewer.c: Conform to changes in itemization interface
+
+       * libpango/font.[ch]: Add a compare function for FontDescription
+
+       * libpango/pango-attributes.[ch]: Change the iteration iterface
+         to be more convenient.
+
+       * libpango/pango-context.[ch]: Add the ability to set a default font.
+
+       * libpango/pango-context.[ch]: Take the font for itemization from
+         the attributes on the text.
+
+        * libpango/pangox.c: Cache currently loaded fonts, and cache
+         coverages.
+
+Tue Feb 15 02:35:56 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/**: Add documentation for attributes.
+
+       * Makefile.am libpango/pango-attributes.[ch]: Finish initial 
+         implementation of attributes APIs.
+
+Mon Feb 14 22:04:38 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pango-attributes.[ch]: Start of attribute lists. 
+
+Fri Feb 11 16:04:50 2000  Owen Taylor  <otaylor@redhat.com>
+
+        * libpango/Makefile.am: make dist fixups.
+       
+        * Makefile.am pango.spec.in: Add a spec file
+       
+       * examples/HELLO.utf8: Change Maltese to a different
+         phrase to include some unique Maltese characters.
+         (Suggestion from Steven R. Loomis)
+
+       * libpango/Makefile.am modules/Makefile.am libpango/modules.c:
+         Move pango.modules file to /var
+
+Thu Feb 10 23:45:49 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/**: Added recent API changes.
+       * libpango/pango-context.c: Doc comment fixes
+
+       * configure.in: Add in directories from unicode-config
+       when running AC_CHECK_LIB on libunicode.
+
+Thu Feb 10 23:45:27 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Up version to match 0.6 release that
+       was made yesterday.
+
+       * examples/viewer.c (main): Look for fixed if sans
+       isn't found as an initial font.
+
+       * modules/Makefile.am: Add an install rule to
+       run pango-querymodules.
+
+       * modules/*/Makefile.am (module_LTLIBRARIES): Set up
+       appropriate install rules.
+
+       * libpango/Makefile.am: Break the X code out into a
+       separate library.
+
+Thu Feb 10 20:19:39 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer.c: Fix some runtime and compile-time warnings.
+
+       * modules/hangul/hangul.c (hangul_engine_shape): Shape the
+         string with the unknown glyph rather than giving a warning
+         when the font doesn't have any of the necesary charsets.
+
+Thu Feb 10 19:57:27 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer.c: Add style selector, rewrite family
+         selector to use list_families().
+
+       * libpango/pango-context.[ch] libpango/pango-font.h libpango/pangox.c
+         libpango/fonts.c: Add calls to list families, modify list_fonts()
+         call to take an optional "family" parameter for the purpose of
+         listing the fonts within a family. 
+
+Wed Feb  9 14:04:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * TODO: updates.
+
+       * docs/*: Added some docs on font handling, both general
+       and for X.
+
+Tue Feb  8 15:05:17 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pangox.c: Moved the primary size and charset matching
+       inside of Pango instead of on the font server. This allows us
+       to do better matching, and only scale scaleable fonts, and not
+       scale bitmaps. Also, match size and charset simultaneously,
+       so that we can handle the cases where all sizes are not available
+       in all charsets better.
+
+Mon Feb  7 20:27:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pangox.c (pango_x_names_for_size): Start at reworking
+       code to do size and charset lookups simultaneously. twill compile
+       once I get home.
+
+Mon Feb  7 16:49:32 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer.c (make_families_menu): Switch the option
+       menu for a combo box.
+
+       * examples/pangox_aliases: Add a demo alias file.
+
+       * libpango/pangox.c: Add a font-alias mechanism allowing.
+
+       * examples/viewer.c (make_font_selector): Added a spin-button for
+       size.
+
+Wed Feb  2 20:49:21 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pangox.c (pango_x_get_unknown_glyph): Add a call to get
+       a glyph for unknown an unknown char.
+
+       * modules/basic/basic.c: use pango_x_get_unknown_glyph.
+
+       * libpango/utils.[ch] (_pango_guchar4_to_utf8): Added util function
+       for coverting wide chars to utf8.
+
+       * libpango/pangox.c (pango_x_font_get_coverage pango_x_font_get_shaper):
+       Initial implementations.
+
+Wed Feb  2 11:12:12 2000  Owen Taylor  <otaylor@redhat.com>
+
+        * libpango/pango-types.h: Conditionally define G_N_ELEMENTS() when
+       using glib-1.3.
+       
+       * modules/basic/basic.c modules/hangul/hangul.c modules/tamil/tamil.c:
+       Replace MEMBERS() with G_N_ELEMENTS().
+
+        * libpango/pango-engine.h: Added a get_coverage() function
+       to the PangoEngineShape vtable.
+        
+       * modules/basic/basic.c modules/hangul/hangul.c modules/tamil/tamil.c:
+       Added get_coverage() functions. The basic.c one is incredibly 
+       inefficient (but caching may make that matter that much).
+       The Hangul one needs checking.
+
+Wed Feb  2 00:07:13 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pango-*.h: The great header file reorganization.
+       Split up roughtly by objects.
+
+       * libpango/pango-font.h libpango/fonts.h: Add generic
+       font-loading and listing interfaces.
+
+       * libpango/pangox.c: Implement font-listing/loading interfaces
+       for X.
+
+       * libpango/pango-context.[ch]: Flesh out context structure.
+       Add appropriate accesors, font loading-methods, etc.
+
+       * libpango/pango-coverage.[ch]: Coverage map objects.
+
+       * examples/viewer.c: First stab at adding font-selection. Majorly
+       deficient for the moment until we add font lists and fallbacks
+       based on coverage maps.
+
+Thu Jan 27 16:50:51 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/**: Updates to match recent API changes.
+
+Mon Jan 17 22:03:24 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/hangul.c modules/tamil/tamil.c:
+         Updated to use new X font mechanism.
+
+       * libpango/pangox.[ch]: Misc bugfixes, no longer segfaults.
+
+Mon Jan 17 18:29:39 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pangox.[ch] modules/basic/basic.c: back away from
+         the strict charset model to having subfonts arbitrarily indexed. The
+         charset-index model didn't allow proper fallbacks.
+
+         Add a function pango_x_list_subfonts() function that lists
+         subfonts in the proper order for a given list of charsets.
+
+         (segfaults currently, will fix pronto)
+
+Sat Jan 15 03:17:35 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c pango/mapping.c pango/pangox.c
+         modules/basic.c examples/viewer.c:
+
+         Switch GlyphStrings to have a single array of
+         PangoGlyphInfo instead of multiple arrays. Rename
+         PangoGlyphIndex to PangoGlyph.
+
+Sat Jan 15 01:06:45 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * libpango/pangox.c libpango/pangox.h libpango/fonts.c
+         libpango/glyphstring.c modules/basic/basic.c:
+
+         Eliminate PangoCFont; For X, encode charset into upper
+         16 bits of 32 bit glyph IDs. Revise X core <=> module
+         interfaces to support this change.
+
+         Remove support for X_XLFD_FONT_RANGES, which has been
+         disavowed by its proponents, in favor of checking metrics
+         to figure out if the relevant characters are there.
+
+         Rework operation of basic module to be faster and simple.
+
+       * modules/Makefile.am: temporarily comment out Tamil and
+         Hangul modules until I finish mucking with the
+         X font interfaces.
+
+Fri Jan 14 12:08:43 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/HELLO.utf8: Add Pango properly spelled.
+
+       * **/Makefile.am: make dist fixes.
+
+Thu Jan 13 17:49:45 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * TODO: Updated.
+
+Thu Jan 13 16:57:22 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer.c: reindented.
+       * README: updated
+
+Wed Jan 12 16:49:03 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * Huge rename from GScript to Pango.
+
+       * modules/tamil/* examples/muru.utf fonts/tscakaram.pcf:
+
+       Tamil module from Sivaraj Doddannan <sivaraj@intelligroup.com> 
+
+Mon Aug  2 18:32:59 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Check for libunicode.
+
+       * examples/viewer.c libgscript/break.c
+         libgscript/itemize.c modules/basic/basic.c:
+
+         Use libunicode functions for conversion.
+
+       * modules/basic/basic.c: Add support for
+         simple accent composition; fix bidi
+         swapping to correctly swap clusters
+         as a unit.
+
+1999-07-26    <otaylor@localhost.localdomain>
+
+       * libgscript/mapping.c (g_script_cp_to_x): Fix
+       buggy algorithm.
+
+1999-07-31  Changwoo Ryu  <cwryu@adam.kaist.ac.kr>
+
+       * modules/hangul/Makefile.am (EXTRA_DIST): Added tables-*.i
+       files.
+
+1999-07-29  Raja R Harinath  <harinath@cs.umn.edu>
+
+       * modules/hangul/Makefile.am (INCLUDES): Use
+       -I$(top_srcdir)/libgscript.
+
+1999-07-30  Changwoo Ryu  <cwryu@adam.kaist.ac.kr>
+
+       * modules/hangul/*, Makefile.am, configure.in: Added the Hangul
+       shaping module.
+
+Wed Jul 28 14:45:00 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * Released version 0.4
+
+Wed Jul 28 14:43:41 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * libgscript/reorder-items.c: Return NULL correctly.
+
+       * libgscript/mapping.c:
+          Fixed buggy algorithm for cp to x.
+          Fixed reversed interpolation for x to cp.
+          
+Wed Jul 28 14:42:40 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * libgscript/mapping.c: Fix bugs 
+
+Thu Jul 22 09:36:08 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * Released version 0.3
+
+Wed Jul 21 18:46:14 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * libgscript/gscriptx.c (g_script_x_extents): Fix
+       same off-by-one bug here too...
+
+Wed Jul 21 18:44:55 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * libgscript/gscriptx.c (g_script_x_glyph_extents): Fix
+       an off-by-one error in computing indexes into the
+       per-char information.
+
+Tue Jul 20 20:09:09 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/engines.sgml: First pass at documenting
+        engine interfaces.
+
+Tue Jul 20 16:10:48 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * **: Documentation improvements.
+
+Tue Jul 20 15:05:45 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/{basic.c,tables-{big,small}.i}:
+        Rewrote basic module to support subset fonts meaningfully.
+        This meant revising the algorithm used to look
+        up a font for each character independently.
+        Which required aggresive caching here and in the
+        font code to give half-way decent performance.
+
+        Added support for ISO-10646-1 fonts.
+
+       * libgscript/fonts.c (g_script_font_[get/set]_data): Add the
+         ability to add user data to a font.
+
+       * libgscript/gscriptx.[ch]: Add functions to allow:
+       - Querying all XLFD's matching a set of character
+         sets for a font.
+       - Loading a component font with a particular XLFD.
+       - Finding the range of present characters for a given XLFD.
+
+         Also added tons of caching.
+
+Wed Jul 14 19:11:41 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * libgscript/gscriptx.c (g_script_x_glyph_extents):
+       Fixed min/max confusion.
+
+Mon Jul 12 17:14:53 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/TEXT/glossary (CFont): Expanded.
+
+       * libgscript/fonts.c (g_script_cfont_unref): Fixed
+       leak. (Pointed out by Raph)
+
+       * libgscript/gscriptx.c: Handle the case where
+       fontstruct->per_char == NULL.
+
+Sun Jul 11 23:44:42 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * Made version 0.2
+
+       * **/Makefile.am: Fixes for srcdir != builddir
+
+Sun Jul 11 23:41:19 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/glyphs.sgml: SGML fix.
+
+Sun Jul 11 22:53:11 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * libgscript/mapping.c: Implemented g_script_cp_to_x()
+       and g_script_x_to_cp().
+
+       * examples/viewer.c: Added clicking on a character to
+       identify it as a test of the above.
+
+       * gscript/gscript.h gscript/gglyphstring.c modules/basic/basic.c:
+       Add another field into the GGlyphString which holds
+       a mapping from glyphs to logical clusters.
+
+       * libgscript/gscript.h (struct _GScriptLangRange):
+       Make it start-length like everything else, not
+       start-end.
+
+Sun Jul 11 00:18:56 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/gscript-x.sgml: Fix sgml error.
+
+Sat Jul 10 23:40:40 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic.c: Added ability to use
+       multibyte character sets. (Right now, they have
+       to be converted by iconv into EUC encoding, but
+       that can easily be extended).
+
+       Added simply CJK support. This really bloats and
+       slows down the module because the range-based
+       encoding we use to map characters onto character-sets
+       wasn't designed for CJK-style charsets. But it's
+       better than nothing for now.
+       
+       * libgscript/reorder-items.c (reorder_items_recurse): Fix
+       bug with variable initialization.
+
+       * examples/viewer.c (draw): Compute line increments.
+
+       * libgscript/gscriptx.c (g_script_x_[glyph]_extents): Added
+       logical_ascent/descent parameters.
+
+       * examples/viewer.c: Commented
+
+Sat Jul 10 04:35:10 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in Makefile.am: automake'd and libtoolized.
+       
+Sat Jul 10 00:00:00 1999  Owen Taylor  <otaylor@redhat.com>
+
+       * It renders! Start a ChangeLog
+
diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10
new file mode 100755 (executable)
index 0000000..4f18451
--- /dev/null
@@ -0,0 +1,1274 @@
+2005-08-15  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.10.0 ===
+
+       * configure.in: Version 1.10.0
+
+       * NEWS: Updated.
+
+2005-08-15  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/mini-fribidi/fribidi_tab_char_type_2.i: Updated to
+       that of FriBidi 0.10.5 which corresponds to Unicode 4.1.
+
+       * pango/mini-fribidi/README: Added note to reflect above change.
+
+       * pango/mini-fribidi/fribidi_tables.i: Removed.  Not needed
+       since 2002.
+
+2005-08-15  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-script.c (pango_script_get_sample_language): 
+       Glagolitic shouldn't have Coptic as a sample language; it was used
+       to write Old Church Slavonic. Tifinagh shouldn't have Berber
+       as a sample language, since it isn't the *primary* script used
+       to write Berber.
+
+2005-08-15  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.c (pango_fc_font_create_metrics_for_context) 
+       pango/pangofc-private.h  pango/pangocairo-fcfcont.c: Cut out the meat of
+       pango_fc_font_get_metrics_for_context() and export it (privately),
+       so that PangoCairoFcFont can create a variant that sets the font
+       options on the context it creates. (#311522)
+
+2005-08-15  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_get_extents): 
+       Fix unconditional access to logical_rect. (#312691,
+       Hans Breuer)
+
+2005-08-15  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango.def: Add pango_item_get_type and
+       pango_layout_line_get_type. Thanks to Vittorio Palmisano for
+       noticing.
+
+2005-08-15  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/opentype/ftglue.h: Replace perror with perror_.
+       Remove FT_BEGIN_STMNT and FT_END_STMNT. (#313477)
+
+2005-08-14  Behdad Esfahbod  <pango@behdad.org>
+
+       * examples/HELLO.utf8: Remove some characters at the beginning
+       of the file and add a line break.
+
+2005-08-09  Keith Packard  <keithp@keithp.com>
+
+       reviewed by: otaylor
+
+       * examples/cairoview.c: (update), (expose), (main):
+       Switch to Xlib regions as pixman is destined to disappear.
+
+2005-08-08  Roozbeh Pournader  <roozbeh@farsiweb.info>
+
+       * docs/tmpl/scripts.sgml, modules/arabic/arabic-ot.c,
+       pango/pango-script.c, pango/pango-script.h,
+       pango/pango-script-table.h, tools/gen-script-table.pl: Updated to
+       Unicode 4.1, adding new scripts and Arabic joining data. (#312884)
+
+2005-08-05  Tor Lillqvist  <tml@novell.com>
+
+       * pango-zip.sh.in: Add pangocairo files. Get the DLLs from "bin"
+       unconditionally, that's where libtool installs them since a long
+       time.
+
+       * pango/Makefile.am (install-def-files, uninstall-def-files):
+       Install/uninstall also pangocairo .def and .lib files.
+
+2005-07-30  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : updated
+
+       * pango/pangocairo-win32font.c(...get_metrics) : dont use ascent
+       where descent is meant. Fixes size of edit boxes for gtk+-2.7
+
+2005-07-30  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Use egrep for khmer, like the rest, to
+       fix --with-included-modules. (#311930, Sebastien Bacher)
+
+2005-07-29  J. Ali Harlow  <ali@juiblex.co.uk>
+
+       * pango/Makefile.am: Look for pango.def, pangoft2.def and
+       pangowin32.def files in the source directory. Fixes #311971.
+
+2005-07-26  Manish Singh  <yosh@gimp.org>
+
+       * pango/pango-utils.c (pango_is_zero_width): put parens around bitwise
+       &, to appease gcc.
+
+2005-07-26  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.9.1 ===
+
+       * configure.in: Version 1.9.1
+
+       * NEWS: Updated
+
+2005-07-26    Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c, pango/opentype/ftxgpos.c: Skip lookups
+       with lookup index out of range. (Patch from Behdad Esfahbod, #171170)
+
+2005-07-26  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fontmap.c (pango_cairo_context_get_font_options):
+       Fix mixed code and declarations (#311626, Kazuki IWAMOTO)
+
+       * pango/pangocairo-win32font.c (pango_cairo_win32_font_install):
+       Fix typo (#311627, Kazuki IWAMOTO)
+
+2005-07-26  Owen Taylor  <otaylor@redhat.com>
+
+       Fixes for signed/unsigned in PangoAttrIterator ((#166700,
+       Morten Welinder)
+
+       * pango/pango-attributes.c (pango_attr_iterator_range): 
+       Clamp results to G_MAXINT to avoid negative numbers from
+       signed/unsigned conversions. 
+
+       * pango/pango-attributes.c: Make PangoAttrIterator 
+       start_index/end_index unsigned to match PangoAttribute.
+       Change various local variables to match.
+       
+       * pango/ellipsize.c (advance_iterator_to)
+       pango/pango-attributes.c (pango_attr_iterator_range)
+       pango/pango-glyph-item.c (pango_glyph_item_apply_attrs)
+       pango/pango-layout.c (pango_layout_line_get_empty_extents): 
+       Always check the return value from pango_attr_iterator()
+       to deal with potential infinite loops when trying to
+       advance to position G_MAXINT.
+       
+       * pango/pango-layout.c (pango_layout_set_text): Handle
+       the case where the text passed in is longer than
+       than G_MAXINT and length < 0.
+
+       * pango/pango-attributes.c (pango_attr_list_splice): Be 
+       careful about integer overflow - clamp addition.
+       (#163246, Morten Welinder)
+
+2005-07-26  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c (oryaCharClasses):
+       Change U+0B30 from _rv to _rb. Oriya doesn't have a vattu
+       form of ra. (#151393, Gautam Sengupta, fix from
+       Gora Mohanty)
+
+       * modules/indic/indic-ot-class-tables.c (oryaCharClasses):
+       Change U+B02 from _ma to _mp. Anusvara appears after not
+       above in Oriya. (#311575, Gora Mohanty)
+
+       * modules/indic/indic-ot-class-tables.c (oryaCharClasses):
+       Classify unicode standard additions U+0B35 (va), 
+       U+0B71 (wa) as _ct. (Also #311575)
+
+2005-07-26  Behdad Esfahbod  <pango@behdad.org>
+
+       * examples/cairoview.c, examples/pangoft2topgm.c,
+       examples/renderdemo.c, examples/renderdemo.h: Fixed a couple of leaks
+       and freed memory after use.
+
+2005-07-25  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_install): Set
+       font options as well.
+
+       * pango/pango-layout.c (line_set_resolved_dir): Always set 
+       line->resolved_dir to one of LTR or RTL. (#171439, Reported
+       by Chris Blizzard)
+
+2005-07-25  Tor Lillqvist  <tml@novell.com>
+
+       * configure.in
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new): Fix
+       a few typos that prevented build on Win32.
+
+       * pango/pango.def: Add pango_is_zero_width.
+
+2005-07-23  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/pango-utils.c, pango/pango-utils.h (pango_is_zero_width): New
+       function added.
+
+       * modules/basic/basic-common.h, modules/basic/basic-fc.c,
+       modules/basic/basic-win32.c, modules/basic/basic-x.c,
+       modules/hangul/hangul-fc.c, modules/arabic/arabic-fc.c,
+       modules/indic/indic-fc.c, modules/indic/indic-ot.h,
+       modules/syriac/syriac-fc.c:  Use the new pango_is_zero_width function.
+       (#306639, Behnam Esfahbod)
+
+2005-07-22  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (get_context_matrix): Handle context == NULL.
+       (Reported by Behdad Esfahbod)
+
+2005-07-22  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am configure.in: Use -export-symbols-regex
+       to control symbol exports, including not exporting the symbols
+       from opentype/.
+
+       * modules/*/Makefile.am: Control symbol exports here as well,
+       simplify using AC_SUBST() of MODULE_LIBTOOL_OPTIONS from configure.in.
+
+       * pango/pangox-fontmap.c (engine_shape_covers): Cut-and-paste
+       engine_shape_covers to avoid using a symbol from libpango.
+
+       * pango/pango-utils.c: Make accidentally exported pango_aliases_ht
+       static.
+
+2005-07-22  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c: Add some missing statics on functions
+       added in the recent layout iter patch.
+
+2005-07-22  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftglue.c (ftglue_realloc): Remove
+       an unecessary set of block2.
+
+2005-07-22  Owen Taylor  <otaylor@redhat.com>
+       
+       Patch from David Turner. Review and testing by Behdad Esfahbod
+
+       * pango/opentype/ftglue.[ch] Makefile.am: Glue layer that provides
+       implementation of the internal functions that the opentype code
+       expects in terms of publically exported FreeType API.
+
+       * pango/opentype/ftxgdef.c pango/opentype/ftxgpos.c
+       pango/opentype/ftxgsub.c pango/opentype/ftxopen.c
+       pango/opentype/otlbuffer.c pango/opentype/pango-ot-info.c
+       pango/opentype/pango-ot-ruleset.c: Remove includes of 
+       internal headers. Small changes to work with ftglue.[ch]
+
+       * pango/opentype/fterrcompat.h: Remove: no longer needed.
+
+       * pango/opentype/ftxgpos.c: Use FT_IS_SFNT(face) rather
+       than poking at FT_MODULE_CLASS (face->driver)->module_name.
+
+       * pango/opentype/ftxopen.c (Free_FeatureList): Free
+       fl->ApplyOrder. (Found by Behdad)
+
+2005-07-21  Manish Singh  <yosh@gimp.org>
+
+       * pango/pangofc-fontmap.c (fontset_hash_key_hash, font_hash_key_hash):
+       use GPOINTER_TO_UINT() instead of bare casts to guint.
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       Based on patch from Gustavo J. A. M. Carneiro  (#305975)
+       * pango/pango-layout.[ch] (pango_layout_line_ref)
+       pango/pango-attributes.[ch] (pango_attr_list_ref): Return the
+       argument to _ref() functions.
+
+       * pango/pango-item.[ch]: Register PangoItem boxed type.
+       * pango/pango-layout.[ch]: Register PangoLayoutLine boxed type.
+       
+2005-07-22  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32.c: No need to include modules.h here any
+       longer.
+       (pango_win32_get_context): Remove unused variable.
+       (pango_win32_render_layout_line): Fix underlining. (#304692)
+       Mention in the doc comment that the DC's text alignment needs to
+       have TA_BASELINE and TA_LEFT for underlining to be correct.
+
+       * pango/pangowin32-fontmap.c: Include modules.h here instead.
+       (pango_win32_font_map_class_init): Define variable i.
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_add): Fix an
+       excess copy. (pango_fc_font_map_get_patterns): Add back
+       a call to FcPatternDestroy() that got dropped somehow.
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot.c: Minor formatting tweak to license
+       header.
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_load_font): Load a
+       fontset and return the first font to take advantage of existing
+       caching.
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c modules/indic/indic-ot.[ch]:
+       license on these ICU-derived files is X license, not LGPL.
+
+       * modules/khmer/khmer-fc.c: Add the X license text here in addition 
+       to the LGPL.
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (_pango_xft_font_new): Force on
+       metrics hinting for all Xft fonts (this fixes font
+       metrics - glyph metrics were fixed earlier).
+       (#307196, Alex Jones)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+        * README: Update information about the location of Xft.
+       (#172637, Karel 'Clock' Kulhavy)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * README: Fix URL to tml's download page (#169467, 
+       Brandon Bergren)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_class_init)
+       Move registration of included modules to here from
+       pango/pangowin32.c (pango_win32_get_context). (#309337, Hans
+       Breuer)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c: Change the char
+       class for U+0A5C from _cn (consonant with nukta) to _ct.
+       (#309459, Sukhjinder Sidhu)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+       
+       * modules/indic/indic-ot-class-tables.c: Enable touching
+       letters for Sinhala with the ZWJ + al-lakuna combination.
+       (#302577, Harshula)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_text): Avoid calling
+       memcpy with a NULL argument. (#310021, Morten Welinder)
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       Merges of fixes from Arabic module (#308813, Emil Soleyman-Zomalan)
+
+       * modules/syriac/syriac-fc.c (syriac_engine_shape): Fix 
+       bug where cluster was getting set to 0 for non-spacing
+       marks rather than to the cluster of the base character.
+       (#149126, Behdad Esfahbod)
+
+       * modules/syriac/syriac-fc.c (syriac_engine_shape): Turn
+       on zero-width-marks setting. [Not clear that this is
+       needed here, since it is mostly set in the Arabic engine
+       to handle legacy fonts, but it shouldn't hurt]
+
+2005-07-21  Owen Taylor  <otaylor@redhat.com>
+
+       Fix up places where there is missing or incomplete
+       Copyright and License information (Reported by William N. Ray,
+       #310072)
+
+       * pango/opentype/fterrcompat.h: Mark as FreeType/GPL licensed.
+
+       * pango/opentype/FT-license.txt: Make this the dual-licensing
+       description that covers the FreeType code (FreeType's 
+       LICENSE.TXT) rather than the FTL.
+       
+       * pango/opentype/FTL.TXT: Move the FTL (referenced from 
+       FT-license.txt) to here.
+       
+       * modules/basic/basic-common.h modules/hebrew/hebrew-shaper.h
+       modules/thai/thai-charprop.c modules/thai/thai-shaper.h
+       tools/gen-script-for-lang.c tests/testcolor.c: 
+       Add LGPL header and copyright information.
+
+       * modules/indic/indic-ot.[ch] modules/indic/indic-ot-class-tables.c
+       modules/thai/thai-ot.[ch]: Add LGPL header.
+
+       * modules/thai/thai-shaper.c modules/thai/thai-charprop.h: 
+       Minor fixes to copyright information.
+
+       * modules/arabic/arabic-ot.c: Add Freetype license boilerplate.
+
+2005-07-21  Matthias Clasen  <mclasen@redhat.com>
+
+       * configure.in: Check for a new enough cairo.
+
+2005-07-19  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-fcfontmap.[ch]: Rework handling of context-specific
+       options: drop get_render_key() and add a opaque "context
+       key" (get_context_key() and friends). Also add a function to get
+       the resolution.
+
+       * pango/pango-fcfontmap.c pango/pangofc-font.h:
+        - Move the 'lang' into the fontset key lookup and get rid of the
+          funky list-of-hash-tables
+        - Make lookups of fontsets and fonts dependent on the context key
+          for the context.
+        - Simplify the pattern/fontset caching to have one finite-size
+          cache rather than an infinite first-level and a finite-size
+          second level.
+
+       * pango/pangocairo.h pango/pangocairo-private.h
+       pango/pangocairo-fontmap.c: Add
+       pango_cairo_context_get/set_resolution(),
+       pango_cairo_context_set/get_font_options to allow controlling the
+       resolution and font rendering options for a specific PangoContext.
+                       
+       * pango/pangocairo-fcfont.c pango/pangocairo-fcfontmap
+       pango/pangocairo-win32font.c: Implement resolution and font
+       options handling adapt to related Cairo changes.
+
+       * docs/pango-sections.txt docs/Makefile.am pango/pangowin32.c:
+       Doc updates and build fixes.
+
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern): Create
+       patterns with FC_SIZE as well as FC_PIXEL_SIZE to work around
+       a libgnomeprint bug. (#309477)
+
+2005-07-09  Tor Lillqvist  <tml@novell.com>
+
+       * configure.in: Call AC_CANONICAL_HOST before looking at $host.
+       Check for windres on Win32.
+
+       * pango/Makefile.am: Don't use the scripts in GLib's build/win32
+       to compile the rc files into resource object files. (This means we
+       lose the build number increment magic, but I doubt it was that
+       useful anyway.) Instead use windres directly. To pass a normal .o
+       file produced by windres through libtool, which wants .lo files,
+       pass it directly to the linker using a -Wl option.
+
+       Libtool installs/uninstalls the import libraries, no need to do it
+       ourselves. Do install/uninstall the .def files, though.
+
+       * pango/pango.rc.in
+       * pango/pangoft2.rc.in
+       * pango/pangowin32.rc.in: Correspondingly, use 0 instead of
+       BUILDNUMBER.
+
+2005-06-27  Tor Lillqvist  <tml@novell.com>
+
+       * modules/khmer/Makefile.am (INCLUDES): Drop superfluous trailing
+       slash in -I path.
+
+2005-06-24  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_line_get_extents): Don't
+       key off zero-height to know whether to use the "empty extents" ...
+       this can cause infinite recursion, instead just check 
+       !line->runs. (Part of #306415, Thomas Fitzsimmons)
+
+2005-06-24  Owen Taylor  <otaylor@redhat.com>
+       
+       * docs/pango_markup.sgml (linkend): Fix a stray newline
+       (#308887, Ryan Lortie)
+
+2005-06-22  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/khmer/khmer-fc.c (khmer_engine_shape): Add back
+       accidentally dropped line (Pointed out by Behdad Esfahbod)
+
+2005-06-21  Behdad Esfahbod  <pango@behdad.org>
+
+       * modules/khmer/khmer-fc.c: Fix C89 var after code issues.
+
+       * modules/khmer/.cvsignore: Copied from other modules.
+
+2005-06-21  Owen Taylor  <otaylor@redhat.com>
+
+       Fix up the operation of PangoLayoutIter, especially for Bidi
+       (#89541, based on a patch from Amit Aronovitch)
+
+       * pango/pango-layout.c: Many changes to make iteration 
+       consistently in visual order.
+
+       * pango/pango-layout.c (pango_layout_iter_next_char): Iterate
+       through each character in the layout exactly once. (Including
+       a hack to get two iterator positions for \r\n)
+
+       * pango/pango-layout.c (pango_layout_iter_next_cluster): Only
+       iterate through real clusters: that is, positions in the 
+       layout that have glyphs.
+
+       * pango/pango-layout.c (pango_layout_iter_get_char_extents):
+       Fix to give exactly the same results as 
+       pango_glyph_string_index_to_x: the previous positions didn't
+       completely occupy the entire line.
+
+       * pango/pango-layout.c (pango_layout_iter_next_line): Remove
+       unneeded updating of iter->index and an associated FIXME.
+       
+       * tests/testiter.c tests/Makefile.am: Add a (somewhat reworked) 
+       test from Amit for the operation of PangoLayoutIter.
+
+2005-06-21  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-render.c (get_renderer): Go back to 
+       honoring alpha in the XftColor passed in; it was a 1.6 => 1.8
+       regression. (#169622, based on a patch from Mikael Magnusson)
+
+2005-06-21  Owen Taylor  <otaylor@redhat.com>
+       * modules/khmer configure.in modules/Makefile.am 
+       modules/makefile.msc: Add a Khmer module by
+       Jens Herden and Javier Sola. (#125605)
+
+2005-06-20  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.9.0 ===
+
+       * NEWS: Update for 1.9.0
+       
+       * README: Update
+
+2005-06-18  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/break.c (pango_find_paragraph_boundary): Optimization.
+       Do not g_utf8_get_char at all. (#305323, Paolo Borelli)
+
+2005-06-16  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_unlock_face): Remove
+       excess return. (#307741, Damien Carbery)
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c (guruCharClasses): Mark
+       U+A33, U+A36 as _cn, not _ct, since they are combinations
+       of other characters with nutka. (#304174, Sukhjinder Sidhu)
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+       
+       Misc fixes from Stepan Kasal, #169928
+       
+       * pangoxft.pc.in: Add requirement on pangoft2
+
+       * pangoxft-uninstalled.pc.in: Fix cut-and-paste
+       errors in Name/Description when copying from 
+       pangox-uninstalled.
+
+       * configure.in: Don't call AC_SUBST() unnecessary
+       for XFT_CFLAGS/LIBS.
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c (pango_parse_style): Fix some
+       missing case variants in the switch statement.
+       (#169852, Morten Welinder)
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+       
+       * pango/pango-script-table.h (struct): Hand edit
+       to fix a bug in the 4.0.0 data tables.
+       (#173096, Sukhjinder Sidhu)
+
+       * tools/gen-script-table.pl: Some updates to handle
+       newer formats (not actually regenerating tables at the
+       moment, since the changes are large)
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       #307433, Sebastien Bacher
+
+       * Makefile.am (EXTRA_DIST): Name the Change.pre-*
+       correctly.
+
+       * pango/Makefile.am (libpango_1_0_la_SOURCES): Add
+       pango-color-table.h.
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c: Fix docs, handle a lone '~'
+       (#169851, Morten Welinder)
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Force off gtk-doc in absence of Cairo.
+       (#305652, Amit Aronovitch)
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/pango-ot-info.c (pango_ot_info_finalize)
+       pango/opentype/pango-ot-ruleset.c (pango_ot_ruleset_finalize): 
+       Chain up from finalize. (#307547, Paolo Borelli)
+
+       * pango/opentype/pango-ot-info.c (pango_ot_info_finalizer):
+       make accidentally public function static.
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/ellipsize.c (shape_ellipsis): Fix FALSE/TRUE
+       typo that was causing crashes with fonts not containing
+       ".". (#304039, Sebastien Bacher) 
+
+       * pango/pango-context.c (itemize_state_fill_shaper): Allow
+       font to be NULL.
+
+2005-06-14  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (itemize_state_finish): Fix 
+       potential leak of state->base_font. (#168930, Ben Maurer,
+       Aivars Kalvans)
+       
+2005-06-10  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fcfont.c: Add a (hopefully temporary) cache
+       in front of getting metrics from Cairo.
+
+       * pango/pangocairo-fcfont.c: Remove some cast checks in critical
+       code paths.
+
+2005-05-17  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.[ch]: Add a new context_substitute() virtual
+       function that replaces default_substitute() and adds a 
+       PangoContext argument.
+
+       * pango/pangocairo.h pango/pangocairo-fontmap.c docs/pango-sections.txt:  
+       Add pango_cairo_context_set/get_hinting() to control
+       hinting on individual contexts.
+
+       * pango/pangocairo-fcfont.c pango/pangocairo-fcfontmap.c:
+       Implement hinting control for the for the fontconfig/cairo
+       backend.
+
+Tue May 17 07:21:53 2005  Manish Singh  <yosh@gimp.org>
+
+       * examples/cairoview.c: update for new cairo_xlib_surface API.
+
+2005-05-16  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_glyph_extents):
+       pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs): 
+       Handle glyph == 0.
+
+       * modules/indic/indic-ot.h modules/basic/basic-common.h:
+       Treat LINE SEPARATOR as a zero-width character.
+
+2005-05-16  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/cairoview.c: Include Xlib.h explicitely before
+       include Xutil.h, since Xutil.h doesn't include Xlib.h on
+       some platforms. (#304317, Damien Carbery)
+
+Fri May 13 23:54:29 2005  Manish Singh  <yosh@gimp.org>
+
+       * examples/cairoview.c: #include Xutil.h explicitly, update
+       for renamed cairo API.
+
+2005-05-11  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-win32font.c (pango_cairo_win32_font_install):
+       Update for cairo API change.
+       (pango_cairo_win32_font_get_metrics): Fix x/y typo.
+
+2005-05-07  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/cairoview.c (update): Remove some accidentally
+       deleted code.
+
+2005-05-07  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fontmap.c pango/pangocairo-render.c
+       examples/cairosimple.c pango/pangocairo-fcfont.c
+       examples/cairoview.c: Update for Cairo API changes.
+
+2005-04-29  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_glyph_extents):
+       Get the ascent/descent from Cairo to fix bugs in metrics computation
+       with a transformation in effect.
+
+2005-05-01  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/cairoview.c: Fix for the change of cairo_clip() not to preserve
+       the path.
+
+2005-04-28  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangocairo-win32font.c (pango_cairo_win32_font_get_font_face): 
+       Correct parameters passed to MultiByteToWideChar(). Pass -1 as
+       source string length so that the target string gets
+       zero-terminated. Size of target array is in number of WCHARs, not
+       number of bytes.
+
+       Add support to pangowin32 for TrueType fonts with coverage outside
+       the BMP. Fix handling of surrogate pairs in the Uniscribe
+       shaper. (#302238)
+
+       * pango/pangowin32-private.h (PangoWin32Face): Rename the
+       unicode_table field to cmap. Keep track of its format (4 or 12).
+       (format_12_cmap): Add struct for a format 12 cmap.
+
+       * pango/pangowin32.c: Corresponding changes. Rename internal
+       functions a bit.
+       (get_format_12_cmap): New function, reads a format 12 cmap.
+       (font_get_cmap): Look for both format 12 (which is preferred) and
+       format 4 cmaps.
+       (pango_win32_font_get_glyph_index,
+       pango_win32_font_calc_coverage): Handle also format 12 cmaps.
+
+       * modules/basic/basic-win32.c: Handle surrogate pairs in wchar_t
+       strings properly.
+       (unichar_index): New function. Given a wchar_t string and an index
+       into it, calculate the index of the corresponding Unicode
+       character. Each surrogate pair in the wchar_t is just one Unicode
+       character.
+       (set_up_pango_log_clusters, itemize_shape_and_place): Use
+       unichar_index() instead of direct index into wchar_t string.
+
+Wed Apr 27 15:45:06 2005  Manish Singh  <yosh@gimp.org>
+
+       * examples/cairoview.c: Update to new Cairo API for writing out PNGs.
+
+2005-04-28  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-defs.h: Cleanups.
+
+2005-04-25  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-fc.c (render_basic): handles zero width
+       chars, patch by Young-Ho Cha. (#157565)
+
+Mon Apr 18 15:49:36 2005  Manish Singh  <yosh@gimp.org>
+
+       * examples/cairoview.c: Update to new Cairo API for setting color
+       and opacity.
+
+2005-04-12  Tor Lillqvist  <tml@novell.com>
+
+       * pango/opentype/Makefile.am: Rename LDADDS to
+       libpango_ot_la_LIBADD to actually make libpango-ot.la link with
+       it.
+
+       * pango/pangowin32.def: Rename get_scale_factor to
+       get_metrics_factor here, too. (#300222, Ivan Wong)
+
+Fri Apr  8 15:30:55 2005  Manish Singh  <yosh@gimp.org>
+
+       * examples/cairoview.c: #include <pixman.h> since the cairo headers
+       don't include it for us anymore.
+
+2005-04-08  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-font.c (_pango_cairo_font_install): Remove
+       stray return. (#173046, Damien Carbery)
+
+Thu Apr  7 22:45:32 2005  Manish Singh  <yosh@gimp.org>
+
+       * configure.in: Test for renamed cairo_ft_scaled_font_lock_face().
+
+2005-04-07  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Test for renamed
+       cairo_win32_scaled_font_select_font().
+
+       * pango/pangocairo-win32font.c: Fix various compilation errors.
+
+       * pango/pangocairo-fcfont.c pango/pangocairo-win32font.c
+       pango/pangocairo-fontmap.c: Use new matrix API.
+
+       * pango/pangocairo-fcfont.c pango/pangocairo-win32font.c 
+       pango/pangocairo-render.c: Update to new Cairo font API.
+
+       * pangpopangowin32.h pango/pangowin32-private.h pango/pangowin32.c
+       pango/pangocairo-win32font.c modules/basic/basic-win32.c: Rename
+       get_scale_factor() to get_metrics_factor() to match Cairo.
+
+2005-04-04  Hans Breuer  <hans@breuer.org>
+
+       * pango/pangocairo-win32font.c(pango_cairor_win32_font_get_metrics) :
+       variable declaration on the start of the block, not C99 everywhere.
+
+       * examples/viewer-win32.c : updated to not so recent Pango api changes
+
+       * pango/makefile.msc : pangocairo build win32 version, not freetype
+
+2005-04-01  Carl Worth  <cworth@cworth.org>
+
+       * examples/cairosimple.c: (main): Update to track removal of
+       cairo_set_target_png from cairo.
+
+2005-03-24  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/thai-fc.c (tis620_1), modules/thai/thai-shaper.c
+       (Mac_shape_table): Added more MacThai PUA glyphs that are not defined
+       in vendor data at Unicode.org, but just available in actual fonts.
+
+2005-03-20  Tor Lillqvist  <tml@novell.com>
+
+       * modules/basic/basic-win32.c (make_langid): Leave out some
+       languages that don't have any own digits.
+       (itemize_shape_and_place): Force fRTL for each item returned from
+       ScriptItemize() to the bidi embedding parity for the whole
+       run. Pango passes us a run that it correctly has analyzed should
+       be of a certain direction, but ScriptItemize() still might split
+       it into items, some of which have neutral direction. (#170931)
+       (text_is_simple): Use g_utf8_to_utf16().
+
+2005-03-18  Hans Breuer  <hans@breuer.org>
+
+       * pango/pango.def pango/pangocairo.def : updated externals
+
+       * pango/pangowin32.c(pango_win32_render_transformed) : matrix elements 
+       xy and yx are needed the other way around for XFORM
+
+2005-03-17  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new):
+       Set win32font->logfont. (How was this working at all?)
+
+2005-03-15  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/main.sgml (pango_unichar_direction): Fix
+       PANGO_DIRECTION_LTR/RTL cut-and-paste. (Tim Janik)
+
+2005-03-15  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c: Include the effect of the
+       CTM in the FC_PIXEL_SIZE we set in the FcPattern.
+       (Fixes problems with getting the wrong font when drawing
+       the same font at multiple scales. Reported by Keith
+       Packard.)
+
+       * pango/pangofc-fontmap.h pango/pangocairo-fcfontmap.c
+       pango/pangocairo-fc.h pango/pangocairo-fontfont.c: Add
+       the PangoFontDescription to create_font() ... we need it
+       to get the right pixel size to combine with the CTM.
+
+       * pango/pangofc-fontmap.c (pango_fc_fontmap_get_dpi): 
+       Extract out the logic for finding the DPI from the 
+       size-listing code.
+       (pango_fc_font_map_get_render_key): Handle mix of
+       absolute and not sizes correctly.
+
+Sat Mar  5 13:51:04 2005  Manish Singh  <yosh@gimp.org>
+
+       * pango/mini-fribidi/fribidi_types.[ch]: const correctness for
+       _pango_fribidi_prop_to_type
+
+       * tools/Makefile.am: dist gen-script-table.pl and gen-color-table.pl
+
+2005-03-04  Owen Taylor  <otaylor@redhat.com>
+
+       Reduce non-shared data (#168899, inspired by patches
+       from Tommi Komulainen and Ross Burton)
+
+       * pango/pango-color.c pango/pango-color-table.h 
+       tools/gen-color-table.pl: Redo storage of colors to
+       use offsets into a static string rather than embedded
+       strings. (Inspired by a patch from Tommi Komulainen,
+       #168899)
+
+       * pango/break.c pango/fonts.c pango/pango-color.c 
+       pango/pango-layout.c pango/pango-markup.c 
+       pango/pango-script-lang-table.h
+       pango/mini-fribidi/fribidi_types.c 
+       tools/gen-script-for-lang.c: Add const in various places
+
+       * modules/arabic/arabic-fc.c  modules/hebrew/hebrew-fc.c:
+       modules/indic/{indic-fc.c,indic-ot-class-tables.c,
+       indic-ot.h} modules/syriac/syriac-ot.c (syriac): Further
+       addition of const.
+       
+2005-03-04  Owen Taylor  <otaylor@redhat.com>
+
+       * NEWS: Updates from stable branch.
+
+2005-03-03  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot.[ch] modules/indic-ot-class-tables.c:
+       Split out handling of sinhala al-lakuna character from
+       handling of Virama in the state table to avoid implicit
+       formation of conjucts for Sinhala. (Patch from 
+       Harshula, #161981)
+
+       * modules/indic/indic-fc.c modules/indic/indic-ot.h:
+       Add a new script flag SF_PROCESS_ZWJ indicating
+       whether zero width characters should be passed to
+       gsub/gpos.
+
+       * modules/indic/indic-ot-class-tables.c: Set SF_PROCESS_ZWJ
+       for Sinhala. (#161981, Harshula)
+
+2005-03-03  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-fontmap.c (pango_font_map_load_font): Add
+       a g_return_if_fail() if desc doesn't have a family.
+       (#165866, Kees Cook)
+       
+2005-03-03  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-render.c (pango_xft_renderer_draw_glyphs):
+       Call XftCharIndex() on the right font. (#163511)
+
+2005-03-03  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxopen.c (Coverage_Index1, Coverage_Index2, 
+       Get_Class2): For all binary searches, handle the case where
+       the number of items is 0. (#162977, Nick Lamb)
+
+       * pango/opentype/ftxgdef.c (TT_GDEF_Build_ClassDefinition):
+       Handle the case where glyph_count == 0 properly. Fix a problem 
+       with cleanups on memory allocation failure.
+       (Get_New_Count, Add_Glyph_Property): Avoid reading off the
+       end of the ClassRangeRecord array.
+
+2005-03-02  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_from_string_: For
+       family names that add in numbers add a , to distinguish
+       them from family+size (#166540, debugging/testing by
+       Manish Singh)
+
+2005-03-02  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_iterator_get_attrs):
+       Fix various typos in the docs (#163244, Morten Welinder)
+
+2005-03-02  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_glyph_extents): 
+       Go back to using Xft-reported metrics for all non-transformed
+       fonts. Reporting non-integer glyph metrics for fonts
+       where people have disabled hinting in their config causes
+       various problems. (reported variously, including #167801, 
+       Adam Sampson)
+       
+2005-03-02  Owen Taylor  <otaylor@redhat.co>m
+       
+       [ ChangeLog entry for some changes accidentally committed
+         a while ago ]
+
+       Redo the handling of absolute sizes for PangoAttribute
+       to work around compatibility problems with GtkHTML which
+       was counting on the details of the implementation of
+       size attributes. (#163154)
+
+       * pango/pango-attributes.[ch] docs/tmpl/text-attributes.sgml:
+       Split PANGO_ATTR_SIZE into PANGO_ATTR_SIZE and 
+       PANGO_ATTR_ABSOLUTE_SIZE, and use that distinction
+       rather than the boolean field in PangoAttrSize to
+       distinguish between attributes created 
+       pango_attr_size_new_absolute() and
+       pango_attr_size_new()
+
+2005-03-01  Owen Taylor  <otaylor@redhat.com>
+  
+       * pango/pango-layout.c (process_item): Don't break
+       lines on LINE_SEPARATOR in single-paragraph mode.
+       (#168589, Damon Chaplin)
+
+2005-03-01  Owen Taylor  <otaylor@redhat.com>
+  
+       * pango/pangoxft-font.c: Fix a typo in the last
+       commit (Manish Singh)
+       
+2005-03-01  Owen Taylor  <otaylor@redhat.com>
+
+        * pango/pangoxft-font.c (xft_font_get_font): Delete
+        FC_SPACING value out of pattern before passing it
+        to Xft, to prevent Xft clipping characters and
+        trashing metrics. (#164879, Billy Biggs)
+
+2005-03-01  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_context_get_metrics): Use
+       the language from the context if %NULL is passed in for
+       @language. (#163472)
+       
+2005-03-01  Owen Taylor  <otaylor@redhat.com>
+
+       Build fixes from Andrew P. Lentvorski, Jr, #164655
+
+       * pango/pangoft2-render.c: Duplicate the 
+       FT_LOAD_TARGET_MONO/FT_LOAD_MONOCHROME back-compat
+       define from pangoft2.c here
+
+       * examples/Makefile.am (pango_xftview_LDADD): Add
+       X_LIBS to pango_xftview_LDADD since some old versions
+       of xft.pc didn't add -lX11.
+
+2005-03-01  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Use PKG_CHECK_MODULES not AM_PATH_GLIB_2_0
+       to avoid a problem where older verisons of AM_PATH_GLIB_2_0
+       silently ignored gmodule-no-export causing mysterious
+       build failures. (#161786)
+
+       * pango/Makefile.am (DISTCLEANFILES): Move some 
+       configure.in output files from CLEANFILES to DISTCLEANFILES.
+
+2005-03-01  Tor Lillqvist  <tml@novell.com>
+
+       * tests/cxx-test.C: Include pangowin32.h first to avoid
+       a namespace collision. (#163584)
+
+Fri Feb 25 12:14:24 2005  Manish Singh  <yosh@gimp.org>
+
+       * pango/pangofc-font.c (pango_fc_font_class_init): map get_font_map
+       to the right function.
+
+       * pango/pangox.c (pango_x_font_class_init): fill in get_font_map.
+
+2005-02-24  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-win32.h pango/pangocairo-win32font.c 
+       pango/pangocairo-win32fontmap.c pango/Makefile.am:
+       PangoCairoFontMap for win32 fonts.
+
+       * pango/pangocairo-fontmap.c: Use PangoCairoWin32FontMap
+       when available.
+
+       * pango/pangowin32.h pango/pangowin32-fontmap.h pango/pangowin32.c: 
+       Add virtual pango_win32_font_select_font()
+       to prepare a DC for use with a PangoWin32Font, and to release,
+       pango_win32_font_scale_font() to get logical unit => Pango units scale,
+       pango_win32_font_done_font() to release resources.
+
+       * pango/pangowin32-fontmap.[ch]: Add a find_font() virtual method
+       to allow subclasses that change how PangoFont lookup and
+       creation happens.
+
+       * pango/pangowin32-fontmap.c: Move initialization into 
+       pango_win32_font_map_init() to facilitate derivation.
+       
+       * pango/pangowin2.c pango/pangowin32-fontmap.c 
+       pango/pangowin32-private.h: Move PangoWin32Font/PangoWin32FontMap 
+       definitions into pangowin32-private.h to allow derivation for 
+       PangoCairoWin32Font.
+
+       * modules/basic/basic-win32.c: Use pango_win32_font_select_font()
+       and friends.
+
+       * modules/basic/basic-win32.c: Use g_utf8_to_utf16 instead
+       of g_convert for simplicity and speed.
+
+       * pango/fonts.c (pango_font_get_font_map) pango/pango-font.h
+       pango/pangofc-font.c pango/pangowin32.c pango/pango.c pango/pango.def
+       docs/pango-sections.txt: Add a virtual function to get the fontmap 
+       for a font.
+
+       * pango/pangocairo-render.c: Use pango_font_get_font_map()
+       rather than PangoFcFontMap hack.
+
+       * pango/pango-types.h: Move the declaration of PangoFontMap here
+       to avoid interactions between pango-font.h and pango-fontmap.h.
+
+       * pango/pangocairo.h: Remove accidental include 
+       of pangofc-fontmap.h.
+
+2005-02-21  Owen Taylor  <otaylor@redhat.com>
+       * pango/fonts.c (pango_font_get_glyph_extents): 
+       * pango/shape.c (pango_shape): Minor doc fixes.
+       (#167922, #167924, Billy Biggs)
+2005-02-06  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo.h pango/pangocairo-render.c docs/pango-sections.txt:
+       Rename pango_cairo_show_glyphs() to pango_cairo_show_glyph_string().
+       Add pango_cairo_{glyph_string,layout_line,layout}_path()
+
+       * docs/Makefile.am (INCLUDES): Add CAIRO_CFLAGS.
+
+2005-02-06  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc pango/*.def pango/pangocairo.def : updated to
+       build with the new Cairo dependency
+       * pango/Makefile.am : added pangocairo.def to EXTRA_DIST
+
+Thu Feb  3 19:00:17 2005  Manish Singh  <yosh@gimp.org>
+
+       * pango/pangocairo-fc.h: spell _pango_cairo_fc_get_render_key
+       correctly.
+
+       * pango/pangocairo-fcfont.c: #include cairo-ft.h
+
+Thu Feb  3 18:23:27 2005  Manish Singh  <yosh@gimp.org>
+
+       * configure.in: use CAIRO_LIBS for all libcairo checks, and disable
+       the cairo backend if we don't have Win32 nor FreeType support in
+       cairo.
+
+2005-02-03  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.c (pango_fc_font_real_get_glyph): Fix unpaired
+       lock/unlock_face().
+
+2005-02-03  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Bump to 1.9.0.
+
+       * pango/pangofc-fontmap.h: Document PangoFcFontMap.create_font()
+
+2005-02-03  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/cairosimple.c: Open the file with mode "wb", include
+       cairo-png.h. 
+
+       * examples/xftview.c examples/cairoview.c: Set WM_NORMAL_HINTS to avoid 
+       triggering a metacity bug.
+
+       * examples/cairoview.c: Include cairo-xlib.h.
+
+       * configure.in: Add checks for the Win32 Cairo backend. (not committing
+       the code yet).
+
+       * examples/Makefile.am pango/Makefile.am: add CAIRO_CFLAGS.
+
+       * pango/pangocairo-fc.h pango/pangocairo-fcfont.c
+       pango/pangocairo-fcfontmap.c pango/pangofc-fontmap.[ch]: Rework
+       Cairo/Fontconfig backend to use the current Cairo API. Make
+       some PangoFcFontMap changes to enable that.
+
+       * pango/pango/pangocairo-private.h pango/pangocairo-render.c:
+       Update for cairo_font_t changes.
+
+2005-01-31  Matthias Clasen  <mclasen@redhat.com>
+
+       * modules/hebrew/hebrew-fc.c (get_cluster_glyphs): Show
+       unknown glyphs; this may lead to overlapping boxes when
+       accents are involved, but it is better than text vanishing
+       without any traces.
+
+2005-01-29  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango.def: Add missing pango_render_part_get_type. 
+       (#165287, Cedric Gustin)
+
+2005-01-25  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango.def: Add a missing entry point.
+
+       * modules/basic/Makefile.am (usp10.h): Don't use -p option to cp,
+       can cause "failed to preserve ownership" errors.
+
+       * modules/*/Makefile.am (INCLUDES): Remove extraneous slash here,
+       too.
+
+2005-01-11  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/Makefile.am (INCLUDES): Remove an extraneous
+       / that was confusing gcc on Win32.
+
+2005-01-10  Owen Taylor  <otaylor@redhat.com>
+       * Makefile.am (EXTRA_DIST): Add missing ChangeLog.pre*
+Sat Jan  8 19:28:17 2005  Owen Taylor  <otaylor@redhat.com>
+
+       * Makefile.am configure.in pangocairo.pc.in 
+       pangocairo-uninstalled.pc.in: Add a .pc file for
+       pangocairo.
+
+2005-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+       * pango.pc.in: Require gmodule-no-export-2.0 instead
+       of gmodule-2.0
+
+Sat Jan  8 16:46:37 2005  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Add checks for Cairo
+
+       * pango/Makefile.am: Add libpangocairo.
+
+       * pango/pangocairo-font.c pango/pangocairo-fontmap.c
+       pango/pangocairo.h pango/pangocairo-private.h 
+       pango/pangocairo-fcfont.c pango/pangocairo-fcfontmap.c
+       pango/pangocairo-fc.h: Start of a Cairo/FreeType backend.
+
+       * pango/pangofc-fontmap.[ch]: Add a "get_render_key" 
+       virtual function to allow subclasses to specialize the
+       details of how caching works. Add a default implementation
+       that's a little more sophisticated than what was there
+       before.
+
+       * pango/pangoft2-private.h pangofc-font.c pangoft2.c:
+       Move default implementations of has_char(), get_glyph()
+       to the base class.
+
+       * pango/pangofc-private.h pango/pangoft2-private.h:
+       Move PANGO_UNITS_26_6 and friends to pango/pangofc-private.h.
+
+       * examples/renderdemo.[ch] examples/pangoft2topgm.c 
+       examples/xftview.c: Allow passing in a custom function
+       to transform drawing.
+
+       * examples/Makefile.am examples/cairoview.c: Add a
+       Cairo/Xlib example program.
+
+       * examples/cairosimple.c: Simple Cairo example with
+       output to a PNG.
+
+       * pango/pango-layout.c (pango_layout_line_get_extents): Fix
+       bug where line ink rect was always including 0, 0.
+
+Thu Jan  6 12:29:31 2005  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_iterator_get_font): 
+       Fix reversed test on attr->absolute that was causing 
+       pixels sizes to be used inappropriately. (#163105, 
+       Ross Burton)
+
+Tue Jan  4 14:14:28 2005  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c (enum): Fix trailing comma in enum (#162618)
+
+Tue Jan  4 14:11:43 2005  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_list_splice): Fix
+       doc sentences to parse. (#161812, Morten Welinder)
+
+Tue Jan  4 14:05:13 2005  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-renderer.c (pango_renderer_draw_trapezoid): Rename
+       y1 parameters to y1_ to avoid conflicts with the math.h Bessel
+       function. (#161969)
+
+Fri Dec 31 10:20:55 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_convert_weight_to_pango): 
+       Fix problem where MEDIUM was getting grouped with SEMIBOLD
+       rather than NORMAL. 
+       (http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=143832)
+
+Wed Dec 22 13:21:01 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-script.c pango/pango-types.h: Fix a couple
+       of documentation typos (#161647, Torsten Schoenfeld)
+
+2004-12-18  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-private.h
+       * pango/pangowin32.c (pango_win32_font_get_metrics): Cache metrics
+       by language, like the other backends do. Don't try to get the
+       width of the 0..9 digit string if the font doesn't cover digits.
+
+2004-12-17  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/Makefile.am: Make the .la files depend on the
+       corresponding .def files.
+
+       * pango/pango.def: Add a couple of missing functions.
+
+Fri Dec 17 14:37:49 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_convert_weight_to_fc): Use
+       FC_WEIGHT_MEDIUM, not FC_WEIGHT_NORMAL in old-fontconfig
+       case. (#161568, Vincent Noel)
+
+Fri Dec 17 12:44:10 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Fix a couple of typos in the handling of
+       tibetan for --with-included-modules. (#161501, Sebastien Bacher)
+
+Fri Dec 17 12:28:56 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_extents_internal): Fix 
+       bug in computing logical_rect.x when layout->width == -1.
+       (#161510, Morten Welinder)
+
+Thu Dec 16 14:03:32 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/pango-renderer.sgml: Add short and long descriptions.
+
diff --git a/ChangeLog.pre-1-12 b/ChangeLog.pre-1-12
new file mode 100755 (executable)
index 0000000..460e435
--- /dev/null
@@ -0,0 +1,1748 @@
+2006-03-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.12.0 ===
+
+       * configure.in: Version 1.12.0
+
+       * NEWS, README: Updated.
+
+2006-03-03  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-private.h (PING): Fix compilation error with
+       MSVC. (#333115)
+
+2006-03-01  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-context.c (update_metrics_from_items): Check the
+       font pointer being NULL to avoid crashes for at least one class of
+       "bad" fonts (those without a Unicode cmap) on Win32. It would
+       probably be better to prune out such fonts already in the
+       enumeration phase. That would require opening (CreateFontIndirect)
+       every font, though, to be able to check with GetFontData() whether
+       there is a Unicode cmap. Don't know how much that would slow down
+       the enumeration.
+
+2006-02-28  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-private.h (PING)
+       * pango/pangowin32.c
+       * modules/basic/basic-win32.c: Use g_print() instead of printf()
+       for debugging output, to enable easy redirection using GLib
+       facilities. (#332855)
+
+2006-02-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.99 "Just In Case" ===
+
+       * configure.in: Version 1.11.99
+
+       * NEWS: Updated.
+
+2006-02-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_set_text): Replace each byte in
+       invalid UTF-8 sequences with '?'.  (bug #331995)
+
+       * examples/renderdemo.c: Don't exit on invalid UTF-8 input.
+
+2006-02-25  Hans Breuer  <hans@breuer.org>
+
+       * pango/pangocairo-win32font.c(pango_cairo_win32_font_install):
+       return TRUE to glyphs rendered at all (instead of box). This may
+       be compiler specific (what to return w/o return) but fixes bug #332538
+       
+       * pango/makefile.msc: updated
+       * pango/pango.def: just some sorting
+
+2006-02-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/test-hebrew.txt: Added.  Parts of Genesis.
+
+       * examples/Makefile.am: Adjusted.
+
+2006-02-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 332167 – Void function returns value - breaks Solaris build
+       Reported by Damien Carbery
+
+       * pango/pangocairo-fcfont (pango_cairo_fc_font_unlock_face): Simply
+       return.
+
+2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.6 ===
+
+       * configure.in: Version 1.11.6
+
+       * NEWS: Updated.
+
+2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328206 – Update/remove some old files
+
+       * docs/TEXT/{coding-style,modules,questions,ligatures,western-design}:
+       Removed.
+
+       * HACKING: Added.  Renamed from docs/TEXT/coding-style.
+
+       * Makefile.am: Add HACKING.
+
+2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 314239 – pangocairo crashes when font cannot be read
+
+       * pango/pangocairo-fcfont.c, pango/pangocairo-font.c: Hack up to not
+       crash if we cannot create cairo_scaled_font_t for PangoFont (font is
+       not readable, removed, etc.)
+
+2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 331723 – shapers should not crash on failures
+
+       * modules/*/*-fc.c: Return instead of g_return_if_fail when
+       face == NULL.
+
+       * pango/pango-engine.h (PangoEngineShape): Document that a shaper
+       should return an empty glyph string on failure.
+
+2006-02-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c, pango/glyphstring.c, pango/pango-fontmap.c,
+       pango/pango-ot-buffer.c, pango/pangocairo-font.c, pango/pangoft2.c,
+       pango/pangoxft-font.c, pango/shape.c: Change g_critical to g_warning.
+       We already handle them gracefully.
+
+       Bug 331994 – --disable-debug removes G_DISABLE_CAST_CHECKS
+       Patch from charlet@act-europe.fr
+
+       * configure.in: Do not lose PANGO_DEBUG_FLAGS when reassigning.
+
+       Bug 331995 – pango_layout_set_text optimization
+       Patch from charlet@act-europe.fr
+
+       * pango/pango-layout.c: Do not validate input text if asserts are
+       disabled.  Moreover, do not truncate input text on invalid sequence.
+
+       Bug 331996 – avoid crashes in win32 font handling
+       Patch from charlet@act-europe.fr
+
+       * pango/pangofc-fontmap.c, pango/pangowin32-fontmap.c,
+       pango/pangowin32.c: if (!font) return NULL in a number of places.
+
+2006-02-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 329148 – pango_glyph_item_split: assertion `split_index > 0' failed
+
+       * pango/ellipsize.c (init_state): Do not mistakenly set start_offset = 0.
+
+2006-02-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-types.h, pango/pango-font.h: Move PANGO_GLYPH_EMPTY,
+       PANGO_GLYPH_UNKNOWN_FLAG, and PANGO_GET_UNKNOWN_GLYPH from the former
+       to the latter, and only define if PANGO_ENABLE_ENGINE or
+       PANGO_ENABLE_BACKEND is set.
+
+2006-02-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 331038 – pango-querymodules --help and --version
+       Patch from Antoine Dopffer.
+
+       * examples/renderdemo.c, pango/querymodules.c: Add --version option.
+
+2006-02-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Pass gnits instead of gnu to automake.
+
+       * AUTHORS: Contributors move to THANKS.
+
+       * THANKS: New file.
+
+2006-02-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Pass 1.6 and gnu options to automake.
+
+       * modules/Makefile.am: Distribute Module.mk.
+
+       * modules/Module.mk: Common bits for writing module Makefil.am's.
+
+       * modules/*/Makefile.am: Include Module.mk instead of copying common
+       bits.
+
+2006-02-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 330795 – pango_renderer_draw_glyph segfaults when trying to call
+       the class vfunc
+       Opened by Torsten Schoenfeld
+
+       * pango/pango-renderer.c (pango_renderer_draw_trapezoid,
+       pango_renderer_draw_glyph): Bail if method is not implemented.
+
+2006-02-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.5 ===
+
+       * configure.in: Version 1.11.5
+
+       * NEWS: Updated.
+
+2006-02-10  Tor Lillqvist  <tml@novell.com>
+
+       Fix #135098 and #322510.
+
+       * pango/pangowin32-fontmap.c (case_insensitive_hash)
+       (case_insensitive_equal): New helper functions for string hashing
+       based on ASCII case insensitivity..
+       (logfont_nosize_hash): Use case_insensitive_hash().
+       (logfont_nosize_equal): Use case_insensitive_equal().
+       (pango_win32_font_map_init): Use the case-insensitive functions
+       for the PangoWin32FontMap::families hash table.
+       (pango_win32_font_map_load_font): Consequently we don't need to
+       lowercase the name before looking up from the hash table.
+       (get_family_name): Constify parameter.
+       (get_family_name_lowercase): Not needed any longer.
+       (pango_win32_font_description_from_logfont): New public
+       function. Code moved from pango_win32_insert_font(). Use family
+       name as such, don't lowercase it.
+       (pango_win32_insert_font): Use the above new function. Don't
+       bother looking for superfluos copies of the font entry as that
+       shouldn't ever happen. We have pruned out fonts that differ only
+       in charset already earlier.
+
+       * pango/pangowin32.h: Declare pango_win32_font_description_from_logfont().
+
+       * pango/pangowin32.def
+       * docs/pango-sections.txt: Add it here too.
+
+2006-02-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 330602 – pango_parse_weight
+       Reported by Morten Welinder.
+
+       * pango/pango-utils.c (pango_parse_weight): Pass 10 as base to
+       strtol.
+
+2006-02-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 314548 – pango_shape() is missing const correctness
+       Patch from Antoine Dopffer.
+
+       * modules/arabic/arabic-fc.c, modules/basic/basic-fc.c,
+       modules/basic/basic-x.c, modules/hangul/hangul-fc.c,
+       modules/hebrew/hebrew-fc.c, modules/indic/indic-fc.c,
+       modules/khmer/khmer-fc.c, modules/syriac/syriac-fc.c,
+       modules/thai/thai-shaper.c, modules/thai/thai-shaper.h,
+       modules/tibetan/tibetan-fc.c, pango/pango-context.c,
+       pango/pango-engine-private.h, pango/pango-engine.c,
+       pango/pango-engine.h, pango/pango-glyph.h pango/pango-layout.c,
+       pango/shape.c: Make PangoAnalysis *analysis const in all shaper
+       interfaces.
+
+2006-02-08  Anders Carlsson  <andersca@imendio.com>
+
+       * configure.in: Add basic-atsui to basic_modules
+
+2006-02-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 330146 – pango-view --help should list available backends
+       Patch from Antoine Dopffer.
+
+       * examples/renderdemo.c: Show backends in --help output.
+
+2006-02-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 330289 – Fix build with gcc 2.95 (pangox.c)
+
+       * pango/pangox.c (get_subfonts_foreach): Fixed.
+
+2006-02-07  Tor Lillqvist  <tml@novell.com>
+
+       * examples/viewer-main.c (main): Initialise GError pointer to
+       NULL. Use waitpid() only on Unix.
+
+       * pango-zip.sh.in: Drop the timestamp from the zipfile names.
+
+2006-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.4 ===
+
+       * configure.in: Version 1.11.4
+
+       * NEWS: Updated.
+
+2006-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       As cairo 1.2 seems to be delayed infinitely, make all cairo HEAD
+       API that we use conditional, to make a release.
+
+       * configure.in: Depend on cairo 1.0.0 again.  Check for
+       cairo_scaled_font_get_*() and cairo_scaled_font_text_extents()
+       availability.
+
+       * pango/pangocairo-font.c: Work around if the above functions are not
+       available.
+
+2006-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c (pango_matrix_copy, pango_matrix_free):  If
+       NULL is passed to _copy, return NULL with no warning.  If NULL is
+       passed to _free, do nothing with no warning.  Docs updated.
+
+       * examples/viewer-pangoxft.c (render_callback): Multiply x,y by
+       PANGO_SCALE, as pango_xft_render_layout takes coordinates in 
+       Pango units weirdly enough.
+
+       * viewer-pangocairo.c (render_callback): Do cairo_translate, to
+       draw correct bounding boxes for x,y nonzero.
+
+       * examples/renderdemo.c (do_output): If context has an all-zero matrix
+       set, interpret it as backend does not support transformation, so
+       warn on --rotate, and do not try to rotate.
+
+       * examples/viewer-pangox.c (pangox_view_get_context): Set an all-zero
+       matrix on context, to negotiate that we don't support transformations.
+
+2006-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328067 – Install pango-view
+
+       Added a rather generic framework for a pango-view example.  All
+       backends have their own pango*-view built, and a pango-view binary
+       is built too, that can choose backend via --backend.  This one is
+       installed in bindir.
+
+       * examples/Makefile.am: Updated, to build pangox-view, pangoft2-view,
+       pangoxft-view, pangocairo-view, and pango-view.
+
+       * examples/viewer.h, examples/viewer-x.c, examples/viewer-x.h
+       examples/viewer-cairo.c, examples/viewer-cairo.h,
+       examples/viewer-main.c, examples/viewer-pangox.c,
+       examples/viewer-pangoft2.c, examples/viewer-pangoxft.c,
+       examples/viewer-pangocairo.c, examples/pango-view.c,
+       examples/pango-xview.c, examples/pango-ft2view.c,
+       examples/pango-xftview.c, examples/pango-cairoview.c: Added.
+
+       * examples/cairoview.c, examples/xftview.c, examples/pangoft2topgm.c,
+       examples/viewer-qt.cc, examples/viewer-qt.h: Removed.
+
+       * configure.in: Check for Cairo Xlib backend, also AC_DEFINE various
+       backend bits.
+
+2006-02-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-fontmap.c (pango_font_map_real_load_fontset): Warn
+       only once per font-description that cannot be loaded.
+
+       * pango/pangox.c: Make it not crash if no font found, like other
+       backends.
+
+2006-02-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: AC_DEFINE various version components.
+
+       * *.c: Change various const return types to G_CONST_RETURN.
+
+2006-02-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 324408 – tab can result in 0 characters
+
+       * pango/pango-layout.c (shape_tab): Make sure there is
+       at least an space-width of space between tab-aligned text
+       and the text before it.
+
+2006-02-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 329528 – implement --wrap in examples/renderdemo.c
+       Patch from Antoine Dopffer.
+
+       * examples/renderdemo.c: Add --wrap option.
+
+2006-02-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-types.h: Change PANGO_GLYPH_EMPTY to 0x0FFFFFFF, to
+       not overlap with PANGO_GLYPH_UNKNOWN_FLAG (0x10000000).
+       Define PANGO_GET_UNKNOWN_GLYPH(wc) that simply returns
+       wc|PANGO_GLYPH_UNKNOWN_FLAG.
+
+       * docs/pango-sections.txt, docs/tmpl/glyphs.sgml: Document new
+       symbols.
+
+       * modules/*/*.c: Use PANGO_GET_UNKNOWN_GLYPH instead of various
+       backend-specific functions.
+
+       * pango/pangofc-font.c, pango/pangoft.c, pango/pangoxft-font.c,
+       * pango/pangowin32.c, pango/pangox.c: Suggest using
+       PANGO_GET_UNKNOWN_GLYPH in docs.
+
+       * pango/pangofc-font.h: Deprecate pango_fc_font_get_unknown_glyph().
+
+       * pango/pangowin32.h: Deprecate pango_win32_get_unknown_glyph().
+
+2006-02-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoft2.c, pango/pangoft2-render.c: Move the
+       FT_IS_SFNT(font) logic into pango_ft2_get_unknown glyph.
+
+2006-02-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: AC_DEFINE the module version, such that
+       pango-querymodules gets rebuilt after module version
+       update.
+
+       * pango/Makefile.am: Do not set -DMODULE_VERSION.
+
+2006-02-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Bump pango_module_version to 1.5.0.
+
+2006-02-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * Makefile.am: Distribute autogen.sh.
+
+2006-02-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Finish the 'glyph 0' work of this morning:
+       PANGO_GLYPH_NULL that I introduced is renamed to
+       PANGO_GLYPH_EMPTY.  It means, no rendering should
+       be performed.  The backends however, still return
+       0 if a glyph is not found.  The modules then are
+       free to replace this 0 glyph with an unknown
+       character.
+
+       * modules/arabic/arabic-fc.c, modules/basic/basic-atsui.c,
+       modules/basic/basic-fc.c, modules/basic/basic-win32.c,
+       modules/basic/basic-x.c, modules/hangul/hangul-fc.c,
+       modules/hebrew/hebrew-fc.c, modules/indic/indic-fc.c,
+       modules/khmer/khmer-fc.c, modules/syriac/syriac-fc.c,
+       modules/thai/thai-fc.c, modules/tibetan/tibetan-fc.c,
+       pango/pangox.c, pango/pangowin32.c:
+       Adapt to above change.  Backends return 0 if glyph not
+       found.
+
+       * pango/fonts.c (pango_font_get_glyph_extents): If font
+       is not usable (!PANGO_IS_FONT (font)), return the generic
+       UNKNOWN_GLYPH metrics.  This is used when your backends
+       are misconfigured and you don't find *any* font at all.
+
+       * pango/pango-engince.c: Add unknown glyphs in fallback
+       shaper, instead of empty glyphs.
+
+       * pango/shape.c: Call the fall-back shaper if shaper
+       fails, instead of generating a dummy glyph string ourselves.
+
+       * pango/pango-layout.c (imposed_shape, shape_tab): Use
+       PANGO_GLYPH_EMPTY instead of glyph 0.
+
+       * pango/pango-renderer.c (pango_renderer_draw_glyph): No-op on
+       PANGO_GLYPH_EMPTY instead of glyph 0.
+
+       * pango/pangocairo-atsuifont.c, pango/pangocairo-win32font.c,
+       pango/pangocairo-fcfont.c, pango/pangocairo-font.c,
+       pango/pangocairo-private.h: install_font returns a boolean now.
+
+       * pango/pangocairo-render.c, pango/pangoxft-render.c: Handle font
+       and hex-box failures more gracefully by drawing a generic
+       unknown-box glyph.
+
+       * pango/pangoft2.c, pango/pangoft2-render.c: Draw the generic
+       unknown-box glyph here too.  For unknown glyphs though, if
+       the font is TTF (FT_IS_SFNT), use the zero-indexed glyph,
+       otherwise, draw a box of proper size.
+
+2006-02-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoft2.c: Do unknown glyph extents here too.
+
+2006-02-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoxft-font.c, pango/pangoxft-render.c: Guard Xft
+       backend agains crashes too.
+
+2006-02-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c, modules/basic/basic-atsui.c,
+       modules/basic/basic-fc.c, modules/basic/basic-win32.c,
+       modules/basic/basic-x.c, modules/hangul/hangul-fc.c,
+       modules/hebrew/hebrew-fc.c, modules/indic/indic-fc.c,
+       modules/khmer/khmer-fc.c, modules/syriac/syriac-fc.c,
+       modules/thai/thai-fc.c, modules/tibetan/tibetan-fc.c,
+       pango/fonts.c, pango/pango-engine-private.h pango/pango-types.h,
+       pango/pangocairo-fcfont.c, pango/pangocairo-font.c,
+       pango/pangocairo-private.h, pango/pangocairo-render.c,
+       pango/pangofc-decoder.c, pango/pangofc-font.c,
+       pango/pangoft2-render.c, pango/pangoft2.c pango/pangowin32.c,
+       pango/pangox.c, pango/pangoxft-font.c pango/pangoxft-private.h,
+       pango/pangoxft-render.c, pango/shape.c: Use PANGO_GLYPH_NULL for
+       when no glyph should be drawn.  Use PANGO_GLYPH_UNKNOWN_FLAG for
+       all backends to mark unknown flags.  There's no need for
+       pango_font_get_unknown_glyph() anymore, since all backends know
+       how to handle PANGO_GLYPH_UNKNOWN_FLAG gracefully.  We may add
+       that in the future however. (fixes bug #73147, closes bug #329524)
+
+2006-02-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c (read_config_file): Fix GKeyFile transition.
+
+2006-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: AC_DEFINE (HAVE_CAIRO_PNG).
+
+       * examples/cairoview.c: Save to PNG if cairo has PNG support and
+       --output is given.
+
+2006-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c: For mini_font, set family to "monospace",
+       not "mono-space" which didn't work!
+
+2006-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/xftview.c: Add a default_substitute function to set
+       correct dpi on the pattern.
+
+2006-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/viewer-x.c, examples/viewer-x.h: Driver for X-based
+       viewer.  Used by pangocairo-view and pangoxft-view currently.
+
+       * examples/Makefile.am, examples/cairoview.c, examples/xftview.c,
+       examples/pangoft2topgm.c, examples/renderdemo.h,
+       examples/renderdemo.c: Adjust to the above change.
+
+2006-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/viewer.c: Removed.
+
+2006-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c, pango/pangocairo-font.c: Initialize warning
+       history structs more explicitly. (bug #329459)
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/syriac.utf, examples/tibetan.utf, examples/muru.utf,
+       examples/dev-example.utf: Removed/renamed.
+
+       * examples/test-arabic.txt, examples/test-devanagari.txt,
+       examples/test-ipa.txt, test-syriac.txt, test-tamil.txt,
+       test-tibetan.txt: Added.
+
+       * examples/Makefie.am: Change pango-cairoview, pango-xftview,
+       pangoft2topgm to pangocairo-view, pangoxft-view, and pangoft2-topgm
+       respectively.
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c (_pango_cairo_get_hex_box_info): Use
+       cairo_scaled_font_text_extents instead of cairo_text_extents.
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Require cairo >= 1.1.1.
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-private.h, pango/pangocairo-font.c,
+       pango/pangocairo-render.c: Hint hexbox.  Also draw a single-row
+       hexbox for very small sizes.
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328313 – Use GKeyFile for parsing pangorc
+       Patch from Antoine Dopffer.
+
+       * pango/pango-utils.c (read_config_file): Use GKeyFile to parse
+       config file.
+
+2006-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c, pango/glyphstring.c pango/pango-attributes.c,
+       pango/pango-color.c, pango/pango-context.c,
+       pango/pango-coverage.c, pango/pango-fontset.c,
+       pango/pango-glyph-item.c, pango/pango-item.c,
+       pango/pango-layout.c, pango/pango-ot-buffer.c,
+       pango/pango-ot-info.c, pango/pango-ot-ruleset.c,
+       pango/pango-script.c, pango/pango-tabs.c pango/pango-utils.c,
+       pango/pangocairo-fcfontmap.c, pango/pangocairo-fontmap.c,
+       pango/pangox-fontcache.c, pango/pangoxft-render.c:
+       Improve documentation for functions allocating memory,
+       on how the object should be freed.
+
+2006-01-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.3 ===
+
+       * configure.in: Version 1.11.3
+
+       * NEWS: Updated.
+
+2006-01-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/shape.c (pango_shape):
+       * pango/fonts.c (pango_font_get_glyph_extents):
+       * pango/pangocairo-font.c (_pango_cairo_font_install):
+       Improve error handling in high-frequency functions:  Only warn
+       once.
+
+       * pango-impl-utils.h, pangoutils.h:
+       * pangocairo-private.h, pangocairo-font.c:
+       Add machinery for above: _pango_warning_history and
+       _pango_cairo_warning_history.
+
+2006-01-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328314 – Examples should use GOption instead of argcontext.c
+       Patch from Antoine Dopffer.
+
+       * examples/renderdemo.c: Use GOption for parsing cmd-line
+       options.
+
+       * examples/argcontext.c, examples/argcontext.h: Removed.
+
+2006-01-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/ftxgsub.c: Handle GSUB Lookup type 8,
+       and ReverseChainContextualSubst table.  (bug #149696,
+       patch from Aamir Wali)
+
+2006-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c, modules/basic/basic-fc.c,
+       modules/hebrew/hebrew-fc.c, modules/indic/indic-fc.c,
+       modules/khmer/khmer-fc.c, modules/syriac/syriac-fc.c,
+       modules/thai/thai-ot.c, modules/thai/thai-shaper.c,
+       modules/tibetan/tibetan-fc.c: If locking font face failed,
+       do not assert, just return zero glyphs with an implicit
+       warning.
+
+       * pango/fonts.c, pango/glyphstring.c pango/modules.c,
+       pango/pango-color.c, pango/pango-context.c,
+       pango/pango-coverage.c, pango/pango-fontmap.c,
+       pango/pango-glyph-item.c, pango/pango-item.c,
+       pango/pango-layout.c, pango/pango-markup.c,
+       pango/pango-ot-buffer.c, pango/pango-script.c,
+       pango/pango-tabs.c, pango/pango-utils.c,
+       pango/pangoatsui-fontmap.c, pango/pangocairo-fcfont.c,
+       pango/pangocairo-fcfontmap.c, pango/pangocairo-fontmap.c,
+       pango/pangocairo-win32font.c, pango/pangofc-font.c,
+       pango/pangofc-fontmap.c, pango/pangoft2-fontmap.c,
+       pango/pangoft2-render.c, pango/pangoft2.c,
+       pango/pangowin32-fontcache.c, pango/pangoxft-font.c,
+       pango/pangoxft-render.c, pango/break.c pango/ellipsize.c:
+       Use g_slice for allocating all types.  Also, change some
+       g_error's to g_critical's...
+
+2006-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Do not crash if the (win32 typically) shaper fails. Bug #304702:
+
+       * pango/pango-engine.c (_pango_engine_shape_shape): Set num_glyphs to
+       zero if failing.
+
+       * pango/pango-shape.c (pango_shape): Instead of crashing if the shaper
+       failed to produce any glyphs, print out a warning message containing
+       the name of the font, and mark the font such that we don't keep
+       printing warning for the same font.  Moreover, inject one whitespace
+       glyph per character, so you just see nothing, but everything works
+       otherwise.
+
+2006-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * .cvsusers: Removed.
+
+2006-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * doc/tmpl/opentype.sgml: Document PangoOTBuffer and PangoOTGlyph.
+
+       * pango/pango-ot-buffer.c, pango/pango-ot-info.c,
+       pango/pango-ot-ruleset.c: Document remaining symbols.
+
+2006-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/pango-ot-*: Removed.
+
+       * pango/pango-ot-*: Added.
+
+       * pango/Makefile.am, pango/opentype/Makefile.am, doc/Makefile.am:
+       Adjusted.
+
+2006-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-font.h, pango/pangoft2-render.c, pango/pangowin32.c,
+       pango/pangoxft-render.c, docs/tmpl/xft-fonts.sgml,
+       docs/tmp/atsui-fonts.sgml: Documentation improvements.
+
+2006-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Use AC_HELP_STRING everywhere. Bump required version
+       to 2.56.
+
+       * doc/tmpl/pango-renderer.sgml (PANGO_TYPE_RENDER_PART): Document it.
+
+2006-01-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/Makefile.am: Remove pango.modules on uninstall. (bug #328869)
+
+       * pango/pango-fontmap.c, pango/pangocairo-*font.c: Better error
+       messages.
+
+2006-01-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoatsui-fontmap.c: #include <modules.h>. (bug #328632)
+
+2006-01-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/modules.h, pango/Makefile.am:  Fix more ATSUI stuff in build
+       infrastructure.  Sigh... (bug #328632)
+
+2006-01-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: If major.minor of required and available glib versions
+       are the same, add -DG_DISABLE_DEPRECATED to GLIB_CFLAGS. (bug #328617)
+
+       * */Makefile.am: Remove hardcoded -DG_DISABLE_DEPRECATED.
+
+2006-01-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoatsui-fontmap.c (pango_atsui_family_class_init):  Declare
+       int i! (bug #328632)
+
+2006-01-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangolayout.c (pango_layout_get_width): Improve docs to say
+       it may return -1.
+
+2006-01-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-atsuifont.c: Change cwfont to cafont in a couple
+       places.
+
+2006-01-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/indic/pango-indic-script.h: Removed, not used for quite a
+       while.
+
+2006-01-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/pangoft2.aliases: Removed based on an old ChangeLog entry
+       saying:  Remove pangoft2.aliases from CVS/distribution; it is
+       no longer used. (#82736, Sven Neumann.)
+
+2006-01-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Make tests/examples do use generated pango.modules. (bug #328291)
+
+       * examples/pangorc, tests/pangorc: Removed. Moved to modules/.
+
+       * examples/pangox.aliases: Removed. Moved to pango/.
+
+       * examples/Makefile.am, tests/Makefile.am: Remove pango.modules
+       creation stuff, copy pangorc from $(srcdir)/../modules/pangorc
+       insteadd.
+
+       * examples/renderdemo.c: Add --pangorc option, default to ./pangorc.
+       Setenv PANGO_RC_FILE to whatever pangorc file decided.
+
+       * tests/*.c: Setenv PANGO_RC_FILE to ./pangorc.
+
+       * pango/pangox.aliases: Added.
+
+       * pango/Makefile.am: Install pangox.aliases.
+
+       * modules/pangorc: Added.
+
+       * modules/Makefile.am: Create pango.modules.  Added pangorc.
+
+       * modules/.cvsignore, examples/.cvsignore, tests/.cvsignore: Updated.
+
+2006-01-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c: Set cluster only on base chars, like the
+       Arabic module does.
+
+       * modules/indic/indic-fc.c: Draw an unknown glyph on missing glyphs,
+       like other modules do. (part of bug #326960, LingNing Zhang)
+
+2006-01-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/TEXT/coding-style: Added "Since:" in the doc example.
+
+2006-01-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * TODO: Removed old file.  Filed some bugs out of it.
+
+       * TODO.xml: Removed old file.  Filed some bugs out of it.
+
+       * Makefile.am (EXTRA_DIST): Removed TODO.xml.
+
+2006-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * MAINTAINERS: Added.
+
+       * AUTHORS: Added myself to contributors.
+
+       * Makefile.am: Added MAINTAINERS to EXTRA_DIST.
+
+2006-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fontmap.c (pango_cairo_context_get_font_options):
+       Fix typo in docs.
+
+2006-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c (pango_matrix_get_font_scale_factor): Fix docs.
+
+2006-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-types.h, pango/pango-utils.c
+       (pango_matrix_get_font_scale_factor): Make matrix parameter const.
+
+       * pango/fonts.c, pango/pango-context.c, pango/pango-coverage.c,
+       pango/pango-fontset.c, pango/pango-layout.c, pango/pango-renderer.c,
+       pango/pango-types.h, pango/pango-utils.c,
+       pango/pangocairo-atsuifont.c, pango/pangofc-font.c,
+       pango/pangoft2-fontmap.c, pango/pangowin32-fontmap.c,
+       pango/pangowin32.c, pango/pangox-fontmap.c, pango/pangoxft-font.c:
+       Replace "Returns:" with "Return value:" in docs.
+
+2006-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Finish ATSUI module work.  Bug #322022, Matthias Clasen.
+
+       * docs/tmpl/atsui-fonts.sgml: Added.
+
+       * docs/pango-docs.sgml: Updated to reflect above change.
+
+       * docs/pango-sections.txt: Updated to reflect above change and
+       also document Standard ATSUI symbols.
+
+       * pango/pangocairo-atsuifont.c
+       (pango_cairo_atsui_font_get_atsu_font_id): Add docs.
+
+       * pango/pangoatsui-fontmap.c: Register included ATSUI modules.
+
+2006-01-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairosimple.c: Small fixes.
+
+2006-01-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c (_pango_cairo_get_hex_box_info): Add a
+       comment about using cairo_scaled_font_text_extents instead of
+       cairo_text_extents.
+
+2006-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.2 ===
+
+       * configure.in: Version 1.11.2
+
+       * NEWS: Updated.
+
+2006-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am: Move GLIB_CFLAGS before external libraries'
+       CFLAGS.  Some formatting changes too.
+
+2006-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/Makefile.am, examples/Makefile.am, pango/Makefile.am,
+       tests/Makefile.am: Adjust the order of *_CFLAGS to the same order
+       known to work. (Fixes bug #325588)
+
+2006-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Fixes bug #314675, Brian Cameron.
+
+       * configure.in: Handle uninstalled cairo.
+
+       * pangocairo-uninstalled.pc.in: Fix typo: libpangoxft->libpangocairo.
+
+2006-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/indic/mprefixups.c (indic_mprefixups_apply): Remove unused
+       variable clusterSave that was leaking too. (bug #316466, Steve Grubbs)
+
+2006-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Fixes bug #71414, allowing to disable building/installing modules.
+
+       * configure.in: Add support for --with-dynamic-modules.
+
+       * */Makefile.am: Adapt to the above change.
+
+2006-01-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Draw hexbox for cairo backend.  Bug #313551.  Based on patch by
+       LingNing Zhang.
+
+       * pango/pangocairo-private.h (_PangoCairoFontIface): Add new methods:
+       get_font_face and get_scaled_font, and getters:
+       _pango_cairo_font_get_font_face, _pango_cairo_font_get_scaled_font.
+
+       * pango/pangocairo-private.h: Add _PangoCairoHexBoxInfo, and getter
+       _pango_cairo_get_hex_box_info, and
+       _pango_cairo_get_glyph_extents_missing.
+
+       * pango/pangocairo-fcfont.c, pango/pangocairo-atsuifont.c,
+       * pango/pangocairo-win32font.c: Export get_font_face and
+       get_scaled_font methods.
+
+       * pango/pangocairo-fcfont.c: Use _pango_cairo_get_glyph_extents_missing
+       on missing glyphs.
+
+       * pango/pangocairo-font.c: Implement _pango_cairo_font_get_font_face,
+       _pango_cairo_font_get_scaled_font, _pango_cairo_get_hex_box_info, and
+       _pango_cairo_get_glyph_extents_missing.
+
+       * pango/pangocairo-render.c (_pango_cairo_renderer_draw_unknown_glyph):
+       Added. 
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs):
+       Cleaned up to use the added function above.
+
+2006-01-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * */*.c, */*/*.c: Make sure #include <config.h> is the first include
+       in the file. (bug #158870, based on patch by Luis Menina)
+
+2006-01-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.h (pango_is_zero_width): Move G_GNUC_CONST to
+       after declaration, to be compatible with gcc 2.95. (bug #326847)
+
+2006-01-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am,
+       * pango/fonts.c,
+       * pango/glyphstring.c,
+       * pango/pango-attributes.c,
+       * pango/pango-color.c,
+       * pango/pango-impl-utils.h,
+       * pango/pango-item.c,
+       * pango/pango-layout.c,
+       * pango/pango-tabs.c,
+       * pango/pango-utils.c,
+       * pango/pango-utils.h,
+       * pango/pangoatsui-fontmap.c,
+       * pango/pangocairo-font.c,
+       * pango/pangocairo-fontmap.c,
+       * pango/pangofc-fontmap.c,
+       * pango/pangowin32-fontmap.c,
+       * pango/pangox-fontmap.c,
+       * pango/pangox.c,
+       * pango/opentype/pango-ot-info.c,
+       * pango/opentype/pango-ot-ruleset.c: Intern strings to avoid
+       unnecessary strdups in the type system. (bug #325832, Matthias Clasen)
+
+2006-01-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/Makefile.am (IGNORE_HFILES): Add pangocairo-atsui.h and
+       pangoatsui-private.h.
+
+       * docs/pango-sections.txt: Add pango_matrix_get_font_scale_factor and
+       pango_layout_index_to_line_x that were missing.
+
+       * docs/tmpl/glyphs.sgml: Add pango_matrix_get_font_scale_factor where
+       other pango_matrix functions reside.
+
+       * docs/tmpl/layout.sgml: Add pango_layout_index_to_line_x.
+
+2006-01-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c: Use g_slice for ShaperFontElement
+       allocation. (bug #325728, Matthias Clasen)
+
+2006-01-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-attributes.c: Use g_slice for various attribute types
+       allocations. (bug #325040, Matthias Clasen)
+
+2005-12-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (pango_context_init): Use
+       pango_font_description_set_family_static. (bug #325013, Matthias
+       Clasen)
+
+2005-12-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/pango-ot-buffer.c: Use g_slice for PangoOTBuffer
+       allocation. (bug #325026, Matthias Clasen)
+
+2005-12-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c,
+       * modules/basic/basic-fc.c,
+       * modules/hebrew/hebrew-fc.c,
+       * modules/syriac/syriac-fc.c: Use pango_is_zero_width() to not draw
+       zero-width characters in the OpenType shapers.  (Fixes bug #324621)
+
+2005-12-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango.def: Add pango_matrix_get_font_scale_factor. (bug
+       #323978, J. Ali Harlow)
+
+2005-12-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/modules.c (pango_module_load), pango/querymodules.c: Pass
+       G_MODULE_BIND_LOCAL to g_module_open.  (Pointed by Federico)
+
+2005-12-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.1 ===
+
+       * configure.in: Version 1.11.1
+
+       * NEWS: Updated.
+
+2005-12-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am: Handle module-defs-atsui.c.
+
+2005-12-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       Fix bug #323540.
+
+       * pangofc-fontmap.c (get_scaled_size): The logic in there is moved
+       and renamed into pango-utils.
+
+       * pango/pango-types.h, 
+       * pango/pango-utils.c (pango_matrix_get_font_scale_factor):
+       New function.
+
+       * pango/pangocairo-fcfont.c (get_font_size): Divide pixel-size by
+       matrix font-scale-factor, since pixel-size is scaled.
+
+2005-12-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Undo last change.  2.9.1 has the revised
+       g_slice_free_chain api and 2.9.2 is not released yet!
+
+2005-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Bump required glib version to 2.9.2 now that it's
+       released. We are relying on the revised g_slice_free_chain api.
+
+2005-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_glyph_extents):
+       Update on missing-box drawing change. Add (!glyph) to the conditional.
+
+2005-12-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize): Free
+       ->fontset_hash. (#323498, Morten Welinder)
+
+2005-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c, pango/pangocairo-private.h,
+       pango/pangocairo-render.c: Draw an empty dashed box on missing glyphs
+       for cairo-fc backend.
+
+2005-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/mini-fribidi/fribidi.c, pango/mini-fribidi/fribidi_config.h,
+       pango/mini-fribidi/fribidi.patch: Use new g_slice API for TypeLink
+       allocation, instead of GMemChunks.
+
+       * configure.in: Bump required glib version to 2.9.1.
+
+2005-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c: Return NULL, not FALSE!
+
+       * modules/arabic-arabic-fc.c: Add 'cswh' (swash) OpenType feature, as
+       per the Arabic OpenType spec.
+
+2005-11-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/Makefile.am: Add GLIB_LIBS to examples explicitly. (#322885,
+       Manish Singh)
+
+2005-11-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c: Add a constact fixed-size (256) cache for
+       caching glyph extents, instead of the growing g_hash_table.  The cache
+       itself is very similar to the recent gunichar->glyph cache done by
+       Federico.  Reviewed by Matthias Clasen.
+
+2005-11-24  Matthias Clasen  <mclasen@redhat.com>
+
+       * pango/pango-layout.c: Fix a typo.
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/mapping.c (pango_glyph_string_index_to_x),
+       pango/pango-layout.c (pango_layout_iter_get_char_extents):
+       Remove cast to double in things like a = b / c where a, b,
+       and c are all ints. (#312469, Sven Neumann)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentyp/pango-ot-buffer.c: Fix typo in docs.
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/querymodules.c: Tiny clean up. Simpler way to suppress
+       gcc strict-aliasing warning. (part of #123307)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c pango/pango-attributes.c pango/pango-context.c
+       pango/pango-glyph-item.c pango/pango-layout.c
+       pango/pango-script.c pango/pango-utils.c pango/pangofc-font.c
+       pango/pangoft2-fontmap.c pango/opentype/pango-ot-buffer.c
+       pango/opentype/pango-ot-ruleset.c: Added "Since:" tags to all
+       interfaces added after Pango 1.0. (#319116, Brian Cameron)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in (enable_explicit_deps): Fix typo when checking
+       libtool config deplibs_check_method. Moreover, enable explicit
+       deps if we get anything other than pass_all from libtool. (part of
+       #318750)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am: Link libpangoxft with -lm. (#318210)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/querymodules.c: Free used memory. (#316467, Steve Grubb)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/hangul/hangul-fc.c (hangul_engine_shape): Fix incorrect
+       bounds check. (#316469, Steve Grubb)  Moreover, increase max_jamos
+       eight at a time instead of three.
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Protect against possible division by zeros. (#316468, Steve Grubb)
+
+       * pango/pango-context.c (update_metrics_from_items),
+       pango/pango-fontset.c (pango_fontset_real_get_metrics): If count is
+       zero, do not alter approximate_{char,digit}_width.
+
+       * pango/opentype/disasm.c: Err on invalid DeltaFormat.
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_description_get_absolute_size): Remove
+       excess "the" in docs. (#319175, Masao Mutoh)
+
+2005-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c: Reworked basic shaper with OpenType
+       support. (#101079, based on patch from Denis Jacquerye and Noah Levitt)
+
+       * modules/basic/basic-fc.c (basic_scripts): Added Unicode 4.1 addition
+       script PANGO_SCRIPT_GLAGOLITIC that is a "simple" script.
+
+       * modules/arabic/arabic-fc.c, modules/syriac/syriac-fc.c: Replace
+       g_utf8_to_ucs4_fast() with g_utf8_strlen()!
+
+       * pango/opentype/pango-ot-ruleset.c (pango_ot_ruleset_add_feature):
+       Remove reference in docs to pango_ot_ruleset_shape() that was
+       removed long ago.
+
+2005-11-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-font.c: Finish previous patch.  Use GType private
+       data, cache it into fcfont->priv.  Get rid of
+       PANGO_FC_FONT_GET_PRIVATE (fcfont) and access fcfont->priv. (#322174,
+       Christian Persch)
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_init): Remove redundant
+       priv = fcfontmap->priv initialization.
+
+2005-11-22  Federico Mena Quintero  <federico@ximian.com>
+
+       Fixes #322174:
+
+       * pango/pangofc-font.h (struct _PangoFcFont): Replace the
+       "gpointer context_key" field with "gpointer priv".  This way we
+       can access the private data quickly, instead of using
+       g_type_instance_get_private().
+
+       * pango/pangofc-private.h: Added prototypes for
+       _pango_fc_font_{get,set}_context_key().
+
+       * pango/pangofc-font.c (struct _PangoFcFontPrivate): Moved the
+       "context_key" field to here.
+       (PANGO_FC_FONT_GET_PRIVATE): Use the "priv" field instead of GType
+       private data.
+       (pango_fc_font_class_init): Don't register GType private data.
+       (pango_fc_font_init): Initialize the private data here.
+       (pango_fc_font_finalize): Free the private data.
+       (_pango_fc_font_get_context_key): Implement.
+       (_pango_fc_font_set_context_key): Implement.
+       (pango_fc_font_get_glyph): Remove the g_return_val_if_fail(); it
+       was appearing quite high in the profile.
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_add): Call
+       _pango_fc_font_set_context_key() instead of setting the
+       fcfont->context_key directly.
+       (_pango_fc_font_map_remove): Likewise; also use
+       _pango_fc_font_get_context_key() instead of accessing the field
+       directly.
+
+2005-11-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoxft-font.c (_pango_xft_font_get_mini_font): Load a font
+       suitable for viewing English text when creating mini font for hex
+       boxes. (#312477)
+
+2005-11-21  Anders Carlsson  <andersca@imendio.com>
+
+       Bug #322022, add ATSUI backend:
+
+       * configure.in: Add checks for ATSUI.
+       
+       * examples/Makefile.am: Only build pango-cairoview if freetype is
+       detected.
+       
+       * modules/basic/Makefile.am: Add basic ATSUI module.
+       
+       * pango/Makefile.am: Add ATSUI files for cairo backend.
+       
+       * pango/pangocairo-fontmap.c (pango_cairo_font_map_new): Support
+       creating ATSUI font maps here.
+
+       * pango/pangoatsui-fontmap.c:
+       * pango/pangoatsui-private.h:
+       * pango/pangoatsui.c:
+       * pango/pangoatsui.h:
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifont.c:
+       * pango/pangocairo-atsuifont.h:
+       * pango/pangocairo-atsuifontmap.c: Added.
+       
+2005-11-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-script.c (pango_script_for_unichar_bsearch): Only update
+       static mid on a match.
+
+2005-11-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (get_scaled_size): Return double instead of
+       int. (#321891, Sebastien Bacher)
+
+2005-11-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/GLASS.utf8: Make the Kermit notice a "no warranty" clause,
+       to comply with LPGL.
+
+2005-11-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.11.0 ===
+
+       * configure.in: Version 1.11.0
+
+       * NEWS: Updated.
+
+2005-11-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): Use the
+       new support for negative offsets in g_utf8_pointer_to_offset.  So now,
+       we simply do:
+       offset += g_utf8_pointer_to_offset(text+oldindex, text+newindex),
+       instead of doing
+       offset = g_utf8_pointer_to_offset(text, text+index) as we did before.
+
+2005-11-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-renderer.c: Documentation improvements. (#321731)
+
+2005-11-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_description_*): General cleanup.
+       (pango_font_description_unset_fields): Set fields being unset to their
+       default value.
+       (pango_font_description_hash, pango_font_description_equal): Do not
+       use mask in these.  Use all other fields unconditionally.
+
+2005-11-17  Matthias Clasen  <mclasen@redhat.com>
+
+       * modules/hangul/tables-jamos.i: const correctness
+       fixes found by Arjan van de Ven and gcc.
+
+2005-11-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (fontset_hash_key_equal): Compare language
+       too.  (#318168)
+
+2005-11-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_get_log_attrs): Remove g_utf8_strlen that was
+       only used to give a warning.
+       
+       * pango/break.c (pango_default_break): Add gcc-suggested parantheses
+       around boolean expression.
+
+2005-11-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/coverage-maps.sgml docs/tmpl/fonts.sgml
+       docs/tmpl/glyphs.sgml docs/tmpl/layout.sgml
+       docs/tmpl/main.sgml docs/tmpl/scripts.sgml
+       docs/tmpl/tab-stops.sgml docs/tmpl/text-attributes.sgml
+       pango/break.c pango/fonts.c pango/pango-fontset.c
+       pango/pango-layout.c pango/pango-script.c pango/pango-utils.c
+       pango/pangofc-decoder.c pango/pangofc-decoder.h
+       pango/pangofc-font.c pango/pangofc-font.h
+       pango/pangoxft-font.c: More documentation improvements.
+
+2005-11-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of #101079:
+
+       * pango/opentype/ftxopen.c (Load_Lookup): In extension subtables,
+       offset is relative to the extension subtable, not the original
+       table. (Greg Aumann)
+
+       * pango/opentype/ftxgpos.c (Load_BaseArray): When reading BaseAnchor,
+       skip offsets that are zero.  Works around bug in Doulos SIL Regular.
+
+2005-11-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango_markup.sgml docs/tmpl/coverage-maps.sgml
+       docs/tmpl/engines.sgml docs/tmpl/fonts.sgml
+       docs/tmpl/freetype-fonts.sgml docs/tmpl/glyphs.sgml
+       docs/tmpl/layout.sgml docs/tmpl/main.sgml
+       docs/tmpl/modules.sgml docs/tmpl/opentype.sgml
+       docs/tmpl/pango-engine-lang.sgml
+       docs/tmpl/pango-engine-shape.sgml
+       docs/tmpl/pango-renderer.sgml docs/tmpl/pangocairo.sgml
+       docs/tmpl/pangofc-decoder.sgml docs/tmpl/pangofc-font.sgml
+       docs/tmpl/pangofc-fontmap.sgml docs/tmpl/scripts.sgml
+       docs/tmpl/tab-stops.sgml docs/tmpl/text-attributes.sgml
+       docs/tmpl/win32-fonts.sgml docs/tmpl/x-fonts.sgml
+       docs/tmpl/xft-fonts.sgml pango/break.c pango/ellipsize.c
+       pango/fonts.c pango/pango-attributes.c pango/pango-color.c
+       pango/pango-context.c pango/pango-coverage.c
+       pango/pango-fontmap.c pango/pango-glyph-item.c
+       pango/pango-layout.c pango/pango-markup.c pango/pango-tabs.c
+       pango/pango-types.h pango/pango-utils.c
+       pango/pangoft2-render.c pango/pangox.c pango/pangoxft-render.c:
+       Various documentation improvements.
+
+2005-11-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-types.h: Added % to PANGO_DIRECTION_LTR in doc comments.
+
+2005-11-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/GLASS.utf8: Added redistribution permission.
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/khmer/khmer/khmer-fc.c: Fixed bug in khmer module state
+       table. (#320569, Jens Herden)
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Updated Tibetan shaper from Pema Geyleg. (#313513)
+
+       * examples/tibetan.utf: Added.
+
+       * examples/Makefile.am (EXTRA_DIST): tibetan.utf added.
+
+       * modules/tibetan/tibetan-fc.c: Updated Tibetan shaper that is
+       rewritten from scratch. Supports the number pre-combining mark,
+       illegal sequence detection, etc.
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/GLASS.utf8: Added.  The infamous "I Can Eat Glass" in
+       vairous languages.  Adopted from
+       http://www.columbia.edu/kermit/utf8.html#glass
+
+       * examples/Makefile.am (EXTRA_DIST): GLASS.utf8 added.
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c: Respect fontconfig reassignment of
+       pixelsize. (#317121, Funda Wang)
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Updates from #320666:
+
+       * pango/Makefile.am: Remove pango-easy-scripts-table.h.
+
+       * pango/pango-easy-scripts-table.h: Removed.  The "easy" table goes
+       into pango-scripts-table.h too.
+
+       * pango/pango-script-table.h: Include "easy" table.
+
+       * pango/pango-script.c: Change gunichar->script last_index caching
+       mechanism.  The caching is simply done by making int mid in the
+       bsearch static.
+
+       * tools/Makefile.am: Remove gen-easy-scripts-table.c.
+
+       * tools/gen-easy-scripts-table.c: Removed.  The "easy" table is
+       generated in gen-scripts-table.pl too.
+
+       * tools/gen-script-table.h: Generate "easy" table.
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/Makefile.am: Add X_CFLAGS to INCLUDES.  We normally are
+       picking them up from XFT_CFLAGS, but we don't require Xft any more
+       for X11. (#320576)
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_default_break): Remove g_utf8_strlen and
+       work around the logic.  Patch by Owen Taylor.
+
+2005-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/mini-fribidi/fribidi.c): Include string.h, needed for memset.
+
+       * pango/mini-fribidi/fribidi.c (fribidi_analyse_string_utf8):
+       Handle short-circuiting of the case when there are ltr letters,
+       no rtl strongs, and base dir is weak rtl.  Pointed out by Owen Taylor.
+
+2005-11-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_get_alignment): Fix get/set
+       typo in docs. (#321247, Masao Mutoh)
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fontmap.c (pango_cairo_update_context): Call
+       get_context_info after g_return_if_fail.
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_break): Do not call strlen when length < 0.
+       Leave it to language engines to handle NULL-terminated strings.
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/mini-fribidi/README, pango/mini-fribidi/fribidi.patch,
+       pango/mini-fribidi/fribidi.c: Short-circuit on LTR-only or RTL-only
+       text.
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/ftxgpos.c, pango/opentype/ftxopen.c: Remove debug
+       line that got in accidentally.
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (make_layout): Set layout wrapping to
+       PANGO_WRAP_WORD_CHAR if width is set for the layout.  Setting width
+       didn't have any effect previously.
+
+       * pango/pango-layout.c (process_item): Remove the excess
+       letter_spacing adjustment on the item width. (#168593, Damon Chaplin)
+
+       * pango/pango-markup.c (pango_parse_markup), pango/querymodules.c:
+       Replace g_string_new ("") with g_string_new (NULL).
+
+       * pango/pangoft2.c: Use g_malloc'ed memory for unknown FreeType2
+       error, instead of static buffer.
+
+2005-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/hebrew/.cvsignore, modules/khmer/.cvsignore,
+       modules/tibetan/.cvsignore: Minor clean up and adjustment.
+
+2005-11-07  Federico Mena Quintero  <federico@ximian.com>
+
+       Fixes bug #320666:
+
+       Instead of doing a bsearch() for every gunichar to map it to a
+       PangoScript, use a precomputed table for the first 8192 code
+       points.  Also, remember the last script that we computed on each
+       invocation; this will also help CJK and the other scripts above
+       U+2000.
+
+       This table also holds information on whether the characters in it
+       are paired characters.  We can use this to avoid doing the
+       expensive get_pair_index() call most of the time.
+
+       Many thanks to Matthias Clasen for his suggestions for this patch.
+
+       * tools/gen-easy-scripts-table.c: New program to generate
+       pango_easy_scripts_table.
+
+       * tools/Makefile.am: Build gen-easy-scripts-table.
+
+       * pango/pango-easy-scripts-table.h: New file with a mapping of the
+       first 8192 Unicode characters to their corresponding scripts.  The
+       table also says whether each character has a paired char or not.
+
+       * pango/Makefile.am (libpango_1_0_la_SOURCES): Add pango-easy-scripts-table.h.
+
+       * pango/pango-script-table.h: Remove everything below U+2000, and
+       add a note to that effect.
+
+       * pango/pango-script.c (pango_script_for_unichar_with_last_index):
+       New function.  This is the old pango_script_for_unichar(), but it
+       lets the caller keep around the computed index in
+       pango_script_table.  This works under the assumption that a
+       character is likely to be in the same script block as the
+       preceding character in a string.
+       (pango_script_for_unichar): First, do a quick check against the
+       pango_easy_scripts_table.  Then, do the expensive check with
+       pango_script_for_unichar_with_last_index().
+       (pango_script_iter_next): If the character is within the easy
+       script range, find out if it is a paired character by using
+       PANGO_PAIRED_CHAR_FLAG.
+       (struct _PangoScriptIter): Add a last_index_for_script_lookup
+       field.  We use this to maintain the last-lookup index from
+       pango_script_for_unichar_with_last_index().
+       (pango_script_iter_next): If the character is not within the easy
+       script range, use pango_script_for_unichar_with_last_index(), and
+       store the index in the last_index_for_script_lookup field of the
+       PangoScriptIter.
+
+2005-11-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-config.in, pango.spec.in: Removed. Not used for a long time,
+       and were out of date.
+
+       * .cvsignore: Remove pango-config and pango.spec.
+
+2005-11-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c: Update to handle new line-breaking types in the
+       Unicode 4.1 UAX#14. (#313907)
+
+       * configure.in: Bump required glib version to 2.9.0.  Needed for
+       above-mentioned line-breaking types.
+
+2005-11-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in, examples/argcontext.c examples/cairoview.c,
+       examples/renderdemo.c, examples/renderdemo.h examples/xftview.c,
+       modules/basic/basic-x.c, modules/hangul/hangul-fc.c,
+       modules/hebrew/hebrew-shaper.c, modules/hebrew/hebrew-shaper.h,
+       modules/indic/indic-fc.c, modules/indic/mprefixups.c,
+       modules/syriac/syriac-fc.c, pango/break.c pango/fonts.c,
+       pango/modules.c, pango/pango-coverage.c pango/pango-engine.c,
+       pango/pango-engine.h, pango/pango-fontmap.c,
+       pango/pango-fontset.c, pango/pango-impl-utils.h,
+       pango/pango-layout.c, pango/pango-layout.h,
+       pango/pango-renderer.c, pango/pango-script.c,
+       pango/pango-utils.c, pango/pangocairo-fc.h,
+       pango/pangocairo-font.c, pango/pangocairo-fontmap.c,
+       pango/pangocairo-private.h, pango/pangofc-decoder.c,
+       pango/pangofc-font.c, pango/pangofc-fontmap.c pango/pangoft2.c,
+       pango/pangox-fontcache.c, pango/pangox-fontmap.c pango/pangox.c,
+       pango/pangoxft-font.c, pango/querymodules.c,
+       pango/opentype/ftglue.c, pango/opentype/ftxgpos.c,
+       pango/opentype/ftxopen.c, pango/opentype/pango-ot-buffer.c,
+       pango/opentype/pango-ot-info.c,
+       pango/opentype/pango-ot-ruleset.c, tests/dump-boundaries.c,
+       tests/testboundaries.c, tests/testcolor.c tests/testiter.c,
+       tests/testscript.c: Turn various gcc warnings off. Adding const,
+       adding static, fully initializing structs, match signedness in
+       comparisons. (#317804)
+
+       * tests/testscript.c, tools/gen-script-for-lang.c:
+       (scripts_for_file): Pass error->message instead of error to fail(),
+       which was wrong.
+       (compare_lang): Fix typo comparing a and a instead of a and b.
+
+2005-11-04  Federico Mena Quintero  <federico@ximian.com>
+
+       Fixes #320665:
+
+       * pango/pangocairo-fcfont.c: Use a simple, fixed-size cache to map
+       gunichars to glyph indices within the font.  The cache is
+       described in detail here:
+       http://primates.ximian.com/~federico/news-2005-10.html#gtkfilechooser-profile-5
+       (GlyphCacheEntry): new structure to hold a gunichar and a PangoGlyph.
+       (struct _PangoCairoFcFont): Add a char_to_glyph_cache field.
+       (pango_cairo_fc_font_get_glyph): Allocate the char_to_glyph_cache
+       if needed.  We do it on demand because while many fonts will be
+       alive at any one time (in order to cover the whole Unicode space),
+       only very few of them will be actually accessed for glyph lookups.
+       (pango_cairo_fc_font_get_glyph): Look up the gunichar in the
+       cache, and replace the cache entry if necessary.
+       (pango_cairo_fc_font_finalize): Free the char_to_glyph_cache.
+
+2005-11-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fontmap.c: Use quarks for GObject data to improve
+       performance.  (Patch from Federico Mena Quintero)
+
+       * pango/modules.c (pango_module_load), pango/querymodules.c: Pass
+       G_MODULE_BIND_LAZY to g_module_open.  (Pointed by John Rice)
+
+2005-11-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-font.c: Use macros for locking and unlocking fonts
+       we know are valid to avoid redundant PANGO_IS_FC_FONT checks.
+       (Review by Matthias Clasen)
+
+2005-11-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/main.sgml, pango/Makefile.am, pango/pango-context.c
+       (itemize_state_init), pango/pango-utils.c, pango/pango-utils.h,
+       pango/pangox.c (itemize_string_foreach), pango/mini-fribidi/*:
+       Updated to FriBidi version 0.10.7 patched to handle UTF-8 directly.
+       Moved pango_log2vis_get_embedding_levels to pango-utils.c instead
+       of mini-fribidi.  (#317192, review by Matthias Clasen)
+
+2005-11-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/pangoft2pgm.c, renderdemo.c, renderdemo.h: Added a --runs
+       options, useful for profiling.  Misc cleanup, freeing memory. (from
+       #170414)
+
+2005-11-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Patches from #170414.  Reviewed by Matthias Clasen.
+
+       * pango/opentype/ftxgpos.c, pango/opentype/ftxgsub.c: Use call table
+       to dispatch different lookup types.
+
+       * pango/opentype/pango-ot-buffer.c, pango/opentype/pango-ot-ruleset.c:
+       Small cleanup.
+
+2005-10-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-engine.h: Add const to gchar * members of structs.
+       Shuts up gcc warnings. (#317676)
+
+2005-09-09  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-render.c (pango_cairo_show_glyph_string): unset
+       all part colors, since when drawing just a glyph string, 
+       prepare_run() isn't called. (#315599, Choe Hwanjin)
+
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line): NULL
+       out renderer->priv->line_state.
+
+2005-09-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/mini-fribidi/fribidi_get_type.c: Removed.  Not needed since
+       2003 or so!
+
+2005-09-22  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new): Move
+       the calculation of dpi and size earlier. Use the size variable
+       instad of isize when looking for a matching cached font. Isize was
+       supposed to be the same as size anyway. (Actually it was the same
+       only when LOGPIXELSY equalled 96 (which often is the default
+       value), see below.)
+
+       * pango/pangocairo-win32fontmap.c (pango_cairo_win32_font_map_init): 
+       Set dpi to the LOGPIXELSY value instead of hardcoding 96.
+
+       * pango/Makefile.am (libpangocairo_1_0_la_LIBADD): Need WIN32_LIBS
+       now.
+
+2005-09-14  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangocairo-win32font.c: Use identical glyph extents
+       cacheing as in pangocairo-fcfont.c. Huge performance improvement.
+
+       * README.win32: Update.
+
+2005-09-14  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangocairo-win32font.c (struct _PangoCairoWin32Font): Have
+       a list of metrics by language instead of just one metrics.
+
+       (pango_cairo_win32_font_get_scaled_font): Use the name cwfont
+       instead of cffont.
+
+       (free_metrics_info, pango_cairo_win32_font_finalize): Free the
+       metrics by language list.
+
+       (create_metrics_for_context): New helper function. Approximate the
+       character and digit widths correctly. (#314114)
+
+       (pango_cairo_win32_font_get_metrics): Use the list of metrics by
+       language. Call create_metrics_for_context() to measure metrics.
+       
+       (_pango_cairo_win32_font_new): Keep the PangoWin32Font objects in
+       the PangoWin32Face::cached_fonts, like the pangowin32 backend
+       does. 
+
+       PangoWin32Face::cached_fonts isn't really a proper cache. It's a
+       list with unbound length, one PangoWin32Font per size. Once there
+       is cacheing in cairo this can be dropped presumably? What does the
+       pangofc backend do? There are too many levels of cacheing going
+       on: we have the stuff in pangowin32-fontcache.c (unused now with
+       cairo), the PangoWin32FontMap::freed_fonts cache, and the
+       PangoWin32::cached_fonts list.
+
+       * pango/pangowin32-fontmap.c (pango_win32_fontmap_cache_remove,
+       pango_win32_fontmap_cache_clear): Use GQueue API instead of
+       manipulating pointers manually.
+
+       * pango/pangowin32-private.h
+       * pango/pangowin32.c: Move PangoWin32MetricsInfo to the private
+       header file, as also pangocairo-win32font.c uses it.
+       
+2005-09-13  Tor Lillqvist  <tml@novell.com>
+
+       * modules/basic/basic-win32.c: Drop unused font_cache variable and
+       the call to pango_win32_font_map_for_display() used in its
+       initialization, which caused an extra instance of
+       PangoWin32FontMap to be created, and fonts enumerated an extra
+       time.
+
+2005-09-12  Jean Brefort  <jean.brefort@normalesup.org>
+
+       * pango/pango-attributes.c: (pango_attr_list_splice): Fixed typo
+       (#316054).
+
+2005-09-11  Matthias Clasen  <mclasen@redhat.com>
+
+       * pango/pangocairo-fontmap.c (free_context_info): Use g_free()
+       to free g_new()-allocated data, otherwise the GLib memory profiler
+       becomes very unhappy.
+
+2005-09-05  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/pango-layout.c (pango_layout_set_auto_dir): Fixed typo in 
+       docs.
+
+2005-08-29  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/opentype/ottest.c, pango/opentype/disasm.c: Generate valid
+       XML output.  Dump LookupFlag too.
+
+2005-08-29  Behdad Esfahbod  <pango@behdad.org>
+
+       * examples/cairoview.c: Set cairo font resolution.
+
+       * tests/testboundaries.c: Remove unused Hangul Jamo macros.
+
+2005-08-29  Behdad Esfahbod  <pango@behdad.org>
+
+       * examples/HELLO.utf8: Add a few Arabic non-spacing marks to the
+       example.  Put the line with Pango in Greek-Japanese back in.
+
+2005-08-26  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/break.c: Protect against future line-break type additions in
+       glib Unicode module.
+
+2005-08-25  Tor Lillqvist  <tml@novell.com>
+
+       * pango/Makefile.am: Use pangocairo.def when linking libpangocairo
+       on Windows, instead of relying on GNU ld auto-exporting all public
+       symbols.
+
+       * pango/pangocairo.def: Add missing entries. (#314420, Kazuki
+       Iwamoto)
+
+2005-08-24  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangocairo-render.c (draw_error_underline): convert
+       from Pango units to doubles, fix some coordinate space problems
+       that had previously been fixed in GTK+. (#313015, Luis Villa)
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-14 b/ChangeLog.pre-1-14
new file mode 100755 (executable)
index 0000000..ca8916d
--- /dev/null
@@ -0,0 +1,928 @@
+2006-08-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.14.0 ===
+
+       * configure.in: Version 1.14.0
+       * configure.in: Require cairo-1.2.2 for the bugfixes it has
+
+       * NEWS: Updated.
+
+2006-08-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (parse_options): Don't ignore all trailing
+       whitespace in input text.  Only chop one newline.
+
+       * examples/viewer-main.c (main): setlocale(LC_ALL, "") to get GOption
+       work for UTF-8 text on the command line.
+
+2006-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.13.5 ===
+
+       * configure.in: Version 1.13.5
+
+       * NEWS: Updated.
+
+2006-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 121672 – Ra (vattu) not rendered properly in Malayalam
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot.c (shiftCharsLeft3), (indic_ot_reorder):
+       Reorder combinations of some three chars!
+
+2006-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 335811 – Some conjugates of Malayalam are wrong.
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot-class-tables.c: Update consonant tags to
+       fix conjugates.
+
+2006-07-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c: Add Cuneiform and Phoenician in the list
+       of supported scripts by this backend.  Phoenician is a simple RTL
+       script.
+
+       * pango/pango-script.c (pango_script_get_sample_language): Add
+       language code "nqo" for script N'Ko.
+
+2006-07-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.13.4 ===
+
+       * configure.in: Version 1.13.4
+
+       * NEWS: Updated.
+
+2006-07-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 336282 – Update to Unicode Character Database 5.0.0
+
+       * pango/mini-fribidi/fribidi_tab_char_type_2.i: Update to UCD 5.0.0.
+
+       * pango/mini-fribidi/README: Note the about update.
+
+       * pango/pango-script.h: Add new values for PangoScript.
+
+       * pango/pango-script.c (pango_script_for_unichar_bsearch): Default
+       to PANGO_SCRIPT_UNKNOWN.
+
+       * pango/pango-script.c (pango_script_get_sample_language): Add empty
+       entries for new script values.
+
+       * tools/gen-script-table.pl: Default to PANGO_SCRIPT_UNKNOWN as is
+       now the default value of Scripts.txt in UCD 5.0.0.
+
+       * pango/pango-script-table.h: Regenerated against UCD 5.0.0.
+
+       * docs/tmpl/scripts.sgml: Document new script types.
+
+       * tools/gen-script-for-lang.c (scripts_for_line): Ignore data at the
+       end of lines as many .orth files in fontconfig now list the character
+       name there.
+
+       * pango/pango-script-lang-table.h: Regenerate against newer
+       fontconfig 2.3.9x.
+
+2006-07-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 347073 – Allow empty GPOS table
+
+       * pango/opentype/harfbuzz-open.c (_HB_OPEN_Load_ScriptList): Don't
+       err on empty GPOS/GSUB tables.
+
+2006-07-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_get_extents): Improve docs.
+
+2006-07-17  Richard Hult  <richard@imendio.com>
+
+       Bug 347021 – atsui crash when a matching font cannot be found.
+       Patch from Brian Tarricone.
+
+       * pango/pangoatsui-fontmap.c (pango_atsui_font_map_load_font):
+       Bail out if best desc or best face isn't found.
+
+2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.13.3 ===
+
+       * configure.in: Version 1.13.3
+
+       * NEWS: Updated.
+
+2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 330603 – pango_scan_int invokes undefined behaviour
+
+       * pango/pango-utils.c (pango_scan_int): Use strtol.
+
+2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 315599 – PangoAttribute remains in wrong context.
+
+       * pango/pangocairo-render.c (_pango_cairo_do_glyph_string): Rever my
+       commit that removed Owen's fix from last year!
+
+2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 163677 – pango_attr_list_splice: inconsistent docs
+       Patch from Morten Welinder
+
+       * pango/pango-attributes.c (pango_attr_list_splice): Improve docs.
+
+2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 345070 – [ml_IN] not render for combination with ZWJ
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot-class-tables.c: Process ZWJ for Malayalam.
+
+2006-07-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 345274 – list of new symbols for each version is missing in docs
+       Patch from Priit Laes
+
+       * docs/pango-docs.sgml: Generate index of deprecated, and new symbols
+       per version.
+
+2006-07-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 346297 – autogen doesn't work with automake-1.6
+       Patch from Priit Laes
+
+       * autogen.sh, configure.in: Require automake 1.7.
+
+2006-07-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/glyphstring.c (pango_glyph_string_get_width):
+       * pango/pango-glyph.h:
+       * pango/pango-layout.c (pango_layout_line_index_to_x),
+       (pango_layout_line_x_to_index), (pango_layout_line_get_x_ranges):
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):  Fix silly
+       error in implementation of pango_glyph_string_get_width(), and also
+       remove unused font parameter from its signature.
+
+2006-07-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Remove obsolete checks for varargs that were
+       preivously used by the OpenType code, but are not needed with
+       HarfBuzz anymore.
+
+2006-07-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 135683 – Cache glyphstring extents
+
+       * pango/pango-layout.c (pango_layout_line_index_to_x),
+       (pango_layout_line_x_to_index), (pango_layout_line_get_x_ranges):
+       Use pango_glyph_string_get_width in most places in PangoLayout.
+
+2006-07-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 135683 – Cache glyphstring extents
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       * pango/pango.def:
+       * pango/pango-glyph.h:
+       * pango/glyphstring.c (pango_glyph_string_get_width): New function.
+       Much faster than calling pango_glyph_string_extents and using
+       logical_rect.width.
+
+       * pango/pango-renderer.c (add_underline), (add_strikethrough),
+       (pango_renderer_draw_layout_line): Use the new function for
+       optimization.
+
+2006-07-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 344766 – Memory leak in get_ruleset() in modules/basic/basic-fc.c
+
+       * pango/pango-ot-private.h: Rename PANGO_OT_IS_RULESET is
+       PANGO_IS_OT_RULESET.
+
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_finalize),
+       (pango_ot_ruleset_new), (pango_ot_ruleset_add_feature),
+       (pango_ot_ruleset_substitute), (pango_ot_ruleset_position):
+       Use weak pointers to reference ruleset->info, to avoid circular
+       dependency.
+
+2006-07-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-matrix.c: New file.
+       * pango/pango-utils.c: Move all pango_matrix_* stuff into a separate
+       file.
+
+2006-06-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 345600 – cvs build error in pango/opentype/Makefile
+
+       * pango/opentype/Makefile.am: Rename variable SOURCES to MAINSOURCES.
+       Some automake versions seem to use it or something.
+
+2006-06-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 345511 – -no-undefined problem with new libtool
+
+       * configure.in: Remove -no-undefined on non-Win32 systems.  That
+       doesn't make any sense, and makes latest libtool not create shared
+       libraries.
+
+2006-06-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * autogen.sh: Just call gnome-autogen.sh.  The old autogen.sh had
+       poor version checking and was borking with libtool 2.x.
+
+       * Makefile.am:
+       * configure.in:
+       * pango-zip.sh.in:
+       * pango/Makefile.am:
+       * pango/pango.rc.in:
+       * pango/pangoft2.rc.in:
+       * pango/pangowin32.rc.in: Rename LT_* variables such that autoconf
+       doesn't err on "possibly undefined macros".
+
+2006-06-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.13.2 ===
+
+       * configure.in: Version 1.13.2
+
+       * NEWS: Updated.
+
+2006-06-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info):
+       Set matrix on the context we create to load minifont.
+
+2006-06-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 326960 – hex box drawing for win32 and atsui backends of cairo
+
+       Hans already fixed win32.
+
+       * pango/pangocairo-atsuifont.c (compute_glyph_extents): Handle
+       PANGO_GLYPH_UNKNOWN_FLAG. 
+
+2006-06-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 343717 – License information in unclear.
+
+       * modules/arabic/arabic-ot.c, modules/syriac/syriac-ot.c: Fix
+       dual-license information and refer to pango/opentype/COPYING.
+
+2006-06-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Followup on previous change.
+
+       * pango/pango-renderer.c: Note that pango_renderer_draw_rectangle
+       and pango_renderer_draw_error_underline should be called with
+       active renderer.
+
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs),
+       (_pango_cairo_do_glyph_string), (_pango_cairo_do_layout_line),
+       (_pango_cairo_do_layout): Remove excess cairo_save/restore() calls.
+       
+       * pango/pangocairo-render.c (_pango_cairo_do_error_underline): Don't
+       go through renderer.
+
+2006-06-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 343355 – Add pango_cairo_show_error_underline &
+       pango_cairo_error_underline_path
+       Based on patch by LingNing Zhang.
+
+       * docs/pango-sections.txt, docs/tmpl/pangocairo.sgml,
+       pango/pangocairo.def, pango/pangocairo.h, pango/pangocairo-render.c:
+       New functions pango_cairo_show_error_underline and
+       pango_cairo_error_underline_path.
+
+       * pango/pangocairo-render.c (_pango_cairo_do_glyph_string),
+       (_pango_cairo_do_layout_line), (_pango_cairo_do_layout),
+       (_pango_cairo_do_error_underline), (pango_cairo_show_glyph_string),
+       (pango_cairo_show_layout_line), (pango_cairo_show_layout),
+       (pango_cairo_show_error_underline),
+       (pango_cairo_glyph_string_path), (pango_cairo_layout_line_path),
+       (pango_cairo_layout_path), (pango_cairo_error_underline_path): Merge
+       similar code for pango_cairo_show_* and pango_cairo_*_path functions.
+
+2006-06-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 343966 – pango Cygwin build fixes
+       Patch from Cygwin Ports maintainer.
+
+       * configure.in: Add missing space.
+       * tests/Makefile.am: Add $(EXEEXT) where appropriate.
+
+2006-06-05  Hans Breuer  <hans@breuer.org>
+
+       * pango/pangowin32-fontmap.c(pango_win32_font_map_init) : synthesize
+       some italic variants for fonts no having them already. This fixes
+       bug #343796 and for the italic case also bug #110521.
+
+       * pango/pangocairo-win32font.c(compute_glyph_extents) : not only 
+       handle PANGO_GLYPH_EMPTY but also PANGO_GLYPH_UNKNOWN_FLAG. 
+       The latter is needed to have proper sizing of the "hex box" for 
+       missing glyphs. It also stops cairo complaining about unknown glyphs.
+       Fixes part of bug #343796.
+       
+       * pango/makefile.msc : create $(PRJ_TOP)\config.h.win32. (Not 
+       changing in years does not necessarily mean it is not used)
+
+       * pango/testfonts.c : make family_name survive 
+       pango_font_description_free(), it is used later on
+       
+2006-06-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c (pango_find_base_dir): Don't g_return if text ==
+       NULL and length == 0.
+
+2006-05-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 341138 – Using TTC font, Gtk2 programs begin to eating big memory
+       and have many cpu usage.
+       Patch from Yong Li.
+
+       * pango/opentype/ftglue.c (_hb_ftglue_face_goto_table): TrueType table
+       offsets are absolute, not relative.
+
+2006-05-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 336153 – Mark to mark positioning (Lookup Type 6) isn't correct
+       when using MarkAttchmentType
+       Patch from Tin Myo Htet.
+
+       * pango/opentype/harfbuzz-gpos.c (Lookup_MarkMarkPos): Ignore marks
+       of non-matchin attachment type.
+
+2006-05-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info): Set
+       absolute_size, since we are using describe_with_absolute_size now...
+
+2006-05-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 333984 – pango_language_from_string improvements
+
+       * pango/pango-utils.c (lang_equal), (lang_hash),
+       (pango_language_from_string): Allow digits in language tags as per
+       RFC-3066, and stop on first invalid char.  Previous
+       pango_language_from_string ("en_US.UTF-8") was returning "en-usutf-",
+       now it returns "en-us".
+       
+       * pango/pango-utils.c (pango_language_matches): Allow other common
+       separators in the language list (colon, comma, and space).
+
+2006-05-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 125378 – Better underline thickness handling
+
+       * pango/pango-layout.c (pango_layout_run_get_extents): Include
+       underline in ink extents.
+
+2006-05-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (draw_error_underline): Fix offset to
+       center the underline in requested rectangle.
+
+       * pango/pangocairo-render.c (pango_cairo_show_glyph_string): Remove
+       unncessary renderer activation and cleanup.
+
+2006-05-23  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32.c (pango_win32_font_class_init): Initialize the
+       describe_absolute method pointer correctly.
+       (pango_win32_font_describe): Scale size to points which is what
+       pango_font_description_set_size() wants. There has been several
+       bugs opened around this issue, with more or less misleading
+       guesses. See for instance #314114. Thanks to Behdad for finally
+       noticing the real problem here.
+
+2006-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 342525 – With PangoFc and PangoWin32, approximate digit width is
+       not what it says
+
+       * pango/pangocairo-win32font.c (max_glyph_width),
+       (create_metrics_for_context): Use max digit width instead of average.
+
+       Reverted the following changes:
+
+       * pango/pangofc-font.c (pango_fc_font_create_metrics_for_context):
+       Likewise for PangoFc.  Compute average instead of max.
+       (max_glpyh_with): Now unused, drop.
+
+       * pango/pangowin32.c (pango_win32_font_get_metrics): Calculate
+       average digit width correctly, not as max of the digit
+       widths. (#342525) Note that this code doesn't really get much used
+       currently (instead the code in pangocairo-win32font.c is used),
+       fixed only for completeness.
+       (max_glpyh_with): Now unused, drop.
+
+2006-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-font.h, pango/fonts.c: New function
+       pango_font_describe_with_absolute_size().
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info):
+       * pango/pangocairo-win32font.c (create_metrics_for_context):
+       * pango/pangofc-font.c (pango_fc_font_class_init),
+       (pango_fc_font_describe_absolute),
+       (pango_fc_font_create_metrics_for_context):
+       * pango/pangowin32.c (pango_win32_font_class_init),
+       (pango_win32_font_get_metrics), (pango_win32_font_describe),
+       (pango_win32_font_describe_absolute): Implement and use
+       PangoFontClass->describe_absolute.
+
+2006-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 339730 – Pango needlessly falls back away from a Type 1 font into
+       a TTF font
+
+       * pango/fonts.c (find_field): Fix strncmp usage.
+
+2006-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 342562 – Support absolute sizes in
+       pango_font_description_to/from_string
+
+       * pango/fonts.c (parse_size), (pango_font_description_from_string),
+       (pango_font_description_to_string): Accept and generate a "px" suffix
+       to identify absolute font sizes.
+
+2006-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 341922 – pango should handle more characters as zero width
+       Patch from Roozbeh Pournader
+
+       * pango/pango-utils.c (pango_is_zero_width): Handle the following too:
+
+               U+00AD  SOFT HYPHEN
+               U+034F  COMBINING GRAPHEME JOINER
+               U+2060  WORD JOINER
+               U+2061  FUNCTION APPLICATION
+               U+2062  INVISIBLE TIMES
+               U+2063  INVISIBLE SEPARATOR
+
+2006-05-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 342525 – With PangoFc and PangoWin32, approximate digit width is
+       not what it says
+
+       * pango/pangofc-font.c (pango_fc_font_create_metrics_for_context):
+       Likewise for PangoFc.  Compute average instead of max.
+       (max_glpyh_with): Now unused, drop.
+
+2006-05-22  Tor Lillqvist  <tml@novell.com>
+
+       Bug 342525 – With PangoFc and PangoWin32, approximate digit width is
+       not what it says
+
+       * pango/pangowin32.c (pango_win32_font_get_metrics): Calculate
+       average digit width correctly, not as max of the digit
+       widths. (#342525) Note that this code doesn't really get much used
+       currently (instead the code in pangocairo-win32font.c is used),
+       fixed only for completeness.
+       (max_glpyh_with): Now unused, drop.
+       
+2006-05-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fontmap.c: Remove unused struct
+       _cairo_font_options.
+
+2006-05-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 342079 – pangoatsui-private.h missing from release
+
+       * pango/Makefile.am (libpangocairo_1_0_la_SOURCES):
+       Include pangoatsui-private.h.
+
+2006-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.13.1 ===
+
+       * configure.in: Version 1.13.1
+
+       * NEWS: Updated.
+
+2006-05-15  Richard Hult  <richard@imendio.com>
+
+       Bug 322374 – Examples does not build on MacOS X
+
+       * pango/Makefile.am (libpangocairo_1_0_la_LDFLAGS): Add the necessary
+       frameworks to make this build with -no-undefined.
+
+2006-05-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-item.c (pango_item_split): Don't copy item before
+       g_return_if_fail'ing it for NULL. (Coverity issue id=18509&runid=43)
+
+2006-05-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_face_list_sizes): Fix possible NULL
+       dereference. (Coverity issues id=17770&runid=43)
+
+2006-05-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 71033 – make size 0 fonts work
+
+       * pango/fonts.c (pango_font_description_set_size): Update docs to note
+       a size value of zero may have been set explicitly.
+
+       * pango/pango-context.c (pango_context_load_font): Don't warn if font
+       size if zero.
+
+       * pango/pangoatsui-fontmap.c (pango_atsui_font_map_load_font):
+       * pango/pangox-fontmap.c (pango_x_font_map_load_font): Don't return if
+       size is zero (probably will fail with no fonts found.)
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_default_substitute): Xft
+       chokes on size zero.  Reassing PIXEL_SIZE to 1.0 if it's zero.
+
+2006-05-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 340229 – pango_font_description_from_string does not do bound
+       checking
+
+       * pango/fonts.c (pango_font_description_set_size),
+       (pango_font_description_set_absolute_size), (parse_size):
+       * pango/pango-markup.c (span_parse_func): Don't accept negative font
+       sizes, and make sure sizes don't overflow.
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 329483 – hinting hexbox in cairo backend doesn't handle absolute
+       font size
+       Bug 340040 – pangocairo hex box hinting falls apart with PS/PDF
+       backends
+
+       * configure.in: Require cairo >= 1.1.2.  Also pass -no-undefined on all
+       systems.
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info): Fix
+       hexbox info to respect absolute sizes and no metrics hinting settings.
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 329664 – Move gunichar_to_glyph cache from PangoCairoFcFont to
+       PangoFcFont
+       Patch from LingNing Zhang.
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_finalize),
+       (pango_cairo_fc_font_glyph_extents_cache_init),
+       (pango_cairo_fc_font_get_glyph_extents_cache_entry),
+       (pango_cairo_fc_font_class_init), (pango_cairo_fc_font_init):
+       * pango/pangofc-font.c (pango_fc_font_finalize),
+       (pango_fc_font_real_get_glyph): Move gunichar->glyph cache to
+       pangofc-font.c
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 329547 – pango_layout_get_pixel_extents and
+       pango_layout_get_pixel_size cause off-by-one metrics
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       * pango/pango-types.h: Define PANGO_PIXELS_FLOOR and PANGO_PIXELS_CEIL.
+
+       * pango/pango-layout.c (pango_layout_get_pixel_extents),
+       (pango_layout_get_pixel_size): Make sure logical rects are
+       consistent and ink rects are inclusive.
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/atsui-fonts.sgml:
+       * docs/tmpl/coverage-maps.sgml:
+       * docs/tmpl/engines.sgml:
+       * docs/tmpl/fonts.sgml:
+       * docs/tmpl/freetype-fonts.sgml:
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/layout.sgml:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/modules.sgml:
+       * docs/tmpl/opentype.sgml:
+       * docs/tmpl/pango-engine-lang.sgml:
+       * docs/tmpl/pango-engine-shape.sgml:
+       * docs/tmpl/pango-renderer.sgml:
+       * docs/tmpl/pangocairo.sgml:
+       * docs/tmpl/pangofc-decoder.sgml:
+       * docs/tmpl/pangofc-font.sgml:
+       * docs/tmpl/pangofc-fontmap.sgml:
+       * docs/tmpl/scripts.sgml:
+       * docs/tmpl/tab-stops.sgml:
+       * docs/tmpl/text-attributes.sgml:
+       * docs/tmpl/utils.sgml:
+       * docs/tmpl/win32-fonts.sgml:
+       * docs/tmpl/x-fonts.sgml:
+       * docs/tmpl/xft-fonts.sgml:
+       * pango/modules.c:
+       * pango/pango-coverage.c: Doc updates.
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 337594 – pango_glyph_string_extents_range possible bug
+
+       * pango/glyphstring.c (pango_glyph_string_extents_range): Add offset
+       for first glyph too.
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 333771 – Use gmodule-no-export-2.0 instead of gmodule-2.0 in
+       pango-uninstalled.pc.in
+
+       * pango-uninstalled.pc.in: Require gmodule-no-export-2.0, like
+       pango.pc.in does.
+
+2006-04-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 307196 – Unhinted fonts are measured incorrectly and drawing
+       problems occur as a result
+
+       * pango/pangofc-font.c (get_face_metrics),
+       (pango_fc_font_get_raw_extents):
+       * pango/pangoxft-font.c (_pango_xft_font_new): Rollback previous
+       change that forced metrics hinting always on.
+
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new): Set fcfont
+       metrics hinting based on cairo font options.
+
+2006-04-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 339749 – pango_language_from_string issues
+       Patch from Morten Welinder.
+
+       * pango/pango-utils.c (lang_equal): Make the equal function symmetric.
+
+2006-04-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-font.c (get_face_metrics),
+       (pango_fc_font_get_raw_extents): Don't use is_hinted.  Metrics are
+       always hinted now.
+
+       * pango/pangoxft-font.c (_pango_xft_font_new): Remove hack that forced
+       is_hinted to TRUE.
+
+2006-04-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pangocairo.pc.in, pangocairo-uninstalled.pc.in: Remove CAIRO_CFLAGS
+       from Cflags, as we Require cairo already.
+
+2006-04-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-impl-utils.h:
+       * pango/fonts.c (pango_font_get_glyph_extents),
+       (pango_font_get_metrics), (pango_font_get_font_map):
+       * pango/pangocairo-render.c (pango_cairo_show_glyph_string),
+       (pango_cairo_glyph_string_path): Add more warning_history items and
+       handle more font failures, to make sure that instead of crashing,
+       gedit runs and draws empty boxes when pango.modules is not set
+       properly.
+
+2006-04-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 339747 – pango_font_metrics_get_approximate_digit_width docs
+
+       * pango/fonts.c: Fix typo in docs.
+
+2006-04-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 339749 – pango_language_from_string issues
+
+       * pango/pango-utils.c (pango_language_from_string): Avoid lookup that
+       we know fails...
+
+2006-04-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.13.0 ===
+
+       * configure.in: Version 1.13.0
+
+       * NEWS: Updated.
+
+2006-04-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/HELLO.utf8: Add Sinhala. (patch from Harshula)
+
+2006-04-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 338343 – Bad cast
+
+       * pango/pango-layout.c (pango_layout_set_text): Fix cast.
+
+2006-04-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangox.c (get_font_metrics_from_subfonts): Check for nullity
+       somewhere else.
+
+2006-04-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gpos.c: Fix loop variables. (coverity
+       found bug.)
+
+2006-04-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 337924 – cleanups for issues reported by various compilers
+       Patch from Kjartan Maraas.
+
+       * examples/viewer-x.c (update):
+       * modules/arabic/arabic-fc.c (fallback_shape),
+       (arabic_engine_shape):
+       * modules/basic/basic-fc.c (fallback_shape), (basic_engine_shape):
+       * modules/basic/basic-x.c:
+       * modules/hangul/hangul-fc.c:
+       * modules/hebrew/hebrew-fc.c (hebrew_engine_shape):
+       * modules/indic/indic-fc.c:
+       * modules/khmer/khmer-fc.c:
+       * modules/syriac/syriac-fc.c:
+       * modules/thai/thai-fc.c:
+       * modules/tibetan/tibetan-fc.c:
+       * pango/break.c:
+       * pango/modules.c:
+       * pango/opentype/ftglue.c (_hb_ftglue_face_goto_table):
+       * pango/pango-attributes.c (pango_attr_list_filter):
+       * pango/pango-engine.c:
+       * pango/pango-fontset.c:
+       * pango/pango-layout.c (pango_layout_set_text),
+       (pango_layout_xy_to_index), (pango_layout_get_cursor_pos):
+       * pango/pango-markup.c (text_handler):
+       * pango/pango-utils.c (read_alias_file):
+       * pango/pangocairo-fcfont.c (G_DEFINE_TYPE_WITH_CODE):
+       * pango/pangocairo-fcfontmap.c (G_DEFINE_TYPE_WITH_CODE):
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info):
+       * pango/pangox-fontmap.c (pango_x_make_matching_xlfd):
+       * tests/dump-boundaries.c (fail):
+       Remove unused variables.  Remove excess semicolon after DEFINE_TYPE
+       macros.
+
+2006-04-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * config.h.win32, examples/makefile.msc: Removed.  Have not been
+       updated since Feb 2001.
+
+2006-04-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c: Fix broken changes I made :).
+
+2006-04-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Fix minor bugs reported by the Coverity scan report.
+
+       * pango/opentype/harfbuzz-gdef.c (HB_GDEF_Build_ClassDefinition):
+       * pango/opentype/harfbuzz-gpos.c (HB_GPOS_Query_Scripts),
+       (HB_GPOS_Query_Languages), (HB_GPOS_Query_Features): Do not access
+       structs before we check them for nullity.
+
+       * pango/pango-layout.c (pango_layout_index_to_line),
+       (pango_layout_index_to_line_and_extents),
+       (pango_layout_index_to_pos): Check for invalid iterators outside the
+       loop, so we don't crash.
+       
+       * pango/pango-layout.c (pango_layout_line_x_to_index): Set
+       char_trailing instead of trailing in one of too many paths.  Should
+       have been a typo.
+
+       * pango/pangox.c (get_font_metrics_from_subfonts): Check for nullity
+       somewhere.
+
+2006-04-09  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-utils.c (pango_quantize_line_geometry): Fix typo in
+       doc comment.
+
+2006-04-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 337821 – invisible unicode chars are visible next to hebrew chars
+
+       * modules/hebrew/hebrew-fc.c: Handle zero_width chars in fallback
+       shaper too.
+
+       * modules/hebrew/hebrew-shaper.c: Remove unused Unicode<->ISO8859
+       tables.
+
+2006-04-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Incorrect text rendering when in x86 64-bit precision mode
+       https://bugs.freedesktop.org/show_bug.cgi?id=5200
+
+       * pango/pangocairo-fcfont.c:Round metrics when converting
+       to Pango units.
+       
+2006-04-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 337502 – Win32 build fix
+       Patch from Alexander Larsson.
+
+       * pango/pangocairo-fontmap.c: Fix order of checking for freetype and
+       win32 cairo backends to match the constructor.
+
+       * pango/pangoft2.def: Add missing symbol
+
+2006-04-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype: Update from HarfBuzz.  Lars Knoll fixed all the
+       warnings.
+
+2006-04-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c, pango/querymodules.c: Fix a few warnings.
+
+2006-04-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-impl.h: Make sure TTAG_GDEF and frineds are
+       defined, needed for FreeType <= 2.1.7 (pointed by Tim Janik).
+
+2006-04-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 337029 – pango/fonts.c: Illegal structure initialization
+
+       * pango/fonts.c: Change NULL's to ""'s after previous change, and fix
+       code to follow.
+
+2006-03-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c:
+       * pango/pango-utils.c:
+       * pango/pangox-fontmap.c:
+       * pango/pangoft2.c (_pango_ft2_ft_strerror): Change char* to
+       char[] in the ft error table, to avoid relocations.
+
+2006-03-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 336026 – Make fallback shaper in modules work
+       Patch from Denis Jacquerye.
+
+       * pango/pango-ot-buffer.c (pango_ot_buffer_output): Call
+       pango_fc_font_kern_glyphs if GPOS not applied.
+
+2006-03-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 334802 – Using plain integer as NULL pointer
+
+       * pango/mapping.c (pango_glyph_string_x_to_index): Fix type assigining
+       trailing instead of *trailing.
+
+       * pango/pango-layout.c (pango_layout_line_new): Use NULL instead of 0.
+
+2006-03-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Convert pango/opentype to the new project called HarfBuzz.
+
+       * pango/opentype/*: Restructured.
+
+       * pango/pango-ot-*: Updated to use HarfBuzz symbol names.
+
+2006-03-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 335840 – Typo in including Xft.
+
+       * pangoxft-render.h: Define _XFT_NO_COMPAT_ instead of _XFT_NO_COMPAT.
+
+2006-03-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/*.[ch]: Make #include syntax in sources and headers more
+       consistent.  We are using the "..." syntax for all Pango headers
+       in source files, and <...> syntax in all header files, except for
+       including private headers, that we use "...".
+
+2006-03-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Hook up pango-utils.h into the documentation, as we are installing
+       it anyway.  Move some internal stuff to pango-impl-utils.h and make
+       source files include that instead.
+
+2006-03-30  Tor Lillqvist  <tml@novell.com>
+
+       Fix blurred underlines on Win32 (#332656):
+       
+       * pango/pango-utils.c (pango_quantize_line_geometry):
+       New public function. Used to be the static quantize_position() in
+       pangofc-font.c
+
+       * pango/pango-utils.h: Declare it.
+
+       * pango/pango.def: Here, too.
+
+       * pango/pangofc-font.c (quantize_position): Remove.
+       (get_face_metrics): Use pango_quantize_line_geometry() instead.
+
+       * pango/pangocairo-win32font.c (create_metrics_for_context): Call
+       pango_quantize_line_geometry() for underline and strikethrough
+       geometries.
+
+2006-03-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/ottest.c: Don't err on Table_Missing.
+
+2006-03-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Create pango-1-12 stable branch.
+
+       * ChangeLog.pre-1-12: Created.
+
+       * Makefile.am: Updated to dist above.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-16 b/ChangeLog.pre-1-16
new file mode 100755 (executable)
index 0000000..47559ee
--- /dev/null
@@ -0,0 +1,1827 @@
+2007-02-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.16.0 ===
+
+       * configure.in: Version 1.16.0
+
+       * configure.in: Require cairo 1.2.6 because of its important fixes.
+
+       * NEWS: Updated.
+
+       * README: Updated.
+
+2007-02-20  Stefan Kost  <ensonic@users.sf.net>
+
+       Xrefs for glib and cairo in the docs. Add object hierarchy to the docs.
+
+       * configure.in:
+       * docs/Makefile.am:
+       * docs/pango-docs.sgml:
+
+2007-02-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 409212 – Missing link flag prevents build with "-z defs" ld flags
+       Patch from Loïc Minier
+
+       * configure.in: Add xrender to pkg-config requirements for pangoxft.
+
+2007-02-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 409212 – Missing link flag prevents build with "-z defs" ld flags
+       Patch from Loïc Minier
+
+       * pango/Makefile.am: Add $(X_LIBS) to pangoxft_LDADD.
+
+2007-02-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355987 – choosing font/shaper for spaces breaks Arabic runs on
+       spaces
+
+       * pango/pango-context.c (itemize_state_process_run): Don't choose
+       shaper for ASCII space char.
+
+2007-02-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 407087 – autogen.sh wants automake-1.7
+
+       * autogen.sh: Require automake 1.9, like configure.in does.
+
+2007-02-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.6 ===
+
+       * configure.in: Version 1.15.6
+
+       * NEWS: Updated.
+
+2007-02-13  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangowin32-fontmap.c (pango_win32_insert_font): If
+       something has gone wrong in setting the family of the font
+       description, don't bother with the font as it isn't usable and
+       will cause crashes later anyway. (#404295)
+
+2007-01-31  Tor Lillqvist  <tml@novell.com>
+
+       * pango/Makefile.am: Use pangocairo.def only on Win32, not
+       Cygwin. (#402373, "paul")
+
+2007-01-30  Tor Lillqvist  <tml@novell.com>
+
+       * pango-zip.sh.in: Include also the COPYING file in the zipfiles.
+
+       * Makefile.am (EXTRA_DIST): Include just pango-zip.sh.in in the
+       tarball, not pango-zip.sh.
+
+2007-01-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_get_metrics),
+       (pango_font_get_font_map): Remove PANGO_IS_FONT() check. Just
+       do NULL-checking.
+
+2007-01-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 399738 – pango 1.15.5 won't compile on Mac OS X: 'FC_HINT_STYLE'
+       undeclared (first use in this function)
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Don't use FC_HINT_STYLE
+       if it's not defined (old fontconfig versions).
+
+2007-01-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.5 ===
+
+       * configure.in: Version 1.15.5
+
+       * NEWS: Updated.
+
+2007-01-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-glyph-item.c (_pango_glyph_item_iter_next_cluster):
+       Fix the "menu accels are two chars wide" bug that was introduced
+       by the recent changes in this function, in 1.15.4.  Apparently
+       glyph_index means separate things in next_cluster and prev_cluster.
+
+2007-01-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_get_metrics): Populate metrics for
+       NULL/broken fonts.  Now our glyph boxes have underlines too. Yay!
+
+2007-01-21  Tor Lillqvist  <tml@novell.com>
+
+       * configure.in: Add AC_MSG_RESULT([no]) to the failed branch of
+       PKG_CHECK_MODULES tests to make the output from configure
+       cleaner.
+
+2007-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 398238 – pangorc file missing from tests directory
+
+       * pango-view/Makefile.am:
+       * tests/Makefile.am:
+       Don't use $<. Doesn't work with Sun's make.
+
+2007-01-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Require automake 1.9.
+
+2007-01-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Respect FC_HINT_STYLE.
+       Patch has been in Fedora for ages.
+
+2007-01-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.4 ===
+
+       * configure.in: Version 1.15.4
+
+       * NEWS: Updated.
+
+2007-01-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 395328 – Map kATSDeletedGlyphcode to PANGO_GLYPH_EMPTY
+
+       * modules/basic/basic-atsui.c (set_glyph): Handle
+       kATSDeletedGlyphcode.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-render.c (make_layout): Fix typo when rounding
+       to points.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 397337 – Use is_ellipsized and is_wrapped to optimize property
+       changes
+
+       * pango/pango-layout.c (pango_layout_set_wrap),
+       (pango_layout_set_ellipsize): Using is_ellipsized and is_wrapped, 
+       only clear lines if wrap/ellipsize change has any effect on the lines.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       *.c, *.h: Removed spaces followed b tabs.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       *.c, *.h: Replace preceding sequences of 8 spaces with tabs.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/pangowin32tobmp.c (SaveBitmap):
+       * modules/tibetan/tibetan-fc.c:
+       Replace C++-style // comments with C-style /* */ ones.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       *.c, *.h: Drop trailing whitespace.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328585 – Need to know if a layout has unknown glyphs
+       Patch from LingNing Zhang
+
+       * pango/pango-layout-private.h:
+       * pango/pango-layout.c (pango_layout_init), (pango_layout_copy),
+       (pango_layout_get_unknown_glyphs_count),
+       (pango_layout_clear_lines):
+       * pango/pango-layout.h:
+       New public function:
+
+               pango_layout_get_unknown_glyphs_count()
+
+       * pango/pango.def:
+       * docs/tmpl/layout.sgml:
+       * docs/pango-sections.txt:
+       Update.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 326693 – PangoLayouts should be query-able about their
+       effective properties (width / wrapped / ellipsized / etc)
+
+       * pango/pango-layout-private.h:
+       * pango/pango-layout.c (pango_layout_init), (pango_layout_copy),
+       (pango_layout_is_wrapped), (pango_layout_clear_lines),
+       (process_line):
+       * pango/pango-layout.h:
+       New public function:
+
+               pango_layout_is_wrapped()
+
+       * pango/pango.def:
+       * docs/tmpl/layout.sgml:
+       * docs/pango-sections.txt:
+       Update.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 397327 – pango-layout.c: 'pango_layout_is_ellipsized' must return
+       a value
+
+       * pango/pango-layout.c (pango_layout_is_ellipsized): Use
+       g_return_val_if_fail() instead of g_return_if_fail().
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/ellipsize.c (get_cluster_width): Fix width calculation.
+       Was causing ellipsization to stop at a zero-width glyph that was
+       part of a bigger cluster.
+
+       * pango/ellipsize.c (remove_one_span): Skip over zero-width clusters,
+       otherwise ellipsization will stop at a zero-width cluster.
+
+       * pango/pango-glyph-item.c (_pango_glyph_item_iter_next_cluster),
+       (_pango_glyph_item_iter_prev_cluster): Fix yet another bug with
+       in prev_cluster that was making it not work for any interesting
+       cluster.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c (point_on_path), (draw_text),
+       (draw_twisted), (draw_dream), (draw_wow), (main):
+       Improve text-on-path example.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Generate .bz2 tarball instead of .gz.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/Makefile.am:
+       * pango-view/renderdemo.c:
+       * pango-view/renderdemo.h:
+       * pango-view/viewer-main.c:
+       * pango-view/viewer-pangocairo.c:
+       * pango-view/viewer-pangoft2.c:
+       * pango-view/viewer-pangox.c:
+       * pango-view/viewer-pangoxft.c:
+       * pango-view/viewer-render.c:
+       * pango-view/viewer-render.h:
+       * pango-view/viewer-x.c:
+       Rename renderdemo.[ch] to viewer-render.[ch].
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/Makefile.am: Rename HELLO.utf8 and GLASS.utf8 to
+       HELLO.txt and GLASS.txt.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/pango-view.c:
+       * examples/pangocairo-view.c:
+       * examples/pangoft2-view.c:
+       * examples/pangox-view.c:
+       * examples/pangoxft-view.c:
+       * examples/renderdemo.c:
+       * examples/renderdemo.h:
+       * examples/test-arabic.txt:
+       * examples/test-chinese.txt:
+       * examples/test-devanagari.txt:
+       * examples/test-gurmukhi.txt:
+       * examples/test-hebrew.txt:
+       * examples/test-ipa.txt:
+       * examples/test-lao.txt:
+       * examples/test-latin.txt:
+       * examples/test-mixed.txt:
+       * examples/test-syriac.txt:
+       * examples/test-tamil.txt:
+       * examples/test-thai.txt:
+       * examples/test-tibetan.txt:
+       * examples/viewer-cairo.c:
+       * examples/viewer-cairo.h:
+       * examples/viewer-main.c:
+       * examples/viewer-pangocairo.c:
+       * examples/viewer-pangoft2.c:
+       * examples/viewer-pangox.c:
+       * examples/viewer-pangoxft.c:
+       * examples/viewer-win32.c:
+       * examples/viewer-x.c:
+       * examples/viewer-x.h:
+       * examples/viewer.h:
+       Move into pango-view/
+
+       * Makefile.am:
+       * configure.in:
+       * examples/Makefile.am:
+       * pango-view/Makefile.am:
+       Update.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (parse_enum): Oops. Replace GType* with GType.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 363510 – Ability to query whether a PangoLayout is effectively
+       ellipsized (as opposed to the set_ellpisize()/get_ellipsize() methods
+       which only set a request, or return the set request respectively)
+       Patch from Milosz Derezynski
+
+       * pango/pango-layout.h:
+       * pango/ellipsize.c (_pango_layout_line_ellipsize):
+       * pango/pango-layout-private.h:
+       * pango/pango-layout.c (pango_layout_init), (pango_layout_copy),
+       (pango_layout_is_ellipsized), (pango_layout_clear_lines),
+       (pango_layout_line_postprocess):
+       New public function:
+
+               pango_layout_is_ellipsized()
+
+       * pango/pango.def:
+       * docs/tmpl/layout.sgml:
+       * docs/pango-sections.txt:
+       Update.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line): Fix
+       background rendering being off in presence of rise attributes.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (itemize_state_init),
+       (itemize_state_update_for_new_run): Update  centered_baseline in
+       presence of gravity attributes.
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c (draw_text):
+       * pango/pangocairo-win32font.c (max_glyph_width):
+       * pango/pangofc-font.c (max_glyph_width):
+       * pango/pangowin32.c (max_glyph_width),
+       (pango_win32_render_layout):
+       * pango/pangox.c (pango_x_render_layout):
+       Use pango_layout(_iter)?_get_line_readonly() instead of
+       pango_layout(_iter)?_get_line().
+
+2007-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-attributes.h:
+       * pango/pango-attributes.c:
+       New attribute types PANGO_ATTR_GRAVITY and PANGO_ATTR_GRAVITY_HINT.
+       New public functions:
+
+               pango_attr_gravity_new()
+               pango_attr_gravity_hint_new()
+
+       * pango/pango-context.c (update_attr_iterator),
+       (itemize_state_init), (itemize_state_add_character),
+       (get_shaper_and_font), (itemize_state_update_for_new_run):
+       Handle gravity and gravity_hint attributes.
+
+       * pango/pango-utils.h:
+       * pango/pango-utils.c:
+       New public function:
+
+               pango_parse_enum()
+
+       * pango/pango-markup.c (span_parse_func): Parse gravity and
+       gravity_hint attributes for <span>.  Optimize a bit.
+
+       * pango/pango-markup.c (parse_absolute_size), (attr_strcmp),
+       (span_parse_int), (span_parse_boolean), (span_parse_color),
+       (span_parse_enum), (span_parse_func): Use pango_scan_int(),
+       pango_color_parse(), and pango_parse_enum().  Also, ignore '-' and
+       '_' differences when matching attribute names for <span>.
+
+       * examples/renderdemo.c (parse_enum), (parse_ellipsis),
+       (parse_gravity), (parse_gravity_hint), (parse_hinting),
+       (parse_wrap): Use a generic parse_enum() that uses pango_parse_enum().
+
+       * modules/basic/basic-fc.c (basic_engine_shape):
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern):
+       Use PANGO_GRAVITY_IS_VERTICAL().
+
+       * pango/pango.def:
+       * docs/pango-sections.txt:
+       * docs/tmpl/text-attributes.sgml:
+       * docs/tmpl/utils.sgml:
+       Update.
+
+2007-01-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 323173 – Add layout of mixed direction text for vertical layout
+
+       * pango/pango-gravity.h:
+       * pango/pango-gravity.c:
+       Moved gravity stuff here.  New public API:
+
+               PangoGravityHint
+               pango_gravity_get_for_matrix()
+               pango_gravity_get_for_script()
+
+       * pango/pango-context.h:
+       * pango/pango-context.c (pango_context_init),
+       (update_resolved_gravity), (itemize_state_update_for_new_run):
+       Support gravity hint.  New public API:
+
+               pango_context_set_gravity_hint()
+               pango_context_get_gravity_hint()
+
+       * pango/pango-utils.c:
+       * pango/pango-matrix.c:
+       * pango/pango-matrix.h:
+       * pango/pango-types.h:
+       Moved gravity and matrix stuff into its own header.  pango-types.h
+       includes both pango-matrix.h and pango-gravity.h
+
+       * pango/pango.h:
+       Include new headers.
+
+       * pango/pango.def:
+       * pango/Makefile.am:
+       Update.
+
+       * docs/pango-docs.sgml:
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/vertical.sgml:
+       Add a section for Vertical Text.
+
+       * examples/renderdemo.c (do_output), (parse_gravity_hint),
+       (parse_options):
+       Support gravity hint.
+
+       * examples/test-mixed.txt:
+       New test, mixed Latin, Arabic, Chinese text.
+
+2007-01-15  Tor Lillqvist  <tml@novell.com>
+
+       * configure.in: Don't check for X and don't warn about missing
+       fontconfig on Win32. (#392628, Yevgen Muntyan)
+
+2007-01-15  Tor Lillqvist  <tml@novell.com>
+
+       * configure.in: Automatically use -mms-bitfields on Windows when
+       building with gcc. (#394453)
+
+2007-01-13  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc pango/opentype/makefile.msc : updated
+
+2007-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.3 ===
+
+       * configure.in: Version 1.15.3
+
+       * NEWS: Updated.
+
+2007-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 351496 – PangoAnalysis::gravity breaks binary compatibility
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/main.sgml:
+       * pango/pango-context.c (itemize_state_add_character):
+       * pango/pango-item.h:
+       * pango/pango-layout.c (pango_layout_run_get_extents):
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):
+       Don't introduce bitfields in public struct and rename PangoAnalysis.
+       centered_baseline to PangoAnalysis.flags and introduce
+       PANGO_ANALYSIS_FLAGS_CENTERED_BASELINE.
+
+2007-01-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/engines.sgml:
+       * docs/tmpl/fonts.sgml:
+       * docs/tmpl/freetype-fonts.sgml:
+       * docs/tmpl/layout.sgml:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/modules.sgml:
+       * docs/tmpl/opentype.sgml:
+       * docs/tmpl/pango-renderer.sgml:
+       * docs/tmpl/pango-version.sgml:
+       * docs/tmpl/pangofc-font.sgml:
+       * docs/tmpl/pangofc-fontmap.sgml:
+       * docs/tmpl/text-attributes.sgml:
+       * docs/tmpl/win32-fonts.sgml:
+       * docs/tmpl/x-fonts.sgml:
+       * docs/tmpl/xft-fonts.sgml:
+       * pango/ellipsize.c:
+       * pango/fonts.c:
+       * pango/glyphstring.c:
+       * pango/modules.c:
+       * pango/pango-attributes.c:
+       * pango/pango-context.c:
+       * pango/pango-context.h:
+       * pango/pango-coverage.c:
+       * pango/pango-glyph-item.c:
+       * pango/pango-layout.c:
+       * pango/pango-layout.h:
+       * pango/pango-markup.c:
+       * pango/pango-matrix.c:
+       * pango/pango-ot-buffer.c:
+       * pango/pango-ot-info.c:
+       * pango/pango-ot-ruleset.c:
+       * pango/pango-renderer.c:
+       * pango/pango-script.c:
+       * pango/pango-utils.c:
+       * pango/pangoatsui-fontmap.c:
+       * pango/pangocairo-fontmap.c:
+       * pango/pangofc-font.c:
+       * pango/pangofc-font.h:
+       * pango/pangofc-fontmap.c:
+       * pango/pangofc-fontmap.h:
+       * pango/pangoft2-fontmap.c:
+       * pango/pangoft2-render.c:
+       * pango/pangoft2.c:
+       * pango/pangowin32-fontcache.c:
+       * pango/pangowin32-fontmap.c:
+       * pango/pangowin32.c:
+       * pango/pangox-fontmap.c:
+       * pango/pangox.c:
+       * pango/pangoxft-font.c:
+       * pango/pangoxft-fontmap.c:
+       * pango/pangoxft-render.c:
+       * pango/reorder-items.c:
+       Spell-check the docs.
+
+2007-01-07  Tor Lillqvist  <tml@novell.com>
+
+       * modules/basic/Makefile.am: Fix build on Win32 outside
+       srcdir. (#392789, J. Ali Harlow)
+
+2007-01-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c: Improve docs, and mention
+       g_unichar_iszerowidth().
+
+2007-01-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 332266 – gdk_draw_layout fails for coordinates >= 2^21
+
+       * pango/pango-types.h:
+       * pango/pango-matrix.c: New public API:
+               pango_matrix_transform_distance()
+               pango_matrix_transform_point()
+               pango_matrix_transform_rectangle()
+               pango_matrix_transform_pixel_rectangle()
+
+       * pango/pango-utils.h:
+       * pango/pango-utils.c: New public API:
+               pango_units_from_double()
+               pango_units_to_double()
+               pango_extents_to_pixels()
+
+       * pango/pango-layout.c (pango_layout_get_pixel_extents),
+       (pango_layout_line_get_pixel_extents): Use pango_extents_to_pixels().
+
+       * pango/pangocairo-fcfont.c:
+       (pango_cairo_fc_font_glyph_extents_cache_init),
+       (compute_glyph_extents): Use pango_units_from_double().
+
+       * examples/renderdemo.c (do_output): Use
+       pango_matrix_transform_pixel_rectangle();
+
+       * pango/pango.def:
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml: Update.
+
+2007-01-03  Changwoo Ryu  <cwryu@debian.org>
+
+       Bug 388702 – Crash when there's no Hangul glyph in the font.
+       
+       * modules/hangul/hangul-fc.c (render_syllable): Do not try to
+       render unknown syllable glyphs as jamos.
+
+       * modules/hangul/hangul-fc.c (hangul_engine_shape): Check if the
+       remaining string is a syllable.
+
+       Bug 388581 - Every last Hangul syllable is decomposed to jamos.
+
+       * modules/hangul/hangul-fc.c (hangul_engine_shape): Check if the
+       remaining string is a syllable.
+
+2007-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 390877 – Don't feed pango-features.h to glib-mkenums
+       Patch from Yevgen Muntyan
+
+       * pango/Makefile.am: Move pango-features.h to pangoinclude_HEADERS.
+
+2006-12-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 384543 – FcFontMatch misuse
+
+       * pango/pangofc-fontmap.c (pango_fc_face_describe):
+       Call FcConfigSubstitute and FcDefaultSubstitute before calling
+       FcFontMatch.
+
+       * pango/pangoft2.c (load_fallback_face):
+       Call _pango_ft2_font_map_default_substitute().
+
+       * pango/pangocairo-fcfontmap.c
+       (pango_cairo_fc_font_map_context_substitute):
+       Handle the case of context == NULL.
+
+2006-12-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-utils.c (pango_language_get_default): Improve docs.
+
+2006-12-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.2 ===
+
+       * configure.in: Version 1.15.2
+
+       * NEWS: Updated.
+
+2006-12-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 326099 – Setting width, indentation and ellipsizing doesn't work
+       as I would expect
+
+       * pango/ellipsize.c (_pango_layout_line_ellipsize): Account for
+       indentation when deciding what width to ellipsize for.
+
+       * pango/pango-layout.c (get_alignment): Don't bother about
+       conditioning on the line direction for center alignment.
+
+2006-12-20  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-defs.h:
+       * modules/hangul/hangul-fc.c
+       (hangul_engine_shape): Optimizing for non-old Hangul users; no
+       more waste of decompose and compose.
+       (render_syllable): The string argument is now in UTF-8. Normalization
+       is now done only when the entire sequence is equivalent to a
+       precomposed syllable.
+       (render_isolated_tone): Conditioned out tone mark's dummy base
+       character drawing.
+
+2006-12-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs):
+       Avoid some floating-point operations by caching the y value for the
+       baseline, using it for glyphs having y_offset of 0.
+
+2006-12-15  Frederic Crozat  <fcrozat@mandriva.com>
+
+       Bug 385478 – Fix tests on OPD platform
+
+       * pango/check.defs: Fix tests on OPD platform to report correct
+       symbols name.
+
+2006-12-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 319808 – Patch to let pango support artifical italic, bold and
+       bold italic styles for the fonts which don't have these styles.
+       Patch from James Su
+
+       * pango/pangofc-fontmap.c (pango_fc_face_describe), (create_face),
+       (pango_fc_family_list_faces): Create fake Bold, Italic, and Bold
+       Italic faces for fonts that do not have one.
+
+2006-12-13  Gwenole Beauchesne  <gbeauchesne@mandriva.com>
+
+       Bug 385478 – Fix tests on OPD platform
+
+       * pango/check.defs: Improve symbols extraction for OPD-based
+       platforms (e.g. ppc64, ia64).
+
+2006-12-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 385321 – Worst case expansion for Sinhala
+       Patch from Harshula
+
+       * modules/indic/indic-ot-class-tables.c: Change worst case expansion
+       for Sinhala from 3 to 4.  This is only superficial because Pango
+       doesn't appear to ever use the worst case expansion value.
+
+2006-12-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Red Hat Bug 211574: [hi/ml/si_LK] cursor naviation is wrong when
+       using ZWJ (200d)
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-lang.c (indic_engine_break): Handle cursor
+       movement around ZWJ and ZWNJ.
+
+2006-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Red Hat Bug 216424: [te_IN] pango - consonant + dependent vowel (ai)
+       Composed char is not rendering properly
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Fix it!
+
+2006-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout-private.h:
+       * pango/pango-layout.c (pango_layout_get_extents_internal),
+       (pango_layout_get_extents), (pango_layout_clear_lines),
+       (pango_layout_line_leaked), (pango_layout_line_get_extents),
+       (pango_layout_iter_copy), (pango_layout_get_iter),
+       (pango_layout_iter_get_layout_extents):
+       Cache layout ink and logical extents.
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in:
+       * pango/Makefile.am:
+       New generated public header file pango-features.h.  Currently contains
+       the version information.  In the future, can be expanded to define
+       which backends have been enabled, etc.
+
+       * pango/pango.def:
+       * pango/pango-utils.h:
+       * pango/pango-utils.c:
+       New public macros and functions: PANGO_VERSION_ENCODE(),
+       PANGO_VERSION_MAJOR, PANGO_VERSION_MINOR, PANGO_VERSION_MICRO,
+       PANGO_VERSION, PANGO_VERSION_STRING, PANGO_VERSION_CHECK(),
+       pango_version(), pango_version_string(), pango_version_check().
+
+       * docs/pango-docs.sgml:
+       * docs/pango-sections.txt:
+       * docs/tmpl/pango-version.sgml:
+       Docs for new symbols, in a new section.
+
+       * examples/renderdemo.c (show_version):
+       If run-time Pango lib version is different than the compile-time one,
+       show that one too.
+
+       * pango/pango.h:
+       #include <pango-utils.h> as well as almost all other public pango-*.h
+       headers (though, the other ones were already included indirectly).
+       The only public pango-*.h header pango.h shouldn't include are
+       pango-ot.h (which is really misnamed) and pango-modules.h (that should
+       not be needed by 99.99% users anyway).
+
+       * docs/Makefile.am:
+       * docs/check.docs: Test to check that all symbols are documented and
+       properly hooked into documentation tree.
+
+       * pango/pango.rc.in:
+       * pango/pangoft2.rc.in:
+       * pango/pangowin32.rc.in:
+       Update, reflecting some internal symbol changes.
+
+       * pango/check.defs: Improve.
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (do_output): Set context language to
+       pango_language_get_default() instead of hardcoding "en-US".
+
+       * pango/pango-utils.c (pango_language_get_default): Improve docs.
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 333982 – Fallback to $LANG whenever NULL PangoLanguage is used
+       Patch from LingNing Zhang
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/utils.sgml:
+       * pango/pango-context.c:
+       * pango/pango-types.h:
+       * pango/pango-utils.c (_pango_get_lc_ctype),
+       (pango_language_get_default):
+       * pango/pango.def:
+       New public function pango_language_get_default().  Note that, this
+       does not make Pango fallback to the default language automatically,
+       but the user can use this function to set the default language of the
+       locale on a context:
+
+         pango_context_set_language (context, pango_language_get_default());
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 373856 – Wish: Function to convert a GdkColor to a string
+       Patch from Matthew Barnes
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/text-attributes.sgml:
+       * pango/pango-attributes.h:
+       * pango/pango.def:
+       * pango/pango-color.c (pango_color_to_string):
+       New public function pango_color_to_string().
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Red Hat Bug 216850: Issue in combination with vowels (ml_IN)
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Fix it!
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 382437 – tests/testboundaries fails
+
+       * configure.in: Require libthai >= 0.1.7
+
+2006-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/Makefile.am:
+       * examples/test-gurmukhi.txt:
+       Gurmukhi test text from supreet sethi.
+
+2006-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/layout.sgml:
+       * pango/pango-layout.c (pango_layout_get_lines_readonly),
+       (pango_layout_get_line_readonly),
+       (pango_layout_iter_get_run_readonly),
+       (_pango_layout_iter_get_line), (pango_layout_iter_get_line),
+       (pango_layout_iter_get_line_readonly):
+       * pango/pango-layout.h:
+       * pango/pango-renderer.c (pango_renderer_draw_layout):
+       * pango/pango.def:
+       Add new functions:
+               pango_layout_get_line_readonly()
+               pango_layout_get_lines_readonly()
+               pango_layout_iter_get_line_readonly()
+               pango_layout_iter_get_run_readonly()
+       These should be used when you do not intend to modify the run/line,
+       which is more than most of the time.  So, update your app, benefit
+       from more optimizations (in this case, line extents caching)!
+
+2006-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.1 ===
+
+       * configure.in: Version 1.15.1
+
+       * NEWS: Updated.
+
+2006-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 135683 – Cache glyphstring extents
+
+       Cache line extents.  This avoids the final pango_font_get_glyph_extents()
+       call per glyph per layout rendering.  Now we don't make any
+       pango_font_get_glyph_extents() calls when rendering a layout (some
+       conditions apply).
+
+       * pango/pango-layout.c (pango_layout_get_lines),
+       (pango_layout_get_line), (pango_layout_line_leaked),
+       (pango_layout_line_get_extents), (pango_layout_line_new),
+       (pango_layout_iter_get_run), (pango_layout_iter_get_line): 
+       Cache line extents.  Line extents are cached only if the user doesn't
+       have a pointer to the line or any of its runs.  Functions that give
+       away such pointers mark the line as "leak"ed.
+
+       * pango/pango-layout.c (pango_layout_index_to_line_and_extents),
+       (pango_layout_xy_to_index), (pango_layout_index_to_pos):
+       Use _pango_layout_iter_get_line() which is like
+       pango_layout_iter_get_line() but doesn't leak the line.
+
+       * pango/pango-layout-private.h: Add pango_layout_iter_get_line()
+       duplicate _pango_layout_iter_get_line_readonly() that doesn't leak
+       the line.
+
+       * pango/pango-renderer.c (pango_renderer_draw_layout): Use
+       _pango_layout_iter_get_line_readonly().
+
+2006-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (_pango_cairo_renderer_draw_frame):
+       Improve upon last change.  Suggested by Carl Worth: use
+       cairo_rectangle(x + width, y, -width, height) to do a rectangle with
+       the other orientation.
+
+2006-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (_pango_cairo_renderer_draw_frame),
+       (_pango_cairo_renderer_draw_box_glyph),
+       (_pango_cairo_renderer_draw_unknown_glyph):
+       Fix handling of boxes drawn in do_path mode.  Previously we were
+       doing one rectangle and stroke it if in show mode, and leave it alone
+       if in path mode.  That doesn't really work.  Now we do two rectangles,
+       for the outer and inner rects of the box border, but with different
+       orientations, such that pango_cairo_layout_path(); cairo_fill(); works
+       for hexboxes now.
+
+2006-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Red Hat Bug 211964: [ta] Rendering issue with Tamil
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot-class-tables.c (indic_ot_find_syllable):
+       Handle 2 split matra.
+
+2006-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line),
+       (pango_renderer_draw_glyphs), (pango_renderer_draw_rectangle),
+       (pango_renderer_draw_error_underline),
+       (pango_renderer_draw_trapezoid), (pango_renderer_draw_glyph),
+       (pango_renderer_activate), (pango_renderer_deactivate),
+       (pango_renderer_set_color), (pango_renderer_get_color),
+       (pango_renderer_part_changed), (pango_renderer_prepare_run),
+       (pango_renderer_set_matrix): Replace PANGO_IS_RENDERER with
+       PANGO_IS_RENDERER_FAST that is just a NULL-check.
+
+2006-12-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       Red Hat Bug 213632: ZWJ (200d) and ZWNJ (200c) showing same output
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Handle ZWNJ.
+
+2006-12-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_run_get_width), (update_run),
+       (pango_layout_iter_copy), (pango_layout_iter_get_run_extents):
+       Don't cache run_logical_rect in PangoLayoutIter.  Just cache run_width
+       that can be fastly computed using pango_glyph_string_get_width().
+       Avoids one pango_font_get_glyph_extents() call per glyph per layout
+       rendering.  We are down to 1 now.
+
+2006-11-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_get_extents_internal):  Rework
+       the way we compute the real_width to avoid calling
+       pango_layout_get_extents(), and so, avoid one
+       pango_font_get_glyph_extents() call per glyph per layout rendering.
+       We now make 2 such calls.
+
+2006-11-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):
+       Don't call into pango_glyph_string_extents() if we don't need anything
+       out of it!  (Ok, that function returns immediately in that case, but
+       still, avoiding the call overhead.)
+
+2006-11-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (acquire_renderer), (release_renderer):
+       Use G_LOCK_* wrappers for GStaticMutex.
+
+2006-11-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c (_pango_cairo_font_install),
+       (_pango_cairo_font_get_font_face),
+       (_pango_cairo_font_get_scaled_font):
+       * pango/pangocairo-private.h:
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs):
+       Revert two of the cast changes from last commit, to make sure the
+       test-pangocairo-fontmap-mismatch test doesn't crash.
+
+2006-11-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_font_face),
+       (pango_cairo_fc_font_install), (pango_cairo_fc_font_finalize),
+       (pango_cairo_fc_font_get_metrics), (pango_cairo_fc_font_shutdown),
+       (_pango_cairo_fc_font_new):
+       * pango/pangocairo-fcfontmap.c
+       (pango_cairo_fc_font_map_set_resolution),
+       (pango_cairo_fc_font_map_get_resolution_cairo),
+       (pango_cairo_fc_font_map_get_renderer),
+       (pango_cairo_fc_font_map_finalize),
+       (pango_cairo_fc_font_map_get_resolution_fc),
+       (pango_cairo_fc_font_map_create_font):
+       * pango/pangocairo-font.c (_pango_cairo_font_install),
+       (_pango_cairo_font_get_font_face),
+       (_pango_cairo_font_get_scaled_font),
+       (_pango_cairo_font_get_hex_box_info):
+       * pango/pangocairo-fontmap.c (pango_cairo_create_layout):
+       * pango/pangocairo-render.c (set_color),
+       (_pango_cairo_renderer_draw_unknown_glyph),
+       (pango_cairo_renderer_draw_glyphs),
+       (pango_cairo_renderer_draw_rectangle),
+       (pango_cairo_renderer_draw_error_underline):
+       Use simple, fast, casts instead of PANGO_CAIRO_*() macros where the
+       object cannot have reached us if it wasn't of the right type.
+
+2006-11-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 371388 – Add Thai langauage engine
+       Patch from Theppitak Karoonboonyanan
+
+       * configure.in: Look for libthai and enable thai-lang module.
+       * modules/thai/Makefile.am: Hook thai-lang module.
+
+       * modules/thai/thai-lang.c: New Thai language engine that uses libthai
+       to do dictionary-based Thai line-breaking.
+
+       * examples/test-thai.txt: Improved.
+
+2006-11-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (acquire_renderer), (release_renderer),
+       (_pango_cairo_do_glyph_string), (_pango_cairo_do_layout_line),
+       (_pango_cairo_do_layout):  Make renderer-cache really thread-safe this
+       time.  Last try was not quite thread-safe theoretically, because
+       pointer assignments are not necessarily atomic on some archs.  Anyway,
+       this one should do it.
+
+2006-11-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/HELLO.utf8:
+       * examples/Makefile.am:
+       * examples/test-lao.txt:
+       Add Lao text samples from Anousak Souphavanh.
+
+2006-11-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 377975 – bug in _pango_glyph_item_iter_next_cluster
+
+       * pango/pango-glyph-item.c (_pango_glyph_item_iter_next_cluster),
+       (_pango_glyph_item_iter_prev_cluster): Fix condition for ending a
+       cluster.
+
+2006-11-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-glyph-item.c: Fix typo in private docs.
+
+2006-11-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 356666 – pango is not thread-safe, nautilus does not honour that
+
+       * pango/pangocairo-render.c (acquire_renderer), (release_renderer),
+       (_pango_cairo_do_glyph_string), (_pango_cairo_do_layout_line),
+       (_pango_cairo_do_layout): Instead of using a per-fontmap renderer, use
+       a locally cached one, but make sure only one thread uses the cached
+       renderer.  Fixes the raciest point in pangocairo.
+
+2006-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 352795 – configure.in: Bug in "checking Whether to write
+       dependencies into .pc files"
+
+       * configure.in: Make libtool magic robust.
+
+2006-11-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (itemize_state_process_run): Choose
+       shaper/font for unassigned Unicode codepoints too.  This is needed to
+       be able to render scripts being encoded before next version of Unicode
+       is out.
+
+2006-11-08  Roozbeh Pournader  <roozbeh@farsiweb.info>
+
+       Bug 350132 – backspacing doesn't work properly for Arabic
+
+       * modules/arabic/arabic-lang.c: Add more backspace_deletes_character
+       cases.
+
+2006-11-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 369670 – Crash when selecting text using the keyboard
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): Don't
+       index vis2log_map[] with a negative value.
+
+2006-11-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 369670 – Checked g_free calls
+
+       * pango/pango-coverage.c (pango_coverage_unref):
+       * pango/pango-layout.c (pango_layout_finalize),
+       (pango_layout_set_text):
+       * pango/pangofc-font.c (pango_fc_font_finalize):
+       * pango/pangox-fontmap.c (pango_x_font_map_read_alias_file):
+       Remove redundant checks before g_free() calls.
+
+2006-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/Makefile.am (cairosimple_LDADD): Do not require pangoft2
+       unconditionally.
+
+2006-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_class_init),
+       (pango_ft2_font_map_get_resolution): Implement get_resolution for FT2
+       fontmaps.
+
+2006-10-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-lang.c: Do not include arabic-ot.h.
+
+2006-10-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/test-thai.txt: Replace by a better one.
+
+2006-10-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/Makefile.am:
+       * examples/test-thai.txt: Added.
+
+2006-10-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.15.0 ===
+
+       * configure.in: Version 1.15.0
+
+       * NEWS: Updated.
+
+2006-10-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 330407 – Multiple dependant vowel signs (indic) displayed as one
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot-class-tables.c: Change state transition for
+       cn to dv.
+
+2006-10-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot-info.c (pango_ot_info_get_type):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_get_type):
+       * pango/pangoatsui-fontmap.c (pango_atsui_family_get_type),
+       (pango_atsui_face_get_type):
+       * pango/pangocairo-font.c (pango_cairo_font_get_type):
+       * pango/pangocairo-fontmap.c (pango_cairo_font_map_get_type):
+       * pango/pangofc-fontmap.c (pango_fc_face_get_type),
+       (pango_fc_family_get_type):
+       * pango/pangowin32-fontmap.c (pango_win32_family_get_type),
+       (pango_win32_face_get_type):
+       * pango/pangox-fontmap.c (pango_x_font_map_get_type),
+       (pango_x_face_get_type), (pango_x_family_get_type):
+       * pango/pangox.c (pango_x_font_get_type):
+       Make TypeInfo structs not static.  Reduces relocations.
+
+2006-10-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 361938 – Can't include *-lang modules (./configure
+       --with-included-modules fails)
+
+       * configure.in:
+       * modules/Makefile.am:
+       * pango/.cvsignore:
+       * pango/Makefile.am:
+       * pango/modules.c (init_modules):
+       * pango/modules.h:
+       Make included language engines work.
+
+2006-10-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 353877 – Sinhala is_cursor_position and
+       backspace_deletes_character issues
+       Patch from Akira TAGOH
+
+       * configure.in:
+       * modules/indic/Makefile.am:
+       * modules/indic/indic-lang.c: Add a simple Indic language engine.
+
+2006-10-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 358224 – Telugu Character U+0C31 does not render its below-base
+       form.
+       Patch from Rahul Bhalerao
+
+       * modules/indic/indic-ot-class-tables.c: Change  the class of U+0C31
+       from '_ct' to '_bb'.
+
+2006-10-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 358174 – Reph and Vattu forms of Assamese character RA(U+09F0) are
+       not rendered.
+       Patch from Rahul Bhalerao
+
+       * modules/indic/indic-ot-class-tables.c: Change the class bit of
+       U+09F0 from '_ct' to '_rv'.
+
+2006-10-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/Makefile.am:
+       * examples/test-latin.txt: Add part of Jabberwocky as Latin test text.
+
+2006-10-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 356685 – [or_IN] Rendering of consonant+0x0B4D+0x0B2F is wrong
+       Patch from Rahul Bhalerao
+
+       * modules/indic/indic-ot-class-tables.c:  Change _ct to _bb for
+       various Orya characters.
+
+2006-10-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 357790 – Rendering problem for malayalam consonant RA (U+0D30)
+       Patch from Rahul Bhalerao
+
+       * modules/indic/indic-ot-class-tables.c:
+       * modules/indic/indic-ot.c (indic_ot_reorder):
+       Fix.
+
+2006-10-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 359043 – PangoRenderer does not show in API docs
+
+       * docs/pango-docs.sgml: Hook PangoRenderer docs.
+
+2006-10-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 359046 – renderdemo.c unconditionally use GLib 2.12
+
+       * configure.in: Require glib 2.12, for Unicode 5.0 data files.
+
+2006-09-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 357686 – pangocairo-font.c: illegal g_object_unref in
+       pango_cairo_font_get_hex_box_info
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info): Remove
+       wrong g_object_unref (fontmap).
+
+2006-09-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 357228 – Remove aix specific hack from configure.in
+
+       * configure.in: Remove hack added back 2002 that is not required
+       anymore.
+
+2006-09-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Step module interface version to 1.6.0 because of the
+       script_break() slight change of behavior and anticipated changes to
+       the module interface this cycle.
+
+2006-09-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 350132 – backspacing doesn't work properly for Arabic
+
+       * configure.in:
+       * modules/arabic/Makefile.am:
+       * modules/arabic/arabic-lang.c:
+       Add a simple Arabic language engine.  Currently it just makes sure
+       that backspace_deletes_character is not set on ALEF-MADDA
+       combinations.
+
+2006-09-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * tools/gen-script-table.pl:
+       * pango/pango-script-table.h:
+       * pango/pango-script.c (pango_script_for_unichar): Minor
+       simplification.
+
+       * tests/testscript.c (test_script_lookup): Update to pass.
+
+2006-09-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoft2-render.c (pango_ft2_font_render_glyph): Remove a
+       couple of unnecessary static variables.
+
+2006-09-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 356194 – more pango_get_log_attrs problems
+
+       * pango/break.c (tailor_break): New function.  Simply calls the
+       script_break() function of the language engine, if any.
+
+       * pango/break.c (pango_break): Call pango_default_break()
+       unconditionally.  Call tailor_break() on top of the result to tailor
+       it using the language engines, if any.
+
+       * pango/break.c (tailor_segment): Call tailor_break() on the segment,
+       and make sure the log_attrs for the first position are not corrupted.
+
+       * pango/break.c (pango_get_log_attrs): Call pango_default_break() on
+       the entire paragraph, and call tailor_segment on each segment.
+
+       * pango/pango-engine.h: Update docs about *script_break()'s behavior.
+
+2006-09-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355820 – pango_get_log_attrs broken
+
+       * pango/break.c (break_it), (pango_get_log_attrs): Use PangoScriptIter
+       to itemize text, instead of pango_script_for_unichar().
+
+2006-09-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_face_describe): Unset gravity on
+       the resulting font description.  We want gravity to be set on all
+       fonts described, but not font faces.
+
+2006-09-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/indic/indic-ot-class-tables.c: Change enums to macros, to
+       get in synch with ICU shaper.  No functional changes.
+
+2006-09-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/indic/indic-ot.h: Change some enums to macros, to get in
+       synch with ICU shaper.  No functional changes.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 351223 – the conjuction of Con + 0x0d4d +0x0d31 of Malayalam is
+       wrong
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot.c (swapChars), (indic_ot_reorder): Special
+       case the above case.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355750 – The glyphs of the conjuctions about Cons+0x0d4d+0x0d32 of
+       Malayalm are wrong.
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot-class-tables.c (mlymCharClasses): Change
+       U+0D32 from _bb to _ct.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 349876 – U+0x0904 of Devanagari need be "independent vowel", but
+       it is "reserved" in Pango
+       Patch from LingNing Zhang
+
+       * modules/indic/indic-ot-class-tables.c (devaCharClasses): Change
+       U+0904 from _xx to _iv.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355550 – Miscalculation of logical attributes in
+       pango_get_log_attrs()
+       Patch from Theppitak Karoonboonyanan
+
+       * pango/break.c (pango_get_log_attrs): Pass the correct lang_engine to
+       pango_break().
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/modules.c (pango_engine_pair_get_engine): Err about failing to
+       load engine only once per module.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355697 – The IndicOTClassTable of Oriya has a error.
+
+       * modules/indic/indic-ot-class-tables.c: Compute lastChar from
+       charClasses table size to avoid out-of-synch.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 355782 – Misaligned extents in pango
+
+       * pango/pango-layout.c (pango_layout_get_extents_internal),
+       (pango_layout_get_extents), (pango_layout_iter_copy),
+       (pango_layout_get_iter), (pango_layout_iter_get_line_extents):
+       Add a new internal member layout_width to PangoLayoutIter.  Set it up
+       in pango_layout_get_extents_internal and use in
+       pango_layout_iter_get_line_extents to fix misalignment of ink link
+       extents.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       "Thou shalt not touch code that does not fit in thy brain."
+
+       * pango/pango-layout.c (update_cluster): Add cluster_start_index
+       parameter back in.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-engine.h: Remove unnecessary 'static' in type definition
+       that causes a relocation.
+
+       * pango/shape.c (pango_shape): Make sure last_cluster is invalid.
+
+2006-09-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 355782 – Misaligned extents in pango
+
+       * pango/pango-layout.c (cluster_width): Rewrite based on
+       is_cluster_start instead of accessing log_clusters directly.  This is
+       more robust as next_cluster uses that, so the two match now.
+       
+       * pango/pango-layout.c (update_cluster): Remove the
+       cluster_start_index parameter and use iter->cluster_start instead.
+
+       * pango/pango-layout.c (pango_layout_iter_copy): Fix typo in copying
+       iter->cluster_width.
+       
+       * pango/pango-layout.c (pango_layout_iter_get_cluster_extents): Add
+       an assert to make sure iter->cluster_width is correctly set.
+
+       * pango/pango-layout.c (pango_layout_iter_get_char_extents): Remove
+       assert that was readded above to check more cases.
+
+2006-09-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355605 – hexbox with 0000 in it
+
+       * modules/hangul/hangul-fc.c (render_syllable): If decomposition
+       fails, backup and add a single hexbox glyph for the original
+       character.
+
+2006-09-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355435 – Invalid calls to pango_map_get_engine()
+       Patch from Theppitak Karoonboonyanan
+
+       * pango/break.c (pango_get_log_attrs):
+       * pango/pango-renderer.c (add_underline):
+       * pango/pangofc-font.c (pango_fc_font_find_shaper):
+       * pango/pangowin32.c (pango_win32_font_find_shaper):
+       * pango/pangox.c (pango_x_font_find_shaper):
+       Pass a PangoScript to pango_map_get_engine, not a gunichar!
+
+2006-09-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 347146 – underline/overstrike spaces
+
+       * pango/pango-renderer.c (add_underline), (add_strikethrough),
+       (pango_renderer_draw_layout_line): Use logical extents for
+       x and width of underline/strikethrough, such that trailing spaces are
+       correctly handled.
+
+       * pango/pango-layout.c (pango_layout_run_get_extents): Use logical
+       rect for underline/strikethrough, and reflect that in run ink extents.
+
+       * pango/pango-layout.c (pango_layout_line_get_extents): Don't
+       let runs with empty ink extents affect total ink extents.
+
+2006-09-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 352535 – Ink extents of empty glyph
+
+       * pango/pangocairo-fcfont.c
+       (pango_cairo_fc_font_get_glyph_extents): Return zero ink_rect for
+       PANGO_GLYPH_EMPTY.
+
+2006-09-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c: A simple text-on-path example using
+       pangocairo.
+
+       * examples/Makefile.am: Update.
+
+2006-09-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (find_field_any): Parse style.  It was dropped when
+       I was adding support for gravity.
+
+2006-08-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c, pango/pangox-fontmap.c, pango/pangox.c:
+       Minor doc syntax update.
+
+2006-08-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 148732 – cursor movenmet is not correct in gedit when I type
+       Arabic text.
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): Update
+       locally cached line properties upon line change.
+
+2006-08-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/Makefile.am (pango.modules): Improve the conditional to
+       ignore included modules.
+
+2006-08-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 352811 – SIGSEGV with pango(cairo)-view on HP-UX
+
+       * modules/Makefile.am (pango.modules): Don't hardcode .so extension.
+       Look for .la instead.
+
+2006-08-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 353525 – libpangoft2-1.0.so.0: undefined reference to
+       `pango_font_description_get_gravity'
+
+       * examples/Makefile.am: Explicitly link to the just built pangoft2 for
+       pangocairo uses, like we already do for pangoxft.
+
+2006-08-28  Tor Lillqvist  <tml@novell.com>
+
+       * modules/basic/Makefile.am: Have basic-win32.c instead of
+       basic-win32.lo depend on usp10.h so things work out also in case
+       the basic-win32 module is compiled in.
+
+2006-08-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 349813 – typo in docs for pango_layout_move_cursor_visually
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually): Fix typo.
+
+2006-08-23  Tor Lillqvist  <tml@novell.com>
+
+       * pango/Makefile.am
+       * examples/Makefile.am
+       * pango/testfonts.c
+       * examples/pangowin32tobmp.c: Rename pango/testfonts.c to
+       examples/pangowin32tobmp.c. (#104151)
+
+2006-08-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (itemize_state_process_run): Replace (!isgraph
+       && !isspace) with (!isprint) which is equivalent.  Also, update
+       comments.
+
+2006-08-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 145275 – Font selection for space characters
+
+       * pango/pango-context.c (itemize_state_process_run): Find shaper/font
+       for Private Use and space characters too.  Finding shaper for Private
+       Use is needed for any practical use of those areas.  Ideally, spaces
+       should be synthesized if they are not available in the font, but
+       falling back to other fonts is far easier, and should give pretty good
+       results with the current set of common fonts.  These fixes allow
+       Firefox+Pango to render MathML like Firefox+Xft does.
+
+2006-08-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (gravity_map): Rename "Upright" to "Not-Rotated".
+       Also, reorder the user-friendly names (Not-Rotated, Rotated-Left, ...)
+       before the enum names (South, East, ...) such that they are used to
+       describe fonts.
+
+2006-08-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 352114 – pango-1.14: generated docs still contain old example code
+
+       * docs/tmpl/pangocairo.sgml: Update cairo example code to that of
+       examples/cairosimple.c.
+
+2006-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       Support per-item gravity.
+
+       * pango/pango-context.c (update_attr_iterator),
+       (itemize_state_init), (itemize_state_update_for_new_run),
+       (itemize_state_process_run): Make per-item gravity work, by setting
+       gravity into font description before loading fonts.  Also, allow
+       the context font description to override the gravity (but not
+       centered_baseline.)
+
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new): Get gravity
+       from font description, not context.
+
+       * pango/pangofc-fontmap.c (fontset_hash_key_equal),
+       (fontset_hash_key_hash), (fontset_hash_key_copy),
+       (pango_fc_make_pattern), (pango_fc_font_map_get_patterns),
+       (pango_fc_font_map_load_fontset),
+       (pango_fc_font_description_from_pattern): Get gravity from font
+       description, not context.  Moreover, put it into pattern, and
+       reconstruct it out of font patterns.
+
+       * pango/pangofc-private.h: Define PANGO_FC_GRAVITY, which is the key
+       we put PangoGravity into an FcPattern under.
+
+2006-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/fonts.sgml:
+       * pango/fonts.c (pango_font_description_set_gravity),
+       (pango_font_description_get_gravity),
+       (pango_font_description_merge_static),
+       (pango_font_description_better_match),
+       (pango_font_description_equal), (pango_font_description_hash),
+       (find_field_any), (pango_font_description_from_string),
+       (pango_font_description_to_string):
+       * pango/pango-font.h:
+       * pango/pango.def:
+       Add gravity in PangoFontDescription.
+
+2006-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-matrix.c (pango_matrix_to_gravity): Correct switched
+       return value of EAST/WEST.
+
+       * pango/pango-types.h (PangoGravity): Add PANGO_GRAVITY_AUTO.
+       * pango/pango-context.h: Add pango_context_get_gravity().
+
+       * examples/renderdemo.c (parse_gravity), (parse_options):
+       * pango/pango-context.c (pango_context_init),
+       (update_resolved_gravity), (pango_context_set_matrix),
+       (pango_context_set_base_gravity), (pango_context_get_gravity),
+       (itemize_state_init), (get_shaper_and_font):
+       * pango/pango-layout.c (line_set_resolved_dir):
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics),
+       (pango_cairo_fc_font_glyph_extents_cache_init),
+       (_pango_cairo_fc_font_new):
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern),
+       (pango_fc_font_map_load_fontset):
+       * pango/pango.def:
+       * docs/pango-sections.txt:
+       * docs/tmpl/main.sgml:
+       Update to above.
+
+2006-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (parse_options):
+       * examples/renderdemo.h: Change the --rotate parameter to double now
+       that we depend on a recent-enough glib.
+
+2006-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 351496 – PangoAnalysis::gravity breaks binary compatibility
+
+       * pango/pango-item.h (PangoAnalysis): Use bitfields for level.
+
+2006-08-17  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc pango/pango.def : updated
+       * pango/break.c(1630) : error C2059: syntax error : '}' Intializing a 
+       struct with empty braces is not supported with MSVC, instead use 0.
+       * pango/pangocairo.def : removed pango_fc_font_(map_)get_type
+       pangocairo has either win32 fonts or freetype. The former is more usual.
+       * pango/pango-utils.c : replaced M_PI by G_PI (from glib/gtypes.h).
+
+2006-08-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 348825 – pango should optimize away calls to FcFontSort as
+       much as possible
+
+       * pango/pangofc-fontmap.c: Increase FONTSET_CACHE_SIZE from 16 to 64.
+
+2006-08-17  Tor Lillqvist  <tml@novell.com>
+
+       * pangowin32.pc.in: Drop @WIN32_LIBS@, no need to search -lgdi32
+       when linking apps that link with libcairowin32.
+
+       * pango/pango.def: Add two symbols.
+
+2006-08-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 351585 – API documentation issues with 2.15 release
+
+       * pango/fonts.c (pango_font_describe_with_absolute_size): Add Since
+       tag to docs.
+
+2006-08-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (line_set_resolved_dir): Adjust line
+       resolved_dir according to context base_gravity, like we do
+       in itemize_state_add_character().
+
+2006-08-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/viewer-pangocairo.c (render_callback): Render block
+       progression and line direction arrows, and a base gravity roof-top.
+
+       * pango/pango-matrix.c (pango_matrix_to_gravity): New function.
+
+       * pango/pango-utils.c (pango_gravity_to_rotation): New function.
+
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new): Use
+       pango_gravity_to_rotation().
+
+       * pango/pango-utils.h:
+       * pango/pango-types.h:
+       Reorder a bit.
+
+       * examples/Makefile.am:
+       * examples/test-chinese.txt: New test text for Chinese.
+
+       * pango/check.defs: New script that checks that all the exported
+       symbols are listed in the respective .def file. (only checks the
+       libraries actually built.  No win32 for example.)
+
+       * pango/Makefile.am: Hook check.defs as a 'make check' test.
+
+       * pango/pango.def:
+       * pango/pangoft2.def:
+       * pango/pangocairo.def:
+       Update.
+
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/main.sgml:
+       * docs/pango-sections.txt:
+       Update.
+
+2006-08-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c (fallback_shape): Remove redundant
+       positioning block!
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_run_get_extents):
+       * pango/glyphstring.c (pango_glyph_string_extents_range):
+       Return if none of logical_rect or ink_rect is non-NULL.
+
+       * pango/pango-item.h (PangoAnalysis): Add new member centered_baseline
+       which if set, makes item rendered such that ascent == descent.
+
+       * pango/pango-context.c (itemize_state_init),
+       (itemize_state_add_character):
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):
+       Implement centered_baseline.
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics): When
+       adjusting ascent/descent for vertical fonts, adjust strikethrough and
+       underline position too.
+
+       * docs/tmpl/main.sgml: Document new struct member.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c (basic_engine_shape): Use analysis->gravity
+       to detect vertical fonts, instead of poking into the font_pattern.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-fc.c (basic_engine_shape): Always use
+       fallback shaping for vertical fonts.
+
+       * pango/pango-context.c (get_shaper_and_font): Always use basic
+       shaper for vertical items (east/west gravity).
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (do_output): Render the header with SOUTH
+       gravity.
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics),
+       (pango_cairo_fc_font_glyph_extents_cache_init): Center baseline
+       for east/west gravity in pango_font_metrics too.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/HELLO.utf8: Remove excess LRM.
+
+       * examples/viewer-pangocairo.c (render_callback): Draw baselines in
+       border-drawing mode.
+
+       * pango/pango-layout.c (pango_layout_line_get_extents): Make sure
+       we set logical_rect.y on empty lines.  Previously empty lines had
+       wrong baseline.  The code apparently was written like that
+       intentionally, but I cannot find out why.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_get_log_attrs): Remove initliazer members
+       for analysis, let compiler zero them all.  Fixes compile break after
+       adding the gravity member inside there.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (itemize_state_add_character):
+       Fix handling of WEST and EAST gravity effect on bidi level.
+
+       * pango/pangocairo-fcfont.c
+       (pango_cairo_fc_font_glyph_extents_cache_init):
+       For NORTH gravity (upside down text), swap ascent and descent,
+       and for EAST/WEST, center baseline between ascent/descent.
+
+       * pango/shape.c (pango_shape): If glyph width is negative, negate
+       it and shift glyph by that amount.  This allows having font matrices
+       that essentially move the glyph origin to the right of the glyph to
+       still work.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_scaled_font),
+       (_pango_cairo_fc_font_new): Move font_matrix rotation into font_new
+       as we use only rotation and no translation anymore.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/main.sgml:
+       * examples/renderdemo.c (parse_gravity), (parse_options):
+       * pango/pango-context.c (pango_context_init),
+       (pango_context_get_base_gravity), (itemize_state_add_character):
+       * pango/pango-types.h:
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_scaled_font):
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern):
+       Oops.  Exchange west<->east and north<->south gravities.  The gravity
+       is the side that the glyph sits on.  So, for normal Latin text for
+       example, gravity is south, not north.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/renderdemo.c (do_output), (parse_gravity),
+       (parse_options): Support --gravity.
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_scaled_font),
+       (compute_glyph_extents), (_pango_cairo_fc_font_new): Load rotated
+       scaled_fonts to handle gravity.
+
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern),
+       (pango_fc_font_map_get_patterns), (pango_fc_font_map_load_fontset):
+       Set FC_VERTICAL_LAYOUT on West and East gravity.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (itemize_state_process_run):
+       Add FIXME note about handling item gravity.
+
+       * pango/pangofc-fontmap.c (fontset_hash_key_equal),
+       (fontset_hash_key_hash), (fontset_hash_key_copy),
+       (pango_fc_font_map_get_patterns): Add gravity into the hask key.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-item.h: Add a gravity member to PangoItem, and
+
+       * pango/pango-context.c (itemize_state_init),
+       (itemize_state_add_character): Propagate context base_gravity
+       into items.
+
+2006-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-types.h: Add enum PangoGravity.
+
+       * pango/pango-context.h:
+       * pango/pango-context.c (pango_context_set_base_gravity),
+       (pango_context_get_base_gravity): New functions.
+
+       * pango/pango.def:
+       * docs/pango-sections.txt: Hook new API.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-18 b/ChangeLog.pre-1-18
new file mode 100755 (executable)
index 0000000..1057d43
--- /dev/null
@@ -0,0 +1,1504 @@
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.18.0 ===
+
+       * configure.in: Version 1.18.0
+
+       * NEWS: Updated.
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 348348 – Add a way to get the script name of a gunichar
+
+       * configure.in: Require glib 2.14, for GUnicodeScript stuff.
+
+       * docs/tmpl/scripts.sgml: Document that #PangoScript is
+       interchangeable with GUnicodeScript.
+
+       * pango/pango-script.c (pango_script_for_unichar): Use
+       g_unichar_get_script(), and document it.
+
+       * tools/Makefile.am:
+       * tools/gen-script-table.pl:
+       * pango/Makefile.am:
+       * pango/pango-script-table.h:
+       Remove pango-script-table.h and its generator.
+
+       * pango/pango-gravity.c (get_script_properties):
+       * pango/pango-language.c (pango_script_get_sample_language):
+       * pango/pango-ot-tag.c (pango_ot_tag_from_script):
+       Protect against unexpected script values.
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gsub.c (GSUB_Do_String_Lookup): Don't
+       ignore error return value of hb_buffer_copy_output_glyph().  Patch
+       sent to harfbuzz-list.
+
+2007-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 462630 – pango_cairo_context_set_font_options() and some others
+       don't have a Since: tag
+
+       * pango/pangocairo-context.c: Add missing Since tags to docs.
+
+2007-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 467077 – Remove special-case for shape attribute in
+       pango_layout_line_index_to_x()
+
+       * pango/pango-layout.c (pango_layout_line_index_to_x): Remove
+       special-casing for shape-attribute runs.  It all works because
+       pango_glyph_string_index_to_x() is perfectly correct to run on glyphs
+       returned by _pango_shape_shape().
+
+2007-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 462420 – Clicking on pixbuf should move the cursor to the position
+       nearest to the click point
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index): Remove
+       special-casing for shape-attribute runs.  It all works because
+       pango_glyph_string_x_to_index() is perfectly correct to run on glyphs
+       returned by _pango_shape_shape().
+
+2007-08-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 467056 – Shape attribute handling is not consistent
+
+       * pango/pango-impl-utils.h:
+       * pango/pango-layout.c (pango_layout_line_index_to_x), (shape_run),
+       (pango_layout_line_x_to_index), (pango_layout_run_get_extents),
+       (update_run):
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):
+       * pango/pango-utils.c (_pango_shape_shape),
+       (_pango_shape_get_extents):
+       Fix handling of extents for shaped runs.  Previsouly a shaped run
+       with more than one character was not correctly positioned.
+
+2007-08-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 466755 – pango hangul is crashing in gnome-about because it is
+       failing to retrieve a font.
+
+       * pango/pangofc-font.c (pango_fc_font_real_get_glyph),
+       (pango_fc_font_kern_glyphs), (pango_fc_font_get_raw_extents):
+       Protect against NULL face.
+
+       * pango/shape.c (pango_shape): Improve error message by writing
+       out shaping engine type name and the text too.
+
+2007-08-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-script.h (pango_script_for_unichar): Mark G_GNUC_CONST.
+
+2007-08-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 465174 – TextView is ignoring multiple consecutive \t's
+
+       * pango/pango-layout.c (get_tab_pos), (shape_tab): Fix two problems
+       introduced with fix for bug 464183.  The code now semantically
+       matches what it was before changes leading to revision 1734 for
+       the case that user has set no tabs.
+
+2007-08-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/check.docs: Fix typo.
+
+2007-08-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 464270 – ellipsize doesn't work consistent
+
+       * pango/pango-glyph-item.c (_pango_glyph_item_iter_prev_cluster):
+       Fix.  Was jumping two clusters at a time.  Oops!
+
+       * pango/ellipsize.c (init_state): Minor cleanup.
+
+2007-08-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * MAINTAINERS: Add Userid field.
+
+2007-08-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 464183 – Minimum tab width enforcement in pango-layout breaks
+       TabArray positions
+       Patch by David Trowbridge
+
+       * pango/pango-layout.c (get_tab_pos), (shape_tab): Don't enforce any
+       minimum space between tabs if tab-array is set on the layout.
+
+2007-08-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am:
+       * pango/glyphstring.c (pango_glyph_string_index_to_x),
+       (pango_glyph_string_x_to_index):
+       * pango/mapping.c:
+       Move contents of mapping.c to glyphstring.c where they belong.
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index):
+       Fix typo.
+
+2007-08-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 451682 – Cursor positioning for Sinhala is broken
+       Based on patch from Harshula
+
+       * modules/indic/indic-lang.c (indic_engine_break): Fix bug that
+       I introduced in the patch.
+
+2007-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 451682 – Cursor positioning for Sinhala is broken
+       Based on patch from Harshula
+
+       * modules/indic/indic-lang.c (not_cursor_position),
+       (indic_engine_break):
+       Clean up cursor position stuff.
+
+2007-07-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 462137 – memory corruption in pango_default_break
+
+       * pango/break.c (pango_default_break): Handle the case of
+       an empty string correctly.
+
+2007-07-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.17.5 ===
+
+       * configure.in: Version 1.17.5
+
+       * NEWS: Updated.
+
+2007-07-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 150883 – Unicode LRO defect
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape):
+       * modules/arabic/arabic-ot.c (Get_Joining_Class),
+       (Arabic_Assign_Properties):
+       * modules/arabic/arabic-ot.h:
+       Correctly handle Arabic shaping in left-to-right runs.
+
+2007-07-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 347236 – provide pango_cairo_font_get_scaled_font
+
+       * docs/Makefile.am:
+       * docs/pango-sections.txt:
+       * docs/tmpl/atsui-fonts.sgml:
+       * docs/tmpl/opentype.sgml:
+       * docs/tmpl/pango-engine-lang.sgml:
+       * docs/tmpl/pango-engine-shape.sgml:
+       * docs/tmpl/pangocairo.sgml:
+       * pango/pangoatsui.h:
+       * pango/pangocairo-atsuifont.h:
+       * pango/pangocairo-font.c (pango_cairo_font_get_scaled_font):
+       * pango/pangocairo-private.h:
+       * pango/pangocairo.h:
+       Export PangoCairoFont and cleanup various standard macros.
+
+2007-07-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 449482 – Build error when xft not present
+
+       * docs/Makefile.am: Make docs build without xft.
+
+2007-07-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c:
+       * modules/basic/basic-fc.c:
+       * modules/hebrew/hebrew-fc.c:
+       * modules/syriac/syriac-fc.c:
+       * modules/thai/thai-fc.c:
+       Update copyright headers.
+
+2007-07-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/basic-atsui.c: Remove list of supported scripts.
+       Supporting all is what we really want and that's already there.
+
+2007-07-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/basic/Makefile.am:
+       * modules/basic/basic-fc.c:
+       * modules/basic/basic-win32.c:
+       * modules/basic/basic-x.c:
+       * modules/basic/basic-common.h:
+       Remove unused empty header file basic-common.h
+
+2007-07-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.17.4 ===
+
+       * configure.in: Version 1.17.4
+
+       * NEWS: Updated.
+
+2007-06-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 451547 – FAIL: runtests.sh
+
+       * tests/Makefile.am: Don't run tests if cross-compiling.
+       (though cross-compiling tests work under scratchbox, so I'm not
+       quite sure how good this change is.)
+
+2007-06-26  Richard Hult  <richard@imendio.com>
+
+       * pango/pangoatsui.c: (_pango_atsui_font_set_atsu_font_id):
+       * pango/pangocairo-atsuifont.c:
+       (pango_cairo_atsui_font_create_metrics_for_context),
+       (_pango_cairo_atsui_font_new): Move the remaining uses of font_id
+       from PangoCairoATSUIFont to PangoATSUIFont.
+
+2007-06-24  Richard Hult  <richard@imendio.com>
+
+       Bug 449543 - Ship pangoatsui.h
+
+       * pango/pangoatsui-fontmap.c:
+       * pango/pangoatsui-private.h:
+       * pango/pangoatsui.c:
+       * pango/pangoatsui.h:
+       * pango/pangocairo-atsuifont.c:
+       * pango/pangocairo-atsuifont.h: Move get_atsu_font_id from the
+       cairo atsui font class to the atsui base class. Make the members
+       of the atsui font private and adapt all users of them.
+
+       * pango/Makefile.am: Ship pangoatsui.h.
+
+       * modules/basic/basic-atsui.c: (basic_engine_shape): Adapt to the
+       above changes.
+
+2007-06-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango.types: Add missing types.
+
+2007-06-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_description_get_type),
+       (pango_font_metrics_get_type):
+       * pango/glyphstring.c (pango_glyph_string_get_type):
+       * pango/pango-attributes.c (pango_attr_list_get_type):
+       * pango/pango-color.c (pango_color_get_type):
+       * pango/pango-item.c (pango_item_get_type):
+       * pango/pango-language.c (pango_language_get_type):
+       * pango/pango-layout.c (pango_layout_line_get_type),
+       (pango_layout_iter_get_type):
+       * pango/pango-matrix.c (pango_matrix_get_type):
+       * pango/pango-ot-info.c (pango_ot_info_get_type):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_get_type):
+       * pango/pango-tabs.c (pango_tab_array_get_type):
+       * pango/pangoatsui-fontmap.c (pango_atsui_family_get_type),
+       (pango_atsui_face_get_type):
+       * pango/pangofc-fontmap.c (pango_fc_face_get_type),
+       (pango_fc_family_get_type):
+       * pango/pangowin32-fontmap.c (pango_win32_family_get_type),
+       (pango_win32_face_get_type):
+       * pango/pangox-fontmap.c (pango_x_font_map_get_type),
+       (pango_x_face_get_type), (pango_x_family_get_type):
+       * pango/pangox.c (pango_x_font_get_type):
+       Add G_UNLIKELY() to type registration block in _get_type() functions.
+
+2007-06-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.17.3 ===
+
+       * configure.in: Version 1.17.3
+
+       * NEWS: Updated.
+
+2007-06-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 448342 – pango_layout_index_to_line_x() counts lines from 1
+
+       * pango/pango-layout.c (pango_layout_index_to_line):
+       Count lines from zero, not one!
+
+2007-06-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in:
+       * tests/cxx-test.C: Include pangocairo.h too.
+
+2007-06-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 447568 – improve docs on what absolute size means
+
+       * pango/fonts.c: Improve docs.
+
+2007-06-15  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : updated
+
+2007-06-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c
+       (_pango_cairo_font_private_scaled_font_data_destroy):
+       Check for NULL before dereferencing.  Patch from Keith Packard.
+
+2007-06-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 447189 – fonts.c: pango_font_face_is_synthesized returns NULL
+
+       * pango/fonts.c (pango_font_face_is_synthesized): Fix
+       return value.
+
+2007-06-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-attributes.c (pango_attr_font_desc_equal):
+       Compare set fields of two font descriptions for equality
+       too, as pango_font_description_equal() doesn't check the
+       mask.
+
+2007-06-12  Richard Hult  <richard@imendio.com>
+
+       * pango/pangocairo-atsuifontmap.c: Implement
+       get_font_type().
+
+2007-06-12  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangocairo-win32fontmap.c: Implement
+       PangoCairoWin32FontMap::get_font_type().
+
+2007-06-12  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-private.h (struct PangoWin32Face): Add
+       is_synthetic field.
+
+       * pango/pangowin32-fontmap.c: Implement
+       PangoWin32Face::is_synthesized().
+
+       * pango/pangocairo-win32font.c
+       * pango/pangocairo-win32fontmap.c: Update for the changes to
+       PangoCairoFontMap and PangoCairoFont.
+
+2007-06-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 445832 – pango_cairo_update_layout() always invalidates layout
+
+       * pango/pangocairo-context.c (_pango_cairo_update_context),
+       (pango_cairo_update_context), (pango_cairo_update_layout):
+       Don't invalidate layout if matrix and font options didn't change.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-attributes.h:
+       * pango/pango-font.h:
+       * pango/pango-glyph.h:
+       * pango/pango-gravity.h:
+       * pango/pango-language.h:
+       * pango/pango-layout.h:
+       * pango/pango-matrix.h:
+       * pango/pango-ot-private.h:
+       * pango/pango-ot.h:
+       * pango/pango-renderer.h:
+       * pango/pango-script.h:
+       * pango/pango-tabs.h:
+       * pango/pango-utils.h:
+       * pango/pangoatsui-private.h:
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifont.h:
+       * pango/pangocairo-fc.h:
+       * pango/pangocairo-private.h:
+       * pango/pangocairo-win32.h:
+       * pango/pangocairo.h:
+       * pango/pangofc-decoder.h:
+       * pango/pangofc-font.h:
+       * pango/pangofc-fontmap.h:
+       * pango/pangoft2-private.h:
+       * pango/pangoft2.h:
+       * pango/pangowin32-private.h:
+       * pango/pangox-private.h:
+       * pango/pangoxft-render.h:
+       * pango/pangoxft.h:
+       Add G_GNUC_CONST and G_GNUC_PURE annotations.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot.h: New engine public macros:
+       
+               PANGO_OT_TAG_MAKE()
+               PANGO_OT_TAG_MAKE_FROM_STRING()
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/opentype.sgml:
+       Update.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 446018 – Bus error in the pango_ot_tag_from_language()
+
+       * pango/pango-ot-tag.c (pango_ot_tag_from_script),
+       (pango_ot_tag_to_script), (pango_ot_tag_from_language),
+       (pango_ot_tag_to_language): Make sure int access is
+       aligned.
+
+2007-06-12  Richard Hult  <richard@imendio.com>
+
+       * pango/pangoatsui-fontmap.c (pango_atsui_face_is_synthesized):
+       Implement is_synthesized for the ATSUI backend.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 440588 – Add pango_font_face_is_synthesized()
+
+       * pango/pango-font.h:
+       * pango/fonts.c:
+       New PangoFontFace method is_synthesized.
+       New public API:
+
+               pango_font_face_is_synthesized()
+
+       * pango/pangofc-fontmap.c (pango_fc_face_is_synthesized):
+       Implement new method.
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/fonts.sgml:
+       * pango/pango.def:
+       Update.
+
+2007-06-12  Richard Hult  <richard@imendio.com>
+
+       * pango/pangocairo-atsuifont.c:
+       * pango/pangocairo-atsuifontmap.c: Update for the changes to
+       PangoCairoFontMap and PangoCairoFont.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 446355 – the parsing with pango_parse_markup is not coherent
+
+       * pango/pango-markup.c (pango_parse_markup): Use
+       pango_attr_list_insert() instead of pango_attr_list_change() as
+       merging adjacent attributes of the same kind is not a safe operation
+       and can change the derived font of a segment in an unexpected and
+       incorrect way.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fontmap.c: Make sure all enabled font backends
+       included (reported by Vincent Isambart).
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango_markup.sgml: Add 'gravity', 'gravity_hint', and
+       'letter_spacing' span attributes.
+
+2007-06-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 438801 – underline should add "error" type.
+
+       * docs/pango_markup.sgml: Add "error" underline type to docs.
+
+2007-06-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 347236 – provide pango_cairo_font_get_scaled_font
+       Bug 347235 – Add pango_cairo_font_map_get_font_type
+       Bug 353291 – Provide pango_cairo_font_map_new_for_font_type
+
+       * pango/pangocairo-font.c: New public API:
+
+               pango_cairo_font_get_scaled_font()
+
+       * pango/pangocairo-fontmap.c: New public API:
+
+               pango_cairo_font_map_new_for_font_type()
+               pango_cairo_font_map_get_font_type()
+
+       * pango/pangocairo-fcfontmap.c:
+       Implement get_font_type() method.
+
+       * pango/pangocairo.h:
+       * pango/pangocairo-private.h:
+       * docs/pango-sections.txt:
+       * docs/tmpl/pangocairo.sgml:
+       * pango/pangocairo.def:
+       Update.
+
+2007-06-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 337593 – move glyph extents code (and cache) from
+       pangocairo-*font.c into pangocairo-font.c
+
+       * pango/pangocairo-fontmap.c:
+       * pango/pangocairo-fcfontmap.c:
+       Remove per-fontmap renderer.  We've not been using it for a while
+       and there is no reason to use it.
+
+       * pango/pangocairo-font.c
+       * pango/pangocairo-fcfont.c:
+       Most most code (including glyph extents caching) from fcfont.c to
+       font.c.  Simplifies individual backends a lot. ATSUI and Win32
+       cairo backends should adapt.
+
+       * pango/pangocairo-render.c
+       * pango/pangocairo-private.h:
+       Update to reflect above changes.
+
+2007-06-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_description_merge),
+       (pango_font_description_merge_static),
+       (pango_font_description_copy),
+       (pango_font_description_copy_static),
+       (pango_font_description_hash), (pango_font_description_to_string),
+       (pango_font_description_to_filename):
+       Add missing g_return_if_fail()s.  Pointed out by fcrozat.
+
+2007-06-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/shape.c (pango_shape): Zero glyphs->num_glyphs before
+       calling into shape engine.
+
+       * pango/pango-engine.c (fallback_engine_shape): Improve, to support
+       clusters and what not.
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info):
+       Use "pango_script_get_sample_language (PANGO_SCRIPT_LATIN)" instead
+       of hardcoding "en".
+       Handle cairo_scaled_font_extents() failure.
+
+2007-06-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.17.2 ===
+
+       * configure.in: Version 1.17.2
+
+       * NEWS: Updated.
+
+2007-06-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/main.sgml:
+       * pango/pango-layout.c (process_item):
+       * pango/pango-ot-info.c:
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):
+       Fix various typos reported by Peter Moulder.
+
+2007-06-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/opentype.sgml:
+       * modules/arabic/arabic-fc.c (arabic_engine_shape):
+       * modules/basic/basic-fc.c (basic_engine_shape):
+       * modules/hebrew/hebrew-fc.c (hebrew_engine_shape):
+       * modules/indic/indic-fc.c (indic_engine_shape):
+       * modules/khmer/khmer-fc.c (khmer_engine_shape):
+       * modules/syriac/syriac-fc.c (syriac_engine_shape):
+       * modules/thai/thai-fc.c (thai_engine_shape):
+       * modules/tibetan/tibetan-fc.c (tibetan_engine_shape):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_get_for_description),
+       (pango_ot_ruleset_new_from_description):
+       * pango/pango-ot.h:
+       * pango/pangoft2.def:
+       Rename pango_ot_ruleset_get_for() to
+       pango_ot_ruleset_get_for_description().
+
+       New engine API: pango_ot_ruleset_new_from_description().
+
+2007-06-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 443206 – PANGO_SCRIPT_UNKNOWN should not cause a run break
+       Patch from Martin Hosken
+
+       * pango/pango-script.c: Treat Unknown script like Common and other
+       non-"real" scripts.
+
+2007-05-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c: Improve docs.
+
+2007-05-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.17.1 ===
+
+       * configure.in: Version 1.17.1
+
+       * NEWS: Updated.
+
+2007-05-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/test-mixed.markup:
+       * pango-view/test-mixed.txt:
+       Fix Japanese text.  Patch from Ben Konrath
+
+2007-05-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/mini-fribidi/fribidi_tab_char_type_2.i:
+       Fix wrong Unicode version in header.
+
+2007-05-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 357790 – Rendering problem for malayalam consonant RA (U+0D30)
+
+       * modules/indic/indic-ot-class-tables.c:
+       * modules/indic/indic-ot.c (indic_ot_reorder):
+       Commit remaining fix for malayalam.
+
+2007-05-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/opentype.sgml:
+       * docs/tmpl/pango-engine-lang.sgml:
+       * docs/tmpl/pango-engine-shape.sgml:
+       Add stability note.
+
+2007-05-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/vertical.sgml: Document how Pango's vertical text support
+       works.
+
+2007-05-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 440603 – Minor ABI change
+
+       * pango/pango-context.c (pango_context_init),
+       (pango_context_set_language), (pango_context_get_language):
+       Make itemization use pango_language_get_default() if context has no
+       language set on it.  Ditto for pango_context_get_metrics() if both
+       input language and context language are NULL.
+
+2007-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/Makefile.am:
+       * pango-view/test-nko.txt:
+       New test text for N'Ko.
+
+2007-05-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 440603 – Minor ABI change
+
+       * pango/pango-language.c (pango_language_includes_script):
+       * pango/pango-ot-tag.c (pango_ot_tag_from_language):
+       Accept language == NULL as legitimate input.
+
+2007-05-20  Richard Hult  <richard@imendio.com>
+
+       * pango/pangocairo-atsuifont.c: (_pango_cairo_atsui_font_new): Improve
+       the fix for bug #433805 so that the metrics actually are right, thanks
+       to Mitch for noticing and debugging help.
+
+2007-05-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 438705 – Test runs non-existent "/bin/bash" on HP-UX 11.11
+
+       * docs/check.docs:
+       * pango/check.defs:
+       Use /bin/sh instead of /bin/bash.
+
+2007-05-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/Makefile.am:
+       * pango-view/test-opentype-language.markup:
+       Add a test file showing off OpenType language-system support
+       used with DejaVu Sans.
+
+2007-05-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 438814 – synaptic crash with pango 1.17.0
+
+       * pango/pango-layout.c (process_item): Make sure we find some break
+       point even if overflowing the line.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/hebrew/hebrew-fc.c (hebrew_engine_shape):
+       Port to new OpenType APIs.  Add standard features.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/thai/Makefile.am:
+       * modules/thai/thai-fc.c (thai_get_font_info), (thai_engine_shape),
+       (thai_make_unknown_glyph):
+       * modules/thai/thai-shaper.c (get_glyphs_list), (add_cluster),
+       (thai_set_glyphs):
+       * modules/thai/thai-shaper.h:
+       Port to new OpenType APIs and cleanup a bit.  Add standard features.
+
+       * modules/thai/thai-ot.c:
+       * modules/thai/thai-ot.h:
+       Removed.  Not needed anymore.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 385168 – indic, khmer, and tibetan modules don't apply ccmp
+       Bug 385477 – kern feature is not supported in OpenType layout for
+       Tibetan.
+
+       * modules/khmer/khmer-fc.c (khmer_engine_shape):
+       * modules/tibetan/tibetan-fc.c (tibetan_engine_shape):
+       Port to new OpenType APIs.  Add standard features (ccmp,
+       locl, calt, kern, mark, mkmk).
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/indic/indic-fc.c:
+       Add ccmp, locl, calt; kern, mark, and mkmk features.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot.h:
+       * pango/pango-ot-private.h:
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_add_feature),
+       (pango_ot_ruleset_get_feature_count):
+       Add new engine API:
+
+               pango_ot_ruleset_get_feature_count()
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/opentype.sgml:
+       * pango/pangoft2.def:
+       Updated.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape):
+       * modules/basic/basic-fc.c (basic_engine_shape):
+       * modules/syriac/syriac-fc.c (syriac_engine_shape):
+       Move ruleset creation after populating buffer.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/indic/indic-fc.c (indic_engine_shape), (create):
+       Port to new OpenType APIs.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 436699 – N'Ko support
+       Patch by Eugeniy Meshcheryakov
+
+       * modules/arabic/arabic-fc.c (create):
+       * modules/arabic/arabic-ot.c (Get_Joining_Class):
+       Add N'Ko support to the Arabic module.
+
+2007-05-15  Richard Hult  <richard@imendio.com>
+
+       Bug 433805 - [Atsui] Approximate char/digit width width often 0
+
+       * pango/pangocairo-atsuifont.c:
+       (pango_cairo_atsui_font_get_metrics): Improve the metrics so it really
+       is average instead of max glyph width. Also keep the metrics per 
+       language in the font so it's not constantly recreated.
+       (pango_cairo_atsui_font_describe_absolute): Implement.
+
+       * pango/pangocairo-atsuifontmap.c: Set default resolution.
+
+2007-05-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/Makefile.am: Add various test txt files recently
+       added.
+
+       * pango-view/test-mixed.markup: A language-tagged version of
+       test-mixed.txt.
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.17.0 ===
+
+       * configure.in: Version 1.17.0
+
+       * NEWS: Updated.
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 325714 – Pango should respect $LANGUAGE
+
+       * pango/pango-language.c (pango_language_matches),
+       (parse_default_languages), (_pango_script_get_default_language),
+       (pango_script_get_sample_language):
+       Make pango_script_get_sample_language() use the value of env var
+       PANGO_LANGUAGE or LANGUAGE (checked in that order) to make better
+       guesses.  The env var should be a list of language tags, like "en:fa"
+       for example where makes Pango choose Persian (fa) fonts instead of
+       Arabic (ar) fonts...
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-language.c (pango_script_get_sample_language):
+       * pango/pango-script.c: Move pango_script_get_sample_language()
+       from pango-script.c to pango-language.c.  Fits better.
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 325714 – Pango should respect $LANGUAGE
+       Bug 414264 – Pango vertical writing support is different with real
+       CJK usage.
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape):
+       * modules/basic/basic-fc.c (basic_engine_shape):
+       * modules/syriac/syriac-fc.c (syriac_engine_shape):
+       Remove fallback_shape() paths.  Remove get_ruleset().
+       Use pango_ot_ruleset_get_for(), that correctly works for multiple
+       languages.  Also makes basic shaper apply the 'vert' feature for
+       vertical text.  Removes a net 500 lines.
+
+       Other OpenType modules need to be ported over time, however some
+       extensions may be needed.  For example, the Hebrew shaper uses
+       fallback code if no GPOS tables are available.  Currently using
+       pango_ot_ruleset_get_for() one cannot see which features were
+       found.
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 414264 – Pango vertical writing support is different with
+       real CJK usage.
+
+       * pango-view/test-mixed.txt: Add a line of Japanese text that
+       has brackets that should be rotated in vertical text.
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 325714 – Pango should respect $LANGUAGE
+
+       * pango/pango-ot.h:
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_get_for),
+       (pango_ot_ruleset_description_hash),
+       (pango_ot_ruleset_description_equal),
+       (pango_ot_ruleset_description_copy),
+       (pango_ot_ruleset_description_free):
+       Add new engine API:
+
+               PangoOTRulesetDescription
+               pango_ot_ruleset_get_for()
+               pango_ot_ruleset_description_hash()
+               pango_ot_ruleset_description_equal()
+               pango_ot_ruleset_description_copy()
+               pango_ot_ruleset_description_free()
+       
+       The main addition is pango_ot_ruleset_get_for() that
+       takes a ruleset description, ie. script/language and list
+       of GSUB/GPOS features to apply, and returns a ruleset.
+       It manages all the work to cache rulesets, so modules
+       don't have to do that anymore.  Given that modules do not
+       deal with just one ruleset anymore (because we want to
+       respect language, and allow user-selected features), this
+       makes their life way easier.
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/opentype.sgml:
+       Update.
+
+2007-05-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot-buffer.c (pango_ot_buffer_get_glyphs),
+       (pango_ot_buffer_output):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_substitute),
+       (pango_ot_ruleset_position):
+       * pango/pango-ot.h:
+       Mark some arguments const.
+
+2007-05-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 325714 – Pango should respect $LANGUAGE
+
+       * pango/pango-ot.h:
+       * pango/pango-ot-private.h:
+       * pango/pango-ot-tag.c (pango_ot_tag_from_script),
+       (pango_ot_tag_from_language):
+       * pango/pango-ot-info.c (pango_ot_info_find_script),
+       (pango_ot_info_find_language), (pango_ot_info_find_feature),
+       (pango_ot_info_list_languages), (pango_ot_info_list_features):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_new),
+       (pango_ot_ruleset_new_for), (pango_ot_ruleset_add_feature),
+       (pango_ot_ruleset_maybe_add_feature),
+       (pango_ot_ruleset_maybe_add_features):
+       Add new engine API:
+
+               PANGO_OT_NO_FEATURE
+               PANGO_OT_NO_SCRIPT
+               PANGO_OT_TAG_DEFAULT_SCRIPT
+               PANGO_OT_TAG_DEFAULT_LANGUAGE
+               pango_ot_ruleset_new_for()
+               pango_ot_ruleset_maybe_add_feature()
+               pango_ot_ruleset_maybe_add_features()
+       
+       Using pango_ot_ruleset_new_for() and
+       pango_ot_ruleset_maybe_add_features() drastically simplifies ruleset
+       building in modules, and does correct script and language selection
+       too.  Modules need to be updated to use it though.
+
+       * docs/pango-docs.sgml:
+       * docs/pango-sections.txt:
+       * docs/tmpl/opentype.sgml:
+       Update.
+
+2007-05-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-render.c (do_output), (parse_options):
+       Add --language.
+
+2007-05-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c (maybe_add_gsub_feature),
+       (maybe_add_gpos_feature), (get_ruleset):
+       * modules/basic/basic-fc.c (get_ruleset):
+       * modules/hebrew/hebrew-fc.c (maybe_add_gsub_feature),
+       (maybe_add_gpos_feature), (get_ruleset):
+       * modules/indic/indic-fc.c (maybe_add_GSUB_feature),
+       (maybe_add_GPOS_feature):
+       * modules/khmer/khmer-fc.c (maybe_add_GSUB_feature),
+       (maybe_add_GPOS_feature):
+       * modules/syriac/syriac-fc.c (maybe_add_gsub_feature),
+       (maybe_add_gpos_feature), (get_ruleset):
+       * modules/thai/thai-ot.c (maybe_add_gsub_feature),
+       (maybe_add_gpos_feature), (thai_ot_get_ruleset),
+       (lao_ot_get_ruleset):
+       * modules/tibetan/tibetan-fc.c (maybe_add_GSUB_feature),
+       (maybe_add_GPOS_feature):
+       Use PANGO_OT_DEFAULT_LANGUAGE and PANGO_OT_ALL_GLYPHS instead
+       of hardcoded 0xFFFF.
+
+2007-05-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * ChangeLog.pre-1-16: Split ChangeLog.
+
+2007-05-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am:
+       * pango/pango-ot.h:
+       * pango/pango-ot-tag.c (pango_ot_tag_from_script),
+       (pango_ot_tag_to_script), (lang_compare_first_component),
+       (pango_ot_tag_from_language), (pango_ot_tag_to_language):
+       New public API:
+
+               PANGO_OT_DEFAULT_SCRIPT
+               pango_ot_tag_from_script()
+               pango_ot_tag_to_script()
+               pango_ot_tag_from_language()
+               pango_ot_tag_to_language()
+
+       * tests/Makefile.am:
+       * tests/test-ot-tags.c:
+       Test case for new functions.
+
+       * pango/pangoft2.def:
+       * docs/pango-docs.sgml:
+       * docs/pango-sections.txt:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/opentype.sgml:
+       Updated.
+
+2007-05-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 437534 – pango_language_includes_script is buggy
+
+       * pango/pango-language.c (lang_compare_first_component),
+       (lang_info_compare), (script_for_lang_compare),
+       (pango_language_includes_script): Fix script_for_lang table lookup.
+
+2007-05-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_description_from_pattern),
+       (pango_fc_face_describe): Don't set gravity in
+       pango_fc_font_description_from_pattern() if it was not set on the
+       pattern.  This is a bit different from other properties, but that
+       really is how gravity works (unlike say weight that not having it said
+       means normal weight).
+
+2007-05-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-script-lang-table.h:  Update from latest fontconfig
+       sources.
+
+       * tools/gen-script-for-lang.c (scripts_for_line): Make it handle
+       PANGO_SCRIPT_UNKNOWN.
+
+2007-05-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-language.c (script_for_lang_compare),
+       (pango_language_includes_script):
+       * pango/pango-script.c: Move pango_language_includes_script() from
+       pango-script.c to pango-language.c that it belongs.
+
+2007-05-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-matrix.h: Minor include reordering.
+
+2007-05-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am:
+       * pango/pango-script.h:
+       * pango/pango-types.h:
+       * pango/pango-utils.c:
+       * pango/pango-language.c:
+       * pango/pango-language.h:
+       Move PangoLanguage stuff into pango-language.[ch]
+
+2007-05-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 436988 – Adding PangoScript to PangoAnalysis
+
+       * pango/pango-item.h:
+       * pango/pango-context.c (itemize_state_add_character):
+       Add a 'script' member to PangoAnalysis.  It's added as a guint8
+       in the padding available in that struct, though it's value is a
+       PangoScript.
+
+       * pango/pangox.c (itemize_string_foreach):
+       Update.
+
+2007-05-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 416515 – Time is not aligned with date on vertical panel
+
+       * pango/pango-context.c (itemize_state_init),
+       (itemize_state_update_for_new_run): centered_baseline should only
+       be set from context->resolved_gravity and never changed through
+       markup.  This means that pango_context_set_base_gravity has no
+       equivalent markup.  Doesn't sound limiting to me: you need to rotate
+       the layout to get real vertical, so it's not just a matter of markup
+       anyway.  At least not at this point.
+
+2007-05-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 436154 – Error building the pango.modules file while cross
+       compiling
+
+       * modules/Makefile.am: Make local pango.module generation work with
+       cross-compilation.
+
+2007-05-05  Richard Hult  <richard@imendio.com>
+
+       Bug 434160 - [atsui] Italic versions of some faces can't be created
+
+       * pango/pangoatsui-fontmap.c:
+       * pango/pangoatsui-private.h:
+       * pango/pangocairo-atsuifont.c: Follow the other backends and create
+       italic faces when they are not available. Apply synthetic italic
+       in two cases, when the font manager hands out italic faces that are
+       not in fact italic, and for the ones we've created ourselves.
+
+2007-05-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 435709 – pango_cairo_context_[sg]et_shape_renderer()
+
+       * pango/pangocairo.h:
+       * pango/pangocairo-context.c:
+       * pango/pangocairo-render.c:
+       New API
+
+               PangoCairoShapeRendererFunc and
+               pango_cairo_context_[sg]et_shape_renderer() 
+
+       * docs/pango-sections.txt, docs/tmpl/pangocairo.sgml: Document new API.
+
+       * examples/Makefile.am, examples/cairoshape.c: New example to show off
+       new API/feature.
+
+2007-05-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am:
+       * pango/pangocairo-context.c:
+       * pango/pangocairo-fontmap.c:
+       Rip non-fontmap stuff from pangocairo-fontmap.c into
+       pangocairo-context.c.
+
+2007-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (pango_itemize): Improve docs about freeing
+       returned items.
+
+2007-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/test-long-paragraph.txt: New test text that contains a
+       Persian monologue by YarAli PourMoghaddam which is a single paragraph
+       of more than 10,000 chars and 2,400 words.  Used for testing the
+       effect of previous change.
+
+2007-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (process_item): When breaking item to fit it
+       into current line, go from the beginning, adding char at a time until
+       it doesn't fit anymore instead of removing chars from the end.  The
+       difference is a O(n) as opposed to O(n^2) algorithm were n is the
+       number of lines in the paragraph (assuming constant chars per line).
+
+2007-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-render.c (output_body), (do_output): Save
+       one layout rendering per view.  Down to two from three now.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/test-justify.txt: New test text with long Latin and
+       Arabic lines, suitable for --justify testing.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 64538 – pango_layout_set_justify() doesn't work
+
+       * pango/pango-layout.c (process_item), (justify_clusters),
+       (justify_words): If no space found, justify by inserting space
+       between clusters.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-glyph-item.c (pango_glyph_item_letter_space):
+       * pango/pango-item.c (pango_item_split):
+       * pango/pango-layout.c (distribute_letter_spacing), (shape_run),
+       (debug), (process_item), (process_line), (pad_glyphstring_right),
+       (pad_glyphstring_left), (zero_line_final_space),
+       (adjust_line_letter_spacing), (pango_layout_line_postprocess):
+       Fix letter-spacing with justification.  We now distribute
+       letter-spacing equally on both sides of clusters, instead of putting
+       it all on one side.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 64538 – pango_layout_set_justify() doesn't work
+
+       * pango/pango-layout.c (zero_line_final_space), (justify_clusters),
+       (justify_words), (pango_layout_line_postprocess): Implement
+       justification by expanding spaces!
+       Based on early patch from Mathias Hasselmann.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Patch from Mathias Hasselmann
+
+       * docs/tmpl/main.sgml:
+       * pango/break.c (pango_default_break):
+       * pango/pango-break.h:
+       Add is_expandable_space to PangoLogAttr.
+
+2007-05-02  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+       * pango-view/viewer-render.c (make_layout), (parse_options):
+       Add --justify.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 355789 – Pango misaligns word-wrapped text due to trailing
+       whitespace
+
+       * pango/pango-layout.c (zero_line_final_space),
+       (pango_layout_line_postprocess): Make logical-final whitespace
+       on wrapped lines zero-width.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (process_line), (pango_layout_check_lines):
+       Keep track of line start_offset in break state.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (process_line),
+       (pango_layout_line_postprocess): Add a "wrapped" argument to
+       pango_layout_line_postprocess().  Going to use it for eg whether we
+       should justify the line.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (process_line): Set is_wrapped to true on
+       BREAK_EMPTY_FIT too.
+
+2007-05-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout-private.h: Remove stale prototype of
+       _pango_layout_iter_get_line_readonly().
+
+2007-05-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (get_items_log_attrs): Add note about
+       how we should not be using pango_break() here.
+
+2007-04-28  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+       * pango-view/viewer-render.c (make_layout), (parse_alignment),
+       (parse_options): Add option for testing text alignment.
+
+2007-04-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/Makefile.am: Link freetype to harfbuzz-dump, for
+       those systems that don't track dependencies automatically.
+
+2007-04-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       Add PANGO_UNITS_ROUND to docs.
+
+2007-04-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-types.h: Move PANGO_UNITS_ROUND here...
+       * pango/pangofc-private.h: ...from here.
+
+       * pango/pango-gravity.c: Document that pango_gravity_to_rotation()
+       returns angle in radians but pango_matrix_rotate() takes degrees.
+
+       * pango/pango-layout.c (pango_layout_run_get_extents):
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line):
+       Retain metrics hinting when centering baseline (used for Latin, etc
+       in vertical mode).
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_get_metrics),
+       (pango_cairo_fc_font_glyph_extents_cache_init): Respect metrics
+       hinting setting when moving glyphs around for vertical writing.
+
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new): Apply
+       the gravity rotation before the pattern's matrix, such that
+       vertical text gets correct italic direction.
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info):
+       Make hexbox font inherit most properties from the current font.
+       That is, bold hexbox digits for a bold font, etc.
+
+2007-04-30  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-fontmap.c (get_family_nameA, get_family_nameW):
+       A font name in encoding UCS4_ENCODING_ID actually is in UTF-16,
+       not UCS-4. (#429397, Akihiro Okamura)
+
+2007-04-27  Richard Hult  <richard@imendio.com>
+
+       * modules/basic/basic-atsui.c (basic_engine_shape): Correct the
+       signature by making PangoAnalysis const, fixes build warning.
+
+2007-04-27  Richard Hult  <richard@imendio.com>
+
+       * pango/pangocairo-atsuifont.c (pango_cairo_atsui_font_get_metrics): 
+       Use maxAdvanceWidth instead of avgAdvanceWidth, the latter is 0 for
+       many fonts. This is a temporary solution, see bug #433805 for details.
+
+2007-04-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.16.4 ===
+
+       * configure.in: Version 1.16.4
+
+       * NEWS: Updated.
+
+2007-04-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 432991 – developer docs for libpango are broken
+
+       * configure.in: Add --disable-doc-cross-references.
+
+       * docs/Makefile.am: Make sure --disable-doc-cross-references is
+       set in order to make dist.
+
+       * Makefile.am: Add --disable-doc-cross-references to
+       DISTCHECK_CONFIGURE_FLAGS.
+
+2007-04-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.16.3 ===
+
+       * configure.in: Version 1.16.3
+
+       * NEWS: Updated.
+
+2007-04-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c (_pango_cairo_font_get_hex_box_info):
+       Improved hexbox position.
+
+2007-04-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot-buffer.c (apply_gpos_ltr), (apply_gpos_rtl),
+       (pango_ot_buffer_output):
+       * pango/pango-types.h:
+       * pango/pangofc-font.c (pango_fc_font_kern_glyphs):
+       * pango/pangofc-private.h:
+       Quantize kerning adjustment, otherwise all the metrics hinting
+       effort will be ruined by a non-whole-pixel kerning value.
+       In the future we want to take lsb_delta and rsb_delta into the
+       game before quantizing the adjustment here, but we don't have
+       those values handy right now.
+
+2007-04-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.16.2 ===
+
+       * configure.in: Version 1.16.2
+
+       * NEWS: Updated.
+
+2007-04-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gdef.c (_HB_GDEF_Check_Property):
+       * pango/opentype/harfbuzz-gpos.c (HB_Done_GPOS_Table),
+       (Lookup_PairPos):
+       * pango/opentype/harfbuzz-open.c (Get_Class1):
+       Copy fixes from harfbuzz stable branch.  Includes a leak fix,
+       a kerning fix, and an array out-of-bound access fix.
+
+2007-04-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/Makefile.am: Add EXEEXT around to make it build on OS/2
+       Patch from Dave Yeo.
+
+2007-03-18  Richard Hult  <richard@imendio.com>
+
+       Bug 419262 - Don't create coverage every time it's asked for
+
+       * pango/pangoatsui.c: (pango_atsui_font_get_coverage):
+       * pango/pangoatsui-fontmap.c: Pass around a PangoATSUIFace instead of
+       the postscript name string. Move the coverage creation from the font to
+       the face, and get the coverage from the face instead of creating it 
+       every time.
+
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifont.c: (_pango_cairo_atsui_font_new): Use the
+       face instead of the postscript name.
+
+       * pango/pangoatsui-private.h:
+       * pango/pangocairo-atsuifontmap.c: Add getters for the postscript name
+       and coverage for the face.
+
+2007-03-14  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-fontmap.c: Add missing declaration of
+       pango_win32_family_get_type(). (#417946, Ivan Wong)
+
+2007-03-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * pango/pangowin32-fontmap.c:
+       * pango/pangowin32.c:
+       Add new symbols to docs.
+
+2007-03-12  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.16.1 ===
+
+       * configure.in: Version 1.16.1
+
+       * NEWS: Updated.
+
+       * README: Updated.
+
+2007-03-10  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-private.h
+       * pango/pangowin32.c
+       * pango/pangowin32-fontcache.c
+       * pango/pangowin32-fontmap.c
+       * pango/pangocairo-win32font.c
+       * pango/pangowin32.def: Move functions defined in one file and
+       used in another to the file where used, make them static, and drop
+       from pangowin32-private.h. Prefix all private non-static functions
+       with underscore. Also functions used only by the pangocairo DLL
+       are considered private. (#120195)
+
+2007-03-10  Tor Lillqvist  <tml@novell.com>
+
+       * README: Uniscribe is optional only at run-time.
+
+2007-03-07  Tor Lillqvist  <tml@novell.com>
+
+       * configure.in
+       * modules/basic/Makefile.am
+       * modules/basic/basic-win32.c: Make building with Uniscribe (using
+       the <usp10.h> header) mandatory. Mingw's w32api headers do include
+       usp10.h now so one doesn't need to copy it from the Platform SDK
+       any longer. At runtime using Uniscribe is still optional,
+       depending on whether usp10.dll is found or not. I think it
+       isn't necessarily present on Windows 2000 machines, for instance.
+
+       * modules/basic/basic-win32.c (lang_name): Instead of a hardcoded
+       case statement, use GetLocaleInfo() to get the language ISO639
+       code.
+       (charset_name): Remove, unused.
+       (itemize_shape_and_place, uniscribe_shape, basic_engine_shape):
+       Constify the PangoAnalysis parameter to match the prototype of
+       PangoEngineShapeClass::script_shape().
+
+2007-03-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 414297 – Fails to build with --enable-static
+               --with-included-modules in thai lang module
+       Patch from Loïc Minier
+
+       * modules/thai/Makefile.am: Include LIBTHAI_LIBS in static module
+       too.
+
+2007-02-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 412654 – SED variable undefined in the `libtool --config' output
+       used by configure
+
+       * configure.in: export SED before calling libtool
+
+2007-02-26  Tor Lillqvist  <tml@novell.com>
+
+       This change was supposed to go in the trunk before 1.16.0, but it
+       didn't quite get there in time. So, to have a clear cut for this
+       somewhat fundamental change in underlying workings (although there
+       should be no user-visible changes), I will build and distribute
+       Win32 binaries only starting from 1.16.1.
+
+       Use wide character API for fonts on Windows. Rename functions and
+       variables that deal with LOGFONTW structs to emphasize
+       this. (#407315)
+
+       * pango/pangowin32.c
+       * pango/pangowin32-fontcache.c
+       * pango/pangowin32-fontmap.c: Use LOGFONTW all over the place
+       instead of LOGFONT, and adapt code accordingly. Use wide character
+       Win32 API.
+
+       * pango/pangowin32.c (pango_win32_font_neww): Renamed from
+       pango_win32_font_new(), as it now takes a LOGFONTW pointer. This
+       is a private function and can be renamed though it is exported as
+       it is used from the pangocairo DLL.
+       (pango_win32_font_logfont): Mention explicitly in doc comment that
+       it returns a LOGFONTA, and recommend to use
+       pango_win32_font_logfontw() instead.
+       (pango_win32_font_logfontw): New function.
+
+       * pango/pangowin32-fontcache.c
+       (pango_win32_font_cache_load): Must keep this function that takes
+       a LOGFONTA pointer as it is declared in the public header.
+       (pango_win32_font_cache_loadw): New public function that takes a
+       LOGFONTW pointer.
+
+       * pango/pangowin32-fontmap.c
+       (pango_win32_font_description_from_logfont): Mention explicitly in
+       the doc comment that it takes a LOGFONTA pointer.
+       (pango_win32_font_description_from_logfontw): New public function
+       that takes a LOGFONTW pointer.
+       (pango_win32_make_matching_logfontw): Rename from
+       pango_win32_make_matching_logfont() to emphasize it takes a
+       LOGFONTW pointer.
+
+       * pango/pangowin32.h: Declare new public functions.
+
+       * pango/pangowin32-private.h: Declare new private functions, drop
+       removed ones.
+
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new):
+       Simplify now that we call pango_win32_make_matching_logfontw().
+
+       * pango/pangowin32.def: Add new functions, rename internal
+       functions that now use LOGFONTW.
+
+2007-02-26  Tor Lillqvist  <tml@novell.com>
+
+       Fix brokenness in the code that tries to ensure that all fonts
+       also have italic variants. Now the code hopefully actually does
+       what it was supposed to. (Which is not necessarily the right thing
+       to do, though. It can be argued that we should not list
+       synthesized italic font styles, we should just silently generate
+       them if asked for. We don't want synthesized italic (or synthesized
+       bold) styles showing up in the font selector. They don't show up
+       when using a fontconfig-based Pango backend either.) (#110521)
+       
+       * pango/pangowin32-fontmap.c
+       (logfont_nosize_hash, logfont_nosize_equal): Don't use the
+       lfItalic field as such, just its nonzeroness. When being
+       enumerated, italic fonts show up with lfItalic=255, but our code
+       looks up italic versions of fonts by passing a key LOGFONT with
+       lfItalic=1.
+       (first_match): Not needed any more, see below.
+       (ensure_italic): This is now called on the entries in the
+       size_infos hash table, not families. The code used to randomly
+       look for the first matching font in size_infoswith the family name
+       being handled.
+       (pango_win32_font_map_init): Iterate through the size_infos hash
+       table with ensure_italic, not through the families table.
+
+       * pango/pangowin32-fontcache.c
+       (logfontw_hash, logfontw_equal): Look at just nonzeroness of
+       lfItalic here, too.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2
new file mode 100755 (executable)
index 0000000..537b3a7
--- /dev/null
@@ -0,0 +1,1570 @@
+Fri Dec 20 12:18:43 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.2.0 ===
+
+       * configure.in: Version 1.2.0, interface age 0.
+
+       * NEWS: Updated
+
+Fri Dec 20 11:59:22 2002  Owen Taylor  <otaylor@redhat.com>
+
+       Some unit fixups (#96335)
+
+       * pango/pango-layout.c pango/pango-mapping.c:
+       Fix occurrences of "in thousandths of a device
+       unit" to say "in #PangoGlyphUnit" which will
+       give a link to the PangoGlyphUnit docs.
+
+       * docs/tmpl/text-attributes.sgml: Change 1000 to PANGO_SCALE.
+
+       * docs/tmpl/glyphs.sgml: Fix docs for PangoGlyphUnit,
+       fix mention of value of PANGO_SCALE from 1000 to 1024.
+
+       * pango/pango-layout.c (pango_layout_line_get_x_ranges): 
+       Fix the docs for @ranges so it doesn't sound like the
+       coordinates are in pixels.
+
+Fri Dec 20 11:49:33 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * README: Add a note about fonts.conf.
+
+Mon Dec 16 21:16:31 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.1.6 ===
+
+       * NEWS: Updated.
+
+       * configure.in: Version 1.1.6, interface age 2.
+
+       * configure.in: Bump PANGO_MODULE_VERSION to 1.2.0.
+
+Mon Dec 16 19:28:18 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/hangul-xft.c (render_isolated_tone):
+       When we get an isolated tone in isolation, do something
+       reasonable rather than just return no glyphs and 
+       causing an assertion failure. (#100625)
+
+       * pango/pangofc-fontmap.cI (_pango_fc_font_map_get_coverage):
+       Add a hack to force Hangul marks to be be rendered
+       in the same font as base Hangul glyphs.
+
+Mon Dec 16 18:10:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-xft.c: Add some extra ranges
+       as "*" to match basic-x.c. (#101083, Jungshik Shin)
+       Remove some extraneous "" ranges since we have
+       { 0x0000, 0xffff, "" } anyways.
+
+Thu Dec 12 13:59:43 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Require autoconf-2.53.
+
+2002-12-11  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/tmpl/text-attributes.sgml: 
+       * docs/tmpl/glyphs.sgml: 
+       * docs/tmpl/engines.sgml: 
+       * docs/tmpl/main.sgml: 
+       * docs/tmpl/pango-indic.sgml: 
+       * docs/tmpl/coverage-maps.sgml: 
+       * docs/tmpl/fonts.sgml:
+       * docs/pango_markup.sgml: Cosmetic changes to short descriptions.
+
+       * docs/tmpl/tab-stops.sgml: 
+       * docs/tmpl/modules.sgml: 
+       * docs/tmpl/opentype.sgml: 
+       * docs/tmpl/xft-fonts.sgml: 
+       * docs/tmpl/freetype-fonts.sgml: 
+       * docs/tmpl/win32-fonts.sgml: Add short descriptions.
+
+       * docs/pango-docs.sgml: Move "OpenType Font Handling" to
+       "Low Level Functionality".
+
+       * docs/pango-sections.txt: Combine the "X Fonts" and 
+       "X Rendering" sections.
+
+Tue Dec 10 18:37:19 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.1.5 ===
+
+       *  pango/pango-attributes.h pango/pango-font.h
+       pango/pango-fontset.h pango/pango-fontmap.h: Add
+       explicit /*< public >*/ /*< private *>/ guards.
+       (See #95398 for gtk-doc changes making this necessary)
+
+Tue Dec 10 14:51:01 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 1.1.5, interface age 1.
+
+       * NEWS: Update.
+
+Sun Dec  8 22:57:55 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c: Draw the unknown glyph box with
+       X primitives rather than hoping that some font has an 
+       actualpainting unknown glyph... that code was 
+       apparently still working badly. Use "en" not
+       NULL as the language tags for getting the metrics
+       for the return glyph and the unknown character
+       glyph... NULL gives too large results. (#98245,
+       Based on a patch from Morten Welinder.)
+
+Sun Dec  8 15:22:10 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-glyph-item.c (pango_glyph_item_apply_attrs): 
+       Free the iter. (Fix from Kjartan Maraas, #100672)
+
+2002-12-08  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/tmpl/pango-indic.sgml: Document PangoIndicScript.
+
+2002-12-07  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pangowin32.c (pango_win32_get_dc): Document.
+
+Sat Dec  7 01:05:25 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.cI (pango_fc_font_map_get_patterns):
+       Print out an informative error message and exit(1) if
+       no fonts are found. (#98672)
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Fix some
+       bugs in the last commit.
+
+Sat Dec  7 00:10:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Don't
+       use face->generic.data to hold the size the face is
+       currently set to; we don't need it currently and
+       it interferes with the use of face->generic.data for
+       OpenType data. (#93822, frequently reported bug)
+
+Fri Dec  6 23:07:58 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_real_render)
+         pango/pangox.c (pango_x_render): Roughly clip glyphs
+       into the X coordinate area to avoid wrap-around. (#73119)
+
+Fri Dec  6 19:42:33 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (map_get_submap): Dynamically allocate
+       submap arrays so we aren't constrained to the BMP.
+       (#100307, Federic Zhang)
+
+Fri Dec  6 18:58:25 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.lo: Use octal escapes rather than
+       hex to avoid the problem over having hex digits 
+       immediately after the hex escape.
+
+Fri Dec  6 18:30:36 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c: Convert literal UTF-8 to octal
+       escapes. (#92050, Arnaud Charlet)
+
+       * pango/testfonts.c: Convert literal ISO-8859-1
+       to UTF-8 hex escapes. (Don't know how passing
+       ISO-8859-1 to pango_shape() was working...)
+
+Fri Dec  6 18:07:48 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/devanagari-x.c, pango/modules.c
+       pango/pango-utils.c pango/pangoft2.c pango/querymodules.c:
+       Convert [sf]printf to g_[sf]printf, or, where
+       appropriate g_printerr(). (Based on patch from
+       Matthias Clasen, #99321)
+
+       * configure.in: Require glib-2.1.3.
+
+Fri Dec  6 17:56:32 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Add missing thai-xft to thai-modules.
+       (#99883, Tony Graham)
+       
+Mon Dec  2 17:22:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.1.4 ===
+
+       * configure.in: Up version to 1.1.4, interface age 0.
+
+       * NEWS: Updated.
+
+       * pango/pangoxft-fontmap.c (pango_fc_do_finalize)
+       * pango/pangoft2-fontmap.c (pango_fc_do_finalize): Fix
+       leaks of fontmap->substitute_data. (#99850)
+
+       * pango/Makefile.am (INCLUDES): Fix accidental reference
+       to pango-script-table.h.
+
+Sun Nov 17 23:28:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-glyph-item.[ch] pango/pango-layout.h:
+       Rename PangoLayoutRun to PangoGlyphItem (with a
+       typedef for compat), add pango_glyph_item_split(),
+       pango_glyph_item_apply_attrs().
+
+       * pango/pango-attributes.[ch]: Add
+       pango_attr_list_filter(), pango_attr_iterator_get_attrs().
+
+       * pango/pango-layout.c: Remove attributes that don't
+       affect shaping before shaping, shape and then add
+       them back. Fixes the infamous "underscores break
+       arabic shaping" bug (#83058)
+
+       * pango/pango-item.h: Remove an extraneous include.
+
+       * pango/pango-layout.c (imposed_shape): Fix bytes/chars
+       problem for glyph->log_clusters.
+
+       * pango/pango-layout.c (cluster_end_index)
+       * pango/pango-layout.c (pango_layout_iter_next_cluster): Fix 
+       confusion between global indices and run-relative indices.
+
+       * docs/tmpl/glyphs.sgml: Improve docs for log_clusters.
+
+       * docs/*: Document new API and PangoOTRuleset
+
+2002-11-29  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/tmpl/xft-fonts.sgml: 
+       * docs/tmpl/freetype-fonts.sgml: Add docs.
+
+       * pango/pangoxft-fontmap.c (pango_xft_substitute_changed): 
+       * pango/pangoft2-fontmap.c
+       (pango_ft2_font_map_set_default_substitute):
+       Fix doc typos.
+
+2002-11-28  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pangoxft-fontmap.c: 
+       * pango/pangoxft-font.c: 
+       * pango/pangowin32.c: 
+       * pango/pangoft2-fontmap.c: Mark 1.2 API additions, fix some
+       doc comments.
+       
+       * pango/pangoft2-fontmap.c
+       (pango_ft2_font_map_set_default_substitute): Implement this
+       function.  (#99850)
+
+2002-11-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * configure.in: Do not add GLIB_CFLAGS to CFLAGS.
+
+       * docs/Makefile.am, examples/Makefile.am,
+       modules/arabic/Makefile.am, modules/basic/Makefile.am,
+       modules/hangul/Makefile.am, modules/hebrew/Makefile.am,
+       modules/indic/Makefile.am, modules/tamil/Makefile.am,
+       modules/thai/Makefile.am, pango/Makefile.am,
+       pango/mini-fribidi/Makefile.am, pango/opentype/Makefile.am:
+       Instead add $(GLIB_CFLAGS) directly to INCLUDES (GTKDOC_CFLAGS for
+       docs/Makefile.am). Also some cosmetic line wrapping and
+       reindentation. (#77981)
+
+Mon Nov 25 20:25:23 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c (pango_glyph_string_extents_range): 
+       Clarify the meaning of the @end parameter. (#96843,
+       Jungshik Shin)
+
+Mon Nov 25 19:57:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_free): Remove
+       some confusing left over verbiage in API docs about what 
+       font descriptions could be freed. (#96558, 
+       Michael R. Walton.)
+
+Mon Nov 25 19:24:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-fribidi/fribidi_get_type.c (_pango_fribidi_get_type): 
+       Fix off-by-one in check for non-BMP characters.
+       (#91834, He Qiangqiang)
+
+Mon Nov 25 11:58:30 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer-qt.cc (readFile): Fix missing argument
+       (#99380, Dagfinn I. Mannsåker)
+
+2002-11-23  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/version.xml.in: New file to let configure dump the version in.
+
+       * docs/pango-docs.sgml: Add version information.
+
+       * docs/Makefile.am (extra_files): Add version.xml.in.
+       (content_files): Add version.xml.
+
+       * configure.in: Generate docs/version.xml.
+
+Thu Nov 21 17:35:08 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-ft2.c: Remove duplicate
+       include of basic-common.h (#97667, Tony Graham)
+
+Thu Nov 21 00:26:40 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Use some shell magic rather than 
+       perl to check for the right gtk-doc version to
+       avoid having to worry about finding Perl. 
+       Make checks handle 0.10 > 0.9. (#99120, Dan Mills)
+       Check for 0.10, since we need that for 
+       --output-format=xml.
+
+2002-11-12  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontcache.c (free_cache_entry,
+       cache_entry_unref, pango_win32_font_cache_load): Add more
+       debugging output.
+
+       * modules/basic/basic-win32.c (uniscribe_shape): Plug memory leak:
+       Free return value from pango_win32_font_logfont(). Call
+       pango_win32_font_cache_unload() for the hfont returned from
+       pango_win32_font_cache_load() after using it.
+
+Fri Nov  8 20:02:09 2002  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * docs/tmpl/coverage-maps.sgml:
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/layout.sgml:
+       * docs/tmpl/x-fonts.sgml:
+       * pango/mapping.c:
+       * pango/pango-coverage.c:
+       * pango/pango-coverage.h:
+       * pango/pango-glyph.h:
+       * pango/pango-layout.c:
+       * pango/pango-layout.h:
+       * pango/pangox.h:
+
+       Trivial s/foo/foo_/ fixes to make pango.h includable with -Wshadow
+       (#91680).
+
+2002-11-09  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-x.c (render_syllable_with_ksx1001johab):
+       Renamed from render_syllable_with_ksx1005 (#95800).
+
+Thu Nov  7 10:05:28 2002  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+       * modules/basic/basic-x.c: 
+       Fix #96781: changes for basic X shaper's code range for
+       compatibility Ideographs characters (0xFA0C - 0xFA2D)
+       (by federic.zhang@sun.com)
+
+2002-11-06  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-x.c (hangul_engine_shape): Applied some of
+       the hangul-xft changes into hangul-x; it takes precomposed
+       syllables as same as L+V or L+V+S jamo sequences.
+
+2002-11-04  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-defs.h (IS_S): Fixed wrong syllable
+       check.
+
+       * modules/hangul/hangul-defs.h: 
+       * modules/hangul/hangul-x.c: No more use of TFILL, the internal
+       trailing consonant filler.
+       (render_syllable_with_*): Appended empty syllable
+       (ex. LFILL+VFILL) rendering case (#96175).
+       (render_syllable_with_ksx1005): Fixed wrong fallback glyphs
+       indices (from #95800 by Jungshik Shin).
+
+Fri Nov  1 21:08:42 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.1.3 ===
+
+       * configure.in: Version 1.1.3
+
+       * NEWS: Updated.
+
+       * pango/pangofc-fontmap.cI (pango_fc_font_set_free): 
+       Free font_set->patterns. (Found by Sven Neumann, 
+       #91698)
+
+2002-11-03  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/basic/basic-xft.c: Removed hangul syllables and hangul
+       tonemarks ranges.  Now hangul-xft is responsible for these ranges.
+
+2002-11-01  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-defs.h modules/hangul/hangul-xft.c:
+       Added Hangul Tone Marks rendering by Jungshik Shin (#96299).
+
+2002-10-31  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-xft.c (hangul_engine_get_coverage):
+       Added U+AC00- coverage
+       (hangul_engine_shape): Renders U+AC00 Hangul Syllables.
+
+2002-10-24  Tor Lillqvist  <tml@iki.fi>
+
+       * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+       cover some more simple scripts.
+
+       (itemize_shape_and_place): Handle unknown glyphs.
+
+       (script_engine_list): Only return the "everything" range if
+       Uniscribe is available. It would be nice to build up a more
+       specific range list based on the information ScriptGetProperties()
+       returns. That function lists information about each script the
+       Uniscribe version used can handle. Unfortunately, though, the
+       information is severely limited. It doesn't tell what Unicode
+       blocks a script covers. It only gives one language that uses
+       that script, and sometimes an charset number, but for most scripts
+       just the totally useless DEFAULT_CHARSET.
+
+2002-10-23  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/pango-layout.c (can_break_in):
+       Don't break at the first char in the first item on a line.
+       Fixes regression in linebreaking (#95900).
+
+2002-10-22  Tor Lillqvist  <tml@iki.fi>
+
+       * configure.in: Add --with-usp10 flag to indicate where to find
+       the usp10.h header, for using Uniscribe on Win32. Set USP10_H
+       autoconf variable, HAVE_USP10_H config.h macro and HAVE_USP10_H
+       automake conditional.
+
+       * acconfig.h: Add HAVE_USP10_H.
+
+       * pango/pangowin32-private.h (PANGO_WIN32_DEBUGGING): Change
+       semantics of this flag. If defined, also need to set env var
+       PANGO_WIN32_DEBUG to get the copious debugging output. 
+       Change PING() macro accordingly. Add variable pango_win32_debug.
+
+       * pango/pangowin32.c (pango_win32_get_dc): New function. Code
+       factored out from pango_win32_font_class_init() and
+       pango_win32_font_map_class_init().
+       (pango_win32_get_debug_flag): New function.
+       (pango_win32_render): Handle y offsets, too. Potentially need to
+       call ExtTextOutW several times, one for each run of sequential
+       glyphs with the same y offset.
+               
+       * pango/pangowin32.h: Declare above new functions, in the part
+       only for shaper engine use.
+
+       * pango/pangowin32.def: Export above new functions.
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_class_init):
+       Call pango_win32_get_dc() as mentioned above.
+
+       * modules/basic/Makefile.am: If HAVE_USP10_H, let basic-win32.lo
+       depend on usp10.h.
+
+       * modules/basic/basic-win32.c: If HAVE_USP10_H, and the Uniscribe
+       DLL usp10.dll is present, use Uniscribe.
+       (uniscribe_shape, itemize_shape_and_place,
+       set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
+       make_langid, init_uniscribe): New functions.
+       (dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
+       functions.
+
+2002-10-20  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/Makefile.am (SCANOBJ_FILES): Add $(DOC_MODULE).prerequisites.
+
+2002-10-15  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-xft.c (hangul_engine_shape): 
+       * modules/hangul/hangul-x.c (hangul_engine_shape): Added missing
+       memcpy() from the static jamo buffer to allocated jamo buffer
+       (#95569).  Thanks to Jungshik Shin.
+
+Mon Oct 14 15:39:41 2002  Manish Singh  <yosh@gimp.org>
+
+       * pango/pango-context.c pango/pango-layout.c pango/pangoft2.c
+       pango/pangowin32-fontmap.c pango/pangowin32.c pango/pangox-fontmap.c
+       pango/pangox.c pango/pangoxft-font.c pango/pangoxft-fontmap.c
+       pango/testfonts.c pango/opentype/pango-ot-ruleset.c:
+       Get rid of unnecessary casts for g_object_{ref,unref}
+
+2002-10-15  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/Makefile.am: Dist the xml/*.xml, not
+       sgml/*.sgml.  (#95678, Owen Taylor)
+
+2002-10-14  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/Makefile.am (SCANOBJ_FILES): Add $(DOC_MODULE).interfaces.
+
+Sun Oct 13 12:35:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.1.2 ===
+
+       * configure.in: Version 1.1.2, interface age 0.
+
+       * NEWS: Updates.
+
+2002-10-04  Alexander Larsson  <alexl@redhat.com>
+
+       * pango/pango-layout.[ch]:
+       * docs/tmpl/layout.sgml:
+       Add, implement and document PANGO_WRAP_WORD_CHAR
+
+Sun Sep 29 14:55:36 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c: ligatures can be also used in 
+       MarkBasePos lookups. (2001-03-17  Werner Lemberg)
+
+Sun Sep 29 14:51:25 2002  Owen Taylor  <otaylor@redhat.com>
+
+       Start of merges from freetype1 of OpenType fixes.
+
+       * pango/opentype/ftxgdef.c pango/opentype/ftxgpos.c pango/opentype/ftxgsub.c:
+       More fixes for special marks. (2001-03-17  Werner Lemberg)
+
+2002-09-28  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontmap.c (pango_win32_insert_font): Revert
+       change from 2002-09-21: Don't bypass the code that automatically
+       adds fonts to the families "monospace", "serif" and "sans". I
+       thought it would be unnecessary if you have a pango.aliases that
+       sets up aliases for these family names, but apparently
+       not. Without this code, pango_layout_line_get_empty_extents()
+       thinks empty lines have zero height, as it tries to use a font
+       called "sans" for instance, and no aliases get used.
+
+Fri Sep 27 17:50:51 2002  Owen Taylor  <otaylor@redhat.com>
+
+       (Based on GTK+ patch by J. Ali Harlow in #87774)
+
+       * configure.in: Add CROSS_COMPILING conditional.
+
+       * modules/Makefile.am (install-data-local): Don't
+       generate pango.modules when installing into a DESTDIR
+       or cross-compiling.
+
+       * examples/Makefile.am (all-local): Don't generate
+       pango.modules when cross-compiling.
+
+Fri Sep 27 13:10:25 2002  HideToshi Tajima  <hidetoshi.tajima@sun.com>
+
+       * modules/basic/tables-big.i: make charset ordering of
+       chinese character sets differently for chinese locales -
+       e.g., GB18030 is used first in zh-cn locales.
+       (#89937 James Su, Brian Yuan.)
+
+2002-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/Makefile.am: INCLUDED_WIN32_MODULES was missing from a
+       couple of places. (#93372)
+
+2002-09-24  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.c: Use PANGO_PIXELS macro throughout instead of
+       dividing by PANGO_SCALE.
+       (pango_win32_render): New try. This time handle both glyphs at
+       code point 0, specifically put there by PangoLayout to indicate
+       spacing (for tab handling), and actual invalid glyphs noticed by
+       the shaper. Invalid glyphs are indicated by the flag
+       PANGO_WIN32_UNKNOWN_FLAG. (Idea taken frompangoxft-font.c)
+       (pango_win32_get_unknown_glyph): Take also the char as parameter,
+       return the same char with the above flag ORed in.
+       (pango_win32_font_get_glyph_extents): If the glyph is flagged as
+       invalid, look for glyph 0 instead. Use g_win32_error_message() in
+       warning message instead of numeric error code.
+
+       * pango/pangowin32.h: Add the new parameter to the
+       pango_win32_get_unknown_glyph() declaration. Surround the API used
+       by shape engines with #ifdef PANGO_ENABLE_ENGINE.
+
+       * modules/basic/basic-win32.c: Change call accordingly.
+
+2002-09-24  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/opentype/pango-ot.def: Remove. Not used. (A static library
+       is built here. Exported entries are in ../pangoft2.def.)
+
+       * pango/opentype/Makefile.am (EXTRA_DIST): Remove from here, too.
+
+2002-09-23  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pango-color.c (pango_color_parse): Make color parsing
+       more robust and correct. (#93804)
+
+       * tests/testcolor.c: Tests for pango_color_parse.
+
+       * tests/Makefile.am: Build testcolor.
+
+       * tests/runtests.sh: Run testcolor. 
+
+2002-09-23  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/makefile.mingw.in
+       * pango/mini-fribidi/makefile.mingw
+       * pango/opentype/makefile.mingw.in
+       * examples/makefile.mingw.in
+       * modules/basic/makefile.mingw.in: Remove. Not maintained.
+
+       * pango/Makefile.am (EXTRA_DIST)
+       * pango/mini-fribidi/Makefile.am (EXTRA_DIST)
+       * pango/opentype/Makefile.am (EXTRA_DIST)
+       * examples/Makefile.am (EXTRA_DIST)
+       * modules/basic/Makefile.am (EXTRA_DIST): Remove
+       makefile.mingw(.in) from here, too.
+
+       * configure.in (AC_OUTPUT): Don't try to output above removed
+       files.
+
+       * examples/pangowin32.aliases: Remove. Not used.
+
+       * modules/basic/basic-win32.c: Minor spacing fixes, comment the
+       Unicode ranges covered.
+
+       * pango/makefile.msc
+       * pango/module-defs-win32.c.win32: Change according to change
+       below so that build also with the manually written makefile for
+       MSVC, which always uses included modules, still works.
+
+       * pango-zip.sh.in: Distribute specifically pango.aliases and
+       pango.modules, not the whole etc/pango which might contain editor
+       backup files.
+       
+Mon Sep 16 12:03:54  2002  Arnaud Charlet <charlet@gnat.com>
+
+       * modules/basic/basic-win32.c: Check for correct macro, use
+       correct module entry name, so that --with-included-modules works
+       with autoconfiscated build for Windows. (#93372)
+
+2002-09-21  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-private.h
+       * pango/pangowin32*.c: Rename DEBUGGING to PANGO_WIN32_DEBUGGING.
+       Use plain printf instrad of g_print in the PING macro for
+       debugging output (to avoid UTF-8 requirement).
+
+       * pango/pangowin32.h: Guard against redefinition of _WIN32_WINNT.
+
+       * pango/pangowin32-private.h: Remove the FS_VIETNAMESE define, not
+       needed. Rename PangoWin32Font::face to win32face. Add enum
+       PangoWin32CoverageLanguageClass, used to classify PangoLanguages
+       that might have locale-specific coverage of fonts (i.e. CJKV).
+       Change PangoWin32Face::coverage into an array, coverages. Move
+       some TrueType macro and struct defines from pangowin32.c
+       here. Rename them a bit to match the names used in the specs
+       better. Add declarations for new functions (see below).
+
+       * pango/pangowin32.c (pango_win32_get_hfont): Convert
+       LOGFONT::lfFaceName to UTF-8 before printing.
+
+       (pango_win32_render): Revert the change from
+       2002-09-05. Characters not in a font are supposed to show up at
+       this stage as invalid glyphs (usually a box). It's up to the
+       higher layers to filter out TABs and other characters that
+       shouldn't be visible.
+
+       (pango_win32_get_name_header, pango_win32_get_name_record): New
+       functions, to read the name table header and records from a
+       TrueType font.
+
+       (font_name_in): New function, checks if a font has a name in one
+       of the spoecial-case languages, or actually locales (zh_TW, zh_CN,
+       ja, ko, vi). Checks the TrueType name table.
+
+       (pango_win32_font_calc_coverage): Take a PangoLanguage parameter,
+       too.  Use it to decide whether to hide the Unified CJKV Ideographs
+       block in case the font is not for the specified locale. If so, the
+       coverage for these characters is set to PANGO_COVERAGE_APPROXIMATE.
+
+       * pango/pangowin32-fontmap.c: Remove PangoWin32FontMap::faces,
+       unused. Remove dead _WE_WANT_GLOBAL_ALIASES_ code. Rename
+       parent_class to font_map_parent_class to match pangox-fontmap.c.
+
+       (get_family_name, get_family_name_lowercase): New functions.
+       Search for an English name for a TrueType font, in case the font
+       name in LOGFONT::lfFaceName is non-ASCII. (Can one assume that if
+       it is ASCII, it is the English name? Do some TrueType fonts have
+       different names in French, German, etc, and does the system return
+       these if the locale is set to use French, German, etc?)
+
+       (pango_win32_insert_font): Don't store LOGFONTs that differ only
+       in charset. What charset we specify when calling
+       CreateFontIndirect() is irrelevant, as we are going to use
+       ExtTextOutW() anyway, i.e. Unicode. Use the English family name
+       from get_family_name_lowercase(), not the one returned in the
+       LOGFONT from font enumeration.
+
+       Bypass the code that sets up the mapping for monospace, serif and
+       sans, and the recignition of plain "courier" for "courier new". We
+       need a pango.aliases anyhow, so let it handle that.
+
+       (pango_win32_coverage_language_classify): New function.
+
+       (pango_win32_font_entry_set_coverage,
+       pango_win32_font_entry_get_coverage): Take also a PangoLanguage
+       parameter, use the corresponding entry in the
+       PangoWin32Face::coverages array.
+       
+       * pango/pango-utils.c (pango_get_lib_subdirectory,
+       pango_get_sysconf_subdirectory): Fix doc comment on Win32
+       behaviour.
+
+Thu Sep 19 15:12:21 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c (pango_scan_int): Fix problem
+       where position wasn't updated properly.
+
+Mon Sep 9 11:09:18 Eric Mader  <mader@jtcsv.com>
+       
+       * pango/pango/opentype/pango-to-ruleset.c: correctly handle back,
+       new_advance.
+
+Fri Sep 6 15:41:28 Eric Mader  <mader@jtcsv.com>
+       
+       * pango/pango/opentype/ftxopen.c:
+       * pango/pango/opentype/ftxopen.h: don't fail on an empty script
+       
+2002-09-05  jacob berkman  <jacob@ximian.com>
+
+       * autogen.sh: copy version with automake-1.4 fixes from -1-0 branch
+
+2002-09-05  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.c (pango_win32_render): Render only valid
+       glyphs. Fix by Florent Duguet. Don't know if this is quite the
+       correct way to fix the problem of default glyphs (ugly boxes)
+       showing up, maybe invalid glyphs never should get this far, but be
+       noticed earlier?
+
+2002-09-04  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango-utils.c: G_WIN32_DLLMAIN_FOR_DLL_NAME not needed on
+       Cygwin, surround with #ifdef G_OS_WIN32. (91785, Masahiro Sakai)
+
+Wed Aug 28 15:22:14 2002  Eric Mader   <mader@jtcsv.com>
+       
+       * pango/modules/indic/indic-ot.h:
+       * pango/modules/indic/indic-ot.c:
+       * pango/modules/indic/indic-ot-class-tables.c:
+       Change Punjabi script ('punj') to Gurmukhi ('guru')
+       
+Tue Aug 20 17:31:39 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Released 1.1.1.
+
+       * configure.in: Update versions numbers.
+
+       * NEWS: Updated.
+
+       * docs/pango-sections.txt: Updated.
+
+       * pango/pangoxft-font.c (pango_xft_font_[un]lock_face): 
+       Fix docs.
+
+Tue Aug 20 17:14:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.cI: conditionalize 
+       FC_PATTERN usage on #ifdef FC_PATTERN, since
+       it only existed in fontconfig for a brief amount 
+       of time.
+
+Tue Aug 20 16:06:36 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Make the test for VARARGS macros
+       more robust, fixing problem with misbehaving
+       IRIX compiler that doesn't error on #error.
+       (#90267)
+
+Tue Aug 20 15:42:33 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-xft.c (maybe_add_SUB_feature): 
+         modules/indic/indic-xft.c (maybe_add_GPOS_feature): 
+         modules/indic/indic-ot.c (getOutputIndex)
+         modules/hebrew/hebrew-x.c (get_glyph_num)
+         modules/basic/basic-x.c (find_char): Fix missing
+        statics.
+
+       * modules/thai/{thai-shaper.[ch] thai-xft.c thai-x.c}:
+       Namespace the "abstract functions" that thai-xft/thai-x.c
+       export to thai-shaper.c.
+
+       * modules/arabic/arabic-{ot.[ch],ft2.c,xft.c}: 
+       Rename Assign_Arabic_Properties to Arabic_Assign_Properties.
+
+Tue Aug 20 15:06:50 2002  Owen Taylor  <otaylor@redhat.com>
+       * modules/arabic/arabic-xft.c modules/arabic/arabic-ft2.c
+       modules/basic/tables-big.i modules/basic/tables-small.i
+       modules/hebrew/hebrew-ft2.c modules/hebrew/hebrew-xft.c:
+       Patch from Nils Nordman to add various missing 'static'
+       (#90353)
+Mon Aug 19 14:07:02 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.cI (pango_fc_font_map_get_patterns):
+       Delete the FC_PATTERN out of the result of FcFontRenderPrepare(),
+       because it makes identical fonts look like not identical fonts.
+
+       * pango/pangofc-fontmap.cI (uniquify_pattern): pango/pangoft-fontmap.c
+       pango/pangoxft-fontmap.c: Use a hash table to uniquify the patterns
+       we cache to save memory and speed lookups.
+
+       * pango/pangoxft-font.c (pango_xft_font_get_font): Split into
+       a public wrappper (with g_return_if_fail()) around a static
+       internal function (without check).
+
+       * pango/pangoxft-fontmap.c (_pango_xft_font_map_get_info): Remove
+       checked cast, since it was showing up high on profiles.
+
+Fri Aug 16 17:49:38 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.cI pango/pangoxft-fontmap.c 
+       pango/pangoft2-fontmap.c pango/pangoxft-private.h 
+       pango/pangoft2-private.h pango/pangoxft-font.c 
+       pango/pangoft2.h: Move the common code between PangoXftFontmap
+       and PangoFT2Fontmap into a new file that is included from both
+       with appropriate #defines. This provides most of the
+       recent Xft backend improvements for the FT2 backend
+       as well.
+
+Tue Aug 13 16:38:19 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_get_patterns): 
+       Keep a separate description => fontset hash for each
+       language tag. Pass language tags through to Xft.
+
+Tue Aug 13 00:20:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Released 1.1.0
+
+Thu Aug  8 23:14:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox-fontmap.c pango/pangoxft-fontmap.c:
+       use XAddExtension() magic to automatically clean
+       up our information when XCloseDisplay() is called.
+
+       * NEWS: Some updates for 1.1.x features.
+
+       * README: Update a bit.
+
+       * configure.in: Print Xft for the Xft backend, not Xft2
+       when printing summary.
+
+Thu Aug  8 21:37:48 2002  Owen Taylor  <otaylor@redhat.com>
+
+         Some fixes from #90267
+       
+       * configure.in: Fix case where freetype2 is not in
+       default include path. Quiet some warnings if
+       /usr/lib/qt* doesn't exist.
+       * examples/Makefile.am: Fix problem where if no
+       Qt was found, -I /include was in the CFLAGS.
+Thu Aug  8 19:34:03 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Remove the HAVE_FONTCONFIG conditional;
+       instead make the HAVE_FREETYPE conditional
+       be $have_freetype && $have_fontconfig.
+
+       * pango/Makefile.am: Use the HAVE_FREETYPE conditional
+       for checking whether we are building the FT2 backend,
+       as we do everywhere else.
+
+Thu Aug  8 19:14:09 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (load_fallback_font): Fix
+       accidentally exported set_unicode_charmap() and
+       load_fallback_face/font(). (Jacob Berkman, #90245)
+
+       * configure.in: Up PANGO_MODULE_VERSION to 1.1.0.
+
+Thu Aug  8 19:00:49 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c: Up MAX_FREED_FONTS to 128
+
+       * pango/pangoxft-fontmap.c (pango_xft_pattern_equal):
+       Short-circuit pattern1 == pattern2.
+
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_get_patterns):
+       Patch from Keith Packard to use PangoFontSetSort rather
+       than our previous substitute-and-split-the-substitution
+       hack; this means that if any font on the system has the 
+       character, it will be used.
+
+       * pango/pangoxft-fontmap.c (_pango_xft_font_map_cache_add):
+       Reorder so that it works with MAX_FREED_FONTS == 0.
+
+Thu Aug  8 18:55:21 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am (INCLUDES): Add FONTCONFIG_CFLAGS
+       to INCLUDES. (Joe Yandle.)
+
+2002-08-08  jacob berkman  <jacob@ximian.com>
+
+       * modules/hangul/Makefile.am (EXTRA_DIST): add tables-jamos.i
+       (xft_sources): add hangul-defs.h so it gets disted
+
+Wed Aug  7 14:35:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Fix missing trailing newline in file.
+
+Wed Aug  7 09:14:00 2002  Michael Meeks  <michael@ximian.com>
+
+       * configure.in: echo status at end.
+
+Wed Aug  7 12:32:39 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (TT_Load_GSUB_Table):
+       Offset to MarkAttachClassDef is offset to table,
+       not offset to offset to table.
+
+       * pango/opentype/ftxopen.c (Get_Device): Handle
+       NULL device tables which we represent with
+       d->DeltaValue == NULL.
+
+Wed Aug  7 11:07:10 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/hangul-xft.c (hangul_engine_shape): Get
+       rid of direct access to FT_Face.
+
+Wed Aug  7 10:57:49 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/Makefile.am modules/thai/Makefile.am:
+       Add missing XFT_CFLAGS to INCLUDES. (Joe Yandle)
+
+Mon Aug  5 23:57:59 2002  Owen Taylor  <otaylor@redhat.com>
+        
+       * pango/pangoxft-fontmap.c (pango_xft_pattern_hash): Use
+       FcPatternHash instead of rolling our own. (Slight speed
+       decrease) (Keith Packard)
+
+       * pango/pangoxft-fontmap.c (pango_xft_get_font_map):
+       Remove accidentally deleted call to init_fontset_hash().
+
+Mon Aug  5 23:12:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+       Patch from Keith Packard:
+
+       * pango/pangoxft-private.h (struct _PangoXftFont): Add
+       some comments.
+
+       * pango/pangoxft-private.h pango/pangoxft-font.c
+       pango/pangoxft-fontmap.c: Identify coverage by a 
+       pair of filename and index within the filename instead
+       of just a filename, to handle TrueType Collection (TTC)
+       fonts.
+
+       * pango/pangoxft-fontmap.c (pango_xft_make_pattern):
+       Remove some leftover comments.
+
+Mon Aug  5 21:54:21 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c (pango_xft_get_font_map): Export.
+
+       * pango/pango-context.[ch]: Add pango_context_get_fontmap(),
+       allow fontmap = NULL for pango_context_set_fontmap().
+
+       * pango/pangoxft-font.c pango/pangoxft-fontmap.c
+       (pango_xft_font_get_metrics): More work on allowing
+       displays to be shut down, while leaving basically
+       working fonts behind.
+
+Fri Aug  2 12:12:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft.h pango/pangoxft-fontmap.c
+       (pango_xft_shutdown_display): New function allowing us to shut
+       down a display.
+
+Thu Aug  1 10:41:26 2002  Owen Taylor  <otaylor@redhat.com>
+       * configure.in: Fix check for having any backend
+       HAVE_XFT => have_xft, etc. (Problem reported
+       by Andreas J Guelzow)
+2002-08-01  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-x.c (render_syllable_with_ksx1005):
+       Renders the prefix of uncomposable Hangul syllable in the way of
+       other font encoding code.
+
+Wed Jul 31 16:00:20 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/thai/thai-xft.c (make_glyph): Minor tweak
+       to last patch to clarify index passed to unknown_glyph().
+
+Wed Jul 31 15:43:39 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/thai/{thai-shaper.h,thai-x.c,thai-xft.c}:
+       Argument to make_glyph() shouldn't have been
+       unsigned char, since we pass unicode through it.
+
+       * modules/thai/thai-xft.c (make_glyph): Handle 
+       THAI_FONT_ISO10646 correctly. If a character isn't
+       found, return the correct unknown glyph.
+
+Sat Jul 27 18:18:20 2002  Owen Taylor  <otaylor@redhat.com>
+
+       Patch from Changwoo Ryu  <cwryu@debian.org> (#86591)
+
+       * configure.in, modules/hangul/Makefile.am: : Added hangul-xft
+       module.
+
+       * modules/hangul/hangul-xft.c: New file, shaping Hangul Jamos
+       (U+1100-U+11FF) with Xft.
+
+       * modules/hangul/hangul-x.c (JOHAB_COMMON): Render any prefix of
+       uncommposable Hangul syllable as a syllable, and render remains as
+       uncomposed form.  This looks better than completely uncomposed
+       jamo glyphs.
+       (render_syllable_with_iso10646): Likewise.
+       (render_syllable_with_ksc5601): Likewise.
+       (hangul_engine_shape): Fixed memory leak on shaping a syllable
+       with >= 6 jamos.
+
+       * modules/hangul/tables-jamos.i, modules/hangul/tables-ksc5601.i:
+       Separated Hangul Jamo mapping table from ksx1001 <=> unicode
+       table.
+
+       * modules/hangul/hangul-defs.h: New file with some common defines
+       and macros.
+
+       * modules/hangul/hangul-x.c (render_syllable_with_johabs): Fixed
+       wrong font index around fallback display with johabs.
+       (find_subfont): Uses "johabsh-1" (johabs-1 font with Hanja) in the
+       same way with "johabs-1".
+
+Wed Jul 31 14:41:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_list_subfonts): Make charset
+       ordering more important than ordering in the font
+       specfication, and document the previously undocumented
+       ordering. (#88562, Brian Yuan.)
+
+Wed Jul 31 12:38:36 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/querymodules.c (string_needs_escape): Avoid
+       using g_strescape(), since it mangles UTF-8.
+       (#89479, Yao Zhang)
+
+Tue Jul 30 23:10:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/shape.c (pango_shape): Set is_cluster_start
+       attributes based on the log_clusters[] set by the shape
+       engine. (Fix for #84307, Reported by Alex Larsson, others.)
+
+Sat Jul 27 09:46:51 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/thai/{thai-shaper.[ch],thai-x.c,thai-xft.c}
+       (make_unknown_glyph): Fix problem where 
+       pango_xft_get_unknown_glyph() was being used for X
+       fonts. (reported by Jacob Berkman)
+
+Fri Jul 26 19:46:45 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-x.c modules/basic/tables-big.i:
+       Patch fromm Qingjiang (Brian) Yuan adding support
+       for GB-18030, BIG5-HKSCS, CNS-11643 and GBK encodings.
+       Also fix wrong encoding for Big5 fonts and look
+       for big5-1 as well as big5-0 for the encoding name.
+       
+Fri Jul 26 19:23:58 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/hangul-x.c modules/hangul/tables-ksc5601.1:
+       Patch from Qingjiang (Brian) Yuan and Changwoo Ryu
+       to add support for ksc5601.1992-3 fonts.
+
+Fri Jul 26 18:48:49 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in modules/thai/Makefile.am 
+         modules/thai/thai-shaper.[ch]
+         modules/thai/thai-xft.c modules/thai/thai-x.c:
+       Patch from Theppitak Karoonboonyanan that factors
+       out common code from thai-x.c and adds a new 
+       Xft shaper for Thai. (#78346)
+
+       * pango/pangoxft.h pango/pangoxft-font.c: Add
+       pango_xft_font_has_char()
+       to optimize for cases where we don't actually need 
+       to load the font.
+
+       * pango/pangoxft.h: Document pango_xft_font_get_glyph().
+
+       * modules/basic/basic-xft.c (basic_engine_shape): Clean
+       up an unused variable warning.
+
+Fri Jul 26 18:11:56 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Add back non-spurious \$ removed in last commit.
+
+Fri Jul 26 18:11:56 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Fix a leftover spurious \$ from the last commit.
+
+Fri Jul 26 17:59:06 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Replace uses of grep \(A\|B\) ... with
+       egrep (A|B). (#84872, Arnaud Charlet)
+
+Thu Jul 25 11:42:17 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_shutdown_display)
+       * pango/pangowin32-fontmap.c (pango_win32_shutdown_display):
+       Handle checking for fontmap == NULL and setting
+       it to NULL after unrefing properly. (#87915, 
+       Sven Neumann)
+
+Wed Jul 24 23:07:43 2002  Owen Taylor  <otaylor@redhat.com>
+       * pango/pango-layout.c: Fix wrong assertion that was
+       dying on lines separated by PS (U+2029). (#88824,
+       Choe Hwangjin)
+2002-07-22  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): don't access the old
+       (invalid) face pointer after loading a fallback face because we
+       couldn't set the unicode charmap.
+
+Mon Jul 15 20:22:46 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c: Fix trivial typo that was
+       causing the charcode hex boxes to be misrendered.
+
+Mon Jul 15 14:56:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Move
+       setting of load_flags before we do any checks for the 
+       font so they apply to the fallback font as well.
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Supply
+       FT_LOAD_NO_BITMAP as temporary workaround for problems
+       with embedded bitmaps, since we can't render bitmap fonts 
+       at the moment.
+
+Wed Jul  3 18:54:14 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2.c: Fix some typos.
+
+Wed Jul  3 18:39:45 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2.c pango/pangoxft-font.c: Be more
+       robust when trying to set the unicode character
+       map on the font.
+
+       * pango/pangoft2.c pango/pangoft2-private.h: 
+       Obey FC_HINTING, FC_AUTOHINT.
+
+Mon Jul  1 19:45:10 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c (pango_xft_set_default_substitute): 
+       New function to allow tweaking of FcPattern default
+       substitution (for XSETTINGS support.)
+
+       * pango/pangoft2-fontmap.c pango/pangoft2.[ch]
+       pango/pangoft2-private.h: Rationalize DPI and
+       context creation by adding:
+
+       pango_ft2_font_map_new()
+       pango_ft2_font_map_set_resolution()
+       pango_ft2_font_map_set_default_substitute()
+       pango_ft2_font_map_create_context() 
+
+2002-07-02  Matthias Warkus  <mawarkus@gnome.org>
+
+       * pango/pango-markup.c (span_parse_func): Fixed typo that was
+       causing markup with <span rise="..."> attributes to
+       segfault. Permission to commit to HEAD and stable branch granted
+       by Owen Taylor.
+
+Sat Jun 15 23:26:41 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/arabic-ot.c: Support new Arabic
+       characters in Unicode 3.2. (Patch from Roozbeh
+       Pournader.)
+
+Thu Jun 13 16:39:01 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c (pango_parse_markup):
+       Fix problem with attr_list == NULL. (#85079,
+       Andreas J. Guelzow)
+
+Wed Jun 12 11:19:08 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/tamil/tamil-x.c: Use unsigned char for
+       bitfield array. (#83257, David L. Cooper II)
+
+       * tests/gen-all-unicode.c (main): Used char,
+       not guchar for array of characters. (#83258,
+       David L. Cooper II.)
+
+-Wed Jun 12 11:08:35 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/langboxfont.[ch] modules/arabic/naqshfont.[ch]:
+       Change @glyph2 parameter of arabic_*_recode() to be a gunichar*
+       like @glyph. (Fixes warning with Solaris 8 compiler;
+       #83256, David L. Cooper II)
+
+Wed Jun 12 11:02:04 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am (EXTRA_DIST) examples/pangoft2.aliases:
+       Remove pangoft2.aliases from CVS/distribution; it is
+       no longer used. (#82736, Sven Neumann.)
+
+2002-06-10  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pango-fontset.c (pango_fontset_real_get_metrics): Don't
+       leak raw_metrics and don't copy refcounts.  (#84533)
+
+Thu Jun  6 15:01:48 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pangoft2.pc.in (Cflags): Add @FREETYPE_CFLAGS@
+
+       * tests/Makefile.am (INCLUDES): Add XFT_CFLAGS.
+         gtk/Makefile.am (INCLUDES): Add back FREETYPE_CFLAGS.
+
+Thu Jun  6 08:54:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Update the versioning to reflect '1.1.x'
+       (Use the 100 * minor + micro convention.)
+
+Thu Jun  6 08:42:32 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Provide : as the fourth argument
+       whne checking for fontconfig, xft, so we don't error out 
+       if they aren't found. (#84333, HideToshi Tajima)
+
+Tue Jun  4 11:52:10 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pangoxft.pc.in (Cflags): Fix to have @XFT_CFLAGS@
+
+Mon Jun  3 22:16:35 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_coverage): 
+       Don't open the font unecessarily, we already have 
+       the FcCharSet.
+
+Mon Jun  3 18:56:09 2002  Owen Taylor  <otaylor@redhat.com>
+
+       Xft2 and fontconfig conversion, based largely on a patch
+       from Keith Packard.
+
+       * configure.in acconfig.h: Add checks for fontconfig, switch
+       Xft checks to switch for Xft2 using pkg-config.
+
+       * pangoxft.pc.in pangoxft.pc.in 
+       modules/{arabic,basic,hebrew,indic,tamil}/Makefile.am
+       pango/Makefile.am: Reflect new Xft/fontconfig dependencies.
+
+       * pango/pangoxft-private.h pango/pangoxft-fontmap.c 
+       modules/arabic/arabic-xft.c modules/indic/indic-xft.c: 
+       Switch over to using Xft2 and fontconfig.
+
+       * pango/pangoft2.c pango/pangoft2-fontmap.c pango/pangoft2-private.h 
+       pango/pango/Makefile.am: Remove usage of mini-xft in 
+       favor of fontconfig.
+
+       * pango/pango-ot.h pango/opentype/pango-ot-info.c pango/pangoxft.h
+       modules/arabic/arabic-{xft,ft2}.c modules/indic/indic-xft.c:
+       Attach OpenType information directly to the FT_Face
+       structure using FT_Generic.
+
+       * modules/tamil/Makefile.am modules/tamil/tamil-xft.c 
+       configure.in: Remove this module, no longer needed.
+
+       * pango/pangoxft-font.c (pango_xft_real_render): Coalesce
+       calls to Xft rendering functions.
+
+2002-06-03  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/fonts.c (pango_font_description_better_match): Typo fix.
+
+       * pango/pango-color.c (pango_color_parse): 
+       * docs/pango-docs.sgml: Replace homegrown "nbsp", "hash"
+       and "mdash" entities by standard ISO entities "nbsp", "num" and
+       "mdash". 
+
+2002-06-03  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_list_families): set
+       n_families, fixes bug #83746.
+
+2002-05-28  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/*: Produce XML, not SGML.
+
+       * pango/fonts.c (pango_font_family_list_faces): Docs typo fix.
+
+       * pango/pango-color.c (pango_color_parse): Fix markup to reduce
+       spurious <link>s.
+
+2002-05-26  Tor Lillqvist  <tml@iki.fi>
+
+       * pango-zip.sh.in: Use complete PANGO_VERSION in zip file
+       names.
+
+       * pango/Makefile.am: (Win32) Compile resource files and link with
+       them.
+
+       * pango/pango.rc.in
+       * pango/pangoft2.rc.in
+       * pango/pangowin32.rc.in: Include also the micro version number.
+
+       * pango/pangowin32-fontcache.c (logfont_hash): Use absolute value
+       of lfHeight.
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_for_display):
+       Instead of HORZSIZE which is Windows idea of physical monitor
+       width (but which can be *very* wrong), use LOGPIXELSY (the
+       "logical" dpi). This can be set by the user by choosing "small
+       fonts", "large fonts", or a custom dpi in the Display Settings.
+       Thanks to Joaquin Cuenca Abela.
+
+       (pango_win32_make_matching_logfont): Set lfHeight to the negative
+       of the requested size. Positive lfHeight indicates "cell height",
+       negative "character height" (?), which is closer to what we want,
+       says Joaquin Cuenca Abela.
+
+Tue May 21 15:27:41 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/tables-big.i: Fix C++ comment.
+       (#82035, David L. Cooper II)
+
+Tue May 14 12:02:13 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c pango/pangoft2-fontmap.c:
+       Report standard aliases as uppercase, fix 
+       pango_*_face_describe() for aliases.
+
+Mon May 13 15:56:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-fontmap.c: Fake sans,serif,monospace
+       in the list of fonts.
+
+       * pango/pangoft2-fontmap.c: Fake aliases here as well.
+
+       (#78714, Xavier Cho.)
+
+Mon May 13 14:58:12 2002  Owen Taylor  <otaylor@redhat.com>
+       * pango/pangox.c configure.in: Add a implementation
+       of strtok_r (copied from glibc) for machines that don't
+       have it. (#79472, Jacob Berkman.)
+       * pango/querymodules.c: Use printf() rather than
+       g_print, since we don't want encoding conversion.
+       (#77341)
+Fri May 10 14:41:27 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgdef.c (TT_Load_GDEF_Table): Fix acess
+       outside of a loaded frame and some memory leaks
+       on failure.
+
+Tue May  7 19:20:05 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/tamil/Makefile.am (EXTRA_LTLIBRARIES): Temporarily
+       remove tamil-xft from the build until we figure out
+       what to do with it. (Obscures the OpenType Tamil engine.)
+
+       * examples/HELLO.utf8: Fix spelling of Punjabi, removing
+       stray vowel.
+       
+Mon May 06 15:07:39 2002 Eric Mader <mader@jtcsv.com>
+       * Add modules modules/indic/indic-xft.c, indic-ot.c, indic-ot.h, indic-ot-class-tables.c
+
+       * pango/opentype/ftxgdef.c: Compute full offset for mark attachment class table
+
+       * pango/opentype/ftxgpos.c: Only return TTO_Err_Not_Covered if nothing matches
+
+       * pango/opentype/pango-ot-ruleset.c: enable GPOS processing
+       
+2002-05-02  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/Makefile.am (GTKDOC_CFLAGS, GTKDOC_LIBS): Set these. 
+
+       * docs/pango.types: Add some types here.
+
+Tue Apr 23 16:15:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/fterrcompat.h: Add compatibility 
+       defines for changes in FreeType 2.1.0.
+
+Tue Apr 23 15:21:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * README: Fix typo. (#79574)
+
+Wed Mar 27 19:30:35 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * Released 1.0.1
+
+       * NEWS: Updates.
+
+       * configure.in: Version 1.0.1, interface, binary age 1.
+
+Tue Mar 26 18:22:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-*.c modules/basic/basic-common.h: Move
+       ZERO_WIDTH_CHAR() macro into a common header file, add
+       ZERO WIDTH-NO BREAK SPACE (U+FEFF)
+
+       * modules/basic/Makefile.am (EXTRA_DIST): Add basic-common.h.
+
+2002-03-26  Alex Larsson  <alexl@redhat.com>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_load_font):
+       Free pattern after using it.
+
+2002-03-26  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-private.h
+       * pango/pangoft2.c (pango_ft2_font_get_metrics): calculate 
+       average_char_width and average_digit_width by measuring sample layouts
+       and cache font metrics per language just like PangoX does, #53425.
+
+       * pango/pangoxft-font.c
+       * pango/pangoxft-private.h: the same approach for average_char_width
+       and average_digit_width as in PangoFT2, #53425.
+
+Mon Mar 25 15:53:17 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (read_modules): Remove warning about
+       opening modules file... in some cases (included modules)
+       it isn't needed, and the warning about no modules that
+       was added recently should let people know what is going
+       on. (#73834, Arnaud Charlet)
+
+Mon Mar 25 15:46:54 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-*.c: Convert U+00A0 (NON BREAK SPACE)
+       to U+0020 (SPACE). (#73279, Mikael Hallendal)
+
+       * modules/basic/basic-xft.c (basic_engine_shape): Remove
+       some dead code.
+
+Mon Mar 25 15:31:17 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangowin32.c (pango_win32_font_get_metrics): Set
+       the right font when computing the average digit width.
+
+Mon Mar 25 14:52:29 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_font_get_metrics): Rewrite
+       average_digit_width computation to go through the same 
+       shaping hack as the average_char_width code.
+       (Part of #53425)
+
+       * pango/pangox.c (pango_x_font_describe): Implement
+       except for results of pango_x_font_load().
+
+       * pango/pangox.c (pango_x_load_font): Document as
+       "don't use".
+
+       * pango/pangox.[ch] (pango_x_load_font): Add missing const.
+
+2002-03-25  Sven Neumann  <sven@gimp.org>
+
+       * pango/fonts.c (pango_font_description_from_string): this function
+       may never return NULL, so we shouldn't say so in the comment.
+
+Wed Mar 20 18:40:34 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (build_map): Add an informative
+       warning if no modules at all were found. (#74982,
+       suggestion from Dan Winship.)
+
+Wed Mar 20 15:22:54 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Error out if no backends found. (#74880)
+
+Wed Mar 20 15:14:15 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c (text_handler): Dummy-initialize
+       gsize variable to 0, not -1. (#73899, Erwann Chenede)
+
+Wed Mar 20 14:57:48 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-x.c  modules/basic/tables-{big,small}.i: 
+       When loading an iconv converter fails, recover gracefully
+       and warn rather than aborting. (#73861, report about problems
+       on IRIX from Soeren Sandmann)
+
+2002-03-18  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/basic/tables-big.i: Enabled ksc5601 fonts for the Hangul
+       compatibility jamos, the CJK unified ideographs, and the CJK
+       compatibility ideographs areas.
+
+2002-03-17  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-private.h: Add pango_win32_os_version_info
+       variable, an OSVERSIONINFO struct.
+
+       * pango/pangowin32.c: Initialise it.
+
+       * pango/pangowin32.h: Set _WIN32_WINNT to 0x0501 before including
+       <windows.h> to get the ClearType-related macros defined (if recent
+       enough headers are used).
+
+       * pango/pangowin32-fontcache.c (pango_win32_font_cache_load): Set
+       desired font quality to CLEARTYPE_QUALITY if on XP (or later), and
+       the system settings ask for ClearType.
+
+2002-03-16  Sven Neumann  <sven@gimp.org>
+
+       * configure.in (GLIB_CFLAGS): use CFLAGS from gthread-2.0 to assure
+       pango behaves correctly in a threaded environment.
+
+Fri Mar 15 12:25:26 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/tables-big.i: Prefer ksc5601 fonts to
+       unicode fonts for "ko" locales.
+
+Fri Mar 15 01:35:56 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c pango/opentype/ftxopen.c
+       pango/opentype/ftxopenf.h: In Load_ChainContextSubst2,
+       handle the case where an empty class definition
+       is represented by an offset of 0.
+
+       * pango/opentype/ftxgpos.c: Same for Load_ChainContextPos2.
+
+       * pango/opentype/{ftxopen.c,ftxgpos.c,ftxgsub.c,ftgdef.c}:
+       Fix pervasive bug where on cleanups on failure of loading
+       an array element, all array elements were freed, not
+       just the ones that had been succesfully loaded.
+
+Thu Mar 14 23:05:18 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxopen.c: Uncomment GPOS parts.
+
+       * pango/opentype/disasm.c: Start adding some GPOS
+       dumping.
+
+Thu Mar 14 20:28:59 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Check for FT_Get_First_Char from
+       FreeType-2.0.9.
+
+       * pango/pangoft2.c pango/pangoxft-font.c: Use
+       FT_Get_First_Char/Get_Next_Char to accelerate coverage calculation.
+
+Thu Mar 14 20:02:58 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am (EXTRA_DIST): Remove moc_view-qt.cc. (#74725)
+
+Wed Mar 13 10:31:07 2002  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-coverage.c (pango_coverage_max): Fix typo
+       when computing maximums of sub-byte fields. (Stefan Israelsson,
+       #74518)
+
+2002-03-12  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pangowin32-fontcache.c, pango/pangox-fontcache.c: Minor doc edits.
+
+       * docs/tmpl/win32-fonts.sgml: Document PangoWin32FontCache.
+
+       * docs/tmpl/x-fonts.sgml: Document PangoXFontCache.
+
+       * docs/tmpl/glyphs.sgml: Document PangoGlyphInfo.
+
+       * docs/tmpl/opentype.sgml: Document PangoOTInfo, PangoOTTag,
+       PangoOTTableType.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-20 b/ChangeLog.pre-1-20
new file mode 100755 (executable)
index 0000000..362a440
--- /dev/null
@@ -0,0 +1,1109 @@
+2008-03-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.20.0 ===
+
+       * configure.in: Version 1.20.0
+
+       * NEWS: Updated.
+
+2008-02-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 518084 – Thai is not Virama language
+       Patch from Theppitak Karoonboonyanan
+
+       * pango/break.c: Remove Thai Phinthu from VIRAMA()
+
+2008-02-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.19.4 ===
+
+       * configure.in: Version 1.19.4
+
+       * NEWS: Updated.
+
+2008-02-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 511172 – pango_layout_set_height() with positive height always
+       shows at least two lines
+
+       * pango/pango-layout.c (should_ellipsize_current_line),
+       (pango_layout_check_lines),
+       (pango_layout_get_empty_extents_at_index),
+       (pango_layout_line_get_empty_extents):
+       Initialize line_height using empty-line extents.
+
+2008-02-25  Tor Lillqvist  <tml@novell.com>
+
+       Bug 515484 – Uniscribe interface handles surrogate
+       pairs incorrectly
+
+       * modules/basic/basic-win32.c (itemize_shape_and_place): Pass
+       correctly offset wchar string to set_up_pango_log_clusters() so
+       that when it passes the string on to unichar_index(), that
+       function notices the surrogate pairs correctly.
+
+2008-02-24  Tor Lillqvist  <tml@novell.com>
+
+       Bug 515484 – Pango on Windows is missing Type 1
+       font support
+       Patch from Adrian Johnson.
+       
+       * pango/pangowin32-private.h (PangoWin32Face): Add has_cmap field
+       that tells whether the font has a cmap or not. A Type 1 font
+       doesn't.
+
+       * pango/pangowin32.c (pango_win32_font_get_type1_glyph_index): New
+       static function. Uses GetGlyphIndicesW() to get the glyph indices
+       for Type 1 fonts. Possibly also TrueType fonts that for some
+       reason lack the cmap formats we understand.
+       (pango_win32_font_calc_type1_coverage): New static function. Uses
+       GetFontUnicodeRanges() to get the coverage for Type 1 fonts, and
+       possibly TrueType fonts that lack the cmap formats we understand.
+       (pango_win32_font_get_glyph_index): Set has_cmap to false if the
+       font doesn't have a cmap. Call
+       pango_win32_font_get_type1_glyph_index() in that case.
+       (pango_win32_font_calc_coverage): Set has_cmap to false if the
+       font doesn't have a cmap. Call
+       pango_win32_font_calc_type1_coverage() in that case.
+       
+       * pango/pangowin32-fontmap.c (pango_win32_enum_proc): Accept also
+       Type 1 fonts.
+       (pango_win32_insert_font): Initialise has_cmap tentativaly to True.
+
+2008-02-21  Kristian Rietveld  <kris@imendio.com>
+
+       * modules/basic/basic-atsui.c (basic_engine_shape): free the
+       ATSU style and utf16 string at the end.
+
+2008-02-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 517083 – pango modules: wrong fallback adding code?
+
+       * pango/modules.c (map_add_engine): Fix typo.
+
+2008-02-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c: Improve docs.
+
+2008-02-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c: Improve docs.
+
+2008-02-14  Tor Lillqvist  <tml@novell.com>
+
+       Bug 515484 – Pango on Windows is missing non-TrueType 
+       font support
+       Patch from Adrian Johnson.
+
+       * pango/pangowin32-fontmap.c (pango_win32_enum_proc): Accept also
+       OpenType/PS fonts. Interpret the metrics parameter as a
+       NEWTEXTMETRICW struct and check the ntmFlags field.
+
+2008-02-13  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c: indentation.
+
+2008-02-09  Dominic Lachowicz <domlachowicz@gmail.com>
+
+       Bug 515484 – Variable is initialized twice
+
+       * pango/pangofc-fontmap.c (_pango_fc_font_map_fc_to_coverage):
+       Variable was initialized twice.
+       
+2008-02-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 504810 – Samvruthokaram (combination of U+0D41 and U+0D4D) is not
+       rendered correctly
+       Patch from Praveen A
+
+       * modules/indic/indic-ot-class-tables.c:
+       * modules/indic/indic-ot.c (indic_ot_reorder):
+       "Fix" it.
+
+2008-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Oops.  Add fontconfig cflags/libs with freetype's.
+
+2008-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 496244 – Don't use freetype-config, use pkg-config
+
+       * configure.in:
+       Don't use freetype-config.  Also cleanup lots of old stale macros
+       around configure.in.
+
+       * pango-uninstalled.pc.in:
+       * pango.pc.in:
+       * pangocairo-uninstalled.pc.in:
+       * pangocairo.pc.in:
+       * pangoft2-uninstalled.pc.in:
+       * pangoft2.pc.in:
+       * pangowin32.pc.in:
+       * pangox-uninstalled.pc.in:
+       * pangox.pc.in:
+       * pangoxft-uninstalled.pc.in:
+       * pangoxft.pc.in:
+       And cleaned up all the pkg-config files as a result.
+
+2008-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 512566 – dont' use deprecated macro
+       Patch from Christian Persch
+
+       * tests/test-ot-tags.c:
+       * tests/testscript.c:
+       Replace G_GNUC_PRETTY_FUNCTION by G_STRFUNC
+
+2008-01-28  Wouter Bolsterlee  <wbolster@svn.gnome.org>
+
+       Bug 512473 – [patch] gtk-doc warnings
+
+       * pango/pango-context.c:
+       * pango/pango-fontmap.c:
+       * pango/pango-utils.c:
+       * pango/pangofc-fontmap.h:
+       * pango/pangox.c:
+       * pango/reorder-items.c:
+       Fixed gtk-doc warnings.
+
+2008-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.19.3 ===
+
+       * configure.in: Version 1.19.3
+
+       * NEWS: Updated.
+
+2008-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (pango_layout_set_height()): Mark behavior as
+       undefined if height is not -1 and ellipsize mode is
+       PANGO_ELLIPSIZE_NONE.
+
+2008-01-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 508002 – change pango_layout_pixel_extents() to round logical rect
+       to be inclusive
+
+       * pango/pango-layout.c (pango_layout_get_pixel_extents),
+       (pango_layout_line_get_pixel_extents): Round extents to pixels
+       inclusively.  That is, pass both ink_rect and logical_rect as first
+       argument to pango_extents_to_pixels().
+
+       * pango/pango-matrix.c (pango_matrix_transform_pixel_rectangle):
+       Fix rounding.
+
+       * pango/pango-types.h:
+       * docs/tmpl/glyphs.sgml:
+       * pango/pango-utils.c (pango_extents_to_pixels):
+       Rename pango_extents_to_pixels() function arguments from @ink_rect and
+       @logical_rect to @inclusive and @nearest.  Given that this API is a
+       fairly new addition and not commonly used, language bindings are
+       encouraged to update their argument names accordingly.  Moreover, they
+       are encouraged to wrap this function as two different calls:
+       extents_to_pixels_inclusive() and extents_to_pixels_nearest(), or
+       similar conventions that best reflect their native language.
+
+2008-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/Makefile.am: Remove COPYING.GPL and COPYING.FTL that
+       are no longer there.
+
+2008-01-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*:
+       HarfBuzz was relicensed to a more generous and simpler license.
+       Adapt.  See pango/opentype/COPYING for the new license which is
+       LGPL-compatible.
+
+2008-01-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (debug), (process_line),
+       (pango_layout_line_postprocess): Minor cleanup.
+
+2008-01-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 469313 – Add pango_layout_set_height()
+
+       * pango/pango-layout.c (get_x_offset),
+       (should_ellipsize_current_line), (add_line), (process_line),
+       (pango_layout_check_lines), (pango_layout_line_get_width),
+       (pango_layout_line_get_x_ranges), (justify_words),
+       (pango_layout_line_postprocess):
+       Implement height >= 0;  There are still bugs left.  Most notably,
+       there will be at least two lines showed no matter how small height is.
+
+2008-01-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 469313 – Add pango_layout_set_height()
+
+       * pango/pango-layout.h:
+       * pango/pango-layout-private.h:
+       * pango/pango-layout.c:
+       * pango/ellipsize.c (_pango_layout_line_ellipsize):
+       New public API:
+
+               pango_layout_set_height()
+       
+       See docs for semantics.  Currently only negative height values (number
+       of lines) is implemented.
+
+       * pango-view/viewer-render.c (make_layout), (output_body),
+       (parse_options):
+       Implement --height.
+
+       * pango/pango.def:
+       * docs/pango-sections.txt:
+       * docs/tmpl/layout.sgml:
+       Update.
+
+2008-01-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 508179 – PangoGlyphUnit confusion
+
+       * pango/pangowin32.c:
+       * pango/glyphstring.c:
+       * pango/pango-layout.c (process_item): Remove all traces of
+       #PangoGlyphUnit
+
+2008-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 508381 – indent and center alignment don't mix
+
+       * pango/pango-layout.c: Ignore indent if aligned center, and document
+       so.  This assumption was present in some places and not the others.
+       Fixed now.
+
+2008-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 508007 – Add option for single-paragraph mode to pango-view
+
+       * pango-view/viewer-render.c (make_layout), (parse_options): Add
+       --single-par option to pango-view.
+
+2008-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (ensure_tab_width), (process_line),
+       (pango_layout_get_effective_attributes),
+       (pango_layout_check_lines): Minor cleanup.  Attributes are initialized
+       with start/end_index to apply to entire text now, no need to
+       initialize them explicitly anymore.
+
+2007-12-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 506284 – docs typo for pango_coverage_unref
+       Patch from Christian Persch
+
+       * pango/pango-coverage.c (pango_coverage_unref): Fix typo in docs.
+
+2007-12-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/Makefile.am: Check for dummy man pages in dist-local.
+
+2007-12-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 504802 – build failure: No rule to make target
+       `pango-querymodules.1', needed by `all-am'. Stop.
+
+       * docs/Makefile.am: Create dummy pango-querymodules.1 if it doesn't
+       exsits (SVN checkout) and --enable-man is not used.
+
+2007-12-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 504585 – pango-querymodules.1 syntax error
+
+       * Makefile.am:
+       * docs/Makefile.am:
+       * docs/pango-querymodules.1:
+       Fix man-page generation rule, also remove pango-querymodules.1 from
+       SVN so it's regenerated from XML at dist time.
+
+2007-12-19  Behdad Esfahbod  <behdad@gnome.org>
+
+        Red Hat Bug 426178: gtkdoc-scan fails on pango
+
+       * docs/pango-sections.txt:
+       * pango/pango-ot-private.h:
+       * pango/pango-ot.h:
+       Make the following symbols available to engines:
+
+               PANGO_IS_OT_INFO
+               PANGO_IS_OT_RULESET
+               PANGO_OT_INFO
+               PANGO_OT_RULESET
+               PANGO_TYPE_OT_INFO
+               PANGO_TYPE_OT_RULESET
+               pango_ot_info_get_type
+               pango_ot_ruleset_get_type
+
+2007-12-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.19.2 ===
+
+       * configure.in: Version 1.19.2
+
+       * NEWS: Updated.
+
+2007-12-13  Benjamin Otte  <otte@gnome.org>
+
+       * configure.in: use pkg-config to detect cairo features
+
+2007-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Better fix: set both LIBS and LDFLAGS.
+
+2007-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 502926 – pango-1.16.4 configure bug: can fail to accept cairo
+
+       * configure.in: Fix cairo library checking.
+
+2007-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fontmap.c: Improve
+       pango_cairo_font_map_get_default() docs.
+
+2007-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 399573 – replace strtoul in pango-markup.c with pango_scan_int()
+
+       * pango/pango-markup.c (span_parse_func): Use pango_scan_int() and
+       improve error message on parse failure.
+
+2007-12-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 478914 – Use something invalid instead of '?' when validating
+       input text
+
+       * pango/pango-layout.c (pango_layout_set_text): Set invalid input
+       bytes to -1, which gives a unichar value of -1, and eventually a
+       glyph value of -1, aka PANGO_GLYPH_INVALID_INPUT.
+
+       * pango/fonts.c (pango_font_get_glyph_extents),
+       (pango_font_get_metrics), (pango_font_get_font_map):
+       * pango/modules.c (build_map):
+       * pango/pango-context.c (get_script), (get_shaper_and_font),
+       (string_from_script), (itemize_state_process_run):
+       * pango/pango-coverage.c (pango_coverage_get):
+       * pango/pango-impl-utils.h:
+       * pango/pango-utils.c:
+       * pango/pangocairo-font.c (pango_cairo_font_get_scaled_font),
+       (_pango_cairo_font_private_get_hex_box_info),
+       (_pango_cairo_font_private_get_glyph_extents_missing):
+       * pango/pangocairo-private.h:
+       * pango/pangocairo-render.c (_pango_cairo_renderer_draw_frame),
+       (_pango_cairo_renderer_draw_box_glyph),
+       (_pango_cairo_renderer_draw_unknown_glyph):
+       * pango/pangofc-fontmap.c (pango_fc_font_map_get_patterns):
+       * pango/pangoft2-private.h:
+       * pango/pangoft2-render.c (pango_ft2_font_render_box_glyph),
+       (pango_ft2_font_render_glyph), (pango_ft2_renderer_draw_glyph):
+       * pango/pangoft2.c (pango_ft2_font_get_face),
+       (pango_ft2_font_get_glyph_extents):
+       * pango/pangox.c (pango_x_find_subfont), (pango_x_render):
+       * pango/pangoxft-font.c (_pango_xft_font_get_mini_font),
+       (get_glyph_extents_missing), (pango_xft_font_get_font):
+       * pango/pangoxft-private.h:
+       * pango/pangoxft-render.c (get_total_matrix), (draw_box),
+       (_pango_xft_renderer_draw_box_glyph),
+       (_pango_xft_renderer_draw_unknown_glyph),
+       (pango_xft_renderer_draw_glyphs):
+       * pango/shape.c (pango_shape):
+       Render PANGO_GLYPH_INVALID_INPUT to a single-width box with a cross
+       inside.  Also cleanup spewed warnings and warn at the source, where
+       we fail to find a shaper, instead of at every location that we see
+       a NULL font.
+
+       * pango/pango-font.h:
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       New public macro:
+
+               PANGO_GLYPH_INVALID_INPUT
+
+2007-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c (point_on_path): Optimize double math.
+
+2007-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 501938 – Arabic shaping broken with vertical layout with
+       vertical-hint=line
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape): Take gravity into
+       equation when deciding whether to shape visually or logically.
+
+2007-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-pangocairo.c (render_callback): Fix assertion
+       in pango_gravity_get_rotation().
+
+2007-12-04  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 501575 – Compile errors
+       Patch from Jens Granseuer
+
+       * pango/opentype/harfbuzz-stream.c (_hb_font_goto_table):
+       * pango/pango-utils.c (handle_alias_line):
+       Fix C99ism.
+
+2007-12-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.19.1 ===
+
+       * configure.in: Version 1.19.1
+
+       * NEWS: Updated.
+
+2007-12-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 501317 – "and" found where word should be "an"
+
+       * docs/tmpl/layout.sgml: Fix typo.
+
+2007-12-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c: Add some more comments to document
+       the math involved.
+
+2007-11-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c (two_points_distance), (curve_length),
+       (parametrize_path), (point_on_path), (draw_twisted), (main):
+       Document cairotwisted example.
+
+2007-11-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * example/cairo*.c: Add some documentation.
+
+2007-11-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 485536 – underline_position can be zero
+
+       * pango/pango-utils.c (pango_cairo_quantize_line_geometry):
+       Document that returned position may be zero.
+
+       * pango/pangocairo-win32font.c
+       (pango_cairo_win32_font_create_metrics_for_context):
+       * pango/pangofc-font.c (get_face_metrics):
+       Handle case of underline_position==0 after rounding.
+
+2007-11-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 500549 – pangocairo.h should include pango.h and cairo.h
+
+       * pango/pangocairo.h: #include <pango/pango.h>
+
+2007-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/check.docs: Make it reusable by not hardcoding "pango".
+
+2007-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-impl.c: Remove unused macro.
+
+2007-11-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/Makefile.am: Replace GNU-specific syntax with more general one.
+
+2007-11-16  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-utils.c (handle_alias_line): Factor out the common
+       code from read_builtin_aliases() and read_alias_file(). (#492517)
+
+2007-11-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am: Include ATSUI included modules.
+
+2007-11-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 495091 – pango-utils.c:variable is declared at middle of block
+
+       * pango/pango-utils.c (read_builtin_aliases): Move variable
+       declaraction before code.
+
+2007-11-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: And some more.
+
+2007-11-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: Some more cleanup and merging.
+
+2007-11-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * tools/gen-script-for-lang-new.c (scripts_for_lang), (main):
+       Update to new propsed language enumeration API for fontconfig.
+
+2007-11-02  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-utils.c (read_builtin_aliases, pango_load_aliases):
+       On Windows store the default aliases file in a string
+       array. (#492517)
+
+       Compared to the pango.aliases file as distributed with my most
+       recent Windows builds there are some changes: Add the DejaVu fonts
+       as the first ones listed for the generic sans, serif and mono font
+       names. Use Tahoma instead of Arial for sans, and Georgia instead
+       of Times New Roman for serif (to be used if the DejaVu fonts
+       aren't present). Add Arial Unicode MS (a font with quite large
+       coverage that comes with MS Office and thus is often
+       available). Add Sylfaen (the Armenian and Georgian font bundled
+       with Windows).
+
+       When using the MS-Windows theme the font used by GTK+ will the
+       system UI one. Both fonts typically used as system fonts, Tahoma
+       (on XP) and Segoe UI (on Vista), are aliased here.
+
+       * pango/pango-utils.c (read_alias_file): Accept also a quoted
+       string for the left-hand side of an aliases file line. This is to
+       enable aliasing fonts with spaces in their name, like "Segoe UI"
+       which is the default system font on Vista. (#492504) (With the
+       above built-in default aliases lists, no actual pango.aliases file
+       is longer required on Windows for non-Latin script support,
+       though.)
+
+2007-10-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/vertical.sgml:
+       Improve vertical docs.
+
+2007-10-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.19.0 ===
+
+       * configure.in: Version 1.19.0
+
+       * NEWS: Updated.
+
+2007-10-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-script-lang-table.h:
+       * tools/gen-script-for-lang-new.c:
+       Sort scripts based on frequency.
+
+       * tools/Makefile.am: Don't build anything by default.
+
+2007-10-26  Murray Cumming  <murrayc@murrayc.com>
+
+       * docs/pango_markup.sgml: Adds a link to 
+       pango_font_description_from_string() so that the font_desc 
+       attribute is not so mysterious. Bug #490661.
+
+2007-10-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * tools/Makefile.am:
+       * tools/gen-script-for-lang-new.c:
+       Functional dup of gen-script-for-lang that uses FcGetLangs() and
+       FcCharSetForLang() instead of parsing .orth files.
+
+2007-10-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-script-lang-table.h: Update for fontconfig-2.4.91.
+
+2007-10-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_get_patterns):
+       Call FcFontSetDestroy() instead of FcFontSetSortDestroy().
+       These days they are the same, but previously the latter was
+       not freeing the actual patterns.  But we don't need the
+       sort patterns, so this retroactively fixes a leak in older
+       versions!
+
+2007-10-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: Even more cleanup and more type renames.
+
+2007-10-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: More cleanup, remove redundant error types.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: Rename ftglue.c to harfbuzz-impl.c and more
+       type renames and moving code around.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: New header file harfbuzz-global.h.  Rename
+       FT_* int types to HB_* types.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gpos-private.h:
+       * pango/opentype/harfbuzz-gsub-private.h:
+       Add commented-out dummy struct for Extension lookups.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 478865 – Drastically reduce number of PangoFont objects created
+       for rotating text
+
+       * pango/pangofc-fontmap.c (fontset_hash_key_hash),
+       (get_scaled_size), (pango_fc_font_map_get_patterns):
+       Use a Pango-unit int for scaled-size instead of double.
+       Merges even more queries...
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 478865 – Drastically reduce number of PangoFont objects created
+       for rotating text
+
+       * pango/pangofc-fontmap.c (fontset_hash_key_equal),
+       (fontset_hash_key_hash), (fontset_hash_key_copy),
+       (get_scaled_size), (pango_fc_font_map_get_patterns):
+       Only keep scaled-size in fontset hash, instead of unscaled-size
+       and context matrix.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 471568 – Optimizations in _pango_cairo_update_context()
+
+       * pango/pangocairo-context.c (_pango_cairo_update_context):
+       Skip change notification about matrix changes if merged font
+       options for the context set metrics hinting to off.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 489909 – pango_cairo_update_context() should ignore matrix
+       translation
+
+       * pango/pangocairo-context.c (_pango_cairo_update_context):
+       Just compare the first four doubles of matrices for change
+       notification purposes.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 486951 – ChangeLog.pre-1-18
+
+       * Makefile.am:
+       * ChangeLog.pre-1-18:
+       Split ChangeLog.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/glyphstring.c (pango_glyph_string_copy),
+       (pango_glyph_string_free):
+       Fix another Oops of mine from recent commits.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 472924 – Mark some classes abstract
+
+       * pango/fonts.c:
+       * pango/pango-fontmap.c:
+       * pango/pangofc-font.c:
+       * pango/pangofc-fontmap.c:
+       Public API chance:
+       Mark the following types as abstract:
+
+               PangoFont
+               PangoFontFace
+               PangoFontFamily
+               PangoFontMap
+               PangoFcFont
+               PangoFcFontMap
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 472303 – Make PANGO_GLYPH_EMPTY and PANGO_GLYPH_UNKNOWN_FLAG public
+
+       * pango/pango-font.h: Make PANGO_GLYPH_EMPTY, PANGO_GLYPH_UNKNOWN_FLAG,
+       and PANGO_GET_UNKNOWN_GLYPH() public.  Previously they were only
+       defined for backend/engine implementations.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 471601 – Pass pango version information to fontconfig
+
+       * pango/pangofc-fontmap.h:
+       New public API:
+       
+               PANGO_FC_GRAVITY
+               PANGO_FC_VERSION
+
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern):
+       Set PANGO_FC_VERSION in pattern.
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/pangofc-fontmap.sgml:
+       Update.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 472629 – Add pango_renderer_get_layout(_line)
+
+       * pango/pango-renderer.h:
+       * pango/pango-renderer.c:
+       New public API:
+
+               pango_renderer_get_layout()
+               pango_renderer_get_layout_line()
+
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_shape),
+       (release_renderer), (_pango_cairo_do_layout_line),
+       (_pango_cairo_do_layout): Use above API to simplify
+       shape_renderer implementation.
+
+       * pango/pango.def:
+       * docs/pango-sections.txt:
+       * docs/tmpl/pango-renderer.sgml:
+       Update.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-attributes.c: Fix couple Oopses from my last
+       commit.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 469641 – Initialize attribute start/end to [0..MAXUINT]
+
+       * pango/pango-attributes.h:
+       * pango/pango-attributes.c:
+       New public API:
+       
+               pango_attribute_init()
+
+       * pango/pango-attributes.c:
+       (pango_attr_string_new), (pango_attr_language_new),
+       (pango_attr_color_new), (pango_attr_int_new),
+       (pango_attr_float_new), (pango_attr_size_new_internal),
+       (pango_attr_font_desc_new), (pango_attr_shape_new_with_data):
+       Initialize attributes using pango_attribute_init().
+
+       * pango/pango.def:
+       * docs/pango-docs.sgml:
+       * docs/pango-sections.txt:
+       * docs/tmpl/text-attributes.sgml:
+       Update.
+
+2007-10-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 471577 – GBoxed GType for PangoGlyphItem
+
+       * pango/pango-glyph-item.h:
+       * pango/pango-glyph-item.c:
+       New public API:
+
+               PANGO_TYPE_GLYPH_ITEM
+               pango_glyph_item_copy()
+               pango_glyph_item_get_type()
+
+       * pango/pango-layout.c:
+       New public API:
+       
+               pango_layout_iter_copy()
+
+       * pango/fonts.c (pango_font_description_copy),
+       (pango_font_description_copy_static),
+       (pango_font_description_free), (pango_font_descriptions_free),
+       (pango_font_metrics_ref), (pango_font_metrics_unref):
+       * pango/glyphstring.c (pango_glyph_string_copy),
+       (pango_glyph_string_free):
+       * pango/pango-attributes.c (pango_attr_list_ref),
+       (pango_attr_list_unref), (pango_attr_list_copy):
+       * pango/pango-color.c (pango_color_copy), (pango_color_free):
+       * pango/pango-item.c (pango_item_copy), (pango_item_free):
+       * pango/pango-layout.c (pango_layout_line_ref),
+       (pango_layout_line_unref), (pango_layout_iter_copy),
+       (pango_layout_iter_free):
+       * pango/pango-layout.h:
+       * pango/pango-matrix.c (pango_matrix_copy), (pango_matrix_free):
+       Update all copy/free functions to accept NULL as legitimate input.
+       Previously all were g_return_[val_]if_fail()ing it.
+
+       * pango/pango.def:
+       * docs/pango-sections.txt:
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/layout.sgml:
+       Update.
+
+2007-10-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 471571 – Add pango_layout_iter_get_layout()
+
+       * pango/pango-layout.h:
+       * pango/pango-layout.c: 
+       New public API:
+
+               pango_layout_iter_get_layout()
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/layout.sgml:
+       * pango/pango.def:
+
+2007-10-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/layout.sgml: Remove obsolete comment. PangoLayoutRun
+       is not deprecated.  It's just same type as PangoGlyphItem.
+
+2007-10-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.h: Remove obsolete comment. PangoLayoutRun is
+       not deprecated.  It's just same type as PangoGlyphItem.
+
+2007-10-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 488840 – harfbuzz: protect against ligid overflow
+
+       * pango/opentype/harfbuzz-buffer.c (_hb_buffer_allocate_ligid):
+       Never return zero, even in case of overflow.
+
+       * pango/opentype/harfbuzz-impl.h: Define dummy HB_LIKELY() and
+       HB_UNLIKELY(), to be filled later.
+
+2007-10-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c (curve_length): Implement bezier curve
+       length function that flattens the curve and sum the length of straight
+       lines approximating it.
+
+2007-10-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 483600 – Leak of font family name in
+       pango_win32_font_description_from_logfont(w)
+       Patch from Daniel Atallah
+
+       * pango/pangowin32-fontmap.c
+       (pango_win32_font_description_from_logfont),
+       (pango_win32_font_description_from_logfontw):
+       Free family.
+
+2007-10-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 486932 – Apply vkrn GPOS feature in vertical writing
+
+       * modules/basic/basic-fc.c (basic_engine_shape): Apply vkrn
+       GPOS feature in vertical writing mode.  Previously we had
+       no GPOS feature for vertical mode.
+
+2007-10-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 481537 – compiler warning fixes
+       Patch from Kjartan Maraas
+
+       * pango/break.c (pango_get_log_attrs):
+       * pango/pango-attributes.c (pango_attr_list_insert_internal):
+       * pango/pango-layout.c (process_item), (justify_clusters):
+       * pango/pango-markup.c (span_parse_boolean):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_finalize),
+       (pango_ot_ruleset_new):
+       * pango/pango-utils.c (pango_scan_int):
+       * pango/pangocairo-font.c (_pango_cairo_font_install):
+       * pango/pangofc-font.c (pango_fc_font_create_metrics_for_context):
+       * pango/pangoft2.c (load_fallback_face):
+       * pango/pangox-fontmap.c (pango_x_get_coverage_win):
+       * pango/pangox.c (itemize_string_foreach):
+       Fix warnings.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 485566 – Cache one OpenType Buffer
+
+       * pango/pango-ot-buffer.c (acquire_buffer), (release_buffer),
+       (pango_ot_buffer_new), (pango_ot_buffer_destroy):
+       * pango/pango-ot-private.h:
+       Cache one HB_Buffer that is acquired using a lock.  A new one is
+       created if the shared buffer is locked.  The shared buffer is
+       cleared when released.  May want to make it free shared buffer if
+       buffer->allocated is too large.  Not sure.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: Mark internal symbols as HB_INTERNAL and
+       define that to static in harfbuzz.c.
+
+       * pango/opentype/harfbuzz-buffer-internal.h: New file.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/ftglue.[ch]: Remove FTGLUE_API/APIDEF cruft.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/Makefile.am: Build harfbuzz.c instead of individual
+       source files, to let compiler go wild with optimizations!
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz.c: Same here.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/Makefile.am: Don't include harfbuzz-dump.[ch] in
+       libharfbuzz.a.  Those are just used by the harfbuzz-dump tool.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-buffer.c: Some more cleanup.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-buffer.c: Move some code around.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-buffer.[ch]: Rename buffer->inplace to
+       buffer->separate_out with the inverted meaning, such that buffer
+       is initialization is memset(0).
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/*: Allocate buffer->positions lazily.
+
+2007-10-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 485621 – Get rid of freetype memory allocator in harfbuzz
+
+       * pango/opentype/*: Remove all occurences of FT_Memory.  Use
+       malloc/realloc/free directly.
+
+       * pango/pango-ot*: Update to above.
+
+2007-10-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 485559 – Boston Summit HarfBuzz optimizations
+
+       * pango/opentype/*: HarfBuzz hacking to:
+
+         - Rename last remaining FT_Err stuff to HB_Err.
+
+         - Fix a couple invalid table paths to be permissive so
+           fonts work better.  Particularly GDEF table for Nafees
+           Nastaliq is loaded and works great now.
+
+         - Optimize harfbuzz buffer to not copy/swap for simple
+         one-to-one and "copy" GSUB operations.
+
+       * pango/pango-ot*: Update to FT_Err to HB_Err renaming.
+
+2007-09-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c: Fix typo in comments.
+
+2007-09-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.18.2 ===
+
+       * configure.in: Version 1.18.2
+
+       * NEWS: Updated.
+
+2007-09-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 474708 – pangocairo leaks memory
+
+       * pango-view/viewer-pangocairo.c (pangocairo_view_create):
+       Use pango_cairo_font_map_new() instead of
+       pango_cairo_font_map_get_default(), so the font map is freed at the
+       end so we can use valgrind to detect leaks without noise.
+
+2007-09-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 474708 – pangocairo leaks memory
+
+       * pango/pangocairo-font.c
+       (_pango_cairo_font_private_get_hex_box_info):
+       Fix a couple leaks.
+
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifontmap.c
+       (pango_cairo_atsui_font_map_finalize):
+       * pango/pangocairo-fc.h:
+       * pango/pangocairo-fcfontmap.c (pango_cairo_fc_font_map_finalize):
+       * pango/pangocairo-win32.h:
+       * pango/pangocairo-win32fontmap.c
+       (pango_cairo_win32_font_map_finalize):
+       Remove unused leftover renderer variable.
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize): Fix thinko.
+
+2007-09-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangox-fontcache.c (free_cache_entry),
+       (pango_x_font_cache_free), (pango_x_font_cache_new),
+       (pango_x_font_cache_load):
+       * pango/pangox-fontmap.c (pango_x_font_map_finalize),
+       (pango_x_insert_font):
+       * pango/pangox.c (free_context_info), (pango_x_get_context),
+       (pango_x_font_init), (pango_x_font_get_metrics),
+       (pango_x_insert_subfont), (free_metrics_info),
+       (pango_x_font_finalize):
+       Switch some g_new (*, 1) to g_slice_new ()... I know...
+
+2007-09-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Patch from Chris Wilson
+
+       * pango/pangoft2.c (load_fallback_face): Use g_error() instead
+       of g_warning()+exit().
+
+2007-09-02  Mathias Hasselmann  <mathias.hasselmann@gmx.de>
+
+       Bug 472891 – Bad consistency check in pango_get_log_attrs
+
+       * pango/break.c: Invert the consistency check.
+
+2007-08-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 302952 – The placement of a diacritic marks for an arabic ligature
+       is not correct
+
+       * pango/opentype/harfbuzz-buffer.c (hb_buffer_allocate_ligid): Don't
+       use zero as allocated ligature id.  Zero means no ligature id.
+
+2007-08-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_init),
+       (pango_ot_ruleset_new): Move ruleset initialization to _init()
+       instead of _new().
+
+2007-08-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 410152 – testboundaries test fails
+
+       * configure.in: Require libthai >= 0.1.9
+
+2007-08-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.18.1 ===
+
+       * configure.in: Version 1.18.1
+
+       * NEWS: Updated.
+
+2007-08-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 470042 – missing Macedonian OT tag
+       Patch from Denis Jacquerye
+
+       * pango/pango-ot-tag.c: Add Macedoninan language tag.
+
+2007-08-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 468953 – pango-renderer.c: using function without prototype
+
+       * pango/pango-renderer.c: #include <pango-impl-utils.h>
+
+2007-08-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 463430 – Gets stuck while "formatting message"
+
+       * pango/opentype/harfbuzz-gpos.c (Lookup_PairPos1),
+       (Lookup_PairPos2), (Lookup_PairPos), (Do_ContextPos):
+       * pango/opentype/harfbuzz-gsub.c (Do_ContextSubst):
+       Change type of intermediate index variable from FT_UShort to
+       FT_ULong as it was overlowing with more than 65536 glyphs.
+
+2007-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * README: Remove reference to required version of glib.  It falls
+       out of synch every single time.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-23 b/ChangeLog.pre-1-23
new file mode 100755 (executable)
index 0000000..c0a2f53
--- /dev/null
@@ -0,0 +1,1858 @@
+2009-02-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.23.0 ===
+
+       * configure.in: Version 1.23.0
+
+       * NEWS: Updated.
+
+2009-02-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/Makefile.am: Comment out gobject-introspection for now,
+       to get a release out.
+
+2009-02-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Fix conditional.
+
+2009-02-01  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfont.c (pango_cairo_fc_font_class_init):
+       Don't do anything in shutdown.  Was causing double-free of cairo
+       font private data.
+
+2009-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gpos.c (Load_Mark2Array),
+       (Free_Mark2Array):
+       Allocate all array rows in a single ALLOC call.  Saves over 100 
+       alloc calls when loading DejaVu Sans,
+
+2009-01-31  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_face_describe),
+       (pango_fc_face_list_sizes), (pango_fc_family_list_faces):
+       It's not a programming error if face->family is NULL or
+       family->fontmap is NULL.  Be graceful.
+
+2009-01-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 569763 – pango doesn't like font descriptions without family!
+
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern): Don't crash is desc
+       doesn't have family set.
+
+2009-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-render.c (make_layout), (get_options_string):
+       Remove default font family and size.  This means default size is not
+       12 IIRC, not 18 as it was.
+
+2009-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-open.h:
+       * pango/opentype/harfbuzz-gdef.c (Make_ClassRange),
+       (HB_GDEF_Build_ClassDefinition):
+       * pango/opentype/harfbuzz-gpos.c (Load_PosClassRule),
+       (Load_ChainPosClassRule):
+       * pango/opentype/harfbuzz-gsub.c (Load_SubClassRule),
+       (Load_ChainSubClassRule):
+       * pango/opentype/harfbuzz-open.c (Load_ClassDef1),
+       (Load_ClassDef2), (_HB_OPEN_Load_ClassDefinition),
+       (_HB_OPEN_Load_EmptyClassDefinition),
+       (_HB_OPEN_Free_ClassDefinition):
+       Remove ClassDef->Defined field.  This is the comment accompanying it:
+
+         The `Defined' field is not defined in the OpenType specification
+         but apparently needed for processing fonts like trado.ttf: This
+         font refers to a class which contains not a single element.  We
+         map such classes to class 0.    
+
+       The comment is correct that trado.ttf (MS Traditional Arabic) uses
+       such classes.  However, in my testing I couldn't identify any
+       problems with the font if the special handling is removed.  I also
+       processed as many fonts as I could get my hand on and trado.ttf was
+       the only not-totally-broken font hitting the special-case code.
+       DejaVu fonts hit it too, but I'm sure they do not require the
+       special-handling code.  Most probably, that code introduces bugs
+       in them.
+
+       The special-casing was consuming lots of memory.  EIGHT MEGABYTES
+       for loading DejaVu Sans!  While this could be complete fixed, I
+       decided to remove the special-handling code altogether.  I don't
+       think it will make any real difference, and if it does, we'll fix
+       fonts.  Such hacks will not be in harfbuzz-ng anyway.
+
+       Bug originally reported by nsf.
+
+2009-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-impl.c (_hb_alloc): Use calloc(),
+       instead of malloc()ing and memset()ing.
+
+2009-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-dump-main.c (main): Remove old cruft.
+
+2009-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_fini),
+       (pango_fc_font_map_shutdown): Don't disassociate family from fontmap
+       during cache_clear().
+
+2009-01-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gpos.c (Load_BaseArray), (Free_BaseArray):
+       Allocate all array rows in a single ALLOC call.  Saves over 2000
+       alloc calls when loading DejaVu Sans!
+
+2009-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 560792 – Make PangoLayoutLine with line->layout==NULL renderable
+
+       * pango/pango-renderer.c (pango_renderer_draw_layout_line),
+       (pango_renderer_draw_glyph_item), (pango_renderer_set_matrix):
+       Handle line->layout == NULL.
+
+2009-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 567392 – Abiword crashes in pango when opening document with
+       certain locales
+
+       * pango/pango-ot-info.c (pango_ot_info_find_language),
+       (pango_ot_info_find_feature), (pango_ot_info_list_languages),
+       (pango_ot_info_list_features): Protect against more broken fonts.
+
+2009-01-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Bump version to 1.23.0.  Not releasing yet.
+
+2009-01-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 566727 – PangoFontsetLazy
+
+       * pango/pangofc-fontmap.c: Rework caching.
+
+       Cache FcFontSort results separately from PangoFontset's.
+
+       Add PangoFcFontset which is lazy and does not create fonts until it
+       really needs to.
+
+       Use FcFontMatch() and only do FcFontSort() if fallback fonts are
+       needed.
+
+2009-01-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/pangofc-fontmap.sgml:
+       * pango/pangocairo-fcfontmap.c
+       (pango_cairo_fc_font_map_fontset_key_substitute),
+       (pango_cairo_fc_font_map_class_init):
+       * pango/pangofc-font.c (_pango_fc_font_get_font_key),
+       (_pango_fc_font_set_font_key):
+       * pango/pangofc-fontmap.c (pango_fc_fontset_key_equal),
+       (pango_fc_fontset_key_hash), (pango_fc_fontset_key_free),
+       (pango_fc_fontset_key_copy), (pango_fc_fontset_key_get_language),
+       (pango_fc_fontset_key_get_description),
+       (pango_fc_fontset_key_get_matrix),
+       (pango_fc_fontset_key_get_absolute_size),
+       (pango_fc_fontset_key_get_resolution),
+       (pango_fc_fontset_key_get_context_key), (pango_fc_font_key_hash),
+       (pango_fc_font_map_init), (_pango_fc_font_map_remove),
+       (pango_fc_make_pattern), (pango_fc_font_map_new_font),
+       (pango_fc_default_substitute), (pango_fc_fontset_key_make_pattern),
+       (pango_fc_font_map_get_patterns):
+       * pango/pangofc-fontmap.h:
+       Use new type PangoFcFontset for pattern substitution.
+
+2009-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 567165 – Apply all pattern matrices
+
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new):
+       * pango/pangofc-fontmap.c (pango_fc_font_map_new_font):
+       Apply all FC_MATRIX values, not just the first one.  Fixes synthetic
+       italic rotated text with ft2 and xft backends.  Can't believe no one
+       ever noticed that they are broken...
+
+2009-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/Makefile.am:
+       * docs/pango.types:
+       Autogenerage pango.types.  Remove it from repository, but dist it.
+
+2009-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/pangofc-fontmap.sgml:
+       * docs/tmpl/text-attributes.sgml:
+       * pango/pangocairo-fc.h:
+       * pango/pangocairo-fcfont.c (get_font_size), (get_gravity_class),
+       (get_gravity), (_pango_cairo_fc_font_new):
+       * pango/pangocairo-fcfontmap.c
+       (pango_cairo_fc_font_map_font_key_substitute),
+       (pango_cairo_fc_font_map_create_font),
+       (pango_cairo_fc_font_map_class_init):
+       * pango/pangofc-font.c (_pango_fc_font_get_font_key),
+       (_pango_fc_font_set_font_key):
+       * pango/pangofc-fontmap.c (pango_fc_font_key_equal),
+       (pango_fc_font_key_hash), (pango_fc_font_key_free),
+       (pango_fc_font_key_copy), (get_context_matrix),
+       (pango_fc_font_key_init), (pango_fc_font_key_get_pattern),
+       (pango_fc_font_key_get_matrix),
+       (pango_fc_font_key_get_context_key), (pango_fc_font_map_init),
+       (pango_fc_font_map_class_init), (pango_fc_font_map_add),
+       (_pango_fc_font_map_remove), (pango_fc_make_pattern),
+       (pango_fc_font_map_new_font), (pango_fc_default_substitute),
+       (pango_fc_font_map_get_patterns), (pango_fc_font_map_load_fontset):
+       * pango/pangofc-fontmap.h:
+       * pango/pangofc-private.h:
+       Change PangoFc font loading API such that PangoContext is not passed
+       down.  We use a new opaque struct called PangoFcFontKey.  This struct
+       is in fact our font hash key.  This avoids problems where previously
+       we were using context members that were not necessarily considered
+       by the pangofc layer when caching.
+       This is in preparation for lazy loading of fonts in the pangofc fontmap.
+
+2009-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-atsuifont.c (_pango_cairo_atsui_font_new):
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new):
+       * pango/pangocairo-font.c (_pango_cairo_font_private_initialize):
+       * pango/pangocairo-private.h:
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new):
+       Remove desc argument from _pango_cairo_font_private_initialize().
+       Replace it with gravity, the only thing from desc we actually needed.
+       This is in preparation for lazy loading of fonts in the pangofc fontmap.
+
+2009-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (font_hash_key_equal):
+       Avoid context key comparison if any of the keys is NULL.
+
+2009-01-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-atsuifont.c (_pango_cairo_atsui_font_new):
+       * pango/pangocairo-fcfont.c (_pango_cairo_fc_font_new):
+       * pango/pangocairo-font.c (_pango_cairo_font_private_initialize):
+       * pango/pangocairo-private.h:
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new):
+       Remove context argument from _pango_cairo_font_private_initialize().
+       Replace it with pango_ctm and font_options, the only things from
+       context we actually needed.  This is in preparation for lazy loading
+       of fonts in the pangofc fontmap.
+
+2009-01-20  Johan Dahlin  <jdahlin@async.com.br>
+
+       Bug 567934 – Add introspection support inside pango
+
+       * configure.in:
+       * pango/Makefile.am:
+       * pango/pango-attributes.c:
+       * pango/pango-layout.c:
+
+2009-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_get_patterns):
+       Protect against a NULL context.
+
+2009-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (itemize_state_process_run):
+       Improve warning message.
+
+2009-01-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 549532 – Correction to the sample string for Hindi in
+       pango-language-sample-table.h
+
+       * pango/pango-language-sample-table.h:
+       Improve Hindi sample text.
+
+2009-01-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 566726 – Minor optimization
+
+       * pango/pango-context.c (get_shaper_and_font):
+       Don't walk the fontset if there are no engines.
+
+2009-01-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 566941 – Add PANGO_ATTRIBUTE_INDEX_FROM_TEXT_BEGINNING and
+       PANGO_ATTRIBUTE_INDEX_TO_TEXT_END
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/text-attributes.sgml:
+       * pango/pango-attributes.c (pango_attribute_init):
+       * pango/pango-attributes.h:
+       Add two new public macros:
+
+               PANGO_ATTRIBUTE_INDEX_FROM_TEXT_BEGINNING
+               PANGO_ATTRIBUTE_INDEX_TO_TEXT_END
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 551469 – Fold '@' to '-' when parsing PangoLanguages
+
+       * pango/pango-language.c: Fold '@' to '-' when parsing PangoLanguages.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328206 – Update/remove some old files
+
+       * docs/Makefile.am:
+       * docs/TEXT/glossary:
+       Remove some old files.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 328206 – Update/remove some old files
+
+       * tools/Makefile.am:
+       * tools/add-copyright:
+       * tools/compress-table.pl:
+       * tools/maps/README:
+       * tools/maps/tis-620:
+       Remove some old files.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * tools/Makefile.am:
+       * tools/gen-script-for-lang.c:
+       * tools/gen-script-for-lang-new.c:
+       Remove the old gen-script-for-lang tool, rename the new one to it.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 166709 – Handle font variants more consistently
+
+       * configure.in: Require fontconfig >= 2.5.0
+
+       * pango/fonts.c: Parse "Roman" as style=normal instead of
+       weight=normal.  Doesn't make much difference in reality.
+
+       * pango/pangofc-fontmap.c (pango_fc_convert_weight_to_fc),
+       (pango_fc_convert_weight_to_pango): Update to reflect newly
+       added weights.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 166709 – Handle font variants more consistently
+
+       * pango/pango-font.h:
+       Add enum values PANGO_WEIGHT_BOOK and PANGO_WEIGHT_ULTRAHEAVY.
+
+       * pango/fonts.c:
+       * docs/tmpl/fonts.sgml:
+       Add new weights with their aliases, as well as aliasing "Roman" to the
+       normal weight.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_description_to_filename):
+       Make it Unicode safe.
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (find_field), (parse_field), (pango_parse_style),
+       (pango_parse_variant), (pango_parse_weight), (pango_parse_stretch):
+       Move the parse_*() functions in fonts.c and have them share tables
+       with pango_font_description_to/from_string().
+
+       * pango/pango-utils.c (parse_int), (pango_parse_enum):
+       Accept integers in pango_parse_enum().
+
+2009-01-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 166676 – pango_fc_font_map_finalize
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize),
+       (pango_fc_face_describe), (pango_fc_face_list_sizes),
+       (pango_fc_face_finalize), (pango_fc_face_class_init),
+       (pango_fc_family_list_faces), (pango_fc_family_finalize),
+       (pango_fc_family_class_init):
+       Finalize families and faces.
+
+2009-01-06  Tor Lillqvist  <tml@iki.fi>
+
+       Bug 164001 - pango-querymodules doesn't work uninstalled on win32
+
+       * pango/pango-utils.c (pango_get_lib_subdirectory): When running
+       against an uninstalled, compile-time DLL, in the libtool-style
+       .libs folder, use the compile-time install prefix.
+
+2009-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 384362 – pango can't select some font styles
+
+       * pango/pango-font.h:
+       Add enum values PANGO_WEIGHT_THIN and PANGO_WEIGHT_MEDIUM to
+       PangoWeight.
+
+       * pango/fonts.c: Parse "Thin", "Extra-Light", "Regular", "Demi-Bold",
+       "Extra-Bold", and "Black" as weight descriptors (from the OpenType
+       spec).
+
+2009-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 168085 – numeric styles in pango_font_description_to_string()
+
+       * pango/fonts.c (parse_int), (find_field), (find_field_any),
+       (append_field), (pango_font_description_to_string):
+       Print-out, and parse, numeric styles correctly.  Things like
+       "DejaVu Sans weight=100" parse correctly now.
+
+2009-01-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 529591 – Code related to malayalam is misplaced.
+       Patch from Rahul Bhalerao
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Fix it.
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 515807 – Don't bind modules lazily
+
+       * pango/modules.c (pango_module_load): Don't bind modules lazy.
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 512662 – Update check.docs for pango-undeclared.txt
+
+       * docs/Makefile.am:
+       * docs/check.docs:
+       Sync to the version in cairo.
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-main.c (main):
+       * pango-view/viewer-pangocairo.c (pangocairo_view_render):
+       * pango-view/viewer-pangoft2.c (pangoft2_view_render):
+       * pango-view/viewer-pangox.c (pangox_view_render):
+       * pango-view/viewer-pangoxft.c (pangoxft_view_render):
+       * pango-view/viewer.h:
+       Make sure we measure layout with the same surface type as the
+       final target.  Also reduces fonts loaded by the pangocairo backend.
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-context.c (_pango_cairo_update_context):
+       Completely ignore CTM translation offsets.
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-fcfontmap.c (pango_cairo_fc_font_map_finalize):
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_finalize):
+       Finalize FreeType library after finalizing the FC fontmap.  Fixes
+       segfault in the PangoFT2FontMap's finalize.
+
+2009-01-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (shaper_font_element_destroy),
+       (get_shaper_font_cache), (shaper_font_cache_insert),
+       (get_shaper_and_font_foreach), (itemize_state_process_run):
+       Fix possible reference leak when fallback is disabled.
+
+2008-12-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 565644 – Maybe pango_font_descriptions_free is deprecated
+
+       * pango/fonts.c: Adjust docs.
+
+2008-12-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-pangocairo.c (pangocairo_view_destroy):
+       Call cairo_debug_reset_static_data().
+
+2008-12-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape):
+       * modules/arabic/arabic-lang.c (arabic_engine_break):
+       * modules/basic/basic-fc.c (basic_engine_shape):
+       * modules/basic/basic-x.c (find_char), (conv_8bit), (conv_eucjp),
+       (conv_16bit), (conv_16bit_MSB_on), (conv_gb18030_1), (conv_euctw),
+       (conv_ucs4), (basic_engine_shape), (basic_engine_covers):
+       * modules/hangul/hangul-fc.c (hangul_engine_shape):
+       * modules/hebrew/hebrew-fc.c (add_cluster), (fallback_shape):
+       * modules/indic/indic-lang.c (indic_engine_break):
+       * modules/khmer/khmer-fc.c (khmer_engine_shape):
+       * modules/syriac/syriac-fc.c (syriac_engine_shape):
+       * modules/thai/thai-fc.c (get_glyph_index_tis),
+       (thai_engine_shape), (thai_make_unknown_glyph):
+       * modules/thai/thai-lang.c (thai_engine_break):
+       * modules/thai/thai-shaper.c (get_glyphs_list):
+       * modules/tibetan/tibetan-fc.c (tibetan_engine_shape):
+       Fix all warnings in modules/.
+
+2008-12-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-main.c (main):
+       * pango-view/viewer-pangocairo.c (pangocairo_view_create),
+       (transform_callback), (pangocairo_view_render),
+       (pangocairo_view_write):
+       * pango-view/viewer-pangoft2.c (substitute_func),
+       (pangoft2_view_create), (pangoft2_view_create_surface),
+       (pangoft2_view_destroy_surface), (render_callback),
+       (pangoft2_view_render), (pangoft2_view_write):
+       * pango-view/viewer-pangox.c (render_callback):
+       * pango-view/viewer-pangoxft.c (default_substitute),
+       (render_callback):
+       * pango-view/viewer-render.c (parse_enum), (parse_align),
+       (parse_ellipsis), (parse_gravity), (parse_gravity_hint),
+       (parse_hinting), (parse_wrap), (parse_backend), (show_version):
+       * pango-view/viewer-x.c (x_view_init):
+       Fix all warnings in pango-view/
+
+2008-12-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize),
+       (pango_fc_font_map_shutdown):
+       Cleanup fontmap finalization.
+
+2008-12-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 469049 – Fix all compiler warnings
+
+       * pango-view/viewer-pangocairo.c (render_callback):
+       * pango/fonts.c (append_field), (pango_font_description_to_string):
+       * pango/opentype/harfbuzz-dump.c:
+       * pango/pango-bidi-type.c (pango_log2vis_get_embedding_levels):
+       * pango/pango-coverage.c (pango_coverage_set):
+       * pango/pango-markup.c (span_parse_func):
+       * pango/pango-renderer.c
+       (pango_renderer_default_draw_error_underline):
+       * pango/pango-utils.c (pango_scan_string):
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_trapezoid),
+       (draw_error_underline), (pango_cairo_renderer_class_init):
+       Fix all the remaining warnings.
+
+2008-12-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/modules.c (pango_module_load), (script_info_free):
+       * pango/opentype/harfbuzz-gpos.c (HB_Load_GPOS_Table):
+       * pango/pango-bidi-type.c:
+       * pango/pango-coverage.c (pango_coverage_ref),
+       (pango_coverage_unref):
+       * pango/pango-engine.c (pango_engine_shape_real_covers),
+       (fallback_engine_shape), (fallback_engine_covers):
+       * pango/pango-fontmap.c (pango_font_map_init):
+       * pango/pango-ot-ruleset.c (pango_ot_ruleset_finalize),
+       (pango_ot_ruleset_new):
+       * pango/pangofc-decoder.c (pango_fc_decoder_init),
+       (pango_fc_decoder_class_init):
+       * pango/pangofc-font.c (pango_fc_font_find_shaper),
+       (pango_fc_font_get_coverage):
+       * pango/pangofc-fontmap.c (pango_fc_font_map_list_families),
+       (pango_fc_make_pattern), (pango_fc_font_map_get_patterns),
+       (get_first_font), (_pango_fc_font_map_get_coverage),
+       (cleanup_font), (pango_fc_font_description_from_pattern),
+       (pango_fc_face_list_sizes), (pango_fc_family_list_faces):
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_get_resolution):
+       * pango/pangoft2-render.c (pango_ft2_renderer_init),
+       (pango_ft2_renderer_draw_trapezoid):
+       * pango/pangoft2.c (pango_ft2_font_get_face),
+       (pango_ft2_font_real_unlock_face),
+       (pango_ft2_free_glyph_info_callback):
+       Fix more warnings.
+
+2008-12-25  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_default_break):
+       * pango/fonts.c (find_field_any), (pango_font_class_init),
+       (pango_font_init), (pango_font_metrics_ref),
+       (pango_font_metrics_unref), (pango_font_family_class_init),
+       (pango_font_family_init), (pango_font_face_class_init),
+       (pango_font_face_init):
+       * pango/pango-attributes.c (pango_attr_list_ref),
+       (pango_attr_list_unref), (pango_attr_iterator_get_font):
+       * pango/pango-layout.c (pango_layout_set_height), (extents_free),
+       (no_shape_filter_func), (pango_layout_line_ref),
+       (pango_layout_line_unref), (pango_layout_get_item_properties):
+       * pango/pango-markup.c (end_element_handler), (text_handler),
+       (b_parse_func), (big_parse_func), (span_parse_func),
+       (i_parse_func), (markup_parse_func), (s_parse_func),
+       (sub_parse_func), (sup_parse_func), (small_parse_func),
+       (tt_parse_func), (u_parse_func):
+       * pango/pango-ot-info.c (get_glyph_class):
+       * pango/pango-renderer.c (get_item_properties),
+       (pango_renderer_default_prepare_run):
+       * pango/pango-utils.c (_pango_shape_shape):
+       * pango/pangocairo-fcfontmap.c
+       (pango_cairo_fc_font_map_get_font_type),
+       (pango_cairo_fc_font_map_context_substitute),
+       (pango_cairo_fc_font_map_context_key_get),
+       (pango_cairo_fc_font_map_context_key_copy),
+       (pango_cairo_fc_font_map_context_key_free),
+       (pango_cairo_fc_font_map_context_key_hash),
+       (pango_cairo_fc_font_map_context_key_equal):
+       * pango/pangocairo-fontmap.c
+       (pango_cairo_font_map_new_for_font_type),
+       (pango_cairo_font_map_set_default):
+       * pango/pangocairo-render.c (pango_cairo_renderer_init):
+       * pango/pangox-fontcache.c (free_cache_entry):
+       * pango/pangox-fontmap.c (close_display_cb),
+       (list_families_foreach), (pango_x_font_map_load_font),
+       (ignore_error):
+       * pango/pangox.c (average_width_foreach), (subfonts_foreach),
+       (pango_x_font_find_shaper), (pango_x_get_unknown_glyph),
+       (pango_x_get_item_properties), (pango_x_apply_ligatures),
+       (pango_x_font_get_unknown_glyph):
+       * pango/pangoxft-fontmap.c (pango_xft_font_map_init),
+       (close_display_cb):
+       * pango/querymodules.c (show_version):
+       Fix warnings.
+
+2008-12-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 565379 – pango_font_description_better_match some style attributes
+       of old_match are not checked
+
+       * pango/fonts.c: Improve docs.
+
+2008-12-17  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 564877 – pango-engine.h: PANGO_MODULE_PREFIX and G_MODULE_EXPORT
+
+       * pango/pango-engine.h: Don't add G_MODULE_EXPORT.  This
+       roles back a change introduced in 1.22.4.
+
+2008-12-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.22.4 ===
+
+       * configure.in: Version 1.22.4
+
+       * NEWS: Updated.
+
+2008-12-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 564644 – Not complete description of the
+       pango_font_description_better_match function
+
+       * pango/fonts.c: Improve docs even more.
+
+2008-12-15  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 564644 – Not complete description of the
+       pango_font_description_better_match function
+
+       * pango/fonts.c: Improve docs.
+
+2008-12-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 563898 – Generated output is not deterministic
+
+       * docs/pango-querymodules.xml:
+       * docs/pango_markup.sgml:
+       Add section ids, such that generated HTML is deterministic.
+
+2008-12-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangoxft-font.c (pango_xft_font_init),
+       (load_fallback_font): Don't call exit().  Let us crash.
+
+2008-12-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 563803 – pango_renderer_finalize fails to call parent finalize
+
+       * pango/pango-renderer.c (pango_renderer_class_init),
+       (pango_renderer_finalize): Call parent finalize.
+       
+       * pango/pango-renderer.c (add_strikethrough),
+       (pango_renderer_default_draw_glyph_item),
+       (pango_renderer_default_draw_error_underline):
+       Clean up a bit.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 499626 – Space should be optional after comma in
+       PangoFontDescription input string
+
+       * pango/fonts.c (getword): Don't require space after comma.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 499624 – Spaces around commas in PangoFontDescription family name
+       should be trimmed
+
+       * pango/fonts.c (pango_font_description_from_string):
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern):
+       Do it in pango_font_description_from_string() instead of pangofc
+       backend.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 499624 – Spaces around commas in PangoFontDescription family name
+       should be trimmed
+
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern): Trim family strings
+       before adding to pattern.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 563557 – set g_get_prgname() in fc pattern
+
+       * docs/pango-sections.txt:
+       * pango/pangofc-fontmap.c (pango_fc_make_pattern):
+       * pango/pangofc-fontmap.h:
+       Add PANGO_FC_PRGNAME which is the fontconfig element "pangoprgname".
+       Populate it on all our fontconfig search patterns using
+       g_get_prgname().  See bug for sample use.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-engine.h: Add G_MODULE_EXPORT annotation for modules.
+
+2008-12-07  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c (pango_context_get_metrics):
+       Fix docs re NULL language.  Also allow NULL desc.
+
+2008-12-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-font.c
+       (_pango_cairo_font_private_get_scaled_font):
+       Add more debug info if creating scaled font failed.
+
+2008-12-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 563356 – The input area of firefox and the blank width after text
+       in gnome-menu was stretched too wide, under pango-1.22.3
+
+       * docs/tmpl/fonts.sgml:
+       * pango/pango-impl-utils.h:
+       * pango/pangocairo-atsuifont.c
+       (pango_cairo_atsui_font_create_metrics_for_context):
+       * pango/pangocairo-win32font.c
+       (pango_cairo_win32_font_create_metrics_for_context):
+       * pango/pangofc-font.c (pango_fc_font_create_metrics_for_context):
+       For approximate_char_width calculation take each char's width into
+       account.  That is, do a weighted average instead of uniform average.
+       g_unichar_iszerowidth() chars count as 0, g_unichar_iswide() chars
+       count 2, and the rest count as 1.  Pretty much wcwidth() behavior.
+       See bug report for rationale.
+
+2008-11-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 562574 – Pangocariowin32 is leaking every cairo font it ever
+       creates
+
+       * pango/pangocairo-atsuifont.c (pango_cairo_atsui_font_finalize):
+       * pango/pangocairo-win32font.c (pango_cairo_win32_font_finalize):
+       Finalize shared pangocairo font resources.  Oops!
+
+       * pango/pangocairo-font.c (_pango_cairo_font_private_finalize):
+       Protect against multiple calls to finalize.  This is practiced by the
+       pangocairo-fcfont when a font is shutdown and then finalized.
+
+2008-11-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * examples/cairotwisted.c (parametrize_path), (point_on_path):
+       Handle close_path correctly.
+
+2008-11-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.22.3 ===
+
+       * configure.in: Version 1.22.3
+
+       * NEWS: Updated.
+
+2008-11-22  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/thai-lang.c (thai_engine_break):
+       Minor indentation fixes for previous commit.
+
+2008-11-22  Chris Wilson  <chris@chris-wilson.co.uk>
+
+       Bug 561740 – Use stack allocation for thai_engine_break
+
+       * modules/thai/thai-lang.c (utf8_to_tis), (thai_engine_break):
+       Small tweak to allocate small, temporary arrays on the stack.
+
+2008-11-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 561779 – incorrect calculations in pango_matrix_concat
+       implementation
+
+       * pango/pango-matrix.c (pango_matrix_concat): Fix bug in y0
+       computation.
+
+2008-11-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 560730 – pango 1.22.2 build failure on Solaris 10, too many array
+       initializers in pango-language.c
+
+       * pango/pango-language.c: Don't use anonymous struct.
+
+2008-11-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot-info.c (pango_ot_info_get_gdef),
+       (pango_ot_info_get_gsub), (pango_ot_info_get_gpos):
+       Write error code in capital hex.
+
+2008-10-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.22.2 ===
+
+       * configure.in: Version 1.22.2
+
+       * NEWS: Updated.
+
+2008-10-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 558254 – Internal reference handling messed up
+
+       * pango/pangofc-font.c (pango_fc_font_get_coverage):
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize):
+       Make sure fonts->fontmap is set to NULL when fontmap finalizes.
+
+2008-10-27  Richard Hult  <richard@imendio.com>
+
+       Bug 558107 – is_monospace always returns FALSE in pangoatsui
+
+       * pango/pangoatsui-fontmap.c: (pango_atsui_family_is_monospace),
+       (pango_atsui_font_map_init): Mark families whose faces have the
+       NSFixedPitchFontMask set as monospaced, and use this in the
+       is_monospace implementation.
+
+2008-10-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 557620 – pango_font_description_from_string not correct
+
+       * pango/fonts.c (find_field_any): Fix parsing of "normal" when
+       not at the end of string.
+
+2008-10-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.22.1 ===
+
+       * configure.in: Version 1.22.1
+
+       * NEWS: Updated.
+
+2008-10-14  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 528272 – "Error loading GPOS table 5503" when using katakana
+       characters
+
+       * pango/opentype/harfbuzz-gpos.c (Load_Mark2Array): Skip parsing
+       null anchor tables.
+
+2008-10-10  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 552107 – Small libtool fixes
+
+       * configure.in: Regenerate libtool early, quote $deplibs_check_method.
+       Patch by Patryk Zawadzki
+
+2008-10-10  Kjartan Maraas  <kmaraas@gnome.org>
+
+       * pango/pangox.c: (get_context_info): Fix a gcc warning.
+
+2008-10-06  Christian Persch  <chpe@gnome.org>
+
+       Bug 539623 – document that pango_color_parse accepts NULL
+
+       * pango/pango-color.c: Clarify docs.
+
+2008-10-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 555219 – Memory leak when using pango_layout_iter_copy
+       Patch from Falk Rohsiepe
+
+       * pango/pango-layout.c (pango_layout_iter_copy):  Use gslice, not
+       memdup.  Oops!
+
+2008-09-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/opentype/harfbuzz-gpos.c (Position_CursiveChain):
+       Fix left-to-right positioning.  Reported by Peter Hunter.
+
+2008-09-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 553345 – Japanese pangram.
+       Patch from  Takeshi AIHANA
+
+       * pango/pango-language-sample-table.h: Improve Japanese text.
+
+2008-09-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.22.0 ===
+
+       * configure.in: Version 1.22.0
+
+       * NEWS: Updated.
+
+2008-09-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in:
+       * pango/pangocairo-render.c
+       (pango_cairo_renderer_show_text_glyphs), (save_current_point):
+       Update to cairo-1.7.6 API.
+
+2008-09-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 552993 – Romanian pangram
+
+       * pango/pango-language-sample-table.h: New Romanian sample text
+       from Misu Moldovan.
+
+2008-09-18  Tor Lillqvist  <tml@novell.com>
+
+       * pango-zip.sh.in: Drop pango.aliases as we have a default such
+       built-in nowadays.
+
+2008-09-13  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-utils.c: Don't use the deprectated
+       g_win32_get_package_installation_subdirectory(). Use
+       g_win32_get_package_installation_directory_of_module()
+       instead. Also, don't use the deprecated silly
+       G_WIN32_DLLMAIN_FOR_DLL_NAME() macro, but an explicit minimal
+       DllMain() that just saves the DLL handle.
+
+2008-09-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 551865 – Can't change justification of a PangoLayout after first
+       draw
+
+       * pango/pango-layout.c (pango_layout_set_attributes),
+       (pango_layout_set_font_description), (pango_layout_set_justify),
+       (pango_layout_set_alignment), (pango_layout_set_tabs):
+       Invalidate layout after property change.  Oops!
+
+2008-09-08  Tor Lillqvist  <tml@novell.com>
+
+       Bug 551416 - pangowin32-fontcache.c: argument is different type
+
+       * pango/pangowin32-fontcache.c: Pass address of int to
+       g_atomic_int_inc().
+
+2008-09-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.6 ===
+
+       * configure.in: Version 1.21.6
+
+       * NEWS: Updated.
+
+2008-09-03  Alberto Ruiz  <aruiz@gnome.org>
+
+       Bug 550659 – configure.in ignores a win32 backend only scenario
+
+       * configure.in: Added $have_win32 check
+
+2008-08-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 549758 – Swedish font sample text could use punctuation
+
+       * pango/pango-language-sample-table.h: Add final punctuation to many
+       that were missing one.
+
+2008-08-27  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 549522 – New pt_BR pangram for pango
+
+       * pango/pango-language-sample-table.h: Change pt_BR string as per
+       Leonardo Ferreira Fontenelle's suggestion.
+
+2008-08-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 549520 – fr sample string
+
+       * pango/pango-language-sample-table.h: Change French sample string
+       as per Vincent Untz's suggestion.
+
+2008-08-26  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.5 ===
+
+       * configure.in: Version 1.21.5
+
+       * NEWS: Updated.
+
+2008-08-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 549003 – pango_layout_set_height(): layout should not be cleared
+       unless required
+
+       * pango/pango-layout-private.h:
+       * pango/pango-layout.c (pango_layout_init),
+       (pango_layout_set_height), (pango_layout_get_line_count),
+       (pango_layout_clear_lines), (add_line):
+       Don't invalidate layout if the new height does not force
+       ellipsization.
+
+2008-08-22  Richard Hult  <richard@imendio.com>
+
+       * pango/pangoatsui.c: (_pango_atsui_font_set_font_map): Fix build,
+       small typo.
+
+2008-08-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/fonts.c (pango_font_metrics_ref),
+       (pango_font_metrics_unref):
+       * pango/pango-attributes.c (pango_attr_list_ref),
+       (pango_attr_list_unref):
+       * pango/pango-coverage.c (pango_coverage_ref),
+       (pango_coverage_unref):
+       * pango/pango-layout.c (pango_layout_line_ref),
+       (pango_layout_line_unref):
+       * pango/pangowin32-fontcache.c (cache_entry_unref),
+       (pango_win32_font_cache_loadw):
+       * pango/pangox-fontcache.c (cache_entry_unref),
+       (pango_x_font_cache_load):
+       Use atomic reference counting.
+
+       Pango may not be thread safe yet, but fixing it little by little
+       is easier than doing all in one round.
+
+2008-08-22  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 143542 – PangoFT2Fontmap leak
+
+       * pango/fonts.c:
+       * pango/pangoatsui.c (pango_atsui_font_finalize),
+       (_pango_atsui_font_set_font_map):
+       * pango/pangocairo-font.c (_pango_cairo_font_get_metrics),
+       (_pango_cairo_font_private_get_hex_box_info):
+       * pango/pangocairo-win32font.c (_pango_cairo_win32_font_new):
+       * pango/pangofc-font.c (pango_fc_font_get_metrics):
+       * pango/pangofc-fontmap.c (pango_fc_font_map_add),
+       (_pango_fc_font_map_remove), (cleanup_font):
+       * pango/pangowin32-fontmap.c (pango_win32_font_neww),
+       (pango_win32_font_map_real_find_font):
+       * pango/pangowin32.c (pango_win32_font_finalize):
+       * pango/pangox-fontmap.c (pango_x_font_map_load_font):
+       * pango/pangox.c (pango_x_font_new), (pango_x_font_finalize):
+       Make the reference the font->fontmap reference weak.
+
+       The code for setting the reference must look like this:
+
+         g_assert (font->fontmap == NULL);
+         font->fontmap = (PangoFontMap *) fontmap;
+         g_object_add_weak_pointer (G_OBJECT (font->fontmap), (gpointer *) (gpointer) &font->fontmap);
+
+       And releasing it like:
+
+         g_assert (font->fontmap != NULL);
+         g_object_remove_weak_pointer (G_OBJECT (font->fontmap), (gpointer *) (gpointer) &font->fontmap);
+         font->fontmap = NULL;
+
+       I have converted all fontmaps.  The win32 and atsui ones can
+       use some simple testing.
+
+       The PangoFc fonts actually don't need the weakref as the fontmap
+       already provides a similar link by itself.
+
+2008-08-20  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/pango-language.c: pango_language_get_scripts(): Fix a 
+       tiny typo in the documentation.
+
+2008-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-language.c (pango_language_private_init),
+       (pango_language_get_private), (pango_language_from_string),
+       (find_best_lang_match), (find_best_lang_match_cached),
+       (pango_language_get_sample_string), (pango_language_get_scripts):
+       Cache language information to avoid bsearch()ing all the time.
+
+2008-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-language.c (find_best_lang_match),
+       (pango_language_get_sample_string), (pango_language_get_scripts),
+       (pango_script_get_sample_language):
+       Cleanup bsearching in language arrays.
+
+       Add some language codes for scripts.
+
+2008-08-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 314094 – Get rid of poutpourri default sample string
+
+       * pango/pango-language-sample-table.h:
+       * pango/pango-language.c (pango_language_get_sample_string):
+       Use default language if provided language to get_sample_string()
+       is NULL.
+
+2008-08-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 473806 – Improve pango_language_get_sample_string()
+
+       * docs/Makefile.am:
+       * pango/Makefile.am:
+       * pango/pango-language-sample-table.h:
+       * pango/pango-language.c (pango_language_get_sample_string):
+       Add language sample texts that are actually usable.  Compiled from
+       a variety of sources.  See pango-language-sample-table.h.
+
+2008-08-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/GLASS.txt:
+       * pango/pango-ot-tag.c:
+       Various corrections.
+
+2008-08-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 473805 – Add API enumerating scripts for a language
+
+       * docs/Makefile.am:
+       * docs/pango-sections.txt:
+       * docs/tmpl/scripts.sgml:
+       * docs/tmpl/text-attributes.sgml:
+       * docs/tmpl/utils.sgml:
+       * pango/pango-language.c (pango_language_get_scripts),
+       (pango_language_includes_script),
+       (pango_script_get_sample_language):
+       * pango/pango-language.h:
+       * pango/pango-script.c:
+       * pango/pango.def:
+       Add a minor new public API:
+
+               pango_language_get_scripts()
+       
+       This is what pango_language_includes_script() has been using
+       internally.  Previously one had to call that function over all
+       possible script values to determine which scripts a language
+       uses.  The new API makes that much easier.
+
+2008-08-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-language.h:
+       * pango/pango-script.h:
+       Fix cyclic header ordering and move pango_language_* to
+       pango-language.h
+
+2008-08-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 470895 – Improve OpenType language tag list
+
+       * pango/pango-ot-tag.c: Update to OpenType 1.5 draft, intersected with
+       ISO639-3 of 2008/08/04.
+
+2008-08-12  Sven Herzberg  <sven@imendio.com>
+
+       Bug 547432 – Deprecation of pango_(backend)_font_map_create_context()
+       not clean
+       reviewed by: Behdad Esfahbod
+
+       * pango/pangocairo-fontmap.c,
+       * pango/pangofc-fontmap.c,
+       * pango/pangoft2-fontmap.c,
+       * pango/pangowin32.c,
+       * pango/pangox.c,
+       * pango/pangoxft-fontmap.c: use "Deprecated:" for deprecation messages;
+       fix the deprecation version number
+
+2008-08-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.4 ===
+
+       * configure.in: Version 1.21.4
+
+       * NEWS: Updated.
+
+2008-08-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 547303 – pango_layout_get_cursor_pos crashes on certain text
+       buffers
+
+       * pango/pango-layout.c (pango_layout_get_cursor_pos): Handle cursor
+       position in the middle of a "\r\n" cluster.
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c (pango_cairo_renderer_draw_glyph_item):
+       Fix cluster iteration.
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-render.c
+       (pango_cairo_renderer_show_text_glyphs),
+       (pango_cairo_renderer_draw_glyphs),
+       (pango_cairo_renderer_draw_glyph_item):
+       Implement draw_glyph_item using cairo_show_text_glyphs().
+
+       * configure.in: Require cairo >= 1.7.1
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+        Fedora Bug 457883 - Sindhi Characters are not supported in
+        pango [U+097B-U+097F]
+        Patch from Pravin Satpute
+
+       * modules/indic/indic-ot-class-tables.c: Add [U+097B-U+097F].
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 441654 – prefix fails when more than one base characters (as
+       conjuncts) present after a half form the next prefix renders
+       incorrectly
+       Patch from  Rahul Bhalerao
+
+       * modules/indic/mprefixups.c (indic_mprefixups_apply):
+       Do what I was told to do.
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 546534 – pango_cairo_font_map_set_default(NULL) errs
+
+       * pango/pangocairo-fontmap.c (pango_cairo_font_map_set_default):
+       Allow NULL.
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 431394 – Use pango_glyph_item_iter in more places
+
+       * pango/glyphstring.c (pango_glyph_string_get_logical_widths):
+       Use pango_glyph_item_iter for cluster iteration.
+
+2008-08-06  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 377948 – Make pango_glyph_item_iter public
+
+       * pango/pango-glyph-item.c (pango_glyph_item_iter_copy),
+       (pango_glyph_item_iter_free), (pango_glyph_item_iter_get_type),
+       (pango_glyph_item_iter_next_cluster),
+       (pango_glyph_item_iter_prev_cluster),
+       (pango_glyph_item_iter_init_start),
+       (pango_glyph_item_iter_init_end), (pango_glyph_item_apply_attrs),
+       (pango_glyph_item_letter_space):
+       * pango/pango-glyph-item.h:
+       New public API, for iterating a PangoGlyphItem:
+
+               PangoGlyphItemIter
+               PANGO_TYPE_GLYPH_ITEM_ITER
+               pango_glyph_item_iter_copy()
+               pango_glyph_item_iter_free()
+               pango_glyph_item_iter_init_start()
+               pango_glyph_item_iter_init_end()
+               pango_glyph_item_iter_next_cluster()
+               pango_glyph_item_iter_prev_cluster()
+
+       * pango/pango.def:
+       * docs/tmpl/glyphs.sgml:
+       * docs/pango-sections.txt:
+       * pango/Makefile.am:
+       * pango/ellipsize.c (line_iter_next_cluster),
+       (line_iter_prev_cluster), (find_initial_span):
+       * pango/pango-layout.c (justify_words):
+       Update.
+
+       * pango/pango-glyph-item-private.h:
+       Remove.
+
+2008-08-05  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-context.c:
+       * pango/pango-context.h:
+       Make the following API public:
+
+               pango_context_new()
+               pango_context_set_font_map()
+
+       * pango/pango-fontmap.c (pango_font_map_create_context):
+       * pango/pango-fontmap.h:
+       New public API:
+
+               pango_font_map_create_context()
+
+       * pango/pangocairo-context.c (pango_cairo_create_context):
+       * pango/pangocairo-font.c (_pango_cairo_font_get_metrics),
+       (_pango_cairo_font_private_get_hex_box_info):
+       * pango/pangocairo-fontmap.c (pango_cairo_font_map_create_context):
+       * pango/pangocairo.h:
+       Deprecate pango_cairo_font_map_create_context().
+
+       * pango/pangofc-font.c (pango_fc_font_get_metrics):
+       * pango/pangofc-fontmap.c (pango_fc_font_map_create_context):
+       * pango/pangofc-fontmap.h:
+       Deprecate pango_fc_font_map_create_context().
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_create_context),
+       (pango_ft2_get_context):
+       * pango/pangoft2.h:
+       Deprecate pango_ft2_font_map_create_context().
+
+       * pango/pangowin32.c (pango_win32_get_context),
+       (pango_win32_font_get_metrics):
+       * pango/pangowin32.h:
+       Deprecate pango_win32_get_context().
+
+       * pango/pangoxft-font.c (_pango_xft_font_get_mini_font):
+       * pango/pangoxft-fontmap.c (pango_xft_get_context):
+       * pango/pangoxft.h:
+       Deprecate pango_xft_get_context().
+
+       * pango/pangox-fontmap.c (pango_x_font_map_for_display):
+       * pango/pangox.c (get_context_info), (pango_x_get_context),
+       (pango_x_context_set_funcs), (pango_x_render_layout_line):
+       Deprecate pango_x_get_context(), again.
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/fonts.sgml:
+       * pango-view/viewer-pangocairo.c (pangocairo_view_get_context):
+       * pango-view/viewer-pangoft2.c (pangoft2_view_get_context):
+       * pango-view/viewer-pangox.c (pangox_view_get_context):
+       * pango-view/viewer-pangoxft.c (pangoxft_view_get_context):
+       * pango/check.defs:
+       * pango/pango.def:
+       Update.
+
+2008-07-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 472625 – Add draw_glyph_item() to PangoRenderer
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/pango-renderer.sgml:
+       * pango/pango-renderer.c:
+       * pango/pango-renderer.h:
+       New public API:
+
+               PangoRenderer::draw_glyph_item()
+               pango_renderer_draw_glyph_item()
+
+       Make layout and layout-line default renderers go through
+       draw_glyph_item(), which then by default falls back to
+       draw_glyphs().  The advantage in draw_glyph_item() is that it
+       has access to the text and cluster information.
+
+2008-07-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/tmpl/text-attributes.sgml: Fix doc build warning.
+
+2008-07-19  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (process_line): Justify lines broken by U+2028
+       LINE SEPARATOR.  Also affects return value of pango_layout_is_wrapped().
+
+2008-08-06  Tor Lillqvist  <tml@novell.com>
+
+       * pango/Makefile.am (install-def-files): Add a mkdir to be sure
+       the destination directory exists before copying files there.
+
+       * configure.in: On Windows set LIB_EXE_MACHINE_FLAG to X86 or X64
+       depending on host architecture.
+
+       * pango/Makefile.am: Use it when running lib.exe.
+
+2008-08-04  Tor Lillqvist  <tml@novell.com>
+
+       * pango/Makefile.am: Don't attempt to build the MS import
+       libraries for libpangoft2 unless HAVE_FREETYPE.
+
+2008-08-03  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-bidi-type.c: Include <string.h> for strlen()
+       prototype.
+
+2008-06-29  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 540592 – Crash in HB_GSUB_Apply_String with Linux-Libertine font
+
+       * pango/opentype/harfbuzz-gsub.c (GSUB_Do_String_Lookup): Fix reverse
+       loops for type 8 lookups.
+
+2008-06-26  Kristian Rietveld  <kris@imendio.com>
+
+       * configure.in: require glib trunk (for newer glib-mkenums).
+
+       * pango/Makefile.am: when generating pango-enum-types.h use
+       @ENUMPREFIX@ instead of hard coding the prefix.
+
+2008-06-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 540036 – Doesn't link to fontconfig
+
+       * pango/Makefile.am: Explicitly include FREETYPE_LIBS for pangoxft.
+
+2008-06-23  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 380094 – Fix split matra rendering bug for Kannada language
+
+       * modules/indic/indic-ot-class-tables.c: Fix Indic class for
+       U+0C8D and U+0C8E.
+
+2008-06-21  Johan Dahlin  <jdahlin@async.com.br>
+
+       * *.[ch]: Include "config.h" instead of <config.h>
+       Command used:
+       find -name \*.[ch]|xargs perl -p -i -e 's/^#include <config.h>/#include "config.h"/g'
+       Rubberstamped by Behdad
+
+2008-06-18  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 536017 – Remove SF_MPRE_FIXUP from Sinhala script flags
+       Patch by Harshula
+
+       * modules/indic/indic-ot-class-tables.c: Just freakin' do it.
+       I have no idea if it's right or wrong.  Just that I've been
+       pestered enough to do it.  Time will tell...
+
+2008-06-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.3 ===
+
+       * configure.in: Version 1.21.3
+
+       * NEWS: Updated.
+
+2008-06-16  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 538661 – Improve pango_cairo_context_update_context()
+
+       * pango/pangocairo-context.c (_pango_cairo_update_context):
+       Relayout only if merged options changed.
+
+2008-06-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 536190 – Make pango_fc_font_map_clear_cache() public?
+
+       * pango/pangofc-fontmap.c:
+       * pango/pangofc-fontmap.h:
+       Make pango_fc_font_map_clear_cache() public.
+
+2008-06-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 537258 – Add a pango_language_to_string() function
+
+       * docs/tmpl/text-attributes.sgml:
+       * pango/pango-language.c (pango_language_to_string):
+       * pango/pango-language.h:
+       * pango/pango.def:
+       Add a function implementation of pango_language_to_string().
+       The macro is still available.  To be removed in a cycle or two from
+       now. (bug #537466)
+
+2008-06-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 537257 – pango_language_from_string(NULL) not happy
+
+       * pango/pango-language.c (pango_language_from_string):
+       Allow NULL.
+
+2008-06-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 537186 – Make PangoFcFont pattern property readable
+
+       * pango/pangofc-font.c (pango_fc_font_class_init),
+       (pango_fc_font_get_property): Make it readable.
+
+2008-06-02  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.2 ===
+
+       * configure.in: Version 1.21.2
+
+       * NEWS: Updated.
+
+2008-05-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 510299 – OpenType font variants are broken with ATSUI/Cairo
+
+       * pango/fonts.c (field_matches), (find_field): Ignore dashes when
+       matching fong description fields.
+
+2008-05-28  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-fontmap.c (synthesize_foreach)
+       (_pango_win32_font_map_init): Rework face synthesis once
+       again. Code is simpler now, and we don't needlessly synthesize
+       bold weights for fonts that have a real semi-bold weight, like
+       Lucida Sans. (The bold weight ended up looking like the semi-bold
+       anyway.)
+       (pango_win32_font_description_from_logfont)
+       (pango_win32_font_description_from_logfontw): Recognize the
+       semi-bold weight interval.
+
+       Map words that indicate weight and slant in the font name into the
+       corresponding Pango font description settings, and strip those
+       words from the family name. This maps for instance the DejaVu
+       Sans, DejaVu Sans Condensed and DejaVu Sans Light fonts into a
+       single DejaVu Sans family with styles Ultra-Light, Condensed,
+       Normal, Oblique Condensed, Oblique, Bold Condensed, Bold, Bold
+       Oblique Condensed, and Bold Oblique, which is nice.
+
+2008-05-27  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-fontmap.c (pango_win32_family_list_faces):
+       After the change to how the standard pseudo font families are set
+       up below, we don't need to prune out duplicate face names any
+       longer.
+
+2008-05-27  Tor Lillqvist  <tml@novell.com>
+
+       Bug 436363 - Bold and Bold Italic style of MS-Mincho font are not
+       listed in GtkFontSelection
+
+       * pango/pangowin32-fontmap.c: Synthesize also Bold and Bold Italic
+       (or Oblique) faces when feasible. Don't synthesize these for
+       decorative or script fonts. Kill the magic code snippet mentioned
+       below. Instead, explicitly create font families for the standard
+       pseudo fonts that correspond to the first existing font of the
+       corresponding built-in alias list. Use the face style name Oblique
+       for slanted sans and monospace fonts, not Italic.
+
+2008-05-27  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-fontmap.c (pango_win32_family_list_faces):
+       Prune duplicated face names. Makes the GTK+ font selector look a
+       bit saner for the "sans", "serif" and "monospace" standard pseudo
+       font families with just one instance of each style.
+
+       That we get duplicated styles in the first place is because of the
+       magic code snippet in pango_win32_insert_font() that sets up the
+       list of faces for the standard pseudo font families. I don't like
+       that code but without it these families wouldn't currently show up
+       in the font selector at all.
+
+       A problem is still that the magic code blindly adds all random
+       fonts that claim to be FF_ROMAN to the list of faces for the
+       "serif" family, etc. I think it would be preferrable to do it only
+       for well-known sensible fonts. That would be those that are listed
+       in builtin_aliases in pango-utils.c, I guess.
+
+2008-05-26  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-private.h
+       * pango/pangowin32-fontmap.c: Drop the PangoWin32FontMap::n_fonts
+       field which wasn't really used for anything. Rename the field
+       PangoWin32Family::font_entries to faces. Rename some local
+       variables to be more consistently named.
+
+2008-05-26  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32.c
+       * pango/pangowin32-fontmap.c: Some whitespace cleanup. 
+
+2008-05-26  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pangowin32-private.h
+       * pango/pangowin32-fontmap.c: Drop the PangoWin32SizeInfo struct
+       and the hash table mapping from the relevant part of a LOGFONTW
+       struct to a list of PangoWin32SizeInfos in PangoWin32FontMap. It
+       seems that each list was always of length one anyway, so instead
+       just map directly to each such single list member, also a LOGFONTW
+       struct. Actually I wonder whether this map is needed at all, will
+       have to experiment.
+
+2008-05-23  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-utils.c: Revert the addition of the alias
+       "sansserif". The correct name is "sans-serif", and "sans" should
+       also be accepted. If something uses "sansserif" it is wrong. (I
+       saw it in some sample svg files in librsvg.)
+
+2008-05-20  Tor Lillqvist  <tml@novell.com>
+
+       * pango/pango-utils.c: Add alias "sansserif" to the builtin
+       aliases on Win32. Same contents as "sans" and "sans-serif".
+
+2008-05-20  Tor Lillqvist  <tml@novell.com>
+
+       Bug 523193 – Vista Hebrew, CJK fonts to builtin win32 pango aliases
+
+       Patch by Daniel Atallah.
+       
+       * pango/pango-utils.c: Add fonts from Vista to the builtin
+       aliases. Also add Lucida Sans Unicode and Lucida Console.
+
+2008-05-13  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.1 ===
+
+       * configure.in: Version 1.21.1
+
+       * NEWS: Updated.
+
+2008-05-03  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 531242 – Leak when calculating win32 font coverage
+       Patch from Daniel Atallah
+
+       * pango/pangowin32.c (pango_win32_font_calc_coverage): Plug leak.
+
+2008-04-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 530757 – Docs build breaks because of hash sign in URL in <ulink...>
+
+       * docs/tmpl/main.sgml: Make it build.
+
+2008-04-30  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 530685 – Pango no longer using cairo as a backend as of pango 1.19.4
+
+       * configure.in: Be more verbose about cairo font backends found.
+
+2008-04-28  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango-view/viewer-main.c (main): Wait for convert(1) to finish.
+       Patch by Jamie Guinan.
+
+2008-04-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 97545 – Make pango_default_break follow Unicode TR #29
+
+       * docs/tmpl/main.sgml:
+       * pango/break.c (pango_default_break):
+       * pango/pango-break.h:
+       * tests/testboundaries_ucd.c (main):
+       Add new PangoLogAttr member is_word_boundary, that implements UAX#29's
+       Word Boundaries semantics.  Test fully passes for it.
+
+2008-04-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 97545 – Make pango_default_break follow Unicode TR #29
+       Patch from Noah Levitt
+
+       * tests/Makefile.am:
+       * tests/runtests.sh.in:
+       * tests/testboundaries_ucd.c (count_attrs), (parse_line),
+       (attrs_equal), (make_test_string), (do_test), (main):
+       Add test driver for UAX#14 and UAX#29 test data from Unicode Character
+       Databse.  Just drop the following four files in pango/tests for it to
+       use them:
+
+               GraphemeBreakTest.txt
+               LineBreakTest.txt
+               SentenceBreakTest.txt
+               WordBreakTest.txt
+
+2008-04-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       Part of Bug 97545 – Make pango_default_break follow Unicode TR #29
+
+       * pango/break.c (pango_default_break): Make Grapheme Boundary code
+       exactly follow UAX#29 of Unicode 5.1.0
+
+2008-04-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_default_break): Update GraphemeBoundary to
+       Unicode 5.1.0.  Pretty close now.  Passes the TR14 test.
+
+2008-04-24  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/break.c (pango_default_break): Allow line break at the end of
+       string.  UAX#14 rule LB3 says "Always break at the end of text."
+       With this test, Pango passes the LineBreakTest.txt, sans the bug in
+       the test file that I've already reported to unicoRe.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.21.0 ===
+
+       * configure.in: Version 1.21.0
+
+       * NEWS: Updated.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * ChangeLog.pre-1-20:
+       * Makefile.am:
+       Wrap ChangeLog.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-docs.sgml:
+       * docs/pango-sections.txt:
+       * docs/tmpl/bidi.sgml:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/vertical.sgml:
+       * pango/pango-bidi-type.c (pango_log2vis_get_embedding_levels),
+       (pango_unichar_direction), (pango_get_mirror_char):
+       * pango/pango-bidi-type.h:
+       * pango/pango-types.h:
+       * pango/pango-utils.c:
+       Group bidi stuff together.  Add a section in the docs for them.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 515432 – Add function to get bidirectional character type of a
+       unicode character
+       Patch from Jürg Billeter
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/layout.sgml:
+       * docs/tmpl/main.sgml:
+       * docs/tmpl/pangocairo.sgml:
+       * pango/Makefile.am:
+       * pango/pango-bidi-type.c (pango_bidi_type_for_unichar):
+       * pango/pango-bidi-type.h:
+       * pango/pango-types.h:
+       * pango/pango-utils.c (pango_log2vis_get_embedding_levels),
+       (pango_unichar_direction):
+       * pango/pango.def:
+       * pango/pango.h:
+       New public API:
+
+               enum PangoBidiType;
+               pango_bidi_type_get_type()
+               pango_bidi_type_for_unichar()
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 517119 – Add pango_cairo_create_context()
+
+       * docs/pango-sections.txt:
+       * pango/pangocairo-context.c (pango_cairo_create_context),
+       (pango_cairo_create_layout):
+       * pango/pangocairo.def:
+       * pango/pangocairo.h:
+       New public API:
+
+               pango_cairo_create_context()
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 404416 – pango_layout_get_baseline or something
+
+       * docs/pango-sections.txt:
+       * pango/pango-layout.c (pango_layout_get_baseline):
+       * pango/pango-layout.h:
+       * pango/pango.def:
+       New public API:
+
+               pango_layout_get_baseline()
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 474706 – cairo hexbox looks ugly
+
+       * pango/pangocairo-font.c
+       (_pango_cairo_font_private_get_hex_box_info):
+       Tweak minifont size a bit.  Also propagate font options correctly.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 490669 – add some <span> attribute aliases
+
+       * docs/pango_markup.sgml:
+       * pango/pango-markup.c (span_parse_func):
+       Add fgcolor, bgcolor, font, font_size, font_weight, font_variant, ...
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 501334 – Make pango_cairo_[show_]*[_path]() functions preserve
+       current point
+
+       * pango/pangocairo-render.c (_pango_cairo_renderer_draw_box_glyph),
+       (_pango_cairo_renderer_draw_unknown_glyph), (acquire_renderer),
+       (release_renderer), (save_current_point), (restore_current_point),
+       (_pango_cairo_do_glyph_string), (_pango_cairo_do_layout_line),
+       (_pango_cairo_do_layout):
+       Preserve current point around pango_cairo_* functions().
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in:
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifont.c
+       (pango_cairo_atsui_font_create_font_face):
+       * pango/pangocairo-fontmap.c
+       (pango_cairo_font_map_new_for_font_type):
+       Require cairo >= 1.6.4.  Remove compat cruft that were added to
+       support older cairo that had cairo-atsui instead of cairo-quartz-font.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 514617 – Add pango_cairo_font_map_set_default()
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/pangocairo.sgml:
+       * pango/pangocairo-fontmap.c (pango_cairo_font_map_get_default),
+       (pango_cairo_font_map_set_default):
+       * pango/pangocairo.def:
+       * pango/pangocairo.h:
+       New public API:
+
+               pango_cairo_font_map_set_default()
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * docs/pango-docs.sgml: Add index of new API in 1.22.
+
+2008-04-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 511183 – Add pango_attr_type_get_name()
+
+       * docs/pango-sections.txt:
+       * docs/tmpl/text-attributes.sgml:
+       * pango/pango-attributes.c (pango_attr_type_register),
+       (pango_attr_type_get_name):
+       * pango/pango-attributes.h:
+       * pango/pango.def:
+       New public API:
+       
+               pango_attr_type_get_name()
+
+2008-04-20  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-ot-info.c (pango_ot_info_get_gdef),
+       (pango_ot_info_get_gsub), (pango_ot_info_get_gpos):
+       Write out HarfBuzz errors as hex.
+
+2008-04-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.20.2 ===
+
+       * configure.in: Version 1.20.2
+
+       * NEWS: Updated.
+
+2008-04-09  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifont.c:
+       Really fix build without cairo-atsui.
+
+2008-04-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * === Released 1.20.1 ===
+
+       * configure.in: Version 1.20.1
+
+       * NEWS: Updated.
+
+2008-04-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 491553 – Update to Unicode 5.1.0
+
+       * docs/tmpl/scripts.sgml:
+       * pango/mini-fribidi/README:
+       * pango/mini-fribidi/fribidi_tab_char_type_2.i:
+       * pango/pango-script-lang-table.h:
+       * pango/pango-script.h:
+       Update to Unicode Character Databse 5.1.0.  This adds new entries to
+       the PangoScript enum.  Requires glib >= 2.16.3 for the update Unicode
+       data there, but not bumping the requirement in a stable point release.
+
+2008-04-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in:
+       * pango/pangocairo-atsui.h:
+       * pango/pangocairo-atsuifont.c:
+       Try making our OS X stuff compile with latest cairo 1.5.x snapshots
+       that renamed cairo-atsui to cairo-quartz-font.
+
+2008-04-08  Behdad Esfahbod  <behdad@gnome.org>
+
+       * configure.in: Fix check for Carbon/Carbon.h availability.  Oops!
+
+2008-03-21  Behdad Esfahbod  <behdad@gnome.org>
+
+       * pango/pango-layout.c (get_x_offset): When doing ALIGN_CENTER,
+       round line offset to whole pixel if hinting.
+
+2008-03-11  Richard Hult  <richard@imendio.com>
+
+       * pango/pangocairo-atsuifont.c (_pango_cairo_atsui_font_new):
+       Adapt the shear matrix for synthesized italic to work with cairo
+       1.5.13+, where the quartz surface has been fixed for transformed
+       text.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-4 b/ChangeLog.pre-1-4
new file mode 100755 (executable)
index 0000000..6a91b52
--- /dev/null
@@ -0,0 +1,1762 @@
+Tue Mar 16 11:24:46 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.4.0 ===
+
+       * configure.in: Version 1.4.0, interface ago 0. Require
+       glib-2.4.0.
+
+       * NEWS: Updates.
+
+       * README: Some updates; include details about the FreeType
+       license of the OpenType code.
+
+Thu Mar 11 17:28:06 2004  Manish Singh  <yosh@gimp.org>
+
+       * pango/pangofc-fontmap.c: Convert PangoStretch to and from FC_WIDTH,
+       so we can actually get fontconfig to match on condensed and expanded
+       versions of fonts, and have the info survive a pango_fc_face_describe
+       roundtrip. Fixes #131561.
+
+       * pango/pangox-fontmap.c: Remove unused function
+       free_coverages_foreach.
+
+Tue Mar  9 09:21:07 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.3.6 ===
+
+       * configure.in: version 1.3.6, interface age 1
+
+       * NEWS: Updates.
+
+2004-03-05  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango.def
+       * pango/pangoft2.def: Add missing entries. (#136339, J. Ali Harlow)
+
+Fri Mar  5 14:56:57 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c (kndaCharClasses): Change
+       U+0CC3/U+0CC4/U+0CD5 to _lm (length mark) so that they get ordered
+       after the below base forms. (#118108, Kailash C. Chowksey)
+
+2004-03-04  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/module-defs-win32.c.win32: Clarify comment.
+
+2004-03-03  Hans Breuer  <hans@breuer.org>
+
+       * pango/module-defs-win32.c.win32 : if PANGO_MODULE_PREFIX is 
+       defined include the basic backend shaper (should have been 
+       commited at 2003-12-12, too)
+
+       * pango/makefile.msc : generate correct type for PangoFontMask
+       (bug #135892, John Ehresman)
+       * pango/opentype/makefile.msc : updated
+
+       * pango/pango.def pango/pangoft2.def : more updatd externals
+
+Wed Mar  3 16:00:10 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Strip out the "export-dynamic" libtool
+       option from library link lines. (#124687, James Henstridge)
+
+2004-03-03  Tor Lillqvist  <tml@iki.fi>
+
+       * NEWS: Correct spelling of my name.
+
+       * pango/Makefile.am (libpango_1_0_la_DEPENDENCIES): Add
+       pango-win32res.lo. (135581, J. Ali Harlow)
+
+       * configure.in: Move check for native Win32 (mingw) a bit
+       earlier. If Win32, disable static builds (like GLib does).
+
+       * pango/pango.def
+       * pango/pangoft2.def: Add some missing symbols. (#135945, Cedric
+       Gustin; #135980, J. Ali Harlow)
+
+       * pango/pangowin32-fontmap.c (pango_win32_family_get_name): Can be
+       static.
+
+Mon Mar  1 19:24:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+        * === Released 1.3.5 ===
+
+       * configure.in: Version 1.3.5 (1.3.4 skipped), interface age 0.
+       
+       * NEWS: Update
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape): 
+       Fix a crash from left-over handling of clusters
+       for non-spacing marks.
+
+Mon Mar  1 20:32:06 2004  Tim Janik  <timj@gtk.org>
+
+        * autogen.sh:
+        - exit with $? instead of 1 in case of failure
+        - exit with $? if ./configure failed
+          (that's so autogen.sh && make lines work)
+        - removed --enable-gtk-doc option
+        - added $AUTOGEN_CONFIGURE_ARGS
+
+Fri Feb 27 11:23:21 2004  Owen Taylor  <otaylor@redhat.com>
+       Patch from Dov Grobgeld to add auto-direction to PangoLayout
+       (more of #70451)
+       * examples/pangofttopgm.c: Add --no-auto-dir argument.
+       * pango-layout.[ch]: Add pango_layout_set_auto_dir()
+       defaulting to TRUE; resolve paragraph direction within
+       a layout by propagating base direction downwards
+       from paragraph to paragraph.
+       * pango-context.[ch]: Add pango_itemize_with_base_dir()
+       which overrides the base direction from the PangoContext.
+Mon Mar  1 10:01:58 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/tmpl/text-attributes.sgml: Document %PANGO_UNDERLINE_ERROR.
+
+       * pango/pangofc-fontmap.c: Pango*Fc*FontmapPrivate. Make compile.
+
+2004-03-01  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/pango-attributes.h: Removed trailing commas from the
+       enums - which causes warnings that break warnings-as-errors builds.
+
+Mon Mar  1 09:43:38 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize):
+       Remove the INSTANCE_PRIVATE_DATA_WORKS #ifdefs,
+       since it does work now.
+
+Sun Feb 29 15:54:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangowin32.c pango/pangox.c pango/pangoft2.c:
+       Fix up off-by-one for right bound when drawing
+       PANGO_UNDERLINE_ERROR.
+
+Sun Feb 29 15:31:09 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Patch from Nicolas Setton, #114237
+
+       * pango/pango-attributes.h pango/pango-markup.c: Add a 
+       new underline type, PANGO_UNDERLINE_ERROR.
+
+       * pango/pangowin32.c pango/pangox.c pango/pangoft2.c:
+       Implement drawing of PANGO_UNDERLINE_ERROR.
+
+       * pango/pango-layout.c (pango_layout_run_get_extents):
+       Handle PANGO_UNDERLINE_ERROR.
+
+2003-02-29  Noah Levitt  <nlevitt@columbia.edu>
+
+       * docs/pango_markup.sgml:
+       * docs/tmpl/text-attributes.sgml:
+       * pango/pango-attributes.c:
+       * pango/pango-attributes.h:
+       * pango/pango-context.c:
+       * pango/pango-markup.c: New attribute to turn font fallback on or off.
+       (#105553)
+
+Sun Feb 29 10:54:55 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/arabic-ot.c (arabic): Add joining
+       classes for new Unicode-4.0 characters U+06EE, U+06EF, U+06FF.
+       (Patch by Roozbeh Pournader from #117282)
+
+Sun Feb 29 09:25:13 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Rework opentype interfaces and other changes to make GPOS
+       work for Arabic. (Most of #117282, #121060)
+
+       * pango/opentype/otlbuffer.[ch]: OTL_Buffer that
+       acts as a replacement for the separate GSUB and
+       GPOS string structures and hides many of the internal
+       details.
+
+       * pango/opentype/ftxgsub.[ch] pango/opentype/ftxgpos.[ch]:
+       Adapt to OTL_Buffer.
+
+       * pango/opentype/ftxgpos.c: Redo handling of cursive
+       chains so that it actually works.
+
+       * pango/pango-ot.h pango/opentype/pango-ot-buffer.c:
+       Pango wrapper around OTL_Buffer.
+
+       * pango/pango-ot.h pango/pango-ot-ruleset.c pango/pango-ot-buffer.c:
+       Split pango_ot_ruleset_shape() into pango_ot_ruleset_substitute(),
+       pango_ot_ruleset_position(), make them act on
+       PangoOTBuffer, add a separate pango_ot_buffer_output()
+       which does the default positioning and writes to a 
+       PangoGlyphString.
+
+       * modules/arabic/arabic-fc.c modules/indic/indic-fc.c
+       modules/indic/mprefixups.[ch]: Adapt to new OpenType
+       interfaces; add GPOS features for Arabic.
+
+       * pango/opentype/pango-ot-info.c: Don't derive class information
+       from Unicode properties for Arabic presentation forms,
+       let the shaping process derive the properties.
+
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * pango/modules/basic/basic-win32.c : use uniscribe_scripts instead of
+       uniscribe_ranges (does show only with HAVE_USP10_H, which I don't)
+       patch from J. Ali Harlow <ali@juiblex.co.uk>, fixes bug #135504
+
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * pango/pango.def : updated externals including
+       patch from J. Ali Harlow <ali@juiblex.co.uk>, fixes bug #135518
+
+       * pango/pangowin32-fontmap.c : implement list_sizes() and
+       is_monospace() members
+
+Fri Feb 27 14:26:34 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c (bengCharClasses):
+       Mark BENGALI LETTER A (U+0985) and BENGALI LETTER E (U+098F)
+       as consonants which gives better behavior when they
+       are combined with halant, though it isn't exactly right.
+       (#118299, Sayamindu Dasgupta)
+
+Fri Feb 27 11:24:50 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-fribidi/fribidi.c (pango_log2vis_get_embedding_levels):
+       Handle PANGO_DIRECTION_NEUTRAL.
+
+Fri Feb 27 09:30:10 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Add some new enum and values and utilities for supporting
+       automatically determined base direction. (#70451, based
+       on changes by Dov Grobgeld)
+       
+       * pango/pango-types.h docs/tmpl/main.sgml: Add 
+       PANGO_DIRECTION_WEAK_RTL/LTR, extend the docs for
+       PangoDirection.
+
+       * pango/pango-types.h pango/pango-utils.h: Move
+       pango_get_mirror_char() to pango-types.h.
+
+       * pango/mini-fribidi/fribidi.c (pango_log2vis_get_embedding_levels):
+       Handle new values of PangoDirection, handle 
+       PANGO_DIRECTION_TTB_LTR/RTL as aliases for PANGO_DIRECTION_RTL/LTR.
+
+       * pango/mini-fribidi/fribidi.c pango/pango-types.h: Add
+       pango_unichar_direction().
+
+       * pango/pango-utils.c pango/pango-types.h: Add
+       pango_find_base_dir()
+
+2003-02-26  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pangofc-fontmap.c: Use g_array_sort correctly.
+
+Tue Feb 24 14:29:26 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.3.3 ===
+
+       * configure.in: Version 1.3.3, interface age 3.
+
+       * NEWS: Updates
+
+2003-02-23  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pangowin32-fontmap.c: 
+       * pango/pangofc-fontmap.c:
+       * pango/pango-font.h:
+       * pango/fonts.c: New API pango_font_family_is_monospace. (#108728)
+
+2003-02-23  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/fonts.c (pango_font_face_list_sizes):
+       * pango/pangofc-fontmap.c (pango_fc_face_list_sizes): Handle
+       NULL for sizes and n_sizes.
+
+2003-02-22  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pangofc-fontmap.c (pango_fc_face_list_sizes): Handle
+       possibility of FcPatternGetDouble(FC_DPI) failing.
+
+2003-02-22  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pango-font.h:
+       * pango/pangofc-fontmap.c:
+       * pango/pangowin32-fontmap.c: 
+       * pango/fonts.c (pango_font_face_list_sizes): New API for
+       getting available sizes for a bitmap font face. (#99235)
+
+Sat Feb 21 11:31:16 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_justify): Add
+       a docs note about non-implementedness. (#64538)
+
+Sat Feb 21 09:49:23 2004  Owen Taylor  <otaylor@redhat.com>
+       
+       * pango/opentype/pango-ot-ruleset.c (pango_ot_ruleset_shape): 
+       Sign convention for y offsets is opposite between 
+       PangoGlyphString and FT code. (#132591)
+
+2003-02-19  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pangofc-font.c (pango_fc_font_get_metrics):
+       * pango/pangowin32.c (pango_win32_font_get_metrics): Make
+       approximate_digit_width the width of the widest digit, rather than the
+       average.
+
+Thu Feb 19 10:44:17 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (compute_derived_language):
+       Use 'xx' as the language for cases where we 
+       the language tag mismatches the script but we don't
+       have a good language tag for the script.
+       (#123581)
+
+Tue Feb 17 23:15:13 2004  Laszlo Peter  <laca@sun.com>
+
+       * pango-uninstalled.pc.in: use @PANGO_API_VERSION@
+       * pangoft2-uninstalled.pc.in: use @PANGO_API_VERSION@
+       * pangox-uninstalled.pc.in: use @PANGO_API_VERSION@
+       * pangoxft-uninstalled.pc.in: use @PANGO_API_VERSION@
+
+Mon Jan 26 10:30:06 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules/thai/thai-shaper.c: Reapply the patch
+       from #124175 that somehow got reverted.
+       
+Fri Feb 13 10:54:18 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Memory leak fixes from Masatake YAMATO, #130652
+
+       * pango/opentype/ftxgdef.c (TT_Done_GDEF_Table):
+       Free the gdef table as well as the contained data.
+
+       * pango/opentype/ftxgdef.c (TT_GDEF_Build_ClassDefinition): 
+       Set gcd->loaded, so that the contents get freed later.
+
+Fri Feb 13 10:19:16 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Skip the xslt and stylesheet checks
+       unless --enable-man is specified. (#134133, 
+       Julio M. Merino Vidal)
+
+Tue Feb 10 19:03:44 2004  Manish Singh  <yosh@gimp.org>
+
+       * pango/pango-context.c (itemize_state_init): initialize font_desc
+       to NULL.
+
+Tue Feb 10 14:33:54 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c: Handle 'tag' being NULL
+       in a bunch of places. (#122844, Noah Levitt)
+
+Tue Feb 10 14:28:41 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (update_attr_iterator): Fix
+       a leak of a font descriptor. (#131909, Kjartan Maraas, 
+       Christian Persch)
+
+Tue Feb 10 14:13:04 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-tabs.c (pango_tab_array_resize): Fix
+       the amount of memory being allocated. (#132994,
+       Torsten Schoenfeld)
+
+Mon Feb  9 09:52:24 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_iterator_next): Fix
+       infinite loop introduced with last change. (#133749,
+       reported by Mariano Suárez-Alvarez)
+
+Thu Feb  5 16:30:46 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Fix problem with empty markup tags (#128102, Christian Persch)
+
+       * pango/pango-context.c (itemize_state_process_run): Assert
+       that the run is non-empty.
+
+       * pango/pango-attributes.c (pango_attr_list_change): 
+       Just ignore empty attributes.
+
+       * pango/pango-attributes.c (pango_attr_iterator_next): 
+       Skip empty attributes.
+
+Thu Feb  5 15:28:44 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_font_description):
+       Accept NULL for desc as documented. (#133001, Torsten Schoenfeld)
+
+Thu Feb  5 15:21:49 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_check_lines): 
+       Redo the last commit once again.
+
+Thu Feb  5 15:16:04 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_check_lines): Fix 
+       stupid cut-and-pasto from last commit.
+
+Thu Feb  5 15:09:58 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_check_lines):
+       Set is_paragraph_start here too. (#131356, 
+       Morten Welinder)
+
+Wed Jan 28 17:47:52 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Require GLib-2.3.1. (#132695,
+       Rodney Dawes.)
+
+Mon Jan 26 14:20:34 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/pango-ot-info.c (is_truetype): Support
+       CFF fonts as well. (#131202, Manjunath Sripadarao)
+
+Mon Jan 26 10:30:06 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules/thai/thai-shaper.c: Fix up glyph addition
+       code so that it works properly with the typical
+       TrueType fonts that have 0 width for combining
+       characters. (#124175, Theppitak Karoonboonyanan)
+
+Fri Jan 23 16:05:31 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-markup.c (open_tag_free): Fix some
+       more problems with NULL attribute lists.
+
+Thu Jan 22 12:36:10 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.3.2 ===
+
+       * configure.in: Version 1.3.2, interface age 2.
+
+       * NEWS: Tweak.
+
+Wed Jan 21 00:50:56 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * NEWS: Updates for 1.3.2.
+
+2004-01-06  Roozbeh Pournader  <roozbeh@sharif.edu>
+
+       * modules/arabic/arabic-ot.c: Corrected a mistake between ZWJ and
+       ZWNJ. (#130517)
+
+Fri Dec 19 22:20:18 2003  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/tmpl/layout.sgml: Document all members of PangoLayoutLine.
+
+Thu Dec 18 01:20:31 2003  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pango-attributes.c (pango_attr_size_new): Correct the 
+       documentation.  (#128431, Ross Burton)
+
+2003-12-13  Hans Breuer  <hans@breuer.org>
+
+       * pango/pango.def pangoft2.def : moved pango_fc_*
+       to the latter where they live on *nix too.
+
+       * pango/makefile.msc : make it build again (including
+       the Ft2 backend)
+
+       * pango/module-defs-fc.c.win32 : if PANGO_MODULE_PREFIX is defined
+       include the basic backend shaper
+
+       * pango/pangowin32.c (pango_win32_render_layout) : 
+       initialize iter before first usage to avoid immediate crashing
+
+       * pango/opentype/makefile.msc
+            pango/modules/makefile.msc : finally build with mscv, too.
+       [completely untested cause I'm not able to type, write or read
+       any of these languages]
+
+       * modules/modules.def : follow module function renaming/changes
+
+       * modules/basic/basic-win32.c : register the right engine, i.e.
+       make it compile
+
+2003-12-08  Tor Lillqvist  <tml@iki.fi>
+
+       * modules/basic/basic-win32.c (convert_log_clusters_to_byte_offsets):
+       Simplify.
+
+       (itemize_shape_and_place): Fix problem with RTL scripts: If
+       ScriptItemize() returns several items, must handle them in reverse
+       order. (#128812, reported by Shoshannah Forbes)
+
+Mon Dec  8 12:57:03 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.3.1 ===
+
+       * NEWS: Further updates for 1.3.1
+
+       * pango/pango-script.c (pango_script_iter_next): Put in
+       a hopefully-correct fix for a problem with invalid values of
+       start_sp causing out-of-bounds writes. (#125928,
+       Morten Welinder)
+
+2003-12-07  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/Makefile.am: Fix problems when building outside srcdir for
+       Win32. (#122167, Jeff Bonggren)
+
+2003-12-05  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-fontmap.c: initialize the fontmap's resolution 
+       to some sane default values. Fixes bug #123602.
+
+2003-12-04  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pango-context.c:
+       * pango/pango-layout.c: Honor U+2028 LINE SEPARATOR. (#85745)
+
+2003-11-25  Noah Levitt  <nlevitt@columbia.edu>
+
+       * examples/pangoft2topgm.c: Add --indent=n option.
+
+       * pango/pango-layout.[ch]: Indent the first line of every paragraph,
+       not just the first line in the layout. (#66626)
+
+2003-11-25  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango-utils.c (lang_texts[]): Italian is "it"; "iw" is deprecated
+       for Hebrew, should be "he".
+
+2003-11-20  Manish Singh  <yosh@gimp.org>
+
+       * pango/pangoft2-private.h: #include <fontconfig/fcfreetype.h> for
+       FcFreeTypeCharIndex().
+
+2003-11-20  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-fontmap.c: reverted the patch for bug #123602
+       since I only applied it accidentally. I still believe the patch
+       should go in though.
+
+       * pango/pangoft2.c: really applied the fix for #101856 as
+       described below.
+
+2003-11-20  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pango-utils.c:
+       * pango/mini-fribidi/Makefile.am:
+       * pango/mini-fribidi/README:
+       * pango/mini-fribidi/fribidi.c:
+       * pango/mini-fribidi/fribidi.patch:
+       * pango/mini-fribidi/fribidi_char_type.c:
+       * pango/mini-fribidi/fribidi_tab_char_type_2.i:
+       * pango/mini-fribidi/fribidi_types.c:
+       * pango/mini-fribidi/fribidi_types.h:
+       * pango/mini-fribidi/fribidi_types.i: Update to latest fribidi.
+       (#68435)
+
+2003-11-18  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/pangxft-font.c (pango_xft_real_render): Draw 6-digit hex boxes
+       for > U+FFFF. (#101081)
+
+2003-11-18  Morten Welinder  <terra@gnome.org>
+
+       * pango/pango-attributes.c (pango_attr_iterator_get_font): Fix
+       _SCALE semantics.  Fixes bug 121543; patch from Owen.
+
+2003-11-18  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c: removed the set_unicode_charmap() call.  Made
+       pango_ft2_font_real_get_glyph() use FcFreeTypeCharIndex() rather
+       than FT_Get_Char_Index(). Made pango_ft2_font_real_has_char() use
+       FcCharSetHasChar().  This allows to use PangoFT2 with all font
+       encodings supported by fontconfig and fixes bug #101856.
+
+Wed Nov 12 16:11:47 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Version 1.3.1, interface age 1.
+
+       * NEWS: Updates for 1.3.1
+
+2003-11-12  Padraig O'Briain  <padraig.obriain@sun.com>
+
+       * pango/modules.c: Make parent_class variable static.
+
+Sat Nov  1 09:32:15 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-ot.h pango/pangofc-font.h modules/indic/indic-ot.h
+       pango/pangoft2.c pango/opentype/pango-ot-info.c
+       pango/opentype/pango-ot-ruleset.c pango/opentype/ottest.c
+        pango/opentype/ftxopen.[ch] pango/opentype/ftxgdef.c
+       pango/opentype/ftxgsub.c pango/opentype/ftxgpos.c: 
+       Switch over to recommended Freetype system of 
+       include ft2build.h then #include FT_FREETYPE_H.
+       Fixes ftmodule.h problem with current Freetype CVS.
+       (#125548)
+
+Fri Oct 31 13:01:25 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (libpangox_1_0_la_LDFLAGS): Fix some
+       leftover references to INCLUDE_XFT_MODULES, 
+       INCLUDED_FC_MODULES. (#125588, Martin Kretzschmar)
+
+       * pango/pangox-fontmap.c (pango_x_face_get_coverage): 
+       Fix some code that was never quite finished.
+
+Fri Oct 31 12:32:38 2003  Owen Taylor  <otaylor@redhat.com>
+       Fix one problem with iteration by chars (Part of
+       #89541, Mariano Suárez-Alvarez)
+       * Pango/pango-layout.c (cluster_end_index): Fix to 
+       be item relative, like iter->cluster_index.
+       * pango/pango-layout.c (pango_layout_iter_next_char): 
+       Adapt.
+Fri Oct 24 00:09:17 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.3.0 ===
+
+       * pango/module-defs-fc.c.win32 pango/module-defs-fc.c.win32: 
+       Add the -fc version, remove the -ft2 version. Not sure this
+       file is actually needed any more.
+
+       * pango/Makefile.am (libpango_1_0_la_SOURCES): Add 
+       pango-impl-utils.h, pango-script-lang-table.h.
+
+       * docs/Makefile.am (dist-hook-local): Distribute generated
+       manpage.
+
+       * tests/Makefile.am (CLEANFILES): Add pango.modules
+
+Wed Oct 15 17:18:37 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (itemize_state_init): Initialize
+       state->lang. (#124047, Morten Welinder)
+
+Tue Oct 14 19:00:17 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hebrew/hebrew-fc.c (hebrew_engine_shape): 
+       Remove an unused variable. (#122680, Kjartan Maraas)
+
+Wed Oct  1 12:40:38 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-script.c (pango_script_get_sample_language): 
+       Fix a c99-ism, include stdlib.h for bsearch. 
+       (#123616, Kaushal Kumar)
+
+2003-09-30  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pango-engine.h (struct _PangoEngineShapeClass): Replace
+       get_coverage by covers in the doc comment.
+
+       * pango/pango-script.c (pango_language_includes_script) 
+       (pango_script_get_sample_language): 
+       * pango/pango-fontset.c (pango_fontset_foreach): 
+       * pango/pango-fontmap.c (pango_font_map_get_shape_engine_type): 
+       * pango/modules.c (pango_map_get_engines):
+       * pango/pango-fontset.h (PangoFontsetForEachFunc): Fix typos and 
+       add "Since: 1.4" tags. 
+
+       * docs/pango-sections.txt: Add PangoFontsetForeachFunc,
+       pango_fontset_foreach(), pango_font_map_get_shape_engine_type(),
+       PangoScriptForLang, pango_script_get_sample_language() and
+       pango_language_includes_script(), remove pango_map_get_entry().
+
+Wed Sep 24 18:29:34 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hebrew/hebrew-shaper.c (hebrew_shaper_get_next_cluster):
+       Handle non-hebrew characters.
+
+2003-09-25  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/break.c (pango_default_break): Only reset the word 
+       type to WordNone at a word end if it is not also a word 
+       start. Otherwise both 't' and 'e' are classified as word 
+       start in '123test'.  (#122754, Hidetoshi Tajima)
+       
+Tue Sep 23 19:43:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (itemize_state_add_character): Don't
+       break runs when we hit neutral characters.
+
+Tue Sep 23 18:03:57 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-engines.[ch] pango/pango-engines-private.h: 
+       Modules now declare a list of scripts that they cover instead of a
+       list of code point ranges. Also, there is now a ->covers() virtual
+       function that allows a module to decide live whether the font
+       covers a particular codepoint; remove old get_coverage() method.
+
+       * pango/pango-fontset.[ch]: Add a foreach() function to 
+       iterate over all the fonts in a fontset (with a true
+       return stopping iteration).
+
+       * pango/pango-context.c: Complete rewrite using script-run
+       information to improve language tags. Switch to an approach
+       where we handle one run at a time rather than computing
+       information for each character individually then later
+       breaking the result into runs.
+       
+       * pango/pango-fontset.[ch]: Switch over to using
+       pango-impl-utils.h.
+
+       * modules/basic/basic-x.c pango/pangox-fontmap.c: Adapt to
+       the change from get_coverage => covers.
+
+       * pango/pango-modules.h pango/modules.c: Switch PangoMap
+       over to being based on script rather than being based
+       on codepoint. Remove the no longer needed pango_map_get_entry().
+
+       * pango/modules.c: Handle new script-based modules.
+
+       * pango/pango-fc-fontmap.c pango/pango-win32-fontmap.c 
+       pango/pang-fontmap.[ch]: Add a shape_engine_type field
+       to PangoFontmapClass, pango_font_map_get_shape_engine_type();
+       this allows generic code to find a shaper for a particular
+       fontmap.
+
+       * pango/pango-script.[ch]: Add pango_script_get_sample_language(),
+       pango_language_includes_script(); functions for determining
+       the relationship between scripts and language.
+
+       * tools/gen-script-for-lang.c: Modify to spit out a
+       useful table.
+
+       * pango/pango-script-lang-table.h: Version of table
+       generated from current fontconfig data.
+
+       * pango/pangox.c: Remove complicated code to compute
+       coverages; no longer useful now that we just have
+       the basic shaper as a legacy thing.
+
+       * modules/*/*.c: Adapt to identifying shape engines
+       by language range.
+
+       * modules/thai/thai-fc.c modules/thai/thai-shaper.[ch]:
+       Remove now unused "has_glyph" function and XTIS support.
+
+       * modules/thai/thai-fc.c: Handle non-Thai characters
+       as well, since the Thai module now gets spaces,
+       punctuation, and so forth.
+
+Mon Sep 15 17:16:59 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/fterrcompat.h: Fix gcc-3.3 versions of 
+       macros to have the right return value.
+
+Mon Sep 15 17:07:58 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am: Add property dependencies on mini-fribidi
+       and opentype convenience libraries.
+
+Tue Sep  9 12:21:02 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_description_from_pattern): 
+       Fix a g_assert() with a side-effect. (Maybe #121742?)
+
+Mon Sep 15 15:48:25 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am examples/argcontext.c examples/argcontext.h:
+       Borrow argument parsing code from GDK.
+
+       * examples/pangoft2topgm.c: Use argcontext.[ch]. Add options
+       --header to display options in a header in the image, --text
+       to pass the text on the command line, --width to set a 
+       wrap width. Add autoconversion to non-PGM output formats
+       via 'convert' for  --output="foo.png" etc.
+
+2003-09-12  Matthias Clasen  <maclas@gmx.de>
+
+       * pango/pango-context.c (pango_context_set_font_map) 
+       (pango_context_new): Document these funcions as backends-only, and 
+       explain how to obtain initialized contexts.  (#121881, Martin Pool)
+       
+Tue Sep  9 12:17:07 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * tools/Makefile.am (EXTRA_DIST): Remove reference
+       to now-gone make-table.sh (#121393, Josh Beam)
+
+2003-09-02  Noah Levitt  <nlevitt@columbia.edu>
+
+       * tests/.cvsignore:
+       * tests/Makefile.am:
+       * tests/pangorc: Fix tests so that can be run before "make install"
+       has been. (#119831)
+
+Mon Aug 25 10:17:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Lookup_ChainContextSubst3)
+       * pango/opentype/ftxgpos.c (Lookup_ChainContextPos3):
+       Fix problems where the coverage wasn't being checked
+       for the first input glyph. (#118639, Kailash C. Chowksey)
+
+Mon Aug 25 10:11:59 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (EXTRA_DIST): add testfonts.c to
+       EXTRA_DIST until bug #104151 is sorted out.
+
+Sun Aug 24 12:35:25 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/querymodules.c: Remove a stray ; (#120528,
+       Mehran Mehr)
+
+Fri Aug 22 18:09:52 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/fterrcompat.h: Add some macro definitions
+       for gcc-3.3 that suppress the bogus strict-aliasing 
+       warnings.
+
+       * pango/pango-utils.c (read_config_file): Use 
+       g_hash_table_new_full() to simplify code and fix
+       gcc-3.3 warnings.
+
+       * pango/pangox-fontmap.c (pango_x_real_get_coverage_win)
+       * pango/querymodules.c (query_module): Suppress gcc-3.3
+       warnings.
+
+       * pango/modules.c (pango_find_map): Fix warning from
+       missing declaration of pango_module_get_type().
+
+       * pango/pango-context.c/pango-engine.c: Fix name confusion
+       for pango_get_fallback_shaper().
+
+Fri Aug 22 17:29:42 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/Makefile.am (pango.modules): Add a dependency
+       on pango-querymodules... Really needs to depend on the
+       modules too, but this at least will reduce the chances
+       of it not getting rebuild when necessary.
+
+Thu Aug 21 00:29:46 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * pango/pangofc-fontmap.c (pango_fc_face_get_type): Remove
+       ABSTRACT from g_type_register_static() call
+
+2003-08-20  Noah Levitt  <nlevitt@columbia.edu>
+
+       * configure.in: Bump version to 1.3.0.
+
+Fri Aug 15 16:34:14 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: get the cflags for gmodule-2.0 as
+       well as gthread-2.0. (#119953, Benedikt Spranger)
+
+2003-08-14  Noah Levitt  <nlevitt@columbia.edu>
+
+       * docs/tmpl/main.sgml:
+       * pango/break.c:
+       * pango/pango-break.h: Add backspace_deletes_character to
+        PangoLogAttr. (#114483)
+
+Thu Aug 14 10:41:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/modules.c (init_modules): Call g_type_init()
+       (#119830, Noah Levitt)
+
+2003-08-11  Matthias Clasen  <maclas@gmx.de>
+
+       * acinclude.m4: Copy newer versions of JH_CHECK_XML_CATALOG and
+       JH_PATH_XML_CATALOG from gtk-doc to enable configuring without
+       xmlcatalog in PATH.  (#119115) 
+
+Fri Aug  8 12:59:42 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_default_substitute):
+       Move DPI substitution before FcDefaultSubstitute so
+       it actually works.
+
+Fri Aug  8 11:45:15 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/pangoft2topgm.c: Replace --family/--scale
+       options with a single --font
+
+Fri Aug  8 11:33:24 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/pangoft2topgm.c: Add option to run 'display'
+       on the output as well as/instead of specifying output
+       file name.
+
+Fri Aug  8 10:33:31 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2.h: Deprecate pango_ft2_get_context(),
+       pango_ft2_font_map_for_display(), pango_ft2_shutdown_display();
+       the explicit 
+
+       * pango/pangoft2-fontmap.c (pango_ft2_shutdown_display):
+       Add docs about deprecations.
+
+       * examples/Makefile.am (INCLUDES): Add -DPANGO_DISABLE_DEPRECATED
+
+       * examples/pangoft2topgm.c: Fix deprecated usages; add
+       --dpi and --markup options. Improve error handling.
+
+Fri Aug  8 10:03:03 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/pangoft2topgm.c: Get rid of a bunch of 
+       leftovers from the conversion from viewer; add
+       --waterfall to create a waterfall output at different
+       sizes, and --margin to set the margin.
+
+2003-08-05  Tor Lillqvist  <tml@iki.fi>
+
+       * modules/basic/basic-win32.c (text_is_simple): New function. Uses
+       the Uniscribe ScriptIsSimple() function to check if Uniscribe
+       shaping is needed for a piece of text.
+
+       (basic_engine_shape): Use it, to avoid calling Uniscribe to shape
+       non-complex text. Produces dramatic speedup according to tests by
+       Hans Breuer.
+
+       (init_uniscribe): No need for the PANGO_WIN32_NO_UNISCRIBE
+       environment variable any longer.
+
+Mon Aug  4 01:12:35 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * tools/gen-script-for-lang.c (get_script_name): Fix C99 variable
+       declaration.
+
+Sun Aug  3 18:37:46 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.c (get_face_metrics): Fix sign 
+       of metrics->descent.
+
+       * pango/pango-engine-private.h: fix include (Noah Levitt)
+
+Sat Aug  2 23:19:16 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-engine.[ch] modules/*/*-{fc,win32,x}.c
+       pango/modules.c pango/break.c pango/pango-context.c
+       pango/pango-layout.c pango/pango-modules.h 
+       pango/querymodules.c pango/shape.c: Make 
+       PangoEngine{,Lang,Shape} GObjects, and use a
+       GTypeModule-based module-loading system closely based
+       on the one used for GtkIMContext and GtkThemeEngine.
+
+       * pango/pango-impl-utils.h: OK, I'm tired of typing
+       in get_type() functions.
+
+       * pango/pango-script.[ch] pango/pango-script-table.h
+       tests/testscript.c tools/gen-script-table.pl: Add port
+       of script-range code from ICU in preparation for future
+       use. (#91542)
+
+       * tools/gen-script-for-lang.c: Utility program to determine
+       the script for each fontconfig .orth file.
+
+       * docs/tmpl/{scripts.sgml,pango-engine-lang.sgml,
+       pango-engine-shape.sgml} docs/pango-sections.txt docs/pango-docs.sgml:
+       Redo to go along with the above changes.
+
+       * configure.in: chmod +x tests/runtests.sh
+
+2003-08-03  Noah Levitt  <nlevitt@columbia.edu>
+
+       * pango/Makefile.am (libpangoxft_1_0_la_DEPENDENCIES): Really make
+       pangoxft depend on pangoft2. (#119024)
+
+Sat Aug  2 14:33:28 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am (libpangoxft_1_0_la_LIBADD): Make
+       pangoxft depend on pangoft2.
+
+       * pango/pangofc-fontmap.[ch]: Make pangofc-fontmap.cI
+       into a real base class.
+
+       * pango/pangofc-font.[ch]: Move some of the pangoxft/
+       pangoft2 implementation here.
+
+       * pango/pangoft2.c pango/pangoft2-fontmap.c
+       pango/pangoft2-private.h pango/pangoxft-font.c
+       pango/pangoxft2-fontmap.c pango/pangoxft-private.h: Adapt
+       to the new scheme
+
+       * modules/*/Makefile.am Modules/*/*/*-fc.c: Don't build
+       separate FT2 and Xft shapers, just build one Fc shaper.
+
+       * docs/pango-sections.txt docs/pango-docs.sgml
+       docs/tmpl/pangofc-font{,map}.sgml: Basic docs for
+       the new stuff.
+
+       * configure.in: Up pango_module_version to 1.4.0.
+
+Sat Aug  2 14:18:20 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/Makefile.am (EXTRA_DIST): Remove some
+       leftovers.
+
+Sat Aug  2 14:10:31 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/Makefile.am pango/pango-intset.[ch] pango/pango-indic.[ch]: 
+       Remove.
+       
+       * pango/pangox.c (pango_x_apply_ligatures): Make a noop, 
+       remove associated code.
+
+       * pango/pangox-fontmap.c pango/pangox.[ch]: Deprecate everything.
+
+Sat Aug  2 13:17:45 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in
+       modules/arabic/{Makefile.am arconv.[ch],langboxfont.[ch],
+       mulefont.[ch],naqshfont.[ch],arabic-x.c}
+       modules/hangul/{Makefile.am,hangul-x.c,tables-johabfont.i,
+       tables-ksc5601.i}
+       modules/hebrew/{Makefile.am,hebrew-x.c}
+       modules/indic/{Makefile.am,*-x.c}
+       modules/tamil
+       modules/thai/{Makefile.am,thai-x.c}:
+        Remove old X font shapers.
+
+Sat Aug  2 16:40:19 2003  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       Add API to kern a complete glyph string. Remove API to kern
+       individual glyph pairs.
+
+       * modules/basic/basic-fc.c (basic_engine_shape): use
+       pango_fc_font_kern_glyphs() instead of pango_fc_font_get_kerning().
+
+       * pango/pangoft2.c (pango_ft2_font_real_kern_glyphs): add this
+       function, remove pango_ft2_font_real_get_kerning().
+
+       * pango/pangoxft-font.c (pango_xft_font_real_kern_glyphs): add
+       this function, remove pango_xft_font_real_get_kerning().
+
+       * pango/pangofc-font.c (pango_fc_font_kern_glyphs): new
+       function. Remove pango_fc_font_get_kerning().
+
+       * pango/pangofc-font.h: remove pango_fc_font_get_kerning(), add
+       pango_fc_font_kern_glyphs().
+
+Tue Jul 29 09:58:13 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgdef.c (Check_Property): Rewrite
+       handling of IGNORE_SPECIAL_MARKS to be properly
+       "ignore marks of attachment type different than
+       specified. (#118456, Kailash C. Chowksey)
+
+Sat Jul 26 09:41:22 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Lookup_LigatureSubst):
+       Revert back out the FreeType patch preventing
+       ligatures of not-originally adjacent glyphs;
+       it doesn't work for all scripts. (#118472,
+       Kailash C. Chowksey)
+
+Sat Jul 26 22:30:59 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Lookup_ChainContextSubst{1,2,3}):
+       Check for lookahead glyphs in the right place. (Patch
+       from Kailash C. Chowksey, #116860)
+
+       * pango/opentype/ftxgpos.c (Lookup_ChainContextPos{1,2,3}):
+       Same fix here.
+
+Sat Jul 26 22:12:46 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Do_String_Lookup,
+       TT_GSUB_Apply_String): Fix return value to only
+       contain TTO_Err_Not_Covered if *no* lookups
+       matched. Fix memory leaks on error in Apply_String().
+
+Sat Jul 26 22:09:44 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): 
+       Fix problem where NULL mpreFixups wasn't getting
+       returned properly.
+
+Sat Jul 26 21:06:26 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Load_EmptyOrClassDefinition):
+       Fix confusion between boolean and FT_Error return.
+       (GSUB equivalent of fix for #108358)
+
+Sat Jul 26 10:52:20 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c (Lookup_ContextPos2): 
+       * pango/opentype/ftxgsub.c (Lookup_ContextSubst2): Move
+       allocation afer initial checks, fixing memory leak.
+
+       * pango/opentype/ftxgsub.c (Lookup_ChainContextSubst2): 
+       Fix some more error return memory leaks that weren't
+       fixed in the Qt changes.
+
+Sat Jul 26 10:43:20 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c pango/opentype/ftxgpos.c:
+       Fix various memory leaks from error returns that should 
+       have been jumps to cleanup blocks. (From Qt, Lars Knoll)
+
+Sat Jul 26 10:30:24 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c: Fix additional places where 
+       TTO_Err_Not_Covered wasn't considered a successful return 
+       from Get_Class. (From Qt, Lars Knoll)
+
+Sat Jul 26 09:41:22 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Lookup_LigatureSubst):
+       If applying a ligature lookup makes adjacent two glyphs
+       that were not originally adjacent, avoid making
+       subsequent ligatures between those glyphs.
+       (From FreeType, Werner Lemberg, 2001-08-22, 2001-08-23)
+
+Sat Jul 26 09:16:57 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c pango/opentype/ftxopen.c:
+       Fix some FreeType1 variable declarations that snuck
+       in from the last commits (Christophe Fergeau, 
+       #118363)
+
+Fri Jul 25 23:38:07 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c pango/opentype/ftxgsub.c:
+       OpenType-1.4 update: backtrack information is stored with the
+       item closest to the input first (From FreeType,
+       Werner Lemberg, 2002-09-26)
+
+Fri Jul 25 23:07:06 2003  Owen Taylor  <otaylor@redhat.com>
+
+       Update of GPOS and GSUB support to OpenType 1.3 
+       (From FreeType, Werner Lemberg, 2001-08-08)
+
+       * pango/opentype/ftxopen.h: Add RIGHT_TO_LEFT LookupFlag
+
+       * pango/opentype/ftxgpos.c (GPOS_Instance): Add 'first'
+       member to mark the beginning of a chain of cursive connections.
+       
+       * pango/opentype/ftxgpos.c (Do_String_Lookup): If the
+       RIGHT_TO_FLAG flag is set, shift cursive chain up so
+       last glyph is on the baseline.
+
+Fri Jul 25 22:59:13 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftx{gpos,gsub}.h pango/opentype/ftxgdef.c: 
+       Add GPOS_LOOKUP_EXTENSION, GSUB_LOOKUP_EXTENSION, which
+       allow lookup information to be stored at 32-bit offets
+       via a double indirection. (From FreeType, Werner Lemberg,
+       2001-08-08)
+       
+Fri Jul 25 22:25:48 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Lookup_ContextSubst2,
+       Lookup_ChainContextSubst2): Fix a couple of
+       places where TTO_Err_Not_Covered wasn't considered
+       a successful return from Get_Class -- it means
+       use class index 0. (From FreeType, Werner Lemberg,
+       2001-08-06)
+
+Fri Jul 25 20:12:00 2003  Owen Taylor  <otaylor@redhat.com>
+
+       Improvements to OpenType-dumping code, based on
+       changes in Qt by Lars Knoll.
+
+       * pango/opentype/ottest.c: Tweak the debugging output,
+       suppress some warnings.
+
+       * pango/opentype/disasm.c: Add support for 
+       GSUB Context/Chain GPOS MarkBase lookups, improve 
+       output in various ways.
+
+Fri Jul 25 12:07:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+        * modules/indic/mprefixups.[ch] modules/indic/indic-ot.[ch]
+        modules/indic/indic-fc.c: Port pre-base-mantra
+        fixup code from ICU, as needed for Tamil and Malayalam.
+        (Based on patch from Sivaraj Doddannan, #111166)
+
+Fri Jul 25 11:06:14 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot.[ch]: Port of some fixes from
+       ICU.
+       
+          "Fixed problems w/ backing off the front of a syllable if 
+           all consonants have post-base form... Fix tag list for base 
+           consonant so that it doesn't have 'pstf'""
+
+       Based on patch from Taneem Ahmed (#118297)
+
+2003-07-25  Noah Levitt  <nlevitt@columbia.edu>
+
+       * docs/tmpl/engines.sgml:
+       * docs/tmpl/glyphs.sgml:
+       * docs/tmpl/main.sgml: Get rid of explicit tables detailing the
+       members of structs, use the automatic things instead. (#117857)
+
+2003-07-25  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_render_layout_line): removed
+       redundant call to pango_layout_line_get_extents() (#116822).
+
+       * pango/pangoft2.c (pango_ft2_render): fixed source bitmap offset
+       for the monochrome case; some code cleanup (#116837).
+
+Thu Jul 24 18:03:32 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/*/Makefile.am: Remove leftover FRIBIDI_LIBS
+       reference. (Pointed out by Sven Neumann)
+
+Thu Jul 24 17:06:38 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-item.c (pango_item_copy/free): Handle
+       NULL item->analysis.font. (#114576, Morten Welinder)
+
+Thu Jul 24 17:04:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/pango-ot-ruleset.c (pango_ot_ruleset_shape): 
+       Fix uses of g_assert() around statements with side effects.
+       (#115498, patch from David Cuthbert)
+
+Thu Jul 24 16:40:12 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in tests/runtests.sh.in: Generate
+       runtest.sh so we can use ECHO_C, ECHO_N, SHELL
+       (#114944)
+
+Thu Jul 24 15:55:31 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Clean up checks for usp10.h
+
+       * configure.in: Remove configure option for XftConfig
+       location.
+
+       * acconfig.h: Remove, not needed with autoconf-2.5x.
+       (#114916, Tony Graham)
+
+Thu Jul 24 15:37:16 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in pango/Makefile.am pango.pc.in: Remove
+       vestiges of support for external fribidi library.
+
+Thu Jul 24 15:09:22 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in examples/Makefile.am examples/viewer-qt.{cc,h}:
+       Remove Qt-based example; it was only testing the obsolete
+       pango-x backend, and was causing more problems for people
+       trying to configure Pango then it was worth.
+
+       * examples/viewer.c: Remove obsolete test case from CVS.
+
+Thu Jul 24 15:02:56 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c (pango_glyph_string_get_logical_widths): 
+       Fix up right-to-left case. (Based on patch from
+       Damon Chaplin, #117325)
+
+Thu Jul 24 14:35:48 2003  Owen Taylor  <otaylor@redhat.com>
+       * pango/pango-utils.c (pango_language_matches): Increment
+       past the ';' for a list with multiple elements. (#117180,
+       John Finlay)
+2003-07-20  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : updated to generate libtool
+       compatible dll names, define the right PANGO_MODULE_PREFIX,
+       pangoft2 still not build with msvc
+
+       * module/basic-win32.c : some #ifdef's for missing
+       LANG_* constants to make it compile with msvc50
+
+       * pango/pango.def : updated externals
+
+2003-06-25  Matthias Clasen  <maclas@gmx.de>
+
+
+       * pango/pango-layout.c: 
+       * pango/pango-tabs.c: 
+       * pango/pango-attributes.c: 
+       * docs/tmpl/layout.sgml: 
+       * docs/tmpl/text-attributes.sgml: Doc markup and typo fixes.
+
+2003-06-17  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/Makefile.am: Add rule to regenerate man pages from 
+       Docbook.
+       (man_MANS): Add pango-querymodules.1.
+       (content_files): Add pangoe-querymodules.xml.
+
+       * docs/pango-querymodules.xml: New refentry.
+
+       * docs/pango-querymodules.1: Man page generated from the .xml source.
+
+       * docs/pango-docs.sgml: Include pango-querymodules.xml.
+
+       * acinclude.m4 (JH_PATH_XML_CATALOG, JH_CHECK_XML_CATALOG): New
+       macros to check for XML catalog contents and path, borrowed from
+       gtk-doc. 
+       
+       * configure.in: New option --enable-man to enable regeneration of
+       man pages from Docbook, if the necessary tools are found.
+
+       * docs/pango-docs.sgml: Add an autogenerated index.
+
+2003-06-13  Tor Lillqvist  <tml@iki.fi>
+
+       * pango-zip.sh.in (DLLDIR): libtool 1.5 installs DLLs in the bin
+       directory, so look there, too. Include the gtk-doc directory.
+
+Thu Jun  5 14:53:40 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_move_cursor_visually):
+       Fix bug in determining when we cross line boundaries.
+       (#103421, Matthias Clasen)
+
+Wed Jun  4 14:32:47 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/glyphstring.c (pango_glyph_string_extents_range): 
+       Improve handling of empty ink rectangles; rework for
+       simplicity. (#103662)
+
+2003-06-04  Tor Lillqvist  <tml@iki.fi>
+
+       * modules/thai/thai-x.c: Need config.h here, too, for
+       HAVE_X. Thanks to Patrick Welche.
+
+Mon Jun  2 10:43:15 PDT 2003 Keith Packard <keithp@keithp.com
+
+       * pango/pangoxft-font.c (pango_xft_font_real_get_kerning):
+       was returning with FT_Face locked. (#114226)
+
+Mon Jun  2 12:10:11 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-glyph-item.c (pango_glyph_item_apply_attrs):
+       Don't put statements with side-effects inside g_assert()!
+       (#114137, Jeff Waugh)
+
+2003-05-30  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangoft2.def: Add pango_ft2_font_map_set_default_substitute.
+
+Thu May 29 20:05:45 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-glyph-item.c: Fix a stupid bug in the
+       shortcircuit case.
+
+Thu May 29 18:49:00 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-fc.c: Use the correct tags at
+       the GPOS stage, taking into account changes during
+       the GSUB stage. (#112433)
+
+Thu May 29 18:37:58 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-glyph-item.c (pango_glyph_item_apply_attrs):
+       When applying attribute to a glyph item, handle attributes
+       that split clusters by giving the cluster all the attributes
+       that apply to it. (Previously caused a crash, #104976
+       Taneem Ahmed, Sunil Mohan Adapa)
+
+2003-05-29  Tor Lillqvist  <tml@iki.fi>
+
+       * acconfig.h: Add HAVE_X.
+
+       * configure.in: Set HAVE_X.
+
+       * modules/thai/thai-shaper.h: Don't include pangox.h unless
+       HAVE_X. Also leave out the PangoXSubfont field unless HAVE_X.
+
+       * modules/hangul/Makefile.am
+       * modules/indic/Makefile.am
+       * modules/thai/Makefile.am: Use -no-undefined on Windows.
+
+       * modules/thai/thai-shaper.c: Include config.h for HAVE_X.
+
+       * README.win32: Some minor edits.
+
+       * pango/pango.def: Add pango_fc_* entries.
+
+       * pango/pangoft2.def: Add some missing entries.
+
+Wed May 28 17:43:16 2003  Owen Taylor  <otaylor@redhat.com>
+
+       (#107630, Federic Zhang)
+
+       * tools/compress-table.pl (convert): Make read the
+       maps directly.
+
+       * tools/make-table.pl: Remove.
+
+2003-05-28  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_render): added support for rise,
+       strikethru and shape attributes. (#109900).
+
+Tue May 27 18:37:44 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mini-fribidi/fribidi.c (fribidi_analyse_string): 
+       Limit the size of the buffers we alloca(). (#104328)
+
+Tue May 27 16:51:32 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Clean up so that tests for Xft/FreeType
+       are only run when we find fontconfig. (#112027,
+       Tim Mooney)
+
+       * README: Rewrite the text about fontconfig dependencies
+       to be clearer and not to have stale links to 
+       http://keithp.com/fonts/. (#112027, Tim Mooney)
+
+Tue May 27 16:06:34 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox.c (pango_x_render): Patch from Morten
+       Welinder to collect characters into runs of the
+       same font with natural offsets before drawing them. 
+       (#106892, Morten Welinder)
+
+Tue May 27 15:01:24 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_metrics): 
+       Get the fontnmap for the right screen (#113452, 
+       Morten Welinder)
+
+Tue May 27 12:36:50 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Fix typo for FreeType dependencies
+       in the enable_explicit_deps case. (#113333, James Su)
+
+Tue May 27 12:32:43 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_context_new)
+         pango/pango-layout.c (pango_context_new)
+         pango/pango-win32.c (pango_win32_font_map_for_display)
+         pango/pangox-fontmap.c (pango_x_font_map_for_display)
+         pango/pangox.c (pango_x_font_new): Use g_object_new()
+       rather than g_type_create_instance() (Patch from
+       Benjamin Otte, #112786)
+
+Tue May 27 12:19:53 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/pangoft2topgm.c (main): Add code to check
+       for "./pangorc" so that it works uninstalled.
+
+Fri May  2 17:20:23 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/mapping.c (pango_glyph_string_x_to_index): 
+       Fix some incorrect edge cases for RTL text.
+       (#102952, Padraig O'Briain)
+
+Fri May  2 14:21:20 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (update_run): Fix a harmless
+       uninitialized memory read. (#109625, Rich Burridge)
+
+Wed Apr 30 16:46:52 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_hash): Hash
+       case insensitively (#106942, Morten Welinder)
+
+Tue Apr 29 18:02:31 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Add the fonconfig cflags/libs to 
+       FREETYPE_CFLAGS/LIBS. (#111326, Noah Levitt)
+
+       * {pango,tests,examples}/Makefile.am: Remove now
+       unnecessary references to FONTCONFIG_CFLAGS/LIBS.
+
+Thu Apr 24 19:12:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * autogen.sh (have_libtool): Accept libtool-1.5. (#111482)
+
+2003-04-23  Matthias Clasen  <maclas@gmx.de>
+
+       * docs/tmpl/glyphs.sgml: Remove outdated information about PangoGlyph.
+
+Wed Apr 16 03:46:42 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/pango-ot-info.c (synthesize_class_def):
+       More careful handling of face->charmap; if is NULL,
+       try to set a unicode charmap, if that doesn't succeed,
+       return. (Hopefully fixes #106550)
+       
+Tue Apr 15 11:49:39 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxg{sub/pos}.c: When loading
+       in Load_Chain{Sub,Pos}ClassRule, the limit we
+       have only applies to the input ClassDef table.
+       Fixes problem with Arial Unicode. Much help from 
+       Noah Levitt in tracing this down.
+
+Tue Apr 15 09:19:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_set_family): 
+       Free the right string.
+
+Tue Apr 15 07:03:19 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.h: Always include freetype.h
+       even when not ENABLE_ENGINE | ENABLE_BACKEND.
+
+Tue Apr 15 06:57:02 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c: Fix mispelled constant
+       from last commit.
+
+Tue Apr 15 06:03:39 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.c: Fix confusion between
+       boolean and FT_Error return. (#108358, Noah Levitt)
+
+       * pango/opentype/ftxopen.c (Get_Class1): index is
+       allowed to be NULL. (#108358, Noah Levitt)
+
+Tue Apr 15 05:47:35 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Don't look for Xft unless we found
+       FreeType. (#109573)
+
+Tue Apr 15 05:34:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/fonts.c (pango_font_description_set_family):
+       Switch around the code so that 
+       pango_font_description_set_family (desc,
+         pango_font_description_set_family (desc))
+        in the case where desc->static_family is TRUE.
+       (#106964, Morten Welinder)
+
+Tue Apr 15 05:13:56 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Avoid complex quoting mess that
+       didn't work with all shells. (#108001)
+
+Tue Apr 15 05:00:39 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/pango-ot-info.c (synthesize_class_def): 
+       Fix infinite loop in the case where the charmap contains
+       a character > 65535. (#106550, Morten Welinder.)
+
+Tue Apr 15 04:53:56 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot.h (enum): Cast some enumeration
+       members that are bigger than signed integers to (int) to fix
+       warning on AIX. (#107924)
+
+Tue Apr 15 04:39:48 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-coverage.c (pango_coverage_set): Fix
+       off-by-one error. (#108620, Noah Levitt)
+
+Tue Apr 15 03:54:01 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/hangul-{x,fc}.c: Fix out-of-bounds read
+       where the value wasn't actually used. (#106744, Morten Welinder)
+
+Tue Apr 15 03:47:37 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_iterator_next): Return 
+       FALSE, not -1 in g_return_val_if_fail(). (#107666, Morten
+       Welinder.)
+
+Tue Apr 15 00:07:21 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2.[ch]: Fix some stupid type registration/
+       class size problems from last commit.
+
+Mon Apr 14 06:02:34 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/thai/{thai-fc.c,thai-shaper.c,thai-x.c}:
+
+       * modules/*/*-{xft,x,win32.c} pango/pango-engine.h
+       modules/*/Makefile.am: Switch over the way that
+       module entry points work, taking advantage of the
+       new automake capability for per-target CFLAGS for
+       shared sources.
+
+       * pango/pangofc-font.[ch] pango/pangoxft-font.c
+       pango/pangoft2.c: Add a base class for
+       PangoXft and PangoFT2 font classes so code can
+       be shared between FT2 and Xft backends.
+
+       * configure.in modules/*/Makefile.am
+       modules/{arabic,basic,hangul,hebrew,indic,thai}: Move
+       *-xft.c to *-fc.c and share between Xft and FT2 backends;
+       adds FT2 backend capabilities for hangul/indic/thai.
+
+       * pango/pangoxft.h pango/pangoft2.h: Deprecate
+       APIs that moved into PangoFcFont
+
+       * modules/basic/basic-fc.c (set_glyph): Add kerning
+       handling from FT2 backend.
+
+2003-04-03  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_font_get_face)
+       (pango_ft2_font_render_glyph): disable antialiasing if requested.
+       Fixes bug #109370.
+
+       * pango/pangoft2.c (pango_ft2_render): fixed rendering of
+       monochrome bitmaps.
+
+2003-04-02  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2.c (pango_ft2_render_layout)
+       * pango/pangowin32.c (pango_win32_render_layout)
+       * pango/pangox.c (pango_x_render_layout): use a PangoLayoutIter to
+       iterate over the lines and let render_layout_line() do the actual
+       rendering. Fixes bug #105292.
+
+2003-03-28  Sven Neumann  <sven@gimp.org>
+
+       * pango/pangoft2-fontmap.c
+       * pango/pangoxft-fontmap.c: fixed typos in inline docs.
+
+2003-03-09  James Henstridge  <james@daa.com.au>
+
+       * autogen.sh: make similar changes to the ones on glib head (call
+       gtk-docize, etc).
+
+       * configure.in: move some calculations into M4 macros, rather than
+       calculating them when configure runs.
+       Use AC_HELP_STRING where appropriate.
+       Replace gtk-doc checks with a call to GTK_DOC_CHECK.
+       Replace AC_OUTPUT_COMMANDS() call with a number of calls to
+       AC_CONFIG_COMMANDS (once per created file).
+       Get rid of the "chmod +x pango-config" bit, because there is no
+       pango-config anymore.
+
+       * Makefile.am: get rid of custom distcheck rule, and set
+       DISTCHECK_CONFIGURE_FLAGS, which is equivalent.
+       Use += to select which .pc files to install.
+
+       * pango/Makefile.am: Add rules to rebuild module-defs* files, and
+       remove them on clean.
+       Reorder so that rules related to each individual library are next
+       to each other.
+       Use BUILT_SOURCES for built sources.
+
+       * pango/opentype/Makefile.am: don't use STRIP_BEGIN/STRIP_END.
+
+       * modules/*/Makefile.am: simplify module makefiles through use of
+       +=, and regularise them a bit (fixed a few bugs in the process).
+
+       * docs/Makefile.am: remove common rules, and instead include
+       gtk-doc.make.
+
+       * examples/Makefile.am: add pango.modules to CLEANFILES.
+
+       * tests/Makefile.am: remove temporary files on clean.
+
+Mon Feb 17 13:06:39 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in **/Makefile.am: Add an --enable-debug
+       configure argument defaulting to 'yes' for unstable
+       releases and 'minimum' for stable releases. 
+       For minimum, -DG_DISABLE_CAST_CHECKS.
+
+       * pango/pangofc-fontmap.cI pango/pangoft2-fontmap.c
+       pango/pangoxft-fontmap.c: Add caching of fontsets
+       (#104495, initial patch and review by Soeren Sandmann)
+
+       * pango/pangofc-fontmap.cI pango/pangoft2-fontmap.c
+       pango/pangoxft-fontmap.c pango/pangoft2-private.h
+       pango/pangoxft-private.h: Remove cache of recently freed 
+       fonts; not necessary now that we cache fontsets.
+
+       * pango/pangofc-fontmap.cI (pango_fc_pattern_set_free):
+       Rename from pango_fc_font_set_free to reflect
+       what it actually does.
+       
+       * pango/pangofc-fontmap.cI pango/pangoft-fontmap.c
+       pango/pangoxft-fontmap.c: Combine clear-the-cache
+       functions; we didn't need separate clear-the-font-cache
+       and clear-the-pattern-cache functions.
+
+Sun Feb 16 09:10:12 2003  Chema Celorio  <chema@celorio.com>
+
+       * pango/pangoft2.c (pango_ft2_render_layout): fix a typo
+       in the @bitmap argument description. s/line/layout
+
+Wed Feb 12 17:20:15 2003  Owen Taylor  <otaylor@redhat.com>
+
+        * configure.in: Simplify 'test x$have_x != xfalse'
+        to $have_x.
+
+Wed Feb 12 17:17:12 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: If --without-x is specified, don't
+       try to build Xft backend either. (#105210, patch
+       from Akira Tagoh)
+
+Wed Feb 12 17:09:00 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c: Fix bug where language
+       tag changes were not causing the font to be
+       looked up again. (bugzilla.redhat.com #84034)
+
+Wed Feb 12 16:59:23 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in pango/opentype/fterrcompat.h README: 
+       Up the FreeType version requirement to 2.0.9.
+       (2.2.1 had a compilation failure with older versions,
+       this catches it more cleanly, and removes some unneeded
+       checks. #105302, problem reported by Will Partain.)
+
+Wed Feb 12 16:48:46 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_text):
+       Guard against 
+       pango_layout_set_text (pango_layout_get_text (layout));
+       (#105612, Morten Welinder)
+
+Wed Feb 12 16:44:05 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/viewer-qt.cc: Remove call to
+       QApplication::setStyle (new QCDEStyle())... didn't
+       make sense and caused problems if CDEStyle wasn't
+       compiled into Qt. (#105264, Andrey Panov)
+
+Wed Feb 12 16:41:03 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/hangul/Makefile.am (libpango_hangul_x_la_SOURCES): 
+       Fix typo where xft_sources was used again. (#105219,
+       Chris Ross)
+
+Thu Jan 30 16:41:46 2003  Owen Taylor  <otaylor@redhat.com>
+
+        * Makefile.am (EXTRA_DIST): Remove spec.spec.in from
+        EXTRA_DIST, and from dist rules. (#102231)
+
+       * configure.in: Don't generate pango.spec.
+
+Tue Jan 28 18:20:45 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-coverage.c (pango_coverage_set/get): Fix 
+       an off-by-one error when checking if are off the end
+       of the coverage array. (#102284, Morten Welinder.)
+
+       * pango/pango-coverage.c (pango_coverage_get/set): Add
+       g_return_if_fail for index >= 0.
+
+2003-01-29  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.c (pango_win32_font_calc_coverage): Break out
+       of loop if char is 0xFFFF. Some fonts have tables terminated like
+       this.
+
+Tue Jan 28 15:18:24 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * autogen.sh (have_automake): Fix version in complaint
+       message about automake. (#104366, Rich Burridge)
+
+2003-01-20  Sven Neumann  <sven@gimp.org>
+
+       * configure.in: fixed configure output which was wrong in case
+       freetype is available but fontconfig isn't (bug #103917).
+
+2003-01-17  Padraig O'Briain  <padraig.obriain@sun.com>
+
+       * pango/fonts.c (pango_font_description_from_string): Avoid crash
+       with string such as " 12" (bug #103674)
+
+Fri Jan 10 18:56:36 2003  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgdef.c: Export TT_New_GDEF_Table
+       to create an empty GDEF table.
+
+       * pango/opentype/pango-ot-info.c: If the font doesn't
+       have a class definition table, synthesize one using
+       the charmap and the unicode properties of characters
+       in the charmap. (Needed to make things work with various
+       old Arabic fonts, such as the KACST fonts)
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6
new file mode 100755 (executable)
index 0000000..017ad50
--- /dev/null
@@ -0,0 +1,799 @@
+Mon Sep 13 17:38:58 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.6.0 ===
+
+       * configure.in: Update versions for 1.6.0 
+
+       * NEWS: Update.
+
+       * README: Minor tweak.
+
+       * pango/fonts.c pango/pango-context.c pango/pango-types.h
+       pango/pango-utils.c pango/pangoft2.c pango/pango-layout.c
+       pango/opentype/pango-ot-buffer.c: Add a bunch of missing
+       Since: 1.6.
+       
+Mon Aug 16 14:17:56 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/renderdemo.c (fc_substitute_func): Fix reversed
+       auto-hint option.
+
+2004-08-26  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangoft2.def: Add pango_ot_buffer_set_zero_width_marks,
+       again.
+
+       * pango/Makefile.am: Don't use -lm on Windows.
+       (pangoinclude_HEADERS): Put them on one line, automake 1.8 (at
+       least on Windows) otherwise drops the backslashes but still
+       outputs separate lines.
+
+2004-08-26  Dov Grobgeld  <dov.grobgeld@weizmann.ac.il>
+
+       * modules/hebrew/hebrew-fc.c (hebrew_engine_shape): Added 
+       open-type support for Hebrew.
+
+2004-08-22  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontmap.c (pango_win32_inner_enum_proc): Ignore
+       synthetic vertical writing versions of East Asian fonts. (#145322,
+       John Ehresman)
+
+Mon Aug 16 13:58:04 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/renderdemo.[ch] examples/pangoft2topgm.c:
+       add a --hinting command line flag.
+
+Mon Aug 16 13:42:38 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-ot.h (struct _PangoOTGlyph): Sync with
+       change to OTL_GlyphItemRec.
+       (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=129982,
+       Jatin Nansi)
+
+Tue Aug 10 11:51:10 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape): Fix 
+       bug where cluster was getting set to 0 for non-spacing
+       marks rather than to the cluster of the base character.
+       (#149126, Behdad Esfahbod)
+
+2004-08-06  Hans Breuer  <hans@breuer.org>
+
+       * pango/pango.def pango/pangoft2.def pango/pangowin32.def
+         pango/makefile.msc : updated
+
+       * pango/pangofc-decoder.c : static the pango_fc_decoder_*init
+       implementations
+
+       * pango/pangowin32.c : remove the duplicated, empty implementation
+       of pango_win32_font_init(), also replace parent_class variable
+       with pango_win32_font_parent_class as defined by G_DEFINE_TYPE
+
+       * modules/basic/basic-win32.c : implement basic_engine_covers
+
+       * pango/testfonts.c : iterate three common font names as was
+       intended orginally and said in the comment for years
+
+2004-08-06  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontmap.c: Typedef PangoWin32FontMapClass.
+
+       (pango_win32_font_map_class_init): Match what G_DEFINE_TYPE
+       generates.
+
+2004-08-05  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangoft2.def: Add pango_ot_buffer_set_zero_width_marks.
+
+Mon Aug  2 17:09:47 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.5.2 ==
+
+       * configure.in: Version 1.5.2
+
+       * NEWS: Updates
+
+Mon Aug  2 17:00:19 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-fc.c modules/indic/indic-ot.[ch]:
+       Add support for 'init' feature for Bengali. 
+       (#130966, Sayamindu Dasgupta)
+
+Fri Jul 30 17:17:05 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgpos.[ch] pango/opentype/ftxgsub.[ch]
+       pango/opentype/ftxopen.[ch]: Finish extending properties
+       flags from FT_UShort => FT_UInt. (OTLBuffer was already
+       using an FT_UInt)
+
+Fri Jul 30 14:05:25 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Improve handling of decomposed two-part vowels 
+       (#121882, Jungshik Shin)
+
+       * modules/indic/indic-ot-class-tables.c (stateTable): 
+       allow a dependent vowel to be followed by another 
+       dependent vowel.
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Handle
+       multiple vowel matras.
+
+Fri Jul 30 13:33:49 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Suppress
+       blwf on the first consonant in a syllable. (#118301,
+       Taneem Ahmed)
+
+Thu Jul 29 16:10:06 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Fix Malayalam double-consonant conjuncts: #121671, Rajkumar S
+
+       * modules/indic/indic-ot.[ch]: Add a new feature
+       set pstf_p and use it for post-base consonants, since
+       the existing nukt_p suppressed the pstf feature.
+       (#121671, Rajkumar S)
+
+       * modules/indic/indic-ot-class-tables.c (mlymCharClasses):
+       make U+D2F (MALAYALAM LETTER YA) _pb not _ct.
+
+       * modules/indic/indic-ot-class-tables.c (mlymCharClasses):
+       Classify U/UU/VOCALIC R as _dr not _db since they should
+       be ordered after post-base consonants.
+
+Wed Jul 28 17:00:23 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/mprefixups.c (indic_mprefixups_apply): 
+       Check glyphs[mpreLimit] not glyphs[mpreIndex]. (Found
+       by Chris Blizzard)
+
+Wed Jul 28 09:49:29 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_ellipsize): Fix
+       API docs. (#148627, Keith Sharp)
+
+Tue Jul 27 14:07:44 2004  Behdad Esfahbod  <pango@behdad.org>
+
+       * modules/arabic/arabic-fc.c: Don't substitute FARSI YEH
+       with ARABIC YEH if the font does not have any ARABIC YEH.
+
+Tue Jul 27 12:38:05 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxopen.[ch] pango/opentype/ftxgsub.c
+       pango/opentype/ftxpos.c: Save the order in which
+       features were added and use that when applying features.
+       (Patch from Soheil Hassas Yeganeh, #122330)
+
+Tue Jul 27 09:11:40 2004  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/opentype/ftxgpos.c: Remove the unused parameter
+       from the IN_CURITEM() and IN_CURGLYPH macros.
+
+Tue Jul 27 06:35:25 2004  Behdad Esfahbod  <pango@behdad.org>
+
+       * pango/opentype/otlbuffer.c (otl_buffer_copy_output_glyph):
+       Fix bug to copy glyph from in_string, not out_string.
+
+Mon Jul 26 19:11:46 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgdef.c: Fix allocation and indexing
+       in NewGlyphClasses array. (#130661, Masatake YAMATO)
+
+Mon Jul 26 15:55:03 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (get_glyph_extents_missing): 
+       mini_width/height are still (before render patch) in 
+       pixels, not Pango units.
+
+Mon Jul 26 15:24:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (ADD_Glyph): Remove the
+       unused parameter from the IN_CURITEM() and IN_CURGLYPH
+       macros.
+
+Mon Jul 26 15:21:23 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c: Add missing macro to make the 
+       last change actually compile.
+
+Mon Jul 26 15:16:07 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c (Lookup_ChainContextSubst[123]):
+       Match backtrack context against the output glyphs not
+       the input glyphs (#145174, Aamir Wali)
+
+Mon Jul 26 14:49:22 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * ftxgdef.[ch] otlbuffer.[ch]: Make Check_Property() take a 
+       OTL_GlyphItem, add a gproperties field to OTLGlyphItem,
+       and use that to cache the properties for a glyph.
+
+       * ftxgsub.c ftxgdef.c: Adapt to Check_Property() changes.
+
+       * otlbuffer.[ch] ftxgsub.c: Add otl_buffer_copy_output_glyph()
+       to use when we are copying an unmodified glyph from input
+       to output that preserves the cached properties.
+
+2004-07-23  Morten Welinder  <terra@gnome.org>
+
+       * examples/renderdemo.c (parse_ellipsis): Fix C99ism.  I am clearly
+       the last man stuck in the dark age of C.
+
+Tue Jul 20 12:10:42 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-script.c (pango_language_includes_script): 
+       return TRUE for PANGO_SCRIPT_COMMON and PANGO_SCRIPT_INHERITED.
+
+Mon Jul 19 16:48:23 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.5.1 ===
+
+       * configure.in: Pango 1.5.1
+
+       * NEWS: Updates
+
+Mon Jul 19 17:09:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/disasm.c: Add support for 
+       ChainContextSubstFormat3.
+
+Mon Jul 19 16:29:45 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/ftxgsub.c pango/opentype/ftxgpos.c:
+       Fix pervasive buffer overruns when skipping glyphs
+        when matching contexts. (#118592, Kailash C. Chowksey)
+
+Fri Jul 16 10:29:40 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.c pango/pangofc-private.h 
+       (pango_fc_font_get_raw_extents): Need to export this 
+       function as a symbol if not in the header file since 
+       it is used by PangoXft.
+
+Fri Jul 16 07:43:04 2004  Owen Taylor  <otaylor@redhat.com>
+
+       #143601: Felipe Heidrich
+
+       * pango/pango-layout.c (pango_layout_line_x_to_index): 
+       Go into painful detail about the behavior for X positions
+       outside the line.
+
+       * pango/pango-layout.c (pango_layout_xy_to_index):
+       Add some more details about handling of positions
+       outside the layout, reference
+       pango_layout_line_x_to_index().
+
+Thu Jul 15 10:48:01 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.c (pango_fc_font_get_glyph): Replace
+       non-breaking-space with a normal space before looking it up.
+       (Inspired by http://bugzilla.ximian.com/show_bug.cgi?id=60549)
+
+Wed Jul 14 17:47:38 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.[ch] pango/ellipsize.c pango/Makefile.am:
+       Add PangoEllipsizeMode, pango_layout_set_ellipsize(), implement.
+       (#59071)
+
+       * pango/pango-layout-private.h pango/pango-layout.c:
+       Move PangoLayout structure into a separate header file.
+
+       * pango/pango-glyph-item.[ch]: Add pango_glyph_item_free().
+
+       * pango/pango-glyph-item-private.h pango/pango-glyph-item.c:
+       Internally export the PangoGlyphItemIter functionality.
+
+       * examples/renderdemo.[ch]: Add --ellipsize option.
+
+Wed Jul 14 17:42:49 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-script.c (pango_language_includes_script): 
+       Fix problem when we only figured out latin script for 'en'
+       not for 'en-us'. Fix reversed arguments to bsearch.
+
+Tue Jul 13 16:23:15 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h pango/pango-utils.c
+       docs/pango-sections.txt: Add a GType for PangoMatrix
+       (#145532, Torsten Schoenfeld)
+
+Tue Jul 13 14:12:06 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-render.c (compare_points): Make
+       static. (#147512, Morten Welinder)
+
+Tue Jul 13 10:07:44 2004  Owen Taylor  <otaylor@redhat.com>
+       
+        * pango/Makefile.am: Reverse order of pangoft2/pangoxft
+        in Makefile; apparently automake doesn't figure out
+        the correct installation order. (#146472)
+       
+Tue Jul 13 10:02:53 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c (pango_language_get_sample_string):
+       Make table constant. (#145515, Morten Welinder)
+
+2004-07-12  Morten Welinder  <terra@gnome.org>
+
+       * pango/pangoxft-font.c (get_glyph_extents_xft): Fix C99ism.
+       (#147415, self.)
+
+2004-07-12  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-fc.c (render_basic): Render U+00A0
+       (non-break-space) as a space.
+
+Sat Jul 10 18:06:21 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * examples/renderdemo.[ch] examples/Makefile.am
+       examples/pangoft2topgm.c: Split most of the guts
+       of pangoft2topgm.c into separate source files
+       to allow creation of new rendering demos for 
+       different backends.
+
+Sat Jul 10 18:03:58 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_new_font): 
+       Const-ification fix.
+
+Sat Jul 10 17:55:03 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h pango/pango-utils.c (pango_matrix_concat):
+       One more constification.
+
+Sat Jul 10 17:45:05 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-private.h: Add _pango prefix for
+       _pango_ft2_font_get_cache_glyph_data and friends
+       defined only in private header file.
+
+Sat Jul 10 17:33:38 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-private.h pango/pangoft2-render.c
+       pango/pango-context.[ch] pango/pangoft2.[ch] pango/pango-utils.
+       pango/pango-types.h pango/pangofc-fontmap.c: Make PangoMatrix
+       arguments const where appropriate.
+
+       * pango/pango-context.c pango/fonts.c pango/pangofc-font.c 
+       pangofc-fontmap.c pango/pangoft2.c pango/pangoft2-fontmap.c 
+       pango/pangoxft-font.c pango/pangoxft-fontmap.c 
+       pango/pangowin32-fontmap.c: Use G_DEFINE_TYPE comprehensively.
+
+       * pango/pangoft2-private.h pangoft2.c: Un-staticify
+       pango_ft2_font_get_type.
+
+Sat Jul 10 16:55:46 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.h (struct _PangoFcFont): 
+       s/hinted/is_hinted/ s/transform/is_transformed/.
+
+Sat Jul 10 16:39:44 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.[ch]: Add hinted/transform flags
+       to the font structure to allow efficient conditionalization
+       of behavior rather than repeatedly extracting the information
+       from the FcPattern.
+
+       * pango/pangofc-font.c pango/pangofc-private.h pango/pangoft2.c:
+       Move the glyph metrics computation into a 
+       _pango_fc_font_get_raw_extents() function that can be
+       shared with the Xft backend.
+
+       * pango/pangoxft.c: When a transform is in effect, don't
+       get glyph extents from Xft ... they are device space
+       and not useful, use _pango_fc_font_get_raw_extents() instead.
+
+Fri Jul  9 15:23:39 2004  Manish Singh  <yosh@gimp.org>
+
+       * pango/pango-ot.h: Add declaration for pango_ot_buffer_set_rtl.
+
+2004-07-08  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c: Add missing row for the WORD_JOINER
+       class. (#145833, Billy Biggs)
+
+Thu Jul  8 15:25:29 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.[ch]: Add pango_context_get_font_map()
+
+       * pango/pango-fonts.c pango/pango-fontset.c  pango/pango-context.c: 
+       Some s/PangoMetrics/PangoFontMetrics/ in docs.
+
+       * pango/pango-context.c: Fix problem with unsetting
+       the matrix for a context.
+
+       * pango/pango-types.h: Switch to a much more efficient
+       implementation of PANGO_SCALE.
+
+2004-07-07  Morten Welinder  <terra@gnome.org>
+
+       * pango/pango-layout.c (process_item): Add letter spacing
+       correction to the last character, not the one just beyond the
+       table.  (#145517, self.)
+
+Thu Jun 24 14:07:10 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.5.0 ===
+
+       * NEWS: Updated
+
+Thu Jun 24 13:35:03 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-glyph-item.c (pango_glyph_item_apply_attrs): 
+       Fix double cluster increment.
+
+Thu Jun 24 00:50:46 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_run_get_extents): Fix
+       bug with using wrong uline value.
+
+Wed Jun 23 17:26:50 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * tests/Makefile.am (pango.modules): Don't generate
+       all-unicode.txt when cross-compiling. (#135503,
+       J. Ali Harlow)
+
+Wed Jun 23 16:51:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.[ch]: Add PANGO_TYPE_LAYOUT_ITER.
+       (#138408, Johan Dahlin)
+
+Wed Jun 23 16:13:53 2004  Owen Taylor  <otaylor@redhat.com>
+
+       #143693, Sayamindu Dasgupta
+
+       * pango/opentype/pango-ot-buffer.c (pango_ot_buffer_set_zero_width_marks) pango/opentype/pango-ot-private.h:
+       Allow setting for whether marks should be given zero width,
+       defaulting to FALSE.
+
+       * modules/arabic/arabic-fc.c (arabic_engine_shape): Turn
+       on zero-width-marks setting.
+
+Wed Jun 23 11:17:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.[ch]: Add new letter_spacing
+       attribute.
+
+       * pango/pango-attributes.c (pango_attr_rise_new): Correct
+       description; rise is in Pango units, not em-relative.
+
+       * pango/pango-glyph-item.c: Break out iteration-over-clusters
+       from ApplyAttrsState into a separate GlyphItemIter.
+
+       * pango/pango-glyph-item.[ch]: New function 
+       pango_glyph_item_letter_space() to add add letter spacing
+       to a single glyph item.
+
+       * pango/pango-markup.c: Add a letter_spacing attribute.
+
+       * pango/pango-layout.c: Use G_DEFINE_TYPE().
+
+       * pango/pango-layout.c (pango_layout_get_item_properties):
+       Switch to use a structure rather than a pile of out
+       parameters.
+
+       * pango/pango-layout.c (pango_run_get_extents): Remove
+       the unused shape_set out parameter.
+
+       * pango/pangofc-decoder.[ch] pango/pangofc-fontmap.[ch]:
+       Doc fixes.
+
+       * pango/pango-types.h: Deprecate pango_get_mirror_char()
+       
+       * pango/pango-utils.c (pango_get_mirror_char): Add docs.
+
+       * docs/pango-sections.txt docs/pango-docs.sgml: Add 
+       PangoFcDecoder and letter spacing.
+       
+Tue Jun 22 14:10:41 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c: Handle new Unicode-4.0 WORD_JOINER
+       and NEXT_LINE classes. (#143436, Jeroen Zwartepoorte)
+
+       * pango/break.c (pango_default_break): Handle space
+       followed by a combining character as called for by
+       TR 14.
+
+       * tests/testboundaries.c (check_line_char): Fix up
+       for space+combining mark
+       
+       * pango/break.c (pango_default_break): Change fixme
+       for G_UNICODE_BREAK_SURROGATE to g_assert_not_reached().
+       
+Tue Jun 22 10:39:32 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-render.c (_pango_ft2_draw_error_underline,
+       _pango_ft2_draw_rect): Allow %NULL for @matrix.
+       (#144775, Diego González)
+
+Mon Jun 21 16:02:04 2004  Owen Taylor  <otaylor@redhat.com>
+
+       #143556, Noah Misch
+
+       * pango/Makefile.am: Add $(no_undefined) when building libpangox,
+       libpangoxft for cygwin builds.
+
+       * modules/basic/Makefile.am (pango_basic_x_la_LDFLAGS):
+       Add $(no_undefined) for basic-x module.
+
+       * pango/Makefile.am: Add $(GLIB_LIBS) for pangox, pangoxft,
+       for benefit of cygwin, AIX, etc.
+       
+Mon Jun 21 15:26:44 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (update_attr_iterator): Initialize
+       state->lang from context->language if not otherwise set. 
+       Without doing this, the default language tag was, not 
+       suprisingly, having no effect! (#137334, Frederic Zhang)
+
+       * pango/pango-attributes.c (pango_attr_iterator_get_font): 
+       Fix typo in doc comment.
+
+Mon Jun 21 14:42:02 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * docs/pango_markup.sgml: use x-large instead of 100
+       in the markup example. (#142355, Doug Quale).
+       Fix the 'size' documentation to say 1024ths rather
+       than 1000ths. Document using font_desc='12.5' instead.
+
+Mon Jun 21 14:34:34 2004  Owen Taylor  <otaylor@redhat.com>
+
+       #142355, Sven Neumann
+
+       * pango/pangoft2.c (pango_ft2_font_get_face): Mention
+       pango_fc_font_lock/unlock face as the correct
+       replacements.
+
+       * pango/pangofc-font.h: Move lock/unlock_face outside
+       of the #ifdef PANGO_ENABLE_ENGINE.
+
+Mon Jun 21 14:23:05 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (no_shape_filter_func)
+       pango/pango-script.c (get_pair_index): 
+       pango/modules.c (append_engines): Fix 
+       some missing statics. (#142237, Morten Welinder)
+
+       * pango/mini-fribidi/fribidi_types.c: Move
+       fribidi_type_name inside the #ifdef DEBUG.
+
+Mon Jun 21 13:55:17 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/otlbuffer.c: Use the gcc-3.3 
+       strict-aliasing compatible macros from fterrcompat.h
+       (#140495, reported by Stanislav Brabec)
+
+Mon Jun 21 11:47:41 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in pango.pc.in: Missed commit: add 
+       -lm dependency to pkg-config files.
+
+       * docs/pango-sections.txt: Add PangoMatrix and rotated 
+       rendering functions
+
+Mon Jun 21 11:41:18 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.c (pango_attr_list_change): 
+       Fix leak when inserting an empty attributes. (#140771,
+       Morten Welinder)
+
+Mon Jun 21 11:38:22 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (pango_context_set_font_map): 
+       Handle setting the same object back. (#143523,
+       Morten Welinder)
+
+Mon Jun 21 11:35:29 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_new):
+       Revert the last change, assert that initialization
+       succeeded.
+
+Mon Jun 21 11:29:39 2004  Owen Taylor  <otaylor@redhat.com>
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_new):
+       For cleanliness, unref the fontmap if we get an error
+       from FreeType. (#143524, Morten Welinder)
+       
+       * pango/pangoft2-fontmap.c (pango_ft2_font_map_finalize): 
+       Deal with NULL ft2fontmap->library.
+2004-06-17  Christopher Blizzard  <blizzard@redhat.com>
+
+       * pango/pangofc-decoder.c (pango_fc_decoder_get_glyph,
+       pango_fc_decoder_get_charset): Changes to support extra arguments.
+
+       * pango/pangofc-decoder.h (struct _PangoFcDecoderClass): Add the
+       PangoFcDecoder * as the first argument to the callbacks for
+       get_glyph and get_charset.
+
+Wed Jun  9 17:32:59 2004  Christopher Blizzard  <blizzard@redhat.com>
+
+       * pango/Makefile.am: Add export of pangofc-decoder.h.  Build
+       pangofc-decoder.c.
+
+       * pango/pangofc-decoder.h pango/pangofc-decoder.c: New files.
+       Virtual base class for any custom font decoders.
+
+       * pango/pangofc-font.c: Add new PangoFcFontPrivate structure.
+
+       * pango/pangofc-font.c (pango_fc_font_class_init): Attach new
+       private structure using g_type_class_add_private().
+
+       * pango/pangofc-font.c (pango_fc_font_finalize): Make sure to
+       unset any decoders that are attached to the font.
+
+       * pango/pangofc-font.c (pango_fc_font_get_coverage): When
+       determining coverage, use a custom decoder if available.
+
+       * pango/pangofc-font.c (pango_fc_font_has_char): When determining
+       if a font has a character, use a custom decoder if available.
+
+       * pango/pangofc-font.c (pango_fc_font_get_glyph): When doing
+       single character to glyph convertions, use a custom decoder if
+       available.
+
+       * pango/pangofc-font.c (_pango_fc_font_get_decoder): New
+       function.  Get the custom decoder for the given font.
+
+       * pango/pangofc-font.c (_pango_fc_font_set_decoder): New
+       function.  Set a custom decoder for the given font.
+
+       * pango/pangofc-fontmap.c: Add structure PangoFcFindFuncInfo to
+       keep track of callbacks to create custom decoders.  Modify
+       PangoFcFontMapPrivate by adding a list of PangoFcFontFuncInfo
+       callbacks that have been registered.
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_add_find_func): New
+       function.  Add callbacks to the fontmap that will create custom
+       decoders when pango creates new fonts.
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_finalize): Clear out
+       any findfuncs that have been registered and notify them about
+       destruction.
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_new_font): When
+       creating new fonts, call back to any registered find functions so
+       they can create custom decoders for those fonts.  Attach those
+       custom decoders to the newly created fonts.
+
+       * pango/pangofc-fontmap.c (_pango_fc_font_map_get_coverage):
+       Change the argument to take a PangoFcFont instead of an FcPattern.
+       Call _pango_fc_font_map_fc_to_coverage instead of doing the
+       conversion inline.
+
+       * pango/pangofc-fontmap.c (_pango_fc_font_map_fc_to_coverage): New
+       function.  Convert an FcCharSet to a PangoCoverage object.
+
+       * pango/pangofc-fontmap.h: New declarations for
+       pango_fc_font_map_add_decoder_find_func and
+       PangoFcDecoderFindFunc.
+
+       * pango/pangofc-private.h: New declarations for
+       _pango_fc_font_map_fc_to_coverage, _pango_fc_font_get_decoder and
+       _pango_fc_font_set_decoder.
+
+Mon Jun  7 2004  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/Makefile.am modules/thai/thai-shaper.c
+       (thai_engine_shape) +modules/thai/thai-ot.c +modules/thai/thai-ot.h:
+       Add OpenType support in Thai module. (#141541)
+
+Wed Jun  2 10:07:06 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h (PANGO_MATRIX_INIT): Remove 
+       stray semi-colon. (#143516, Morten Welinder)
+
+Mon May 31 07:39:01 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-utils.c pango/pango-types.h (pango_matrix_concat): 
+       Fix 'new' as parameter name (C++ compatibility issue).
+       (#143430, David Hawthorne)
+
+Fri May 28 11:39:39 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-types.h pango/pango-utils.c: Add PangoMatrix
+       type for affine transforms.
+       
+       * configure.in pango.pc.in pango/Makefile.am: Add a -lm
+       dependency for PangoMatrix operations.
+
+       * pango/pango-context.[ch]: Add pango_context_set/get_matrix().
+
+       * pango/pangoft2-render.c pango/pangoft2-private.h: Add
+       code for drawing antialiased transformed rectangles and
+       squiggly error underlines.
+
+       * pango/pangoft2.[ch]: Add pango_ft2_render_transformed(),
+       pango_ft2_render_layout_subpixel(), 
+       pango_ft2_render_layout_line_subpixel(), implement transformed
+       rendering.
+
+       * pango/pangofc-font.c: Pass any transformation matrix on to
+       fontconfig when creating the pattern for a PangoFcFont.
+
+Fri May 28 2004  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * pango/opentype/pango-ot-buffer.c (apply_gpos_ltr): Negate y offset
+       according to different conventions between PangoGlyphString and OTL
+       (#142544)
+
+Thu May 27 17:54:24 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/otlbuffer.c: Revert error return changes
+       from last commit.
+
+Thu May 27 16:57:30 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/otlbuffer.c: Free buffer->positions,
+       clean up error returns that were returning uninitialized
+       values. (#139239, Behdad Esfahbod)
+
+Thu May 27 15:42:20 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangox-fontmap.c pango/pangox.c: Add some missing
+       statics. (#142299, Morten Welinder)
+
+Thu May 27 15:32:03 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-font.h pango/fonts.c: Add underline and
+       strikethrough position and thickness metrics.
+
+       * pango/pangofc-font.c: Implement underline and strikethrough
+       position and thickness metrics.
+
+       * pango/pango-fontset.c (pango_fontset_real_get_metrics):
+       Initialize metrics from the metrics of the first font
+       in the fontset.
+
+Thu May 27 15:08:32 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Increment version to 1.5 for devel branch.
+
+2004-05-06  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * pango/break.c (pango_break):
+       Fix incorrect casts to get the class object of lang engine. (#141931)
+
+2004-04-29  Jody Goldberg <jody@gnome.org>
+
+       * pango/pango-layout.c (get_alignment) : only invert if the layout and
+         the context really disagree, not if they are WEAK_LTR vs LTR
+
+2004-03-11  Jody Goldberg <jody@gnome.org>
+
+       * pango/pango-attributes.h : Add a comment clarifying that
+         PangoAttribute::end_index is _exclusive_.  The range is [start..end)
+         Additionally clarify that that the indicies are in _bytes_ not
+         characters.
+
+2004-04-29  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_for_display):
+       Use floating-point math in resolution calculation. (#141229, John
+       Ehresman)
+
+       * pango/pangowin32-fontmap.c (pango_win32_insert_font): Don't leak
+       family_name. (#140772, John Ehresman)
+
+2004-04-20  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/thai-shaper.c (get_adjusted_glyphs_list):
+       * modules/thai/thai-fc.c (tis620_2):
+       Use dottedcircle as the base for individual combining characters.
+
+2004-04-18  Changwoo Ryu  <cwryu@debian.org>
+
+       * modules/hangul/hangul-defs.h (IS_JAMO): 
+       * modules/hangul/hangul-fc.c (hangul_engine_shape, render_basic):
+       handle non-Hangul unicode chars, fixes #129741, #137347.
+
+2004-04-05  Anders Carlsson  <andersca@gnome.org>
+
+       * examples/argcontext.c (arg_context_parse): 
+       Handle '--' correctly.
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8
new file mode 100755 (executable)
index 0000000..341256f
--- /dev/null
@@ -0,0 +1,488 @@
+Wed Dec 15 23:49:14 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.8.0 ===
+       
+       * configure.in: Version 1.8.0
+
+       * NEWS: Update.
+
+       * README: Updates.
+
+Wed Dec 15 23:13:57 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/basic/basic-win32.c (uniscribe_shape): Emergency
+       fix for #151068... if uniscribe shaping comes up with
+       no glyphs, fall back to non-uniscribe shaping.
+
+Wed Dec 15 22:09:42 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Add pixel sizes for fonts (#119081, patch from Chris Lahey)
+
+       * pango/fonts.c pango/pango-font.h: 
+       Add pango_font_description_set_absolute_size(),
+       pango_font_description_get_size_is_absolute()
+
+       * pango/pango-attributes.[ch]: Add pango_attr_size_new_absolute(),
+       change PANGO_ATTR_SIZE from PangoAttrInt to PangoAttrSize 
+       (preserves compat because first component is identical)
+
+       * pango/pangowin32-fontmap.c (pango_win32_font_map_load_font): 
+       For absolute sizes, convert pixels to points, before 
+       calling pango_win32_font_new().
+
+       * pango/pangofc-fontmap.c pango/pangoft2.c pango/pangoxft-font.c: 
+       Handle absolute sizes.
+
+Wed Dec 15 18:50:18 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-fc.c modules/indic/indic-ot.h:
+       Force zero-width marks to glyph index 0 so they
+       won't be drawn. (#145233, Aniruddha Shankar)
+
+Wed Dec 15 11:15:37 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in modules/Makefile.am modules/tibetan/*:
+       Add simple tibetan module. (#148566, G Karunakar)
+
+Wed Dec 15 08:38:52 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c: Split
+       U+DDE as U+DD9, U+DDF.
+
+Tue Dec 14 20:44:53 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Sinhala support (#153517, Anuradha Ratnaweera)
+
+       * modules/indic/indic-ot.h modules/indic/indic-fc.c 
+       modules/indic/indic-ot-class-tables.c: Add tables for Sinhala.
+
+       * modules/indic/indic-ot.c (indic_ot_reorder): Add handling
+       of Virama for two-part dependent vowels.
+
+Tue Dec 14 18:36:57 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_copy): Copy 
+       layout->auto_dir. (#153547, Morten Welinder)
+
+Tue Dec 14 18:32:46 2004  Owen Taylor  <otaylor@redhat.com>
+       * pango/Makefile.am (libpangoft2_1_0_la_LIBADD): Add $(libm),
+       needed for no-undefined platforms like AIX. (#160773,
+       Vincent Berger)
+Tue Dec 14 18:08:36 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-font.h: Add PANGO_WEIGHT_SEMIBOLD. 
+       (#86957, Lars Clausen)
+
+       * pango/fonts.c: s/600/PANGO_WEIGHT_SEMIBOLD.
+
+       * pango/pangofc-fontmap.c (pango_fc_convert_weight_to_fc)
+       * pango/pangofc-fontmap.c (pango_fc_convert_weight_to_pango):
+       Handle PANGO_WEIGHT_SEMIBOLD, use additional weights added
+       in fontconfig-2.2.
+
+2004-12-14  Dan Winship  <danw@novell.com>
+
+       * examples/Makefile.am (INCLUDES): add XFT_CFLAGS
+
+Tue Dec 14 17:27:14 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/indic-ot-class-tables.c (guruCharClasses): 
+       Add the correct char classes for Unicode-4.0 characters
+       U+A01, U+A03. (#158943, Sukhjinder Sidhu)
+
+2004-12-14  Matthias Clasen  <mclasen@redhat.com>
+
+       * pango.pc.in: Require gmodule-no-export
+
+       * configure.in: Use gmodule-no-export-2.0.pc, require glib 2.5.7
+       
+2004-12-14  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32.c (pango_win32_font_get_metrics): Set also
+       underline and strikethrough position and thickness. (#161205)
+
+Mon Dec 13 14:44:40 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.[ch] pango/pango.def docs/pango-sections.txt: 
+       Add pango_layout_get_font_description. (#153548, Morten Welinder)
+
+       * pango/pango-layout.c (pango_layout_set_font_description):
+       Guard against the same description being set back.
+
+2004-12-12  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/modules.c (read_modules)
+       * pango/pango-utils.c (read_alias_file,read_config_file): Use
+       gstdio wrappers. (#16111, Robert Ögren)
+
+       * pango/pangoft2-fontmap.c: Remove unneded includes of <dirent.h>
+       and <windows.h>.
+
+Fri Dec 10 16:30:40 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-render.c (draw_glyph): Fix problem
+       where the font would get unset after flushing at MAX_GLYPHS.
+       (#160978)
+
+Thu Dec  2 15:47:44 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * === Released 1.7.0 ===
+
+       * NEWS: Update.
+
+Thu Dec  2 15:31:33 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c (pango_default_break): Ignore formatting
+       characters when determining word boundaries (Part of 
+       #97545, Behdad Esfahbod)
+
+2004-11-30  Matthias Clasen  <mclasen@redhat.com>
+
+       * pango/pango-renderer.c (pango_renderer_default_prepare_run): Set
+       the background color instead of setting underline twice.
+
+2004-11-28  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       Add Lao support to Thai module. (#156781)
+
+       * modules/thai/Makefile.am modules/thai/thai-shaper.[ch]
+       +modules/thai/thai-charprop.[ch]: Split WTT tables into a separate
+       source. Extend the tables for Lao. 3 new classes are added (AM for
+       SaraAm, AD4 for Nikkhahit, BCON for Lao semivowels). Now the range
+       0x00-0x7f in TIS is used to store Lao characters. Rewrite ucs2tis()
+       et al macros accordingly.
+
+       * modules/thai/thai-shaper.c (get_next_cluster): Rewrite the
+       clusterization code, so it's not specific to Thai-English texts. (Note
+       that the special case of SaraAm is now handled by the new WTT character
+       class. So, the extra checks are now eliminated.)
+
+       * modules/thai/thai-shaper.c (get_glyphs_list, add_cluster):
+       Add glyph calculation for Lao clusters.
+
+       * modules/thai/thai-shaper.c (ThaiShapeTable structs,
+       get_adjusted_glyphs_list): Generalize the shaping maps according to
+       the new 8-bit internal encoding scheme. Now the character ranges are
+       relocatable rather than hard-coded.  Add Lao shaping table.
+
+       * modules/thai/thai-shaper.c (get_adjusted_glyphs_list): Add special
+       case for Lao, where clusters can be longer than those of Thai.
+
+       * modules/thai/thai-fc.c (get_glyph_index_tis): Add Lao glyphs lookup.
+
+       * modules/thai/thai-ot.c (thai_ot_shape, +lao_ot_get_ruleset): Add Lao
+       OT rulesets retrieval.
+
+       * modules/thai/thai-fc.c (PangoEngineScriptInfo thai_scripts[]):
+       Add Lao script entry.
+
+Thu Nov 25 14:10:53 2004  Manish Singh  <yosh@gimp.org>
+
+       * autogen.sh: rm autom4te.cache, since it might interfere with
+       differing autoconf versions.
+
+Tue Nov 23 10:23:43 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-attributes.[ch]: Add underline_color
+       and strikethrough_color attribute types. (#147616, Morten 
+       Welinder)
+
+       * pango/pango-markup.c docs/pango_markup.sgml: Add
+       corresponding 'underline_color' and 
+       'strikethrough_color' attributes for <span>.
+
+       * pango/pango-renderer.c (pango_renderer_default_prepare_run):
+       Implement underline and strikethrough colors.
+
+       * pango/pango-renderer.c: Fix some bigs with updating
+       underlines/strikethrough state.
+
+       * pango/pango-renderer.c (get_total_matrix): Fix a const
+       warning.
+
+       * docs/pango-sections.txt: Update
+       
+Mon Nov 22 15:53:37 2004  Manish Singh  <yosh@gimp.org>
+
+       * modules/thai/Makefile.am: Remove stray 'x' character.
+
+Mon Nov 22 18:30:14 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/opentype/Makefile.am pango/Makefile.am
+       modules/*/Makefile.am: Set G_LOG_DOMAIN (#151923,
+       Hans Breuer)
+
+Mon Nov 22 15:21:11 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/syriac configure.in modules/Makefile.am
+       modules/makefile.msc: Add Syriac module by Emil 
+       Soleyman-Zomalan. (#147779)
+
+       * examples/Makefile.am examples/syriac.utf: Syriac
+       example text.
+
+2004-11-21  Hans Breuer  <hans@breuer.org>
+
+       * pango/makefile.msc : updated
+
+       * pango/pangowin32.[ch] pango/pangowin32.def : implement
+       pango_win32_render_transformed() by using the transformation
+       capabilities of GDI (not available on win9x)
+
+Sun Nov 21 11:43:00 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/break.c: Turn off backspace-deletes-character behavior
+       for Kana and Hangul. It's wrong for Kana, and for Hangul it's 
+       theoretically right but interacts badly with current input 
+       methods. (#155897, Leon Ho)
+
+Sun Nov 21 11:40:03 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_log_attrs): Return n+1
+       logical attributes not n logical attributes (#155912)
+
+Sun Nov 21 10:52:03 2004  Owen Taylor  <otaylor@redhat.com>
+       * pango/pango-context.c: Don't just call pango_fontset_get_metrics()
+       to implement pango_context_get_metrics(), since that skips our 
+       normal font selection algorithm. Rather itemize the sample string
+       and get the metrics from that. (#149438, Felipe Heidrich)
+Sun Nov 21 10:46:34 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_set_text): Fix UTF8 => UTF-8
+       in warning and doc comment. (#153551, Morten Welinder)
+
+Sat Nov 20 23:50:40 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (get_glyph_extents_missing): Fix double
+       multiplication by PANGO_SCALE. (#157419, Matthias Clasen)
+
+       * pango/pangoxft-render.c (box_in_bounds): Fix sign typo.
+
+       * pango/pangoxft-render.c (pango_xft_renderer_draw_glyphs): 
+       * pango/pangoxft-font.c (get_glyph_extents_missing): 
+       Adjust vertical positioning so that we get integral positioning of 
+       the box without a transform.
+
+Fri Nov 19 18:45:24 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-renderer.c (pango_renderer_default_draw_error_underline):
+       Fix crash when renderer->matrix is NULL.
+
+Fri Nov 19 17:44:33 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-renderer.[ch]: Remove color_set() virtual
+       function ... it's not absolutely necessary for chaining
+       renderers, and it's not clear that chaining renderers
+       is actually useful, anyways.
+
+       * pango/pango-renderer.[ch] (pango_renderer_set_color): Constify
+       color argument.
+
+       * pango/pango-render.c: Fix various bugs.
+
+       * pango/pango-attributes.[ch] (pango_attr_shape_new_with_data):
+       Add the ability to create a shape attribute with user data.
+
+       * pango/pango-renderer.[ch] (PangoRendererClass): Add a draw_shape
+       virtual function, to draw content for PangoAttrShape.
+
+       * pango/pangoxft-fontmap.c (pango_xft_shutdown_display): 
+       Add note to docs that XCloseDisplay() will automatically take care
+       of releasing Pango's allocated resources for the display.
+       
+       * docs/Makefile.am (SCAN_OPTIONS): Add the appropriate 
+       --deprecated-guards option.
+       
+       * docs/tmpl/xft-fonts.sgml: Add long description.
+
+       * docs/tmpl/x-fonts.sgml: Document as dead.
+
+2004-10-26  Matthias Clasen  <mclasen@redhat.com>
+
+       * docs/tmpl/text-attributes.sgml: Document PANGO_UNDERLINE_ERROR
+       as a 1.4 addition.  (#156533, Morten Welinder)
+
+2004-10-12  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/thai-shaper.h (thai_get_glyph_tis,
+       thai_make_glyph_tis): Use guchar instead of gchar as argument type.
+
+       * modules/thai/thai-fc.c (thai_get_glyph_tis, thai_make_glyph_tis):
+       Make *_tis functions wrappers to *_uni functions.
+
+2004-10-09  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       Explicitly handle dangling upper/lower marks by optionally using
+       dottedcircle as base, rather than requiring it.
+
+       * modules/thai/thai-shaper.h: Explicitly declare make_glyph and
+       get_glyph functions for 8-bit and Unicode chars as separate functions.
+
+       * modules/thai/thai-shaper.c (get_adjusted_glyphs_list): Rename
+       function calls to the new ones. Conditionally use dottedcircle glyph
+       as base for dangling upper/lower marks if available; simply expand
+       width to that of inkrect otherwise.
+
+       * modules/thai/thai-fc.c: Implement those new functions declared in
+       thai-shaper.h. Remove 0x25cc from tis620_2 glyph set.
+
+2004-10-08  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/thai-ot.c (thai_ot_get_ruleset): Return NULL if ruleset
+       is empty, to indicate the lack of OT features.
+
+       * modules/thai/thai-fc.c (tis620_1): Fix the PUA glyph table, after
+       actually checked with sample OSX (Jaguar) fonts. This actually turns
+       on PUA-based shaping with Thai OSX fonts in Pango.
+
+2004-10-07  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * modules/thai/thai-shaper.c (groups, group1_map, group2_map):
+       Remove unused data for XTIS.
+
+       * modules/thai/thai-shaper.[ch] (enum ThaiFontSet, get_glyphs_list),
+       modules/thai/thai-fc.c (thai_get_font_info, thai_make_glyph):
+       Remove THAI_FONT_ISO10646 font set, as it's already covered by
+       THAI_FONT_TIS.
+
+Sat Oct  2 10:08:13 2004  Manish Singh  <yosh@gimp.org>
+
+       * modules/thai/thai-ot.c (thai_ot_get_ruleset): Use
+       g_return_val_if_fail() instead of g_return_if_fail() since this
+       function returns a value.
+
+2004-10-02  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       Make Thai module prefer OpenType tables, if available, to PUA
+       substitutions. (#153927)
+
+       * modules/thai/thai-ot.[ch]:
+       Merge get_gsub_ruleset() and get_gpos_ruleset() into an exported
+       function thai_ot_get_ruleset(). Rearrange thai_ot_shape() to call
+       it properly.
+
+       * modules/thai/thai-fc.c:
+       Try OT ruleset before PUA glyph sets.
+
+2004-09-25  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango.def: Add the new pango_renderer_* symbols.
+
+       * modules/basic/basic-win32.c (basic_engine_covers,
+       basic_engine_win32_class_init): Remove the implementation of the
+       covers method. It was wrong anyway, and unnecessary. No need to
+       override the default implementation. (#152997)
+
+Fri Sep 24 15:05:02 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-renderer.c (pango_renderer_draw_glyphs): 
+       Activate the renderer.
+
+       * pango/pango-renderer.c (pango_renderer_get_color,
+       pango_renderer_draw_rectangle, pango_renderer_draw_trapezoid,
+       pango_renderer_draw_error_underline, pango_renderer_draw_glyph): 
+       Require the renderer to be active.
+
+Fri Sep 24 12:59:22 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * configure.in: Up version to 1.7.0.
+
+       * pango/pango-renderer.[ch] pango/pango.h pango/Makefile.am: 
+       Add PangoRenderer, a base class that is subclassed to produce 
+       rendering drivers for different backends and purposes.
+
+       * pango/pangoft2-private.h pango/pangoft2-render.c 
+       pango/pangoft2.c: Move rendering into pangoft2-render.c,
+       use PangoRenderer.
+
+       * pango/pangoft2-fontmap.c pango/pangoft2-private.h: Add
+       _pango_ft2_font_map_get_renderer() to retrieve a singleton
+       fontmap for the fontmap.
+
+       * pango/pangoxft-render.[ch] pango/pangoxft.c pango/Makefile.am: 
+       Make Xft rendering use PangoRenderer, add publically 
+       visible, subclassable PangoXftRenderer.
+
+       * pango/pangoxft-fontmap.c pango/pangoxft-private.h: Add
+       _pango_xft_font_map_get_renderer() to retrieve a singleton
+       fontmap for the fontmap.
+
+       * examples/xftview.c examples/Makefile.am: Add a test program
+       using the Xft backend.
+
+       * docs/*: Update minimally for PangoRenderer.
+
+Wed Sep 22 16:15:40 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangoxft-font.c (pango_xft_font_get_glyph_extents): Use
+       get_glyph_extents_raw() when hinting is disabled as well
+       as when we are transforming. (#152529, Vincent Noel)
+
+       * pango/pangofc-font.c (pango_fc_font_get_raw_extents): Duplicate
+       the fix for non-scalable fonts from get_face_metrics() here as
+       well.
+
+Wed Sep 22 15:57:30 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-layout.c (pango_layout_get_ellipsize): Fix
+       typo in docs. (#153390, Paolo Borelli)
+
+Wed Sep 22 14:07:47 2004  Owen Taylor  <otaylor@redhat.com>
+
+       Cleanups from 'sparse', #149922, Kjartan Maraas
+
+       * pango/pango-utils.c (read_config): () => (void) in
+       definition.
+
+       * pango/pangofc-fontmap.c (pango_fc_font_map_list_families):
+       Initialize *n_families, not n_families.
+
+       * pango/pangofc-fontmap.c pango/pangoft2.c opentype/ftxgdef.c 
+       opentype/ftxgpos.c opentype/ftxgsub.c: : Fix various 0/NULL 
+       confusion.
+
+Mon Sep 20 13:57:35 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * modules/indic/mprefixups.c (indic_mprefixups_apply): 
+       Fix various bugs, make more robust. (#151689, Arun M)
+
+Mon Sep 13 11:06:47 2004  Owen Taylor  <otaylor@redhat.com>
+       * pango/ellipsize.c (init_state): Initialize 
+       ellipsis_is_cjk (#151901, Christian Persch)
+Mon Sep 13 10:18:51 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pango-context.c (itemize_state_process_run): 
+       Except ideographic spaces from the !g_unichar_isgraph() test.
+       (#145275, Federic Zhang)
+       
+Mon Sep 20 12:17:37 2004  Owen Taylor  <otaylor@redhat.com>
+
+       * pango/pangofc-font.c (get_face_metrics): 
+       Don't use face->ascender/descender for non-scalable fonts,
+       since they aren't set. (#Enrico Scholz, 
+       https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=129246)
+
+2004-09-18  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pango.def: Add pango_context_set_matrix. (#152883, Ivan
+       Wong)
+
+2004-09-15  Tor Lillqvist  <tml@iki.fi>
+
+       * pango/pangowin32-fontmap.c (pango_win32_insert_font): Ignore
+       fonts in SYMBOL_CHARSET. They don't have any Unicode mapping
+       table. (#149643)
+
+       * pango/querymodules.c (string_needs_escape, escape_string):
+       Escape also backslashes. (#152607, Kazuki Iwamoto)
+
+Local Variables:
+coding: utf-8
+End:
+vim: encoding=utf-8:
diff --git a/HACKING b/HACKING
new file mode 100755 (executable)
index 0000000..dc02f5e
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,113 @@
+Formatting
+==========
+
+All parts of Pango other than modules should use the following formatting
+style; for modules, it is up to the discretion of the module 
+author / maintainer, though they are encouraged to follow the following.
+
+The Pango formatting style is basically the GNU style of formatting
+(see http://www.gnu.org/prep/standards.html), with a few additions.
+In brief overview:
+
+ - Two character indents are used; braces go on a separate line, and 
+   get a separate indentation level, so the total indent for an
+   enclosed block is 4 characters.
+
+    if (x < foo (y, z))
+      haha = bar[4] + 5;
+    else
+      {
+       while (z)
+         {
+           haha += foo (z, z);
+           z--;
+         }
+       return abc (haha);
+      }
+
+ - Spaces should be present between function name and argument block,
+   and after commas.
+
+     foo (z, z)
+
+ - In pointer types, the '*' is grouped with the variable name,
+   not with the base type. 
+
+    int *a;
+
+   NOT: 'int* a'.
+
+   In cases where there is no variable name, for instance, return
+   values, there should be a single space between the base type 
+   and the '*'.
+
+ - function and variable names are lower_case_with_underscores
+   type names are StudlyCaps, macro names are UPPER_CASE_WITH_UNDERSCORES
+
+
+Documentation comments
+======================
+
+All public API functions should have inline documentation headers
+in the gtk-doc / gnome-doc style. For instance:
+
+/**
+ * pango_layout_get_line:
+ * @layout: a #PangoLayout
+ * @line: the index of a line, which must be between 0 and
+ *        pango_layout_get_line_count(layout) - 1, inclusive.
+ * 
+ * Retrieves a particular line from a #PangoLayout (or @layout.)
+ * 
+ * Return value: the requested #PangoLayoutLine, or %NULL if the
+ *               index is out of range. This layout line can
+ *               be ref'ed and retained, but will become invalid
+ *               if changes are made to the #PangoLayout.
+ *
+ * Since: 1.6
+ **/
+PangoLayoutLine *
+pango_layout_get_line (PangoLayout *layout,
+                      int          line)
+[...]
+
+
+Choosing Function Names
+=======================
+
+- Don't abbreviate in unexpected ways:
+
+    pango_layout_get_line_count ()
+
+  Not:
+
+    pango_layout_ln_cnt ()
+
+- function that retrieve a value in a side-effect free fashion, should
+  include "get" in the name.
+
+    int pango_layout_get_line_count (PangoLayout *layout)
+
+  not 
+
+    pango_layout_line_count ()
+
+
+- functions that set a single parameter in a side-effect free fashion
+  should include "set" in the name, for instance:
+
+  void pango_layout_set_width (PangoLayout    *layout,
+                              int             width);
+
+Other comments
+==============
+
+- Avoid unsigned values for all but flags fields. This is because
+  the way C handles unsigned values generates bugs like crazy:
+
+  If width is unsigned and 10, then:
+
+   int new_width = MAX (width - 15, 1);
+
+  produces 4294967291, not 1.
+
diff --git a/INSTALL b/INSTALL
new file mode 100755 (executable)
index 0000000..8b82ade
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,291 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *Note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100755 (executable)
index 0000000..c04d1d2
--- /dev/null
@@ -0,0 +1,7 @@
+Owen Taylor
+Email: otaylor@redhat.com
+Userid: otaylor
+
+Behdad Esfahbod
+Email: behdad@gnome.org
+Userid: behdad
diff --git a/Makefile.am b/Makefile.am
new file mode 100755 (executable)
index 0000000..01aa688
--- /dev/null
@@ -0,0 +1,103 @@
+## Process this file with automake to create Makefile.in.
+
+SUBDIRS= pango modules pango-view examples docs tools tests
+
+EXTRA_DIST =                   \
+       autogen.sh              \
+       pango.pc.in             \
+       pangocairo.pc.in        \
+       pangox.pc.in            \
+       pangoxft.pc.in          \
+       pangoft2.pc.in          \
+       pangowin32.pc.in        \
+       pango-uninstalled.pc.in         \
+       pangocairo-uninstalled.pc.in    \
+       pangox-uninstalled.pc.in        \
+       pangoxft-uninstalled.pc.in      \
+       pangoft2-uninstalled.pc.in      \
+       pangowin32-uninstalled.pc.in    \
+       ChangeLog.pre-1-0       \
+       ChangeLog.pre-1-2       \
+       ChangeLog.pre-1-4       \
+       ChangeLog.pre-1-6       \
+       ChangeLog.pre-1-8       \
+       ChangeLog.pre-1-10      \
+       ChangeLog.pre-1-12      \
+       ChangeLog.pre-1-14      \
+       ChangeLog.pre-1-16      \
+       ChangeLog.pre-1-18      \
+       ChangeLog.pre-1-20      \
+       ChangeLog.pre-1-23      \
+       MAINTAINERS             \
+       HACKING                 \
+       README.win32            \
+       pango-zip.sh.in         \
+       sanitize-la.sh          \
+       pango.doap
+MAINTAINERCLEANFILES = \
+       $(srcdir)/INSTALL \
+       $(srcdir)/aclocal.m4 \
+       $(srcdir)/autoscan.log \
+       $(srcdir)/compile \
+       $(srcdir)/config.guess \
+       $(srcdir)/config.h.in \
+       $(srcdir)/config.sub \
+       $(srcdir)/configure.scan \
+       $(srcdir)/depcomp \
+       $(srcdir)/install-sh \
+       $(srcdir)/ltmain.sh \
+       $(srcdir)/missing \
+       $(srcdir)/mkinstalldirs \
+       $(srcdir)/omf.make \
+       $(srcdir)/xmldocs.make \
+       $(srcdir)/gtk-doc.make \
+       $(srcdir)/ChangeLog \
+       `find "$(srcdir)" -type f -name Makefile.in -print`
+
+### ChangeLog generation
+
+CHANGELOG_START = 1.23.0^^
+
+ChangeLog: $(srcdir)/ChangeLog
+$(srcdir)/ChangeLog:
+       $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \
+         (GIT_DIR=$(top_srcdir)/.git ./missing --run \
+          git log $(CHANGELOG_START).. --stat) | fmt --split-only > $@.tmp \
+         && mv -f $@.tmp $@ \
+         || ($(RM) $@.tmp; \
+             echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
+             (test -f $@ || echo git-log is required to generate this file >> $@)); \
+       else \
+         test -f $@ || \
+         (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
+         echo A git checkout and git-log is required to generate this file >> $@); \
+       fi
+.PHONY: $(srcdir)/ChangeLog
+
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pango.pc
+
+if HAVE_CAIRO
+pkgconfig_DATA += pangocairo.pc
+endif
+
+if HAVE_X
+pkgconfig_DATA += pangox.pc
+endif
+
+if HAVE_XFT
+pkgconfig_DATA += pangoxft.pc
+endif
+
+if HAVE_FREETYPE
+pkgconfig_DATA += pangoft2.pc
+endif
+
+if HAVE_WIN32
+pkgconfig_DATA += pangowin32.pc
+endif
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man --disable-doc-cross-references
+
+-include $(top_srcdir)/git.mk
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..929ed92
--- /dev/null
@@ -0,0 +1,949 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_CAIRO_TRUE@am__append_1 = pangocairo.pc
+@HAVE_X_TRUE@am__append_2 = pangox.pc
+@HAVE_XFT_TRUE@am__append_3 = pangoxft.pc
+@HAVE_FREETYPE_TRUE@am__append_4 = pangoft2.pc
+@HAVE_WIN32_TRUE@am__append_5 = pangowin32.pc
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(srcdir)/pango-uninstalled.pc.in $(srcdir)/pango-zip.sh.in \
+       $(srcdir)/pango.pc.in $(srcdir)/pangocairo-uninstalled.pc.in \
+       $(srcdir)/pangocairo.pc.in \
+       $(srcdir)/pangoft2-uninstalled.pc.in $(srcdir)/pangoft2.pc.in \
+       $(srcdir)/pangowin32-uninstalled.pc.in \
+       $(srcdir)/pangowin32.pc.in $(srcdir)/pangox-uninstalled.pc.in \
+       $(srcdir)/pangox.pc.in $(srcdir)/pangoxft-uninstalled.pc.in \
+       $(srcdir)/pangoxft.pc.in $(top_srcdir)/configure AUTHORS \
+       COPYING ChangeLog INSTALL NEWS THANKS compile config.guess \
+       config.sub depcomp install-sh ltmain.sh missing
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = pango.pc pangox.pc pangowin32.pc pangoft2.pc \
+       pangoxft.pc pangocairo.pc pango-uninstalled.pc \
+       pangox-uninstalled.pc pangowin32-uninstalled.pc \
+       pangoft2-uninstalled.pc pangoxft-uninstalled.pc \
+       pangocairo-uninstalled.pc pango-zip.sh
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-exec-recursive install-info-recursive \
+       install-recursive installcheck-recursive installdirs-recursive \
+       pdf-recursive ps-recursive uninstall-info-recursive \
+       uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfig_DATA)
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+GZIP_ENV = --best
+DIST_ARCHIVES = $(distdir).tar.bz2
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = pango modules pango-view examples docs tools tests
+EXTRA_DIST = \
+       autogen.sh              \
+       pango.pc.in             \
+       pangocairo.pc.in        \
+       pangox.pc.in            \
+       pangoxft.pc.in          \
+       pangoft2.pc.in          \
+       pangowin32.pc.in        \
+       pango-uninstalled.pc.in         \
+       pangocairo-uninstalled.pc.in    \
+       pangox-uninstalled.pc.in        \
+       pangoxft-uninstalled.pc.in      \
+       pangoft2-uninstalled.pc.in      \
+       pangowin32-uninstalled.pc.in    \
+       ChangeLog.pre-1-0       \
+       ChangeLog.pre-1-2       \
+       ChangeLog.pre-1-4       \
+       ChangeLog.pre-1-6       \
+       ChangeLog.pre-1-8       \
+       ChangeLog.pre-1-10      \
+       ChangeLog.pre-1-12      \
+       ChangeLog.pre-1-14      \
+       ChangeLog.pre-1-16      \
+       ChangeLog.pre-1-18      \
+       ChangeLog.pre-1-20      \
+       ChangeLog.pre-1-23      \
+       MAINTAINERS             \
+       HACKING                 \
+       README.win32            \
+       pango-zip.sh.in         \
+       sanitize-la.sh          \
+       pango.doap
+
+MAINTAINERCLEANFILES = \
+       $(srcdir)/INSTALL \
+       $(srcdir)/aclocal.m4 \
+       $(srcdir)/autoscan.log \
+       $(srcdir)/compile \
+       $(srcdir)/config.guess \
+       $(srcdir)/config.h.in \
+       $(srcdir)/config.sub \
+       $(srcdir)/configure.scan \
+       $(srcdir)/depcomp \
+       $(srcdir)/install-sh \
+       $(srcdir)/ltmain.sh \
+       $(srcdir)/missing \
+       $(srcdir)/mkinstalldirs \
+       $(srcdir)/omf.make \
+       $(srcdir)/xmldocs.make \
+       $(srcdir)/gtk-doc.make \
+       $(srcdir)/ChangeLog \
+       `find "$(srcdir)" -type f -name Makefile.in -print`
+
+
+### ChangeLog generation
+CHANGELOG_START = 1.23.0^^
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pango.pc $(am__append_1) $(am__append_2) \
+       $(am__append_3) $(am__append_4) $(am__append_5)
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man --disable-doc-cross-references
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnits '; \
+             cd $(srcdir) && $(AUTOMAKE) --gnits  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+pango.pc: $(top_builddir)/config.status $(srcdir)/pango.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangox.pc: $(top_builddir)/config.status $(srcdir)/pangox.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangowin32.pc: $(top_builddir)/config.status $(srcdir)/pangowin32.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangoft2.pc: $(top_builddir)/config.status $(srcdir)/pangoft2.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangoxft.pc: $(top_builddir)/config.status $(srcdir)/pangoxft.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangocairo.pc: $(top_builddir)/config.status $(srcdir)/pangocairo.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pango-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/pango-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangox-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/pangox-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangowin32-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/pangowin32-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangoft2-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/pangoft2-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangoxft-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/pangoxft-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pangocairo-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/pangocairo-uninstalled.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+pango-zip.sh: $(top_builddir)/config.status $(srcdir)/pango-zip.sh.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+install-pkgconfigDATA: $(pkgconfig_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
+       @list='$(pkgconfig_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+         $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+       done
+
+uninstall-pkgconfigDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgconfig_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @case `sed 15q $(srcdir)/NEWS` in \
+       *"$(VERSION)"*) : ;; \
+       *) \
+         echo "NEWS not updated; not releasing" 1>&2; \
+         exit 1;; \
+       esac
+       $(am__remove_distdir)
+       mkdir $(distdir)
+       $(mkdir_p) $(distdir)/. $(distdir)/docs $(distdir)/pango $(distdir)/tests
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(mkdir_p) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+       check-am clean clean-generic clean-libtool clean-recursive \
+       ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+       dist-shar dist-tarZ dist-zip distcheck distclean \
+       distclean-generic distclean-hdr distclean-libtool \
+       distclean-recursive distclean-tags distcleancheck distdir \
+       distuninstallcheck dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-pkgconfigDATA install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic maintainer-clean-recursive \
+       mostlyclean mostlyclean-generic mostlyclean-libtool \
+       mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-info-am \
+       uninstall-pkgconfigDATA
+
+
+ChangeLog: $(srcdir)/ChangeLog
+$(srcdir)/ChangeLog:
+       $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \
+         (GIT_DIR=$(top_srcdir)/.git ./missing --run \
+          git log $(CHANGELOG_START).. --stat) | fmt --split-only > $@.tmp \
+         && mv -f $@.tmp $@ \
+         || ($(RM) $@.tmp; \
+             echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
+             (test -f $@ || echo git-log is required to generate this file >> $@)); \
+       else \
+         test -f $@ || \
+         (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
+         echo A git checkout and git-log is required to generate this file >> $@); \
+       fi
+.PHONY: $(srcdir)/ChangeLog
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100755 (executable)
index 0000000..fd6743a
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,2450 @@
+Overview of changes between 1.26.0 and 1.26.1
+=============================================
+- Finally fix GPOS positioning and kerning with non-identity cairo matrices
+- [HB] Fix lookup_flag ignoring
+- Fix leak with non-mmapped fonts
+- Allow using uninstalled glib
+- Bugs fixed:
+    Bug 341481 - pangocairo kerning problem with nonidentity scaling
+    Bug 587768 - [patch] Don't build pango-view twice
+    Bug 594101 - [Indic] character class data updates to support unicode 5.1
+    Bug 596837 - Typo in pango_cairo_show_layout documentation
+
+Overview of changes between 1.25.6 and 1.26.0
+=============================================
+- New stable release series
+- Bugs fixed:
+       Bug 595539 - Regressions in rendering certain Thai sequences
+
+Overview of changes between 1.25.5 and 1.25.6
+=============================================
+- Fix a couple of array overflow bugs
+- Bugs fixed:
+    Bug 593240 - updating pango to latest git master makes things crash
+    Bug 593231 - < c99 compiler dislikes ValueRecord
+
+Overview of changes between 1.25.4 and 1.25.5
+=============================================
+- Minor HarfBuzz code shuffling
+- Bugs fixed:
+    Bug 592484 -  invalid write in HB
+    Bug 592194 -  Fix missing _SC_PAGE_SIZE macro
+
+Overview of changes between 1.25.3 and 1.25.4
+=============================================
+- Fix various possible overflows in HarfBuzz
+- Improve HB font sanitizing
+- Improved win32 performance
+- Really fix ming32 build issues
+- Re-enable introspection
+- Bugs fixed:
+    Bug 592131 -  Add AM_SILENT_RULES
+    Bug 592036 - integer overflow bug causes misrendering of Nepali
+           characters
+    Bug 591511 – hh-blob.c does not compile using mingw on windows
+
+Overview of changes between 1.25.2 and 1.25.3
+=============================================
+- Fix couple of crashers
+- Enforce -fno-exceptions better, should fix build issues for
+  distros on x86-64.
+- Call mprotect() only when available.
+- New public API: pango_glyph_item_get_logical_widths()
+- Remove G_GNUC_PURE attr from pango_glyph_string_get_width()
+- Fix buffer corruption in HarfBuzz
+- Bugs fixed:
+    Bug 591413 – needs to link with libstdc++
+    Bug 591511 – hb-blob.c does not compile using mingw on windows
+    Bug 591557 – [HB] crash scrolling the evolution message list
+    Bug 591576 – crashed with SIGSEGV at pango
+    Bug 591465 – Gimp crashes upon opening the font selection dialog
+
+Overview of changes between 1.25.1 and 1.25.2
+=============================================
+- Tweak C++ compiler options.  If you get link errors with gcc on
+  x86-64 about __gxx_personality_v0(), make sure your CXXFLAGS does
+  not have -fexceptions.  This will be fixed in Pango itself later.
+- Fix crasher with gzipped fonts.
+    Bug 591409 – crash in firefox.  Handle non-mmapped FT_Face
+
+Overview of changes between 1.24.5 and 1.25.1
+=============================================
+- Merge harfbuzz-ng: brand new OpenType Layout engine
+  Currently is not very portable.  Will be fixed as
+  reports come in.
+
+- Port to ATSUI backend to use CoreText instead of ATS
+- New public API:
+
+       pango_gravity_get_for_script_and_width()
+
+- Misc bug fixes
+    Bug 590042 – pango-view.1 manpage should not be gzipped
+    Bug 410169 – gravity problem with Common chars
+    Bug 589113 – Some characters rotated incorrectly in vertical text
+    Bug 582851 -- Little fix for compiling with Cygwin
+    Bug 588060 -- Fonts missing on Cygwin
+
+Overview of changes between 1.24.4 and 1.24.5
+=============================================
+- Build introspection again
+- Misc bug fixes
+       Bug 589133 – Firefox 3.5 complains about invalid weak references
+       Bug 585806 – crash during pango_fc_font_map_shutdown
+       Bug 588678 – pango crash: install a new theme from
+
+Overview of changes between 1.24.3 and 1.24.4
+=============================================
+- Misc bug fixes
+    Bug 586814 – Crashes related to fontmap destruction after upgrade
+
+Overview of changes between 1.24.2 and 1.24.3
+=============================================
+- Fix build with new automake
+- Misc bug fixes
+    Bug 585337 – Fails to install: install: will not overwrite
+       just-created
+    Bug 585164 – 'man preload' shows man page for pango-view
+    Bug 584328 – Persian sample text is not good
+    Bug 583250 – pango_font_metrics_get_approximate_char_width is
+           wrong when LANG=fa_IR
+
+Overview of changes between 1.24.1 and 1.24.2
+=============================================
+- Misc bug fixes
+    Bug 580987 – SIGFPE in pango_glyph_string_index_to_x
+    Bug 580273 – Font metrics functions incorrectly listed as reporting
+           point sizes
+    Bug 579694 – Cygwin parallel-build patch
+    Bug 578944 – pango-1.24.1 fails its testsuite
+    Bug 578935 – Syntax error (missing semicolon) in
+           pango/pangowin32-fontmap.c
+
+Overview of changes between 1.24.0 and 1.24.1
+=============================================
+- Fix a couple of crashers
+- Fix minor pangofc API semantics breakage
+- Better handle SFNT fonts in dfont containers
+- Improved docs
+- Improved Indic shaper for new Unicode 5.1 characters
+- Misc bug fixes
+- Bugs fixed in this release:
+
+    Bug 577952 – Error loading {GDEF,GSUB,GPOS} table 0x6EAD
+    Bug 578336 – ABI breakage from 1.22 to 1.24 in fontmap field
+       of PangoFcFont
+    Bug 556132 – gnome-panel crashed with SIGSEGV in
+       g_cclosure_marshal_VOID__BOXED()
+    Bug 571291 – Unicode 5.1 support in pango - Indic Lanuages
+    Bug 576298 – Fails to link pango-view if --without-x is specified
+       but cairo has X11 support
+
+Overview of changes between 1.23.0 and 1.24.0
+=============================================
+- pango-view improvements:
+
+  * pango-view -q now works without a X server.
+
+  * Ability to save to PS, EPS, PDF, and SVG files.  Filetype is
+    detected from output file extension.
+
+  * New options --foreground, --background, and --annotate.
+
+  * Now installs a manual page, thanks to help2man.
+
+- PangoFc API changes:
+
+  * PangoFcFont now has a "fontmap" property that subclasses can use
+    at construction time to setup the font->fontmap link.
+
+  * New backend-public API:
+
+       pango_fc_font_map_find_decoder()
+
+- Misc optimizations
+- Build fixes
+- Misc bug fixes
+- Bugs fixed in this release:
+    Bug 547963 – man page for pango-view
+    Bug 502804 – pango-view or pangocairo-view option to annotate
+    Bug 502801 – per-backend pango-view options
+    Bug 502805 – pango-view option for foreground/background color
+    Red Hat Bug 490331 -  Crash of galeon in libpango
+    Bug 523166 – pango-view opens display even when invoked with -q
+    Bug 567160 – Share cmap cache between PangoFcFont's of the same face
+    Red Hat Bug 487593 -  crash changing language in gdm
+    Bug 572662 – Remove deprecated GTK+ symbols
+    Bug 572529 – Poor -I ordering can break build
+
+Overview of changes between 1.22.4 and 1.23.0
+=============================================
+- Change the PangoFc font loading API to allow for lazy loading of fonts.
+- Add private PangoFcFontset that loads fallback fonts as needed.
+- Call FcFontMatch() and only if fallback fonts are needed call FcFontSort().
+- Optimize HarfBuzz number of malloc calls
+- Don't malloc megs of unused memory in HarfBuzz
+- Print-out, and parse, numeric styles correctly.  Things like
+  "DejaVu Sans weight=100" parse as font description now.
+- New public API:
+
+       Add two new public macros:
+
+               PANGO_ATTRIBUTE_INDEX_FROM_TEXT_BEGINNING
+               PANGO_ATTRIBUTE_INDEX_TO_TEXT_END
+
+       Add new public enum values:
+       
+               PANGO_WEIGHT_BOOK
+               PANGO_WEIGHT_ULTRAHEAVY
+               PANGO_WEIGHT_THIN
+               PANGO_WEIGHT_MEDIUM
+
+- Misc bug fixes
+- Bugs fixed in this release:
+       Bug 569763 – pango doesn't like font descriptions without family!
+       Bug 560792 – Make PangoLayoutLine with line->layout==NULL renderable
+       Bug 567392 – Abiword crashes in pango when opening document with
+               certain locales
+       Bug 566727 – PangoFontsetLazy
+       Bug 567165 – Apply all pattern matrices
+       Bug 567934 – Add introspection support inside pango
+       Bug 549532 – Correction to the sample string for Hindi in
+               pango-language-sample-table.h
+       Bug 566726 – Minor optimization
+       Bug 566941 – Add PANGO_ATTRIBUTE_INDEX_FROM_TEXT_BEGINNING and
+               PANGO_ATTRIBUTE_INDEX_TO_TEXT_END
+       Bug 551469 – Fold '@' to '-' when parsing PangoLanguages
+       Bug 328206 – Update/remove some old files
+       Bug 166709 – Handle font variants more consistently
+       Bug 166676 – pango_fc_font_map_finalize
+       Bug 164001 - pango-querymodules doesn't work uninstalled on win32
+       Bug 384362 – pango can't select some font styles
+       Bug 168085 – numeric styles in pango_font_description_to_string()
+       Bug 529591 – Code related to malayalam is misplaced.
+               Patch from Rahul Bhalerao
+       Bug 515807 – Don't bind modules lazily
+       Bug 512662 – Update check.docs for pango-undeclared.txt
+       Bug 565644 – Maybe pango_font_descriptions_free is deprecated
+       Bug 469049 – Fix all compiler warnings
+       Bug 565379 – pango_font_description_better_match some style attributes
+               of old_match are not checked
+       Bug 564877 – pango-engine.h: PANGO_MODULE_PREFIX and G_MODULE_EXPORT
+
+Overview of changes between 1.22.3 and 1.22.4
+=============================================
+- Misc bug fixes
+- Improved docs
+- Bugs fixed in this release:
+       Bug 564644 – Not complete description of the
+               pango_font_description_better_match function
+       Bug 563898 – Generated output is not deterministic
+       Bug 563803 – pango_renderer_finalize fails to call parent finalize
+       Bug 499626 – Space should be optional after comma in
+               PangoFontDescription input string
+       Bug 499624 – Spaces around commas in PangoFontDescription family name
+               should be trimmed
+       Bug 563557 – set g_get_prgname() in fc pattern
+       Bug 563356 – The input area of firefox and the blank width after text
+               in gnome-menu was stretched too wide, under pango-1.22.3
+       Bug 562574 – Pangocariowin32 is leaking every cairo font it ever
+               creates
+
+Overview of changes between 1.22.2 and 1.22.3
+=============================================
+- Minor bug fix with matrix operations
+- Fix build with older compilers
+- Bugs fixed in this release:
+       Bug 561779 – incorrect calculations in pango_matrix_concat
+               implementation
+       Bug 560730 – pango 1.22.2 build failure on Solaris 10, too many array
+               initializers in pango-language.c
+       Bug 561740 – Use stack allocation for thai_engine_break
+
+Overview of changes between 1.22.1 and 1.22.2
+=============================================
+- Fix crasher when a PangoFcFontMap was freed before its fonts.
+- Mark monospace fonts as monospace in the pangoatsui backend.
+- Fix font description parsing to better handle "normal".
+- Bugs fixed in this release:
+       Bug 558254 – Internal reference handling messed up
+       Bug 558107 – is_monospace always returns FALSE in pangoatsui
+       Bug 557620 – pango_font_description_from_string not correct
+
+Overview of changes between 1.22.0 and 1.22.1
+=============================================
+- Fix crasher when freeing PangoLayoutIter's
+- Fix loading of bogus OpenType anchor tables
+- Fix OpenType CursiveChain positioning
+- Misc bug fixes
+- Bugs fixed in this release:
+       Bug 528272 – "Error loading GPOS table 5503" when using katakana
+               characters
+       Bug 552107 – Small libtool fixes
+               Patch by Patryk Zawadzki
+       Bug 539623 – document that pango_color_parse accepts NULL
+       Bug 555219 – Memory leak when using pango_layout_iter_copy
+               Patch from Falk Rohsiepe
+       Bug 553345 – Japanese pangram.
+               Patch from  Takeshi AIHANA
+
+Overview of changes between 1.21.6 and 1.22.0
+=============================================
+- Require cairo >= 1.7.6.
+- Improved Romanian sample text
+- Don't use deprecated glib win32 API
+- Misc bug fixes
+- Bugs fixed in this release:
+       Bug 552993 – Romanian pangram
+       Bug 551865 – Can't change justification of a PangoLayout after first
+               draw
+       Bug 551416 - pangowin32-fontcache.c: argument is different type
+
+Overview of changes between 1.21.5 and 1.21.6
+=============================================
+- Win32 cross-compiling build system fix
+- Improve language sample strings.
+- Bugs fixed in this release:
+       Bug 550659 – configure.in ignores a win32 backend only scenario
+       Bug 549758 – Swedish font sample text could use punctuation
+       Bug 549522 – New pt_BR pangram for pango
+       Bug 549520 – fr sample string
+
+Overview of changes between 1.21.4 and 1.21.5
+=============================================
+- Make the reference the font->fontmap reference weak.  Previously all
+  fontmaps had circular references to their fonts and back, making them
+  leak instead of being freed upon finalization.  Now they all clean after
+  themselves.  There's a slight semantic change though, that a PangoFont does
+  not keep its fontmap alive anymore, so that's up to the user.  But then
+  again, finalizing fontmaps is not a good idea to begin with.
+
+- Improve pango_language_get_sample_string() to add language sample texts that
+  are actually usable.  Compiled from a variety of sources.
+  See pango-language-sample-table.h.
+
+- In pango_language_get_sample_string() use default language if provided
+  language is NULL.
+
+- Update OpenType language-system tags to OpenType 1.5 draft intersected with
+  ISO639-3 of 2008/08/04.
+
+- New API additions:
+       Add a minor new public API:
+
+               pango_language_get_scripts()
+       
+       This is what pango_language_includes_script() has been using
+       internally.  Previously one had to call that function over all
+       possible script values to determine which scripts a language
+       uses.  The new API makes that much easier.
+
+- Bugs fixed in this release:
+       Bug 549003 – pango_layout_set_height(): layout should not be cleared
+                    unless required
+       Bug 143542 – PangoFT2Fontmap leak
+       Bug 314094 – Get rid of poutpourri default sample string
+       Bug 473806 – Improve pango_language_get_sample_string()
+       Bug 473805 – Add API enumerating scripts for a language
+       Bug 470895 – Improve OpenType language tag list
+       Bug 547432 – Deprecation of pango_(backend)_font_map_create_context()
+                    not clean
+
+Overview of changes between 1.21.3 and 1.21.4
+=============================================
+- Use cairo_show_text_glyphs() if target cairo surface supports that.
+  This is done by adding a new PangoRenderer method, draw_glyph_item().
+  Custom PangoRenderer implementations that delegate to pango_cairo
+  may want to implement this method if they target PDF files.
+- Requires cairo >= 1.7.4 now
+- Win32 build improvements
+- Justify lines broken by U+2028 LINE SEPARATOR
+- Various small fixes and improvements
+- New API additions:
+
+       New public API:
+
+               PangoRenderer::draw_glyph_item()
+               pango_renderer_draw_glyph_item()
+
+       Make layout and layout-line default renderers go through
+       draw_glyph_item(), which then by default falls back to
+       draw_glyphs().  The advantage in draw_glyph_item() is that it
+       has access to the text and cluster information.
+
+       New public API, for iterating a PangoGlyphItem:
+
+               PangoGlyphItemIter
+               PANGO_TYPE_GLYPH_ITEM_ITER
+               pango_glyph_item_iter_copy()
+               pango_glyph_item_iter_free()
+               pango_glyph_item_iter_init_start()
+               pango_glyph_item_iter_init_end()
+               pango_glyph_item_iter_next_cluster()
+               pango_glyph_item_iter_prev_cluster()
+
+       Make the following previously backend-only API public:
+
+               pango_context_new()
+               pango_context_set_font_map()
+
+       This also means that bindings are recommended to allow
+       instantiation of pango.Context.  This was discouraged before.
+
+       New public API:
+
+               pango_font_map_create_context()
+
+       This is equivalent to pango_context_new() followed by an
+       immediate pango_context_set_font_map().  This change also
+       deprecates various per-fontmap-type context constructors:
+
+       Deprecate pango_cairo_font_map_create_context().
+       Deprecate pango_fc_font_map_create_context().
+       Deprecate pango_ft2_font_map_create_context().
+       Deprecate pango_win32_get_context().
+       Deprecate pango_xft_get_context().
+       Deprecate pango_x_get_context().
+
+       Language bindings are encouraged to bind
+       pango.Fontmap.create_context() and remove the create_context()
+       method from subclass implementations.
+
+
+- Bugs fixed in this release:
+       Bug 547303 – pango_layout_get_cursor_pos crashes on certain text
+               buffers
+       Fedora Bug 457883 - Sindhi Characters are not supported in
+               pango [U+097B-U+097F]
+               Patch from Pravin Satpute
+       Bug 441654 – prefix fails when more than one base characters (as
+               conjuncts) present after a half form the next prefix renders
+               incorrectly
+               Patch from  Rahul Bhalerao
+       Bug 546534 – pango_cairo_font_map_set_default(NULL) errs
+       Bug 431394 – Use pango_glyph_item_iter in more places
+       Bug 377948 – Make pango_glyph_item_iter public
+       Bug 472625 – Add draw_glyph_item() to PangoRenderer
+       Bug 540592 – Crash in HB_GSUB_Apply_String with Linux-Libertine font
+       Bug 540036 – Doesn't link to fontconfig
+       Bug 380094 – Fix split matra rendering bug for Kannada language
+       Bug 536017 – Remove SF_MPRE_FIXUP from Sinhala script flags
+               Patch by Harshula
+
+Overview of changes between 1.21.2 and 1.21.3
+==============================================
+- Various small fixes and improvements
+- Bugs fixed in this release:
+       Bug 538661 – Improve pango_cairo_context_update_context()
+       Bug 536190 – Make pango_fc_font_map_clear_cache() public?
+       Bug 537258 – Add a pango_language_to_string() function
+       Bug 537257 – pango_language_from_string(NULL) not happy
+       Bug 537186 – Make PangoFcFont pattern property readable
+
+Overview of changes between 1.21.1 and 1.21.2
+==============================================
+- Various win32 font handling improvements
+- Bugs fixed in this release:
+       Bug 510299 – OpenType font variants are broken with ATSUI/Cairo
+       Bug 436363 - Bold and Bold Italic style of MS-Mincho font are not
+               listed in GtkFontSelection
+       Bug 523193 – Vista Hebrew, CJK fonts to builtin win32 pango aliases
+               Patch by Daniel Atallah.
+
+Overview of changes between 1.21.0 and 1.21.1
+==============================================
+- Partial work to make pango_break() exactly follow Unicode TR#14 and TR#29.
+  The Grapheme Boundaries and Word Boundaries now work.  For word boundaries,
+  a new member was added to PangoLogAttr.  Sentence Boundaries and Line Breaks
+  to follow in the next release.
+- Err if no cairo font backends found
+- Misc bug fixes
+- New public API:
+       Add new PangoLogAttr member is_word_boundary, that implements UAX#29's
+       Word Boundaries semantics.  The is_word_start and is_word_end members
+       will change implementation later on to be consitent with the word
+       boundaries.
+
+- Bugs fixed in this release:
+       Bug 531242 – Leak when calculating win32 font coverage
+               Patch from Daniel Atallah
+       Bug 530757 – Docs build breaks because of hash sign in URL in <ulink...>
+       Bug 530685 – Pango no longer using cairo as a backend as of pango 1.19.4
+       Part of Bug 97545 – Make pango_default_break follow Unicode TR #29
+
+Overview of changes between 1.20.2 and 1.21.0
+==============================================
+- Require cairo >= 1.6.4.
+- Write out HarfBuzz errors as hex.
+- Add a section in the docs for bidirectional text.
+- Improved hex-box rendering in the cairo backend.
+- Add some aliases for <span> tag attributes.
+- Preserve current-point around pango_cairo_* functions.
+- New public API:
+       pango_attr_type_get_name()
+       enum PangoBidiType;
+       pango_bidi_type_get_type()
+       pango_bidi_type_for_unichar()
+       pango_layout_get_baseline()
+       pango_cairo_create_context()
+       pango_cairo_font_map_set_default()
+
+- Bugs fixed in this release:
+       Bug 515432 – Add function to get bidirectional character type of a
+               unicode character
+               Patch from Jürg Billeter
+       Bug 517119 – Add pango_cairo_create_context()
+       Bug 404416 – pango_layout_get_baseline or something
+       Bug 474706 – cairo hexbox looks ugly
+       Bug 490669 – add some <span> attribute aliases
+       Bug 501334 – Make pango_cairo_[show_]*[_path]() functions preserve
+               current point
+       Bug 514617 – Add pango_cairo_font_map_set_default()
+       Bug 511183 – Add pango_attr_type_get_name()
+
+Overview of changes between 1.20.1 and 1.20.2
+==============================================
+- Really fix build on OS X.
+
+Overview of changes between 1.20.0 and 1.20.1
+==============================================
+- Update to Unicode Character Databse 5.1.0.  This adds new entries to
+  the PangoScript enum.  Requires glib >= 2.16.3 for the update Unicode
+  data there, but not bumping the requirement in a stable point release.
+- Try making our OS X stuff compile with latest cairo 1.5.x snapshots
+  that renamed cairo-atsui to cairo-quartz-font, as well as older versions.
+- Minor bug fixes.
+
+Overview of changes between 1.19.4 and 1.20.0
+==============================================
+- New stable release!
+- Bugs fixed in this release:
+       Bug 518084 – Thai is not Virama language
+               Patch from Theppitak Karoonboonyanan
+
+Overview of changes between 1.19.3 and 1.19.4
+==============================================
+- Make Win32 backend be able to use Type1 fonts
+- Fixed blocker bug with pango_layout_set_height() and positive height.
+- Fixed small leak in ATSUI backend.
+- Improved docs.
+- Bugs fixed in this release:
+       Bug 511172 – pango_layout_set_height() with positive height always
+               shows at least two lines
+       Bug 515484 – Uniscribe interface handles surrogate
+               pairs incorrectly
+       Bug 515484 – Pango on Windows is missing Type 1
+               font support
+               Patch from Adrian Johnson.
+       Bug 517083 – pango modules: wrong fallback adding code?
+       Bug 515484 – Variable is initialized twice
+       Bug 504810 – Samvruthokaram (combination of U+0D41 and U+0D4D) is not
+               rendered correctly
+               Patch from Praveen A
+       Bug 496244 – Don't use freetype-config, use pkg-config
+       Bug 512566 – dont' use deprecated macro
+               Patch from Christian Persch
+       Bug 512473 – [patch] gtk-doc warnings
+
+Overview of changes between 1.19.2 and 1.19.3
+==============================================
+- pango_layout_get_pixel_extents() and pango_layout_line_get_pixel_extents()
+  now round extents to pixels inclusively.  That is, pass both ink_rect and
+  logical_rect as first argument to pango_extents_to_pixels().
+
+- Rename pango_extents_to_pixels() function arguments from @ink_rect and
+  @logical_rect to @inclusive and @nearest.  Given that this API is a
+  fairly new addition and not commonly used, language bindings are
+  encouraged to update their argument names accordingly.  Moreover, they
+  are encouraged to wrap this function as two different calls:
+  extents_to_pixels_inclusive() and extents_to_pixels_nearest(), or
+  similar conventions that best reflect their native language.
+
+- HarfBuzz was relicensed to a more generous and simpler license.
+  Adapt.  See pango/opentype/COPYING for the new license which is
+  LGPL-compatible.
+
+- New public API:
+
+       pango_layout_set_height()
+
+  This sets the height to which the #PangoLayout should be ellipsized at.
+  There are two different behaviors, based on whether @height is positive or
+  negative.
+
+  If @height is positive, it will be the maximum height of the layout.  Only
+  lines would be shown that would fit, and if there is any text ommitted, an
+  ellipsis added.  At least one line is included in each paragraph regardless
+  of how small the height value is.  A value of zero will render exactly one
+  line for the entire layout.
+
+  If @height is negative, it will be the (negative of) maximum number of lines
+  per paragraph.  That is, the total number of lines shown may well be more
+  than this value if the layout contains multiple paragraphs of text.  The
+  default value of -1 means that first line of each paragraph is ellipsized.
+
+  Height setting only has effect if a positive width is set on @layout and
+  ellipsization mode of @layout is not %PANGO_ELLIPSIZE_NONE.
+  The behavior is undefined if a height other than -1 is set and ellipsization
+  mode is set to %PANGO_ELLIPSIZE_NONE, and may change in the future.
+
+  There are still bugs remaining to be fixed, notably bug 511172 (which will
+  be fixed before 1.20), and bug 511171 (which will be fixed in a future
+  version).
+
+- New command-line arguments to pango-view: --height and --single-par.
+
+- Make the following symbols available to engines:
+
+       PANGO_IS_OT_INFO
+       PANGO_IS_OT_RULESET
+       PANGO_OT_INFO
+       PANGO_OT_RULESET
+       PANGO_TYPE_OT_INFO
+       PANGO_TYPE_OT_RULESET
+       pango_ot_info_get_type
+       pango_ot_ruleset_get_type
+
+- Bugs fixed in this release:
+       Bug 508002 – change pango_layout_pixel_extents() to round logical rect
+               to be inclusive
+       Bug 469313 – Add pango_layout_set_height()
+       Bug 508179 – PangoGlyphUnit confusion
+       Bug 508381 – indent and center alignment don't mix
+       Bug 508007 – Add option for single-paragraph mode to pango-view
+       Bug 506284 – docs typo for pango_coverage_unref
+               Patch from Christian Persch
+       Bug 504802 – build failure: No rule to make target
+               `pango-querymodules.1', needed by `all-am'. Stop.
+       Bug 504585 – pango-querymodules.1 syntax error
+       Red Hat Bug 426178: gtkdoc-scan fails on pango
+
+Overview of changes between 1.19.1 and 1.19.2
+==============================================
+- Render a crossed box for each invalid input byte to pango_layout_set_text().
+  Previously we rendered an ASCII question mark instead.  The crossed box has
+  a glyph of value of PANGO_GLYPH_INVALID_INPUT.
+- Use pkg-config to detect cairo features [Benjamin Otte]
+- Improved docs.  Particularly, examples/cairo*.c have inline docs now.
+- New public macro:
+
+       PANGO_GLYPH_INVALID_INPUT
+
+- Bugs fixed in this release:
+       Bug 502926 – pango-1.16.4 configure bug: can fail to accept cairo
+       Bug 399573 – replace strtoul in pango-markup.c with pango_scan_int()
+       Bug 478914 – Use something invalid instead of '?' when validating
+               input text
+       Bug 501938 – Arabic shaping broken with vertical layout with
+               vertical-hint=line
+       Bug 501575 – Compile errors
+               Patch from Jens Granseuer
+
+Overview of changes between 1.19.0 and 1.19.1
+==============================================
+- Various cleanup in the HarfBuzz code and merging with upstream/Qt changes.
+- Built-in pango.aliases file for Win32 default aliases.
+- Document cairo examples and misc documentation improvements.
+- Bugs fixed in this release:
+       Bug 485536 – underline_position can be zero
+       Bug 500549 – pangocairo.h should include pango.h and cairo.h
+       Bug 492517 – Built-in default aliases file
+       Bug 495091 – pango-utils.c:variable is declared at middle of block
+
+Overview of changes between 1.18.3 and 1.19.0
+==============================================
+- Update list of languages to that of fontconfig-2.4.91.
+- Various optimizations, making rendering the same Pango layout using
+  changing cairo matrices much faster.
+
+- Make sure all boxed type copy/free functions accept NULL as legitimate
+  input.  Previously most were g_return_[val_]if_fail()ing it.  This is
+  mostly for convenience when writing code in C.
+
+- Apply 'vkrn' GPOS feature in vertical writing.
+
+- In pangofc, set "pangoversion" in pattern passed to fontconfig,
+  such that font configuration can condition on being driven by Pango
+  or not.
+
+- Various optimizations and cleanups in the OpenType Layout engine,
+  aka HarfBuzz.
+
+
+- Changed APIs:
+
+  * All PangoAttribute constructors are changed to initialize the
+    attribute to the range [0..MAXUINT].  The range was undefined
+    previously.  All custom attribute constructors are recommended
+    to call the new pango_attribute_init() to do the same.
+
+  * Public API chance: Mark the following types as abstract:
+
+       PangoFont
+       PangoFontFace
+       PangoFontFamily
+       PangoFontMap
+       PangoFcFont
+       PangoFcFontMap
+
+    PangoContext may be marked so in the future too.
+
+  * Make following macros public.  Previously they were only
+    defined for backend/engine implementations.
+
+       PANGO_GLYPH_EMPTY
+       PANGO_GLYPH_UNKNOWN_FLAG
+       PANGO_GET_UNKNOWN_GLYPH()
+
+
+- New public API:
+       
+  * Convenience for initializing custom attributes:
+
+       pango_attribute_init()
+
+  * Adding boxed type for PangoGlyphItem:
+
+       PANGO_TYPE_GLYPH_ITEM
+       pango_glyph_item_copy()
+       pango_glyph_item_get_type()
+
+  * Add missing copy function for a boxed type in C:
+
+       pango_layout_iter_copy()
+
+  * Add missing getter:
+
+       pango_layout_iter_get_layout()
+
+  * Convenience for writing custom PangoRenderer's:
+
+       pango_renderer_get_layout()
+       pango_renderer_get_layout_line()
+
+  * PangoFc extensions to fontconfig's pattern syntax:
+
+       PANGO_FC_GRAVITY
+       PANGO_FC_VERSION
+
+
+- Bugs fixed in this release:
+       Bug 490661 – Pango Markup: Link to font_desc syntax explanation
+               Based on patch from Chris Toshok
+       Bug 489909 – pango_cairo_update_context() should ignore matrix
+               translation
+       Bug 488840 – harfbuzz: protect against ligid overflow
+       Bug 486932 – Apply vkrn GPOS feature in vertical writing
+       Bug 486951 – ChangeLog.pre-1-18
+       Bug 485621 – Get rid of freetype memory allocator in harfbuzz
+       Bug 485566 – Cache one OpenType Buffer
+       Bug 485559 – Boston Summit HarfBuzz optimizations
+       Bug 481537 – compiler warning fixes
+               Patch from Kjartan Maraas
+       Bug 478865 – Drastically reduce number of PangoFont objects created
+               for rotating text
+       Bug 472924 – Mark some classes abstract
+       Bug 472629 – Add pango_renderer_get_layout(_line)
+       Bug 472303 – Make PANGO_GLYPH_EMPTY and PANGO_GLYPH_UNKNOWN_FLAG public
+       Bug 471601 – Pass pango version information to fontconfig
+       Bug 471577 – GBoxed GType for PangoGlyphItem
+       Bug 471571 – Add pango_layout_iter_get_layout()
+       Bug 471568 – Optimizations in _pango_cairo_update_context()
+       Bug 469641 – Initialize attribute start/end to [0..MAXUINT]
+
+
+Overview of changes between 1.18.2 and 1.18.3
+==============================================
+- Two OpenType engine fixes.  Makes Nafees Nastaliq font
+  work great, and avoids warnings with some other fonts.
+- Fix minor leak in win32 backend.
+- Bugs fixed in this release:
+       Bug 483600 – Leak of font family name in
+       pango_win32_font_description_from_logfont(w)
+       Patch from Daniel Atallah
+
+Overview of changes between 1.18.1 and 1.18.2
+==============================================
+- Require libthai >= 0.1.9 for enabling thai-lang module
+- Misc bug fixes
+- Bugs fixed in this release:
+       Bug 474708 – pangocairo leaks memory
+       Bug 472891 – Bad consistency check in pango_get_log_attrs
+               Patch from Mathias Hasselmann
+       Bug 302952 – The placement of a diacritic marks for an arabic ligature
+               is not correct
+       Bug 410152 – testboundaries test fails
+
+Overview of changes between 1.18.0 and 1.18.1
+==============================================
+- Misc bug fixes, including fix for an infinite-loop bug.
+
+- Bugs fixed in this release:
+       Bug 470042 – missing Macedonian OT tag
+               Patch from Denis Jacquerye
+       Bug 468953 – pango-renderer.c: using function without prototype
+       Bug 463430 – Gets stuck while "formatting message"
+
+Overview of changes between 1.17.5 and 1.18.0
+==============================================
+- Make pango_script_for_unichar() just call g_unichar_get_script(),
+  and document that PangoScript and GUnicodeScript are interchangeable
+  enumerations.
+
+- Misc bug fixes
+
+- Bugs fixed in this release:
+       Bug 348348 – Add a way to get the script name of a gunichar
+       Bug 451682 – Cursor positioning for Sinhala is broken
+               Based on patch from Harshula
+       Bug 462137 – memory corruption in pango_default_break
+       Bug 462420 – Clicking on pixbuf should move the cursor to the position
+               nearest to the click point
+       Bug 462630 – pango_cairo_context_set_font_options() and some others
+               don't have a Since: tag
+       Bug 464183 – Minimum tab width enforcement in pango-layout breaks
+               TabArray positions
+               Patch by David Trowbridge
+       Bug 464270 – ellipsize doesn't work consistent
+       Bug 465174 – TextView is ignoring multiple consecutive \t's
+       Bug 466755 – pango hangul is crashing in gnome-about because it is
+               failing to retrieve a font.
+       Bug 467056 – Shape attribute handling is not consistent
+       Bug 467077 – Remove special-case for shape attribute in
+               pango_layout_line_index_to_x()
+
+Overview of changes between 1.17.4 and 1.17.5
+==============================================
+- Export PangoCairoFont and cleanup various standard macros.
+
+- Bugs fixed in this release:
+       Bug 150883 – Unicode LRO defect
+       Bug 449482 – Build error when xft not present
+       Part of Bug 347236 – provide pango_cairo_font_get_scaled_font
+
+Overview of changes between 1.17.3 and 1.17.4
+==============================================
+- Refactored the ATSUI font backend and install pangoatsui.h
+  that has a single function pango_atsui_font_get_atsu_font_id() and
+  a couple of types.
+
+- Bugs fixed in this release:
+       Bug 451547 – FAIL: runtests.sh
+       Bug 449543 - Ship pangoatsui.h
+
+Overview of changes between 1.17.2 and 1.17.3
+==============================================
+- Extensive pangocairo internal code refactoring and cleanup
+
+- New public API:
+
+       pango_font_face_is_synthesized()
+
+       pango_cairo_font_get_scaled_font()
+       pango_cairo_font_map_new_for_font_type()
+       pango_cairo_font_map_get_font_type()
+
+- New engine macros:
+       
+       PANGO_OT_TAG_MAKE()
+       PANGO_OT_TAG_MAKE_FROM_STRING()
+
+- New PangoFontFace method is_synthesized.
+
+- Misc bug fixes
+- Bugs fixed in this release:
+       Bug 337593 – move glyph extents code (and cache) from
+               pangocairo-*font.c into pangocairo-font.c
+       Bug 347235 – Add pango_cairo_font_map_get_font_type
+       Bug 347236 – provide pango_cairo_font_get_scaled_font
+       Bug 353291 – Provide pango_cairo_font_map_new_for_font_type
+       Bug 438801 – underline should add "error" type.
+       Bug 440588 – Add pango_font_face_is_synthesized()
+       Bug 445832 – pango_cairo_update_layout() always invalidates layout
+       Bug 446018 – Bus error in the pango_ot_tag_from_language()
+       Bug 446355 – the parsing with pango_parse_markup is not coherent
+       Bug 447189 – fonts.c: pango_font_face_is_synthesized returns NULL
+       Bug 447568 – improve docs on what absolute size means
+       Bug 448342 – pango_layout_index_to_line_x() counts lines from 1
+
+Overview of changes between 1.17.1 and 1.17.2
+==============================================
+- Rename recently added pango_ot_ruleset_get_for() to
+  pango_ot_ruleset_get_for_description().
+
+- New engine API: pango_ot_ruleset_new_from_description().
+
+- Treat Unknown script like Common and other non-"real" scripts.
+  [Martin Hosken]
+
+- Misc typo fixes [Peter Moulder]
+
+- Bugs fixed in this release:
+
+       Bug 443206 – PANGO_SCRIPT_UNKNOWN should not cause a run break
+       Patch from Martin Hosken
+
+Overview of changes between 1.17.0 and 1.17.1
+==============================================
+
+- Ported the rest of OpenType shapers to the new OpenType APIs and
+  added standard features to them: Hebrew, Indic, Khmer, Thai, and Tibetan.
+
+- Added N'Ko support to the Arabic module. [Eugeniy Meshcheryakov]
+
+- Small Indic module fix for Malayalam.
+
+- Fixed font metrics returned by the ATSUI backend. [Richard Hult]
+
+- Make itemization use pango_language_get_default() if context has no
+  language set on it.  Ditto for pango_context_get_metrics() if both
+  input language and context language are NULL.
+
+- Improved documentation on vertical text, also added stability note
+  to those parts of Pango API that are not indefinitely stable (shaper
+  and language engine APIs).
+
+- Misc bug fixes.
+
+- New OpenType engine API:
+
+       pango_ot_ruleset_get_feature_count()
+
+- Bugs fixed in this release:
+
+       Bug 357790 – Rendering problem for malayalam consonant RA (U+0D30)
+       Bug 385168 – indic, khmer, and tibetan modules don't apply ccmp
+       Bug 385477 – kern feature is not supported in OpenType layout for Tibetan.
+       Bug 433805 - [Atsui] Approximate char/digit width width often 0
+       Bug 436699 – N'Ko support
+       Bug 438705 – Test runs non-existent "/bin/bash" on HP-UX 11.11
+       Bug 438814 – synaptic crash with pango 1.17.0
+       Bug 440603 – Minor ABI change
+
+Overview of changes between 1.16.4 and 1.17.0
+==============================================
+
+General:
+
+- Text justification.  A simple justification algorithm is implemented
+  that tries to justify by expanding spaces in the line, and if none
+  found, by adjust letter spacing.  [Based on patch by Mathias
+  Hasselmann]
+
+- The pango_script_get_sample_language() function is modified to use
+  the value of environment variables PANGO_LANGUAGE or LANGUAGE
+  (checked in that order) to make guess better languages for scripts.
+  The env var should be a list of language tags, like "en:fa" for
+  example where in effect makes Pango choose Persian (fa) fonts
+  instead of Arabic (ar) fonts when a run of text in the Arabic script
+  is found in an otherwise non-Arabic layout.
+
+  This trick is also useful for East Asian languages.  For example a
+  Japanese user that cannot set her primary language to Japanese can
+  still set PANGO_LANGUAGE="ja" and Pango will map CJK characters to
+  Japanese.
+
+  The LANGUAGE env var is a standard gettext variable listing
+  languages the user wants to receive UI translated messages in.
+  However, since most packages don't provide separate English
+  translations, setting LANGUAGE="en:ja" doesn't have the intended
+  effect and UI messages will be shown in Japanese.  For these
+  situations one can use LANGUAGE="en:C:ja".  Pango skips the special
+  language tag 'C'.
+
+- Simplified embedded-shape rendering with pangocairo backends do.
+  [Richard Hult]
+
+- New header file: Moved PangoLanguage APIs into its own header
+  pango-language.h, which is included from pango-types.h.
+
+- ATSUI backend now lists synthesized italic faces like other
+
+- Misc optimizations and fixes.
+
+OpenType Layout Engine Improvements:
+
+- Vertical glyph variants are not selected in vertical text if the
+  font supports them.
+
+- Instead of hardcoded OpenType script tag in each module, and using
+  Default Language System unconditionally, Pango will now find and use
+  the script/lang-sys pair that best matches the detected script and
+  language of a run of text.  Moreover, it also applies the OpenType
+  'locl' feature.
+  
+  These, plus the PANGO_LANGUAGE env var, give font designers and
+  users lots of options to provide/choose language-specific glyph
+  variants.
+  
+  Only basic, arabic, and syriac modules updated to take advantage of
+  the new support so far.
+
+New pango-view command line options:
+
+       --align
+       --justify
+       --language
+
+Public API Changes:
+
+- New public pangocairo API:
+
+       PangoCairoShapeRendererFunc
+       pango_cairo_context_set_shape_renderer() 
+       pango_cairo_context_get_shape_renderer() 
+
+  These are used by the default pangocairo renderer to render shape
+  attributes (see examples/cairoshape.c).  Cairo-based PangoRenderer
+  implementations outside Pango may want to implement the draw_shape()
+  method similarly to provide compatibility with these new APIs.  (See
+  bug #437533 for GdkPangoRenderer for example.)
+
+- Other public API changes:
+
+       New is_expandable_space member in PangoLogAttr
+       New macro PANGO_UNITS_ROUND()
+
+- New OpenType engine API.  These are engine API, for use by Pango
+  modules, and typically need not to be bound by language bindings:
+
+       PANGO_OT_NO_FEATURE
+       PANGO_OT_NO_SCRIPT
+       PANGO_OT_TAG_DEFAULT_SCRIPT
+       PANGO_OT_TAG_DEFAULT_LANGUAGE
+       PangoOTFeatureMap
+       PangoOTRulesetDescription
+       pango_ot_ruleset_get_for()
+       pango_ot_ruleset_new_for()
+       pango_ot_ruleset_maybe_add_feature()
+       pango_ot_ruleset_maybe_add_features()
+       pango_ot_ruleset_description_hash()
+       pango_ot_ruleset_description_equal()
+       pango_ot_ruleset_description_copy()
+       pango_ot_ruleset_description_free()
+       pango_ot_tag_from_script()
+       pango_ot_tag_to_script()
+       pango_ot_tag_from_language()
+       pango_ot_tag_to_language()
+
+- Bugs fixed in this release:
+
+       Bug 64538 – pango_layout_set_justify() doesn't work
+       Bug 325714 – Pango should respect $LANGUAGE
+       Bug 414264 – Pango vertical writing support is different with real
+                    CJK usage.
+       Bug 416515 – Time is not aligned with date on vertical panel
+       Bug 429397 – Updated MS Mincho/Gothic are not listed in font dialog
+                    properly on Vista/
+       Bug 433805 – [Atsui] Approximate char/digit width width often 0
+                    (worked around)
+       Bug 434160 - [atsui] Italic versions of some faces can't be created
+       Bug 435709 – pango_cairo_context_[sg]et_shape_renderer()
+       Bug 355789 – Pango misaligns word-wrapped text due to trailing
+                    whitespace
+       Bug 436154 – Error building the pango.modules file while cross
+                    compiling
+       Bug 436988 – Adding PangoScript to PangoAnalysis
+       Bug 437534 – pango_language_includes_script is buggy
+
+Overview of changes between 1.16.3 and 1.16.4
+==============================================
+- Add new configure option --disable-doc-cross-references and make
+  sure releases are made using it.  Distributions are encouraged to
+  build with --enable-gtk-doc such that their Pango docs correctly
+  cross reference glib and cairo docs.
+- Bugs fixed in this release:
+       Bug 432991 – developer docs for libpango are broken
+
+Overview of changes between 1.16.2 and 1.16.3
+==============================================
+- Quantize kerning value if metrics hinting is on.  This greatly improves
+  screen text rendering with certain fonts like DejaVu Sans.
+  See: http://behdad.org/blog/mces/image/metricshinting-kerning.png
+- Improved hex-box positioning in the cairo backend
+
+Overview of changes between 1.16.1 and 1.16.2
+==============================================
+- Fixed various bug in the OpenType Layout code (HarfBuzz)
+- Improved documentation
+- Improved ATSUI backend
+- Misc build system fixes
+- Bugs fixed in this release:
+       Bug 417946 – pangowin32-fontmap.c:using function without prototype
+       Bug 419262 - Don't create coverage every time it's asked for
+
+Overview of changes between 1.16.0 and 1.16.1
+==============================================
+- Improved Win32 backend: The Win32 backend has been
+  updated to always require Uniscribe at compile-time (it still
+  is optional at run-time), and to use the wide-character variants
+  of Windows APIs which improves the backend in many ways.  The
+  1.16.0 release is obsolete as far as the Win32 backend is
+  concerned, and official DLLs were not built for it.
+- Misc build system fixes
+- Bugs fixed in this release:
+       Bug 110521 – can't find bold and/or italic fonts on win32
+       Bug 120195 – there are some functions in pangowin32-fontmap.c that
+               might maybe should be static
+       Bug 407315 – Use wide character Win32 API in the pangowin32 code
+       Bug 412654 – SED variable undefined in the `libtool --config' output
+               used by configure
+       Bug 414297 – Fails to build with --enable-static
+               --with-included-modules in thai lang module
+               Patch from Loïc Minier
+
+Overview of changes between 1.15.6 and 1.16.0
+==============================================
+- Improved docs, with an object hierarchy and cross references to glib and
+  cairo docs now (may require rebuilding the docs to correctly detect glib
+  and cairo prefixes).
+- Improved font selection for space characters
+- Misc build system fixes
+- Bugs fixed in this release:
+       Bug 407087 – autogen.sh wants automake-1.7
+       Bug 409212 – Missing link flag prevents build with "-z defs" ld flags
+                    Patch from Loïc Minier
+       Bug 355987 – choosing font/shaper for spaces breaks Arabic runs on
+                    spaces
+
+Overview of changes between 1.15.5 and 1.15.6
+==============================================
+- Fix possible crasher in win32 font selection [Owen Taylor]
+- Misc build fixes.
+- Bugs fixed in this release:
+       Bug 399738 – pango 1.15.5 won't compile on Mac OS X: 'FC_HINT_STYLE'
+               undeclared (first use in this function)
+       Bug 404295 – Crash initializing pango-win32 fontmap
+
+Overview of changes between 1.15.4 and 1.15.5
+==============================================
+- Fix the "menu accels are two chars wide" bug that was introduced in 1.15.4
+- Respect FC_HINT_STYLE in the ft2 backend.  Patch has been in Fedora for ages.
+- Require automake 1.9
+Bugs fixed in this release:
+       Bug 398238 – pangorc file missing from tests directory
+
+Overview of changes between 1.15.3 and 1.15.4
+==============================================
+General:
+- Finish vertical text support.
+- Fix various bugs that could cause ellipsization to stop prematurely.
+- Fix rendering of background color being off in presence of rise attribute.
+- Improved text-on-path example (examples/cairotwisted.c)
+
+Win32 Improvements:
+- Don't check for X and don't warn about missing fontconfig. [Tor Lillqvist]
+- Automatically use -mms-bitfields on Windows when building with gcc. [Tor]
+- Update makefile.msv. [Hans Breuer]
+
+Code base cleanups:
+- Whitespace cleanups.  Hopefully patches still apply using patch -l
+- Replace C++-style // comments with C-style /* */ ones.
+- Move the pango-view tool from examples/ into pango-view/.  The examples/
+  dir is still available and for simple examples only.
+
+Public API changes:
+
+- New PangoLayout query functions:
+
+       pango_layout_is_wrapped()
+       pango_layout_is_ellipsized()
+       pango_layout_get_unknown_glyphs_count()
+
+  The is_wrapped and is_ellipsized functions return whether the layout
+  had to wrap/ellipsize any paragraphs, as opposed to the get_wrap and
+  get_ellipsize that return the wrap/ellipsize mode set.
+
+- Misc new function:
+       pango_parse_enum()
+
+  This is more a convenience function for internal use, but set public
+  to go with other pango_parse_* functions.  Bindings should feel free
+  to ignore this.
+
+
+- New header files:
+
+  Moved gravity and matrix stuff into their own header files pango-gravity.h
+  and pango-matrix.h.  Both are included from pango-types.h.
+
+- Vertical text:
+
+  New attribute types:
+
+       PANGO_ATTR_GRAVITY
+       PANGO_ATTR_GRAVITY_HINT.
+
+  New enum type:
+
+       PangoGravityHint
+
+  New macro:
+
+       PANGO_GRAVITY_IS_VERTICAL()
+
+  New public functions:
+
+       pango_attr_gravity_new()
+       pango_attr_gravity_hint_new()
+       pango_gravity_hint_get_type
+       pango_context_set_gravity_hint()
+       pango_context_get_gravity_hint()
+       pango_gravity_get_for_matrix()
+       pango_gravity_get_for_script()
+
+  Removed:
+       pango_matrix_to_gravity()
+
+  replaced by pango_gravity_get_for_matrix()
+  
+  Gravity API added in previous releases:
+
+       PangoGravity
+        pango_gravity_get_type
+        pango_context_get_base_gravity
+        pango_context_get_gravity
+        pango_context_set_base_gravity
+       pango_font_description_get_gravity
+       pango_font_description_set_gravity
+       pango_gravity_to_rotation
+
+  A tip on using the vertical text support: If you just want to get correct
+  behavior in rotated labels (say, vertical Chinese/Japanese, but rotated
+  Latin, etc), all you need to do is to set the context gravity to
+  PANGO_GRAVITY_AUTO.  You can do this for example
+
+       #if defined(PANGO_VERSION_CHECK) && PANGO_VERSION_CHECK(1,15,4)
+         pango_context_set_gravity (context, PANGO_GRAVITY_AUTO);
+       #endif
+
+Bugs fixed in this release:
+       Bug 395328 – Map kATSDeletedGlyphcode to PANGO_GLYPH_EMPTY
+       Bug 397337 – Use is_ellipsized and is_wrapped to optimize property
+                    changes
+       Bug 328585 – Need to know if a layout has unknown glyphs
+                    Patch from LingNing Zhang
+       Bug 326693 – PangoLayouts should be query-able about their
+                    effective properties (width / wrapped / ellipsized / etc)
+       Bug 397327 – pango-layout.c: 'pango_layout_is_ellipsized' must return
+                    a value
+       Bug 323173 – Add layout of mixed direction text for vertical layout
+       Bug 394453 – Use -mms-bitfields
+       Bug 392628 – Don't check for X on win32
+
+
+Overview of changes between 1.15.2 and 1.15.3
+==============================================
+- Fix Hangul crasher and other Hangul bugs introduced in 1.15.2
+- Spell-checked docs
+- Build fixes
+- Don't introduce bitfields in public structs.  This changes some public API
+  that was broken in the 1.15 series.  The new struct is backward compatible
+  with the older Pango series, but not with earlier 1.15.x devel releases.
+
+- New Public API:
+
+  * PangoAnalysis.flags and PANGO_ANALYSIS_FLAGS_CENTERED_BASELINE.  These are
+    mostly only useful for the vertical text support in Pango, but language
+    bindings probably want to update their bindings for PangoAnalysis to
+    include these.
+
+  * New PangoMatrix methods:
+
+       pango_matrix_transform_distance()
+       pango_matrix_transform_point()
+       pango_matrix_transform_rectangle()
+       pango_matrix_transform_pixel_rectangle()
+
+    The transform_rectangle methods are particularly useful when an
+    app/toolkit wants to know the extents of a rotated layout in device
+    coordinates.  It will be used by Gtk+ for example, and is used by the
+    pango-view tool too.  The _pixel_ variant takes a PangoRectangle in device
+    units instead of Pango units.
+
+  * Unit conversion helpers:
+
+       pango_units_from_double()
+       pango_units_to_double()
+       pango_extents_to_pixels()
+
+    The first two just convert between Pango units (fixed precision) and
+    double floating-point numbers.  The current implementations are as simple
+    as "(int)floor (d * PANGO_SCALE + 0.5)" and "(double)i / PANGO_SCALE", but
+    the idea is to have optimized versions of these that do not use the FPU in
+    the future.  That will be appreciated by embedded devices without FPU
+    units.  Since the functionality can be generally useful, the API is made
+    public.
+
+    The pango_extents_to_pixels() function in conjunction with
+    pango_matrix_transform_rectangle() makes it possible to convert extents to
+    device space and round then, instead of having to transform rounded
+    user-space extents.
+
+- Bugs fixed in this release:
+       Bug 351496 – PangoAnalysis::gravity breaks binary compatibility
+       Bug 388702 – Crash when there's no Hangul glyph in the font.
+       Bug 384543 – FcFontMatch misuse
+       Bug 392789 – vpath build fails in basic module
+                    Patch from J. Ali Harlow
+       Bug 390877 – Don't feed pango-features.h to glib-mkenums
+                    Patch from Yevgen Muntyan
+
+
+Overview of changes between 1.15.1 and 1.15.2
+==============================================
+* Engines:
+  - Improved Hangul shaper engine
+  - Improved Indic shaper and language engines
+  - Require libthai >= 0.1.7 for the Thai language engine
+
+* Optimizations:
+  - Avoid some floating-point operations.  Should cut the number of float
+    ops per expose event in pangocairo to a half.
+  - Cache ink and logical extents for PangoLayout
+
+* New Public API:
+
+  - New, generated, public header file pango-features.h.  Included by
+    pango.h.  Currently contains the version information.  In the future,
+    can be expanded to define which backends have been enabled, etc.
+
+  - Public macros and functions for compile- and run-time version checking:
+
+       PANGO_VERSION_ENCODE()
+       PANGO_VERSION_MAJOR
+       PANGO_VERSION_MINOR
+       PANGO_VERSION_MICRO
+       PANGO_VERSION
+       PANGO_VERSION_STRING
+       PANGO_VERSION_CHECK()
+       pango_version()
+       pango_version_string()
+       pango_version_check()
+
+    The scheme chosen here is a mixture of approaches taken by glib and cairo.
+    The advantage over the glib model is that there are no public variables,
+    but it still gives access to a string and numerical representation of the
+    version number at compile- and run-time.
+    
+    The macros enable conditional compilation of code depending on newer Pango
+    APIs, while the runtime functions allow refusing to run against old
+    versions of the library.
+
+  - New, readonly, version of methods that give read/write access to the
+    internals of PangoLayout:
+
+       pango_layout_get_line_readonly()
+       pango_layout_get_lines_readonly()
+       pango_layout_iter_get_line_readonly()
+       pango_layout_iter_get_run_readonly()
+
+    These should be used when you do not intend to modify the run/line,
+    which is most of the time the case.  The only exception known to me
+    is Firefox that adjusts glyph widths to do justification.  Most other
+    uses that do not write to the returned structs (or structs accessible from
+    them) should be ported to the new readonly API to benefit from major
+    optimizations (in this case, line extents caching).  The list includes,
+    but is not limited to, Gtk+, SWT, ClassPath, gnome-applets, libgnomeprint,
+    xmlroff, GtkMathView, Conglomerate, Dia, Anjuta, wxWindows, The Gimp, 
+    and various other applications/libraries:
+
+      http://www.google.com/codesearch?hl=en&q=+pango_layout_(iter_)%3Fget_(lines%3F%7Crun)%5B%5E_%5D&start=50&sa=N
+
+    Worth noting here is that, many uses of pango_layout_get_lines() can be
+    replaced by a pango_layout_get_iter() that works both more elegantly and
+    more efficiently.  The versioning macros introduced in this release can be
+    used to make code use these new symbols without breaking compilation
+    against older Pango (though, such code compiled with the new Pango cannot
+    be run against an older Pango).
+
+  - pango_language_get_default(): Note that, this does not make Pango
+    fallback to the default language automatically (yet), but the user can
+    use this function to set the default language of the locale on a context:
+
+         pango_context_set_language (context, pango_language_get_default());
+
+    This essentially deprecates gtk_get_default_language().  The pango-view
+    tool has been updated to use this feature, so it now respects $LANG when
+    choosing fonts.
+
+  - pango_color_to_string().
+
+* Bugs fixed in this release:
+       Bug 326099 – Setting width, indentation and ellipsizing doesn't work
+                    as I would expect
+       Bug 385478 – Fix tests on OPD platform
+       Bug 319808 – Patch to let pango support artifical italic, bold and
+                    bold italic styles for the fonts which don't have these styles.
+                    Patch from James Su
+       Bug 385321 – Worst case expansion for Sinhala
+                    Patch from Harshula
+       Red Hat Bug 211574: [hi/ml/si_LK] cursor naviation is wrong when
+                    using ZWJ (200d)
+                    Patch from LingNing Zhang
+       Red Hat Bug 216424: [te_IN] pango - consonant + dependent vowel (ai)
+                    Composed char is not rendering properly
+                    Patch from LingNing Zhang
+       Bug 373856 – Wish: Function to convert a GdkColor to a string
+                    Patch from Matthew Barnes
+       Red Hat Bug 216850: Issue in combination with vowels (ml_IN)
+                    Patch from LingNing Zhang
+       Bug 382437 – tests/testboundaries fails
+       Bug 333982 – Fallback to $LANG whenever NULL PangoLanguage is used
+                    Patch from LingNing Zhang
+
+Overview of changes between 1.15.0 and 1.15.1
+==============================================
+* Add Thai langauage engine. (currently makes tests/testboundary fail.)
+* Add Lao and improved Thai sample text.
+* Improved Indic module.
+* Output correct path for hexboxes in pango_cairo_layout_path().
+* Implement get_resolution method for the FT2 fontmap.  Shouldn't make
+  any difference whatsoever.  Open a bug if it does.
+* Misc small fixes.
+
+* Optimizations:
+  - Rework PangoLayout algorithms to avoid calling a recursive call to
+    pango_layout_get_extents().  Avoids one pango_font_get_glyph_extents()
+    call per glyph per layout rendering.  We now make 2 such calls.
+  - Don't cache run_logical_rect in PangoLayoutIter.
+    Avoids one pango_font_get_glyph_extents() call per glyph per layout
+    rendering.  We are down to 1 now.
+  - Cache line extents.  This avoids the final pango_font_get_glyph_extents()
+    call per glyph per layout rendering.  Now we don't make any
+    pango_font_get_glyph_extents() calls when rendering a layout (some
+    conditions apply)!
+  - Replace PANGO_IS_RENDERER with PANGO_IS_RENDERER_FAST for most
+    internal uses, that is, just a NULL-check.
+  - Use simple, fast, casts instead of PANGO_CAIRO_*() macros where the
+    object cannot have reached us if it wasn't of the right type.
+
+* Bugs fixed in this release:
+       Bug 135683 – Cache glyphstring extents
+       Red Hat Bug 211964: [ta] Rendering issue with Tamil
+               Patch from LingNing Zhang
+       Red Hat Bug 213632: ZWJ (200d) and ZWNJ (200c) showing same output
+               Patch from LingNing Zhang
+       Bug 371388 – Add Thai langauage engine
+               Patch from Theppitak Karoonboonyanan
+       Bug 377975 – bug in _pango_glyph_item_iter_next_cluster
+       Bug 369670 – Checked g_free calls
+
+Changes that also appeared between 1.14.7 and 1.14.8
+=====================================================
+* Improved thread-safety.  Pango is still NOT thread-safe, but this fixes
+  lots of crashes using pangocairo from multiple threads.
+* Fix out-of-bounds array access.
+* Improved Indic shaper.
+* Improved Arabic language engine.
+* Choose shaper/font for unassigned Unicode codepoints.
+* Build fixes.
+* Bugs fixed in this release:
+       Bug 356666 – pango is not thread-safe, nautilus does not honour that
+       Bug 352795 – configure.in: Bug in "checking Whether to write
+                    dependencies into .pc files"
+       Bug 350132 – backspacing doesn't work properly for Arabic
+       Bug 330407 – Multiple dependant vowel signs (indic) displayed as one
+       Patch from LingNing Zhang
+
+Overview of changes between 1.14.7 and 1.15.0
+==============================================
+* Add basic support for vertical text.  (PangoGravity and related API)
+* New PangoCairo example (examples/cairotwisted) to lay text out on a path
+* Fix various bugs in the way language engines are used.  Add simple Arabic
+  and Indic language engines. (Backported to 1.14.6)
+* Step module interface version up to 1.6.0
+* Misc small cleanups.
+* Bugs fixed in this release:
+        Bug 330407 – Multiple dependant vowel signs (indic) displayed as one
+        Bug 359043 – PangoRenderer does not show in API docs
+        Bug 359046 – renderdemo.c unconditionally use GLib 2.12
+        Bug 357228 – Remove aix specific hack from configure.in
+        Part of Bug 350132 – backspacing doesn't work properly for Arabic
+        Bug 356194 – more pango_get_log_attrs problems
+        Bug 355820 – pango_get_log_attrs broken
+        Bug 352811 – SIGSEGV with pango(cairo)-view on HP-UX
+        Bug 351496 – PangoAnalysis::gravity breaks binary compatibility
+        Bug 351585 – API documentation issues with 2.15 release
+
+Overview of changes between 1.14.6 and 1.14.7
+==============================================
+* Fixed broken build with included lang modules.
+* Bugs fixed in this release:
+       Bug 361938 – Can't include *-lang modules (./configure
+                    --with-included-modules fails)
+
+Overview of changes between 1.14.5 and 1.14.6
+==============================================
+* Backport language-engine handling fixes from HEAD.
+* Add simple Arabic and Indic language engines.
+* Indic shaper fixes.
+* Bugs fixed in this release:
+       Bug 353877 – Sinhala is_cursor_position and
+                    backspace_deletes_character issues
+                    Patch from Akira TAGOH
+       Bug 358224 – Telugu Character U+0C31 does not render its below-base
+                    form.
+                    Patch from Rahul Bhalerao
+       Bug 358174 – Reph and Vattu forms of Assamese character RA(U+09F0)
+                    are not rendered.
+                    Patch from Rahul Bhalerao
+
+Overview of changes between 1.14.4 and 1.14.5
+==============================================
+* Indic shaper fixes.
+* Misc bug fixes.
+* Bugs fixed in this release:
+       Bug 356685 – [or_IN] Rendering of consonant+0x0B4D+0x0B2F is wrong
+                    Patch from Rahul Bhalerao
+       Bug 357790 – Rendering problem for malayalam consonant RA (U+0D30)
+                    Patch from Rahul Bhalerao
+       Bug 349813 – typo in docs for pango_layout_move_cursor_visually
+       Bug 357686 – pangocairo-font.c: illegal g_object_unref in
+                    pango_cairo_font_get_hex_box_info
+
+Overview of changes between 1.14.3 and 1.14.4
+==============================================
+* Indic shaper fixes.
+* Misc bug fixes.
+* Bugs fixed in this release:
+       Bug 351223 – the conjuction of Con + 0x0d4d +0x0d31 of Malayalam is
+                    wrong
+                    Patch from LingNing Zhang
+       Bug 355750 – The glyphs of the conjuctions about Cons+0x0d4d+0x0d32 of
+                    Malayalm are wrong.
+                    Patch from LingNing Zhang
+       Bug 349876 – U+0x0904 of Devanagari need be "independent vowel", but
+                    it is "reserved" in Pango
+                    Patch from LingNing Zhang
+       Bug 355550 – Miscalculation of logical attributes in
+                    pango_get_log_attrs()
+                    Patch from Theppitak Karoonboonyanan
+       Bug 355697 – The IndicOTClassTable of Oriya has a error.
+       Bug 355782 – Misaligned extents in pango
+       Bug 355605 – hexbox with 0000 in it
+       Bug 355435 – Invalid calls to pango_map_get_engine()
+                    Patch from Theppitak Karoonboonyanan
+       Bug 347146 – underline/overstrike spaces
+       Bug 352535 – Ink extents of empty glyph
+
+Overview of changes between 1.14.2 and 1.14.3
+==============================================
+* Win32 build improvement. [Tor Lillqist]
+* Bugs fixed in this release:
+       Bug 353525 – libpangoft2-1.0.so.0: undefined reference to
+                    `pango_font_description_get_gravity'
+       Bug 349813 – typo in docs for pango_layout_move_cursor_visually
+
+Overview of changes between 1.14.1 and 1.14.2
+==============================================
+* Find shaper/font for Private Use and space characters.
+  Part of Bug 145275 – Font selection for space characters
+
+Overview of changes between 1.14.0 and 1.14.1
+==============================================
+* Increased fontset cache size from 16 to 64.  This should make
+  firefox+pango A LOT faster.
+* Bugs fixed in this release:
+       Bug 352114 – pango-1.14: generated docs still contain old example code
+       Part of Bug 348825 – pango should optimize away calls to FcFontSort as
+                            much as possible
+       Bug 351585 – API documentation issues with 2.15 release
+
+
+Overview of changes between 1.13.5 and 1.14.0
+==============================================
+* Make pango-view accept non-ASCII --text.
+* Require cairo-1.2.2 for the important bug fixes it has.
+
+Overview of changes between 1.13.4 and 1.13.5
+==============================================
+* Indic shaper improvements.
+* Misc fixes.
+* Bugs fixed in this release:
+       Bug 121672 – Ra (vattu) not rendered properly in Malayalam
+                    Patch from LingNing Zhang
+       Bug 335811 – Some conjugates of Malayalam are wrong.
+                    Patch from LingNing Zhang
+
+Overview of changes between 1.13.3 and 1.13.4
+==============================================
+* Update to Unicode Character Database 5.0.0.
+* Misc fixes.
+* Bugs fixed in this release:
+       Bug 336282 – Update to Unicode Character Database 5.0.0
+       Bug 347073 – Allow empty GPOS table
+       Bug 347021 – atsui crash when a matching font cannot be found.
+                    Patch from Brian Tarricone.
+
+Overview of changes between 1.13.2 and 1.13.3
+==============================================
+* Improved build system.  Using gnome-autogen.sh now.
+  (gnome-common needed for bootstrapping)
+* Improved documentation.  Docs now include list of new API for
+  each stable version of Pango.
+* New public API:
+       - pango_glyph_string_get_width
+* Little performance improvement.
+* Misc fixes.
+* Bugs fixed in this release:
+       Bug 330603 – pango_scan_int invokes undefined behaviour
+       Bug 315599 – PangoAttribute remains in wrong context.
+       Bug 163677 – pango_attr_list_splice: inconsistent docs
+                    Patch from Morten Welinder
+       Bug 345070 – [ml_IN] not render for combination with ZWJ
+                    Patch from LingNing Zhang
+       Bug 345274 – list of new symbols for each version is missing in docs
+                    Patch from Priit Laes
+       Bug 346297 – autogen doesn't work with automake-1.6
+                    Patch from Priit Laes
+       Bug 135683 – Cache glyphstring extents
+       Bug 344766 – Memory leak in get_ruleset() in modules/basic/basic-fc.c
+       Bug 345600 – cvs build error in pango/opentype/Makefile
+       Bug 345511 – -no-undefined problem with new libtool
+
+Overview of changes between 1.13.1 and 1.13.2
+==============================================
+* Improved hexbox drawing, and font metrics calculations.
+* Synthesize italic variants on win32 [Hans Breuer]
+* New public API:
+       - pango_cairo_show_error_underline
+       - pango_cairo_error_underline_path
+       - pango_font_describe_with_absolute_size
+* Misc fixes.
+* Bugs fixed in this release:
+       Bug 326960 – hex box drawing for win32 and atsui backends of cairo
+       Bug 343717 – License information in unclear.
+       Bug 343355 – Add pango_cairo_show_error_underline &
+                    pango_cairo_error_underline_path
+       Bug 343966 – pango Cygwin build fixes
+                    Patch from Cygwin Ports maintainer.
+       Bug 343796 – Italic Chinese character can't be show correctly in
+                    Win32.
+       Bug 314114 – max_x_advance not appropriate for
+                    approximate_(char|digit)_width
+       Bug 341138 – Using TTC font, Gtk2 programs begin to eating big memory
+                    and have many cpu usage.
+                    Patch from Yong Li.
+       Bug 336153 – Mark to mark positioning (Lookup Type 6) isn't correct
+                    when using MarkAttchmentType
+                    Patch from Tin Myo Htet.
+       Bug 333984 – pango_language_from_string improvements
+       Bug 125378 – Better underline thickness handling
+       Bug 339730 – Pango needlessly falls back away from a Type 1 font into
+                    a TTF font
+       Bug 342562 – Support absolute sizes in
+                    pango_font_description_to/from_string
+       Bug 341922 – pango should handle more characters as zero width
+                    Patch from Roozbeh Pournader
+       Bug 342525 – With PangoFc and PangoWin32, approximate digit width is
+                    not what it says
+       Bug 342079 – pangoatsui-private.h missing from release
+
+Overview of changes between 1.13.0 and 1.13.1
+==============================================
+* Increased robustness against broken pango.modules
+* Improved build infrastructure:
+  - Remove CAIRO_CFLAGS from pangocairo.pc.in, as it Require's cairo already.
+  - Use -no-undefined on Unix too.
+* Improved documentation.
+* Misc fixes.
+* Bugs fixed in this release:
+       Bug 307196 – Unhinted fonts are measured incorrectly and drawing
+                    problems occur as a result
+       Bug 329547 – pango_layout_get_pixel_extents and
+                    pango_layout_get_pixel_size cause off-by-one metrics
+       Bug 339747 – pango_font_metrics_get_approximate_digit_width docs
+       Bug 339749 – pango_language_from_string issues
+                    Patch from Morten Welinder.
+       Bug 333771 – Use gmodule-no-export-2.0 instead of gmodule-2.0 in
+                    pango-uninstalled.pc.in
+       Bug 337594 – pango_glyph_string_extents_range possible bug
+       Bug 329664 – Move gunichar_to_glyph cache from PangoCairoFcFont to
+                    PangoFcFont
+                    Patch from LingNing Zhang.
+       Bug 322374 – Examples does not build on MacOS X
+       Bug 340229 – pango_font_description_from_string does not do bound
+                    checking
+       Bug 329483 – hinting hexbox in cairo backend doesn't handle absolute
+                    font size
+       Bug 340040 – pangocairo hex box hinting falls apart with PS/PDF
+                    backends
+       Bug 71033 – make size 0 fonts work
+
+Overview of changes between 1.12.0 and 1.13.0
+==============================================
+* Fix incorrect rendering when in x86 64-bit precision mode
+  https://bugs.freedesktop.org/show_bug.cgi?id=5200
+* Fix non-OpenType fonts losing kerning in 1.12.0 [#336026, Denis Jacquerye]
+* Fix blurred underlines on Win32 [#332656, Tor Lillqvist]
+* Build fix when having both Win32 and FreeType cairo backends available
+  [#337502, Alexander Larsson]
+* Moved the OpenType Layout code into a new project called HarfBuzz:
+  http://www.freedesktop.org/wiki/Software/HarfBuzz
+* Improved documentation.
+* Misc bug fixes.
+* Fixed many compiler warnings.
+* Bugs fixed in this release:
+  332656,335840,334802,337029,337821,338343
+
+Overview of changes between 1.11.99 and 1.12.0
+==============================================
+* Compilations fixes for MSVC. [#333115, Tor Lillqvist]
+* More NULL-check against unusable fonts, helps with Win32 fonts without
+  a Unicode cmap. [Tor]
+* Use g_print instead of printf for debugging output in Win32 backend.
+  [#332855, Tor]
+
+Overview of changes between 1.11.6 and 1.11.99
+==============================================
+* Fix problem recently introduced that made Win32 backend render boxes
+  only. [#332538, Hans Breuer]
+* Insert '?' chars instead of invalid UTF-8 sequences in
+  pango_layout_set_text [#33195]
+* Bugs fixed in this release:
+  332167,332538,331995
+
+Overview of changes between 1.11.5 and 1.11.6
+=============================================
+* Do not export macros PANGO_GLYPH_EMPTY, PANGO_GLYPH_UNKNOWN_FLAG and
+  PANGO_GET_UNKNOWN_GLYPH publicly; just in the engine/backend interface.
+* Fix a few crashers, especially when a font cannot be read. [#314239]
+* Change some g_critical's to g_warning, where it's not application's
+  fault. [#331723]
+* Bugs fixed in this release:
+  330795,331038,329148,331994,331995,331996,314239,331723
+
+Overview of changes between 1.11.4 and 1.11.5
+=============================================
+* Cleanup work on the win32 backend.  Families are not listed all
+  in lower case anymore.
+* New public function: pango_win32_font_description_from_logfont.
+* pango-view accepts --wrap now, and lists backends in --help output.
+* A couple minor bug fixes.
+
+Overview of changes between 1.11.3 and 1.11.4
+=============================================
+* Major change in the low-level interface of Pango.  The special value
+  PANGO_GLYPH_EMPTY is now defined to mean a "draw nothing" glyph.  This
+  was what glyph 0 was used for previously.  As a result, bumped up the
+  Pango module version, meaning that modules compiled against earlier
+  versions are probably not compatible with this release. [#73147]
+* New framework in examples for building a binary called pango-view,
+  that can be used to render a text file using any of the available
+  backends.  This is installed into bindir now.
+* Enhancements to the FT2 backend, to draw boxes on missing glyphs.
+* Better hexbox drawing for cairo backend:  Hinting hexbox, and
+  drawing a single-row hexbox for very small font sizes.
+* Improved documentation.
+
+Overview of changes between 1.11.2 and 1.11.3
+=============================================
+* Do not crash if the shapers fail.
+* Use g_slice for various struct allocations.
+* 100% symbol coverage in docs.
+* Misc bug fixes and documentation improvements.
+* Janitory works, like removing unneeded files.
+
+Overview of changes between 1.11.1 and 1.11.2
+=============================================
+* Draw hex box on missing glyphs for cairo-fc backend.
+* New --with-dynamic-modules option added to configure.
+* Use g_slice for various small memory allocations [Matthias Clasen]
+* Misc bug fixes, optimizations, and documentation improvements.
+
+Overview of changes between 1.11.0 and 1.11.1
+=============================================
+* ATSUI support for the cairo backend. [Anders Carlsson]
+* Fixed a couple of regressions with font size and scaling.
+* Draw a dashed empty box on missing glyphs for cairo-fc backend.
+* Support OpenType features for basic (Latin/Greek/...) module.
+* Support swash feature in Arabic module.
+* Misc bug fixes.
+* Misc documentation improvements.
+
+Optimizations:
+
+* Cache GObject private data in PangoFcFont.priv [Federico Mena Quintero]
+* Add a constant-sized light-weight cache for glyph extents.
+* Use g_slice_* instead of GMemChunk in mini-fribidi.
+
+
+Overview of changes between 1.10.1 and 1.11.0
+=============================================
+* Line-breaking algorithm updated to Unicode 4.1.
+* Code borrowed from GNU FriBidi resynched to version 1.0.7.
+* New improved Tibetan shaper module. [Pema Geyleg]
+* Bug fix in Khmer shaper module. [Jens Herden]
+* Respect fontconfig reassignment of font pixelsize. [Funda Wang]
+* Make OpenType GPOS handling more robust/correct. [Greg Aumann]
+* Various documentation fixes and improvements.
+* Various gcc warning fixes.
+* Misc bug fixes.
+
+Optimizations:
+
+* Add a lazy fixed-size per-font cache to map characters to glyphs,
+  in the cairo backend. [Federico Mena Quintero]
+* Optimize character to script mapping by adding a linear table for
+  characters < U+2000, and also caching the last mid point in
+  bsearch. [Federico, Matthias Clasen]
+* Enabled mini-fribidi's trashstack instead of direct mallocs.
+* Short circuit the bidi algorithm for provably unidirectional text.
+* Make mini-fribidi process UTF-8 directly.
+* Several strlen and g_utf8_strlen calls removed. [Owen Taylor, Billy Biggs]
+* Use call tables in the OpenType layout code.
+* Use quarks for accessing GObject data. [Federico]
+* Open Pango modules with lazy-bind flags. [John Rice]
+* Use new negative offsets in g_utf8_pointer_to_offset to avoid
+  scanning from the beginning of line on cursor movement.
+* Avoid redundant PANGO_IS_FC_FONT checks.
+
+Overview of changes between 1.10.0 and 1.10.1
+=============================================
+* Add various forms of caching to the Win32 backend, greatly
+  improving performance [Tor Lillqvist]
+* Fix problem with colors leaking from a Pango item to 
+  subsequently drawn strings. [Choe Hwanjin]
+* Fix bug where error underlines would be drawn 1024 times
+  too big in the Cairo backend. [Luis Villa]
+* Misc bug and build fixes [Jean Brefort, Matthias Clasen, 
+  Behdad Esfahbod, Kazuki Iwamoto]
+
+Overview of changes between 1.9.1 and 1.10.0
+============================================
+* Update script tables, bidi tables, and Arabic joining tables for Unicode 4.1 
+  [Roozbeh Pournader, Behdad Esfahbod]
+* Misc bug and build fixes [Sebastien Bacher, Hans Breuer, Behdad, 
+  J. Ali Harlow, Tor Lillqvist, Keith Packard, Vittorio Palmisano, Manish Singh]
+
+Overview of changes between 1.9.0 and 1.9.1
+==========================================
+* Support setting of font options and DPI on PangoContext for
+  the Cairo backend.
+* Adapt to recent Cairo API changes
+* Win32 build improvements [Tor Lillqvist]
+* Misc bug fixes [Hans Breuer, Thomas Fitzsimmons, Kazuki IWAMOTO]
+       
+Overview of changes between 1.8.x and 1.9.x
+===========================================
+* Add Cairo support; PangoCairoFontmap is an interface with
+  implementations for Fontconfig fonts and Win32 fonts
+* Extend PangoFcFontmap to allow more customization by subclasses
+* Handle NULL language better for pango_context_get_metrics()
+* misc optimization [Paolo Borelli, Behdad Esfahbod]
+* Misc bug and build fixes [Hans Breuer, Damien Carbery, 
+  Keith Packard, Manish Singh]
+* Doc fixes [Tim Janik]
+
+============================================================
+
+Overview of changes between 1.8.1 and 1.8.2
+===========================================
+* Add Khmer support [Jens Herden, Javier Sola]
+* Fix bugs and crashes in the operation of PangoLayoutIter [Amit Aronovitch]
+* Increase sharing of data between different copies of Pango
+  [Tommi Komulainen, Ross Burton]
+* Remove dependence of opentype code on FreeType internals [David Turner,
+  Behdad Esfahbod]
+* Cache metrics for the Win32 backend [Tor Lillqvist]
+* Improve handling of RTL text when passing it to Uniscribe [Tor]
+* Support for TrueType fonts on Win32 with characters outside the BMP [Tor]
+* Handle alpha in XftColors again. [Mikael Magnusson]
+* Better handling of MacThai encoded fonts [Theppitak Karoonboonyanan]
+* Handle zero width chars properly in Hangul backend 
+  [Young-Ho Cha, Changwoo Ryu]
+* Fix Oriya character classification [Gora Mohanty, Gautam Sengupta]
+* PangoAttrIterator bug fixes [Morten Welinder]
+* Clean up copyright/licensing information [William N. Ray]
+* Misc bug and build fixes [Sebastien Bacher, Brandon Bergren,
+  Chris Blizzard, Paolo Borelli, Behdad, Harshula, Alex Jones, Aivars Kalvans, 
+  Stepan Kasal,  Karel Kulhavy, Ryan Lortie, Ben Maurer, Sukhjinder Sidhu, 
+  Manish Singh, Emil Soleyman-Zomalan, Morten]
+
+Overview of changes between 1.8.0 and 1.8.1
+===========================================
+* Fix several problems with conjuct formation in Sinhala [Harshula]
+* Fix problems that were causing fonts to be missized and
+  not print in GtkHTML [Ross Burton]
+* Fix compilation with old fontconfig [Vincent Noel] and
+  old FreeType [Andrew P. Lentvorski, Jr]
+* Work around problem with glyphs in monospace fonts being truncated
+  by Xft [Billy Biggs]
+* Misc bug fixes [Damon Chaplin, Matthias Clasen, Kees Cook, Nick Lamb, 
+  Adam Sampson,Manish Singh, Morten Welinder]
+* Misc build fixes [Sebastien Bacher, Matthias Clasen, Tor Lillquist]
+* Doc improvements [Torsten Schoenfeld, Billy Biggs, Morten Welinder]
+
+Overview of changes between 1.7.0 and 1.8.0
+===========================================
+* Add Sinhala support to the Indic module [Anuradha Ratnaweera]
+* Add Tibetan module [G Karunakar, Pema Geyleg]
+* Support pixel sizes for fonts [Chris Lahey]
+* Add pango_layout_get_font_description() [Morten Welinder]
+* Add PANGO_WEIGHT_SEMIBOLD [Lars Clausen]
+* Report underline metrics on Win32 [Tor]
+* Handle GLib-2.6.0 win32 filename encoding changes [Tor Lillqvist,
+  Robert Ögren]
+* Fix crash when drawing long strings
+* Misc fixes [Matthias Clasen, Dan Winship]
+
+Overview of changes between 1.6.x and 1.7.0
+===========================================
+
+* Add PangoRenderer, a subclassable driver object holding the 
+  logic for rendering PangoLayout.
+* Support transformed rendering for the Xft backend
+* Add Lao support in Thai Module [Theppitak Karoonboonyanan]
+* Support Thai OpenType fonts [Theppitak]
+* Add Syriac module [Emil Soleyman-Zomalan]
+* Add underline-color and strikethrough-color attributes
+  [Morten Welinder]
+* Add pango_win32_render_transformed() [Hans Breuer]
+* Misc fixes [Hans Breuer, Matthias Clasen, Manish Singh,
+   Morten Welinder]
+* Documentation improvements
+
+============================================================
+
+Overview of changes since 1.6.0
+===============================
+* Fix several problem when computing font and selecting fonts
+  metrics for CJK [Felipe Heidrich, Federic Zhang]
+* Win32 bug fixes [Tor Lillqvist, Kazuki Iwamoto, Ivan Wong]
+* Misc bug fixes [Vincent Berger, Paolo Borelli, Behdad Esfahbod, 
+  Leon Ho, Arun M, Kjartan Maraas, Vincent Noel, Christian Persch, 
+  Enrico Scholz, Sukhjinder Sidhu, Morten Welinder]
+
+Overview of changes between 1.5.2 and 1.6.0
+===========================================
+* Add OpenType support for Hebrew [Dov Grobgeld]
+* Win32 bug and build fixes [Tor Lillqvist, Hans Breuer, John Ehresman]
+* Misc bug fixes [Behdad Esfahbod, Jatin Nansi]
+
+Overview of changes between 1.5.1 and 1.5.2
+===========================================
+* Support 'init' feature for Bengali [Sayamindu Dasgupta]
+* Allow 32-bit property fields in OpenType code
+* Optimize repeated property lookups in OpenType code
+* Misc bug fixes [Behdad, Keith Sharp, Morten Welinder]
+
+Overview of changes between 1.5.0 and 1.5.1
+===========================================
+* Add ellipsization support to PangoLayout
+* Add pango_context_get_font_map().
+* Fix metrics for the Xft backend when a transform is in effect
+* Separate out backend-independent parts of pangoft2topgm for
+  future rendering testbeds.
+* Code cleanups (use G_DEFINE_TYPE, make PangoMatrix parameters const)
+* Add a GType for PangoMatrix [Torsten Schoenfeld]
+* Misc bug fixes [Morten Welinder]
+
+Overview of changes between 1.4.x and 1.5.0
+===========================================
+* Allow applications to provide custom font decoders [Chris Blizzard]
+* Add support for setting a transformation matrix on a PangoContext
+* Add support for rotated rendering to the FT2 backend
+* Add metrics for underline and strikethrough position and thickness.
+* Add letter-spacing attribute and implement in PangoLayout
+* OpenType support in Thai Module [Theppitak Karoonboonyanan]
+* Add Add PANGO_TYPE_LAYOUT_ITER [Johan Dahlin]
+
+============================================================
+
+Overview of changes between 1.4.0 and 1.4.1
+===========================================
+* Win32 bug fixes [Tor Lillqvist, John Ehresman]
+* Thai rendering improvements including OpenType support
+  [Theppitak Karoonboonyanan]
+* Fix common crash in Hangul shaper [Changwoo Ryu]
+* Fix various problems with language tag selection [Frederic Zhang]
+* Documentation improvements [Felipe Heidrich, Doug Quale]
+* Fix crash in line break code [Jeroen Zwartepoorte, Billy Biggs]
+* Build fixes [J. Ali Harlow, Noah Misch]
+* OpenType engine fixes [Kailash C. Chowksey, Sayamindu Dasgupta, Aamir Wali,
+  Masatake YAMATO, Soheil Hassas Yeganeh]
+* Indic module bug fixes [Chris Blizzard, Rajkumar S, Taneem Ahmed,
+  Jungshik Shin]
+* Misc bug fixes [Stanislav Brabec, Anders Carlsson, Behdad Esfahbod, 
+  Jody Goldberg, Theppitak, Sven Neumann, Manish Singh, Morten Welinder]
+
+Overview of changes between 1.3.6 and 1.4.0
+===========================================
+* Use FC_WIDTH when available so that multiple width fonts are
+  selected properly [Manish Singh]
+
+Overview of changes between 1.3.5 and 1.3.6
+===========================================
+* Improve handling of some Kannada vowels [Kailash C. Chowksey]
+* Fix problem with excess symbol exports on Linux [James Henstridge]
+* Win32 build fixes [Hans Breuer, John Ehresman, Tor Lillqvist, Cedric Gustin, 
+  J. Ali Harlow]
+
+Overview of changes between 1.3.3 and 1.3.5
+===========================================
+* Add support for automatically determining the base direction for
+  PangoLayout from the contained text [Dov Grobgeld]
+* Major rework of internal opentype interfaces to fix
+  problems with GPOS. Turn on GPOS handling for Arabic.
+* Add a PangoAttribute to turn off font fallback [Noah Levitt]
+* Add wavy error-indication underlines [Nicolas Setton]
+* Improve handling of BENGALI LETTER A/E [Sayamindu Dasgupta]
+* Win32 bug fixes and improvements [J. Ali Harlow, Hans Breuer]
+* Misc bug fixes [Noah, Roozbeh Pournader]
+
+Overview of changes between 1.3.2 and 1.3.3
+===========================================
+* Add pango_font_face_list_sizes() [Noah Levitt]
+* Add pango_font_family_is_monospace [Noah]
+* Do OpenType processing for CFF fonts [Manjunath Sripadarao]
+* Fix wrong sign for GPOS vertical positioning
+* Fix up -uninstalled .pc files [Laszlo Peter]
+* Misc bug and build fixes fixes [Rodney Dawes, Theppitak Karoonboonyanan,
+  Noah, Kjartan Maraas, Julio M. Merino Vidal, Christian Persch, 
+  Torsten Schoenfeld, Manish Singh, Mariano Suárez-Alvarez, Morten Welinder,
+  Masatake YAMATO]
+
+Overview of changes between 1.3.1 and 1.3.2
+===========================================
+* Correct a mixup between ZWJ and ZWNJ in the Arabic
+  engine  [Roozbeh Pournader]
+* Build and bug fixes for Win32  [Hans Breuer]
+* Fix a problem with RTL scripts on Win32  [Tor Lillqvist, Shoshannah Forbes]
+* Documentation improvements  [Ross Burton, Matthias Clasen]
+
+Overview of changes between 1.3.0 and 1.3.1
+===========================================
+* Support non-Unicode font encodings when supported by fontconfig
+  [Sven Neumann]
+* Draw 6-digit hex boxes for > U+FFFF [Noah Levitt]
+* Update to latest fribidi [Noah]
+* Honor U+2028 LINE SEPARATOR [Noah]
+* Fix a problem with iteration by chars [Mariano Suárez-Alvarez]
+* Misc bug and build fixes [Jeff Bonggren, Martin Kretzschmar, 
+  Noah, Sven Neumann, Padraig O'Briain, Manish Singh, 
+  Morten Welinder]
+* Fix header file includes to work with recent FreeType.
+
+Overview of changes between 1.2.x and 1.3.0
+===========================================
+* Share modules between the FT2 and Xft backend. Export PangoFcFont
+  and PangoFcFontMap base classes so that other fontconfig based
+  backends can be written and use these same modules.
+* Redo module system to use GTypeModule and work much like GTK+ theme
+  engines and input method modules.
+* Change modules to declare coverage by script, rather than by code
+  point. Add a ->covers callback so that modules can dynamically
+  decide whether they can cover a particular codepoint with a given
+  font. (This will allow multiple modules to handle a script for
+  different types fonts.)
+* Complete rewrite of itemization pass. Now uses script information to
+  improve language tags. This solves problems with incorrect language
+  tags resulting in drastically wrong fonts being selected by
+  fontconfig.
+* Add backspace-deletes-character PangoLogAttr; will allow proper
+  deletion behavior for non-Western scripts.  [Noah Levitt]
+* Add pango_fc_font_kern_glyphs(), which speeds up kerning a lot over
+  doing it pair-by-pair. [Soeren Sandmann]. Kern in the Xft backend as
+  well as the FT2 backend.
+* Remove the X font backend, except a minimal set of stubs to maintain
+  binary compatibility.
+* Many improvements to pangoft2topgm to allow displaying PangoMarkup,
+  saving to different file formats, etc.
+* Convert build system to automake-1.7; many cleanups and
+  improvements. [James Henstridge]
+* Documentation additions and improvements [Matthias Clasen, Martin
+  Pool]; add man pages for the included binaries.  [Matthias]
+* Misc bug and build fixes [Josh Beam, Tony Graham, Kaushal Kumar,
+  Noah, Mehran Mehr, Soeren, Morten Welinder]
+* Win32 build fixes [Tor Lillqvist, Hans Breuer]
+
+============================================================
+
+Overview of Changes in Pango 1.2.5
+==================================
+* Fix a problem where the indic-xft shaper didn't get linked
+  against all necessary files.
+
+Overview of Changes in Pango 1.2.4
+==================================
+* Win32 [Tor Lillqvist]
+  - Avoid calling Uniscribe when not necessary [Hans Breuer]
+  - Build fixes
+* Indic shaper
+  - Add pre-base-matra fixup code from ICU [Sivaraj Doddannan]
+  - Port of Bengali rendering fix from ICU [Taneem Ahmed]
+* OpenType
+  - Port various fixes by Werner Lemberg from FreeType version
+  - Port various fixes by Lars Knoll from Qt version
+  - Many other bug fixes [Kailash C. Chowksey, Me]
+* Fix bugs in FT2 rendering code [Sven Neumann]
+* Remove Qt-based example program; was causing compilation problems 
+  for a lot of people.
+* Doc fixes [Noah Levitt]
+* Misc bug fixes [Dave Cuthbert, Damon Chaplin, Christophe Fergeau,
+  Tony Graham, Morten Welinder]
+* Build fixes [Sven Neumann, Benedikt Spranger]
+
+Overview of Changes in Pango 1.2.3
+==================================
+* Fix operation with --disable-debug [Jeff Waugh]
+* Improve handling of ink rectangle extents for empty runs
+* Fix problem with keynav at line boundaries for RTL text [Matthias Clasen]
+
+Overview of Changes in Pango 1.2.2
+==================================
+* Cache fontsets for the Xft and FT2 backends, a large speedup for short 
+  strings [Owen Taylor, Soeren Sandmann]
+* Make built in rendering functions, especially the FT2 one,
+   work more like the GDK implementation [Sven Neumann]
+* Add an indic-ft2 module [Kapil Chowskey], 
+  Add a thai-ft2 module [Theppitak Karoonboonyanan]
+* Optimize pango_x_render() by drawing multiple character with
+  a single request when possible [Morten Welinder]
+* Change the handling of attributes that cover only partial glyphs
+  [Owen, Taneem Ahmed, Sunil Mohan Adapa]
+* Fix problems with Arial Unicode and the Opentype code [Owen, Noah Levitt]
+* Fix common crash for fonts missing a GDEF table
+* Fix common portability problem with informative output at end 
+  of configure.
+* Build cleanups and fixes [Tim Mooney, Chris Ross, Akira Tagoh, 
+  Will Partain, James Su]
+* Miscellaneous bug fixes and cleanups [Simon Budig, Rick Jones, 
+  Noah, Padraig O'Briain, Benjamin Otte, Andrey Panov, Federic Zhang]
+* Documentation fixes [Tim, Sven]
+
+Overview of Changes in Pango 1.2.1
+==================================
+* Handle older TrueType Open Arabic fonts.
+* Make Win32 backend handle a common TrueType font bug [Tor Lillqvist]
+* Fix crash with some non-BMP characters [Morten Welinder]
+* Avoid crashing on font descriptions like " 12" [Padraig O'Briain]
+* Minor build fixes [Rich Burridge, Sven Neumann]
+
+============================================================
+
+Changes between 1.1.6 and 1.2.0
+
+* Documentation fixes
+
+Changes between 1.1.5 and 1.1.6
+
+* Fix crash with isolated Hangul tone marks.
+* Improve font solection for Hangul tone marks
+* Improve range definitions for basic-xft [Jungshik Shin]
+* Docs improvements [Matthias Clasen]
+
+Changes between 1.1.4 and 1.1.5
+
+* Fix wrap-around coordinate problems for X, Xt.
+* Draw unknown character boxes with X primitives for the
+  X backend instead of hoping for a suitable glyph [Morten Welinder]
+* Fix crash with FT2 arabic shaper from using face->generic.data
+  for two things.
+* For Xft/FT2, give an informative error mesage when no fonts are found.
+* Support shape modules with ranges beyond the BMP [Federic Zhang]
+* Use octal escapes rather than literal UTF-8 [Arnaud Charlet]
+* Use g_[sf]printf where appropriate [Matthias Clasen]
+* Doc improvements [Matthias]
+* Misc build and bug fixes [Tony Graham, Kjartan Maraas]
+
+Changes between 1.1.3 and 1.1.4
+
+* Fix the Arabic-words-broken-by-underlines problem by
+  stripping out non-shape affecting attributes then adding them
+  back after shaping.
+* Hangul shaper fixes [Changwoo Ryu, Jungshik Shin]
+* Handle compatability ideographs in basic-x shaper [Federic Zhang]
+* Rename function parameters to avoid shadowing system headres
+  [Soeren Sandmann]
+* Fix memory leak in Win32 backend [Tor Lillqvist]
+* Fix crasher problem with non-BMP characters [He Qiangqiang]
+* Implement pango_ft2_font_map_set_default_substitute() [Matthias Clasen]
+* Doc improvements [Matthias Clasen, Michael R. Walton, Jungshik Shin]
+* Misc bug and build fixes [Dagfinn I. Mannsåker, Tony Graham,
+  Dan Mills, Sebastian Wilhelmi]
+
+Changes between 1.1.2 and 1.1.3
+
+* Hangul module bug fixes and improvements [Changwoo Ryu, Jungshik Shin]
+  - Move rendering of precomposed characters to hangul-xft shaper
+  - Handle Hangul tone marks
+* Win32 improvements [Tor Lillqvist]
+  - Use Uniscribe when present
+* Some doc build fixes [Matthias Clasen]
+* Code cleanup [Manish Singh]
+* Fix assertion failure in PangoLayout [Alex Larsson]
+* Fix memory leak when freeing fontmaps [Sven Neumann]
+
+Changes between 1.1.1 and 1.1.2
+
+* Add a new wrap mode for PangoLayout - PANGO_WRAP_WORD_CHAR [Alex Larsson]
+* Win32 work [Tor Lillqvist]
+  - Handle choosing the right font for CJK languages based on language tags. 
+  - Fix boxes showing up for tabs [Florent Duguet]
+  - Better handling of finding ASCII font names.
+  - Cygwin compilation fix [Masahiro Sakai]
+  - Fix --with-included-modules on win32 [Arnaud Charlet]
+  - Various build fixes and cleanups
+* Indic module improvements [Eric Mader]
+* Fixes to generic OpenType handling [Eric]
+* Improve language specific charset ordering basic-x11 [James Su, Brian Yuan]
+* Some merges of fixes by Werner Lemberg to the original 
+  FreeType OpenType code.
+* Robustify and otherwise improve pango_color_parse() [Matthias Clasen]
+* Some cross-compiling fixes [J. Ali Harlow]
+* Bug fix for pango_scan_int() needed for recent GTK+.
+
+Changes between 1.1.0 and 1.1.1
+
+* Merge a lot of the code between the Xft and FT2 backend,
+  so that the FT2 backend gets the recent improvements to Xft.
+* Add proper language tag support to the Xft/FT2 backends.
+* Various effienciency fixes for the Xft/FT2 backends.
+
+Changes between 1.0.x and 1.1.0
+
+* Support for version 2 of the Xft library. [Keith Packard]
+* Convert the freetype backend over to using fontconfig,
+  instead of MiniXft for font cataloging.
+* A port of the Indic OpenType code from ICU to Pango. [Eric Mader]
+* A new hangul-xft [Changwoo Ryu]
+* Bug-fixes to the OpenType handling code.
+* Various cleanups to the PangoXft and PangoFT2 public APIs.
+* Docs switched over to DocBook XML. [Matthias Clasen]
+
+============================================================
+
+Changes between 1.0.3 and 1.0.4
+
+* Add Thai shaper for Xft  [Theppitak Karoonboonyanan]
+* Support GB-18030, BIG5-HKSCS, CNS-11643, GBK encodings for
+  basic-x shaper [Qingjiang (Brian) Yuan]
+* Support ksc5601.1992-3 fonts in hangul-x shpaer 
+  [Qingjiang (Brian) Yuan, Changwoo Ryu]
+* Support new Arabic characters in Unicode 3.2 [Roozbeh Pournader]
+* Bug fixes [Jacob Berkman, Arnaud Charlet, David L. Cooper II, 
+  Choe Hwangjin, Alex Larsson, Sven Neumann, Matthias Warkus, Yao Zhang]
+
+Changes between 1.0.2 and 1.0.3
+
+* Change algorithm for mapping points to pixels on
+  Windows to match the system method. [Joaquin Cuenca Abela,
+  Tor Lillqvist]
+* Fix family listing for the FT2 backend. [Sven Neumann]
+* Fix memory leak in pango_font_real_get_metrics() [Matthias Clasen]
+* Some compilation warning fixes. [David L. Cooper II]
+* Fix passing attr_list == NULL to pango_parse_markip [Andreas J. Guelzow]
+
+Changes between 1.0.1 and 1.0.2
+
+* Support building with FreeType 2.1.0
+* List Sans,Serif,Monospace when listing fonts for the
+  Xft and FT2 backends. (Xavier Cho)
+* Portability fixes. (David L. Cooper II, Jacob Berkman)
+* Fix problem with pango-querymodules using g_print().
+
+Changes between 1.0.0 and 1.0.1
+
+* Documentation improvements [Matthias Clasen]
+* Use new API in FreeType 2.0.9 to greatly speed up coverage
+  calculation for Xft and FT2 backends.
+* Some fixes for reading of OpenType tables.
+* Add -D_REENTRANT to compilation when necessary. [Sven Neumann]
+* Try and enable ClearType for Win32 backend. [Tor Lillqvist]
+* Fixes for Korean glyphs in the basic-x shaper [Changwoo Ryu]
+* Improvements for computation of average char/digit width [Sven Neumann]
+* Bug and error reporting fixes 
+  [Arnaud Charlet, Erwann Chenede, Mikael Hallendal, Stefan Israelsson, 
+   Alex Larsson, Soeren Sandmann, Dan Winship]
+
+============================================================
+
+Changes between 1.0.0 rc2 and 1.0.0
+
+* Updated README files.
+* Minor build fixes [Tor Lillqvist, Jacob Berkman]
+
+Changes between 1.0.0 rc1 and 1.0.0 rc2
+
+* Fix missing weight names when parsing font names [Arnaud Charlet]
+* Build fixes [Martin Gansser, Manish Singh]
+
+Changes between 0.26 and 1.0.0 rc1
+
+* Try to build libraries with only shared library dependencies
+  on Xft to deal with transition to Xft2.
+* Efficiency improvements for Xft backend
+* Bug, build and portability fixes
+
+Contributors: Jacob Berkman, Abel Cheung, David L. Cooper II, 
+  Miroslaw Dobrzanski-Neumann, , Dov Grobgeld, Alex Larsson, Tor Lillqvist, 
+  Sven Neumann, Gediminas Paulauskas, Manish Singh, Raymond Wan, 
+  Richard Warren.
+
+Changes between 0.25 and 0.26
+
+* Fixes for AIX compilation [Miroslaw Dobrzanski-Neumann]
+* Fix zero-width characters being displayed [Sven Neumann]
+* Add some padding to class structures [Owen Taylor]
+
+Changes between 0.24 and 0.25
+
+* Win32 fixes [Tor Lillqvist, Hans Breuer]
+* Cleanup of <ctype.h> [Darin Adler]
+* Bug and build fixes [Anders Carlsson, Sven Neumann, Havoc Pennington,
+  Morten Welinder]
+
+Changes between 0.23 and 0.24
+
+* Win32 backend improvements [Tor Lillqvist]
+* Doc improvements [Havoc Pennington, Dennis Bjorklund]
+* Fix problem where "foo\n" was treated as one paragraph by pango-layout,
+  not two. [Arjan J. Molenaar, Owen Taylor]
+* Add glyph caching to FT2 backend [Alex Larsson]
+* Try to make configure checks for Qt-based example more robust [Owen]
+* New example program for FT2 backend [Dov Grobgeld]
+* Arabic shaper for FT2 backend [Andreas Bogk, Sven Neumann]
+* Bug fixes
+
+Other contributors: Mikael Hermansson, Darin Adler, Hidetoshi Tajima, Zack Rusin, 
+  Jacob Berkman, Jason Tackaberry, Evan Martin, Matthias Clasen
+
+Changes between 0.22 and 0.23
+
+* Documentation improvements [Matthias Clasen]
+* Win32 fixes [Hans Breuer]
+* Improve search for XftConfig [Manish Singh]
+* Fixes for crashes in Hangul shaper [Owen Taylor]
+* Improvements to Arabic shapers for X and Xft [Roozbeh Pournader]
+* Add jisx0212, jisx0201, Big5 support to basic shaper [HideToshi Tajima]
+* Many bug fixes
+
+Other contributors: Darin Adler, Dennis Dementiev, Sebastian Klemke, 
+  Alex Larsson, Sven Neumann, Joshua Pritikin, Padraig O'Briain, 
+  Kristian Rietveld, Sebastian Wilhelmi
+
+Changes between 0.21 and 0.22
+
+* Documentation improvements [Matthias Clasen]
+* Win32 fixes [Tor Lillqvist, Hans Breuer]
+* Improve line-breaking algorithm to not be O(n^2) [Alex Larsson]
+* API addition to render to Xrender drawable
+* Restructure so that "font sets" are handled by the core 
+  for all backends [Alex]
+* Use the Xft font configuration scheme for the FT2 backend as well [Alex]
+
+Other Contributors: Darin Alder, Sven Neumann, Raymond Wan
+
+Changes between 0.20 and 0.21
+
+* Documentation improvements. [Matthias Clasen, Sven Neumann]
+* pango_break() now reports n + 1 attributes for n characters, not n. [Havoc Pennington]
+* Win32 fixes, including support for configure.in on Win32. [Tor Lillqvist]
+* Bug fixes [Tony Graham, Eric Lemings, Manish Singh, Sven Neumann, Matt Wilson, 
+             Frank Belew]
+
+Changes between 0.19 and 0.20
+
+* Change PangoFontDescription to save values for unset fields
+* Fix for compilation with FreeType 2.0.4 [Havoc Pennington]
+* Add PANGO_TYPE_FONT_METRICS [James Henstridge]
+* Win32 fixes and updates [Hans Breuer
+* PangoLayout bug fixes [Alex Larsson, Padraig O'Briain]
+* Misc fixes and cleanups.
+
+Other contributors: Matthias Clasen, Tony Graham, Mario Motta, Sven Neumann
+
+Changes between 0.18 and 0.19
+
+* Change font listing API to be more extensible. Instead of
+  using family names and 
+* Make PangoMetrics and PangoFontDescription opaque heap-allocated
+  structures to allow extension going forward.
+* Allow for PangoFontDescription structures with unspecified
+  style/variant/stretch/weight.
+* Add PANGO_ENABLE_BACKEND and PANGO_ENABLE_ENGINE #defines to
+  protect parts of the API where we don't want to guarantee
+  source binary compatibility for 1.x.
+* Bug fixes.
+
+Changes between 0.17 and 0.18
+
+* Add PangoLanguage type for language tags, use consistently.
+* Add support for different font orderings for different lanuages to
+  basic shaper.
+* Win32 fixes [Alex,Hans]
+* Add pango_context_get_metrics() to get metrics for a font description
+* Add GTypes for various types [James]
+* Lots of warning fixes [Darin]
+* Fix to PangoLayout for lines with only tabs on them [Matthias]
+* Improve compositing of glyphs for pangoft2 backend [Sven]
+* Export pango_color_parse().
+* Adapt to changes in GLib.
+* Build and bug fixes.
+
+Changes between 0.16 and 0.17
+
+* Build/bug fixes
+* Cursor motion is now by graphemes (logical editing units) rather than 
+  by characters
+* Optionally support jumping cursor instead of split cursor
+
+Changes between 0.15 and 0.16
+
+* Ability to make newlines in a PangoLayout display as regular characters
+  (useful for, e.g., having an entry widget with embedded newlines.)
+* Build fixes
+* Bug fixes
+
+Changes between 0.14 and 0.15
+
+* New version of Tamil shaper from Vikram Subramanian
+* Update mini-fribidi to correspond to the latest FriBidi CVS
+* Win32 fixes
+* More documentation
+* Various minor bug and build fixes. 
+
+
+Changes between 0.13 and 0.14
+
+* Win32 improvements [Tor]
+* Much better boundary resolution using algorithms from the Unicode
+  standard [Havoc]
+* Initial support for anti-aliased TrueType and OpenType fonts
+  using the Xft and Xrender libraries from XFree86 4. [Owen]
+* Fix the FreeType support on Unix so it can be used for the frame-buffer 
+  port of GTK+. [Alex]
+* Fix up module building [Alex]
+* Add average-character-width font metric [Havoc]
+* Bug fixes
+
+
+Changes between 0.12 and 0.13
+
+* Win32 Support [Tor]
+* Per-display caching of font coverage on the root window  [Owen]
+* Handling of embedded non-characters in PangoLayout [Elliot]
+* Mapping table fixes and improvements [KUSANO Takayuki, Abigail, Owen]
+* Adjustable tab handling in PangoLayout [Havoc]
+* Add relative font-scaling attribute [Havoc]
+* Add function to convert XML/GMarkup description to a PangoAttrList [Havoc]
+* New version of Arabic shaper [Karl]
+* Enhanced Indic support with ligature tables from the font and
+  many more languages [Abigail]
+* Include FriBidi core that provides the features that Pango needs and
+  can be used instead of separately installed fribidi. [Owen]
+* Add PangoLayoutIterator that abstracts the geometry operations for
+  iterating over the lines/items/clusters/chars in a layout [Havoc]
+* Bug fixes, and more bug fixes
+
+
+What is new in GScript 0.1:
+
+* Initial release
+
+
+# Local Variables:
+# coding: utf-8
+# End:
+# vim: encoding=utf-8:
diff --git a/README b/README
new file mode 100755 (executable)
index 0000000..809845e
--- /dev/null
+++ b/README
@@ -0,0 +1,95 @@
+Pango is a library for layout and rendering of text, with an emphasis
+on internationalization. Pango can be used anywhere that text layout
+is needed; however, most of the work on Pango so far has been done using 
+the GTK+ widget toolkit as a test platform. Pango forms the core of text
+and font handling for GTK+-2.x.
+
+Pango is designed to be modular; the core Pango layout can be used
+with different font backends. There are three basic backends, with
+multiple options for rendering with each.
+
+ - Client side fonts using the FreeType and fontconfig libraries.
+   Rendering can be with with Cairo or Xft libraries, or directly
+   to an in-memory buffer with no additional libraries.
+
+ - Native fonts on Microsoft Windows using Uniscribe if available for
+   complex script handling. Rendering can be done via Cairo or
+   directly using the native Win32 API.
+
+  - Native fonts on MacOS X, rendering via Cairo.
+
+The integration of Pango with Cairo (http://cairographics.org)
+provides a complete solution with high quality text handling 
+and graphics rendering.
+
+Dynamically loaded modules then handle text layout for particular
+combinations of script and font backend.
+
+As well as the low level layout rendering routines, Pango includes
+PangoLayout, a high level driver for laying out entire blocks of text,
+and routines to assist in editing internationalized text.
+
+For more information about Pango, see:
+
+ http://www.pango.org/
+
+Dependencies
+============
+
+Pango depends on the GLib library; more information about GLib can
+be found at http://www.gtk.org/.
+
+When using client side fonts, the fontconfig library
+(http://www.fontconfig.org) to look up fonts. At least version 2.0.9
+of the FreeType font handling library (http://www.freetype.org) is
+also required.
+
+Cairo support depends on the Cairo library (http://cairographics.org).
+The Cairo backend is the preferred backend to use Pango with and is
+subject of most of the development in the future.  It has the
+advantage that the same code can be used for display and printing.
+
+We suggest using Pango with Cairo as described above, but you can also
+do X-specific rendering using the Xft library. The Xft backend uses
+version 2 of the Xft library to manage client side fonts. Version 2 of
+Xft is available from http://xlibs.freedesktop.org/release/.  You'll
+need the libXft package, and possibly the libXrender and renderext
+packages as well.  You'll also need fontconfig (see below.)
+
+Installation of Pango on Win32 is possible, but is not documented
+here. See http://www.gimp.org/~tml/gimp/win32/downloads.html
+
+Notes
+=====
+
+ - By default, Pango tries to build itself so that no explicit
+   dependency on Xft or FreeType will be introduced in apps that
+   link to Pango. This is to avoid compatibility problems with
+   changes in the Xft or FreeType API's or ABI's. Specifying 
+   --enable-explicit-deps or --enable-static when configuring Pango 
+   will defeat this and should be avoided if possible.
+
+License
+=======
+
+Most of the code of Pango is licensed under the terms of the 
+GNU Lesser Public License (LGPL) - see the file COPYING for details.
+
+The OpenType code in pango/opentype is derived from the FreeType 
+project (http://www.freetype.org) and is dual-licensed under the 
+GNU General Public License and the FreeType license. See see
+pango/opentype/FT-license.txt for full details of the FreeType 
+license.
+
+Note that binary distributions of Pango must include a disclaimer 
+that the software is based in part of the work of the FreeType Team, 
+in the distribution documentation; for instance, by including this 
+README file.
+
+Owen Taylor
+otaylor@redhat.com
+
+Behdad Esfahbod
+behdad@gnome.org
+
+26 February 2007
diff --git a/README.win32 b/README.win32
new file mode 100755 (executable)
index 0000000..68fcd8a
--- /dev/null
@@ -0,0 +1,50 @@
+The Pango backends written for Win32 is pangowin32. Pangowin32 uses
+the Win32 GDI font API. GTK+ 2.8 and later on Win32 however actually
+uses the pangocairo backend (which then uses only small parts of
+pangowin32). Much of the GDI font API calls are in cairo.
+
+The pangoft2 backend was originally written with Win32 in mind, but
+its main use nowadays is on other platforms than Win32.
+
+There are two ways to build Pango for Win32:
+
+1) Use gcc (mingw), libtool, make, like on Unix.
+
+If building from CVS, run the autogen.sh script that runs aclocal,
+automake, autoconf and configure to build makefiles etc. This is what
+tml@novell.com uses. Pass the same switches to autogen.sh that you
+would pass to the configure script.
+
+If building from a tarball, just running the configure script and then
+make should be enough. But, as always, you need to understand what is
+happening and follow the progress in case manual intervention is
+needed.
+
+If you want to support complex scripts (which you should!), you need
+the usp10.h header from the Platform SDK. Otherwise the basic-win32
+shaper module won' use Uniscribe and for instance Arabic and Indic
+scripts will look like crap. (Yes, complex script support *is*
+important. It is one of the main selling points of GTK+ and Pango.)
+Pass the --with-usp10 flag to the configure script to tell it where
+you have the Platform SDK (or other source of an "usp10.h" or
+"include/usp10.h" file).
+
+tml ran the configure script like this when building binaries for
+Pango 1.10.0:
+
+PATH=/devel/dist/glib-2.8.0/bin:$PATH ACLOCAL_FLAGS="-I /devel/dist/glib-2.8.0/share/aclocal" PKG_CONFIG_PATH=/devel/dist/glib-2.8.0/lib/pkgconfig:$PKG_CONFIG_PATH CC='gcc -mtune=pentium3' CPPFLAGS='-I/opt/gnu/include' LDFLAGS='-L/opt/gnu/lib' CFLAGS=-O ./configure --disable-gtk-doc --with-usp10=/opt/psdk  --without-x --prefix=c:/devel/target/pango-1.10.0
+
+The pango.modules file tends not to get automatically set up correctly
+on Win32. Check that. Also make sure you set up a pango.aliases file
+if you want to support non-Latin scripts. pango.aliases file used by
+tml looks like this:
+
+tahoma = "tahoma,browallia new,mingliu,simhei,gulimche,ms gothic,latha,mangal"
+sans = "arial,browallia new,mingliu,simhei,gulimche,ms gothic,latha,mangal"
+serif = "times new roman,angsana new,mingliu,simsun,gulimche,ms gothic,latha,mangal"
+monospace = "courier new,courier monothai,mingliu,simsun,gulimche,ms gothic,latha,mangal"
+
+2) Use MSVC and nmake. Use the makefile.msc makefiles. These makefiles
+are supported by Hans Breuer. They requires manual editing. You need
+to have the source code to some suitable version of glib in a sibling
+directory. Ask Hans for advice.
diff --git a/THANKS b/THANKS
new file mode 100755 (executable)
index 0000000..286f60e
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,13 @@
+Abigail Brady (Indic shapers)
+Hans Breuer (Windows backend)
+Matthias Clasen (Documentation)
+Sivaraj Doddannan (Tamil shaper)
+Behdad Esfahbod
+Dov Grobgeld (Hebrew shaper)
+Karl Koehler (Arabic shaper)
+Alex Larsson (FreeType and Windows backends)
+Tor Lillqvist (FreeType and Windows backends)
+Changwoo Ryu (Hangul shaper)
+Havoc Pennington
+Roozbeh Pournader (Arabic shaper)
+Chookij Vanatham (Hebrew shaper)
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100755 (executable)
index 0000000..48fd5d8
--- /dev/null
@@ -0,0 +1,57 @@
+
+# Checks the location of the XML Catalog
+# Usage:
+#   JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
+AC_DEFUN([JH_PATH_XML_CATALOG],
+[
+  # check for the presence of the XML catalog
+  AC_ARG_WITH([xml-catalog],
+              AC_HELP_STRING([--with-xml-catalog=CATALOG],
+                             [path to xml catalog to use]),,
+              [with_xml_catalog=/etc/xml/catalog])
+  jh_found_xmlcatalog=true
+  XML_CATALOG_FILE="$with_xml_catalog"
+  AC_SUBST([XML_CATALOG_FILE])
+  AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
+  if test -f "$XML_CATALOG_FILE"; then
+    AC_MSG_RESULT([found])
+  else
+    jh_found_xmlcatalog=false
+    AC_MSG_RESULT([not found])
+  fi
+
+  # check for the xmlcatalog program
+  AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
+  if test "x$XMLCATALOG" = xno; then
+    jh_found_xmlcatalog=false
+  fi
+
+  if $jh_found_xmlcatalog; then
+    ifelse([$1],,[:],[$1])
+  else
+    ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
+  fi
+])
+
+# Checks if a particular URI appears in the XML catalog
+# Usage:
+#   JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+AC_DEFUN([JH_CHECK_XML_CATALOG],
+[
+  AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+  AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+  if $jh_found_xmlcatalog && \
+     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
+    AC_MSG_RESULT([found])
+    ifelse([$3],,,[$3
+])dnl
+  else
+    AC_MSG_RESULT([not found])
+    ifelse([$4],,
+       [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
+       [$4])
+  fi
+])
+
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100755 (executable)
index 0000000..1c810f7
--- /dev/null
@@ -0,0 +1,8973 @@
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_quote(m4_if([$2], [],
+                    m4_quote(lt_decl_tag_varnames),
+                 m4_quote(m4_shift($@)))),
+     m4_split(m4_normalize(m4_quote(_LT_TAGS))))])
+m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on 
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it? 
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      icc* | ecc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
+
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+m4_define([lt_combine],
+[m4_if([$2], [], [],
+  [m4_if([$4], [], [],
+    [lt_join(m4_quote(m4_default([$1], [[, ]])),
+      lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_prefix, [$2],
+                  [m4_foreach(_Lt_suffix, lt_car([m4_shiftn(3, $@)]),
+                              [_Lt_prefix[]$3[]_Lt_suffix ])])))))])])dnl
+])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
+
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 2976 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.4])
+m4_define([LT_PACKAGE_REVISION], [1.2976])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.4'
+macro_revision='1.2976'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH(html-dir,
+    AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST(HTML_DIR)
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE(gtk-doc,
+    AC_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [default=no]]),,
+    enable_gtk_doc=no)
+
+  have_gtk_doc=no
+  if test x$enable_gtk_doc = xyes; then
+    if test -z "$PKG_CONFIG"; then
+      AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+    fi
+    if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
+      have_gtk_doc=yes
+    fi
+
+  dnl do we want to do a version check?
+ifelse([$1],[],,
+    [gtk_doc_min_version=$1
+    if test "$have_gtk_doc" = yes; then
+      AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
+      if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
+        AC_MSG_RESULT(yes)
+      else
+        AC_MSG_RESULT(no)
+        have_gtk_doc=no
+      fi
+    fi
+])
+    if test "$have_gtk_doc" != yes; then
+      enable_gtk_doc=no
+    fi
+  fi
+
+  AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
+  AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+               
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+                        [pkg_failed=yes])
+    fi
+else
+       pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+               [AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+       ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+               [$4])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+        [AM_AUTOMAKE_VERSION([1.9.6])])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..2482946
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+REQUIRED_AUTOMAKE_VERSION=1.9
+
+PKG_NAME="pango"
+
+(test -f $srcdir/configure.in \
+  && test -f $srcdir/README \
+  && test -d $srcdir/pango) || {
+    echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+    echo " top-level $PKG_NAME directory"
+    exit 1
+}
+
+which gnome-autogen.sh || {
+    echo "You need to install gnome-common from the GNOME SVN"
+    exit 1
+}
+USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh
diff --git a/compile b/compile
new file mode 100755 (executable)
index 0000000..1b1d232
--- /dev/null
+++ b/compile
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2005-05-14.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as `compile cc -o foo foo.c'.
+       # So we strip `-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..917bbc5
--- /dev/null
@@ -0,0 +1,1463 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-07-08'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[45])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    x86:Interix*:[34]*)
+       echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+       exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    arm*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit ;;
+         coff-i386)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #ifdef __INTEL_COMPILER
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+       test x"${LIBC}" != x && {
+               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+               exit
+       }
+       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           *86) UNAME_PROCESSOR=i686 ;;
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100755 (executable)
index 0000000..6cb8368
--- /dev/null
@@ -0,0 +1,149 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Have usable Cairo library and font backend */
+#undef HAVE_CAIRO
+
+/* Whether Cairo can use ATSUI for fonts */
+#undef HAVE_CAIRO_ATSUI
+
+/* Whether Cairo can use FreeType for fonts */
+#undef HAVE_CAIRO_FREETYPE
+
+/* Whether Cairo has PDF support */
+#undef HAVE_CAIRO_PDF
+
+/* Whether Cairo has PNG support */
+#undef HAVE_CAIRO_PNG
+
+/* Whether Cairo has PS support */
+#undef HAVE_CAIRO_PS
+
+/* Whether Cairo can use the Win32 GDI for fonts */
+#undef HAVE_CAIRO_WIN32
+
+/* Whether Cairo has Xlib support */
+#undef HAVE_CAIRO_XLIB
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `flockfile' function. */
+#undef HAVE_FLOCKFILE
+
+/* Have FreeType 2 library */
+#undef HAVE_FREETYPE
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtok_r' function. */
+#undef HAVE_STRTOK_R
+
+/* Define to 1 if you have the `sysconf' function. */
+#undef HAVE_SYSCONF
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Have X libraries */
+#undef HAVE_X
+
+/* Have Xft library */
+#undef HAVE_XFT
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Module interface version */
+#undef MODULE_VERSION
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* PANGO binary age */
+#undef PANGO_BINARY_AGE
+
+/* PANGO interface age */
+#undef PANGO_INTERFACE_AGE
+
+/* PANGO major version */
+#undef PANGO_VERSION_MAJOR
+
+/* PANGO micro version */
+#undef PANGO_VERSION_MICRO
+
+/* PANGO minor version */
+#undef PANGO_VERSION_MINOR
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Whether to load modules via .la files rather than directly */
+#undef USE_LA_MODULES
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..1c366df
--- /dev/null
@@ -0,0 +1,1579 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-07-08'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64vr | mips64vrel \
+       | mips64orion | mips64orionel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | ms1 \
+       | msp430 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b \
+       | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m32c)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | ms1-* \
+       | msp430-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa-* \
+       | ymp-* \
+       | z8k-*)
+               ;;
+       m32c-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16c)
+               basic_machine=cr16c-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..16183e6
--- /dev/null
+++ b/configure
@@ -0,0 +1,25466 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for pango 1.26.1.
+#
+# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=pango>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes &&    (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+        /*)
+          for as_base in sh bash ksh sh5; do
+            as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+          done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+        # Try only shells that exist, to save several forks.
+        if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+               { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+              as_have_required=yes
+              if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='pango'
+PACKAGE_TARNAME='pango'
+PACKAGE_VERSION='1.26.1'
+PACKAGE_STRING='pango 1.26.1'
+PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=pango'
+
+ac_unique_file="pango.pc.in"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+PANGO_VERSION_MAJOR
+PANGO_VERSION_MINOR
+PANGO_VERSION_MICRO
+PANGO_VERSION
+PANGO_API_VERSION
+PANGO_INTERFACE_AGE
+PANGO_BINARY_AGE
+PANGO_MODULE_VERSION
+PANGO_CURRENT_MINUS_AGE
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+LIB_EXE_MACHINE_FLAG
+OS_WIN32_TRUE
+OS_WIN32_FALSE
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+CXX
+CXXFLAGS
+ac_ct_CXX
+CXXDEPMODE
+am__fastdepCXX_TRUE
+am__fastdepCXX_FALSE
+HAVE_CXX_TRUE
+HAVE_CXX_FALSE
+CPP
+GREP
+EGREP
+AS
+DLLTOOL
+OBJDUMP
+LIBTOOL
+SED
+FGREP
+LD
+DUMPBIN
+ac_ct_DUMPBIN
+NM
+LN_S
+AR
+RANLIB
+lt_ECHO
+DSYMUTIL
+NMEDIT
+LIPO
+OTOOL
+OTOOL64
+CXXCPP
+PLATFORM_WIN32_TRUE
+PLATFORM_WIN32_FALSE
+WINDRES
+ms_librarian
+MS_LIB_AVAILABLE_TRUE
+MS_LIB_AVAILABLE_FALSE
+PANGO_DEBUG_FLAGS
+CROSS_COMPILING_TRUE
+CROSS_COMPILING_FALSE
+XMKMF
+X_CFLAGS
+X_PRE_LIBS
+X_LIBS
+X_EXTRA_LIBS
+HAVE_X_TRUE
+HAVE_X_FALSE
+PKG_CONFIG
+FONTCONFIG_CFLAGS
+FONTCONFIG_LIBS
+FREETYPE_CFLAGS
+FREETYPE_LIBS
+HAVE_FREETYPE_TRUE
+HAVE_FREETYPE_FALSE
+XFT_CFLAGS
+XFT_LIBS
+HAVE_XFT_TRUE
+HAVE_XFT_FALSE
+WIN32_LIBS
+HAVE_WIN32_TRUE
+HAVE_WIN32_FALSE
+CAIRO_CFLAGS
+CAIRO_LIBS
+HAVE_CAIRO_TRUE
+HAVE_CAIRO_FALSE
+HAVE_CAIRO_PNG_TRUE
+HAVE_CAIRO_PNG_FALSE
+HAVE_CAIRO_PS_TRUE
+HAVE_CAIRO_PS_FALSE
+HAVE_CAIRO_PDF_TRUE
+HAVE_CAIRO_PDF_FALSE
+HAVE_CAIRO_XLIB_TRUE
+HAVE_CAIRO_XLIB_FALSE
+HAVE_CAIRO_WIN32_TRUE
+HAVE_CAIRO_WIN32_FALSE
+HAVE_CAIRO_FREETYPE_TRUE
+HAVE_CAIRO_FREETYPE_FALSE
+HAVE_CAIRO_ATSUI_TRUE
+HAVE_CAIRO_ATSUI_FALSE
+GLIB_CFLAGS
+GLIB_LIBS
+GLIB_MKENUMS
+LIBTHAI_CFLAGS
+LIBTHAI_LIBS
+INTROSPECTION_CFLAGS
+INTROSPECTION_LIBS
+HAVE_INTROSPECTION_TRUE
+HAVE_INTROSPECTION_FALSE
+G_IR_SCANNER
+G_IR_COMPILER
+G_IR_GENERATE
+GIRDIR
+TYPELIBDIR
+HAVE_INCLUDED_MODULES_TRUE
+HAVE_INCLUDED_MODULES_FALSE
+HAVE_DYNAMIC_MODULES_TRUE
+HAVE_DYNAMIC_MODULES_FALSE
+INCLUDED_X_MODULES
+INCLUDED_FC_MODULES
+INCLUDED_WIN32_MODULES
+INCLUDED_ATSUI_MODULES
+INCLUDED_LANG_MODULES
+INCLUDE_ARABIC_FC_TRUE
+INCLUDE_ARABIC_FC_FALSE
+INCLUDE_ARABIC_LANG_TRUE
+INCLUDE_ARABIC_LANG_FALSE
+INCLUDE_BASIC_FC_TRUE
+INCLUDE_BASIC_FC_FALSE
+INCLUDE_BASIC_WIN32_TRUE
+INCLUDE_BASIC_WIN32_FALSE
+INCLUDE_BASIC_X_TRUE
+INCLUDE_BASIC_X_FALSE
+INCLUDE_BASIC_ATSUI_TRUE
+INCLUDE_BASIC_ATSUI_FALSE
+INCLUDE_HANGUL_FC_TRUE
+INCLUDE_HANGUL_FC_FALSE
+INCLUDE_HEBREW_FC_TRUE
+INCLUDE_HEBREW_FC_FALSE
+INCLUDE_INDIC_FC_TRUE
+INCLUDE_INDIC_FC_FALSE
+INCLUDE_INDIC_LANG_TRUE
+INCLUDE_INDIC_LANG_FALSE
+INCLUDE_KHMER_FC_TRUE
+INCLUDE_KHMER_FC_FALSE
+INCLUDE_SYRIAC_FC_TRUE
+INCLUDE_SYRIAC_FC_FALSE
+INCLUDE_THAI_FC_TRUE
+INCLUDE_THAI_FC_FALSE
+INCLUDE_THAI_LANG_TRUE
+INCLUDE_THAI_LANG_FALSE
+INCLUDE_TIBETAN_FC_TRUE
+INCLUDE_TIBETAN_FC_FALSE
+DYNAMIC_ARABIC_FC_TRUE
+DYNAMIC_ARABIC_FC_FALSE
+DYNAMIC_ARABIC_LANG_TRUE
+DYNAMIC_ARABIC_LANG_FALSE
+DYNAMIC_BASIC_FC_TRUE
+DYNAMIC_BASIC_FC_FALSE
+DYNAMIC_BASIC_WIN32_TRUE
+DYNAMIC_BASIC_WIN32_FALSE
+DYNAMIC_BASIC_X_TRUE
+DYNAMIC_BASIC_X_FALSE
+DYNAMIC_BASIC_ATSUI_TRUE
+DYNAMIC_BASIC_ATSUI_FALSE
+DYNAMIC_HANGUL_FC_TRUE
+DYNAMIC_HANGUL_FC_FALSE
+DYNAMIC_HEBREW_FC_TRUE
+DYNAMIC_HEBREW_FC_FALSE
+DYNAMIC_INDIC_FC_TRUE
+DYNAMIC_INDIC_FC_FALSE
+DYNAMIC_INDIC_LANG_TRUE
+DYNAMIC_INDIC_LANG_FALSE
+DYNAMIC_KHMER_FC_TRUE
+DYNAMIC_KHMER_FC_FALSE
+DYNAMIC_SYRIAC_FC_TRUE
+DYNAMIC_SYRIAC_FC_FALSE
+DYNAMIC_THAI_FC_TRUE
+DYNAMIC_THAI_FC_FALSE
+DYNAMIC_THAI_LANG_TRUE
+DYNAMIC_THAI_LANG_FALSE
+DYNAMIC_TIBETAN_FC_TRUE
+DYNAMIC_TIBETAN_FC_FALSE
+HTML_DIR
+ENABLE_GTK_DOC_TRUE
+ENABLE_GTK_DOC_FALSE
+GTK_DOC_USE_LIBTOOL_TRUE
+GTK_DOC_USE_LIBTOOL_FALSE
+XSLTPROC
+XML_CATALOG_FILE
+XMLCATALOG
+ENABLE_MAN_TRUE
+ENABLE_MAN_FALSE
+GLIB_PREFIX
+CAIRO_PREFIX
+ENABLE_DOC_CROSS_REFERENCES_TRUE
+ENABLE_DOC_CROSS_REFERENCES_FALSE
+LIBRARY_LIBTOOL_OPTIONS
+MODULE_LIBTOOL_OPTIONS
+PKGCONFIG_MATH_LIBS
+PKGCONFIG_CAIRO_REQUIRES
+DISABLE_EXPLICIT_DEPS_TRUE
+DISABLE_EXPLICIT_DEPS_FALSE
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+CPP
+CXXCPP
+XMKMF
+PKG_CONFIG
+FONTCONFIG_CFLAGS
+FONTCONFIG_LIBS
+FREETYPE_CFLAGS
+FREETYPE_LIBS
+XFT_CFLAGS
+XFT_LIBS
+CAIRO_CFLAGS
+CAIRO_LIBS
+GLIB_CFLAGS
+GLIB_LIBS
+LIBTHAI_CFLAGS
+LIBTHAI_LIBS
+INTROSPECTION_CFLAGS
+INTROSPECTION_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)   ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$0" : 'X\(//\)[^/]' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures pango 1.26.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/pango]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+X features:
+  --x-includes=DIR    X include files are in DIR
+  --x-libraries=DIR   X library files are in DIR
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of pango 1.26.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-static[=PKGS]  build static libraries [default=no]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-debug=[no/minimum/yes]
+                          turn on debugging [default=minimum]
+  --disable-rebuilds      disable all source autogeneration rules
+  --enable-gtk-doc        use gtk-doc to build documentation default=no
+  --enable-man            regenerate man pages from Docbook [default=no]
+  --disable-doc-cross-references
+                          cross reference glib and cairo symbols [default=yes]
+  --enable-explicit-deps=[no/auto/yes]
+                          use explicit dependencies in .pc files
+                          [default=auto]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-x                use the X Window System
+  --with-included-modules=no/yes/MODULE1 MODULE2 ...
+                          build the given modules included [default=no]
+  --with-dynamic-modules=no/yes/MODULE1 MODULE2 ...
+                          build the given dynamic modules [default=yes]
+  --with-html-dir=PATH    path to installed docs
+  --with-xml-catalog=CATALOG
+                          path to xml catalog to use
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CPP         C preprocessor
+  CXXCPP      C++ preprocessor
+  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  PKG_CONFIG  path to pkg-config utility
+  FONTCONFIG_CFLAGS
+              C compiler flags for FONTCONFIG, overriding pkg-config
+  FONTCONFIG_LIBS
+              linker flags for FONTCONFIG, overriding pkg-config
+  FREETYPE_CFLAGS
+              C compiler flags for FREETYPE, overriding pkg-config
+  FREETYPE_LIBS
+              linker flags for FREETYPE, overriding pkg-config
+  XFT_CFLAGS  C compiler flags for XFT, overriding pkg-config
+  XFT_LIBS    linker flags for XFT, overriding pkg-config
+  CAIRO_CFLAGS
+              C compiler flags for CAIRO, overriding pkg-config
+  CAIRO_LIBS  linker flags for CAIRO, overriding pkg-config
+  GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
+  GLIB_LIBS   linker flags for GLIB, overriding pkg-config
+  LIBTHAI_CFLAGS
+              C compiler flags for LIBTHAI, overriding pkg-config
+  LIBTHAI_LIBS
+              linker flags for LIBTHAI, overriding pkg-config
+  INTROSPECTION_CFLAGS
+              C compiler flags for INTROSPECTION, overriding pkg-config
+  INTROSPECTION_LIBS
+              linker flags for INTROSPECTION, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=pango>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+pango configure 1.26.1
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by pango $as_me 1.26.1, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+       "$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+       ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+am__api_version="1.9"
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+           break 3
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='pango'
+ VERSION='1.26.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+PANGO_VERSION_MAJOR=1
+PANGO_VERSION_MINOR=26
+PANGO_VERSION_MICRO=1
+PANGO_VERSION=1.26.1
+PANGO_API_VERSION=1.0
+PANGO_INTERFACE_AGE=1
+PANGO_BINARY_AGE=2601
+PANGO_MODULE_VERSION=1.6.0
+
+
+
+
+
+
+
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define MODULE_VERSION "1.6.0"
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define PANGO_BINARY_AGE 2601
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define PANGO_INTERFACE_AGE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define PANGO_VERSION_MAJOR 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define PANGO_VERSION_MINOR 26
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define PANGO_VERSION_MICRO 1
+_ACEOF
+
+
+
+
+
+VERSION_INFO="2600:1:2600"
+PANGO_CURRENT_MINUS_AGE=0
+
+
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+{ echo "$as_me:$LINENO: checking for native Win32" >&5
+echo $ECHO_N "checking for native Win32... $ECHO_C" >&6; }
+case "$host" in
+  *-*-mingw*)
+    pango_os_win32=yes
+    case "$host" in
+      x86_64-*-*)
+       LIB_EXE_MACHINE_FLAG=X64
+       ;;
+      *)
+       LIB_EXE_MACHINE_FLAG=X86
+       ;;
+    esac
+    ;;
+  *)
+    pango_os_win32=no
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $pango_os_win32" >&5
+echo "${ECHO_T}$pango_os_win32" >&6; }
+
+
+
+
+
+if test "$pango_os_win32" = "yes"; then
+  OS_WIN32_TRUE=
+  OS_WIN32_FALSE='#'
+else
+  OS_WIN32_TRUE='#'
+  OS_WIN32_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$CXX" && break
+done
+test -n "$CXX" || CXX="gcc"
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+class a { int b; } c;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CXX=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+if test "$CXX" != ""; then
+  HAVE_CXX_TRUE=
+  HAVE_CXX_FALSE='#'
+else
+  HAVE_CXX_TRUE='#'
+  HAVE_CXX_FALSE=
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+#
+# Checks for HarfBuzz
+#
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+
+
+
+for ac_func in mprotect sysconf getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+    # Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_GREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+    # Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_EGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+for ac_header in unistd.h sys/mman.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------------------------------------------- ##
+## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=pango ##
+## -------------------------------------------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Make sure we don't link to libstdc++ (needs de-gcc-fication)
+CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions"
+
+
+#
+# Win32 stuff
+#
+
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AS+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AS"; then
+  ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AS="${ac_tool_prefix}as"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+  { echo "$as_me:$LINENO: result: $AS" >&5
+echo "${ECHO_T}$AS" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+  ac_ct_AS=$AS
+  # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AS"; then
+  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AS="as"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_AS" >&5
+echo "${ECHO_T}$ac_ct_AS" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_AS" = x; then
+    AS="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    AS=$ac_ct_AS
+  fi
+else
+  AS="$ac_cv_prog_AS"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { echo "$as_me:$LINENO: result: $DLLTOOL" >&5
+echo "${ECHO_T}$DLLTOOL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5
+echo "${ECHO_T}$ac_ct_DLLTOOL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+echo "${ECHO_T}$OBJDUMP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+echo "${ECHO_T}$ac_ct_OBJDUMP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+  ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=no
+fi
+
+
+
+
+
+
+
+
+
+
+if test "$pango_os_win32" = "yes"; then
+  if test x$enable_static = xyes -o x$enable_static = x; then
+    { echo "$as_me:$LINENO: WARNING: Disabling static library build, must build as DLL on Windows." >&5
+echo "$as_me: WARNING: Disabling static library build, must build as DLL on Windows." >&2;}
+    enable_static=no
+  fi
+  if test x$enable_shared = xno; then
+    { echo "$as_me:$LINENO: WARNING: Enabling shared library build, must build as DLL on Windows." >&5
+echo "$as_me: WARNING: Enabling shared library build, must build as DLL on Windows." >&2;}
+  fi
+  enable_shared=yes
+fi
+
+case `pwd` in
+  *\ * | *\    *)
+    { echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.4'
+macro_revision='1.2976'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     # Extract the first word of "sed gsed" to use in msg output
+if test -z "$SED"; then
+set dummy sed gsed; ac_prog_name=$2
+if test "${ac_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_SED_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in sed gsed; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+    # Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_SED_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+SED="$ac_cv_path_SED"
+if test -z "$SED"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in \$PATH" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+echo "${ECHO_T}$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     # Extract the first word of "fgrep" to use in msg output
+if test -z "$FGREP"; then
+set dummy fgrep; ac_prog_name=$2
+if test "${ac_cv_path_FGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_FGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in fgrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+    # Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_FGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+FGREP="$ac_cv_path_FGREP"
+if test -z "$FGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+echo "${ECHO_T}$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+echo "${ECHO_T}$DUMPBIN" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+echo "${ECHO_T}$ac_ct_DUMPBIN" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:6724: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:6727: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:6730: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+echo "${ECHO_T}$lt_cv_nm_interface" >&6; }
+
+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ echo "$as_me:$LINENO: result: $xsi_shell" >&5
+echo "${ECHO_T}$xsi_shell" >&6; }
+
+
+{ echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+echo "${ECHO_T}$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6; }
+else
+  { echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 7840 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_cc_needs_belf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+echo "${ECHO_T}$DSYMUTIL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+echo "${ECHO_T}$ac_ct_DSYMUTIL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { echo "$as_me:$LINENO: result: $NMEDIT" >&5
+echo "${ECHO_T}$NMEDIT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+echo "${ECHO_T}$ac_ct_NMEDIT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { echo "$as_me:$LINENO: result: $LIPO" >&5
+echo "${ECHO_T}$LIPO" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
+echo "${ECHO_T}$ac_ct_LIPO" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { echo "$as_me:$LINENO: result: $OTOOL" >&5
+echo "${ECHO_T}$OTOOL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
+echo "${ECHO_T}$ac_ct_OTOOL" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { echo "$as_me:$LINENO: result: $OTOOL64" >&5
+echo "${ECHO_T}$OTOOL64" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
+echo "${ECHO_T}$ac_ct_OTOOL64" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+echo $ECHO_N "checking for -single_module linker flag... $ECHO_C" >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+echo "${ECHO_T}$lt_cv_apple_cc_single_mod" >&6; }
+    { echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+echo $ECHO_N "checking for -exported_symbols_list linker flag... $ECHO_C" >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  lt_cv_ld_exported_symbols_list=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_ld_exported_symbols_list=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+echo "${ECHO_T}$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; }
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9886: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:9890: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      icc* | ecc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:10210: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:10214: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:10315: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:10319: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:10370: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:10374: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    { echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_shl_load=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6; }
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_shl_load=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; }
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  { echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_svld_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; }
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_dld_link=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; }
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 13118 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 13218 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+    else
+      { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    fi
+    ;;
+  *)
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6; }
+
+  { echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6; }
+
+  { echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           hardcode_direct_CXX=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           hardcode_minus_L_CXX=yes
+           hardcode_libdir_flag_spec_CXX='-L$libdir'
+           hardcode_libdir_separator_CXX=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+           allow_undefined_flag_CXX="-z nodefs"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+           hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           no_undefined_flag_CXX=' ${wl}-bernotok'
+           allow_undefined_flag_CXX=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec_CXX='$convenience'
+           archive_cmds_need_lc_CXX=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         allow_undefined_flag_CXX=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         ld_shlibs_CXX=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+        # as there is no search path for DLLs.
+        hardcode_libdir_flag_spec_CXX='-L$libdir'
+        allow_undefined_flag_CXX=unsupported
+        always_export_symbols_CXX=no
+        enable_shared_with_static_runtimes_CXX=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          ld_shlibs_CXX=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  whole_archive_flag_spec_CXX=''
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      freebsd[12]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+         hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+       hardcode_direct_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           link_all_deplibs_CXX=yes
+           ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           archive_cmds_need_lc_CXX=no
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
+             prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             old_archive_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             archive_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             archive_expsym_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+           export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             no_undefined_flag_CXX=' -zdefs'
+             archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             hardcode_libdir_flag_spec_CXX='-R$libdir'
+             whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             compiler_needs_object_CXX=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       ld_shlibs_CXX=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         hardcode_libdir_flag_spec_CXX='-R$libdir'
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       ld_shlibs_CXX=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+         hardcode_direct_absolute_CXX=yes
+         archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='${wl}-E'
+           whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               allow_undefined_flag_CXX=' -expect_unresolved \*'
+               archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+               ;;
+           esac
+
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+             hardcode_libdir_separator_CXX=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+           no_undefined_flag_CXX=' -zdefs'
+           archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           hardcode_libdir_flag_spec_CXX='-R$libdir'
+           hardcode_shlibpath_var_CXX=no
+           case $host_os in
+             solaris2.[0-5] | solaris2.[0-5].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           link_all_deplibs_CXX=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[0-5] | solaris2.[0-5].*) ;;
+               *)
+                 whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       no_undefined_flag_CXX='${wl}-z,text'
+       allow_undefined_flag_CXX='${wl}-z,nodefs'
+       archive_cmds_need_lc_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+       hardcode_libdir_separator_CXX=':'
+       link_all_deplibs_CXX=yes
+       export_dynamic_flag_spec_CXX='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$compiler_lib_search_path_CXX"; then
+            compiler_lib_search_path_CXX="${prev}${p}"
+          else
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$postdeps_CXX"; then
+          postdeps_CXX="${prev}${p}"
+        else
+          postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$predep_objects_CXX"; then
+          predep_objects_CXX="$p"
+        else
+          predep_objects_CXX="$predep_objects_CXX $p"
+        fi
+       else
+        if test -z "$postdep_objects_CXX"; then
+          postdep_objects_CXX="$p"
+        else
+          postdep_objects_CXX="$postdep_objects_CXX $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       ;;
+      *)
+       lt_prog_compiler_pic_CXX='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         lt_prog_compiler_static_CXX='-Bstatic'
+       else
+         lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             lt_prog_compiler_pic_CXX='+Z'
+           fi
+           ;;
+         aCC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             lt_prog_compiler_pic_CXX='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fpic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-qpic'
+           lt_prog_compiler_static_CXX='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             lt_prog_compiler_pic_CXX='-KPIC'
+             lt_prog_compiler_static_CXX='-Bstatic'
+             lt_prog_compiler_wl_CXX='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           lt_prog_compiler_pic_CXX='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           lt_prog_compiler_wl_CXX='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           lt_prog_compiler_pic_CXX='-pic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       lt_prog_compiler_can_build_shared_CXX=no
+       ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; }
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15221: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15225: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15320: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15324: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15372: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15376: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+       pic_flag=$lt_prog_compiler_pic_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc_CXX=no
+        else
+         archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+: ${CONFIG_LT=./config.lt}
+{ echo "$as_me:$LINENO: creating $CONFIG_LT" >&5
+echo "$as_me: creating $CONFIG_LT" >&6;}
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 6>&1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $0 [OPTIONS]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+pango config.lt 1.26.1
+configured by $0, generated by GNU Autoconf 2.61.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $# != 0
+do
+  case $1 in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+    *) { { echo "$as_me:$LINENO: error: unrecognized argument: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized argument: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec 6>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+{ echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+
+{ (exit 0); exit 0; }
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec 5>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec 5>>config.log
+  $lt_cl_success || { (exit 1); exit 1; }
+fi
+
+
+{ echo "$as_me:$LINENO: checking for some Win32 platform" >&5
+echo $ECHO_N "checking for some Win32 platform... $ECHO_C" >&6; }
+case "$host" in
+  *-*-mingw*|*-*-cygwin*)
+    pango_platform_win32=yes
+    ;;
+  *)
+    pango_platform_win32=no
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $pango_platform_win32" >&5
+echo "${ECHO_T}$pango_platform_win32" >&6; }
+
+
+if test "$pango_platform_win32" = "yes"; then
+  PLATFORM_WIN32_TRUE=
+  PLATFORM_WIN32_FALSE='#'
+else
+  PLATFORM_WIN32_TRUE='#'
+  PLATFORM_WIN32_FALSE=
+fi
+
+
+if test "$pango_platform_win32" = "yes"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
+set dummy ${ac_tool_prefix}windres; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_WINDRES+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$WINDRES"; then
+  ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+WINDRES=$ac_cv_prog_WINDRES
+if test -n "$WINDRES"; then
+  { echo "$as_me:$LINENO: result: $WINDRES" >&5
+echo "${ECHO_T}$WINDRES" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_WINDRES"; then
+  ac_ct_WINDRES=$WINDRES
+  # Extract the first word of "windres", so it can be a program name with args.
+set dummy windres; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_WINDRES"; then
+  ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_WINDRES="windres"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
+if test -n "$ac_ct_WINDRES"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_WINDRES" >&5
+echo "${ECHO_T}$ac_ct_WINDRES" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_WINDRES" = x; then
+    WINDRES="no"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    WINDRES=$ac_ct_WINDRES
+  fi
+else
+  WINDRES="$ac_cv_prog_WINDRES"
+fi
+
+  if test "$WINDRES" = no; then
+    { { echo "$as_me:$LINENO: error: *** Could not find an implementation of windres in your PATH." >&5
+echo "$as_me: error: *** Could not find an implementation of windres in your PATH." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  # Extract the first word of "lib.exe", so it can be a program name with args.
+set dummy lib.exe; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ms_librarian+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ms_librarian"; then
+  ac_cv_prog_ms_librarian="$ms_librarian" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ms_librarian="yes"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_ms_librarian" && ac_cv_prog_ms_librarian="no"
+fi
+fi
+ms_librarian=$ac_cv_prog_ms_librarian
+if test -n "$ms_librarian"; then
+  { echo "$as_me:$LINENO: result: $ms_librarian" >&5
+echo "${ECHO_T}$ms_librarian" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+
+
+if test x$ms_librarian = xyes; then
+  MS_LIB_AVAILABLE_TRUE=
+  MS_LIB_AVAILABLE_FALSE='#'
+else
+  MS_LIB_AVAILABLE_TRUE='#'
+  MS_LIB_AVAILABLE_FALSE=
+fi
+
+
+if test "x$GCC" = "xyes"; then
+  case " $CFLAGS " in
+  *[\ \        ]-Wall[\ \      ]*) ;;
+  *) CFLAGS="$CFLAGS -Wall" ;;
+  esac
+fi
+
+
+
+
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval=$enable_debug;
+else
+  enable_debug=minimum
+fi
+
+
+if test "x$enable_debug" = "xyes"; then
+  PANGO_DEBUG_FLAGS="-DPANGO_ENABLE_DEBUG"
+else
+  PANGO_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
+
+  if test "x$enable_debug" = "xno"; then
+    PANGO_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS $PANGO_DEBUG_FLAGS"
+  fi
+fi
+
+
+
+# Check whether --enable-rebuilds was given.
+if test "${enable_rebuilds+set}" = set; then
+  enableval=$enable_rebuilds;
+else
+  enable_rebuilds=yes
+fi
+
+
+
+
+if test $cross_compiling = yes; then
+  CROSS_COMPILING_TRUE=
+  CROSS_COMPILING_FALSE='#'
+else
+  CROSS_COMPILING_TRUE='#'
+  CROSS_COMPILING_FALSE=
+fi
+
+
+have_x=false
+if test "x$pango_os_win32" != xyes; then
+  { echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) { { echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5
+echo "$as_me: error: Cannot use X directory names containing '" >&2;}
+   { (exit 1); exit 1; }; };; #(
+    *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+       @echo incroot='${INCROOT}'
+usrlibdir:
+       @echo usrlibdir='${USRLIBDIR}'
+libdir:
+       @echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+        test -f "$ac_im_libdir/libX11.$ac_extension"; then
+       ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+       /usr/include) ac_x_includes= ;;
+       *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+       /usr/lib | /lib) ;;
+       *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+
+rm -f conftest.err conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+       ac_x_includes='$ac_x_includes'\
+       ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+       ac_x_includes='$x_includes'\
+       ac_x_libraries='$x_libraries'"
+  { echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+cat >>confdefs.h <<\_ACEOF
+#define X_DISPLAY_MISSING 1
+_ACEOF
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+         X_LIBS="$X_LIBS -R $x_libraries"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    ac_c_werror_flag=$ac_xsave_c_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dnet_dnet_ntoa=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    { echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6; }
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define gethostbyname innocuous_gethostbyname
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gethostbyname (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef gethostbyname
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_gethostbyname || defined __stub___gethostbyname
+choke me
+#endif
+
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_gethostbyname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6; }
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_nsl_gethostbyname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+       { echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_bsd_gethostbyname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test $ac_cv_lib_bsd_gethostbyname = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    { echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6; }
+if test "${ac_cv_func_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define connect to an innocuous variant, in case <limits.h> declares connect.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define connect innocuous_connect
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char connect (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef connect
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_connect || defined __stub___connect
+choke me
+#endif
+
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6; }
+
+    if test $ac_cv_func_connect = no; then
+      { echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_socket_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_socket_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6; }
+if test $ac_cv_lib_socket_connect = yes; then
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    { echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6; }
+if test "${ac_cv_func_remove+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define remove to an innocuous variant, in case <limits.h> declares remove.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define remove innocuous_remove
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char remove (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef remove
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_remove || defined __stub___remove
+choke me
+#endif
+
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_remove=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_remove=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6; }
+
+    if test $ac_cv_func_remove = no; then
+      { echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_posix_remove=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_posix_remove=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6; }
+if test $ac_cv_lib_posix_remove = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    { echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6; }
+if test "${ac_cv_func_shmat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shmat innocuous_shmat
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shmat (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shmat
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_shmat || defined __stub___shmat
+choke me
+#endif
+
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_shmat=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_shmat=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6; }
+
+    if test $ac_cv_func_shmat = no; then
+      { echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_ipc_shmat=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_ipc_shmat=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6; }
+if test $ac_cv_lib_ipc_shmat = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+
+  if test x$no_x = xyes ; then
+    { echo "$as_me:$LINENO: WARNING: X development libraries not found" >&5
+echo "$as_me: WARNING: X development libraries not found" >&2;}
+    have_x=false
+  else
+    X_LIBS="$X_LIBS -lX11"
+    have_x=true
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_X 1
+_ACEOF
+
+  fi
+fi
+
+
+if $have_x; then
+  HAVE_X_TRUE=
+  HAVE_X_FALSE='#'
+else
+  HAVE_X_TRUE='#'
+  HAVE_X_FALSE=
+fi
+
+
+have_fontconfig=false
+have_freetype=false
+have_xft=false
+
+#
+# Check for fontconfig
+#
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       else
+               { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for FONTCONFIG" >&5
+echo $ECHO_N "checking for FONTCONFIG... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FONTCONFIG_CFLAGS"; then
+        pkg_cv_FONTCONFIG_CFLAGS="$FONTCONFIG_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.5.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.5.0") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.5.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FONTCONFIG_LIBS"; then
+        pkg_cv_FONTCONFIG_LIBS="$FONTCONFIG_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.5.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.5.0") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.5.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fontconfig >= 2.5.0"`
+        else
+               FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fontconfig >= 2.5.0"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$FONTCONFIG_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+elif test $pkg_failed = untried; then
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+       FONTCONFIG_CFLAGS=$pkg_cv_FONTCONFIG_CFLAGS
+       FONTCONFIG_LIBS=$pkg_cv_FONTCONFIG_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       have_fontconfig=true
+fi
+
+#
+# Checks for FreeType
+#
+if $have_fontconfig ; then
+  # The first version of freetype with a .pc file is 2.1.5.  That's recent
+  # enough for all the functions we use I guess.  No version check needed.
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for FREETYPE" >&5
+echo $ECHO_N "checking for FREETYPE... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FREETYPE_CFLAGS"; then
+        pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"freetype2\"") >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FREETYPE_LIBS"; then
+        pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"freetype2\"") >&5
+  ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "freetype2"`
+        else
+               FREETYPE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "freetype2"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$FREETYPE_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+elif test $pkg_failed = untried; then
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+       FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS
+       FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       have_freetype=true
+fi
+fi
+if $have_freetype ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FREETYPE 1
+_ACEOF
+
+  # By freetype, we really always mean freetype+fontconfig
+  FREETYPE_CFLAGS="$FREETYPE_CFLAGS $FONTCONFIG_CFLAGS"
+  FREETYPE_LIBS="$FREETYPE_LIBS $FONTCONFIG_LIBS"
+fi
+
+
+if $have_freetype; then
+  HAVE_FREETYPE_TRUE=
+  HAVE_FREETYPE_FALSE='#'
+else
+  HAVE_FREETYPE_TRUE='#'
+  HAVE_FREETYPE_FALSE=
+fi
+
+
+#
+# Checks for Xft/XRender
+#
+if $have_x && $have_freetype ; then
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for XFT" >&5
+echo $ECHO_N "checking for XFT... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XFT_CFLAGS"; then
+        pkg_cv_XFT_CFLAGS="$XFT_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xft >= 2.0.0 xrender\"") >&5
+  ($PKG_CONFIG --exists --print-errors "xft >= 2.0.0 xrender") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XFT_CFLAGS=`$PKG_CONFIG --cflags "xft >= 2.0.0 xrender" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XFT_LIBS"; then
+        pkg_cv_XFT_LIBS="$XFT_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xft >= 2.0.0 xrender\"") >&5
+  ($PKG_CONFIG --exists --print-errors "xft >= 2.0.0 xrender") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XFT_LIBS=`$PKG_CONFIG --libs "xft >= 2.0.0 xrender" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               XFT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xft >= 2.0.0 xrender"`
+        else
+               XFT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xft >= 2.0.0 xrender"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$XFT_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+elif test $pkg_failed = untried; then
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+       XFT_CFLAGS=$pkg_cv_XFT_CFLAGS
+       XFT_LIBS=$pkg_cv_XFT_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       have_xft=true
+fi
+fi
+if $have_xft ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_XFT 1
+_ACEOF
+
+fi
+
+
+if $have_xft; then
+  HAVE_XFT_TRUE=
+  HAVE_XFT_FALSE='#'
+else
+  HAVE_XFT_TRUE='#'
+  HAVE_XFT_FALSE=
+fi
+
+
+#
+# Checks for Win32 GDI
+#
+have_win32=false
+WIN32_LIBS=""
+WIN32_CFLAGS=""
+# The following doesn't work with autoconf-2.13, so we check $host instead
+# AC_CHECK_LIB(gdi32, GetTextMetricsA@8, have_win32=true, : )
+case "$host" in
+  *-*-mingw*|*-*-cygwin*) have_win32=true ;;
+esac
+
+
+if test $have_win32 = true; then
+  WIN32_LIBS="-lgdi32"
+fi
+
+
+
+
+if $have_win32; then
+  HAVE_WIN32_TRUE=
+  HAVE_WIN32_FALSE='#'
+else
+  HAVE_WIN32_TRUE='#'
+  HAVE_WIN32_FALSE=
+fi
+
+
+# Ensure MSVC-compatible struct packing convention is used when
+# compiling for Win32 with gcc.
+# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
+# gcc2 uses "-fnative-struct".
+if test "$pango_os_win32" = "yes"; then
+  if test x"$GCC" = xyes; then
+    msnative_struct=''
+    { echo "$as_me:$LINENO: checking how to get MSVC-compatible struct packing" >&5
+echo $ECHO_N "checking how to get MSVC-compatible struct packing... $ECHO_C" >&6; }
+    if test -z "$ac_cv_prog_CC"; then
+      our_gcc="$CC"
+    else
+      our_gcc="$ac_cv_prog_CC"
+    fi
+    case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
+      2.)
+       if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
+         msnative_struct='-fnative-struct'
+       fi
+       ;;
+      *)
+       if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
+         msnative_struct='-mms-bitfields'
+       fi
+       ;;
+    esac
+    if test x"$msnative_struct" = x ; then
+      { echo "$as_me:$LINENO: result: no way" >&5
+echo "${ECHO_T}no way" >&6; }
+      { echo "$as_me:$LINENO: WARNING: produced libraries might be incompatible with MSVC-compiled code" >&5
+echo "$as_me: WARNING: produced libraries might be incompatible with MSVC-compiled code" >&2;}
+    else
+      CFLAGS="$CFLAGS $msnative_struct"
+      { echo "$as_me:$LINENO: result: ${msnative_struct}" >&5
+echo "${ECHO_T}${msnative_struct}" >&6; }
+    fi
+  fi
+fi
+
+#
+# Checks for ATSUI
+#
+if test "${ac_cv_header_Carbon_Carbon_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for Carbon/Carbon.h" >&5
+echo $ECHO_N "checking for Carbon/Carbon.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_Carbon_Carbon_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_Carbon_Carbon_h" >&5
+echo "${ECHO_T}$ac_cv_header_Carbon_Carbon_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking Carbon/Carbon.h usability" >&5
+echo $ECHO_N "checking Carbon/Carbon.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <Carbon/Carbon.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking Carbon/Carbon.h presence" >&5
+echo $ECHO_N "checking Carbon/Carbon.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <Carbon/Carbon.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: Carbon/Carbon.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: Carbon/Carbon.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------------------------------------------- ##
+## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=pango ##
+## -------------------------------------------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for Carbon/Carbon.h" >&5
+echo $ECHO_N "checking for Carbon/Carbon.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_Carbon_Carbon_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_Carbon_Carbon_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_Carbon_Carbon_h" >&5
+echo "${ECHO_T}$ac_cv_header_Carbon_Carbon_h" >&6; }
+
+fi
+if test $ac_cv_header_Carbon_Carbon_h = yes; then
+  have_atsui=true
+else
+  have_atsui=false
+fi
+
+
+
+#
+# Checks for Cairo
+#
+have_cairo=false
+have_cairo_png=false
+have_cairo_ps=false
+have_cairo_pdf=false
+have_cairo_xlib=false
+have_cairo_freetype=false
+have_cairo_win32=false
+have_cairo_atsui=false
+cairo_required=1.7.6
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for CAIRO" >&5
+echo $ECHO_N "checking for CAIRO... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CAIRO_CFLAGS"; then
+        pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= $cairo_required" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$CAIRO_LIBS"; then
+        pkg_cv_CAIRO_LIBS="$CAIRO_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= $cairo_required" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cairo >= $cairo_required"`
+        else
+               CAIRO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cairo >= $cairo_required"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$CAIRO_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+elif test $pkg_failed = untried; then
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+       CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS
+       CAIRO_LIBS=$pkg_cv_CAIRO_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       have_cairo=true
+fi
+
+if $have_cairo ; then
+  pango_save_libs=$LIBS
+  LIBS="$LIBS $CAIRO_LIBS"
+  pango_save_ldflags=$LDFLAGS
+  LDFLAGS="$LDFLAGS $CAIRO_LIBS"
+
+  have_cairo=false
+  cairo_font_backends=""
+
+  if $have_freetype; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-ft >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-ft >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_freetype=true
+else
+  :
+fi
+  fi
+  if $have_cairo_freetype; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_FREETYPE 1
+_ACEOF
+
+    cairo_font_backends="freetype $cairo_font_backends"
+    have_cairo=true
+  fi
+
+  if $have_win32; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-win32 >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-win32 >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_win32=true
+else
+  :
+fi
+  fi
+  if $have_cairo_win32; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_WIN32 1
+_ACEOF
+
+    cairo_font_backends="win32 $cairo_font_backends"
+    have_cairo=true
+  fi
+
+  if $have_atsui; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-quartz-font >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-quartz-font >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_atsui=true
+else
+  :
+fi
+  fi
+  if $have_cairo_atsui; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_ATSUI 1
+_ACEOF
+
+    cairo_font_backends="quartz $cairo_font_backends"
+    have_cairo=true
+  fi
+
+  { echo "$as_me:$LINENO: checking which cairo font backends could be used" >&5
+echo $ECHO_N "checking which cairo font backends could be used... $ECHO_C" >&6; }
+  if $have_cairo ; then
+    { echo "$as_me:$LINENO: result: $cairo_font_backends" >&5
+echo "${ECHO_T}$cairo_font_backends" >&6; }
+  else
+    { echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6; }
+    { echo "$as_me:$LINENO: Disabling cairo support" >&5
+echo "$as_me: Disabling cairo support" >&6;}
+  fi
+
+  if $have_cairo ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO 1
+_ACEOF
+
+
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-png >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-png >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_png=true
+else
+  :
+fi
+    if $have_cairo_png; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_PNG 1
+_ACEOF
+
+    fi
+
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-ps >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-ps >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_ps=true
+else
+  :
+fi
+    if $have_cairo_ps; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_PS 1
+_ACEOF
+
+    fi
+
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-pdf >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-pdf >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_pdf=true
+else
+  :
+fi
+    if $have_cairo_pdf; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_PDF 1
+_ACEOF
+
+    fi
+
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cairo-xlib >= \$cairo_required\"") >&5
+  ($PKG_CONFIG --exists --print-errors "cairo-xlib >= $cairo_required") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  have_cairo_xlib=true
+else
+  :
+fi
+    if $have_cairo_xlib; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CAIRO_XLIB 1
+_ACEOF
+
+    fi
+  fi
+
+  LIBS=$pango_save_libs
+  LDFLAGS=$pango_save_ldflags
+fi
+
+
+
+if $have_cairo; then
+  HAVE_CAIRO_TRUE=
+  HAVE_CAIRO_FALSE='#'
+else
+  HAVE_CAIRO_TRUE='#'
+  HAVE_CAIRO_FALSE=
+fi
+
+
+
+if $have_cairo_png; then
+  HAVE_CAIRO_PNG_TRUE=
+  HAVE_CAIRO_PNG_FALSE='#'
+else
+  HAVE_CAIRO_PNG_TRUE='#'
+  HAVE_CAIRO_PNG_FALSE=
+fi
+
+
+
+if $have_cairo_ps; then
+  HAVE_CAIRO_PS_TRUE=
+  HAVE_CAIRO_PS_FALSE='#'
+else
+  HAVE_CAIRO_PS_TRUE='#'
+  HAVE_CAIRO_PS_FALSE=
+fi
+
+
+
+if $have_cairo_pdf; then
+  HAVE_CAIRO_PDF_TRUE=
+  HAVE_CAIRO_PDF_FALSE='#'
+else
+  HAVE_CAIRO_PDF_TRUE='#'
+  HAVE_CAIRO_PDF_FALSE=
+fi
+
+
+
+if $have_cairo_xlib; then
+  HAVE_CAIRO_XLIB_TRUE=
+  HAVE_CAIRO_XLIB_FALSE='#'
+else
+  HAVE_CAIRO_XLIB_TRUE='#'
+  HAVE_CAIRO_XLIB_FALSE=
+fi
+
+
+
+if $have_cairo_win32; then
+  HAVE_CAIRO_WIN32_TRUE=
+  HAVE_CAIRO_WIN32_FALSE='#'
+else
+  HAVE_CAIRO_WIN32_TRUE='#'
+  HAVE_CAIRO_WIN32_FALSE=
+fi
+
+
+
+if $have_cairo_freetype; then
+  HAVE_CAIRO_FREETYPE_TRUE=
+  HAVE_CAIRO_FREETYPE_FALSE='#'
+else
+  HAVE_CAIRO_FREETYPE_TRUE='#'
+  HAVE_CAIRO_FREETYPE_FALSE=
+fi
+
+
+
+if $have_cairo_atsui; then
+  HAVE_CAIRO_ATSUI_TRUE=
+  HAVE_CAIRO_ATSUI_FALSE='#'
+else
+  HAVE_CAIRO_ATSUI_TRUE='#'
+  HAVE_CAIRO_ATSUI_FALSE=
+fi
+
+
+#
+# We must have some backend defined, in order for the pango-querymodules
+# rule in pango/Makefile.am to work correctly. If you are up to writing
+# a new Pango backend outside of Pango, you are up to sending the necessary
+# patch to fix that rule. :-)
+#
+if $have_freetype || $have_x || $have_xft || $have_cairo || $have_win32 ; then : ; else
+  { { echo "$as_me:$LINENO: error: *** Could not enable any of FreeType, X11, Cairo, or Win32 backends.
+*** Must have at least one backend to build Pango." >&5
+echo "$as_me: error: *** Could not enable any of FreeType, X11, Cairo, or Win32 backends.
+*** Must have at least one backend to build Pango." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+#
+# Checks for GLib
+#
+GLIB_REQUIRED_VERSION=2.17.3
+GLIB_MODULES="glib-2.0 >= $GLIB_REQUIRED_VERSION gobject-2.0 gmodule-no-export-2.0"
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GLIB" >&5
+echo $ECHO_N "checking for GLIB... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GLIB_CFLAGS"; then
+        pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$GLIB_MODULES\"") >&5
+  ($PKG_CONFIG --exists --print-errors "$GLIB_MODULES") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "$GLIB_MODULES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GLIB_LIBS"; then
+        pkg_cv_GLIB_LIBS="$GLIB_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$GLIB_MODULES\"") >&5
+  ($PKG_CONFIG --exists --print-errors "$GLIB_MODULES") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "$GLIB_MODULES" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$GLIB_MODULES"`
+        else
+               GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$GLIB_MODULES"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$GLIB_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                { { echo "$as_me:$LINENO: error:
+*** Glib $GLIB_REQUIRED_VERSION or better is required. The latest version of
+*** Glib is always available from ftp://ftp.gtk.org/." >&5
+echo "$as_me: error:
+*** Glib $GLIB_REQUIRED_VERSION or better is required. The latest version of
+*** Glib is always available from ftp://ftp.gtk.org/." >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+       { { echo "$as_me:$LINENO: error:
+*** Glib $GLIB_REQUIRED_VERSION or better is required. The latest version of
+*** Glib is always available from ftp://ftp.gtk.org/." >&5
+echo "$as_me: error:
+*** Glib $GLIB_REQUIRED_VERSION or better is required. The latest version of
+*** Glib is always available from ftp://ftp.gtk.org/." >&2;}
+   { (exit 1); exit 1; }; }
+else
+       GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
+       GLIB_LIBS=$pkg_cv_GLIB_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       :
+fi
+
+# Setup GLIB_MKENUMS to use glib-mkenums even if GLib is uninstalled.
+GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+
+
+
+# Add in gthread-2.0 to CFLAGS but not to LIBS so we get any
+# necesary defines for thread-safety.
+GLIB_CFLAGS=`$PKG_CONFIG --cflags $GLIB_MODULES gthread-2.0`
+
+# See if it's safe to turn G_DISABLE_DEPRECATED on.
+GLIB_VERSION_MAJOR_MINOR=`$PKG_CONFIG --modversion glib-2.0 | sed "s/\.[^.]*\$//"`
+GLIB_REQUIRED_VERSION_MAJOR_MINOR=`echo $GLIB_REQUIRED_VERSION | sed "s/\.[^.]*\$//"`
+if test "x$GLIB_VERSION_MAJOR_MINOR" = "x$GLIB_REQUIRED_VERSION_MAJOR_MINOR"; then
+  GLIB_CFLAGS="-DG_DISABLE_DEPRECATED $GLIB_CFLAGS"
+fi
+
+#
+# Checks for LibThai
+#
+have_libthai=false
+LIBTHAI_REQUIRED_VERSION=0.1.9
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for LIBTHAI" >&5
+echo $ECHO_N "checking for LIBTHAI... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBTHAI_CFLAGS"; then
+        pkg_cv_LIBTHAI_CFLAGS="$LIBTHAI_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libthai >= \$LIBTHAI_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libthai >= $LIBTHAI_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LIBTHAI_CFLAGS=`$PKG_CONFIG --cflags "libthai >= $LIBTHAI_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBTHAI_LIBS"; then
+        pkg_cv_LIBTHAI_LIBS="$LIBTHAI_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libthai >= \$LIBTHAI_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libthai >= $LIBTHAI_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LIBTHAI_LIBS=`$PKG_CONFIG --libs "libthai >= $LIBTHAI_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBTHAI_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libthai >= $LIBTHAI_REQUIRED_VERSION"`
+        else
+               LIBTHAI_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libthai >= $LIBTHAI_REQUIRED_VERSION"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBTHAI_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+elif test $pkg_failed = untried; then
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+else
+       LIBTHAI_CFLAGS=$pkg_cv_LIBTHAI_CFLAGS
+       LIBTHAI_LIBS=$pkg_cv_LIBTHAI_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       have_libthai=true
+fi
+
+#
+# Checks for GObject Introspection
+#
+have_introspection=false
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for INTROSPECTION" >&5
+echo $ECHO_N "checking for INTROSPECTION... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$INTROSPECTION_CFLAGS"; then
+        pkg_cv_INTROSPECTION_CFLAGS="$INTROSPECTION_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags "gobject-introspection-1.0 >= 0.6.4" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$INTROSPECTION_LIBS"; then
+        pkg_cv_INTROSPECTION_LIBS="$INTROSPECTION_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.4\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.4") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_INTROSPECTION_LIBS=`$PKG_CONFIG --libs "gobject-introspection-1.0 >= 0.6.4" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               INTROSPECTION_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gobject-introspection-1.0 >= 0.6.4"`
+        else
+               INTROSPECTION_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gobject-introspection-1.0 >= 0.6.4"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$INTROSPECTION_PKG_ERRORS" >&5
+
+       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                have_introspection=false
+elif test $pkg_failed = untried; then
+       have_introspection=false
+else
+       INTROSPECTION_CFLAGS=$pkg_cv_INTROSPECTION_CFLAGS
+       INTROSPECTION_LIBS=$pkg_cv_INTROSPECTION_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       have_introspection=true
+fi
+
+
+if $have_introspection; then
+  HAVE_INTROSPECTION_TRUE=
+  HAVE_INTROSPECTION_FALSE='#'
+else
+  HAVE_INTROSPECTION_TRUE='#'
+  HAVE_INTROSPECTION_FALSE=
+fi
+
+
+G_IR_SCANNER=
+G_IR_COMPILER=
+G_IR_GENERATE=
+GIRDIR=
+TYPELIBDIR=
+if $have_introspection; then
+   G_IR_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+   G_IR_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+   G_IR_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+   GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+   TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+fi
+
+
+
+
+
+
+#
+# Modules to build
+#
+arabic_modules="arabic-fc,arabic-lang"
+basic_modules="basic-fc,basic-win32,basic-x,basic-atsui"
+hangul_modules="hangul-fc"
+hebrew_modules="hebrew-fc"
+indic_modules="indic-fc,indic-lang"
+khmer_modules="khmer-fc"
+syriac_modules="syriac-fc"
+thai_modules="thai-fc"
+tibetan_modules="tibetan-fc"
+
+if $have_libthai ; then
+  thai_modules="$thai_modules,thai-lang"
+fi
+
+all_modules="$arabic_modules,$basic_modules,$hangul_modules,$hebrew_modules,$indic_modules,$khmer_modules,$syriac_modules,$thai_modules,$tibetan_modules"
+
+#
+# Allow building some or all modules included
+#
+{ echo "$as_me:$LINENO: checking modules to link statically" >&5
+echo $ECHO_N "checking modules to link statically... $ECHO_C" >&6; }
+
+
+# Check whether --with-included_modules was given.
+if test "${with_included_modules+set}" = set; then
+  withval=$with_included_modules;
+fi
+
+
+included_modules=""
+case x$with_included_modules in
+       xyes)   included_modules=$all_modules ;;
+       xno|x)  included_modules="" ;;
+       *)      included_modules=$with_included_modules ;;
+esac
+{ echo "$as_me:$LINENO: result: $included_modules" >&5
+echo "${ECHO_T}$included_modules" >&6; }
+
+
+if test "x$included_modules" != x; then
+  HAVE_INCLUDED_MODULES_TRUE=
+  HAVE_INCLUDED_MODULES_FALSE='#'
+else
+  HAVE_INCLUDED_MODULES_TRUE='#'
+  HAVE_INCLUDED_MODULES_FALSE=
+fi
+
+
+#
+# Allow building only some or none of modules dynamic
+#
+{ echo "$as_me:$LINENO: checking dynamic modules to build" >&5
+echo $ECHO_N "checking dynamic modules to build... $ECHO_C" >&6; }
+
+
+# Check whether --with-dynamic_modules was given.
+if test "${with_dynamic_modules+set}" = set; then
+  withval=$with_dynamic_modules;
+fi
+
+
+dynamic_modules=""
+case x$with_dynamic_modules in
+       xyes|x) dynamic_modules=$all_modules ;;
+       xno)    dynamic_modules="" ;;
+       *)      dynamic_modules=$with_dynamic_modules ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_modules (those built into Pango will be excluded)" >&5
+echo "${ECHO_T}$dynamic_modules (those built into Pango will be excluded)" >&6; }
+
+
+if test "x$dynamic_modules" != x; then
+  HAVE_DYNAMIC_MODULES_TRUE=
+  HAVE_DYNAMIC_MODULES_FALSE='#'
+else
+  HAVE_DYNAMIC_MODULES_TRUE='#'
+  HAVE_DYNAMIC_MODULES_FALSE=
+fi
+
+
+
+INCLUDED_X_MODULES=
+INCLUDED_FC_MODULES=
+INCLUDED_WIN32_MODULES=
+INCLUDED_ATSUI_MODULES=
+INCLUDED_LANG_MODULES=
+
+
+
+
+
+
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=", "
+for module in $included_modules; do
+  case $indic_modules in
+    *$module*) dir=indic ;;
+    *)         dir=`echo $module | sed "s/-.*//"` ;;
+  esac
+  included_path="\$(top_builddir)/modules/$dir/libpango-$module.la"
+
+  case $module in
+    *-x)       INCLUDED_X_MODULES="$INCLUDED_X_MODULES $included_path" ;;
+    *-fc)      INCLUDED_FC_MODULES="$INCLUDED_FC_MODULES $included_path" ;;
+    *-win32)   INCLUDED_WIN32_MODULES="$INCLUDED_WIN32_MODULES $included_path" ;;
+    *-atsui)   INCLUDED_ATSUI_MODULES="$INCLUDED_ATSUI_MODULES $included_path" ;;
+    *-lang)    INCLUDED_LANG_MODULES="$INCLUDED_LANG_MODULES $included_path" ;;
+    *)         { { echo "$as_me:$LINENO: error: specified module $module not recognized" >&5
+echo "$as_me: error: specified module $module not recognized" >&2;}
+   { (exit 1); exit 1; }; } ;;
+  esac
+done
+IFS="$pango_save_ifs"
+
+
+
+if echo $included_modules | egrep '(^|,)arabic-fc($|,)'        > /dev/null; then
+  INCLUDE_ARABIC_FC_TRUE=
+  INCLUDE_ARABIC_FC_FALSE='#'
+else
+  INCLUDE_ARABIC_FC_TRUE='#'
+  INCLUDE_ARABIC_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)arabic-lang($|,)'      > /dev/null; then
+  INCLUDE_ARABIC_LANG_TRUE=
+  INCLUDE_ARABIC_LANG_FALSE='#'
+else
+  INCLUDE_ARABIC_LANG_TRUE='#'
+  INCLUDE_ARABIC_LANG_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)basic-fc($|,)'         > /dev/null; then
+  INCLUDE_BASIC_FC_TRUE=
+  INCLUDE_BASIC_FC_FALSE='#'
+else
+  INCLUDE_BASIC_FC_TRUE='#'
+  INCLUDE_BASIC_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)basic-win32($|,)'      > /dev/null; then
+  INCLUDE_BASIC_WIN32_TRUE=
+  INCLUDE_BASIC_WIN32_FALSE='#'
+else
+  INCLUDE_BASIC_WIN32_TRUE='#'
+  INCLUDE_BASIC_WIN32_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)basic-x($|,)'  > /dev/null; then
+  INCLUDE_BASIC_X_TRUE=
+  INCLUDE_BASIC_X_FALSE='#'
+else
+  INCLUDE_BASIC_X_TRUE='#'
+  INCLUDE_BASIC_X_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)basic-atsui($|,)'      > /dev/null; then
+  INCLUDE_BASIC_ATSUI_TRUE=
+  INCLUDE_BASIC_ATSUI_FALSE='#'
+else
+  INCLUDE_BASIC_ATSUI_TRUE='#'
+  INCLUDE_BASIC_ATSUI_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)hangul-fc($|,)'        > /dev/null; then
+  INCLUDE_HANGUL_FC_TRUE=
+  INCLUDE_HANGUL_FC_FALSE='#'
+else
+  INCLUDE_HANGUL_FC_TRUE='#'
+  INCLUDE_HANGUL_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)hebrew-fc($|,)'        > /dev/null; then
+  INCLUDE_HEBREW_FC_TRUE=
+  INCLUDE_HEBREW_FC_FALSE='#'
+else
+  INCLUDE_HEBREW_FC_TRUE='#'
+  INCLUDE_HEBREW_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)indic-fc($|,)'         > /dev/null; then
+  INCLUDE_INDIC_FC_TRUE=
+  INCLUDE_INDIC_FC_FALSE='#'
+else
+  INCLUDE_INDIC_FC_TRUE='#'
+  INCLUDE_INDIC_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)indic-lang($|,)'       > /dev/null; then
+  INCLUDE_INDIC_LANG_TRUE=
+  INCLUDE_INDIC_LANG_FALSE='#'
+else
+  INCLUDE_INDIC_LANG_TRUE='#'
+  INCLUDE_INDIC_LANG_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)khmer-fc($|,)'         > /dev/null; then
+  INCLUDE_KHMER_FC_TRUE=
+  INCLUDE_KHMER_FC_FALSE='#'
+else
+  INCLUDE_KHMER_FC_TRUE='#'
+  INCLUDE_KHMER_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)syriac-fc($|,)'        > /dev/null; then
+  INCLUDE_SYRIAC_FC_TRUE=
+  INCLUDE_SYRIAC_FC_FALSE='#'
+else
+  INCLUDE_SYRIAC_FC_TRUE='#'
+  INCLUDE_SYRIAC_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)thai-fc($|,)'  > /dev/null; then
+  INCLUDE_THAI_FC_TRUE=
+  INCLUDE_THAI_FC_FALSE='#'
+else
+  INCLUDE_THAI_FC_TRUE='#'
+  INCLUDE_THAI_FC_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)thai-lang($|,)'        > /dev/null; then
+  INCLUDE_THAI_LANG_TRUE=
+  INCLUDE_THAI_LANG_FALSE='#'
+else
+  INCLUDE_THAI_LANG_TRUE='#'
+  INCLUDE_THAI_LANG_FALSE=
+fi
+
+
+
+if echo $included_modules | egrep '(^|,)tibetan-fc($|,)'       > /dev/null; then
+  INCLUDE_TIBETAN_FC_TRUE=
+  INCLUDE_TIBETAN_FC_FALSE='#'
+else
+  INCLUDE_TIBETAN_FC_TRUE='#'
+  INCLUDE_TIBETAN_FC_FALSE=
+fi
+
+
+
+
+if echo $dynamic_modules | egrep '(^|,)arabic-fc($|,)'         > /dev/null; then
+  DYNAMIC_ARABIC_FC_TRUE=
+  DYNAMIC_ARABIC_FC_FALSE='#'
+else
+  DYNAMIC_ARABIC_FC_TRUE='#'
+  DYNAMIC_ARABIC_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)arabic-lang($|,)'       > /dev/null; then
+  DYNAMIC_ARABIC_LANG_TRUE=
+  DYNAMIC_ARABIC_LANG_FALSE='#'
+else
+  DYNAMIC_ARABIC_LANG_TRUE='#'
+  DYNAMIC_ARABIC_LANG_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)basic-fc($|,)'  > /dev/null; then
+  DYNAMIC_BASIC_FC_TRUE=
+  DYNAMIC_BASIC_FC_FALSE='#'
+else
+  DYNAMIC_BASIC_FC_TRUE='#'
+  DYNAMIC_BASIC_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)basic-win32($|,)'       > /dev/null; then
+  DYNAMIC_BASIC_WIN32_TRUE=
+  DYNAMIC_BASIC_WIN32_FALSE='#'
+else
+  DYNAMIC_BASIC_WIN32_TRUE='#'
+  DYNAMIC_BASIC_WIN32_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)basic-x($|,)'   > /dev/null; then
+  DYNAMIC_BASIC_X_TRUE=
+  DYNAMIC_BASIC_X_FALSE='#'
+else
+  DYNAMIC_BASIC_X_TRUE='#'
+  DYNAMIC_BASIC_X_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)basic-atsui($|,)'       > /dev/null; then
+  DYNAMIC_BASIC_ATSUI_TRUE=
+  DYNAMIC_BASIC_ATSUI_FALSE='#'
+else
+  DYNAMIC_BASIC_ATSUI_TRUE='#'
+  DYNAMIC_BASIC_ATSUI_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)hangul-fc($|,)' > /dev/null; then
+  DYNAMIC_HANGUL_FC_TRUE=
+  DYNAMIC_HANGUL_FC_FALSE='#'
+else
+  DYNAMIC_HANGUL_FC_TRUE='#'
+  DYNAMIC_HANGUL_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)hebrew-fc($|,)'         > /dev/null; then
+  DYNAMIC_HEBREW_FC_TRUE=
+  DYNAMIC_HEBREW_FC_FALSE='#'
+else
+  DYNAMIC_HEBREW_FC_TRUE='#'
+  DYNAMIC_HEBREW_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)indic-fc($|,)'  > /dev/null; then
+  DYNAMIC_INDIC_FC_TRUE=
+  DYNAMIC_INDIC_FC_FALSE='#'
+else
+  DYNAMIC_INDIC_FC_TRUE='#'
+  DYNAMIC_INDIC_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)indic-lang($|,)'        > /dev/null; then
+  DYNAMIC_INDIC_LANG_TRUE=
+  DYNAMIC_INDIC_LANG_FALSE='#'
+else
+  DYNAMIC_INDIC_LANG_TRUE='#'
+  DYNAMIC_INDIC_LANG_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)khmer-fc($|,)'  > /dev/null; then
+  DYNAMIC_KHMER_FC_TRUE=
+  DYNAMIC_KHMER_FC_FALSE='#'
+else
+  DYNAMIC_KHMER_FC_TRUE='#'
+  DYNAMIC_KHMER_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)syriac-fc($|,)'         > /dev/null; then
+  DYNAMIC_SYRIAC_FC_TRUE=
+  DYNAMIC_SYRIAC_FC_FALSE='#'
+else
+  DYNAMIC_SYRIAC_FC_TRUE='#'
+  DYNAMIC_SYRIAC_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)thai-fc($|,)'   > /dev/null; then
+  DYNAMIC_THAI_FC_TRUE=
+  DYNAMIC_THAI_FC_FALSE='#'
+else
+  DYNAMIC_THAI_FC_TRUE='#'
+  DYNAMIC_THAI_FC_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)thai-lang($|,)'         > /dev/null; then
+  DYNAMIC_THAI_LANG_TRUE=
+  DYNAMIC_THAI_LANG_FALSE='#'
+else
+  DYNAMIC_THAI_LANG_TRUE='#'
+  DYNAMIC_THAI_LANG_FALSE=
+fi
+
+
+
+if echo $dynamic_modules | egrep '(^|,)tibetan-fc($|,)'        > /dev/null; then
+  DYNAMIC_TIBETAN_FC_TRUE=
+  DYNAMIC_TIBETAN_FC_FALSE='#'
+else
+  DYNAMIC_TIBETAN_FC_TRUE='#'
+  DYNAMIC_TIBETAN_FC_FALSE=
+fi
+
+
+#
+# We use flockfile to implement pango_getline() - should be moved to GLib
+# strtok_r isn't present on some systems
+#
+
+
+for ac_func in flockfile strtok_r
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+if $have_cairo ; then : ; else
+   if  test x$enable_gtk_doc = xyes ; then
+      { echo "$as_me:$LINENO: WARNING: Cairo not present, disabling doc building" >&5
+echo "$as_me: WARNING: Cairo not present, disabling doc building" >&2;}
+      enable_gtk_doc=no
+   fi
+fi
+
+
+
+# Check whether --with-html-dir was given.
+if test "${with_html_dir+set}" = set; then
+  withval=$with_html_dir;
+else
+  with_html_dir='${datadir}/gtk-doc/html'
+fi
+
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then
+  enableval=$enable_gtk_doc;
+else
+  enable_gtk_doc=no
+fi
+
+
+  have_gtk_doc=no
+  if test x$enable_gtk_doc = xyes; then
+    if test -z "$PKG_CONFIG"; then
+      # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    fi
+    if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
+      have_gtk_doc=yes
+    fi
+
+  gtk_doc_min_version=1.0
+    if test "$have_gtk_doc" = yes; then
+      { echo "$as_me:$LINENO: checking gtk-doc version >= $gtk_doc_min_version" >&5
+echo $ECHO_N "checking gtk-doc version >= $gtk_doc_min_version... $ECHO_C" >&6; }
+      if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+      else
+        { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+        have_gtk_doc=no
+      fi
+    fi
+
+    if test "$have_gtk_doc" != yes; then
+      enable_gtk_doc=no
+    fi
+  fi
+
+
+
+if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
+
+
+
+if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
+
+
+
+# Check whether --enable-man was given.
+if test "${enable_man+set}" = set; then
+  enableval=$enable_man; enable_man=yes
+else
+  enable_man=no
+fi
+
+
+if test "x$enable_man" != xno ; then
+        # Extract the first word of "xsltproc", so it can be a program name with args.
+set dummy xsltproc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_XSLTPROC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $XSLTPROC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+XSLTPROC=$ac_cv_path_XSLTPROC
+if test -n "$XSLTPROC"; then
+  { echo "$as_me:$LINENO: result: $XSLTPROC" >&5
+echo "${ECHO_T}$XSLTPROC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  if test -z "$XSLTPROC"; then
+    enable_man=no
+  fi
+fi
+
+if test "x$enable_man" != xno ; then
+
+  # check for the presence of the XML catalog
+
+# Check whether --with-xml-catalog was given.
+if test "${with_xml_catalog+set}" = set; then
+  withval=$with_xml_catalog;
+else
+  with_xml_catalog=/etc/xml/catalog
+fi
+
+  jh_found_xmlcatalog=true
+  XML_CATALOG_FILE="$with_xml_catalog"
+
+  { echo "$as_me:$LINENO: checking for XML catalog ($XML_CATALOG_FILE)" >&5
+echo $ECHO_N "checking for XML catalog ($XML_CATALOG_FILE)... $ECHO_C" >&6; }
+  if test -f "$XML_CATALOG_FILE"; then
+    { echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6; }
+  else
+    jh_found_xmlcatalog=false
+    { echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6; }
+  fi
+
+  # check for the xmlcatalog program
+  # Extract the first word of "xmlcatalog", so it can be a program name with args.
+set dummy xmlcatalog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_XMLCATALOG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $XMLCATALOG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XMLCATALOG="$XMLCATALOG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_XMLCATALOG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_XMLCATALOG" && ac_cv_path_XMLCATALOG="no"
+  ;;
+esac
+fi
+XMLCATALOG=$ac_cv_path_XMLCATALOG
+if test -n "$XMLCATALOG"; then
+  { echo "$as_me:$LINENO: result: $XMLCATALOG" >&5
+echo "${ECHO_T}$XMLCATALOG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  if test "x$XMLCATALOG" = xno; then
+    jh_found_xmlcatalog=false
+  fi
+
+  if $jh_found_xmlcatalog; then
+    :
+  else
+    :
+  fi
+
+
+    { echo "$as_me:$LINENO: checking for DocBook XML DTD V4.1.2 in XML catalog" >&5
+echo $ECHO_N "checking for DocBook XML DTD V4.1.2 in XML catalog... $ECHO_C" >&6; }
+  if $jh_found_xmlcatalog && \
+     { (echo "$as_me:$LINENO: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"-//OASIS//DTD DocBook XML V4.1.2//EN\" >&2") >&5
+  ($XMLCATALOG --noout "$XML_CATALOG_FILE" "-//OASIS//DTD DocBook XML V4.1.2//EN" >&2) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    { echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6; }
+      else
+    { echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6; }
+    enable_man=no
+  fi
+
+
+    { echo "$as_me:$LINENO: checking for DocBook XSL Stylesheets in XML catalog" >&5
+echo $ECHO_N "checking for DocBook XSL Stylesheets in XML catalog... $ECHO_C" >&6; }
+  if $jh_found_xmlcatalog && \
+     { (echo "$as_me:$LINENO: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\" >&2") >&5
+  ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" >&2) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    { echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6; }
+      else
+    { echo "$as_me:$LINENO: result: not found" >&5
+echo "${ECHO_T}not found" >&6; }
+    enable_man=no
+  fi
+
+fi
+
+
+
+if test x$enable_man != xno; then
+  ENABLE_MAN_TRUE=
+  ENABLE_MAN_FALSE='#'
+else
+  ENABLE_MAN_TRUE='#'
+  ENABLE_MAN_FALSE=
+fi
+
+
+# Check whether --enable-doc-cross-references was given.
+if test "${enable_doc_cross_references+set}" = set; then
+  enableval=$enable_doc_cross_references; enable_doc_cross_references=$enableval
+else
+  enable_doc_cross_references=yes
+fi
+
+
+if test "x$enable_doc_cross_references" != xno ; then
+       GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+       CAIRO_PREFIX="`pkg-config --variable=prefix cairo`"
+
+
+fi
+
+
+if test x$enable_doc_cross_references != xno; then
+  ENABLE_DOC_CROSS_REFERENCES_TRUE=
+  ENABLE_DOC_CROSS_REFERENCES_FALSE='#'
+else
+  ENABLE_DOC_CROSS_REFERENCES_TRUE='#'
+  ENABLE_DOC_CROSS_REFERENCES_FALSE=
+fi
+
+
+
+# Note that -module isn't included here since automake needs to see it to know
+# that something like pango-arabic-fc.la is a valid libtool archive
+#
+LIBRARY_LIBTOOL_OPTIONS="-version-info $VERSION_INFO"
+MODULE_LIBTOOL_OPTIONS="-export-dynamic -avoid-version"
+if test "$pango_platform_win32" = yes; then
+    # We currently use .def files on Windows
+    true
+    LIBRARY_LIBTOOL_OPTIONS="$LIBRARY_LIBTOOL_OPTIONS -no-undefined"
+    MODULE_LIBTOOL_OPTIONS="$MODULE_LIBTOOL_OPTIONS -no-undefined"
+else
+    # libtool option to control which symbols are exported
+    # right now, symbols starting with '_' are not exported
+    LIBRARY_LIBTOOL_OPTIONS="$LIBRARY_LIBTOOL_OPTIONS "'-export-symbols-regex "^pango_.*"'
+    MODULE_LIBTOOL_OPTIONS="$MODULE_LIBTOOL_OPTIONS "'-export-symbols-regex "^script_engine_.*"'
+fi
+
+
+
+
+use_la_modules=false
+
+# is there any platform that we have to use .la files?
+
+if $use_la_modules ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_LA_MODULES 1
+_ACEOF
+
+fi
+
+
+# Check whether --enable-explicit-deps was given.
+if test "${enable_explicit_deps+set}" = set; then
+  enableval=$enable_explicit_deps; enable_explicit_deps="$enableval"
+else
+  enable_explicit_deps=auto
+fi
+
+
+{ echo "$as_me:$LINENO: checking Whether to write dependencies into .pc files" >&5
+echo $ECHO_N "checking Whether to write dependencies into .pc files... $ECHO_C" >&6; }
+case $enable_explicit_deps in
+  auto)
+    export SED
+    deplibs_check_method=`(./libtool --config; echo 'eval echo \"$deplibs_check_method\"') | sh`
+    if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then
+      enable_explicit_deps=yes
+    else
+      enable_explicit_deps=no
+    fi
+  ;;
+  yes|no)
+  ;;
+  *) { { echo "$as_me:$LINENO: error: Value given to --enable-explicit-deps must be one of yes, no or auto" >&5
+echo "$as_me: error: Value given to --enable-explicit-deps must be one of yes, no or auto" >&2;}
+   { (exit 1); exit 1; }; }
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $enable_explicit_deps" >&5
+echo "${ECHO_T}$enable_explicit_deps" >&6; }
+
+PKGCONFIG_MATH_LIBS=
+PKGCONFIG_CAIRO_REQUIRES=
+
+if test $enable_explicit_deps = yes ; then
+  PKGCONFIG_MATH_LIBS=-lm
+
+  X_LIBS="$X_LIBS $X_EXTRA_LIBS"
+
+  if $have_cairo_freetype;  then
+    PKGCONFIG_CAIRO_REQUIRES="$PKGCONFIG_CAIRO_REQUIRES pangoft2"
+  fi
+  if $have_cairo_win32;  then
+    PKGCONFIG_CAIRO_REQUIRES="$PKGCONFIG_CAIRO_REQUIRES pangowin32"
+  fi
+fi
+
+
+
+
+
+if test $enable_explicit_deps = no; then
+  DISABLE_EXPLICIT_DEPS_TRUE=
+  DISABLE_EXPLICIT_DEPS_FALSE='#'
+else
+  DISABLE_EXPLICIT_DEPS_TRUE='#'
+  DISABLE_EXPLICIT_DEPS_FALSE=
+fi
+
+
+ac_config_commands="$ac_config_commands pango/module-defs.h"
+
+
+ac_config_commands="$ac_config_commands pango/module-defs-x.c"
+
+
+ac_config_commands="$ac_config_commands pango/module-defs-fc.c"
+
+
+ac_config_commands="$ac_config_commands pango/module-defs-win32.c"
+
+
+ac_config_commands="$ac_config_commands pango/module-defs-atsui.c"
+
+
+ac_config_commands="$ac_config_commands pango/module-defs-lang.c"
+
+
+
+
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+  { echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_opendir=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_opendir+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+  :
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+  { echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_opendir=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_opendir+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+  :
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+
+for ac_header in unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------------------------------------------- ##
+## Report this to http://bugzilla.gnome.org/enter_bug.cgi?product=pango ##
+## -------------------------------------------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+              { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Honor aclocal flags
+ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
+ac_config_commands="$ac_config_commands pango/pango-features.h"
+
+
+ac_config_files="$ac_config_files Makefile pango/Makefile pango/mini-fribidi/Makefile pango/opentype/Makefile pango/pango.rc pango/pangoft2.rc pango/pangowin32.rc pango/pangox.rc pango/pangoxft.rc pango-view/Makefile modules/Makefile modules/arabic/Makefile modules/basic/Makefile modules/hangul/Makefile modules/hebrew/Makefile modules/indic/Makefile modules/khmer/Makefile modules/syriac/Makefile modules/thai/Makefile modules/tibetan/Makefile examples/Makefile docs/Makefile docs/version.xml tools/Makefile tests/Makefile pango.pc pangox.pc pangowin32.pc pangoft2.pc pangoxft.pc pangocairo.pc pango-uninstalled.pc pangox-uninstalled.pc pangowin32-uninstalled.pc pangoft2-uninstalled.pc pangoxft-uninstalled.pc pangocairo-uninstalled.pc pango-zip.sh"
+
+
+ac_config_files="$ac_config_files tests/runtests.sh"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"OS_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"OS_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CXX_TRUE}" && test -z "${HAVE_CXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"PLATFORM_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"PLATFORM_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${MS_LIB_AVAILABLE_TRUE}" && test -z "${MS_LIB_AVAILABLE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MS_LIB_AVAILABLE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MS_LIB_AVAILABLE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_X_TRUE}" && test -z "${HAVE_X_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_X\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_X\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_FREETYPE_TRUE}" && test -z "${HAVE_FREETYPE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_FREETYPE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_FREETYPE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_XFT_TRUE}" && test -z "${HAVE_XFT_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_XFT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_XFT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_WIN32_TRUE}" && test -z "${HAVE_WIN32_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_TRUE}" && test -z "${HAVE_CAIRO_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_PNG_TRUE}" && test -z "${HAVE_CAIRO_PNG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_PNG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_PNG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_PS_TRUE}" && test -z "${HAVE_CAIRO_PS_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_PS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_PS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_PDF_TRUE}" && test -z "${HAVE_CAIRO_PDF_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_PDF\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_PDF\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_XLIB_TRUE}" && test -z "${HAVE_CAIRO_XLIB_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_XLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_XLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_WIN32_TRUE}" && test -z "${HAVE_CAIRO_WIN32_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_FREETYPE_TRUE}" && test -z "${HAVE_CAIRO_FREETYPE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_FREETYPE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_FREETYPE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CAIRO_ATSUI_TRUE}" && test -z "${HAVE_CAIRO_ATSUI_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_CAIRO_ATSUI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CAIRO_ATSUI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_INTROSPECTION_TRUE}" && test -z "${HAVE_INTROSPECTION_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_INTROSPECTION\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_INTROSPECTION\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_INCLUDED_MODULES_TRUE}" && test -z "${HAVE_INCLUDED_MODULES_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_INCLUDED_MODULES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_INCLUDED_MODULES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_DYNAMIC_MODULES_TRUE}" && test -z "${HAVE_DYNAMIC_MODULES_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_DYNAMIC_MODULES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_DYNAMIC_MODULES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_ARABIC_FC_TRUE}" && test -z "${INCLUDE_ARABIC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_ARABIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_ARABIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_ARABIC_LANG_TRUE}" && test -z "${INCLUDE_ARABIC_LANG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_ARABIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_ARABIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_BASIC_FC_TRUE}" && test -z "${INCLUDE_BASIC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_BASIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_BASIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_BASIC_WIN32_TRUE}" && test -z "${INCLUDE_BASIC_WIN32_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_BASIC_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_BASIC_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_BASIC_X_TRUE}" && test -z "${INCLUDE_BASIC_X_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_BASIC_X\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_BASIC_X\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_BASIC_ATSUI_TRUE}" && test -z "${INCLUDE_BASIC_ATSUI_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_BASIC_ATSUI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_BASIC_ATSUI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_HANGUL_FC_TRUE}" && test -z "${INCLUDE_HANGUL_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_HANGUL_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_HANGUL_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_HEBREW_FC_TRUE}" && test -z "${INCLUDE_HEBREW_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_HEBREW_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_HEBREW_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_INDIC_FC_TRUE}" && test -z "${INCLUDE_INDIC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_INDIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_INDIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_INDIC_LANG_TRUE}" && test -z "${INCLUDE_INDIC_LANG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_INDIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_INDIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_KHMER_FC_TRUE}" && test -z "${INCLUDE_KHMER_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_KHMER_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_KHMER_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_SYRIAC_FC_TRUE}" && test -z "${INCLUDE_SYRIAC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_SYRIAC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_SYRIAC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_THAI_FC_TRUE}" && test -z "${INCLUDE_THAI_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_THAI_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_THAI_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_THAI_LANG_TRUE}" && test -z "${INCLUDE_THAI_LANG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_THAI_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_THAI_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${INCLUDE_TIBETAN_FC_TRUE}" && test -z "${INCLUDE_TIBETAN_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"INCLUDE_TIBETAN_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"INCLUDE_TIBETAN_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_ARABIC_FC_TRUE}" && test -z "${DYNAMIC_ARABIC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_ARABIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_ARABIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_ARABIC_LANG_TRUE}" && test -z "${DYNAMIC_ARABIC_LANG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_ARABIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_ARABIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_BASIC_FC_TRUE}" && test -z "${DYNAMIC_BASIC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_BASIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_BASIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_BASIC_WIN32_TRUE}" && test -z "${DYNAMIC_BASIC_WIN32_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_BASIC_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_BASIC_WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_BASIC_X_TRUE}" && test -z "${DYNAMIC_BASIC_X_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_BASIC_X\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_BASIC_X\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_BASIC_ATSUI_TRUE}" && test -z "${DYNAMIC_BASIC_ATSUI_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_BASIC_ATSUI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_BASIC_ATSUI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_HANGUL_FC_TRUE}" && test -z "${DYNAMIC_HANGUL_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_HANGUL_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_HANGUL_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_HEBREW_FC_TRUE}" && test -z "${DYNAMIC_HEBREW_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_HEBREW_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_HEBREW_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_INDIC_FC_TRUE}" && test -z "${DYNAMIC_INDIC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_INDIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_INDIC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_INDIC_LANG_TRUE}" && test -z "${DYNAMIC_INDIC_LANG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_INDIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_INDIC_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_KHMER_FC_TRUE}" && test -z "${DYNAMIC_KHMER_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_KHMER_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_KHMER_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_SYRIAC_FC_TRUE}" && test -z "${DYNAMIC_SYRIAC_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_SYRIAC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_SYRIAC_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_THAI_FC_TRUE}" && test -z "${DYNAMIC_THAI_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_THAI_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_THAI_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_THAI_LANG_TRUE}" && test -z "${DYNAMIC_THAI_LANG_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_THAI_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_THAI_LANG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DYNAMIC_TIBETAN_FC_TRUE}" && test -z "${DYNAMIC_TIBETAN_FC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DYNAMIC_TIBETAN_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DYNAMIC_TIBETAN_FC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_MAN_TRUE}" && test -z "${ENABLE_MAN_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_MAN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENABLE_MAN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_DOC_CROSS_REFERENCES_TRUE}" && test -z "${ENABLE_DOC_CROSS_REFERENCES_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_DOC_CROSS_REFERENCES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENABLE_DOC_CROSS_REFERENCES\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${DISABLE_EXPLICIT_DEPS_TRUE}" && test -z "${DISABLE_EXPLICIT_DEPS_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"DISABLE_EXPLICIT_DEPS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"DISABLE_EXPLICIT_DEPS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+       case $1 in
+        -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by pango $as_me 1.26.1, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                  instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+pango config.status 1.26.1
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
+predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_ld_CXX \
+hardcode_libdir_separator_CXX \
+fix_srcfile_path_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+ac_aux_dir='$ac_aux_dir'
+
+
+
+included_modules=$included_modules
+
+
+        PANGO_VERSION_MAJOR=$PANGO_VERSION_MAJOR
+        PANGO_VERSION_MINOR=$PANGO_VERSION_MINOR
+        PANGO_VERSION_MICRO=$PANGO_VERSION_MICRO
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "pango/module-defs.h") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/module-defs.h" ;;
+    "pango/module-defs-x.c") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/module-defs-x.c" ;;
+    "pango/module-defs-fc.c") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/module-defs-fc.c" ;;
+    "pango/module-defs-win32.c") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/module-defs-win32.c" ;;
+    "pango/module-defs-atsui.c") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/module-defs-atsui.c" ;;
+    "pango/module-defs-lang.c") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/module-defs-lang.c" ;;
+    "pango/pango-features.h") CONFIG_COMMANDS="$CONFIG_COMMANDS pango/pango-features.h" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "pango/Makefile") CONFIG_FILES="$CONFIG_FILES pango/Makefile" ;;
+    "pango/mini-fribidi/Makefile") CONFIG_FILES="$CONFIG_FILES pango/mini-fribidi/Makefile" ;;
+    "pango/opentype/Makefile") CONFIG_FILES="$CONFIG_FILES pango/opentype/Makefile" ;;
+    "pango/pango.rc") CONFIG_FILES="$CONFIG_FILES pango/pango.rc" ;;
+    "pango/pangoft2.rc") CONFIG_FILES="$CONFIG_FILES pango/pangoft2.rc" ;;
+    "pango/pangowin32.rc") CONFIG_FILES="$CONFIG_FILES pango/pangowin32.rc" ;;
+    "pango/pangox.rc") CONFIG_FILES="$CONFIG_FILES pango/pangox.rc" ;;
+    "pango/pangoxft.rc") CONFIG_FILES="$CONFIG_FILES pango/pangoxft.rc" ;;
+    "pango-view/Makefile") CONFIG_FILES="$CONFIG_FILES pango-view/Makefile" ;;
+    "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;;
+    "modules/arabic/Makefile") CONFIG_FILES="$CONFIG_FILES modules/arabic/Makefile" ;;
+    "modules/basic/Makefile") CONFIG_FILES="$CONFIG_FILES modules/basic/Makefile" ;;
+    "modules/hangul/Makefile") CONFIG_FILES="$CONFIG_FILES modules/hangul/Makefile" ;;
+    "modules/hebrew/Makefile") CONFIG_FILES="$CONFIG_FILES modules/hebrew/Makefile" ;;
+    "modules/indic/Makefile") CONFIG_FILES="$CONFIG_FILES modules/indic/Makefile" ;;
+    "modules/khmer/Makefile") CONFIG_FILES="$CONFIG_FILES modules/khmer/Makefile" ;;
+    "modules/syriac/Makefile") CONFIG_FILES="$CONFIG_FILES modules/syriac/Makefile" ;;
+    "modules/thai/Makefile") CONFIG_FILES="$CONFIG_FILES modules/thai/Makefile" ;;
+    "modules/tibetan/Makefile") CONFIG_FILES="$CONFIG_FILES modules/tibetan/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
+    "docs/version.xml") CONFIG_FILES="$CONFIG_FILES docs/version.xml" ;;
+    "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "pango.pc") CONFIG_FILES="$CONFIG_FILES pango.pc" ;;
+    "pangox.pc") CONFIG_FILES="$CONFIG_FILES pangox.pc" ;;
+    "pangowin32.pc") CONFIG_FILES="$CONFIG_FILES pangowin32.pc" ;;
+    "pangoft2.pc") CONFIG_FILES="$CONFIG_FILES pangoft2.pc" ;;
+    "pangoxft.pc") CONFIG_FILES="$CONFIG_FILES pangoxft.pc" ;;
+    "pangocairo.pc") CONFIG_FILES="$CONFIG_FILES pangocairo.pc" ;;
+    "pango-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pango-uninstalled.pc" ;;
+    "pangox-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pangox-uninstalled.pc" ;;
+    "pangowin32-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pangowin32-uninstalled.pc" ;;
+    "pangoft2-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pangoft2-uninstalled.pc" ;;
+    "pangoxft-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pangoxft-uninstalled.pc" ;;
+    "pangocairo-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES pangocairo-uninstalled.pc" ;;
+    "pango-zip.sh") CONFIG_FILES="$CONFIG_FILES pango-zip.sh" ;;
+    "tests/runtests.sh") CONFIG_FILES="$CONFIG_FILES tests/runtests.sh" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+PANGO_VERSION_MAJOR!$PANGO_VERSION_MAJOR$ac_delim
+PANGO_VERSION_MINOR!$PANGO_VERSION_MINOR$ac_delim
+PANGO_VERSION_MICRO!$PANGO_VERSION_MICRO$ac_delim
+PANGO_VERSION!$PANGO_VERSION$ac_delim
+PANGO_API_VERSION!$PANGO_API_VERSION$ac_delim
+PANGO_INTERFACE_AGE!$PANGO_INTERFACE_AGE$ac_delim
+PANGO_BINARY_AGE!$PANGO_BINARY_AGE$ac_delim
+PANGO_MODULE_VERSION!$PANGO_MODULE_VERSION$ac_delim
+PANGO_CURRENT_MINUS_AGE!$PANGO_CURRENT_MINUS_AGE$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+LIB_EXE_MACHINE_FLAG!$LIB_EXE_MACHINE_FLAG$ac_delim
+OS_WIN32_TRUE!$OS_WIN32_TRUE$ac_delim
+OS_WIN32_FALSE!$OS_WIN32_FALSE$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+CXX!$CXX$ac_delim
+CXXFLAGS!$CXXFLAGS$ac_delim
+ac_ct_CXX!$ac_ct_CXX$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+CXXDEPMODE!$CXXDEPMODE$ac_delim
+am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim
+am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim
+HAVE_CXX_TRUE!$HAVE_CXX_TRUE$ac_delim
+HAVE_CXX_FALSE!$HAVE_CXX_FALSE$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+AS!$AS$ac_delim
+DLLTOOL!$DLLTOOL$ac_delim
+OBJDUMP!$OBJDUMP$ac_delim
+LIBTOOL!$LIBTOOL$ac_delim
+SED!$SED$ac_delim
+FGREP!$FGREP$ac_delim
+LD!$LD$ac_delim
+DUMPBIN!$DUMPBIN$ac_delim
+ac_ct_DUMPBIN!$ac_ct_DUMPBIN$ac_delim
+NM!$NM$ac_delim
+LN_S!$LN_S$ac_delim
+AR!$AR$ac_delim
+RANLIB!$RANLIB$ac_delim
+lt_ECHO!$lt_ECHO$ac_delim
+DSYMUTIL!$DSYMUTIL$ac_delim
+NMEDIT!$NMEDIT$ac_delim
+LIPO!$LIPO$ac_delim
+OTOOL!$OTOOL$ac_delim
+OTOOL64!$OTOOL64$ac_delim
+CXXCPP!$CXXCPP$ac_delim
+PLATFORM_WIN32_TRUE!$PLATFORM_WIN32_TRUE$ac_delim
+PLATFORM_WIN32_FALSE!$PLATFORM_WIN32_FALSE$ac_delim
+WINDRES!$WINDRES$ac_delim
+ms_librarian!$ms_librarian$ac_delim
+MS_LIB_AVAILABLE_TRUE!$MS_LIB_AVAILABLE_TRUE$ac_delim
+MS_LIB_AVAILABLE_FALSE!$MS_LIB_AVAILABLE_FALSE$ac_delim
+PANGO_DEBUG_FLAGS!$PANGO_DEBUG_FLAGS$ac_delim
+CROSS_COMPILING_TRUE!$CROSS_COMPILING_TRUE$ac_delim
+CROSS_COMPILING_FALSE!$CROSS_COMPILING_FALSE$ac_delim
+XMKMF!$XMKMF$ac_delim
+X_CFLAGS!$X_CFLAGS$ac_delim
+X_PRE_LIBS!$X_PRE_LIBS$ac_delim
+X_LIBS!$X_LIBS$ac_delim
+X_EXTRA_LIBS!$X_EXTRA_LIBS$ac_delim
+HAVE_X_TRUE!$HAVE_X_TRUE$ac_delim
+HAVE_X_FALSE!$HAVE_X_FALSE$ac_delim
+PKG_CONFIG!$PKG_CONFIG$ac_delim
+FONTCONFIG_CFLAGS!$FONTCONFIG_CFLAGS$ac_delim
+FONTCONFIG_LIBS!$FONTCONFIG_LIBS$ac_delim
+FREETYPE_CFLAGS!$FREETYPE_CFLAGS$ac_delim
+FREETYPE_LIBS!$FREETYPE_LIBS$ac_delim
+HAVE_FREETYPE_TRUE!$HAVE_FREETYPE_TRUE$ac_delim
+HAVE_FREETYPE_FALSE!$HAVE_FREETYPE_FALSE$ac_delim
+XFT_CFLAGS!$XFT_CFLAGS$ac_delim
+XFT_LIBS!$XFT_LIBS$ac_delim
+HAVE_XFT_TRUE!$HAVE_XFT_TRUE$ac_delim
+HAVE_XFT_FALSE!$HAVE_XFT_FALSE$ac_delim
+WIN32_LIBS!$WIN32_LIBS$ac_delim
+HAVE_WIN32_TRUE!$HAVE_WIN32_TRUE$ac_delim
+HAVE_WIN32_FALSE!$HAVE_WIN32_FALSE$ac_delim
+CAIRO_CFLAGS!$CAIRO_CFLAGS$ac_delim
+CAIRO_LIBS!$CAIRO_LIBS$ac_delim
+HAVE_CAIRO_TRUE!$HAVE_CAIRO_TRUE$ac_delim
+HAVE_CAIRO_FALSE!$HAVE_CAIRO_FALSE$ac_delim
+HAVE_CAIRO_PNG_TRUE!$HAVE_CAIRO_PNG_TRUE$ac_delim
+HAVE_CAIRO_PNG_FALSE!$HAVE_CAIRO_PNG_FALSE$ac_delim
+HAVE_CAIRO_PS_TRUE!$HAVE_CAIRO_PS_TRUE$ac_delim
+HAVE_CAIRO_PS_FALSE!$HAVE_CAIRO_PS_FALSE$ac_delim
+HAVE_CAIRO_PDF_TRUE!$HAVE_CAIRO_PDF_TRUE$ac_delim
+HAVE_CAIRO_PDF_FALSE!$HAVE_CAIRO_PDF_FALSE$ac_delim
+HAVE_CAIRO_XLIB_TRUE!$HAVE_CAIRO_XLIB_TRUE$ac_delim
+HAVE_CAIRO_XLIB_FALSE!$HAVE_CAIRO_XLIB_FALSE$ac_delim
+HAVE_CAIRO_WIN32_TRUE!$HAVE_CAIRO_WIN32_TRUE$ac_delim
+HAVE_CAIRO_WIN32_FALSE!$HAVE_CAIRO_WIN32_FALSE$ac_delim
+HAVE_CAIRO_FREETYPE_TRUE!$HAVE_CAIRO_FREETYPE_TRUE$ac_delim
+HAVE_CAIRO_FREETYPE_FALSE!$HAVE_CAIRO_FREETYPE_FALSE$ac_delim
+HAVE_CAIRO_ATSUI_TRUE!$HAVE_CAIRO_ATSUI_TRUE$ac_delim
+HAVE_CAIRO_ATSUI_FALSE!$HAVE_CAIRO_ATSUI_FALSE$ac_delim
+GLIB_CFLAGS!$GLIB_CFLAGS$ac_delim
+GLIB_LIBS!$GLIB_LIBS$ac_delim
+GLIB_MKENUMS!$GLIB_MKENUMS$ac_delim
+LIBTHAI_CFLAGS!$LIBTHAI_CFLAGS$ac_delim
+LIBTHAI_LIBS!$LIBTHAI_LIBS$ac_delim
+INTROSPECTION_CFLAGS!$INTROSPECTION_CFLAGS$ac_delim
+INTROSPECTION_LIBS!$INTROSPECTION_LIBS$ac_delim
+HAVE_INTROSPECTION_TRUE!$HAVE_INTROSPECTION_TRUE$ac_delim
+HAVE_INTROSPECTION_FALSE!$HAVE_INTROSPECTION_FALSE$ac_delim
+G_IR_SCANNER!$G_IR_SCANNER$ac_delim
+G_IR_COMPILER!$G_IR_COMPILER$ac_delim
+G_IR_GENERATE!$G_IR_GENERATE$ac_delim
+GIRDIR!$GIRDIR$ac_delim
+TYPELIBDIR!$TYPELIBDIR$ac_delim
+HAVE_INCLUDED_MODULES_TRUE!$HAVE_INCLUDED_MODULES_TRUE$ac_delim
+HAVE_INCLUDED_MODULES_FALSE!$HAVE_INCLUDED_MODULES_FALSE$ac_delim
+HAVE_DYNAMIC_MODULES_TRUE!$HAVE_DYNAMIC_MODULES_TRUE$ac_delim
+HAVE_DYNAMIC_MODULES_FALSE!$HAVE_DYNAMIC_MODULES_FALSE$ac_delim
+INCLUDED_X_MODULES!$INCLUDED_X_MODULES$ac_delim
+INCLUDED_FC_MODULES!$INCLUDED_FC_MODULES$ac_delim
+INCLUDED_WIN32_MODULES!$INCLUDED_WIN32_MODULES$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+INCLUDED_ATSUI_MODULES!$INCLUDED_ATSUI_MODULES$ac_delim
+INCLUDED_LANG_MODULES!$INCLUDED_LANG_MODULES$ac_delim
+INCLUDE_ARABIC_FC_TRUE!$INCLUDE_ARABIC_FC_TRUE$ac_delim
+INCLUDE_ARABIC_FC_FALSE!$INCLUDE_ARABIC_FC_FALSE$ac_delim
+INCLUDE_ARABIC_LANG_TRUE!$INCLUDE_ARABIC_LANG_TRUE$ac_delim
+INCLUDE_ARABIC_LANG_FALSE!$INCLUDE_ARABIC_LANG_FALSE$ac_delim
+INCLUDE_BASIC_FC_TRUE!$INCLUDE_BASIC_FC_TRUE$ac_delim
+INCLUDE_BASIC_FC_FALSE!$INCLUDE_BASIC_FC_FALSE$ac_delim
+INCLUDE_BASIC_WIN32_TRUE!$INCLUDE_BASIC_WIN32_TRUE$ac_delim
+INCLUDE_BASIC_WIN32_FALSE!$INCLUDE_BASIC_WIN32_FALSE$ac_delim
+INCLUDE_BASIC_X_TRUE!$INCLUDE_BASIC_X_TRUE$ac_delim
+INCLUDE_BASIC_X_FALSE!$INCLUDE_BASIC_X_FALSE$ac_delim
+INCLUDE_BASIC_ATSUI_TRUE!$INCLUDE_BASIC_ATSUI_TRUE$ac_delim
+INCLUDE_BASIC_ATSUI_FALSE!$INCLUDE_BASIC_ATSUI_FALSE$ac_delim
+INCLUDE_HANGUL_FC_TRUE!$INCLUDE_HANGUL_FC_TRUE$ac_delim
+INCLUDE_HANGUL_FC_FALSE!$INCLUDE_HANGUL_FC_FALSE$ac_delim
+INCLUDE_HEBREW_FC_TRUE!$INCLUDE_HEBREW_FC_TRUE$ac_delim
+INCLUDE_HEBREW_FC_FALSE!$INCLUDE_HEBREW_FC_FALSE$ac_delim
+INCLUDE_INDIC_FC_TRUE!$INCLUDE_INDIC_FC_TRUE$ac_delim
+INCLUDE_INDIC_FC_FALSE!$INCLUDE_INDIC_FC_FALSE$ac_delim
+INCLUDE_INDIC_LANG_TRUE!$INCLUDE_INDIC_LANG_TRUE$ac_delim
+INCLUDE_INDIC_LANG_FALSE!$INCLUDE_INDIC_LANG_FALSE$ac_delim
+INCLUDE_KHMER_FC_TRUE!$INCLUDE_KHMER_FC_TRUE$ac_delim
+INCLUDE_KHMER_FC_FALSE!$INCLUDE_KHMER_FC_FALSE$ac_delim
+INCLUDE_SYRIAC_FC_TRUE!$INCLUDE_SYRIAC_FC_TRUE$ac_delim
+INCLUDE_SYRIAC_FC_FALSE!$INCLUDE_SYRIAC_FC_FALSE$ac_delim
+INCLUDE_THAI_FC_TRUE!$INCLUDE_THAI_FC_TRUE$ac_delim
+INCLUDE_THAI_FC_FALSE!$INCLUDE_THAI_FC_FALSE$ac_delim
+INCLUDE_THAI_LANG_TRUE!$INCLUDE_THAI_LANG_TRUE$ac_delim
+INCLUDE_THAI_LANG_FALSE!$INCLUDE_THAI_LANG_FALSE$ac_delim
+INCLUDE_TIBETAN_FC_TRUE!$INCLUDE_TIBETAN_FC_TRUE$ac_delim
+INCLUDE_TIBETAN_FC_FALSE!$INCLUDE_TIBETAN_FC_FALSE$ac_delim
+DYNAMIC_ARABIC_FC_TRUE!$DYNAMIC_ARABIC_FC_TRUE$ac_delim
+DYNAMIC_ARABIC_FC_FALSE!$DYNAMIC_ARABIC_FC_FALSE$ac_delim
+DYNAMIC_ARABIC_LANG_TRUE!$DYNAMIC_ARABIC_LANG_TRUE$ac_delim
+DYNAMIC_ARABIC_LANG_FALSE!$DYNAMIC_ARABIC_LANG_FALSE$ac_delim
+DYNAMIC_BASIC_FC_TRUE!$DYNAMIC_BASIC_FC_TRUE$ac_delim
+DYNAMIC_BASIC_FC_FALSE!$DYNAMIC_BASIC_FC_FALSE$ac_delim
+DYNAMIC_BASIC_WIN32_TRUE!$DYNAMIC_BASIC_WIN32_TRUE$ac_delim
+DYNAMIC_BASIC_WIN32_FALSE!$DYNAMIC_BASIC_WIN32_FALSE$ac_delim
+DYNAMIC_BASIC_X_TRUE!$DYNAMIC_BASIC_X_TRUE$ac_delim
+DYNAMIC_BASIC_X_FALSE!$DYNAMIC_BASIC_X_FALSE$ac_delim
+DYNAMIC_BASIC_ATSUI_TRUE!$DYNAMIC_BASIC_ATSUI_TRUE$ac_delim
+DYNAMIC_BASIC_ATSUI_FALSE!$DYNAMIC_BASIC_ATSUI_FALSE$ac_delim
+DYNAMIC_HANGUL_FC_TRUE!$DYNAMIC_HANGUL_FC_TRUE$ac_delim
+DYNAMIC_HANGUL_FC_FALSE!$DYNAMIC_HANGUL_FC_FALSE$ac_delim
+DYNAMIC_HEBREW_FC_TRUE!$DYNAMIC_HEBREW_FC_TRUE$ac_delim
+DYNAMIC_HEBREW_FC_FALSE!$DYNAMIC_HEBREW_FC_FALSE$ac_delim
+DYNAMIC_INDIC_FC_TRUE!$DYNAMIC_INDIC_FC_TRUE$ac_delim
+DYNAMIC_INDIC_FC_FALSE!$DYNAMIC_INDIC_FC_FALSE$ac_delim
+DYNAMIC_INDIC_LANG_TRUE!$DYNAMIC_INDIC_LANG_TRUE$ac_delim
+DYNAMIC_INDIC_LANG_FALSE!$DYNAMIC_INDIC_LANG_FALSE$ac_delim
+DYNAMIC_KHMER_FC_TRUE!$DYNAMIC_KHMER_FC_TRUE$ac_delim
+DYNAMIC_KHMER_FC_FALSE!$DYNAMIC_KHMER_FC_FALSE$ac_delim
+DYNAMIC_SYRIAC_FC_TRUE!$DYNAMIC_SYRIAC_FC_TRUE$ac_delim
+DYNAMIC_SYRIAC_FC_FALSE!$DYNAMIC_SYRIAC_FC_FALSE$ac_delim
+DYNAMIC_THAI_FC_TRUE!$DYNAMIC_THAI_FC_TRUE$ac_delim
+DYNAMIC_THAI_FC_FALSE!$DYNAMIC_THAI_FC_FALSE$ac_delim
+DYNAMIC_THAI_LANG_TRUE!$DYNAMIC_THAI_LANG_TRUE$ac_delim
+DYNAMIC_THAI_LANG_FALSE!$DYNAMIC_THAI_LANG_FALSE$ac_delim
+DYNAMIC_TIBETAN_FC_TRUE!$DYNAMIC_TIBETAN_FC_TRUE$ac_delim
+DYNAMIC_TIBETAN_FC_FALSE!$DYNAMIC_TIBETAN_FC_FALSE$ac_delim
+HTML_DIR!$HTML_DIR$ac_delim
+ENABLE_GTK_DOC_TRUE!$ENABLE_GTK_DOC_TRUE$ac_delim
+ENABLE_GTK_DOC_FALSE!$ENABLE_GTK_DOC_FALSE$ac_delim
+GTK_DOC_USE_LIBTOOL_TRUE!$GTK_DOC_USE_LIBTOOL_TRUE$ac_delim
+GTK_DOC_USE_LIBTOOL_FALSE!$GTK_DOC_USE_LIBTOOL_FALSE$ac_delim
+XSLTPROC!$XSLTPROC$ac_delim
+XML_CATALOG_FILE!$XML_CATALOG_FILE$ac_delim
+XMLCATALOG!$XMLCATALOG$ac_delim
+ENABLE_MAN_TRUE!$ENABLE_MAN_TRUE$ac_delim
+ENABLE_MAN_FALSE!$ENABLE_MAN_FALSE$ac_delim
+GLIB_PREFIX!$GLIB_PREFIX$ac_delim
+CAIRO_PREFIX!$CAIRO_PREFIX$ac_delim
+ENABLE_DOC_CROSS_REFERENCES_TRUE!$ENABLE_DOC_CROSS_REFERENCES_TRUE$ac_delim
+ENABLE_DOC_CROSS_REFERENCES_FALSE!$ENABLE_DOC_CROSS_REFERENCES_FALSE$ac_delim
+LIBRARY_LIBTOOL_OPTIONS!$LIBRARY_LIBTOOL_OPTIONS$ac_delim
+MODULE_LIBTOOL_OPTIONS!$MODULE_LIBTOOL_OPTIONS$ac_delim
+PKGCONFIG_MATH_LIBS!$PKGCONFIG_MATH_LIBS$ac_delim
+PKGCONFIG_CAIRO_REQUIRES!$PKGCONFIG_CAIRO_REQUIRES$ac_delim
+DISABLE_EXPLICIT_DEPS_TRUE!$DISABLE_EXPLICIT_DEPS_TRUE$ac_delim
+DISABLE_EXPLICIT_DEPS_FALSE!$DISABLE_EXPLICIT_DEPS_FALSE$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 84; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[    ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
+ac_dB='\\)[     (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+       t rset
+       :rset
+       s/^[     ]*#[    ]*define[       ][      ]*//
+       t ok
+       d
+       :ok
+       s/[\\&,]/\\&/g
+       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[    #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
+/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`$as_dirname -- $ac_file ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X$ac_file : 'X\(//\)[^/]' \| \
+        X$ac_file : 'X\(//\)$' \| \
+        X$ac_file : 'X\(/\)' \| . 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+    "pango/module-defs.h":C)
+cat > pango/module-defs.h <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "modules.h"
+
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  module_c=`echo $module | sed s/-/_/`
+  cat >> pango/module-defs.h <<EOTEXT
+extern void         _pango_${module_c}_script_engine_list (PangoEngineInfo **engines, int *n_engines);
+extern PangoEngine *_pango_${module_c}_script_engine_init (GTypeModule *module);
+extern void         _pango_${module_c}_script_engine_exit (void);
+extern void         _pango_${module_c}_script_engine_create (const char *id);
+
+EOTEXT
+done
+
+IFS="$pango_save_ifs"
+ ;;
+    "pango/module-defs-x.c":C)
+### X modules
+cat > pango/module-defs-x.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_x_modules[] = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-x($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-x.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+ fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-x.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+ ;;
+    "pango/module-defs-fc.c":C)
+### FC modules
+cat > pango/module-defs-fc.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_fc_modules[] = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-fc($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-fc.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-fc.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+ ;;
+    "pango/module-defs-win32.c":C)
+### Win32 modules
+cat > pango/module-defs-win32.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_win32_modules[] = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-win32($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-win32.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-win32.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+ ;;
+    "pango/module-defs-atsui.c":C)
+### ATSUI modules
+cat > pango/module-defs-atsui.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_atsui_modules[] = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-atsui($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-atsui.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-atsui.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+ ;;
+    "pango/module-defs-lang.c":C)
+### lang modules
+cat > pango/module-defs-lang.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_lang_modules[] = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-lang($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-lang.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-lang.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+ ;;
+    "pango/pango-features.h":C) featuresfile=pango/pango-features.h
+           outfile=$featuresfile.tmp
+           { echo "$as_me:$LINENO: creating $featuresfile" >&5
+echo "$as_me: creating $featuresfile" >&6;}
+           cat >$outfile <<_EOF
+/* Generated by configure. Do not edit */
+#ifndef PANGO_FEATURES_H
+#define PANGO_FEATURES_H
+
+#define PANGO_VERSION_MAJOR $PANGO_VERSION_MAJOR
+#define PANGO_VERSION_MINOR $PANGO_VERSION_MINOR
+#define PANGO_VERSION_MICRO $PANGO_VERSION_MICRO
+
+#define PANGO_VERSION_STRING "$PANGO_VERSION_MAJOR.$PANGO_VERSION_MINOR.$PANGO_VERSION_MICRO"
+
+_EOF
+       # TODO: define macros for enabled features/backends here
+
+        echo '' >>$outfile
+        echo '#endif' >>$outfile
+
+        if cmp -s $outfile $featuresfile; then
+          { echo "$as_me:$LINENO: $featuresfile is unchanged" >&5
+echo "$as_me: $featuresfile is unchanged" >&6;}
+          rm -f $outfile
+        else
+          mv $outfile $featuresfile
+        fi
+ ;;
+    "tests/runtests.sh":F) chmod +x tests/runtests.sh ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+backends=""
+if $have_cairo ; then backends="$backends Cairo"; fi
+if $have_win32 ; then backends="$backends Win32"; fi
+if $have_xft ; then backends="$backends Xft"; fi
+if $have_freetype && $have_fontconfig ; then backends="$backends FreeType"; fi
+if $have_x ; then backends="$backends X"; fi
+
+echo "configuration:
+       backends:$backends"
diff --git a/configure.in b/configure.in
new file mode 100755 (executable)
index 0000000..259c083
--- /dev/null
@@ -0,0 +1,1034 @@
+dnl Process this file with autoconf to create configure.
+AC_PREREQ(2.56)
+
+dnl ==========================================================================
+dnl                               Versioning              
+dnl ==========================================================================
+
+dnl Making releases:
+dnl   PANGO_VERSION_MICRO += 1;
+dnl   PANGO_INTERFACE_AGE += 1;
+dnl   PANGO_BINARY_AGE += 1;
+dnl if any functions have been added, set PANGO_INTERFACE_AGE to 0.
+dnl if backwards compatibility has been broken,
+dnl set PANGO_BINARY_AGE _and_ PANGO_INTERFACE_AGE to 0.
+
+dnl
+dnl We do the version number components as m4 macros
+dnl so that we can base configure --help output off
+dnl of them.
+dnl
+
+dnl The triplet 
+m4_define([pango_version_major], [1])
+m4_define([pango_version_minor], [26])
+m4_define([pango_version_micro], [1])
+
+m4_define([pango_version],
+          [pango_version_major.pango_version_minor.pango_version_micro])
+dnl The X.Y in -lpango-X.Y line. This is expected to stay 1.0 until Pango 2.
+m4_define([pango_api_version], [1.0])
+dnl Number of releases since we've added interfaces
+dnl XXX For 1.25 release simply remove it and make it automatic.
+m4_define([pango_interface_age], [0])
+m4_if(m4_eval(pango_version_minor % 2), [1],
+      [
+       dnl for unstable releases
+       m4_define([pango_interface_age], [0])
+      ],
+      [
+       dnl for stable releases
+       m4_define([pango_interface_age], pango_version_micro)
+      ])
+dnl Number of releases since we've broken binary compatibility.
+m4_define([pango_binary_age],
+          [m4_eval(100 * pango_version_minor + pango_version_micro)])
+dnl Module API version.  This should be stepped up when a change causes
+dnl older modules to not work with new pango.
+m4_define([pango_module_version], [1.6.0])
+
+
+AC_INIT(pango, pango_version(),
+        [http://bugzilla.gnome.org/enter_bug.cgi?product=pango])
+
+AC_CONFIG_SRCDIR([pango.pc.in])
+
+dnl -Wno-portability tells automake to stop complaining about the
+dnl usage of GNU Make specific features.
+AM_INIT_AUTOMAKE(1.9 gnits dist-bzip2 no-dist-gzip -Wno-portability)
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+AM_CONFIG_HEADER([config.h])
+
+
+PANGO_VERSION_MAJOR=pango_version_major()
+PANGO_VERSION_MINOR=pango_version_minor()
+PANGO_VERSION_MICRO=pango_version_micro()
+PANGO_VERSION=pango_version()
+PANGO_API_VERSION=pango_api_version()
+PANGO_INTERFACE_AGE=pango_interface_age()
+PANGO_BINARY_AGE=pango_binary_age()
+PANGO_MODULE_VERSION=pango_module_version()
+
+AC_SUBST(PANGO_VERSION_MAJOR)
+AC_SUBST(PANGO_VERSION_MINOR)
+AC_SUBST(PANGO_VERSION_MICRO)
+AC_SUBST(PANGO_VERSION)
+AC_SUBST(PANGO_API_VERSION)
+AC_SUBST(PANGO_INTERFACE_AGE)
+AC_SUBST(PANGO_BINARY_AGE)
+AC_SUBST(PANGO_MODULE_VERSION)
+
+AC_DEFINE(MODULE_VERSION, "pango_module_version()", [Module interface version])
+AC_DEFINE(PANGO_BINARY_AGE, pango_binary_age(), [PANGO binary age])
+AC_DEFINE(PANGO_INTERFACE_AGE, pango_interface_age(), [PANGO interface age])
+AC_DEFINE(PANGO_VERSION_MAJOR, pango_version_major(), [PANGO major version])
+AC_DEFINE(PANGO_VERSION_MINOR, pango_version_minor(), [PANGO minor version])
+AC_DEFINE(PANGO_VERSION_MICRO, pango_version_micro(), [PANGO micro version])
+
+dnl libtool versioning
+m4_define([lt_current], [m4_eval(100 * pango_version_minor + pango_version_micro - pango_interface_age)])
+m4_define([lt_revision], [pango_interface_age])
+m4_define([lt_age], [m4_eval(pango_binary_age - pango_interface_age)])
+VERSION_INFO="lt_current():lt_revision():lt_age()"
+PANGO_CURRENT_MINUS_AGE=m4_eval(lt_current - lt_age)
+
+AC_SUBST(PANGO_CURRENT_MINUS_AGE)
+
+dnl ==========================================================================
+
+AC_CANONICAL_HOST
+
+AC_MSG_CHECKING([for native Win32])
+case "$host" in
+  *-*-mingw*)
+    pango_os_win32=yes
+    case "$host" in
+      x86_64-*-*)
+       LIB_EXE_MACHINE_FLAG=X64
+       ;;
+      *)
+       LIB_EXE_MACHINE_FLAG=X86
+       ;;
+    esac
+    ;;
+  *)
+    pango_os_win32=no
+    ;;
+esac
+AC_MSG_RESULT([$pango_os_win32])
+
+AC_SUBST(LIB_EXE_MACHINE_FLAG)
+
+AM_CONDITIONAL(OS_WIN32, test "$pango_os_win32" = "yes")
+
+AC_PROG_CC
+
+dnl
+dnl Check for a working C++ compiler, but do not bail out, if none is found.
+dnl We use this for an automated test for C++ header correctness.
+dnl
+AC_CHECK_PROGS(CXX, [$CCC c++ g++ gcc CC cxx cc++ cl], gcc)
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE(,[class a { int b; } c;], ,CXX=)
+AM_CONDITIONAL(HAVE_CXX, test "$CXX" != "")
+AC_LANG_RESTORE
+
+#
+# Checks for HarfBuzz
+#
+
+AC_PROG_CXX
+AC_CHECK_FUNCS(mprotect sysconf getpagesize)
+AC_CHECK_HEADERS(unistd.h sys/mman.h)
+
+# Make sure we don't link to libstdc++ (needs de-gcc-fication)
+CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions"
+
+
+#
+# Win32 stuff
+#
+
+AC_LIBTOOL_WIN32_DLL
+AM_DISABLE_STATIC
+
+if test "$pango_os_win32" = "yes"; then
+  if test x$enable_static = xyes -o x$enable_static = x; then
+    AC_MSG_WARN([Disabling static library build, must build as DLL on Windows.])
+    enable_static=no
+  fi
+  if test x$enable_shared = xno; then
+    AC_MSG_WARN([Enabling shared library build, must build as DLL on Windows.])
+  fi
+  enable_shared=yes
+fi
+
+AM_PROG_LIBTOOL
+dnl when using libtool 2.x create libtool early, because it's used in configure
+m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
+
+AC_MSG_CHECKING([for some Win32 platform])
+case "$host" in
+  *-*-mingw*|*-*-cygwin*)
+    pango_platform_win32=yes
+    ;;
+  *)
+    pango_platform_win32=no
+    ;;
+esac
+AC_MSG_RESULT([$pango_platform_win32])
+AM_CONDITIONAL(PLATFORM_WIN32, test "$pango_platform_win32" = "yes")
+
+if test "$pango_platform_win32" = "yes"; then
+  AC_CHECK_TOOL(WINDRES, windres, no)
+  if test "$WINDRES" = no; then
+    AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
+  fi
+  AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
+fi
+AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
+
+changequote(,)dnl
+if test "x$GCC" = "xyes"; then
+  case " $CFLAGS " in
+  *[\ \        ]-Wall[\ \      ]*) ;;
+  *) CFLAGS="$CFLAGS -Wall" ;;
+  esac
+fi
+changequote([,])dnl
+
+dnl declare --enable-* args and collect ac_help strings
+
+m4_define([debug_default],
+          m4_if(m4_eval(pango_version_minor() % 2), [1], [yes], [minimum]))
+
+AC_ARG_ENABLE(debug,
+              AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
+                             [turn on debugging @<:@default=debug_default()@:>@]),
+             ,
+              enable_debug=debug_default())
+
+if test "x$enable_debug" = "xyes"; then
+  PANGO_DEBUG_FLAGS="-DPANGO_ENABLE_DEBUG"
+else
+  PANGO_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS"
+
+  if test "x$enable_debug" = "xno"; then
+    PANGO_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS $PANGO_DEBUG_FLAGS"
+  fi
+fi
+
+AC_SUBST(PANGO_DEBUG_FLAGS)
+
+AC_ARG_ENABLE(rebuilds,
+              [AC_HELP_STRING([--disable-rebuilds],
+                              [disable all source autogeneration rules])],,
+              [enable_rebuilds=yes])
+
+AM_CONDITIONAL(CROSS_COMPILING, [test $cross_compiling = yes])
+
+have_x=false
+if test "x$pango_os_win32" != xyes; then
+  AC_PATH_XTRA
+
+  if test x$no_x = xyes ; then
+    AC_MSG_WARN([X development libraries not found])
+    have_x=false
+  else
+    X_LIBS="$X_LIBS -lX11"
+    have_x=true
+    AC_DEFINE(HAVE_X, 1, [Have X libraries])
+  fi
+fi
+AM_CONDITIONAL(HAVE_X, $have_x) 
+
+have_fontconfig=false
+have_freetype=false
+have_xft=false
+
+#
+# Check for fontconfig
+#
+PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.5.0, have_fontconfig=true, AC_MSG_RESULT([no]))
+
+#
+# Checks for FreeType
+#
+if $have_fontconfig ; then
+  # The first version of freetype with a .pc file is 2.1.5.  That's recent
+  # enough for all the functions we use I guess.  No version check needed.
+  PKG_CHECK_MODULES(FREETYPE, freetype2, have_freetype=true, AC_MSG_RESULT([no]))
+fi
+if $have_freetype ; then
+  AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
+  # By freetype, we really always mean freetype+fontconfig
+  FREETYPE_CFLAGS="$FREETYPE_CFLAGS $FONTCONFIG_CFLAGS"
+  FREETYPE_LIBS="$FREETYPE_LIBS $FONTCONFIG_LIBS"
+fi
+AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
+
+#
+# Checks for Xft/XRender
+#
+if $have_x && $have_freetype ; then
+  PKG_CHECK_MODULES(XFT, xft >= 2.0.0 xrender, have_xft=true, AC_MSG_RESULT([no]))
+fi
+if $have_xft ; then
+  AC_DEFINE(HAVE_XFT, 1, [Have Xft library])
+fi
+AM_CONDITIONAL(HAVE_XFT, $have_xft)
+
+#
+# Checks for Win32 GDI
+#
+have_win32=false
+WIN32_LIBS=""
+WIN32_CFLAGS=""
+# The following doesn't work with autoconf-2.13, so we check $host instead
+# AC_CHECK_LIB(gdi32, GetTextMetricsA@8, have_win32=true, : )
+case "$host" in
+  *-*-mingw*|*-*-cygwin*) have_win32=true ;;
+esac
+
+
+if test $have_win32 = true; then
+  WIN32_LIBS="-lgdi32"
+fi
+
+AC_SUBST(WIN32_LIBS)
+AM_CONDITIONAL(HAVE_WIN32, $have_win32) 
+
+# Ensure MSVC-compatible struct packing convention is used when
+# compiling for Win32 with gcc.
+# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while
+# gcc2 uses "-fnative-struct".
+if test "$pango_os_win32" = "yes"; then
+  if test x"$GCC" = xyes; then
+    msnative_struct=''
+    AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
+    if test -z "$ac_cv_prog_CC"; then
+      our_gcc="$CC"
+    else
+      our_gcc="$ac_cv_prog_CC"
+    fi
+    case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in
+      2.)
+       if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then
+         msnative_struct='-fnative-struct'
+       fi
+       ;;
+      *)
+       if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then
+         msnative_struct='-mms-bitfields'
+       fi
+       ;;
+    esac
+    if test x"$msnative_struct" = x ; then
+      AC_MSG_RESULT([no way])
+      AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
+    else
+      CFLAGS="$CFLAGS $msnative_struct"
+      AC_MSG_RESULT([${msnative_struct}])
+    fi
+  fi
+fi
+
+#
+# Checks for ATSUI
+#
+AC_CHECK_HEADER(Carbon/Carbon.h, [have_atsui=true], [have_atsui=false])
+
+#
+# Checks for Cairo
+#
+have_cairo=false
+have_cairo_png=false
+have_cairo_ps=false
+have_cairo_pdf=false
+have_cairo_xlib=false
+have_cairo_freetype=false
+have_cairo_win32=false
+have_cairo_atsui=false
+cairo_required=1.7.6
+
+PKG_CHECK_MODULES(CAIRO, cairo >= $cairo_required, have_cairo=true, AC_MSG_RESULT([no]))
+   
+if $have_cairo ; then
+  pango_save_libs=$LIBS
+  LIBS="$LIBS $CAIRO_LIBS"
+  pango_save_ldflags=$LDFLAGS
+  LDFLAGS="$LDFLAGS $CAIRO_LIBS"
+
+  have_cairo=false
+  cairo_font_backends=""
+
+  if $have_freetype; then
+    PKG_CHECK_EXISTS(cairo-ft >= $cairo_required, have_cairo_freetype=true, :)
+  fi
+  if $have_cairo_freetype; then
+    AC_DEFINE(HAVE_CAIRO_FREETYPE, 1, [Whether Cairo can use FreeType for fonts])
+    cairo_font_backends="freetype $cairo_font_backends"
+    have_cairo=true
+  fi
+
+  if $have_win32; then
+    PKG_CHECK_EXISTS(cairo-win32 >= $cairo_required, have_cairo_win32=true, :)
+  fi
+  if $have_cairo_win32; then
+    AC_DEFINE(HAVE_CAIRO_WIN32, 1, [Whether Cairo can use the Win32 GDI for fonts])
+    cairo_font_backends="win32 $cairo_font_backends"
+    have_cairo=true
+  fi
+
+  if $have_atsui; then
+    PKG_CHECK_EXISTS(cairo-quartz-font >= $cairo_required, have_cairo_atsui=true, :)
+  fi
+  if $have_cairo_atsui; then
+    AC_DEFINE(HAVE_CAIRO_ATSUI, 1, [Whether Cairo can use ATSUI for fonts])
+    cairo_font_backends="quartz $cairo_font_backends"
+    have_cairo=true
+  fi
+
+  AC_MSG_CHECKING([which cairo font backends could be used])
+  if $have_cairo ; then
+    AC_MSG_RESULT([$cairo_font_backends])
+  else
+    AC_MSG_RESULT([none])
+    AC_MSG_NOTICE([Disabling cairo support])
+  fi
+
+  if $have_cairo ; then
+    AC_DEFINE(HAVE_CAIRO, 1, [Have usable Cairo library and font backend])
+
+    PKG_CHECK_EXISTS(cairo-png >= $cairo_required, have_cairo_png=true, :)
+    if $have_cairo_png; then
+      AC_DEFINE(HAVE_CAIRO_PNG, 1, [Whether Cairo has PNG support])
+    fi
+  
+    PKG_CHECK_EXISTS(cairo-ps >= $cairo_required, have_cairo_ps=true, :)
+    if $have_cairo_ps; then
+      AC_DEFINE(HAVE_CAIRO_PS, 1, [Whether Cairo has PS support])
+    fi
+  
+    PKG_CHECK_EXISTS(cairo-pdf >= $cairo_required, have_cairo_pdf=true, :)
+    if $have_cairo_pdf; then
+      AC_DEFINE(HAVE_CAIRO_PDF, 1, [Whether Cairo has PDF support])
+    fi
+  
+    PKG_CHECK_EXISTS(cairo-xlib >= $cairo_required, have_cairo_xlib=true, :)
+    if $have_cairo_xlib; then
+      AC_DEFINE(HAVE_CAIRO_XLIB, 1, [Whether Cairo has Xlib support])
+    fi
+  fi
+
+  LIBS=$pango_save_libs
+  LDFLAGS=$pango_save_ldflags
+fi
+
+AM_CONDITIONAL(HAVE_CAIRO, $have_cairo)
+AM_CONDITIONAL(HAVE_CAIRO_PNG, $have_cairo_png)
+AM_CONDITIONAL(HAVE_CAIRO_PS, $have_cairo_ps)
+AM_CONDITIONAL(HAVE_CAIRO_PDF, $have_cairo_pdf)
+AM_CONDITIONAL(HAVE_CAIRO_XLIB, $have_cairo_xlib)
+AM_CONDITIONAL(HAVE_CAIRO_WIN32, $have_cairo_win32)
+AM_CONDITIONAL(HAVE_CAIRO_FREETYPE, $have_cairo_freetype)
+AM_CONDITIONAL(HAVE_CAIRO_ATSUI, $have_cairo_atsui)
+
+#
+# We must have some backend defined, in order for the pango-querymodules
+# rule in pango/Makefile.am to work correctly. If you are up to writing
+# a new Pango backend outside of Pango, you are up to sending the necessary
+# patch to fix that rule. :-)
+#
+if $have_freetype || $have_x || $have_xft || $have_cairo || $have_win32 ; then : ; else
+  AC_MSG_ERROR([*** Could not enable any of FreeType, X11, Cairo, or Win32 backends.
+*** Must have at least one backend to build Pango.])
+fi
+
+#
+# Checks for GLib
+#
+GLIB_REQUIRED_VERSION=2.17.3
+GLIB_MODULES="glib-2.0 >= $GLIB_REQUIRED_VERSION gobject-2.0 gmodule-no-export-2.0"
+
+PKG_CHECK_MODULES(GLIB, $GLIB_MODULES, :,
+  AC_MSG_ERROR([
+*** Glib $GLIB_REQUIRED_VERSION or better is required. The latest version of 
+*** Glib is always available from ftp://ftp.gtk.org/.]))
+
+# Setup GLIB_MKENUMS to use glib-mkenums even if GLib is uninstalled.
+GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+AC_SUBST(GLIB_MKENUMS)
+
+
+# Add in gthread-2.0 to CFLAGS but not to LIBS so we get any
+# necesary defines for thread-safety.
+GLIB_CFLAGS=`$PKG_CONFIG --cflags $GLIB_MODULES gthread-2.0`
+
+# See if it's safe to turn G_DISABLE_DEPRECATED on.
+GLIB_VERSION_MAJOR_MINOR=`$PKG_CONFIG --modversion glib-2.0 | sed "s/\.@<:@^.@:>@*\$//"`
+GLIB_REQUIRED_VERSION_MAJOR_MINOR=`echo $GLIB_REQUIRED_VERSION | sed "s/\.@<:@^.@:>@*\$//"`
+if test "x$GLIB_VERSION_MAJOR_MINOR" = "x$GLIB_REQUIRED_VERSION_MAJOR_MINOR"; then
+  GLIB_CFLAGS="-DG_DISABLE_DEPRECATED $GLIB_CFLAGS"
+fi
+
+#
+# Checks for LibThai
+#
+have_libthai=false
+LIBTHAI_REQUIRED_VERSION=0.1.9
+PKG_CHECK_MODULES(LIBTHAI, libthai >= $LIBTHAI_REQUIRED_VERSION, have_libthai=true, AC_MSG_RESULT([no]))
+
+#
+# Checks for GObject Introspection
+#
+have_introspection=false
+PKG_CHECK_MODULES(INTROSPECTION, gobject-introspection-1.0 >= 0.6.4, have_introspection=true, have_introspection=false)
+AM_CONDITIONAL(HAVE_INTROSPECTION, $have_introspection)
+
+G_IR_SCANNER=
+G_IR_COMPILER=
+G_IR_GENERATE=
+GIRDIR=
+TYPELIBDIR=
+if $have_introspection; then
+   G_IR_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+   G_IR_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+   G_IR_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+   GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+   TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+fi
+AC_SUBST(G_IR_SCANNER)
+AC_SUBST(G_IR_COMPILER)
+AC_SUBST(G_IR_GENERATE)
+AC_SUBST(GIRDIR)
+AC_SUBST(TYPELIBDIR)
+
+#
+# Modules to build
+#
+arabic_modules="arabic-fc,arabic-lang"
+basic_modules="basic-fc,basic-win32,basic-x,basic-atsui"
+hangul_modules="hangul-fc"
+hebrew_modules="hebrew-fc"
+indic_modules="indic-fc,indic-lang"
+khmer_modules="khmer-fc"
+syriac_modules="syriac-fc"
+thai_modules="thai-fc"
+tibetan_modules="tibetan-fc"
+
+if $have_libthai ; then
+  thai_modules="$thai_modules,thai-lang"
+fi
+
+all_modules="$arabic_modules,$basic_modules,$hangul_modules,$hebrew_modules,$indic_modules,$khmer_modules,$syriac_modules,$thai_modules,$tibetan_modules"
+
+#
+# Allow building some or all modules included
+#
+AC_MSG_CHECKING(modules to link statically)
+
+AC_ARG_WITH(included_modules,
+   AC_HELP_STRING([--with-included-modules=no/yes/MODULE1 MODULE2 ...],
+                  [build the given modules included @<:@default=no@:>@]))
+
+included_modules=""
+case x$with_included_modules in
+       xyes)   included_modules=$all_modules ;;
+       xno|x)  included_modules="" ;;
+       *)      included_modules=$with_included_modules ;;
+esac
+AC_MSG_RESULT($included_modules)
+AM_CONDITIONAL(HAVE_INCLUDED_MODULES, test "x$included_modules" != x)
+
+#
+# Allow building only some or none of modules dynamic
+#
+AC_MSG_CHECKING(dynamic modules to build)
+
+AC_ARG_WITH(dynamic_modules,
+   AC_HELP_STRING([--with-dynamic-modules=no/yes/MODULE1 MODULE2 ...],
+                  [build the given dynamic modules @<:@default=yes@:>@]))
+
+dynamic_modules=""
+case x$with_dynamic_modules in
+       xyes|x) dynamic_modules=$all_modules ;;
+       xno)    dynamic_modules="" ;;
+       *)      dynamic_modules=$with_dynamic_modules ;;
+esac
+AC_MSG_RESULT([$dynamic_modules (those built into Pango will be excluded)])
+AM_CONDITIONAL(HAVE_DYNAMIC_MODULES, test "x$dynamic_modules" != x)
+
+
+INCLUDED_X_MODULES=
+INCLUDED_FC_MODULES=
+INCLUDED_WIN32_MODULES=
+INCLUDED_ATSUI_MODULES=
+INCLUDED_LANG_MODULES=
+
+AC_SUBST(INCLUDED_X_MODULES)
+AC_SUBST(INCLUDED_FC_MODULES)
+AC_SUBST(INCLUDED_WIN32_MODULES)
+AC_SUBST(INCLUDED_ATSUI_MODULES)
+AC_SUBST(INCLUDED_LANG_MODULES)
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=", "
+for module in $included_modules; do
+  case $indic_modules in
+    *$module*) dir=indic ;;
+    *)         dir=`echo $module | sed "s/-.*//"` ;;
+  esac
+  included_path="\$(top_builddir)/modules/$dir/libpango-$module.la"
+
+  case $module in
+    *-x)       INCLUDED_X_MODULES="$INCLUDED_X_MODULES $included_path" ;;
+    *-fc)      INCLUDED_FC_MODULES="$INCLUDED_FC_MODULES $included_path" ;;
+    *-win32)   INCLUDED_WIN32_MODULES="$INCLUDED_WIN32_MODULES $included_path" ;;
+    *-atsui)   INCLUDED_ATSUI_MODULES="$INCLUDED_ATSUI_MODULES $included_path" ;;
+    *-lang)    INCLUDED_LANG_MODULES="$INCLUDED_LANG_MODULES $included_path" ;;
+    *)         AC_MSG_ERROR([specified module $module not recognized]) ;;
+  esac
+done
+IFS="$pango_save_ifs"
+
+AM_CONDITIONAL(INCLUDE_ARABIC_FC,      echo $included_modules | egrep '(^|,)arabic-fc($|,)'    > /dev/null)
+AM_CONDITIONAL(INCLUDE_ARABIC_LANG,    echo $included_modules | egrep '(^|,)arabic-lang($|,)'  > /dev/null)
+AM_CONDITIONAL(INCLUDE_BASIC_FC,       echo $included_modules | egrep '(^|,)basic-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(INCLUDE_BASIC_WIN32,    echo $included_modules | egrep '(^|,)basic-win32($|,)'  > /dev/null)
+AM_CONDITIONAL(INCLUDE_BASIC_X,                echo $included_modules | egrep '(^|,)basic-x($|,)'      > /dev/null)
+AM_CONDITIONAL(INCLUDE_BASIC_ATSUI,    echo $included_modules | egrep '(^|,)basic-atsui($|,)'  > /dev/null)
+AM_CONDITIONAL(INCLUDE_HANGUL_FC,      echo $included_modules | egrep '(^|,)hangul-fc($|,)'    > /dev/null)
+AM_CONDITIONAL(INCLUDE_HEBREW_FC,      echo $included_modules | egrep '(^|,)hebrew-fc($|,)'    > /dev/null)
+AM_CONDITIONAL(INCLUDE_INDIC_FC,       echo $included_modules | egrep '(^|,)indic-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(INCLUDE_INDIC_LANG,     echo $included_modules | egrep '(^|,)indic-lang($|,)'   > /dev/null)
+AM_CONDITIONAL(INCLUDE_KHMER_FC,       echo $included_modules | egrep '(^|,)khmer-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(INCLUDE_SYRIAC_FC,      echo $included_modules | egrep '(^|,)syriac-fc($|,)'    > /dev/null)
+AM_CONDITIONAL(INCLUDE_THAI_FC,                echo $included_modules | egrep '(^|,)thai-fc($|,)'      > /dev/null)
+AM_CONDITIONAL(INCLUDE_THAI_LANG,      echo $included_modules | egrep '(^|,)thai-lang($|,)'    > /dev/null)
+AM_CONDITIONAL(INCLUDE_TIBETAN_FC,     echo $included_modules | egrep '(^|,)tibetan-fc($|,)'   > /dev/null)
+
+AM_CONDITIONAL(DYNAMIC_ARABIC_FC,      echo $dynamic_modules | egrep '(^|,)arabic-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(DYNAMIC_ARABIC_LANG,    echo $dynamic_modules | egrep '(^|,)arabic-lang($|,)'   > /dev/null)
+AM_CONDITIONAL(DYNAMIC_BASIC_FC,       echo $dynamic_modules | egrep '(^|,)basic-fc($|,)'      > /dev/null)
+AM_CONDITIONAL(DYNAMIC_BASIC_WIN32,    echo $dynamic_modules | egrep '(^|,)basic-win32($|,)'   > /dev/null)
+AM_CONDITIONAL(DYNAMIC_BASIC_X,                echo $dynamic_modules | egrep '(^|,)basic-x($|,)'       > /dev/null)
+AM_CONDITIONAL(DYNAMIC_BASIC_ATSUI,    echo $dynamic_modules | egrep '(^|,)basic-atsui($|,)'   > /dev/null)
+AM_CONDITIONAL(DYNAMIC_HANGUL_FC,      echo $dynamic_modules | egrep '(^|,)hangul-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(DYNAMIC_HEBREW_FC,      echo $dynamic_modules | egrep '(^|,)hebrew-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(DYNAMIC_INDIC_FC,       echo $dynamic_modules | egrep '(^|,)indic-fc($|,)'      > /dev/null)
+AM_CONDITIONAL(DYNAMIC_INDIC_LANG,     echo $dynamic_modules | egrep '(^|,)indic-lang($|,)'    > /dev/null)
+AM_CONDITIONAL(DYNAMIC_KHMER_FC,       echo $dynamic_modules | egrep '(^|,)khmer-fc($|,)'      > /dev/null)
+AM_CONDITIONAL(DYNAMIC_SYRIAC_FC,      echo $dynamic_modules | egrep '(^|,)syriac-fc($|,)'     > /dev/null)
+AM_CONDITIONAL(DYNAMIC_THAI_FC,                echo $dynamic_modules | egrep '(^|,)thai-fc($|,)'       > /dev/null)
+AM_CONDITIONAL(DYNAMIC_THAI_LANG,      echo $dynamic_modules | egrep '(^|,)thai-lang($|,)'     > /dev/null)
+AM_CONDITIONAL(DYNAMIC_TIBETAN_FC,     echo $dynamic_modules | egrep '(^|,)tibetan-fc($|,)'    > /dev/null)
+
+#
+# We use flockfile to implement pango_getline() - should be moved to GLib
+# strtok_r isn't present on some systems
+#
+AC_CHECK_FUNCS(flockfile strtok_r)
+
+dnl **************************
+dnl *** Checks for gtk-doc ***
+dnl **************************
+
+if $have_cairo ; then : ; else
+   if  test x$enable_gtk_doc = xyes ; then
+      AC_MSG_WARN([Cairo not present, disabling doc building])      
+      enable_gtk_doc=no
+   fi
+fi
+
+GTK_DOC_CHECK([1.0])
+
+AC_ARG_ENABLE(man,
+              AC_HELP_STRING([--enable-man],
+                             [regenerate man pages from Docbook @<:@default=no@:>@]),
+             enable_man=yes,
+              enable_man=no)
+
+if test "x$enable_man" != xno ; then
+  dnl
+  dnl Check for xsltproc
+  dnl
+  AC_PATH_PROG([XSLTPROC], [xsltproc])
+  if test -z "$XSLTPROC"; then
+    enable_man=no
+  fi
+fi
+
+if test "x$enable_man" != xno ; then
+  dnl check for DocBook DTD and stylesheets in the local catalog.
+  JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
+     [DocBook XML DTD V4.1.2],,enable_man=no)
+  JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+     [DocBook XSL Stylesheets],,enable_man=no)
+fi
+
+AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)
+
+AC_ARG_ENABLE(doc-cross-references,
+              AC_HELP_STRING([--disable-doc-cross-references],
+                             [cross reference glib and cairo symbols @<:@default=yes@:>@]),
+             enable_doc_cross_references=$enableval,
+             enable_doc_cross_references=yes)
+
+if test "x$enable_doc_cross_references" != xno ; then
+       GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+       CAIRO_PREFIX="`pkg-config --variable=prefix cairo`"
+       AC_SUBST(GLIB_PREFIX)
+       AC_SUBST(CAIRO_PREFIX)
+fi
+AM_CONDITIONAL(ENABLE_DOC_CROSS_REFERENCES, test x$enable_doc_cross_references != xno)
+
+dnl ********************************************************
+dnl * Options to pass to libtool
+dnl ********************************************************
+
+# Note that -module isn't included here since automake needs to see it to know
+# that something like pango-arabic-fc.la is a valid libtool archive
+#
+LIBRARY_LIBTOOL_OPTIONS="-version-info $VERSION_INFO"
+MODULE_LIBTOOL_OPTIONS="-export-dynamic -avoid-version"
+if test "$pango_platform_win32" = yes; then
+    # We currently use .def files on Windows
+    true
+    LIBRARY_LIBTOOL_OPTIONS="$LIBRARY_LIBTOOL_OPTIONS -no-undefined"
+    MODULE_LIBTOOL_OPTIONS="$MODULE_LIBTOOL_OPTIONS -no-undefined"
+else
+    # libtool option to control which symbols are exported
+    # right now, symbols starting with '_' are not exported
+    LIBRARY_LIBTOOL_OPTIONS="$LIBRARY_LIBTOOL_OPTIONS "'-export-symbols-regex "^pango_.*"'
+    MODULE_LIBTOOL_OPTIONS="$MODULE_LIBTOOL_OPTIONS "'-export-symbols-regex "^script_engine_.*"'
+fi
+AC_SUBST(LIBRARY_LIBTOOL_OPTIONS)
+AC_SUBST(MODULE_LIBTOOL_OPTIONS)
+
+dnl ********************************************************
+dnl * See whether we need to load our modules as .la files *
+dnl ********************************************************
+
+use_la_modules=false
+
+# is there any platform that we have to use .la files?
+
+if $use_la_modules ; then
+   AC_DEFINE(USE_LA_MODULES, 1, [Whether to load modules via .la files rather than directly])
+fi
+
+dnl ******************************************************
+dnl * See whether to include shared library dependencies *
+dnl ******************************************************
+
+AC_ARG_ENABLE(explicit-deps, 
+              AC_HELP_STRING([--enable-explicit-deps=@<:@no/auto/yes@:>@],
+                             [use explicit dependencies in .pc files @<:@default=auto@:>@]),
+              enable_explicit_deps="$enableval", 
+              enable_explicit_deps=auto)
+
+AC_MSG_CHECKING([Whether to write dependencies into .pc files])
+case $enable_explicit_deps in
+  auto)
+    export SED
+    deplibs_check_method=`(./libtool --config; echo 'eval echo \"$deplibs_check_method\"') | sh`
+    if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then
+      enable_explicit_deps=yes  
+    else
+      enable_explicit_deps=no  
+    fi
+  ;;
+  yes|no) 
+  ;;
+  *) AC_MSG_ERROR([Value given to --enable-explicit-deps must be one of yes, no or auto])
+  ;;
+esac
+AC_MSG_RESULT($enable_explicit_deps)
+
+PKGCONFIG_MATH_LIBS=
+PKGCONFIG_CAIRO_REQUIRES=
+
+if test $enable_explicit_deps = yes ; then
+  PKGCONFIG_MATH_LIBS=-lm
+
+  X_LIBS="$X_LIBS $X_EXTRA_LIBS"
+
+  if $have_cairo_freetype;  then
+    PKGCONFIG_CAIRO_REQUIRES="$PKGCONFIG_CAIRO_REQUIRES pangoft2"
+  fi
+  if $have_cairo_win32;  then
+    PKGCONFIG_CAIRO_REQUIRES="$PKGCONFIG_CAIRO_REQUIRES pangowin32"
+  fi
+fi
+
+AC_SUBST(PKGCONFIG_MATH_LIBS)
+AC_SUBST(PKGCONFIG_CAIRO_REQUIRES)
+AM_CONDITIONAL(DISABLE_EXPLICIT_DEPS, test $enable_explicit_deps = no)
+
+AC_CONFIG_COMMANDS([pango/module-defs.h],
+[
+cat > pango/module-defs.h <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "modules.h"
+
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  module_c=`echo $module | sed s/-/_/`
+  cat >> pango/module-defs.h <<EOTEXT
+extern void         _pango_${module_c}_script_engine_list (PangoEngineInfo **engines, int *n_engines);
+extern PangoEngine *_pango_${module_c}_script_engine_init (GTypeModule *module);
+extern void         _pango_${module_c}_script_engine_exit (void);
+extern void         _pango_${module_c}_script_engine_create (const char *id);
+
+EOTEXT
+done 
+
+IFS="$pango_save_ifs"
+],[
+included_modules=$included_modules
+])
+
+AC_CONFIG_COMMANDS([pango/module-defs-x.c],
+[
+### X modules
+cat > pango/module-defs-x.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_x_modules@<:@@:>@ = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-x($|,)" > /dev/null; then  
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-x.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+ fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-x.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+])
+
+AC_CONFIG_COMMANDS([pango/module-defs-fc.c],
+[
+### FC modules
+cat > pango/module-defs-fc.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_fc_modules@<:@@:>@ = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-fc($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-fc.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-fc.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+])
+
+AC_CONFIG_COMMANDS([pango/module-defs-win32.c],
+[
+### Win32 modules
+cat > pango/module-defs-win32.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_win32_modules@<:@@:>@ = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-win32($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-win32.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-win32.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+])
+
+AC_CONFIG_COMMANDS([pango/module-defs-atsui.c],
+[
+### ATSUI modules
+cat > pango/module-defs-atsui.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_atsui_modules@<:@@:>@ = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-atsui($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-atsui.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-atsui.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+])
+
+AC_CONFIG_COMMANDS([pango/module-defs-lang.c],
+[
+### lang modules
+cat > pango/module-defs-lang.c <<EOTEXT
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_lang_modules@<:@@:>@ = {
+EOTEXT
+
+IFS="${IFS=    }"; pango_save_ifs="$IFS"; IFS=","
+for module in $included_modules; do
+  if echo $module | egrep -- "-lang($|,)" > /dev/null; then
+    module_c=`echo $module | sed s/-/_/`
+    cat >> pango/module-defs-lang.c <<EOTEXT
+ { _pango_${module_c}_script_engine_list, _pango_${module_c}_script_engine_init, _pango_${module_c}_script_engine_exit, _pango_${module_c}_script_engine_create },
+EOTEXT
+  fi
+done
+
+IFS="$pango_save_ifs"
+
+cat >> pango/module-defs-lang.c <<EOTEXT
+ { NULL, NULL, NULL, NULL },
+};
+EOTEXT
+])
+
+
+AC_HEADER_DIRENT
+AC_CHECK_HEADERS(unistd.h)
+
+# Honor aclocal flags
+ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
+dnl ===========================================================================
+AC_CONFIG_COMMANDS([pango/pango-features.h],
+          [featuresfile=pango/pango-features.h
+           outfile=$featuresfile.tmp
+           AC_MSG_NOTICE([creating $featuresfile])
+           cat >$outfile <<_EOF
+/* Generated by configure. Do not edit */
+#ifndef PANGO_FEATURES_H
+#define PANGO_FEATURES_H
+
+#define PANGO_VERSION_MAJOR $PANGO_VERSION_MAJOR
+#define PANGO_VERSION_MINOR $PANGO_VERSION_MINOR
+#define PANGO_VERSION_MICRO $PANGO_VERSION_MICRO
+
+#define PANGO_VERSION_STRING "$PANGO_VERSION_MAJOR.$PANGO_VERSION_MINOR.$PANGO_VERSION_MICRO"
+
+_EOF
+       # TODO: define macros for enabled features/backends here
+
+        echo '' >>$outfile
+        echo '#endif' >>$outfile
+
+        if cmp -s $outfile $featuresfile; then
+          AC_MSG_NOTICE([$featuresfile is unchanged])
+          rm -f $outfile
+        else
+          mv $outfile $featuresfile
+        fi
+],[
+        PANGO_VERSION_MAJOR=$PANGO_VERSION_MAJOR
+        PANGO_VERSION_MINOR=$PANGO_VERSION_MINOR
+        PANGO_VERSION_MICRO=$PANGO_VERSION_MICRO
+])
+
+AC_CONFIG_FILES([
+Makefile 
+pango/Makefile
+pango/mini-fribidi/Makefile
+pango/opentype/Makefile
+pango/pango.rc
+pango/pangoft2.rc
+pango/pangowin32.rc
+pango/pangox.rc
+pango/pangoxft.rc
+pango-view/Makefile
+modules/Makefile
+modules/arabic/Makefile
+modules/basic/Makefile
+modules/hangul/Makefile
+modules/hebrew/Makefile
+modules/indic/Makefile
+modules/khmer/Makefile
+modules/syriac/Makefile
+modules/thai/Makefile
+modules/tibetan/Makefile
+examples/Makefile
+docs/Makefile
+docs/version.xml
+tools/Makefile
+tests/Makefile
+pango.pc
+pangox.pc
+pangowin32.pc
+pangoft2.pc
+pangoxft.pc
+pangocairo.pc
+pango-uninstalled.pc
+pangox-uninstalled.pc
+pangowin32-uninstalled.pc
+pangoft2-uninstalled.pc
+pangoxft-uninstalled.pc
+pangocairo-uninstalled.pc
+pango-zip.sh
+])
+
+AC_CONFIG_FILES([tests/runtests.sh],
+               [chmod +x tests/runtests.sh])
+
+AC_OUTPUT
+
+backends=""
+if $have_cairo ; then backends="$backends Cairo"; fi
+if $have_win32 ; then backends="$backends Win32"; fi
+if $have_xft ; then backends="$backends Xft"; fi
+if $have_freetype && $have_fontconfig ; then backends="$backends FreeType"; fi
+if $have_x ; then backends="$backends X"; fi
+   
+echo "configuration:
+       backends:$backends"
diff --git a/debian/README.Defoma b/debian/README.Defoma
new file mode 100755 (executable)
index 0000000..f819c88
--- /dev/null
@@ -0,0 +1,17 @@
+Pango for Defoma
+-----------------
+
+Right now /etc/pango/pangox.aliases should be generated by defoma script.
+All of the fonts which are supported by defoma will also work for Pango.
+Unfortunately, as of now most font packages don't support defoma;
+so we need to help them along (of course I wish all of font packages would
+support defoma :)
+
+If you can't found any fonts which you need in pangox.aliases file, please
+let me know; but note that I maybe won't be supporting those fonts which are
+not found in debian packages.
+
+However you can modify /etc/defoma/config/pango.conf. That list will be
+appended to the pangox.aliases file.
+
+ -- Akira TAGOH <tagoh@debian.org>, Fri, 27 Sep 2002 09:39:30 +0900
diff --git a/debian/changelog b/debian/changelog
new file mode 100755 (executable)
index 0000000..ff1176e
--- /dev/null
@@ -0,0 +1,7 @@
+pango1.0 (1.26.1-9slp4) unstable; urgency=low
+
+  * Initial version 
+  * Git: unmodified/pango1.0
+  * Tag: pango1.0_1.26.1-9slp4
+
+ -- Deokjin Kim <deokjin81.kim@samsung.com>  Thu, 08 Dec 2011 13:39:28 +0900
diff --git a/debian/compat b/debian/compat
new file mode 100755 (executable)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755 (executable)
index 0000000..43ca183
--- /dev/null
@@ -0,0 +1,142 @@
+Source: pango1.0
+Section: libs
+Priority: optional
+Maintainer: Sanghyun Park <sh.ad.park@samsung.com>, Wonsik Jung <sidein@samsung.com>, Boram Park <boram1288.park@samsung.com>, Deokjin Kim <deokjin81.kim@samsung.com>
+Uploaders: 
+Build-Depends: debhelper (>= 5.0.22),
+               libfreetype6-dev (>= 2.1.7),
+               libx11-dev (>= 2:1.0.0),
+               libxrender-dev (>= 1:0.9.0.2-2),
+               libxt-dev,
+               libglib2.0-dev (>= 2.17.3),
+               pkg-config,
+               defoma (>= 0.11.1),
+               libxft-dev (>= 2.0.0),
+               libfontconfig1-dev (>= 2.5.0),
+               autotools-dev,
+               po-debconf,
+               gnome-pkg-tools (>= 0.11),
+               libcairo2-dev (>= 1.8.2-2),
+               perl,
+               quilt
+Standards-Version: 3.8.3
+
+Package: libpango1.0
+Architecture: any
+Depends: libpango1.0-common (>= ${source:Version}),
+         ${misc:Depends},
+         ${shlibs:Depends}
+Conflicts: pango-libthai
+Description: Layout and rendering of internationalized text
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the shared libraries.
+
+Package: libpango1.0-common
+Section: misc
+Architecture: all
+Depends: ${misc:Depends},
+         defoma (>= 0.11.1),
+         fontconfig (>= 2.1.91)
+Recommends: x-ttcidfont-conf, libpango1.0
+Suggests: ttf-japanese-gothic,
+          ttf-japanese-mincho,
+          ttf-thryomanes,
+          ttf-baekmuk,
+          ttf-arphic-gbsn00lp,
+          ttf-arphic-bsmi00lp,
+          ttf-arphic-gkai00mp,
+          ttf-arphic-bkai00mp
+Replaces: libpango0,
+          libpango-common (<< 1.0.0)
+Conflicts: pango-libthai (<< 0.1.6-2)
+Description: Modules and configuration files for the Pango
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the Pango modules and the configuration files
+ which Pango needs.
+
+Package: libpango1.0-dev
+Section: libdevel
+Architecture: any
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         libpango1.0 (= ${binary:Version}),
+         libglib2.0-dev (>= 2.12.0),
+         libfreetype6-dev (>= 2.1.3),
+         libx11-dev,
+         libxrender-dev,
+         pkg-config,
+         libxft-dev,
+         libfontconfig1-dev (>= 2.1.91),
+         libcairo2-dev (>= 1.8.2-2)
+Suggests: imagemagick
+Recommends: debhelper
+Replaces: libpango-dev,
+          libpango1.0-common (<< 1.14.5-1)
+Conflicts: libpango-dev,
+           libpango1.0-common (<< 1.14.5-1)
+Description: Development files for the Pango
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the header files and some files needed for development
+ with Pango.
+
+Package: libpango1.0-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Depends: ${misc:Depends},
+         libpango1.0 (= ${binary:Version})
+Conflicts: libpango1.0-dbg
+Replaces: libpango1.0-dbg
+Description: The Pango library and debugging symbols
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the debugging symbols. Most people will not need this
+ package.
+
diff --git a/debian/control.in b/debian/control.in
new file mode 100755 (executable)
index 0000000..65fe8ea
--- /dev/null
@@ -0,0 +1,140 @@
+Source: pango1.0
+Section: libs
+Priority: optional
+Maintainer: Sanghyun Park <sh.ad.park@samsung.com>, Wonsik Jung <sidein@samsung.com>, Boram Park <boram1288.park@samsung.com>, Deokjin Kim <deokjin81.kim@samsung.com>
+Uploaders: @GNOME_TEAM@
+Build-Depends: debhelper (>= 5.0.22),
+               libfreetype6-dev (>= 2.1.7),
+               libx11-dev (>= 2:1.0.0),
+               libxrender-dev (>= 1:0.9.0.2-2),
+               libxt-dev,
+               libglib2.0-dev (>= 2.17.3),
+               pkg-config,
+               libxft-dev (>= 2.0.0),
+               libfontconfig1-dev (>= 2.5.0),
+               autotools-dev,
+               po-debconf,
+               gnome-pkg-tools (>= 0.11),
+               libcairo2-dev (>= 1.8.2-2),
+               perl,
+               quilt
+Standards-Version: 3.8.3
+
+Package: libpango1.0
+Architecture: any
+Depends: libpango1.0-common (>= ${source:Version}),
+         ${misc:Depends},
+         ${shlibs:Depends}
+Conflicts: pango-libthai
+Description: Layout and rendering of internationalized text
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the shared libraries.
+
+Package: libpango1.0-common
+Section: misc
+Architecture: all
+Depends: ${misc:Depends},
+         fontconfig (>= 2.1.91)
+Recommends: x-ttcidfont-conf, libpango1.0
+Suggests: ttf-japanese-gothic,
+          ttf-japanese-mincho,
+          ttf-thryomanes,
+          ttf-baekmuk,
+          ttf-arphic-gbsn00lp,
+          ttf-arphic-bsmi00lp,
+          ttf-arphic-gkai00mp,
+          ttf-arphic-bkai00mp
+Replaces: libpango0,
+          libpango-common (<< 1.0.0)
+Conflicts: pango-libthai (<< 0.1.6-2)
+Description: Modules and configuration files for the Pango
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the Pango modules and the configuration files
+ which Pango needs.
+
+Package: libpango1.0-dev
+Section: libdevel
+Architecture: any
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         libpango1.0 (= ${binary:Version}),
+         libglib2.0-dev (>= 2.12.0),
+         libfreetype6-dev (>= 2.1.3),
+         libx11-dev,
+         libxrender-dev,
+         pkg-config,
+         libxft-dev,
+         libfontconfig1-dev (>= 2.1.91),
+         libcairo2-dev (>= 1.8.2-2)
+Suggests: imagemagick
+Recommends: debhelper
+Replaces: libpango-dev,
+          libpango1.0-common (<< 1.14.5-1)
+Conflicts: libpango-dev,
+           libpango1.0-common (<< 1.14.5-1)
+Description: Development files for the Pango
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the header files and some files needed for development
+ with Pango.
+
+Package: libpango1.0-dbg
+Section: debug
+Priority: extra
+Architecture: any
+Depends: ${misc:Depends},
+         libpango1.0 (= ${binary:Version})
+Conflicts: libpango1.0-dbg
+Replaces: libpango1.0-dbg
+Description: The Pango library and debugging symbols
+ Pango is a library for layout and rendering of text, with an emphasis
+ on internationalization. Pango can be used anywhere that text layout is
+ needed. however, most of the work on Pango-1.0 was done using the GTK+
+ widget toolkit as a test platform. Pango forms the core of text and
+ font handling for GTK+-2.0.
+ .
+ Pango is designed to be modular; the core Pango layout can be used with
+ four different font backends:
+  - Core X windowing system fonts
+  - Client-side fonts on X using the Xft library
+  - Direct rendering of scalable fonts using the FreeType library
+  - Native fonts on Microsoft backends
+ .
+ This package contains the debugging symbols. Most people will not need this
+ package.
+
diff --git a/debian/copyright b/debian/copyright
new file mode 100755 (executable)
index 0000000..bbe313e
--- /dev/null
@@ -0,0 +1,60 @@
+This package was debianized by Akira TAGOH <tagoh@debian.org> on
+Sun, 10 Mar 2002 22:30:33 +0900.
+
+It was downloaded from:
+    <http://ftp.gnome.org/pub/GNOME/sources/pango/>
+
+Upstream Authors:
+ Owen Taylor <otaylor@redhat.com>
+
+ Robert Brady (Indic shapers), Hans Breuer (Windows backend), Matthias
+ Clasen (Documentation), Sivaraj Doddannan (Tamil shaper), Dov Grobgeld
+ (Hebrew shaper), Karl Koehler (Arabic shaper), Alex Larsson (FreeType
+ and Windows backends), Tor Lillqvist (FreeType and Windows backends),
+ Changwoo Ryu (Hangul shaper), Havoc Pennington, Roozbeh Pournader
+ (Arabic shaper), Chookij Vanatham (Hebrew shaper).
+
+Copyright:
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Library General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this package; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+ See /usr/share/common-licenses/LGPL-2 on your debian system.
+
+ Pango includes HarfBuzz, an OpenType Layout engine library, below
+ pango/opentype:
+  Copyright (C) 1998-2004  David Turner and Werner Lemberg
+  Copyright (C) 2004,2007  Red Hat, Inc.
+
+  This is part of HarfBuzz, an OpenType Layout engine library.
+
+  Permission is hereby granted, without written agreement and without
+  license or royalty fees, to use, copy, modify, and distribute this
+  software and its documentation for any purpose, provided that the
+  above copyright notice and the following two paragraphs appear in
+  all copies of this software.
+
+  IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+  DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+  ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+  IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+  DAMAGE.
+
+  THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+  BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+  FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+  ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+  PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+  Red Hat Author(s): Owen Taylor, Behdad Esfahbod
+
diff --git a/debian/defoma/pango.conf b/debian/defoma/pango.conf
new file mode 100755 (executable)
index 0000000..c8d7a97
--- /dev/null
@@ -0,0 +1,35 @@
+## Defoma configuration file for Pango
+
+## @UNSUPPORTED_XLFD are the lists of XLFD which is not supported by defoma.
+## this value will avoid when supported XLFD may be not enough.
+##
+## family(case sensitive)-style-variant-weight-stretch => XLFDs
+%UNSUPPORTED_XLFD = (
+  "sans-normal-normal-normal-normal" =>
+    "-*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*",
+  "sans-italic-normal-normal-normal" =>
+    "-*-helvetica-medium-o-normal--*-*-*-*-*-*-*-*",
+  "sans-normal-normal-bold-normal" =>
+    "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*",
+  "sans-italic-normal-bold-normal" =>
+    "-*-helvetica-bold-o-normal--*-*-*-*-*-*-*-*",
+  "serif-normal-normal-normal-normal" =>
+    "-*-times-medium-r-normal--*-*-*-*-*-*-*-*",
+  "serif-italic-normal-normal-normal" =>
+    "-*-times-medium-i-normal--*-*-*-*-*-*-*-*",
+  "serif-normal-normal-bold-normal" =>
+    "-*-times-bold-r-normal--*-*-*-*-*-*-*-*",
+  "serif-italic-normal-bold-normal" =>
+    "-*-times-bold-i-normal--*-*-*-*-*-*-*-*",
+#  "monospace-normal-normal-normal-normal" =>
+#    "",
+#  "monospace-italic-normal-normal-normal" =>
+#    "",
+#  "monospace-normal-normal-bold-normal" =>
+#    "",
+#  "monospace-italic-normal-bold-normal" =>
+#    "",
+);
+
+## require this. do not delete.
+1;
diff --git a/debian/dh_pangomodules.in b/debian/dh_pangomodules.in
new file mode 100755 (executable)
index 0000000..cb60f50
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+dh_pangomodules - create a Pango Module file for all Pango modules
+
+=cut
+
+use strict;
+use Debian::Debhelper::Dh_Lib;
+use Cwd;
+
+=head1 SYNOPSIS
+
+B<dh_pangomodules> [S<I<debhelper options>>] [S<I<directory or module>> ...]
+
+=head1 DESCRIPTION
+
+B<dh_pangomodules> is a debhelper program that handles correctly
+generating Pango Module files with modules that it finds in the
+Pango Modules Path, in directories you pass on the command line,
+and on the command line.
+
+This command scans the specified packages for Pango modules thanks to
+pango-querymodules.  When any module is found, the generated
+<package>.modules file is installed into the corresponding package and a
+dependency on the Module API version of pango is added to
+${misc:Depends}.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-k>
+
+Do not generate any dependencies in ${misc:Depends}.
+
+=cut
+
+init();
+
+# 'abs_path' from Cwd resolves symlinks, and we don't want that to happen
+# (otherwise it's harder to remove the prefix of the generated output)
+sub make_absolute_path {
+    my $path = shift;
+    if ($path =~ m#^/#) {
+        return $path;
+    }
+    my $cwd = getcwd;
+    return "$cwd/$path";
+}
+
+# pango-querymodules helper (generates a Pango Module File on its stdout with
+# *.so passed on its command-line)
+my $querymodules;
+if ($ENV{PANGO_QUERYMODULES}) {
+    $querymodules = $ENV{PANGO_QUERYMODULES};
+} else {
+    $querymodules = '/usr/bin/pango-querymodules';
+}
+
+# relative Pango Modules Path (separated by ":")
+my $modules_path = '@MODULES_PATH@';
+
+# relative directory to store the generated Pango Module File
+my $module_files_d = '@MODULE_FILES_D@';
+
+# Pango Module API version virtual Provide
+my $pango_modver_dep = '@PANGO_MODVER_DEP@';
+
+foreach my $package (@{$dh{DOPACKAGES}}) {
+    my $tmp = tmpdir($package);
+    my @modules = ();
+
+    # locations to search for modules
+    my @module_search_locations;
+
+    # split the path
+    foreach my $dir (split(/:/, $modules_path)) {
+        push @module_search_locations, "$tmp/$dir"
+    }
+
+    # append the remaining command line arguments (either modules or
+    # directories to scan for *.so modules)
+    push @module_search_locations, @ARGV if @ARGV;
+
+    foreach (@module_search_locations) {
+        # it's necessary to make the path absolute to strip the build-time
+        # prefix later on
+        my $path = make_absolute_path($_);
+        if (! -e $path) {
+            verbose_print("skipping $path.");
+            next;
+        }
+        if (-d $path) {
+            # if path is a directory (or symlink to a directory), search for
+            # *.so files or symlinks
+            open(FIND,
+              "find '$path' -name '*.so' \\( -type f -or -type l \\) |")
+              or die "Can't run find: $!";
+            while (<FIND>) {
+                chomp;
+                push @modules, $_;
+            }
+            close FIND;
+        } elsif (-f $path or -l $path) {
+            # if path is a file or symlink, simply add it to the list
+            push @modules, $path;
+        } else {
+            error("$path has unknown file type.");
+        }
+    }
+
+    if (0 == @modules) {
+        warning("couldn't find any Pango Modules for package $package.");
+        next;
+    }
+
+    # since there's at least one module, generate a dependency on the
+    # Pango binary version
+    if (! $dh{K_FLAG}) {
+        addsubstvar($package, "misc:Depends", $pango_modver_dep);
+    }
+
+    my $do_query = join ' ', $querymodules, @modules;
+    open(QUERY, "$do_query |")
+        or die "Can't query modules: $!";
+
+    my $module_file = "$tmp/$module_files_d/$package.modules";
+    doit("rm", "-f", "$module_file");
+    if (! -d "$tmp/$module_files_d") {
+        doit("install", "-d", "$tmp/$module_files_d");
+    }
+    complex_doit("printf '%s\\n' '# automatically generated by dh_pangomodules, do not edit' >>$module_file");
+
+    my $absolute_tmp = make_absolute_path($tmp);
+    while (<QUERY>) {
+        next if m/^#/;
+        chomp;
+        next if /^$/;
+        # strip build-time prefix from output
+        if (m#^\Q$absolute_tmp/\E#) {
+            s#^\Q$absolute_tmp/\E#/#;
+            complex_doit("printf '%s\\n' '$_' >>$module_file");
+            next;
+        }
+        error("can't strip $absolute_tmp from output.");
+    }
+
+    doit("chmod", 644, "$module_file");
+    doit("chown", "0:0", "$module_file");
+
+    close QUERY;
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<debhelper>
+
+This program relies on Debhelper, but is shipped with the Pango
+development files.
+
+=head1 AUTHOR
+
+Loic Minier <lool@dooz.org>
+
+=cut
diff --git a/debian/libpango1.0-common.README.Debian b/debian/libpango1.0-common.README.Debian
new file mode 100755 (executable)
index 0000000..601c3eb
--- /dev/null
@@ -0,0 +1,75 @@
+Pango for Debian
+----------------
+
+These packages provides the renderer as the follow:
+
+ - X Window System
+ - Xft2
+ - FreeType
+
+
+pangox.aliases file:
+I recommend strongly that /etc/pango/pangox.aliases is
+managed by defoma, because you can also write some font
+settings to ~/.pangox_aliases instead. this file will get
+preference over /etc/pango/pangox.aliases.  When you will
+see some broken characters or empty squares, please try to
+install suggested font packages. these packages supports
+defoma, so pangox.aliases will be automatically generated,
+when you install them.
+
+If you don't want to use defoma and you prefer to edit
+pangox.aliases manually, please run 'dpkg-reconfigure
+libpango1.0-common', and says 'No' for manage the file by
+yourself.
+
+
+Static-linked probram:
+Right now the static version of Pango1.0 includes all of
+modules. even if your program will links those static
+libraries, your program should have no problem.  However if
+you see any problem, which is related the static libraries,
+you may solve it - please try to make your program without
+-static gcc option. I mean:
+
+gcc -export-dynamic -o foo foo.c -Wl,-Bstatic
+ `pkg-config --cflags --libs pango` -Wl,-Bdynamic
+
+Pango uses dlopen(3) function in order to load some
+modules. Generally dynamic-linked programs/libraries has the
+Procedure Linkage Table(PLT), and the undefined symbols are
+resolved with it by the dynamic linker. however fully
+static-linked programs has no PLT. so the dynamic linker has
+no way to know what symbols they have. When the loadable
+modules links another shared libraries and that shared
+libraries has the same symbols with the static-linked
+program, the problem may be caused. It's an ELF spec, but
+not Pango bug.
+
+
+Default renderer:
+the default renderer has been changed to Xft2 since 1.2.0
+has been released. and your font configuration depends on a
+fontconfig configuration file /etc/fonts/fonts.conf.  If you
+want to change any of the fonts, you need to change
+/etc/fonts/fonts.conf.  If you want to use the X window
+system fonts, which is managed by pangox.aliases file,
+rather than the Xft2 renderer, you need to set GDK_USE_XFT=0
+as an environment variable.
+
+
+To work Pango for multilingualization:
+You may need to install appropriate font packages to get
+proper encodings for use with Pango.  If you don't have
+fonts installed that are compatible with the locales you
+want to use, you may get empty squares instead of correct
+glyphs.
+If you add font packages:
+- If you use Pango with GDK_USE_XFT=0, remember to modify
+pangox.aliases file. especially that font packages doesn't
+support the defoma mechanism.
+- Otherwise, remember to run fc-cache.
+
+
+ -- Akira TAGOH <tagoh@debian.org>  Sat,  6 Sep 2003 14:04:28 +0900
+
diff --git a/debian/libpango1.0-common.dirs b/debian/libpango1.0-common.dirs
new file mode 100755 (executable)
index 0000000..939c471
--- /dev/null
@@ -0,0 +1,2 @@
+etc/pango
+var/lib/defoma/pango.d
diff --git a/debian/libpango1.0-common.docs b/debian/libpango1.0-common.docs
new file mode 100755 (executable)
index 0000000..1fb5349
--- /dev/null
@@ -0,0 +1 @@
+debian/README.Defoma
diff --git a/debian/libpango1.0-common.install b/debian/libpango1.0-common.install
new file mode 100755 (executable)
index 0000000..d8f431e
--- /dev/null
@@ -0,0 +1,4 @@
+# from Debian
+#debian/defoma/pango.conf etc/defoma/config
+#debian/pango.defoma usr/share/defoma/scripts
+#debian/update-pangox-aliases usr/sbin
diff --git a/debian/libpango1.0-common.manpages b/debian/libpango1.0-common.manpages
new file mode 100755 (executable)
index 0000000..e163251
--- /dev/null
@@ -0,0 +1,2 @@
+debian/update-pangox-aliases.8
+debian/update-pangox-aliases.fr.8
diff --git a/debian/libpango1.0-common.postinst b/debian/libpango1.0-common.postinst
new file mode 100755 (executable)
index 0000000..aae2ab4
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+set -e
+
+# until version 1.14.5-1, we generated a /etc/pango/pango.modules
+if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "1.14.5-1"; then
+    echo "I: Purging /etc/pango/pango.modules" >&2
+    rm -f /etc/pango/pango.modules
+fi
+
+#if [ "$1" = "configure" ]; then
+#    update-pangox-aliases
+#    if test -f /etc/pango/pangox.aliases && ! test -h /etc/pango/pangox.aliases; then
+#        echo "I: Backuping /etc/pango/pangox.aliases as /etc/pango/pangox.aliases-old" >&2
+#        mv /etc/pango/pangox.aliases /etc/pango/pangox.aliases-old
+#    fi
+#    if ! test -e /etc/pango/pangox.aliases && test -f /var/lib/defoma/pango.d/pangox.aliases; then
+#        ln -sf /var/lib/defoma/pango.d/pangox.aliases /etc/pango/pangox.aliases
+#    fi
+#fi
+
+#DEBHELPER#
diff --git a/debian/libpango1.0-common.postrm b/debian/libpango1.0-common.postrm
new file mode 100755 (executable)
index 0000000..d87da11
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "purge" ]; then
+    rm -rf /etc/pango
+    rm -rf /var/lib/defoma/pango.d
+fi
+
+#DEBHELPER#
diff --git a/debian/libpango1.0-common.preinst.in b/debian/libpango1.0-common.preinst.in
new file mode 100755 (executable)
index 0000000..0f34f6d
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+
+if [ -L /usr/share/doc/libpango@APIVER@-common ]; then
+        rm -f /usr/share/doc/libpango@APIVER@-common
+fi
+
+#DEBHELPER#
diff --git a/debian/libpango1.0-common.prerm b/debian/libpango1.0-common.prerm
new file mode 100755 (executable)
index 0000000..36df2b9
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set -e
+
+#if [ "$1" = "remove" ]; then
+#    defoma-app purge pango
+#fi
+
+#if [ "$1" = "upgrade" ]; then
+#    defoma-app clean pango
+#fi
+
+#DEBHELPER#
diff --git a/debian/libpango1.0-dev.install.in b/debian/libpango1.0-dev.install.in
new file mode 100755 (executable)
index 0000000..c378f86
--- /dev/null
@@ -0,0 +1,12 @@
+# from Debian
+debian/dh_pangomodules usr/bin
+# from the shared flavor
+debian/install/shared/usr/bin/pango-querymodules usr/bin
+debian/install/shared/usr/bin/pango-view usr/bin
+debian/install/shared/usr/include usr
+debian/install/shared/@LIBDIR@/*.la @LIBDIR@
+debian/install/shared/@LIBDIR@/*.so @LIBDIR@
+debian/install/shared/@LIBDIR@/pkgconfig/*.pc @LIBDIR@/pkgconfig
+debian/install/shared/usr/share/man usr/share
+# from the static flavor
+debian/install/static/@LIBDIR@/*.a @LIBDIR@
diff --git a/debian/libpango1.0-dev.links.in b/debian/libpango1.0-dev.links.in
new file mode 100755 (executable)
index 0000000..a2276bd
--- /dev/null
@@ -0,0 +1 @@
+usr/share/doc/libpango@APIVER@ usr/share/doc/libpango@APIVER@-dev
diff --git a/debian/libpango1.0-dev.manpages b/debian/libpango1.0-dev.manpages
new file mode 100755 (executable)
index 0000000..ec33a02
--- /dev/null
@@ -0,0 +1 @@
+debian/dh_pangomodules.1
diff --git a/debian/libpango1.0.install.in b/debian/libpango1.0.install.in
new file mode 100755 (executable)
index 0000000..f6dffd1
--- /dev/null
@@ -0,0 +1,3 @@
+# from the shared flavor
+debian/install/shared/@LIBDIR@/*.so.* @LIBDIR@
+debian/install/shared/@MODULES_PATH@/*.so @MODULES_PATH@
diff --git a/debian/libpango1.0.install.opt b/debian/libpango1.0.install.opt
new file mode 100755 (executable)
index 0000000..72439d1
--- /dev/null
@@ -0,0 +1,2 @@
+# from the optimized flavor
+debian/install/opt/@LIBDIR@/*.so.* @OPTLIBDIR@
diff --git a/debian/libpango1.0.links.in b/debian/libpango1.0.links.in
new file mode 100755 (executable)
index 0000000..39b27e8
--- /dev/null
@@ -0,0 +1 @@
+usr/share/doc/libpango@APIVER@-common usr/share/doc/libpango@APIVER@
diff --git a/debian/libpango1.0.postinst.in b/debian/libpango1.0.postinst.in
new file mode 100755 (executable)
index 0000000..5cbb6e8
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+# Hey, I'm a snippet removing old cruft (Debian #430040); drop me after lenny!
+BOGUSDOCDIR=/usr/share/doc/libpango@APIVER@-doc/pango/pango
+if [ -L $BOGUSDOCDIR ]; then
+  rm -f $BOGUSDOCDIR
+fi
+
+#DEBHELPER#
diff --git a/debian/libpango1.0.symbols b/debian/libpango1.0.symbols
new file mode 100755 (executable)
index 0000000..6cd18b1
--- /dev/null
@@ -0,0 +1,579 @@
+libpango-1.0.so.0 libpango1.0 #MINVER#
+* Build-Depends-Package: libpango1.0-dev
+ pango_alignment_get_type@Base 1.14.0
+ pango_attr_background_new@Base 1.14.0
+ pango_attr_fallback_new@Base 1.14.0
+ pango_attr_family_new@Base 1.14.0
+ pango_attr_font_desc_new@Base 1.14.0
+ pango_attr_foreground_new@Base 1.14.0
+ pango_attr_gravity_hint_new@Base 1.18.0
+ pango_attr_gravity_new@Base 1.18.0
+ pango_attr_iterator_copy@Base 1.14.0
+ pango_attr_iterator_destroy@Base 1.14.0
+ pango_attr_iterator_get@Base 1.14.0
+ pango_attr_iterator_get_attrs@Base 1.14.0
+ pango_attr_iterator_get_font@Base 1.14.0
+ pango_attr_iterator_next@Base 1.14.0
+ pango_attr_iterator_range@Base 1.14.0
+ pango_attr_language_new@Base 1.14.0
+ pango_attr_letter_spacing_new@Base 1.14.0
+ pango_attr_list_change@Base 1.14.0
+ pango_attr_list_copy@Base 1.14.0
+ pango_attr_list_filter@Base 1.14.0
+ pango_attr_list_get_iterator@Base 1.14.0
+ pango_attr_list_get_type@Base 1.14.0
+ pango_attr_list_insert@Base 1.14.0
+ pango_attr_list_insert_before@Base 1.14.0
+ pango_attr_list_new@Base 1.14.0
+ pango_attr_list_ref@Base 1.14.0
+ pango_attr_list_splice@Base 1.14.0
+ pango_attr_list_unref@Base 1.14.0
+ pango_attr_rise_new@Base 1.14.0
+ pango_attr_scale_new@Base 1.14.0
+ pango_attr_shape_new@Base 1.14.0
+ pango_attr_shape_new_with_data@Base 1.14.0
+ pango_attr_size_new@Base 1.14.0
+ pango_attr_size_new_absolute@Base 1.14.0
+ pango_attr_stretch_new@Base 1.14.0
+ pango_attr_strikethrough_color_new@Base 1.14.0
+ pango_attr_strikethrough_new@Base 1.14.0
+ pango_attr_style_new@Base 1.14.0
+ pango_attr_type_get_name@Base 1.22.0
+ pango_attr_type_get_type@Base 1.14.0
+ pango_attr_type_register@Base 1.14.0
+ pango_attr_underline_color_new@Base 1.14.0
+ pango_attr_underline_new@Base 1.14.0
+ pango_attr_variant_new@Base 1.14.0
+ pango_attr_weight_new@Base 1.14.0
+ pango_attribute_copy@Base 1.14.0
+ pango_attribute_destroy@Base 1.14.0
+ pango_attribute_equal@Base 1.14.0
+ pango_attribute_init@Base 1.20.0
+ pango_bidi_type_for_unichar@Base 1.22.0
+ pango_bidi_type_get_type@Base 1.22.0
+ pango_break@Base 1.14.0
+ pango_color_copy@Base 1.14.0
+ pango_color_free@Base 1.14.0
+ pango_color_get_type@Base 1.14.0
+ pango_color_parse@Base 1.14.0
+ pango_color_to_string@Base 1.18.0
+ pango_config_key_get@Base 1.14.0
+ pango_context_get_base_dir@Base 1.14.0
+ pango_context_get_base_gravity@Base 1.18.0
+ pango_context_get_font_description@Base 1.14.0
+ pango_context_get_font_map@Base 1.14.0
+ pango_context_get_gravity@Base 1.18.0
+ pango_context_get_gravity_hint@Base 1.18.0
+ pango_context_get_language@Base 1.14.0
+ pango_context_get_matrix@Base 1.14.0
+ pango_context_get_metrics@Base 1.14.0
+ pango_context_get_type@Base 1.14.0
+ pango_context_list_families@Base 1.14.0
+ pango_context_load_font@Base 1.14.0
+ pango_context_load_fontset@Base 1.14.0
+ pango_context_new@Base 1.14.0
+ pango_context_set_base_dir@Base 1.14.0
+ pango_context_set_base_gravity@Base 1.18.0
+ pango_context_set_font_description@Base 1.14.0
+ pango_context_set_font_map@Base 1.14.0
+ pango_context_set_gravity_hint@Base 1.18.0
+ pango_context_set_language@Base 1.14.0
+ pango_context_set_matrix@Base 1.14.0
+ pango_coverage_copy@Base 1.14.0
+ pango_coverage_from_bytes@Base 1.14.0
+ pango_coverage_get@Base 1.14.0
+ pango_coverage_level_get_type@Base 1.14.0
+ pango_coverage_max@Base 1.14.0
+ pango_coverage_new@Base 1.14.0
+ pango_coverage_ref@Base 1.14.0
+ pango_coverage_set@Base 1.14.0
+ pango_coverage_to_bytes@Base 1.14.0
+ pango_coverage_unref@Base 1.14.0
+ pango_default_break@Base 1.14.0
+ pango_direction_get_type@Base 1.14.0
+ pango_ellipsize_mode_get_type@Base 1.14.0
+ pango_engine_get_type@Base 1.14.0
+ pango_engine_lang_get_type@Base 1.14.0
+ pango_engine_shape_get_type@Base 1.14.0
+ pango_extents_to_pixels@Base 1.18.0
+ pango_find_base_dir@Base 1.14.0
+ pango_find_map@Base 1.14.0
+ pango_find_paragraph_boundary@Base 1.14.0
+ pango_font_describe@Base 1.14.0
+ pango_font_describe_with_absolute_size@Base 1.14.0
+ pango_font_description_better_match@Base 1.14.0
+ pango_font_description_copy@Base 1.14.0
+ pango_font_description_copy_static@Base 1.14.0
+ pango_font_description_equal@Base 1.14.0
+ pango_font_description_free@Base 1.14.0
+ pango_font_description_from_string@Base 1.14.0
+ pango_font_description_get_family@Base 1.14.0
+ pango_font_description_get_gravity@Base 1.18.0
+ pango_font_description_get_set_fields@Base 1.14.0
+ pango_font_description_get_size@Base 1.14.0
+ pango_font_description_get_size_is_absolute@Base 1.14.0
+ pango_font_description_get_stretch@Base 1.14.0
+ pango_font_description_get_style@Base 1.14.0
+ pango_font_description_get_type@Base 1.14.0
+ pango_font_description_get_variant@Base 1.14.0
+ pango_font_description_get_weight@Base 1.14.0
+ pango_font_description_hash@Base 1.14.0
+ pango_font_description_merge@Base 1.14.0
+ pango_font_description_merge_static@Base 1.14.0
+ pango_font_description_new@Base 1.14.0
+ pango_font_description_set_absolute_size@Base 1.14.0
+ pango_font_description_set_family@Base 1.14.0
+ pango_font_description_set_family_static@Base 1.14.0
+ pango_font_description_set_gravity@Base 1.18.0
+ pango_font_description_set_size@Base 1.14.0
+ pango_font_description_set_stretch@Base 1.14.0
+ pango_font_description_set_style@Base 1.14.0
+ pango_font_description_set_variant@Base 1.14.0
+ pango_font_description_set_weight@Base 1.14.0
+ pango_font_description_to_filename@Base 1.14.0
+ pango_font_description_to_string@Base 1.14.0
+ pango_font_description_unset_fields@Base 1.14.0
+ pango_font_descriptions_free@Base 1.14.0
+ pango_font_face_describe@Base 1.14.0
+ pango_font_face_get_face_name@Base 1.14.0
+ pango_font_face_get_type@Base 1.14.0
+ pango_font_face_is_synthesized@Base 1.18.0
+ pango_font_face_list_sizes@Base 1.14.0
+ pango_font_family_get_name@Base 1.14.0
+ pango_font_family_get_type@Base 1.14.0
+ pango_font_family_is_monospace@Base 1.14.0
+ pango_font_family_list_faces@Base 1.14.0
+ pango_font_find_shaper@Base 1.14.0
+ pango_font_get_coverage@Base 1.14.0
+ pango_font_get_font_map@Base 1.14.0
+ pango_font_get_glyph_extents@Base 1.14.0
+ pango_font_get_metrics@Base 1.14.0
+ pango_font_get_type@Base 1.14.0
+ pango_font_map_create_context@Base 1.22.0
+ pango_font_map_get_shape_engine_type@Base 1.14.0
+ pango_font_map_get_type@Base 1.14.0
+ pango_font_map_list_families@Base 1.14.0
+ pango_font_map_load_font@Base 1.14.0
+ pango_font_map_load_fontset@Base 1.14.0
+ pango_font_mask_get_type@Base 1.14.0
+ pango_font_metrics_get_approximate_char_width@Base 1.14.0
+ pango_font_metrics_get_approximate_digit_width@Base 1.14.0
+ pango_font_metrics_get_ascent@Base 1.14.0
+ pango_font_metrics_get_descent@Base 1.14.0
+ pango_font_metrics_get_strikethrough_position@Base 1.14.0
+ pango_font_metrics_get_strikethrough_thickness@Base 1.14.0
+ pango_font_metrics_get_type@Base 1.14.0
+ pango_font_metrics_get_underline_position@Base 1.14.0
+ pango_font_metrics_get_underline_thickness@Base 1.14.0
+ pango_font_metrics_new@Base 1.14.0
+ pango_font_metrics_ref@Base 1.14.0
+ pango_font_metrics_unref@Base 1.14.0
+ pango_fontset_foreach@Base 1.14.0
+ pango_fontset_get_font@Base 1.14.0
+ pango_fontset_get_metrics@Base 1.14.0
+ pango_fontset_get_type@Base 1.14.0
+ pango_fontset_simple_append@Base 1.14.0
+ pango_fontset_simple_get_type@Base 1.14.0
+ pango_fontset_simple_new@Base 1.14.0
+ pango_fontset_simple_size@Base 1.14.0
+ pango_get_lib_subdirectory@Base 1.14.0
+ pango_get_log_attrs@Base 1.14.0
+ pango_get_mirror_char@Base 1.14.0
+ pango_get_sysconf_subdirectory@Base 1.14.0
+ pango_glyph_item_apply_attrs@Base 1.14.0
+ pango_glyph_item_copy@Base 1.20.0
+ pango_glyph_item_free@Base 1.14.0
+ pango_glyph_item_get_logical_widths@Base 1.25.5
+ pango_glyph_item_get_type@Base 1.20.0
+ pango_glyph_item_iter_copy@Base 1.22.0
+ pango_glyph_item_iter_free@Base 1.22.0
+ pango_glyph_item_iter_get_type@Base 1.22.0
+ pango_glyph_item_iter_init_end@Base 1.22.0
+ pango_glyph_item_iter_init_start@Base 1.22.0
+ pango_glyph_item_iter_next_cluster@Base 1.22.0
+ pango_glyph_item_iter_prev_cluster@Base 1.22.0
+ pango_glyph_item_letter_space@Base 1.14.0
+ pango_glyph_item_split@Base 1.14.0
+ pango_glyph_string_copy@Base 1.14.0
+ pango_glyph_string_extents@Base 1.14.0
+ pango_glyph_string_extents_range@Base 1.14.0
+ pango_glyph_string_free@Base 1.14.0
+ pango_glyph_string_get_logical_widths@Base 1.14.0
+ pango_glyph_string_get_type@Base 1.14.0
+ pango_glyph_string_get_width@Base 1.14.0
+ pango_glyph_string_index_to_x@Base 1.14.0
+ pango_glyph_string_new@Base 1.14.0
+ pango_glyph_string_set_size@Base 1.14.0
+ pango_glyph_string_x_to_index@Base 1.14.0
+ pango_gravity_get_for_matrix@Base 1.18.0
+ pango_gravity_get_for_script@Base 1.18.0
+ pango_gravity_get_for_script_and_width@Base 1.25.5
+ pango_gravity_get_type@Base 1.18.0
+ pango_gravity_hint_get_type@Base 1.18.0
+ pango_gravity_to_rotation@Base 1.18.0
+ pango_is_zero_width@Base 1.14.0
+ pango_item_copy@Base 1.14.0
+ pango_item_free@Base 1.14.0
+ pango_item_get_type@Base 1.14.0
+ pango_item_new@Base 1.14.0
+ pango_item_split@Base 1.14.0
+ pango_itemize@Base 1.14.0
+ pango_itemize_with_base_dir@Base 1.14.0
+ pango_language_from_string@Base 1.14.0
+ pango_language_get_default@Base 1.18.0
+ pango_language_get_sample_string@Base 1.14.0
+ pango_language_get_scripts@Base 1.22.0
+ pango_language_get_type@Base 1.14.0
+ pango_language_includes_script@Base 1.14.0
+ pango_language_matches@Base 1.14.0
+ pango_language_to_string@Base 1.22.0
+ pango_layout_context_changed@Base 1.14.0
+ pango_layout_copy@Base 1.14.0
+ pango_layout_get_alignment@Base 1.14.0
+ pango_layout_get_attributes@Base 1.14.0
+ pango_layout_get_auto_dir@Base 1.14.0
+ pango_layout_get_baseline@Base 1.22.0
+ pango_layout_get_context@Base 1.14.0
+ pango_layout_get_cursor_pos@Base 1.14.0
+ pango_layout_get_ellipsize@Base 1.14.0
+ pango_layout_get_extents@Base 1.14.0
+ pango_layout_get_font_description@Base 1.14.0
+ pango_layout_get_height@Base 1.20.0
+ pango_layout_get_indent@Base 1.14.0
+ pango_layout_get_iter@Base 1.14.0
+ pango_layout_get_justify@Base 1.14.0
+ pango_layout_get_line@Base 1.14.0
+ pango_layout_get_line_count@Base 1.14.0
+ pango_layout_get_line_readonly@Base 1.18.0
+ pango_layout_get_lines@Base 1.14.0
+ pango_layout_get_lines_readonly@Base 1.18.0
+ pango_layout_get_log_attrs@Base 1.14.0
+ pango_layout_get_pixel_extents@Base 1.14.0
+ pango_layout_get_pixel_size@Base 1.14.0
+ pango_layout_get_single_paragraph_mode@Base 1.14.0
+ pango_layout_get_size@Base 1.14.0
+ pango_layout_get_spacing@Base 1.14.0
+ pango_layout_get_tabs@Base 1.14.0
+ pango_layout_get_text@Base 1.14.0
+ pango_layout_get_type@Base 1.14.0
+ pango_layout_get_unknown_glyphs_count@Base 1.18.0
+ pango_layout_get_width@Base 1.14.0
+ pango_layout_get_wrap@Base 1.14.0
+ pango_layout_index_to_line_x@Base 1.14.0
+ pango_layout_index_to_pos@Base 1.14.0
+ pango_layout_is_ellipsized@Base 1.18.0
+ pango_layout_is_wrapped@Base 1.18.0
+ pango_layout_iter_at_last_line@Base 1.14.0
+ pango_layout_iter_copy@Base 1.20.0
+ pango_layout_iter_free@Base 1.14.0
+ pango_layout_iter_get_baseline@Base 1.14.0
+ pango_layout_iter_get_char_extents@Base 1.14.0
+ pango_layout_iter_get_cluster_extents@Base 1.14.0
+ pango_layout_iter_get_index@Base 1.14.0
+ pango_layout_iter_get_layout@Base 1.20.0
+ pango_layout_iter_get_layout_extents@Base 1.14.0
+ pango_layout_iter_get_line@Base 1.14.0
+ pango_layout_iter_get_line_extents@Base 1.14.0
+ pango_layout_iter_get_line_readonly@Base 1.18.0
+ pango_layout_iter_get_line_yrange@Base 1.14.0
+ pango_layout_iter_get_run@Base 1.14.0
+ pango_layout_iter_get_run_extents@Base 1.14.0
+ pango_layout_iter_get_run_readonly@Base 1.18.0
+ pango_layout_iter_get_type@Base 1.14.0
+ pango_layout_iter_next_char@Base 1.14.0
+ pango_layout_iter_next_cluster@Base 1.14.0
+ pango_layout_iter_next_line@Base 1.14.0
+ pango_layout_iter_next_run@Base 1.14.0
+ pango_layout_line_get_extents@Base 1.14.0
+ pango_layout_line_get_pixel_extents@Base 1.14.0
+ pango_layout_line_get_type@Base 1.14.0
+ pango_layout_line_get_x_ranges@Base 1.14.0
+ pango_layout_line_index_to_x@Base 1.14.0
+ pango_layout_line_ref@Base 1.14.0
+ pango_layout_line_unref@Base 1.14.0
+ pango_layout_line_x_to_index@Base 1.14.0
+ pango_layout_move_cursor_visually@Base 1.14.0
+ pango_layout_new@Base 1.14.0
+ pango_layout_set_alignment@Base 1.14.0
+ pango_layout_set_attributes@Base 1.14.0
+ pango_layout_set_auto_dir@Base 1.14.0
+ pango_layout_set_ellipsize@Base 1.14.0
+ pango_layout_set_font_description@Base 1.14.0
+ pango_layout_set_height@Base 1.20.0
+ pango_layout_set_indent@Base 1.14.0
+ pango_layout_set_justify@Base 1.14.0
+ pango_layout_set_markup@Base 1.14.0
+ pango_layout_set_markup_with_accel@Base 1.14.0
+ pango_layout_set_single_paragraph_mode@Base 1.14.0
+ pango_layout_set_spacing@Base 1.14.0
+ pango_layout_set_tabs@Base 1.14.0
+ pango_layout_set_text@Base 1.14.0
+ pango_layout_set_width@Base 1.14.0
+ pango_layout_set_wrap@Base 1.14.0
+ pango_layout_xy_to_index@Base 1.14.0
+ pango_log2vis_get_embedding_levels@Base 1.14.0
+ pango_lookup_aliases@Base 1.14.0
+ pango_map_get_engine@Base 1.14.0
+ pango_map_get_engines@Base 1.14.0
+ pango_matrix_concat@Base 1.14.0
+ pango_matrix_copy@Base 1.14.0
+ pango_matrix_free@Base 1.14.0
+ pango_matrix_get_font_scale_factor@Base 1.14.0
+ pango_matrix_get_type@Base 1.14.0
+ pango_matrix_rotate@Base 1.14.0
+ pango_matrix_scale@Base 1.14.0
+ pango_matrix_transform_distance@Base 1.18.0
+ pango_matrix_transform_pixel_rectangle@Base 1.18.0
+ pango_matrix_transform_point@Base 1.18.0
+ pango_matrix_transform_rectangle@Base 1.18.0
+ pango_matrix_translate@Base 1.14.0
+ pango_module_register@Base 1.14.0
+ pango_parse_enum@Base 1.18.0
+ pango_parse_markup@Base 1.14.0
+ pango_parse_stretch@Base 1.14.0
+ pango_parse_style@Base 1.14.0
+ pango_parse_variant@Base 1.14.0
+ pango_parse_weight@Base 1.14.0
+ pango_quantize_line_geometry@Base 1.14.0
+ pango_read_line@Base 1.14.0
+ pango_render_part_get_type@Base 1.14.0
+ pango_renderer_activate@Base 1.14.0
+ pango_renderer_deactivate@Base 1.14.0
+ pango_renderer_draw_error_underline@Base 1.14.0
+ pango_renderer_draw_glyph@Base 1.14.0
+ pango_renderer_draw_glyph_item@Base 1.22.0
+ pango_renderer_draw_glyphs@Base 1.14.0
+ pango_renderer_draw_layout@Base 1.14.0
+ pango_renderer_draw_layout_line@Base 1.14.0
+ pango_renderer_draw_rectangle@Base 1.14.0
+ pango_renderer_draw_trapezoid@Base 1.14.0
+ pango_renderer_get_color@Base 1.14.0
+ pango_renderer_get_layout@Base 1.20.0
+ pango_renderer_get_layout_line@Base 1.20.0
+ pango_renderer_get_matrix@Base 1.14.0
+ pango_renderer_get_type@Base 1.14.0
+ pango_renderer_part_changed@Base 1.14.0
+ pango_renderer_set_color@Base 1.14.0
+ pango_renderer_set_matrix@Base 1.14.0
+ pango_reorder_items@Base 1.14.0
+ pango_scan_int@Base 1.14.0
+ pango_scan_string@Base 1.14.0
+ pango_scan_word@Base 1.14.0
+ pango_script_for_unichar@Base 1.14.0
+ pango_script_get_sample_language@Base 1.14.0
+ pango_script_get_type@Base 1.14.0
+ pango_script_iter_free@Base 1.14.0
+ pango_script_iter_get_range@Base 1.14.0
+ pango_script_iter_new@Base 1.14.0
+ pango_script_iter_next@Base 1.14.0
+ pango_shape@Base 1.14.0
+ pango_skip_space@Base 1.14.0
+ pango_split_file_list@Base 1.14.0
+ pango_stretch_get_type@Base 1.14.0
+ pango_style_get_type@Base 1.14.0
+ pango_tab_align_get_type@Base 1.14.0
+ pango_tab_array_copy@Base 1.14.0
+ pango_tab_array_free@Base 1.14.0
+ pango_tab_array_get_positions_in_pixels@Base 1.14.0
+ pango_tab_array_get_size@Base 1.14.0
+ pango_tab_array_get_tab@Base 1.14.0
+ pango_tab_array_get_tabs@Base 1.14.0
+ pango_tab_array_get_type@Base 1.14.0
+ pango_tab_array_new@Base 1.14.0
+ pango_tab_array_new_with_positions@Base 1.14.0
+ pango_tab_array_resize@Base 1.14.0
+ pango_tab_array_set_tab@Base 1.14.0
+ pango_trim_string@Base 1.14.0
+ pango_underline_get_type@Base 1.14.0
+ pango_unichar_direction@Base 1.14.0
+ pango_units_from_double@Base 1.18.0
+ pango_units_to_double@Base 1.18.0
+ pango_variant_get_type@Base 1.14.0
+ pango_version@Base 1.18.0
+ pango_version_check@Base 1.18.0
+ pango_version_string@Base 1.18.0
+ pango_weight_get_type@Base 1.14.0
+ pango_wrap_mode_get_type@Base 1.14.0
+libpangocairo-1.0.so.0 libpango1.0 #MINVER#
+* Build-Depends-Package: libpango1.0-dev
+ pango_cairo_context_get_font_options@Base 1.14.0
+ pango_cairo_context_get_resolution@Base 1.14.0
+ pango_cairo_context_get_shape_renderer@Base 1.18.0
+ pango_cairo_context_set_font_options@Base 1.14.0
+ pango_cairo_context_set_resolution@Base 1.14.0
+ pango_cairo_context_set_shape_renderer@Base 1.18.0
+ pango_cairo_create_context@Base 1.22.0
+ pango_cairo_create_layout@Base 1.14.0
+ pango_cairo_error_underline_path@Base 1.14.0
+ pango_cairo_fc_font_get_type@Base 1.14.0
+ pango_cairo_fc_font_map_get_type@Base 1.14.0
+ pango_cairo_font_get_scaled_font@Base 1.18.0
+ pango_cairo_font_get_type@Base 1.14.0
+ pango_cairo_font_map_create_context@Base 1.14.0
+ pango_cairo_font_map_get_default@Base 1.14.0
+ pango_cairo_font_map_get_font_type@Base 1.18.0
+ pango_cairo_font_map_get_resolution@Base 1.14.0
+ pango_cairo_font_map_get_type@Base 1.14.0
+ pango_cairo_font_map_new@Base 1.14.0
+ pango_cairo_font_map_new_for_font_type@Base 1.18.0
+ pango_cairo_font_map_set_default@Base 1.22.0
+ pango_cairo_font_map_set_resolution@Base 1.14.0
+ pango_cairo_glyph_string_path@Base 1.14.0
+ pango_cairo_layout_line_path@Base 1.14.0
+ pango_cairo_layout_path@Base 1.14.0
+ pango_cairo_renderer_get_type@Base 1.14.0
+ pango_cairo_show_error_underline@Base 1.14.0
+ pango_cairo_show_glyph_item@Base 1.22.0
+ pango_cairo_show_glyph_string@Base 1.14.0
+ pango_cairo_show_layout@Base 1.14.0
+ pango_cairo_show_layout_line@Base 1.14.0
+ pango_cairo_update_context@Base 1.14.0
+ pango_cairo_update_layout@Base 1.14.0
+libpangoft2-1.0.so.0 libpango1.0 #MINVER#
+* Build-Depends-Package: libpango1.0-dev
+ pango_fc_decoder_get_charset@Base 1.14.0
+ pango_fc_decoder_get_glyph@Base 1.14.0
+ pango_fc_decoder_get_type@Base 1.14.0
+ pango_fc_font_create_metrics_for_context@Base 1.14.0
+ pango_fc_font_description_from_pattern@Base 1.14.0
+ pango_fc_font_get_glyph@Base 1.14.0
+ pango_fc_font_get_raw_extents@Base 1.14.0
+ pango_fc_font_get_type@Base 1.14.0
+ pango_fc_font_get_unknown_glyph@Base 1.14.0
+ pango_fc_font_has_char@Base 1.14.0
+ pango_fc_font_kern_glyphs@Base 1.14.0
+ pango_fc_font_key_get_context_key@Base 1.24.0
+ pango_fc_font_key_get_matrix@Base 1.24.0
+ pango_fc_font_key_get_pattern@Base 1.24.0
+ pango_fc_font_lock_face@Base 1.14.0
+ pango_fc_font_map_add_decoder_find_func@Base 1.14.0
+ pango_fc_font_map_cache_clear@Base 1.14.0
+ pango_fc_font_map_create_context@Base 1.14.0
+ pango_fc_font_map_find_decoder@Base 1.24.0
+ pango_fc_font_map_get_type@Base 1.14.0
+ pango_fc_font_map_shutdown@Base 1.14.0
+ pango_fc_font_unlock_face@Base 1.14.0
+ pango_fc_fontset_key_get_absolute_size@Base 1.24.0
+ pango_fc_fontset_key_get_context_key@Base 1.24.0
+ pango_fc_fontset_key_get_description@Base 1.24.0
+ pango_fc_fontset_key_get_language@Base 1.24.0
+ pango_fc_fontset_key_get_matrix@Base 1.24.0
+ pango_fc_fontset_key_get_resolution@Base 1.24.0
+ pango_ft2_font_get_coverage@Base 1.14.0
+ pango_ft2_font_get_face@Base 1.14.0
+ pango_ft2_font_get_kerning@Base 1.14.0
+ pango_ft2_font_get_type@Base 1.14.0
+ pango_ft2_font_map_create_context@Base 1.14.0
+ pango_ft2_font_map_for_display@Base 1.14.0
+ pango_ft2_font_map_get_type@Base 1.14.0
+ pango_ft2_font_map_new@Base 1.14.0
+ pango_ft2_font_map_set_default_substitute@Base 1.14.0
+ pango_ft2_font_map_set_resolution@Base 1.14.0
+ pango_ft2_font_map_substitute_changed@Base 1.14.0
+ pango_ft2_get_context@Base 1.14.0
+ pango_ft2_get_unknown_glyph@Base 1.14.0
+ pango_ft2_render@Base 1.14.0
+ pango_ft2_render_layout@Base 1.14.0
+ pango_ft2_render_layout_line@Base 1.14.0
+ pango_ft2_render_layout_line_subpixel@Base 1.14.0
+ pango_ft2_render_layout_subpixel@Base 1.14.0
+ pango_ft2_render_transformed@Base 1.14.0
+ pango_ft2_renderer_get_type@Base 1.14.0
+ pango_ft2_shutdown_display@Base 1.14.0
+ pango_ot_buffer_add_glyph@Base 1.14.0
+ pango_ot_buffer_clear@Base 1.14.0
+ pango_ot_buffer_destroy@Base 1.14.0
+ pango_ot_buffer_get_glyphs@Base 1.14.0
+ pango_ot_buffer_new@Base 1.14.0
+ pango_ot_buffer_output@Base 1.14.0
+ pango_ot_buffer_set_rtl@Base 1.14.0
+ pango_ot_buffer_set_zero_width_marks@Base 1.14.0
+ pango_ot_info_find_feature@Base 1.14.0
+ pango_ot_info_find_language@Base 1.14.0
+ pango_ot_info_find_script@Base 1.14.0
+ pango_ot_info_get@Base 1.14.0
+ pango_ot_info_get_type@Base 1.14.0
+ pango_ot_info_list_features@Base 1.14.0
+ pango_ot_info_list_languages@Base 1.14.0
+ pango_ot_info_list_scripts@Base 1.14.0
+ pango_ot_ruleset_add_feature@Base 1.14.0
+ pango_ot_ruleset_description_copy@Base 1.18.0
+ pango_ot_ruleset_description_equal@Base 1.18.0
+ pango_ot_ruleset_description_free@Base 1.18.0
+ pango_ot_ruleset_description_hash@Base 1.18.0
+ pango_ot_ruleset_get_feature_count@Base 1.18.0
+ pango_ot_ruleset_get_for_description@Base 1.18.0
+ pango_ot_ruleset_get_type@Base 1.14.0
+ pango_ot_ruleset_maybe_add_feature@Base 1.18.0
+ pango_ot_ruleset_maybe_add_features@Base 1.18.0
+ pango_ot_ruleset_new@Base 1.14.0
+ pango_ot_ruleset_new_for@Base 1.18.0
+ pango_ot_ruleset_new_from_description@Base 1.18.0
+ pango_ot_ruleset_position@Base 1.14.0
+ pango_ot_ruleset_substitute@Base 1.14.0
+ pango_ot_tag_from_language@Base 1.18.0
+ pango_ot_tag_from_script@Base 1.18.0
+ pango_ot_tag_to_language@Base 1.18.0
+ pango_ot_tag_to_script@Base 1.18.0
+libpangox-1.0.so.0 libpango1.0 #MINVER#
+* Build-Depends-Package: libpango1.0-dev
+ pango_x_apply_ligatures@Base 1.14.0
+ pango_x_context_set_funcs@Base 1.14.0
+ pango_x_face_get_coverage@Base 1.14.0
+ pango_x_face_get_type@Base 1.14.0
+ pango_x_face_remove@Base 1.14.0
+ pango_x_fallback_shape@Base 1.14.0
+ pango_x_family_get_type@Base 1.14.0
+ pango_x_find_first_subfont@Base 1.14.0
+ pango_x_font_cache_free@Base 1.14.0
+ pango_x_font_cache_load@Base 1.14.0
+ pango_x_font_cache_new@Base 1.14.0
+ pango_x_font_cache_unload@Base 1.14.0
+ pango_x_font_get_unknown_glyph@Base 1.14.0
+ pango_x_font_map_for_display@Base 1.14.0
+ pango_x_font_map_get_font_cache@Base 1.14.0
+ pango_x_font_map_get_type@Base 1.14.0
+ pango_x_font_new@Base 1.14.0
+ pango_x_font_subfont_xlfd@Base 1.14.0
+ pango_x_fontmap_atom_from_name@Base 1.14.0
+ pango_x_fontmap_cache_add@Base 1.14.0
+ pango_x_fontmap_cache_remove@Base 1.14.0
+ pango_x_fontmap_get_display@Base 1.14.0
+ pango_x_fontmap_name_from_atom@Base 1.14.0
+ pango_x_get_context@Base 1.14.0
+ pango_x_get_shaper_map@Base 1.14.0
+ pango_x_get_unknown_glyph@Base 1.14.0
+ pango_x_has_glyph@Base 1.14.0
+ pango_x_list_subfonts@Base 1.14.0
+ pango_x_load_font@Base 1.14.0
+ pango_x_make_matching_xlfd@Base 1.14.0
+ pango_x_render@Base 1.14.0
+ pango_x_render_layout@Base 1.14.0
+ pango_x_render_layout_line@Base 1.14.0
+ pango_x_shutdown_display@Base 1.14.0
+libpangoxft-1.0.so.0 libpango1.0 #MINVER#
+* Build-Depends-Package: libpango1.0-dev
+ pango_xft_font_get_display@Base 1.14.0
+ pango_xft_font_get_font@Base 1.14.0
+ pango_xft_font_get_glyph@Base 1.14.0
+ pango_xft_font_get_type@Base 1.14.0
+ pango_xft_font_get_unknown_glyph@Base 1.14.0
+ pango_xft_font_has_char@Base 1.14.0
+ pango_xft_font_lock_face@Base 1.14.0
+ pango_xft_font_map_get_type@Base 1.14.0
+ pango_xft_font_unlock_face@Base 1.14.0
+ pango_xft_get_context@Base 1.14.0
+ pango_xft_get_font_map@Base 1.14.0
+ pango_xft_picture_render@Base 1.14.0
+ pango_xft_render@Base 1.14.0
+ pango_xft_render_layout@Base 1.14.0
+ pango_xft_render_layout_line@Base 1.14.0
+ pango_xft_render_transformed@Base 1.14.0
+ pango_xft_renderer_get_type@Base 1.14.0
+ pango_xft_renderer_new@Base 1.14.0
+ pango_xft_renderer_set_default_color@Base 1.14.0
+ pango_xft_renderer_set_draw@Base 1.14.0
+ pango_xft_set_default_substitute@Base 1.14.0
+ pango_xft_shutdown_display@Base 1.14.0
+ pango_xft_substitute_changed@Base 1.14.0
+
diff --git a/debian/pango.defoma b/debian/pango.defoma
new file mode 100755 (executable)
index 0000000..a52e5d0
--- /dev/null
@@ -0,0 +1,344 @@
+@ACCEPT_CATEGORIES = qw(xfont);
+
+# vim:syntax=perl
+
+package pango;
+
+use strict;
+use POSIX;
+use Debian::Defoma::Common;
+use Debian::Defoma::Font;
+use Debian::Defoma::Id;
+use vars qw($ROOTDIR %UNSUPPORTED_XLFD);
+
+import Debian::Defoma::Common;
+import Debian::Defoma::Font;
+import Debian::Defoma::Id;
+
+my @Families = qw(sans serif monospace);
+my @Encodings = qw(iso8859_X iso10646 other);
+
+my %Ids;
+my $PkgDir = $ROOTDIR . '/pango.d';
+my $PangoAlias = $PkgDir . '/pangox.aliases';
+my $PangoAliases = '/etc/pango/pangox.aliases';
+my $ConfFile = '/etc/defoma/config/pango.conf';
+my $term = 0;
+my $init = 0;
+
+## This function generates each element of XLFD from hashed hints, and
+## returns in a hashed XLFD.
+
+sub get_xlfd_element {
+       my @xlfd = split (/-/, shift);
+       my $ret = {};
+
+       $ret->{Foundry} = $xlfd[1];
+       $ret->{Family} = $xlfd[2];
+       $ret->{Weight} = $xlfd[3];
+       $ret->{Slant} = $xlfd[4];
+       $ret->{SetWidth} = $xlfd[5];
+       $ret->{Style} = $xlfd[6];
+       $ret->{Pixel} = $xlfd[7];
+       $ret->{Point} = $xlfd[8];
+       $ret->{ResX} = $xlfd[9];
+       $ret->{ResY} = $xlfd[10];
+       $ret->{Spacing} = $xlfd[11];
+       $ret->{AvgWidth} = $xlfd[12];
+       $ret->{Encoding} = "$xlfd[13]-$xlfd[14]";
+
+       return $ret;
+}
+
+## Returns a string XLFD from hashed XLFD.
+sub generate_xlfd {
+       my $xe = shift;
+       my $enc = $xe->{Encoding};
+
+       $enc = '*-*' if ($xe->{Encoding} =~ /iso8859-[0-9]+/);
+       return join ('-', '', $xe->{Foundry}, $xe->{Family}, $xe->{Weight},
+                    $xe->{Slant}, $xe->{SetWidth}, $xe->{Style}, '*', '*',
+                    '*', '*', '*', '*', $enc);
+}
+
+# store XLFD
+sub store_xlfd {
+       my $Id = shift;
+       my @cache = defoma_id_grep_cache ($Id, 'installed', sorttype => 'p');
+       my @nnnn_xlfd = ();
+       my @innn_xlfd = ();
+       my @nnbn_xlfd = ();
+       my @inbn_xlfd = ();
+       my $xe;
+       my $xlfd;
+
+       foreach my $i (@cache) {
+               my $font = $Id->{1}->[$i];
+               $font =~ s/_/ /g;
+               $xe = get_xlfd_element ($font);
+               my $enc = "$xe->{Foundry}-$xe->{Family}-$xe->{Encoding}";
+               $xlfd = generate_xlfd ($xe);
+
+               if ($xe->{Weight} =~ /bold/ && ($xe->{Slant} eq 'o' || $xe->{Slant} eq 'i')) {
+                       push (@inbn_xlfd, $xlfd) if (!grep (/\Q$enc/, @inbn_xlfd));
+                       next;
+               }
+               if ($xe->{Weight} !~ /bold/ && ($xe->{Slant} eq 'o' || $xe->{Slant} eq 'i')) {
+                       push (@innn_xlfd, $xlfd) if (!grep (/\Q$enc/, @innn_xlfd));
+                       next;
+               }
+               if ($xe->{Weight} =~ /bold/ && $xe->{Slant} =~ /r/) {
+                       push (@nnbn_xlfd, $xlfd) if (!grep (/\Q$enc/, @nnbn_xlfd));
+                       next;
+               }
+               push (@nnnn_xlfd, $xlfd) if (!grep (/\Q$enc/, @nnnn_xlfd));
+       }
+       return \(@nnnn_xlfd, @innn_xlfd, @nnbn_xlfd, @inbn_xlfd);
+}
+
+# write section
+sub write_section {
+       my $file = shift;
+       my $family = shift;
+
+       my @nnnn_iso8859_X = ();
+       my @innn_iso8859_X = ();
+       my @nnbn_iso8859_X = ();
+       my @inbn_iso8859_X = ();
+       my @nnnn_iso10646 = ();
+       my @innn_iso10646 = ();
+       my @nnbn_iso10646 = ();
+       my @inbn_iso10646 = ();
+       my @nnnn_other = ();
+       my @innn_other = ();
+       my @nnbn_other = ();
+       my @inbn_other = ();
+       my $id_iso8859_X = $family . '_iso8859_X';
+       my $id_iso10646 = $family . '_iso10646';
+       my $id_other = $family . '_other';
+       my $hash;
+       my ($nnnn, $innn, $nnbn, $inbn);
+
+       open (F, ">> $file");
+       ($nnnn, $innn, $nnbn, $inbn) = store_xlfd ($Ids{$id_other});
+       @nnnn_other = @{$nnnn};
+       @innn_other = @{$innn};
+       @nnbn_other = @{$nnbn};
+       @inbn_other = @{$inbn};
+       ($nnnn, $innn, $nnbn, $inbn) = store_xlfd ($Ids{$id_iso10646});
+       @nnnn_iso10646 = @{$nnnn};
+       @innn_iso10646 = @{$innn};
+       @nnbn_iso10646 = @{$nnbn};
+       @inbn_iso10646 = @{$inbn};
+       ($nnnn, $innn, $nnbn, $inbn) = store_xlfd ($Ids{$id_iso8859_X});
+       @nnnn_iso8859_X = @{$nnnn};
+       @innn_iso8859_X = @{$innn};
+       @nnbn_iso8859_X = @{$nnbn};
+       @inbn_iso8859_X = @{$inbn};
+
+       print F "$family normal normal normal normal \\\n\t\"";
+       if (scalar (@nnnn_other) > 0) {
+               print F join (",\\\n\t", @nnnn_other);
+               print F ",\\\n\t";
+       }
+       if (scalar (@nnnn_iso10646) > 0) {
+               print F join (",\\\n\t", @nnnn_iso10646);
+               print F ",\\\n\t";
+       }
+       if (exists ($UNSUPPORTED_XLFD {"$family-normal-normal-normal-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-normal-normal-normal-normal"};
+               print F ",\\\n\t";
+       }
+       if (scalar (@nnnn_iso8859_X) > 0) {
+               print F join (",\\\n\t", @nnnn_iso8859_X);
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-medium-r-normal--*-*-*-*-*-*-*-*\"\n\n";
+
+       print F "$family italic normal normal normal \\\n\t\"";
+       if (scalar (@innn_other) > 0) {
+               print F join (",\\\n\t", @innn_other);
+               print F ",\\\n\t";
+       }
+       if (scalar (@innn_iso10646) > 0) {
+               print F join (",\\\n\t", @innn_iso10646);
+               print F ",\\\n\t";
+       }
+       if (exists ($UNSUPPORTED_XLFD {"$family-italic-normal-normal-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-italic-normal-normal-normal"};
+               print F ",\\\n\t";
+       }
+       if (scalar (@innn_iso8859_X) > 0) {
+               print F join (",\\\n\t", @innn_iso8859_X);
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-medium-i-normal--*-*-*-*-*-*-*-*\"\n\n";
+
+       print F "$family normal normal bold normal \\\n\t\"";
+       if (scalar (@nnbn_other) > 0) {
+               print F join (",\\\n\t", @nnbn_other);
+               print F ",\\\n\t";
+       }
+       if (scalar (@nnbn_iso10646) > 0) {
+               print F join (",\\\n\t", @nnbn_iso10646);
+               print F ",\\\n\t";
+       }
+       if (exists ($UNSUPPORTED_XLFD {"$family-normal-normal-bold-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-normal-normal-bold-normal"};
+               print F ",\\\n\t";
+       }
+       if (scalar (@nnbn_iso8859_X) > 0) {
+               print F join (",\\\n\t", @nnbn_iso8859_X);
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-bold-r-normal--*-*-*-*-*-*-*-*\"\n\n";
+
+       print F "$family italic normal bold normal \\\n\t\"";
+       if (scalar (@inbn_other) > 0) {
+               print F join (",\\\n\t", @inbn_other);
+               print F ",\\\n\t";
+       }
+       if (scalar (@inbn_iso10646) > 0) {
+               print F join (",\\\n\t", @inbn_iso10646);
+               print F ",\\\n\t";
+       }
+       if (exists ($UNSUPPORTED_XLFD {"$family-italic-normal-bold-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-italic-normal-bold-normal"};
+               print F ",\\\n\t";
+       }
+       if (scalar (@inbn_iso8859_X) > 0) {
+               print F join (",\\\n\t", @inbn_iso8859_X);
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-bold-i-normal--*-*-*-*-*-*-*-*\"\n\n";
+       close F;
+}
+
+sub do_init {
+       return if ($init);
+
+       $init = 1;
+       foreach my $i (@Families) {
+               foreach my $j (@Encodings) {
+                       my $id = $i . '_' . $j;
+                       $Ids{$id} = defoma_id_open_cache ($id);
+               }
+       }
+       if ( -f $ConfFile ) {
+               do "$ConfFile" or die ("$@\n");
+       }
+       return 0;
+}
+
+sub do_term {
+       unless ($term) {
+               $term = 1;
+
+               my $xe;
+               my $xlfd;
+
+               open (F, "> $PangoAlias.bak") or die "$PangoAlias.bak: $!";
+               print F "## THIS FILE IS GENERATED BY DEFOMA, DO NOT EDIT\n\n";
+               close F;
+
+               ## Sans
+               write_section ("$PangoAlias.bak", "sans");
+
+               ## Serif
+               write_section ("$PangoAlias.bak", "serif");
+
+               ## Monospace
+               write_section ("$PangoAlias.bak", "monospace");
+
+               rename ("$PangoAlias.bak", "$PangoAlias");
+               foreach my $i (@Families) {
+                       foreach my $j (@Encodings) {
+                               my $id = $i . '_' . $j;
+                               defoma_id_close_cache ($Ids{$id});
+                               $Ids{$id} = undef;
+                       }
+               }
+       }
+       return 0;
+}
+
+sub actual_register {
+       my ($font, $h, $cache) = @_;
+       my $id_iso8859_X;
+       my $id_iso10646;
+       my $id_other;
+       my $xe;
+
+       $id_iso8859_X = $cache . "_iso8859_X";
+       $id_iso10646 = $cache . "_iso10646";
+       $id_other = $cache . "_other";
+       $xe = get_xlfd_element ($font);
+       if ($xe->{Encoding} =~ /iso8859-[0-9]+/) {
+               defoma_id_register ($Ids{$id_iso8859_X},
+                                   type => 'real',
+                                   font => $font,
+                                   id => $font,
+                                   priority => $h->{Priority});
+       } elsif ($xe->{Encoding} =~ /iso10646/) {
+               defoma_id_register ($Ids{$id_iso10646},
+                                   type => 'real',
+                                   font => $font,
+                                   id => $font,
+                                   priority => $h->{Priority});
+       } else {
+               defoma_id_register ($Ids{$id_other},
+                                   type => 'real',
+                                   font => $font,
+                                   id => $font,
+                                   priority => $h->{Priority});
+       }
+}
+
+sub do_register {
+       my $font = shift;
+       my @hints = defoma_font_get_hints ('xfont', $font);
+       my $h = parse_hints_start ('', @hints);
+       my $cache = "monospace";
+       my $registered = 0;
+
+       if (exists ($h->{'Shape'}) && $h->{'Shape'} =~ /\bNoSerif\b/) {
+               $cache = "sans";
+               actual_register ($font, $h, $cache);
+               $registered = 1;
+       }
+       if (exists ($h->{'Shape'}) && $h->{'Shape'} =~ /\bSerif\b/) {
+               $cache = "serif";
+               actual_register ($font, $h, $cache);
+               $registered = 1;
+       }
+       if ((exists ($h->{'Width'}) && $h->{'Width'} =~ /\bFixed\b/) || !$registered) {
+               $cache = "monospace";
+               actual_register ($font, $h, $cache);
+       }
+       
+       return 0;
+}
+
+sub do_unregister {
+       my $font = shift;
+
+       foreach my $i (@Families) {
+               foreach my $j (@Encodings) {
+                       my $id = $i . '_' . $j;
+                       defoma_id_unregister ($Ids{$id}, type => 'real', font => $font);
+               }
+       }
+}
+
+sub xfont {
+       my $arg = shift;
+
+       if ($arg eq 'init') { return do_init (); }
+       elsif ($arg eq 'term') { return do_term (); }
+       elsif ($arg eq 'register') { return do_register (@_); }
+       elsif ($arg eq 'unregister') { return do_unregister (@_); }
+       return 0;
+}
+
+1;
+
diff --git a/debian/patches/10_scan-module-files-in-dirs.patch b/debian/patches/10_scan-module-files-in-dirs.patch
new file mode 100755 (executable)
index 0000000..24dc73b
--- /dev/null
@@ -0,0 +1,55 @@
+Index: pango1.0-1.16.0/pango/modules.c
+===================================================================
+--- pango1.0-1.16.0.orig/pango/modules.c       2007-01-23 00:41:43.000000000 +0100
++++ pango1.0-1.16.0/pango/modules.c    2007-03-07 11:16:16.000000000 +0100
+@@ -40,6 +40,9 @@
+ #define PANGO_MODULE(module) (G_TYPE_CHECK_INSTANCE_CAST ((module), PANGO_TYPE_MODULE, PangoModule))
+ #define PANGO_IS_MODULE(module)  (G_TYPE_CHECK_INSTANCE_TYPE ((module), PANGO_TYPE_MODULE))
++#define MODULEFILEEXT ".modules"
++#define MODULEFILEEXT_LEN ((int) strlen (MODULEFILEEXT))
++
+ typedef struct _PangoMapInfo PangoMapInfo;
+ typedef struct _PangoEnginePair PangoEnginePair;
+ typedef struct _PangoSubmap PangoSubmap;
+@@ -519,11 +522,36 @@
+   while (n-- > 0)
+     {
+-      module_file = g_fopen (files[n], "r");
+-      if (module_file)
++      GDir *dir = g_dir_open (files[n], 0, NULL);
++      if (dir)
+       {
+-        process_module_file(module_file);
+-        fclose(module_file);
++        const char *dent;
++
++        while ((dent = g_dir_read_name (dir)))
++          {
++            int len = strlen (dent);
++            if (len > MODULEFILEEXT_LEN && strcmp (dent + len - MODULEFILEEXT_LEN, MODULEFILEEXT) == 0)
++              {
++                gchar *pathname = g_build_filename (files[n], dent, NULL);
++                module_file = g_fopen (pathname, "r");
++                if (module_file)
++                  {
++                    process_module_file(module_file);
++                    fclose(module_file);
++                  }
++                g_free (pathname);
++              }
++          }
++        g_dir_close (dir);
++      }
++      else
++      {
++        module_file = g_fopen (files[n], "r");
++        if (module_file)
++          {
++            process_module_file(module_file);
++            fclose(module_file);
++          }
+       }
+     }
diff --git a/debian/patches/11_module-files-append-module-files-d.patch b/debian/patches/11_module-files-append-module-files-d.patch
new file mode 100755 (executable)
index 0000000..a4cad02
--- /dev/null
@@ -0,0 +1,39 @@
+Index: pango1.0-1.16.0/pango/modules.c
+===================================================================
+--- pango1.0-1.16.0.orig/pango/modules.c       2007-03-07 11:16:16.000000000 +0100
++++ pango1.0-1.16.0/pango/modules.c    2007-03-07 11:16:26.000000000 +0100
+@@ -504,6 +504,11 @@
+   FILE *module_file;
+   char *file_str =  pango_config_key_get ("Pango/ModuleFiles");
++  char *module_files_d_str = g_build_filename (pango_get_lib_subdirectory (),
++                                             MODULE_VERSION,
++                                             "module-files.d",
++                                             NULL);
++  char *list_str;
+   char **files;
+   int n;
+@@ -514,7 +519,12 @@
+                                "pango.modules",
+                                NULL);
+-  files = pango_split_file_list (file_str);
++  list_str = g_strjoin (G_SEARCHPATH_SEPARATOR_S,
++                      file_str,
++                      module_files_d_str,
++                      NULL);
++
++  files = pango_split_file_list (list_str);
+   n = 0;
+   while (files[n])
+@@ -556,6 +566,8 @@
+     }
+   g_strfreev (files);
++  g_free (list_str);
++  g_free (module_files_d_str);
+   g_free (file_str);
+   dlloaded_engines = g_slist_reverse (dlloaded_engines);
diff --git a/debian/patches/12_module-files-append-compat-module-files-d.patch b/debian/patches/12_module-files-append-compat-module-files-d.patch
new file mode 100755 (executable)
index 0000000..a169607
--- /dev/null
@@ -0,0 +1,59 @@
+Index: pango1.0-1.16.0/pango/modules.c
+===================================================================
+--- pango1.0-1.16.0.orig/pango/modules.c       2007-03-07 11:16:26.000000000 +0100
++++ pango1.0-1.16.0/pango/modules.c    2007-03-07 11:16:33.000000000 +0100
+@@ -24,6 +24,7 @@
+ #include <string.h>
+ #include <limits.h>
+ #include <errno.h>
++#include <unistd.h>
+ #include <gmodule.h>
+ #include <glib/gstdio.h>
+@@ -508,6 +509,18 @@
+                                              MODULE_VERSION,
+                                              "module-files.d",
+                                              NULL);
++
++#if defined(__linux__) && defined (__i386__)
++  char *compat_module_files_d_str = g_build_filename ("/usr/lib32/pango",
++                                             MODULE_VERSION,
++                                             "module-files.d",
++                                             NULL);
++#elif defined(__linux__) && ( defined (__x86_64__) || defined(__ia64__) )
++  char *compat_module_files_d_str = g_build_filename ("/usr/lib64/pango",
++                                             MODULE_VERSION,
++                                             "module-files.d",
++                                             NULL);
++#endif
+   char *list_str;
+   char **files;
+   int n;
+@@ -519,6 +532,17 @@
+                                "pango.modules",
+                                NULL);
++#if defined(__linux__) && ( defined(__i386__) || defined (__x86_64__) || defined(__ia64__) )
++  /* prefer compat_module_files_d_str over module_files_d_str on the above
++   * arches if it's usable */
++  if (! g_access(compat_module_files_d_str, R_OK|X_OK))
++      list_str = g_strjoin (G_SEARCHPATH_SEPARATOR_S,
++                          file_str,
++                          compat_module_files_d_str,
++                          NULL);
++  else /* continued below */
++#endif
++
+   list_str = g_strjoin (G_SEARCHPATH_SEPARATOR_S,
+                       file_str,
+                       module_files_d_str,
+@@ -568,6 +592,9 @@
+   g_strfreev (files);
+   g_free (list_str);
+   g_free (module_files_d_str);
++#if defined(__linux__) && ( defined(__i386__) || defined (__x86_64__) || defined(__ia64__) )
++  g_free (compat_module_files_d_str);
++#endif
+   g_free (file_str);
+   dlloaded_engines = g_slist_reverse (dlloaded_engines);
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100755 (executable)
index 0000000..ab56870
--- /dev/null
@@ -0,0 +1,3 @@
+10_scan-module-files-in-dirs.patch
+11_module-files-append-module-files-d.patch
+12_module-files-append-compat-module-files-d.patch
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..eb654ca
--- /dev/null
@@ -0,0 +1,313 @@
+#!/usr/bin/make -f
+
+DISABLE_UPDATE_UPLOADERS := 1
+#include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk
+-include /usr/share/gnome-pkg-tools/1/rules/gnome-get-source.mk
+
+GNOME_MODULE := pango
+
+STAMP_DIR := debian/stampdir
+
+PATCH_DIR := debian/patches
+
+# rules in this debian/rules Makefile can be built concurrently as well as
+# upstream rules in Makefile; all $(MAKE) invocations will inherit this flag,
+# if you recurse into debian/rules ($(MAKE)
+# -f debian/rules in rules), you need to pass a flag to avoid adding "-jX" when
+# the childs encounters this line
+DEB_BUILD_OPTIONS_PARALLEL ?= $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+MAKEFLAGS += $(if $(DEB_BUILD_OPTIONS_PARALLEL),-j$(DEB_BUILD_OPTIONS_PARALLEL))
+
+# default CFLAGS; these can be expanded with $(call flavor_get, )
+CFLAGS += -Wall
+
+# default LDFLAGS; these can be expanded with $(call flavor_get, )
+# Ensure the build aborts when there are still references to undefined
+# symbols
+LDFLAGS += -Wl,-z,defs
+
+# Make the linker work a bit harder so dynamic loading can be done faster
+LDFLAGS += -Wl,-O1 -Wl,--hash-style=both -Wl,--as-needed
+
+DEBVERSION := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p')
+VERSION := $(shell echo $(DEBVERSION) | sed -e 's/-[^-]*$$//')
+APIVER := 1.0
+#SONAME := 0
+MODVER := 1.6.0
+SHVERSION := 1.25.5
+
+DEB_HOST_ARCH      ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
+DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+#DEB_BUILD_GNU_TYPE = $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+# relative libdir
+ifneq (,$(findstring multiarch,$(DEB_BUILD_OPTIONS)))
+LIBDIR := usr/lib/$(DEB_HOST_GNU_TYPE)
+else
+LIBDIR := usr/lib
+endif
+
+# relative Pango Modules Path (separated by ":")
+MODULES_PATH := $(LIBDIR)/pango/$(MODVER)/modules
+
+# relative directory to store the generated Pango Module File
+MODULE_FILES_D := $(LIBDIR)/pango/$(MODVER)/module-files.d
+
+# Pango Module API version virtual Provide
+ifneq (,$(findstring multiarch,$(DEB_BUILD_OPTIONS)))
+PANGO_MODVER_DEP := pango$(APIVER)-multiarch-modver-$(MODVER)
+else
+PANGO_MODVER_DEP := pango$(APIVER)-modver-$(MODVER)
+endif
+
+# package names
+#SHARED_PKG := libpango$(APIVER)-$(SONAME)
+SHARED_PKG := libpango$(APIVER)
+COMMON_PKG := libpango$(APIVER)-common
+DEV_PKG := libpango$(APIVER)-dev
+#DEBUG_PKG := libpango$(APIVER)-$(SONAME)-dbg
+DEBUG_PKG := libpango$(APIVER)-dbg
+
+# package groups, used in rule dependencies and in cleanup
+BINARY_INDEP_PKGS := $(COMMON_PKG)
+BINARY_ARCH_PKGS := $(SHARED_PKG) $(DEV_PKG) $(DEBUG_PKG)
+ALL_PKGS := $(BINARY_INDEP_PKGS) $(BINARY_ARCH_PKGS)
+
+# list of flavors we build; each gets a builddir, a configure pass (configure
+# args are defined below), a build pass, and an install pass (in two steps)
+FLAVORS := shared static
+
+# current flavor we're building; this is only expanded in flavor specific
+# targets
+current_flavor = $*
+
+# macro to get a value for the current flavor we're building; for example
+# when building the shared flavor, $(call flavor_get,CFLAGS) will expand to
+# shared_CFLAGS if it's set or to CFLAGS otherwise; pay attention to not adding
+# superfluous spaces when for the arguments of $(call ); only some vars can
+# be expanded in this way though
+flavor_get = $(or $($(current_flavor)_$(1)),$($(1)))
+
+# build dir for the current flavor; this is only expanded in flavor specific
+# targets
+builddir = $(buildbasedir)/$(current_flavor)
+buildbasedir = $(CURDIR)/debian/build
+
+# install dir for the current flavor; this is only expanded in flavor specific
+# targets
+installdir = $(installbasedir)/$(current_flavor)
+installbasedir = $(CURDIR)/debian/install
+
+PREFIX=/usr
+CFLAGS += -fPIC -rdynamic
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib
+
+# configure flags; these can be expanded with $(call flavor_get, )
+configure_flags := \
+               --prefix=$(PREFIX) \
+               --libdir=/$(LIBDIR) \
+               --mandir=\$${prefix}/share/man \
+               --infodir=\$${prefix}/share/info \
+               --sysconfdir=/etc \
+               --build=$(DEB_BUILD_GNU_TYPE) \
+               --with-x \
+               --x-includes=$(PREFIX)/include \
+               --x-libraries="$(PREFIX)/lib -lX11" \
+               --with-freetype-config=$(PREFIX)/bin/freetype-config \
+               --enable-freetype \
+               --disable-glibtest \
+               --enable-explicit-deps=yes \
+               --enable-gtk-doc=no \
+               ac_cv_lib_cairo_cairo_xlib_surface_create=yes \
+               ac_cv_lib_cairo_cairo_ft_scaled_font_lock_face=yes
+
+
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+       configure_flags += --host=$(DEB_HOST_GNU_TYPE)
+endif
+
+# default is to enable shared and disable static
+static_configure_flags := $(configure_flags) \
+                       --disable-shared \
+                       --with-included-modules \
+                       --enable-static
+
+# optional optimized flavor for some arches
+OPTLIBDIR :=
+# sample code:
+#ifneq ($(filter $(DEB_HOST_ARCH), armel),)
+#FLAVORS += opt
+#OPTLIBDIR := $(LIBDIR)/vfp
+#opt_CFLAGS += $(CFLAGS) -mfpu=vfp -mfloat-abi=softfp
+#opt_configure_flags := $(or $(shared_configure_flags),$(configure_flags))
+#endif
+
+# list of flavors to run the test suite on
+CHECK_FLAVORS := $(filter opt shared, $(FLAVORS))
+
+# macro computing the list of 'debian/<pkg>.*" files which have a corresponding
+# ".in" file; pass the list of packages in $(1)
+dh_subst_files = $(patsubst %.in,%,$(wildcard $(addprefix debian/, $(addsuffix *.in, $(1)))))
+
+debian/dh_pangomodules.1: debian/dh_pangomodules
+       cd debian && pod2man -c "Pango" -r "$(DEBVERSION)" dh_pangomodules dh_pangomodules.1
+
+patch: $(STAMP_DIR)/patch-stamp
+
+$(STAMP_DIR)/patch-stamp:
+       dh_testdir
+       # apply patches
+       QUILT_PATCHES=$(PATCH_DIR) quilt --quiltrc /dev/null push -a || test $$? = 2
+       # backup the original (potentially patched) files to restore them in
+       # the clean target
+       -test -r config.sub && cp config.sub config.sub.orig
+       -test -r config.guess && cp config.guess config.guess.orig
+       -test -r /usr/share/misc/config.sub && \
+               cp -f /usr/share/misc/config.sub config.sub
+       -test -r /usr/share/misc/config.guess && \
+               cp -f /usr/share/misc/config.guess config.guess
+       -mkdir -p $(STAMP_DIR)
+       touch $@
+
+$(STAMP_DIR)/configure-stamp-%: $(STAMP_DIR)/patch-stamp
+       dh_testdir
+       mkdir -p $(builddir)
+       cd $(builddir) && \
+               CFLAGS="$(call flavor_get,CFLAGS)" \
+               LDFLAGS="$(call flavor_get,LDFLAGS)" \
+                       $(CURDIR)/autogen.sh $(call flavor_get,configure_flags)
+       touch $@
+
+configure: $(addprefix $(STAMP_DIR)/configure-stamp-, $(FLAVORS))
+
+$(STAMP_DIR)/build-stamp-%: $(STAMP_DIR)/configure-stamp-%
+       dh_testdir
+       LD_LIBRARY_PATH=$(builddir)/pango/.libs:$(LD_LIBRARY_PATH) \
+               $(MAKE) -C $(builddir)
+       touch $@
+
+build: $(addprefix $(STAMP_DIR)/build-stamp-, $(FLAVORS))
+
+$(STAMP_DIR)/check-stamp-%: $(STAMP_DIR)/build-stamp-%
+       dh_testdir
+       # setting LD_LIBRARY_PATH for "make check" might be needed in the
+       # future, but doesn't seem necessary right now
+       #LD_LIBRARY_PATH=$(builddir)/pango/.libs:$(LD_LIBRARY_PATH)
+       # testsuite failures are ignored
+       -$(MAKE) -C $(builddir) check
+       touch $@
+
+check: $(addprefix $(STAMP_DIR)/check-stamp-, $(CHECK_FLAVORS))
+
+$(STAMP_DIR)/install-stamp-%: $(STAMP_DIR)/build-stamp-%
+       mkdir -p $(installdir)
+       $(MAKE) -C $(builddir) install \
+               DESTDIR=$(installdir)
+       touch $@
+
+install: $(addprefix $(STAMP_DIR)/install-stamp-, $(FLAVORS))
+
+# gross kludge to force control generation with the %.in target
+clean::
+       touch debian/control.in
+
+# always update debian/foo (do not rely on the timestamp of debian/control
+# versus debian/control.in which might break with svn, svn-buildpackage, or
+# dpkg-source)
+debian/%: debian/%.in
+       dh_testdir
+       sed \
+               -e 's#@APIVER@#$(APIVER)#g' \
+               -e 's#@VERSION@#$(VERSION)#g' \
+               -e 's#@PANGO_MODVER_DEP@#$(PANGO_MODVER_DEP)#g' \
+               -e 's#@LIBDIR@#$(LIBDIR)#g' \
+               -e 's#@OPTLIBDIR@#$(OPTLIBDIR)#g' \
+               -e 's#@MODULES_PATH@#$(MODULES_PATH)#g' \
+               -e 's#@MODULE_FILES_D@#$(MODULE_FILES_D)#g' \
+               -e 's#@GNOME_TEAM@#$(UPLOADERS)#g' \
+               $@.in \
+               $(wildcard $(if $(filter opt,$(FLAVORS)),$@.opt)) \
+               >$@
+
+clean:: debian/control
+       dh_testdir
+       dh_testroot
+       # remove install and build dirs
+       rm -rf $(installbasedir)
+       rm -rf $(buildbasedir)
+       # restore files from backup (before unpatching)
+       -test -r config.sub.orig && mv -f config.sub.orig config.sub
+       -test -r config.guess.orig && mv -f config.guess.orig config.guess
+       # unapply patches, if any
+       QUILT_PATCHES=$(PATCH_DIR) quilt --quiltrc /dev/null pop -a -R || test $$? = 2
+       -rm -rf .pc
+       -rm -rf $(STAMP_DIR)
+       -rm -f $(call dh_subst_files,$(ALL_PKGS))
+       -rm -f debian/dh_pangomodules debian/dh_pangomodules.1
+       dh_clean
+
+maybe_check = $(if $(findstring nocheck,$(DEB_BUILD_OPTIONS)),,check)
+
+binary-indep: build $(maybe_check) install $(call dh_subst_files,$(BINARY_INDEP_PKGS))
+       dh_testdir
+       dh_testroot
+       dh_installdirs -i
+       dh_install -i
+       dh_installchangelogs -i ChangeLog ChangeLog.*
+       dh_installdocs -i NEWS README
+       dh_installman -i
+       dh_link -i
+       dh_compress -i -X.sgml -X.devhelp
+       dh_fixperms -i
+       dh_installdeb -i
+       dh_gencontrol -i
+       dh_md5sums -i
+       dh_builddeb -i
+
+binary-arch: build $(maybe_check) install $(call dh_subst_files,$(BINARY_ARCH_PKGS)) debian/dh_pangomodules debian/dh_pangomodules.1
+       dh_testdir
+       dh_testroot
+       dh_install -s
+       # empty the dependency_libs in the *.la files
+       sed -i "/dependency_libs/ s/'.*'/''/" \
+               debian/$(DEV_PKG)/$(LIBDIR)/*.la
+       dh_installchangelogs -s -N$(SHARED_PKG) -N$(DEV_PKG) ChangeLog ChangeLog.*
+       dh_installdocs -s -N$(SHARED_PKG) -N$(DEV_PKG) NEWS README
+       dh_installdefoma -s
+       # fix the permissions of the development package because it ships
+       # dh_pangomodules which we need to invoke in this build
+       dh_fixperms -p$(DEV_PKG)
+       # generate $(SHARED_PKG).modules for the shared lib
+       LD_LIBRARY_PATH=$(CURDIR)/debian/$(SHARED_PKG)/$(LIBDIR):$(LD_LIBRARY_PATH) \
+       PANGO_QUERYMODULES=$(buildbasedir)/shared/pango/pango-querymodules \
+               debian/$(DEV_PKG)/usr/bin/dh_pangomodules \
+                       -p$(SHARED_PKG) -k
+       dh_installinfo -s
+       dh_installman -s
+       dh_link -s
+       dh_strip -s --dbg-package=$(DEBUG_PKG)
+       dh_strip
+       dh_compress -s -X.sgml -X.devhelp
+       dh_fixperms -s
+       dh_makeshlibs -p$(SHARED_PKG) \
+               -X$(MODULES_PATH) \
+               -V '$(SHARED_PKG) (>= $(SHVERSION))' \
+               -- -c4
+       dh_installdeb -s
+       # override shlibs for libraries from this source before computing
+       # dependencies of packages generated from this source; we already have
+       # inter-dependencies expressed manually in the control file, we do not
+       # need the shlibs to add duplicates
+#      sed -nr -e 's/(([^ ]+: )?([^ ]+) ([^ ]+)) .*/\1/p' \
+#              debian/*/DEBIAN/shlibs \
+#              >debian/shlibs.local
+       dh_shlibdeps -s
+       dh_shlibdeps
+       -rm -f debian/shlibs.local
+       dh_gencontrol -s
+       dh_md5sums -s
+       dh_builddeb -s
+
+binary: binary-indep binary-arch
+.PHONY: patch configure build check install clean binary-indep binary-arch binary
diff --git a/debian/update-pangox-aliases b/debian/update-pangox-aliases
new file mode 100755 (executable)
index 0000000..804652d
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/perl -w
+
+use strict;
+use POSIX;
+use vars qw(%UNSUPPORTED_XLFD);
+
+my $PangoAlias = '/var/lib/defoma/pango.d/pangox.aliases';
+my $ConfFile = '/etc/defoma/config/pango.conf';
+my @clean = ("/usr/bin/defoma-app", "clean", "pango");
+my @update = ("/usr/bin/defoma-app", "update", "pango");
+
+# write section
+sub write_section {
+       my $file = shift;
+       my $family = shift;
+
+       open (F, ">> $file");
+       print F "$family normal normal normal normal \\\n\t\"";
+       if (exists ($UNSUPPORTED_XLFD {"$family-normal-normal-normal-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-normal-normal-normal-normal"};
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-medium-r-normal--*-*-*-*-*-*-*-*\"\n\n";
+
+       print F "$family italic normal normal normal \\\n\t\"";
+       if (exists ($UNSUPPORTED_XLFD {"$family-italic-normal-normal-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-italic-normal-normal-normal"};
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-medium-i-normal--*-*-*-*-*-*-*-*\"\n\n";
+
+       print F "$family normal normal bold normal \\\n\t\"";
+       if (exists ($UNSUPPORTED_XLFD {"$family-normal-normal-bold-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-normal-normal-bold-normal"};
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-bold-r-normal--*-*-*-*-*-*-*-*\"\n\n";
+
+       print F "$family italic normal bold normal \\\n\t\"";
+       if (exists ($UNSUPPORTED_XLFD {"$family-italic-normal-bold-normal"})) {
+               print F $UNSUPPORTED_XLFD {"$family-italic-normal-bold-normal"};
+               print F ",\\\n\t";
+       }
+       print F "-*-fixed-bold-i-normal--*-*-*-*-*-*-*-*\"\n\n";
+       close F;
+}
+
+system (@clean) == 0 or die "Failed to clean up for defoma: $?";
+system (@update) == 0 or die "Failed to update for defoma: $?";
+
+if ( ! -e $PangoAlias ) {
+       print "*** You don't have any defomized font packages.\n";
+       print "*** So we are trying to force to generate pangox.aliases...\n";
+
+       do "$ConfFile" or die ("$@\n");
+
+       open (F, "> $PangoAlias.bak") or die "Can't create $PangoAlias.bak: $?";
+       print F "## THIS FILE IS GENERATED BY UPDATE-PANGOX-ALIAS, DO NOT EDIT\n\n";
+       close F;
+
+       ## Sans
+       write_section ("$PangoAlias.bak", "sans");
+
+       ## Serif
+       write_section ("$PangoAlias.bak", "serif");
+
+       ## Monospace
+       write_section ("$PangoAlias.bak", "monospace");
+
+       rename ("$PangoAlias.bak", "$PangoAlias");
+}
+
+1;
diff --git a/debian/update-pangox-aliases.8 b/debian/update-pangox-aliases.8
new file mode 100755 (executable)
index 0000000..76dab9a
--- /dev/null
@@ -0,0 +1,30 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH UPDATE\-PANGOX\-ALIASES 8 "24 March 2002"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+update\-pangox\-aliases \- Update wrapper script for the Pango X aliases file.
+.SH SYNOPSIS
+.B update\-pangox\-aliases
+.SH DESCRIPTION
+\fIupdate\-pangox\-aliases\fP is a wrapper script for updating /var/lib/defoma/pango.d/pangox.aliases via \fIdefoma\fP.
+.br
+If you don't have any defomized font packages, it will generate that file using default XLFD which pango's defoma script has.
+.SH SEE ALSO
+.BR defoma (1)
+.SH AUTHOR
+This manual page was written by Akira TAGOH <tagoh@debian.org>,
+for the Debian GNU/Linux system.
diff --git a/debian/update-pangox-aliases.fr.8 b/debian/update-pangox-aliases.fr.8
new file mode 100755 (executable)
index 0000000..6bfcd07
--- /dev/null
@@ -0,0 +1,35 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH UPDATE\-PANGOX\-ALIASES 8 "24 mars 2002"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+update\-pangox\-aliases \- Script de mise à jour du fichier
+d'alias X de Pango.
+.SH SYNOPSIS
+.B update\-pangox\-aliases
+.SH DESCRIPTION
+\fIupdate\-pangox\-aliases\fP est un script pour la mise à jour de 
+/var/lib/defoma/pango.d/pangox.aliases via \fIdefoma\fP.
+.br
+Si vous n'avez pas de paquets de polices defoma, il génèrera ce fichier en
+utilisant XLFD par défaut contenu dans le script pango de defoma.
+.SH VOIR AUSSI
+.BR defoma (1)
+.SH AUTEUR
+Cette page de manuel a été écrite par Akira TAGOH <tagoh@debian.org>,
+pour le système Debian GNU/Linux.
+.SH TRADUCTION
+Julien Louis <leonptitlouis@ifrance.com>
diff --git a/debian/watch b/debian/watch
new file mode 100755 (executable)
index 0000000..29cfc34
--- /dev/null
@@ -0,0 +1,3 @@
+version=3
+http://ftp.gnome.org/pub/GNOME/sources/pango/([\d\.]+[24680])/pango-(.*)\.tar\.gz \
+        debian uupdate
diff --git a/depcomp b/depcomp
new file mode 100755 (executable)
index 0000000..04701da
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,530 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2005-07-09.11
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mecanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100755 (executable)
index 0000000..9e5b606
--- /dev/null
@@ -0,0 +1,162 @@
+## Process this file with automake to create Makefile.in.
+
+# The name of the module.
+DOC_MODULE=pango
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=pango-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="PANGO_DISABLE_DEPRECATED"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=../pango
+
+# Used for dependencies
+HFILE_GLOB=$(top_srcdir)/pango/*.h
+CFILE_GLOB=$(top_srcdir)/pango/*.c
+
+# Headers to ignore
+IGNORE_HFILES=                 \
+       ftglue.h                \
+       mini-fribidi            \
+       opentype                \
+       module-defs.h           \
+       modules.h               \
+       pangoatsui-private.h    \
+       pangocairo-private.h    \
+       pangocairo-fc.h         \
+       pangocairo-win32.h      \
+       pangocairo-atsui.h      \
+       pango-color-table.h     \
+       pango-engine-private.h  \
+       pango-impl-utils.h      \
+       pango-glyph-item-private.h      \
+       pango-layout-private.h  \
+       pango-script-table.h    \
+       pango-script-private.h  \
+       pangofc-private.h       \
+       pangoft2-private.h      \
+       pangowin32-private.h    \
+       pangoatsui-private.h    \
+       pangox-private.h        \
+       pangoxft-private.h      \
+       pango-ot-private.h      \
+       pango-script-lang-table.h       \
+       pango-language-sample-table.h
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES =                     \
+       -DPANGO_ENABLE_BACKEND  \
+       -DPANGO_ENABLE_ENGINE   \
+       -I$(top_srcdir)         \
+       $(GLIB_CFLAGS)          \
+       $(XFT_CFLAGS)           \
+       $(CAIRO_CFLAGS)         \
+       $(FREETYPE_CFLAGS)      \
+       $(X_CFLAGS)
+
+# libpangoxft.la and/or libpangocairo.la pull in libpango.la
+# and libpangoft2.la;
+# We're assuming here that we'll only regenerate the
+# HTML docs on Unix. We don't get introspection on Win32
+# specific types, but that isn't a big deal.
+
+GTKDOC_LIBS =
+
+if HAVE_XFT
+GTKDOC_LIBS += $(top_builddir)/pango/libpangoxft-1.0.la
+endif
+
+if HAVE_CAIRO
+GTKDOC_LIBS += $(top_builddir)/pango/libpangocairo-1.0.la
+endif
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+
+# Non-autogenerated SGML files to be included in $(DOC_MAIN_SGML_FILE)
+content_files =                                \
+       pango_markup.sgml               \
+       version.xml                     \
+       pango-querymodules.xml
+
+# Images to copy into HTML directory
+HTML_IMAGES =                          \
+       layout.gif                      \
+       rotated-text.png
+
+if ENABLE_DOC_CROSS_REFERENCES
+# Extra options to supply to gtkdoc-fixref
+FIXXREF_OPTIONS=--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+       --extra-dir=$(CAIRO_PREFIX)/share/gtk-doc/html/cairo
+endif
+
+include $(top_srcdir)/gtk-doc.make
+
+# This line really belongs in gtk-doc.mk
+$(REPORT_FILES): sgml-build.stamp
+
+pango.types:
+       @echo "Rebuilding $@"
+       @LANG=C; LIST=$$(grep 'pango_[_a-zA-Z0-9]*_get_type' $(HFILE_GLOB) | grep -v '\(private\|atsui\|win32\)' | sed 's/\([^:]*:\).*\(pango[_a-zA-Z0-9]*_get_type\).*/\1\2/') && \
+       echo "$$LIST" | sed 's/.*\/\(pango\/.*\):.*/#include <\1>/' | sort -u > $@.tmp && \
+       echo >> $@.tmp && \
+       echo "$$LIST" | cut -d : -f 2 | sort -u >> $@.tmp && \
+       mv $@.tmp $@
+
+BUILT_SOURCES = pango.types
+
+########################################################################
+
+man_MANS = pango-querymodules.1 
+if ENABLE_MAN
+.xml.1:
+       @XSLTPROC@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+dist-local-check-mans-enabled:
+       @if grep "Man generation disabled" $(man_MANS) >/dev/null; then $(RM) $(man_MANS); fi
+else
+$(man_MANS):
+       @echo Man generation disabled.  Creating dummy $@.  Configure with --enable-man to enable it.
+       @echo Man generation disabled.  Remove this file, configure with --enable-man, and rebuild Pango > $@
+dist-local-check-mans-enabled:
+       @echo "*** --enable-man must be used in order to make dist"
+       @false
+endif
+
+MAINTAINERCLEANFILES = $(man_MANS) $(BUILT_SOURCES)
+EXTRA_DIST +=                          \
+       layout.fig                      \
+       layout.eps                      \
+       version.xml.in                  \
+       check.docs                      \
+       pango.types                     \
+       $(man_MANS)
+
+# force doc rebulid after configure
+dist-hook-local: dist-local-check-mans-enabled dist-local-check-no-cross-references pango-docs-clean all-local
+
+pango-docs-clean: clean
+       cd $(srcdir) && rm -rf xml html
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_DOC_CROSS_REFERENCES
+dist-local-check-no-cross-references:
+       @echo "*** --disable-doc-cross-references must be used in order to make dist"
+       @false
+else
+dist-local-check-no-cross-references:
+endif
+
+.PHONY: dist-local-check-no-cross-references
+
+if ENABLE_GTK_DOC
+TESTS = check.docs
+TESTS_ENVIRONMENT = srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" MAKE="$(MAKE) $(AM_MAKEFLAGS)" DOC_MODULE="$(DOC_MODULE)" REPORT_FILES="$(REPORT_FILES)"
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/docs/Makefile.in b/docs/Makefile.in
new file mode 100644 (file)
index 0000000..2225b7b
--- /dev/null
@@ -0,0 +1,911 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_XFT_TRUE@am__append_1 = $(top_builddir)/pango/libpangoxft-1.0.la
+@HAVE_CAIRO_TRUE@am__append_2 = $(top_builddir)/pango/libpangocairo-1.0.la
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make
+subdir = docs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = version.xml
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# The name of the module.
+DOC_MODULE = pango
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE = pango-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS = --deprecated-guards="PANGO_DISABLE_DEPRECATED"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR = ../pango
+
+# Used for dependencies
+HFILE_GLOB = $(top_srcdir)/pango/*.h
+CFILE_GLOB = $(top_srcdir)/pango/*.c
+
+# Headers to ignore
+IGNORE_HFILES = \
+       ftglue.h                \
+       mini-fribidi            \
+       opentype                \
+       module-defs.h           \
+       modules.h               \
+       pangoatsui-private.h    \
+       pangocairo-private.h    \
+       pangocairo-fc.h         \
+       pangocairo-win32.h      \
+       pangocairo-atsui.h      \
+       pango-color-table.h     \
+       pango-engine-private.h  \
+       pango-impl-utils.h      \
+       pango-glyph-item-private.h      \
+       pango-layout-private.h  \
+       pango-script-table.h    \
+       pango-script-private.h  \
+       pangofc-private.h       \
+       pangoft2-private.h      \
+       pangowin32-private.h    \
+       pangoatsui-private.h    \
+       pangox-private.h        \
+       pangoxft-private.h      \
+       pango-ot-private.h      \
+       pango-script-lang-table.h       \
+       pango-language-sample-table.h
+
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+INCLUDES = \
+       -DPANGO_ENABLE_BACKEND  \
+       -DPANGO_ENABLE_ENGINE   \
+       -I$(top_srcdir)         \
+       $(GLIB_CFLAGS)          \
+       $(XFT_CFLAGS)           \
+       $(CAIRO_CFLAGS)         \
+       $(FREETYPE_CFLAGS)      \
+       $(X_CFLAGS)
+
+
+# libpangoxft.la and/or libpangocairo.la pull in libpango.la
+# and libpangoft2.la;
+# We're assuming here that we'll only regenerate the
+# HTML docs on Unix. We don't get introspection on Win32
+# specific types, but that isn't a big deal.
+GTKDOC_LIBS = $(am__append_1) $(am__append_2)
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS = --sgml-mode --output-format=xml
+
+# Non-autogenerated SGML files to be included in $(DOC_MAIN_SGML_FILE)
+content_files = \
+       pango_markup.sgml               \
+       version.xml                     \
+       pango-querymodules.xml
+
+
+# Images to copy into HTML directory
+HTML_IMAGES = \
+       layout.gif                      \
+       rotated-text.png
+
+
+# Extra options to supply to gtkdoc-fixref
+@ENABLE_DOC_CROSS_REFERENCES_TRUE@FIXXREF_OPTIONS = --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+@ENABLE_DOC_CROSS_REFERENCES_TRUE@     --extra-dir=$(CAIRO_PREFIX)/share/gtk-doc/html/cairo
+
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE)
+EXTRA_DIST = $(content_files) $(HTML_IMAGES) $(DOC_MAIN_SGML_FILE) \
+       $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt \
+       layout.fig layout.eps version.xml.in check.docs pango.types \
+       $(man_MANS)
+DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+          $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS)
+BUILT_SOURCES = pango.types
+
+########################################################################
+man_MANS = pango-querymodules.1 
+MAINTAINERCLEANFILES = $(man_MANS) $(BUILT_SOURCES)
+@ENABLE_GTK_DOC_TRUE@TESTS = check.docs
+@ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = srcdir="$(srcdir)" top_srcdir="$(top_srcdir)" MAKE="$(MAKE) $(AM_MAKEFLAGS)" DOC_MODULE="$(DOC_MODULE)" REPORT_FILES="$(REPORT_FILES)"
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .1 .xml
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  docs/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+         else file=$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list='$(TESTS)'; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *" $$tst "*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *" $$tst "*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="All $$all tests passed"; \
+           else \
+             banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all tests failed"; \
+           else \
+             banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           skipped="($$skip tests were not run)"; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/..
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(MANS) all-local
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-man
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+       maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+       clean-generic clean-libtool clean-local dist-hook distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-data-local install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-man1 install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       maintainer-clean-local mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-info-am uninstall-local uninstall-man uninstall-man1
+
+
+@ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp
+@ENABLE_GTK_DOC_FALSE@all-local:
+
+docs: html-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+       @echo 'gtk-doc: Scanning header files'
+       @-chmod -R u+w $(srcdir)
+       if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+       else \
+           cd $(srcdir) ; \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       cd $(srcdir) && \
+         gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+       touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp
+       @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+       @echo 'gtk-doc: Rebuilding template files'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+       @true
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+       @echo 'gtk-doc: Building XML'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && \
+       gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+       touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+       @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       @echo 'gtk-doc: Building HTML'
+       @-chmod -R u+w $(srcdir)
+       rm -rf $(srcdir)/html 
+       mkdir $(srcdir)/html
+       cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+       @echo 'gtk-doc: Fixing cross-references' 
+       cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+       touch html-build.stamp
+
+##############
+
+clean-local:
+       rm -f *~ *.bak
+       rm -rf .libs
+
+maintainer-clean-local: clean
+       cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+install-data-local:
+       installfiles=`echo $(srcdir)/html/*`; \
+       if test "$$installfiles" = '$(srcdir)/html/*'; \
+       then echo '-- Nothing to install' ; \
+       else \
+         $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+         for i in $$installfiles; do \
+           echo '-- Installing '$$i ; \
+           $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+         done; \
+         echo '-- Installing $(srcdir)/html/index.sgml' ; \
+         $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+       fi
+
+uninstall-local:
+       rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+@ENABLE_GTK_DOC_FALSE@ @false
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+       mkdir $(distdir)/tmpl
+       mkdir $(distdir)/xml
+       mkdir $(distdir)/html
+       -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       -cp $(srcdir)/xml/*.xml $(distdir)/xml
+       -cp $(srcdir)/html/* $(distdir)/html
+       if test -f $(srcdir)/$(DOC_MODULE).types; then \
+         cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \
+       fi
+
+.PHONY : dist-hook-local docs
+
+# This line really belongs in gtk-doc.mk
+$(REPORT_FILES): sgml-build.stamp
+
+pango.types:
+       @echo "Rebuilding $@"
+       @LANG=C; LIST=$$(grep 'pango_[_a-zA-Z0-9]*_get_type' $(HFILE_GLOB) | grep -v '\(private\|atsui\|win32\)' | sed 's/\([^:]*:\).*\(pango[_a-zA-Z0-9]*_get_type\).*/\1\2/') && \
+       echo "$$LIST" | sed 's/.*\/\(pango\/.*\):.*/#include <\1>/' | sort -u > $@.tmp && \
+       echo >> $@.tmp && \
+       echo "$$LIST" | cut -d : -f 2 | sort -u >> $@.tmp && \
+       mv $@.tmp $@
+@ENABLE_MAN_TRUE@.xml.1:
+@ENABLE_MAN_TRUE@      @XSLTPROC@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+@ENABLE_MAN_TRUE@dist-local-check-mans-enabled:
+@ENABLE_MAN_TRUE@      @if grep "Man generation disabled" $(man_MANS) >/dev/null; then $(RM) $(man_MANS); fi
+@ENABLE_MAN_FALSE@$(man_MANS):
+@ENABLE_MAN_FALSE@     @echo Man generation disabled.  Creating dummy $@.  Configure with --enable-man to enable it.
+@ENABLE_MAN_FALSE@     @echo Man generation disabled.  Remove this file, configure with --enable-man, and rebuild Pango > $@
+@ENABLE_MAN_FALSE@dist-local-check-mans-enabled:
+@ENABLE_MAN_FALSE@     @echo "*** --enable-man must be used in order to make dist"
+@ENABLE_MAN_FALSE@     @false
+
+# force doc rebulid after configure
+dist-hook-local: dist-local-check-mans-enabled dist-local-check-no-cross-references pango-docs-clean all-local
+
+pango-docs-clean: clean
+       cd $(srcdir) && rm -rf xml html
+
+#
+# Require gtk-doc when making dist
+#
+@ENABLE_DOC_CROSS_REFERENCES_TRUE@dist-local-check-no-cross-references:
+@ENABLE_DOC_CROSS_REFERENCES_TRUE@     @echo "*** --disable-doc-cross-references must be used in order to make dist"
+@ENABLE_DOC_CROSS_REFERENCES_TRUE@     @false
+@ENABLE_DOC_CROSS_REFERENCES_FALSE@dist-local-check-no-cross-references:
+
+.PHONY: dist-local-check-no-cross-references
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/docs/check.docs b/docs/check.docs
new file mode 100755 (executable)
index 0000000..1cf051b
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+if test -z "$DOC_MODULE"; then
+       # extract from Makefile
+       eval `grep '^DOC_MODULE' Makefile | sed 's/ //g'`
+       if test -z "$DOC_MODULE"; then
+               echo Failed extracting DOC_MODULE from Makefile 1>&2
+               echo Try setting DOC_MODULE env var manually 1>&2
+               exit 1
+       fi
+fi
+
+if test -n "$REPORT_FILES"; then
+       $MAKE $REPORT_FILES || exit 1
+fi
+
+test -z "$srcdir" && srcdir=.
+stat=0
+
+if test -f "$DOC_MODULE-undeclared.txt"; then
+       undeclared=`cat "$DOC_MODULE-undeclared.txt"`
+       if test -n "$undeclared"; then
+               echo Undeclared documentation symbols: 1>&2
+               cat "$DOC_MODULE-undeclared.txt" 1>&2
+               stat=1
+       fi
+fi >&2
+if test -f "$DOC_MODULE-unused.txt"; then
+       unused=`cat "$DOC_MODULE-unused.txt"`
+       if test -n "$unused"; then
+               echo Unused documentated symbols: 1>&2
+               cat "$DOC_MODULE-unused.txt" 1>&2
+               stat=1
+       fi
+fi >&2
+if test -f "$DOC_MODULE-undocumented.txt"; then
+       if grep '^0 symbols incomplete' "$DOC_MODULE-undocumented.txt" >/dev/null &&
+          grep '^0 not documented'     "$DOC_MODULE-undocumented.txt" >/dev/null; then
+               :
+       else
+               echo Incomplete or undocumented symbols: 1>&2
+               cat "$DOC_MODULE-undocumented.txt" 1>&2
+               stat=1
+       fi
+fi >&2
+
+exit $stat
diff --git a/docs/html/PangoEngineLang.html b/docs/html/PangoEngineLang.html
new file mode 100755 (executable)
index 0000000..ef28772
--- /dev/null
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PangoEngineLang</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="pango-Engines.html" title="Engines">
+<link rel="next" href="PangoEngineShape.html" title="PangoEngineShape">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Engines.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoEngineShape.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#PangoEngineLang.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#PangoEngineLang.description" class="shortcut">Description</a>
+                 | 
+                <a href="#PangoEngineLang.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="PangoEngineLang"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="PangoEngineLang.top_of_page"></a>PangoEngineLang</span></h2>
+<p>PangoEngineLang — Rendering-system independent script engines</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineLang.stability-level"></a><h2>Stability Level</h2>
+Unstable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<a name="PangoEngineLang.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="PangoEngineLang.html#PangoEngineLang-struct" title="PangoEngineLang">PangoEngineLang</a>;
+                    <a class="link" href="PangoEngineLang.html#PangoEngineLangClass" title="PangoEngineLangClass">PangoEngineLangClass</a>;
+#define             <a class="link" href="PangoEngineLang.html#PANGO-ENGINE-TYPE-LANG--CAPS" title="PANGO_ENGINE_TYPE_LANG">PANGO_ENGINE_TYPE_LANG</a>
+#define             <a class="link" href="PangoEngineLang.html#PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS" title="PANGO_ENGINE_LANG_DEFINE_TYPE()">PANGO_ENGINE_LANG_DEFINE_TYPE</a>       (name, prefix, class_init, instance_init)
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineLang.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a>
+         +----PangoEngineLang
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineLang.description"></a><h2>Description</h2>
+<p>
+The <em class="firstterm">language engines</em> are rendering-system independent
+engines that determine line, word, and character breaks for character strings.
+These engines are used in <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()"><code class="function">pango_break()</code></a>.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineLang.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoEngineLang-struct"></a><h3>PangoEngineLang</h3>
+<pre class="programlisting">typedef struct _PangoEngineLang PangoEngineLang;</pre>
+<p>
+The <a class="link" href="PangoEngineLang.html" title="PangoEngineLang"><span class="type">PangoEngineLang</span></a> class is implemented by engines that
+customize the rendering-system independent part of the
+Pango pipeline for a particular script or language. For
+instance, a custom <a class="link" href="PangoEngineLang.html" title="PangoEngineLang"><span class="type">PangoEngineLang</span></a> could be provided for
+Thai to implement the dictionary-based word boundary
+lookups needed for that language.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoEngineLangClass"></a><h3>PangoEngineLangClass</h3>
+<pre class="programlisting">typedef struct {
+  void (*script_break) (PangoEngineLang *engine,
+                       const char    *text,
+                       int            len,
+                       PangoAnalysis *analysis,
+                       PangoLogAttr  *attrs,
+                       int            attrs_len);
+} PangoEngineLangClass;
+</pre>
+<p>
+Class structure for <a class="link" href="PangoEngineLang.html" title="PangoEngineLang"><span class="type">PangoEngineLang</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="structfield"><code>script_break</code></em> ()</span></p></td>
+<td> Provides a custom implementation of <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()"><code class="function">pango_break()</code></a>.
+If <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, <a class="link" href="pango-Text-Processing.html#pango-default-break" title="pango_default_break ()"><code class="function">pango_default_break()</code></a> is used instead. If not <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, for
+Pango versions before 1.16 (module interface version before 1.6.0),
+this was called instead of <a class="link" href="pango-Text-Processing.html#pango-default-break" title="pango_default_break ()"><code class="function">pango_default_break()</code></a>, but in newer versions,
+<a class="link" href="pango-Text-Processing.html#pango-default-break" title="pango_default_break ()"><code class="function">pango_default_break()</code></a> is always called and this is called after that to
+allow tailoring the breaking results.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ENGINE-TYPE-LANG--CAPS"></a><h3>PANGO_ENGINE_TYPE_LANG</h3>
+<pre class="programlisting">#define PANGO_ENGINE_TYPE_LANG "PangoEngineLang"
+</pre>
+<p>
+A string constant defining the engine type
+for language engines.
+These engines derive from <a class="link" href="PangoEngineLang.html" title="PangoEngineLang"><span class="type">PangoEngineLang</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS"></a><h3>PANGO_ENGINE_LANG_DEFINE_TYPE()</h3>
+<pre class="programlisting">#define             PANGO_ENGINE_LANG_DEFINE_TYPE(name, prefix, class_init, instance_init)</pre>
+<p>
+Outputs the necessary code for GObject type registration for a
+<a class="link" href="PangoEngineLang.html" title="PangoEngineLang"><span class="type">PangoEngineLang</span></a> class defined in a module. Two static symbols
+are defined.
+</p>
+<p>
+</p>
+<pre class="programlisting">
+ static GType <em class="replaceable"><code>prefix</code></em>_type;
+ static void <em class="replaceable"><code>prefix</code></em>_register_type (GTypeModule module);
+</pre>
+<p>
+</p>
+<p>
+The <code class="function"><em class="replaceable"><code>prefix</code></em>, <code class="function">_register_type()</code></code>
+function should be called in your <a class="link" href="pango-Engines.html#script-engine-init" title="script_engine_init ()"><code class="function">script_engine_init()</code></a> function for
+each type that your module implements, and then your <a class="link" href="pango-Engines.html#script-engine-create" title="script_engine_create ()"><code class="function">script_engine_create()</code></a>
+function can create instances of the object as follows:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ PangoEngine *engine = g_object_new (<em class="replaceable"><code>prefix</code></em>_type, NULL);
+</pre></div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> Name of the the type to register (for example:, <code class="literal">ArabicEngineFc</code>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td> Prefix for symbols that will be defined (for example:, <code class="literal">arabic_engine_fc</code>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>class_init</code></em> :</span></p></td>
+<td> Class initialization function for the new type, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>instance_init</code></em> :</span></p></td>
+<td> Instance initialization function for the new type, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/PangoEngineShape.html b/docs/html/PangoEngineShape.html
new file mode 100755 (executable)
index 0000000..ffa20ff
--- /dev/null
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PangoEngineShape</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="PangoEngineLang.html" title="PangoEngineLang">
+<link rel="next" href="pango-Modules.html" title="Modules">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoEngineLang.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Modules.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#PangoEngineShape.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#PangoEngineShape.description" class="shortcut">Description</a>
+                 | 
+                <a href="#PangoEngineShape.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="PangoEngineShape"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="PangoEngineShape.top_of_page"></a>PangoEngineShape</span></h2>
+<p>PangoEngineShape — Rendering-system dependent script engines</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineShape.stability-level"></a><h2>Stability Level</h2>
+Unstable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<a name="PangoEngineShape.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="PangoEngineShape.html#PangoEngineShape-struct" title="PangoEngineShape">PangoEngineShape</a>;
+                    <a class="link" href="PangoEngineShape.html#PangoEngineShapeClass" title="PangoEngineShapeClass">PangoEngineShapeClass</a>;
+#define             <a class="link" href="PangoEngineShape.html#PANGO-ENGINE-TYPE-SHAPE--CAPS" title="PANGO_ENGINE_TYPE_SHAPE">PANGO_ENGINE_TYPE_SHAPE</a>
+#define             <a class="link" href="PangoEngineShape.html#PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS" title="PANGO_ENGINE_SHAPE_DEFINE_TYPE()">PANGO_ENGINE_SHAPE_DEFINE_TYPE</a>      (name, prefix, class_init, instance_init)
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineShape.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a>
+         +----PangoEngineShape
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineShape.description"></a><h2>Description</h2>
+<p>
+The <em class="firstterm">shape engines</em> are rendering-system dependent
+engines that convert character strings into glyph strings.
+These engines are used in <a class="link" href="pango-Text-Processing.html#pango-shape" title="pango_shape ()"><code class="function">pango_shape()</code></a>.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoEngineShape.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoEngineShape-struct"></a><h3>PangoEngineShape</h3>
+<pre class="programlisting">typedef struct _PangoEngineShape PangoEngineShape;</pre>
+<p>
+The <a class="link" href="PangoEngineShape.html" title="PangoEngineShape"><span class="type">PangoEngineShape</span></a> class is implemented by engines that
+customize the rendering-system dependent part of the
+Pango pipeline for a particular script or language.
+A <a class="link" href="PangoEngineShape.html" title="PangoEngineShape"><span class="type">PangoEngineShape</span></a> implementation is then specific to both
+a particular rendering system or group of rendering systems
+and to a particular script. For instance, there is one
+<a class="link" href="PangoEngineShape.html" title="PangoEngineShape"><span class="type">PangoEngineShape</span></a> implementation to handle shaping Arabic
+for Fontconfig-based backends.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoEngineShapeClass"></a><h3>PangoEngineShapeClass</h3>
+<pre class="programlisting">typedef struct {
+  void (*script_shape) (PangoEngineShape *engine,
+                       PangoFont        *font,
+                       const char       *text,
+                       int               length,
+                       const PangoAnalysis *analysis,
+                       PangoGlyphString *glyphs);
+  PangoCoverageLevel (*covers)   (PangoEngineShape *engine,
+                                 PangoFont        *font,
+                                 PangoLanguage    *language,
+                                 gunichar          wc);
+} PangoEngineShapeClass;
+</pre>
+<p>
+Class structure for <a class="link" href="PangoEngineShape.html" title="PangoEngineShape"><span class="type">PangoEngineShape</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>script_shape</code></em> ()</span></p></td>
+<td> Given a font, a piece of text, and a <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis"><span class="type">PangoAnalysis</span></a>
+  structure, converts characters to glyphs and positions the
+  resulting glyphs. The results are stored in the <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+  that is passed in. (The implementation should resize it
+  appropriately using <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-set-size" title="pango_glyph_string_set_size ()"><code class="function">pango_glyph_string_set_size()</code></a>). All fields
+  of the <em class="parameter"><code>log_clusters</code></em> and <em class="parameter"><code>glyphs</code></em> array must be filled in, with
+  the exception that Pango will automatically generate
+  <code class="literal">glyphs-&gt;glyphs[i].attr.is_cluster_start</code>
+  using the <em class="parameter"><code>log_clusters</code></em> array. Each input character must occur in one
+  of the output logical clusters;
+  if no rendering is desired for a character, this may involve
+  inserting glyphs with the <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> ID <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS" title="PANGO_GLYPH_EMPTY"><span class="type">PANGO_GLYPH_EMPTY</span></a>, which
+  is guaranteed never to render. If the shaping fails for any reason,
+  the shaper should return with an empty (zero-size) glyph string.
+  If the shaper has not set the size on the glyph string yet, simply
+  returning signals the failure too.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>covers</code></em> ()</span></p></td>
+<td> Returns the characters that this engine can cover
+  with a given font for a given language. If not overridden, the default
+  implementation simply returns the coverage information for the
+  font itself unmodified.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ENGINE-TYPE-SHAPE--CAPS"></a><h3>PANGO_ENGINE_TYPE_SHAPE</h3>
+<pre class="programlisting">#define PANGO_ENGINE_TYPE_SHAPE "PangoEngineShape"
+</pre>
+<p>
+A string constant defining the engine type
+for shaping engines.
+These engines derive from <a class="link" href="PangoEngineShape.html" title="PangoEngineShape"><span class="type">PangoEngineShape</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS"></a><h3>PANGO_ENGINE_SHAPE_DEFINE_TYPE()</h3>
+<pre class="programlisting">#define             PANGO_ENGINE_SHAPE_DEFINE_TYPE(name, prefix, class_init, instance_init)</pre>
+<p>
+Outputs the necessary code for GObject type registration for a
+<a class="link" href="PangoEngineShape.html" title="PangoEngineShape"><span class="type">PangoEngineShape</span></a> class defined in a module. Two static symbols
+are defined.
+</p>
+<p>
+</p>
+<pre class="programlisting">
+ static GType <em class="replaceable"><code>prefix</code></em>_type;
+ static void <em class="replaceable"><code>prefix</code></em>_register_type (GTypeModule module);
+</pre>
+<p>
+</p>
+<p>
+The <code class="function"><em class="replaceable"><code>prefix</code></em>, <code class="function">_register_type()</code></code>
+function should be called in your <a class="link" href="pango-Engines.html#script-engine-init" title="script_engine_init ()"><code class="function">script_engine_init()</code></a> function for
+each type that your module implements, and then your <a class="link" href="pango-Engines.html#script-engine-create" title="script_engine_create ()"><code class="function">script_engine_create()</code></a>
+function can create instances of the object as follows:
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+ PangoEngine *engine = g_object_new (<em class="replaceable"><code>prefix</code></em>_type, NULL);
+</pre></div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> Name of the the type to register (for example:, <code class="literal">ArabicEngineFc</code>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>prefix</code></em> :</span></p></td>
+<td> Prefix for symbols that will be defined (for example:, <code class="literal">arabic_engine_fc</code>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>class_init</code></em> :</span></p></td>
+<td> Class initialization function for the new type, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>instance_init</code></em> :</span></p></td>
+<td> Instance initialization function for the new type, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/PangoFcDecoder.html b/docs/html/PangoFcDecoder.html
new file mode 100755 (executable)
index 0000000..60de760
--- /dev/null
@@ -0,0 +1,234 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PangoFcDecoder</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="PangoFcFont.html" title="PangoFcFont">
+<link rel="next" href="pango-OpenType-Font-Handling.html" title="OpenType Font Handling">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoFcFont.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-OpenType-Font-Handling.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#PangoFcDecoder.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#PangoFcDecoder.description" class="shortcut">Description</a>
+                 | 
+                <a href="#PangoFcDecoder.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="PangoFcDecoder"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="PangoFcDecoder.top_of_page"></a>PangoFcDecoder</span></h2>
+<p>PangoFcDecoder — Custom font encoding handling</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="PangoFcDecoder.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="PangoFcDecoder.html#PangoFcDecoder-struct" title="PangoFcDecoder">PangoFcDecoder</a>;
+                    <a class="link" href="PangoFcDecoder.html#PangoFcDecoderClass" title="PangoFcDecoderClass">PangoFcDecoderClass</a>;
+FcCharSet *         <a class="link" href="PangoFcDecoder.html#pango-fc-decoder-get-charset" title="pango_fc_decoder_get_charset ()">pango_fc_decoder_get_charset</a>        (<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *decoder,
+                                                         <a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *fcfont);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="PangoFcDecoder.html#pango-fc-decoder-get-glyph" title="pango_fc_decoder_get_glyph ()">pango_fc_decoder_get_glyph</a>          (<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *decoder,
+                                                         <a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *fcfont,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"
+>guint32</a> wc);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcDecoder.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoFcDecoder
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcDecoder.description"></a><h2>Description</h2>
+<p>
+PangoFcDecoder represents a decoder that an application provides
+for handling a font that is encoded in a custom way.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcDecoder.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoFcDecoder-struct"></a><h3>PangoFcDecoder</h3>
+<pre class="programlisting">typedef struct _PangoFcDecoder PangoFcDecoder;</pre>
+<p>
+<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a> is a virtual base class that implementations will
+inherit from.  It's the interface that is used to define a custom
+encoding for a font.  These objects are created in your code from a
+function callback that was originally registered with
+<a class="link" href="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func" title="pango_fc_font_map_add_decoder_find_func ()"><code class="function">pango_fc_font_map_add_decoder_find_func()</code></a>.  Pango requires
+information about the supported charset for a font as well as the
+individual character to glyph conversions.  Pango gets that
+information via the <span class="type">get_charset</span> and <span class="type">get_glyph</span> callbacks into your
+object implementation.</p>
+<p>
+</p>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcDecoderClass"></a><h3>PangoFcDecoderClass</h3>
+<pre class="programlisting">typedef struct {
+  FcCharSet  *(*get_charset) (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont);
+  PangoGlyph  (*get_glyph)   (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont,
+                             guint32         wc);
+} PangoFcDecoderClass;
+</pre>
+<p>
+Class structure for <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_charset</code></em> ()</span></p></td>
+<td> This returns an <span class="type">FcCharset</span> given a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> that
+ includes a list of supported characters in the font.  The
+ <span class="type">FcCharSet</span> that is returned should be an internal reference to your
+ code.  Pango will not free this structure.  It is important that
+ you make this callback fast because this callback is called
+ separately for each character to determine Unicode coverage.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_glyph</code></em> ()</span></p></td>
+<td> This returns a single <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> for a given Unicode
+ code point.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-decoder-get-charset"></a><h3>pango_fc_decoder_get_charset ()</h3>
+<pre class="programlisting">FcCharSet *         pango_fc_decoder_get_charset        (<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *decoder,
+                                                         <a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *fcfont);</pre>
+<p>
+Generates an <span class="type">FcCharSet</span> of supported characters for the fcfont
+given.  The returned <span class="type">FcCharSet</span> will be a reference to an
+internal value stored by the <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a> and must not
+be modified or freed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>decoder</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fcfont</code></em> :</span></p></td>
+<td> the <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> to query.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <span class="type">FcCharset</span> for <em class="parameter"><code>fcfont</code></em>; must not be modified
+  or freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-decoder-get-glyph"></a><h3>pango_fc_decoder_get_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_fc_decoder_get_glyph          (<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *decoder,
+                                                         <a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *fcfont,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"
+>guint32</a> wc);</pre>
+<p>
+Generates a <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> for the given Unicode point using the
+custom decoder. For complex scripts where there can be multiple
+glyphs for a single character, the decoder will return whatever
+glyph is most convenient for it. (Usually whatever glyph is directly
+in the fonts character map table.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>decoder</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fcfont</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> to query.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> the Unicode code point to convert to a single <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the glyph index, or 0 if the glyph isn't
+covered by the font.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/PangoFcFont.html b/docs/html/PangoFcFont.html
new file mode 100755 (executable)
index 0000000..548e0fd
--- /dev/null
@@ -0,0 +1,454 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PangoFcFont</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="PangoFcFontMap.html" title="PangoFcFontMap">
+<link rel="next" href="PangoFcDecoder.html" title="PangoFcDecoder">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoFcFontMap.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoFcDecoder.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#PangoFcFont.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#PangoFcFont.description" class="shortcut">Description</a>
+                 | 
+                <a href="#PangoFcFont.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                 | 
+                <a href="#PangoFcFont.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="PangoFcFont"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="PangoFcFont.top_of_page"></a>PangoFcFont</span></h2>
+<p>PangoFcFont — Base font class for Fontconfig-based backends</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="PangoFcFont.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="PangoFcFont.html#PangoFcFont-struct" title="PangoFcFont">PangoFcFont</a>;
+                    <a class="link" href="PangoFcFont.html#PangoFcFontClass" title="PangoFcFontClass">PangoFcFontClass</a>;
+#define             <a class="link" href="PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS" title="PANGO_RENDER_TYPE_FC">PANGO_RENDER_TYPE_FC</a>
+FT_Face             <a class="link" href="PangoFcFont.html#pango-fc-font-lock-face" title="pango_fc_font_lock_face ()">pango_fc_font_lock_face</a>             (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font);
+void                <a class="link" href="PangoFcFont.html#pango-fc-font-unlock-face" title="pango_fc_font_unlock_face ()">pango_fc_font_unlock_face</a>           (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="PangoFcFont.html#pango-fc-font-has-char" title="pango_fc_font_has_char ()">pango_fc_font_has_char</a>              (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="PangoFcFont.html#pango-fc-font-get-glyph" title="pango_fc_font_get_glyph ()">pango_fc_font_get_glyph</a>             (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="PangoFcFont.html#pango-fc-font-get-unknown-glyph" title="pango_fc_font_get_unknown_glyph ()">pango_fc_font_get_unknown_glyph</a>     (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+void                <a class="link" href="PangoFcFont.html#pango-fc-font-kern-glyphs" title="pango_fc_font_kern_glyphs ()">pango_fc_font_kern_glyphs</a>           (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFont.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a>
+         +----PangoFcFont
+               +----<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFont">PangoXftFont</a>
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFont.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="PangoFcFont.html#PangoFcFont--fontmap" title='The "fontmap" property'>fontmap</a>"                  <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a>*       : Read / Write
+  "<a class="link" href="PangoFcFont.html#PangoFcFont--pattern" title='The "pattern" property'>pattern</a>"                  <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>              : Read / Write / Construct Only
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFont.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> is a base class for font implementation using the
+Fontconfig and FreeType libraries. It is used in the
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html" title="Xft Fonts and Rendering">Xft</a> and
+<a class="link" href="pango-FreeType-Fonts-and-Rendering.html" title="FreeType Fonts and Rendering">FreeType</a>
+backends shipped with Pango, but can also be used when creating
+new backends. Any backend deriving from this base class will
+take advantage of the wide range of shapers implemented using
+FreeType that come with Pango.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFont.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoFcFont-struct"></a><h3>PangoFcFont</h3>
+<pre class="programlisting">typedef struct _PangoFcFont PangoFcFont;</pre>
+<p>
+<a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> is a base class for font implementations
+using the Fontconfig and FreeType libraries and is used in
+conjunction with <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a>. When deriving from this
+class, you need to implement all of its virtual functions
+other than <code class="function">shutdown()</code> along with the <code class="function">get_glyph_extents()</code>
+virtual function from <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcFontClass"></a><h3>PangoFcFontClass</h3>
+<pre class="programlisting">typedef struct {
+  FT_Face    (*lock_face)         (PangoFcFont      *font);
+  void       (*unlock_face)       (PangoFcFont      *font);
+  gboolean   (*has_char)          (PangoFcFont      *font,
+                                  gunichar          wc);
+  guint      (*get_glyph)         (PangoFcFont      *font,
+                                  gunichar          wc);
+  PangoGlyph (*get_unknown_glyph) (PangoFcFont      *font,
+                                  gunichar          wc);
+  void       (*shutdown)          (PangoFcFont      *font);
+} PangoFcFontClass;
+</pre>
+<p>
+Class structure for <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>lock_face</code></em> ()</span></p></td>
+<td> Returns the FT_Face of the font and increases
+ the reference count for the face by one.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>unlock_face</code></em> ()</span></p></td>
+<td> Decreases the reference count for the
+ FT_Face of the font by one. When the count is zero,
+ the <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> subclass is allowed to free the
+ FT_Face.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>has_char</code></em> ()</span></p></td>
+<td> Return <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the the font contains a glyph
+  corresponding to the specified character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_glyph</code></em> ()</span></p></td>
+<td> Gets the glyph that corresponds to the given
+  Unicode character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_unknown_glyph</code></em> ()</span></p></td>
+<td> Gets the glyph that should be used to
+  display an unknown-glyph indication for the specified
+  Unicode character.
+  May be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>shutdown</code></em> ()</span></p></td>
+<td> Performs any font-specific shutdown code that
+  needs to be done when pango_fc_font_map_shutdown is called.
+  May be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-FC--CAPS"></a><h3>PANGO_RENDER_TYPE_FC</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_FC "PangoRenderFc"
+</pre>
+<p>
+A string constant used to identify shape engines that work
+with the fontconfig based backends. See the <em class="parameter"><code>engine_type</code></em> field
+of <a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo"><span class="type">PangoEngineInfo</span></a>.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-lock-face"></a><h3>pango_fc_font_lock_face ()</h3>
+<pre class="programlisting">FT_Face             pango_fc_font_lock_face             (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font);</pre>
+<p>
+Gets the FreeType <span class="type">FT_Face</span> associated with a font,
+This face will be kept around until you call
+<a class="link" href="PangoFcFont.html#pango-fc-font-unlock-face" title="pango_fc_font_unlock_face ()"><code class="function">pango_fc_font_unlock_face()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the FreeType <span class="type">FT_Face</span> associated with <em class="parameter"><code>font</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-unlock-face"></a><h3>pango_fc_font_unlock_face ()</h3>
+<pre class="programlisting">void                pango_fc_font_unlock_face           (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font);</pre>
+<p>
+Releases a font previously obtained with
+<a class="link" href="PangoFcFont.html#pango-fc-font-lock-face" title="pango_fc_font_lock_face ()"><code class="function">pango_fc_font_lock_face()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-has-char"></a><h3>pango_fc_font_has_char ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_fc_font_has_char              (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<p>
+Determines whether <em class="parameter"><code>font</code></em> has a glyph for the codepoint <em class="parameter"><code>wc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> Unicode codepoint to look up
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>font</code></em> has the requested codepoint.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-get-glyph"></a><h3>pango_fc_font_get_glyph ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               pango_fc_font_get_glyph             (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<p>
+Gets the glyph index for a given Unicode character
+for <em class="parameter"><code>font</code></em>. If you only want to determine
+whether the font has the glyph, use <a class="link" href="PangoFcFont.html#pango-fc-font-has-char" title="pango_fc_font_has_char ()"><code class="function">pango_fc_font_has_char()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> Unicode character to look up
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the glyph index, or 0, if the Unicode
+  character doesn't exist in the font.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-get-unknown-glyph"></a><h3>pango_fc_font_get_unknown_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_fc_font_get_unknown_glyph     (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_fc_font_get_unknown_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns the index of a glyph suitable for drawing <em class="parameter"><code>wc</code></em> as an
+unknown character.
+</p>
+<p>
+Use <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()"><code class="function">PANGO_GET_UNKNOWN_GLYPH()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> the Unicode character for which a glyph is needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a glyph index into <em class="parameter"><code>font</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-kern-glyphs"></a><h3>pango_fc_font_kern_glyphs ()</h3>
+<pre class="programlisting">void                pango_fc_font_kern_glyphs           (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);</pre>
+<p>
+Adjust each adjacent pair of glyphs in <em class="parameter"><code>glyphs</code></em> according to
+kerning information in <em class="parameter"><code>font</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFont.property-details"></a><h2>Property Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoFcFont--fontmap"></a><h3>The <code class="literal">"fontmap"</code> property</h3>
+<pre class="programlisting">  "fontmap"                  <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a>*       : Read / Write</pre>
+<p>The PangoFc font map this font is associated with (Since: 1.26).</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcFont--pattern"></a><h3>The <code class="literal">"pattern"</code> property</h3>
+<pre class="programlisting">  "pattern"                  <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>              : Read / Write / Construct Only</pre>
+<p>The fontconfig pattern for this font.</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFont.see-also"></a><h2>See Also</h2>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a></span></p></td>
+<td><p>The base class for font maps; creating a new
+Fontconfig-based backend involves deriving from both
+<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> and <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.
+.</p></td>
+</tr></tbody>
+</table></div>
+<p>
+</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/PangoFcFontMap.html b/docs/html/PangoFcFontMap.html
new file mode 100755 (executable)
index 0000000..3327bd8
--- /dev/null
@@ -0,0 +1,871 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PangoFcFontMap</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="PangoRenderer.html" title="PangoRenderer">
+<link rel="next" href="PangoFcFont.html" title="PangoFcFont">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoRenderer.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoFcFont.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#PangoFcFontMap.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#PangoFcFontMap.description" class="shortcut">Description</a>
+                 | 
+                <a href="#PangoFcFontMap.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="PangoFcFontMap"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="PangoFcFontMap.top_of_page"></a>PangoFcFontMap</span></h2>
+<p>PangoFcFontMap — Base fontmap class for Fontconfig-based backends</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="PangoFcFontMap.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="PangoFcFontMap.html#PangoFcFontMap-struct" title="PangoFcFontMap">PangoFcFontMap</a>;
+                    <a class="link" href="PangoFcFontMap.html#PangoFcFontMapClass" title="PangoFcFontMapClass">PangoFcFontMapClass</a>;
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-create-context" title="pango_fc_font_map_create_context ()">pango_fc_font_map_create_context</a>    (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap);
+<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *    (<a class="link" href="PangoFcFontMap.html#PangoFcDecoderFindFunc" title="PangoFcDecoderFindFunc ()">*PangoFcDecoderFindFunc</a>)           (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> user_data);
+void                <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func" title="pango_fc_font_map_add_decoder_find_func ()">pango_fc_font_map_add_decoder_find_func</a>
+                                                        (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap,
+                                                         <a class="link" href="PangoFcFontMap.html#PangoFcDecoderFindFunc" title="PangoFcDecoderFindFunc ()">PangoFcDecoderFindFunc</a> findfunc,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> user_data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> dnotify);
+<a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *    <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-find-decoder" title="pango_fc_font_map_find_decoder ()">pango_fc_font_map_find_decoder</a>      (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap,
+                                                         FcPattern *pattern);
+void                <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-cache-clear" title="pango_fc_font_map_cache_clear ()">pango_fc_font_map_cache_clear</a>       (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap);
+void                <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-shutdown" title="pango_fc_font_map_shutdown ()">pango_fc_font_map_shutdown</a>          (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="PangoFcFontMap.html#pango-fc-font-description-from-pattern" title="pango_fc_font_description_from_pattern ()">pango_fc_font_description_from_pattern</a>
+                                                        (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> include_size);
+#define             <a class="link" href="PangoFcFontMap.html#PANGO-FC-GRAVITY--CAPS" title="PANGO_FC_GRAVITY">PANGO_FC_GRAVITY</a>
+#define             <a class="link" href="PangoFcFontMap.html#PANGO-FC-VERSION--CAPS" title="PANGO_FC_VERSION">PANGO_FC_VERSION</a>
+#define             <a class="link" href="PangoFcFontMap.html#PANGO-FC-PRGNAME--CAPS" title="PANGO_FC_PRGNAME">PANGO_FC_PRGNAME</a>
+
+
+                    <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a>;
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>            <a class="link" href="PangoFcFontMap.html#pango-fc-fontset-key-get-context-key" title="pango_fc_fontset_key_get_context_key ()">pango_fc_fontset_key_get_context_key</a>
+                                                        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);
+const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="PangoFcFontMap.html#pango-fc-fontset-key-get-description" title="pango_fc_fontset_key_get_description ()">pango_fc_fontset_key_get_description</a>
+                                                        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     <a class="link" href="PangoFcFontMap.html#pango-fc-fontset-key-get-language" title="pango_fc_fontset_key_get_language ()">pango_fc_fontset_key_get_language</a>   (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);
+const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * <a class="link" href="PangoFcFontMap.html#pango-fc-fontset-key-get-matrix" title="pango_fc_fontset_key_get_matrix ()">pango_fc_fontset_key_get_matrix</a>     (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);
+double              <a class="link" href="PangoFcFontMap.html#pango-fc-fontset-key-get-absolute-size" title="pango_fc_fontset_key_get_absolute_size ()">pango_fc_fontset_key_get_absolute_size</a>
+                                                        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);
+double              <a class="link" href="PangoFcFontMap.html#pango-fc-fontset-key-get-resolution" title="pango_fc_fontset_key_get_resolution ()">pango_fc_fontset_key_get_resolution</a> (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);
+                    <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a>;
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>            <a class="link" href="PangoFcFontMap.html#pango-fc-font-key-get-context-key" title="pango_fc_font_key_get_context_key ()">pango_fc_font_key_get_context_key</a>   (const <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a> *key);
+const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * <a class="link" href="PangoFcFontMap.html#pango-fc-font-key-get-matrix" title="pango_fc_font_key_get_matrix ()">pango_fc_font_key_get_matrix</a>        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a> *key);
+const FcPattern *   <a class="link" href="PangoFcFontMap.html#pango-fc-font-key-get-pattern" title="pango_fc_font_key_get_pattern ()">pango_fc_font_key_get_pattern</a>       (const <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a> *key);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFontMap.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a>
+         +----PangoFcFontMap
+               +----<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a>
+               +----<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap">PangoXftFontMap</a>
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFontMap.description"></a><h2>Description</h2>
+<p>
+PangoFcFontMap is a base class for font map implementations using the
+Fontconfig and FreeType libraries. It is used in the
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html" title="Xft Fonts and Rendering">Xft</a> and
+<a class="link" href="pango-FreeType-Fonts-and-Rendering.html" title="FreeType Fonts and Rendering">FreeType</a>
+backends shipped with Pango, but can also be used when creating
+new backends. Any backend deriving from this base class will
+take advantage of the wide range of shapers implemented using
+FreeType that come with Pango.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFontMap.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoFcFontMap-struct"></a><h3>PangoFcFontMap</h3>
+<pre class="programlisting">typedef struct _PangoFcFontMap PangoFcFontMap;</pre>
+<p>
+<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> is a base class for font map implementations
+using the Fontconfig and FreeType libraries. To create a new
+backend using Fontconfig and FreeType, you derive from this class
+and implement a <code class="function">new_font()</code> virtual function that creates an
+instance deriving from <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcFontMapClass"></a><h3>PangoFcFontMapClass</h3>
+<pre class="programlisting">typedef struct {
+  /* Deprecated in favor of fontset_key_substitute */
+  void         (*default_substitute) (PangoFcFontMap   *fontmap,
+                                     FcPattern        *pattern);
+  /* Deprecated in favor of create_font */
+  PangoFcFont  *(*new_font)          (PangoFcFontMap  *fontmap,
+                                     FcPattern       *pattern);
+
+  double       (*get_resolution)     (PangoFcFontMap             *fcfontmap,
+                                     PangoContext               *context);
+
+  gconstpointer (*context_key_get)   (PangoFcFontMap             *fcfontmap,
+                                     PangoContext               *context);
+  gpointer     (*context_key_copy)   (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key);
+  void         (*context_key_free)   (PangoFcFontMap             *fcfontmap,
+                                     gpointer                    key);
+  guint32      (*context_key_hash)   (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key);
+  gboolean     (*context_key_equal)  (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key_a,
+                                     gconstpointer               key_b);
+
+  void         (*fontset_key_substitute)(PangoFcFontMap             *fontmap,
+                                     PangoFcFontsetKey          *fontsetkey,
+                                     FcPattern                  *pattern);
+  PangoFcFont  *(*create_font)       (PangoFcFontMap             *fontmap,
+                                     PangoFcFontKey             *fontkey);
+} PangoFcFontMapClass;
+</pre>
+<p>
+Class structure for <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>default_substitute</code></em> ()</span></p></td>
+<td> Substitutes in default values for
+ unspecified fields in a <span class="type">FcPattern</span>. This will be called
+ prior to creating a font for the pattern. May be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+ Deprecated in favor of @<code class="function">font_key_substitute()</code>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>new_font</code></em> ()</span></p></td>
+<td> Creates a new <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> for the specified
+ pattern of the appropriate type for this font map. The
+ <em class="parameter"><code>pattern</code></em> argument must be passed to the "pattern" property
+ of <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> when you call <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new"
+><code class="function">g_object_new()</code></a>. Deprecated
+ in favor of @<code class="function">create_font()</code>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_resolution</code></em> ()</span></p></td>
+<td> Gets the resolution (the scale factor
+ between logical and absolute font sizes) that the backend
+ will use for a particular fontmap and context. <em class="parameter"><code>context</code></em>
+ may be null.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>context_key_get</code></em> ()</span></p></td>
+<td> Gets an opaque key holding backend
+ specific options for the context that will affect
+ fonts created by <code class="function">create_font()</code>. The result must point to
+ persistant storage owned by the fontmap. This key
+ is used to index hash tables used to look up fontsets
+ and fonts.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>context_key_copy</code></em> ()</span></p></td>
+<td> Copies a context key. Pango uses this
+ to make a persistant copy of the value returned from
+ <em class="parameter"><code>context_key_get</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>context_key_free</code></em> ()</span></p></td>
+<td> Frees a context key copied with
+ <em class="parameter"><code>context_key_copy</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>context_key_hash</code></em> ()</span></p></td>
+<td> Gets a hash value for a context key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>context_key_equal</code></em> ()</span></p></td>
+<td> Compares two context keys for equality.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>fontset_key_substitute</code></em> ()</span></p></td>
+<td> Substitutes in default values for
+ unspecified fields in a <span class="type">FcPattern</span>. This will be called
+ prior to creating a font for the pattern. May be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+ (Since: 1.24)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>create_font</code></em> ()</span></p></td>
+<td> Creates a new <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> for the specified
+ pattern of the appropriate type for this font map using
+ information from the font key that is passed in. The
+ <em class="parameter"><code>pattern</code></em> member of <em class="parameter"><code>font_key</code></em> can be retrieved using
+ <a class="link" href="PangoFcFontMap.html#pango-fc-font-key-get-pattern" title="pango_fc_font_key_get_pattern ()"><code class="function">pango_fc_font_key_get_pattern()</code></a> and must be passed to
+ the "pattern" property of <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> when you call
+ <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new"
+><code class="function">g_object_new()</code></a>.  If <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, <code class="function">new_font()</code> is used.
+ (Since: 1.24)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-map-create-context"></a><h3>pango_fc_font_map_create_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_fc_font_map_create_context    (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_fc_font_map_create_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Creates a new context for this fontmap. This function is intended
+only for backend implementations deriving from <span class="type">PangoFcFontmap</span>;
+it is possible that a backend will store additional information
+needed for correct operation on the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> after calling
+this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fcfontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcDecoderFindFunc"></a><h3>PangoFcDecoderFindFunc ()</h3>
+<pre class="programlisting"><a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *    (*PangoFcDecoderFindFunc)           (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> user_data);</pre>
+<p>
+Callback function passed to <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func" title="pango_fc_font_map_add_decoder_find_func ()"><code class="function">pango_fc_font_map_add_decoder_find_func()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
+<td> a fully resolved <span class="type">FcPattern</span> specifying the font on the system
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td> user data passed to <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func" title="pango_fc_font_map_add_decoder_find_func ()"><code class="function">pango_fc_font_map_add_decoder_find_func()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new reference to a custom decoder for this pattern,
+ or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the default decoder handling should be used.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-map-add-decoder-find-func"></a><h3>pango_fc_font_map_add_decoder_find_func ()</h3>
+<pre class="programlisting">void                pango_fc_font_map_add_decoder_find_func
+                                                        (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap,
+                                                         <a class="link" href="PangoFcFontMap.html#PangoFcDecoderFindFunc" title="PangoFcDecoderFindFunc ()">PangoFcDecoderFindFunc</a> findfunc,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> user_data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> dnotify);</pre>
+<p>
+This function saves a callback method in the <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> that
+will be called whenever new fonts are created.  If the
+function returns a <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a>, that decoder will be used to
+determine both coverage via a <span class="type">FcCharSet</span> and a one-to-one mapping of
+characters to glyphs.  This will allow applications to have
+application-specific encodings for various fonts.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fcfontmap</code></em> :</span></p></td>
+<td> The <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> to add this method to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>findfunc</code></em> :</span></p></td>
+<td> The <a class="link" href="PangoFcFontMap.html#PangoFcDecoderFindFunc" title="PangoFcDecoderFindFunc ()"><span class="type">PangoFcDecoderFindFunc</span></a> callback function
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
+<td> User data.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dnotify</code></em> :</span></p></td>
+<td> A <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+><span class="type">GDestroyNotify</span></a> callback that will be called when the
+ fontmap is finalized and the decoder is released.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6.</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-map-find-decoder"></a><h3>pango_fc_font_map_find_decoder ()</h3>
+<pre class="programlisting"><a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a> *    pango_fc_font_map_find_decoder      (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap,
+                                                         FcPattern *pattern);</pre>
+<p>
+Finds the decoder to use for <em class="parameter"><code>pattern</code></em>.  Decoders can be added to
+a font map using <a class="link" href="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func" title="pango_fc_font_map_add_decoder_find_func ()"><code class="function">pango_fc_font_map_add_decoder_find_func()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fcfontmap</code></em> :</span></p></td>
+<td> The <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> to use.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
+<td> The <span class="type">FcPattern</span> to find the decoder for.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly created <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder"><span class="type">PangoFcDecoder</span></a> object or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if
+         no decoder is set for <em class="parameter"><code>pattern</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.26.</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-map-cache-clear"></a><h3>pango_fc_font_map_cache_clear ()</h3>
+<pre class="programlisting">void                pango_fc_font_map_cache_clear       (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap);</pre>
+<p>
+Clear all cached information and fontsets for this font map;
+this should be called whenever there is a change in the
+output of the <code class="function">default_substitute()</code> virtual function of the
+font map, or if fontconfig has been reinitialized to new
+configuration.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>fcfontmap</code></em> :</span></p></td>
+<td> a <span class="type">PangoFcFontmap</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-map-shutdown"></a><h3>pango_fc_font_map_shutdown ()</h3>
+<pre class="programlisting">void                pango_fc_font_map_shutdown          (<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a> *fcfontmap);</pre>
+<p>
+Clears all cached information for the fontmap and marks
+all fonts open for the fontmap as dead. (See the <code class="function">shutdown()</code>
+virtual function of <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.) This function might be used
+by a backend when the underlying windowing system for the font
+map exits. This function is only intended to be called
+only for backend implementations deriving from <span class="type">PangoFcFontmap</span>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>fcfontmap</code></em> :</span></p></td>
+<td> a <span class="type">PangoFcFontmap</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-description-from-pattern"></a><h3>pango_fc_font_description_from_pattern ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_fc_font_description_from_pattern
+                                                        (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> include_size);</pre>
+<p>
+Creates a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> that matches the specified
+Fontconfig pattern as closely as possible. Many possible Fontconfig
+pattern values, such as <code class="literal">FC_RASTERIZER</code> or <code class="literal">FC_DPI</code>, don't make sense in
+the context of <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, so will be ignored.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
+<td> a <span class="type">FcPattern</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>include_size</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, the pattern will include the size from
+  the <em class="parameter"><code>pattern</code></em>; otherwise the resulting pattern will be unsized.
+  (only <code class="literal">FC_SIZE</code> is examined, not <code class="literal">FC_PIXEL_SIZE</code>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>. Free with
+ <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FC-GRAVITY--CAPS"></a><h3>PANGO_FC_GRAVITY</h3>
+<pre class="programlisting">#define PANGO_FC_GRAVITY "pangogravity"
+</pre>
+<p>
+String representing a fontconfig property name that Pango sets on any
+fontconfig pattern it passes to fontconfig if a <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> other
+than <code class="literal">PangoGravitySouth</code> is desired.
+</p>
+<p>
+The property will have a <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> value as a string, like "east".
+This can be used to write fontconfig configuration rules to choose
+different fonts for horizontal and vertical writing directions.</p>
+<p>
+</p>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FC-VERSION--CAPS"></a><h3>PANGO_FC_VERSION</h3>
+<pre class="programlisting">#define PANGO_FC_VERSION "pangoversion"
+</pre>
+<p>
+String representing a fontconfig property name that Pango sets on any
+fontconfig pattern it passes to fontconfig.
+</p>
+<p>
+The property will have an integer value equal to what
+<a class="link" href="pango-Version-Checking.html#pango-version" title="pango_version ()"><code class="function">pango_version()</code></a> returns.
+This can be used to write fontconfig configuration rules that only affect
+certain pango versions (or only pango-using applications, or only
+non-pango-using applications).</p>
+<p>
+</p>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FC-PRGNAME--CAPS"></a><h3>PANGO_FC_PRGNAME</h3>
+<pre class="programlisting">#define PANGO_FC_PRGNAME "pangoprgname"
+</pre>
+<p>
+String representing a fontconfig property name that Pango sets on any
+fontconfig pattern it passes to fontconfig.
+</p>
+<p>
+The property will have a string equal to what
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Miscellaneous-Utility-Functions.html#g-get-prgname"
+><code class="function">g_get_prgname()</code></a> returns.
+This can be used to write fontconfig configuration rules that only affect
+certain applications.</p>
+<p>
+</p>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcFontsetKey"></a><h3>PangoFcFontsetKey</h3>
+<pre class="programlisting">typedef struct _PangoFcFontsetKey PangoFcFontsetKey;</pre>
+<p>
+An opaque structure containing all the information needed for
+loading a fontset with the PangoFc fontmap.</p>
+<p>
+</p>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-fontset-key-get-context-key"></a><h3>pango_fc_fontset_key_get_context_key ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>            pango_fc_fontset_key_get_context_key
+                                                        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);</pre>
+<p>
+Gets the context key member of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the font key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the context key, which is owned by <em class="parameter"><code>key</code></em> and should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-fontset-key-get-description"></a><h3>pango_fc_fontset_key_get_description ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_fc_fontset_key_get_description
+                                                        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);</pre>
+<p>
+Gets the font description of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the fontset key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the font description, which is owned by <em class="parameter"><code>key</code></em> and should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-fontset-key-get-language"></a><h3>pango_fc_fontset_key_get_language ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     pango_fc_fontset_key_get_language   (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);</pre>
+<p>
+Gets the language member of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the fontset key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the language
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-fontset-key-get-matrix"></a><h3>pango_fc_fontset_key_get_matrix ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * pango_fc_fontset_key_get_matrix     (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);</pre>
+<p>
+Gets the matrix member of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the fontset key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the matrix, which is owned by <em class="parameter"><code>key</code></em> and should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-fontset-key-get-absolute-size"></a><h3>pango_fc_fontset_key_get_absolute_size ()</h3>
+<pre class="programlisting">double              pango_fc_fontset_key_get_absolute_size
+                                                        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);</pre>
+<p>
+Gets the absolute font size of <em class="parameter"><code>key</code></em> in Pango units.  This is adjusted
+for both resolution and transformation matrix.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the fontset key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the pixel size of <em class="parameter"><code>key</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-fontset-key-get-resolution"></a><h3>pango_fc_fontset_key_get_resolution ()</h3>
+<pre class="programlisting">double              pango_fc_fontset_key_get_resolution (const <a class="link" href="PangoFcFontMap.html#PangoFcFontsetKey" title="PangoFcFontsetKey">PangoFcFontsetKey</a> *key);</pre>
+<p>
+Gets the resolution of <em class="parameter"><code>key</code></em></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the fontset key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the resolution of <em class="parameter"><code>key</code></em>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFcFontKey"></a><h3>PangoFcFontKey</h3>
+<pre class="programlisting">typedef struct _PangoFcFontKey PangoFcFontKey;</pre>
+<p>
+An opaque structure containing all the information needed for
+loading a font with the PangoFc fontmap.</p>
+<p>
+</p>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-key-get-context-key"></a><h3>pango_fc_font_key_get_context_key ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>            pango_fc_font_key_get_context_key   (const <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a> *key);</pre>
+<p>
+Gets the context key member of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the font key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the context key, which is owned by <em class="parameter"><code>key</code></em> and should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-key-get-matrix"></a><h3>pango_fc_font_key_get_matrix ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * pango_fc_font_key_get_matrix        (const <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a> *key);</pre>
+<p>
+Gets the matrix member of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the font key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the matrix, which is owned by <em class="parameter"><code>key</code></em> and should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fc-font-key-get-pattern"></a><h3>pango_fc_font_key_get_pattern ()</h3>
+<pre class="programlisting">const FcPattern *   pango_fc_font_key_get_pattern       (const <a class="link" href="PangoFcFontMap.html#PangoFcFontKey" title="PangoFcFontKey">PangoFcFontKey</a> *key);</pre>
+<p>
+Gets the fontconfig pattern member of <em class="parameter"><code>key</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> the font key
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the pattern, which is owned by <em class="parameter"><code>key</code></em> and should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.24</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoFcFontMap.see-also"></a><h2>See Also</h2>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a></span></p></td>
+<td><p>The base class for fonts; creating a new
+Fontconfig-based backend involves deriving from both
+<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> and <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>.
+</p></td>
+</tr></tbody>
+</table></div>
+<p>
+</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/PangoMarkupFormat.html b/docs/html/PangoMarkupFormat.html
new file mode 100755 (executable)
index 0000000..7cb458d
--- /dev/null
@@ -0,0 +1,309 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Text Attribute Markup</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Tab-Stops.html" title="Tab Stops">
+<link rel="next" href="pango-Layout-Objects.html" title="Layout Objects">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="pango-Tab-Stops.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Layout-Objects.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="PangoMarkupFormat"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">Text Attribute Markup</span></h2>
+<p>Text Attribute Markup — Simple
+markup language to encode text with attributes</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="PangoMarkupFormatLanguage"></a><h2>Pango Text Attribute Markup Language</h2>
+<p>
+Frequently, you want to display some text to the user with attributes
+applied to part of the text (for example, you might want bold or
+italicized words). With the base Pango interfaces, you could create a
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> and apply it to the
+text; the problem is that you'd need to apply attributes to some
+numeric range of characters, for example "characters 12-17." This is
+broken from an internationalization standpoint; once the text is
+translated, the word you wanted to italicize could be in a different
+position.
+</p>
+<p>
+The solution is to include the text attributes in the string to be
+translated. Pango provides this feature with a small markup language.
+You can parse a marked-up string into the string text plus a
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> using the function 
+<a class="link" href="pango-Text-Attributes.html#pango-parse-markup" title="pango_parse_markup ()">pango_parse_markup()</a>.
+</p>
+<p>
+A simple example of a marked-up string might be:
+<code class="literal">"&lt;span foreground="blue" size="x-large"&gt;Blue text&lt;/span&gt; is &lt;i&gt;cool&lt;/i&gt;!"</code>
+</p>
+<p>
+The root tag of a marked-up document is &lt;markup&gt;, but <a class="link" href="pango-Text-Attributes.html#pango-parse-markup" title="pango_parse_markup ()">pango_parse_markup()</a> allows you to
+omit this tag, so you will most likely never need to use it. The most
+general markup tag is &lt;span&gt;, then there are some convenience
+tags. &lt;span&gt; has the following attributes:
+</p>
+<div class="variablelist">
+<p class="title"><b>&lt;span&gt; attributes</b></p>
+<table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">font<sup>[<a name="since_1_21" href="#ftn.since_1_21" class="footnote">1</a>]</sup>, </span><span class="term">font_desc</span></p></td>
+<td><p>
+A font description string, such as "Sans Italic 12". See 
+<a class="link" href="pango-Fonts.html#pango-font-description-from-string" title="pango_font_description_from_string ()">pango_font_description_from_string()</a> 
+for a description of the format of the string representation . Note that any 
+other span attributes will override this description. So if you have 
+"Sans Italic" and also a style="normal" attribute, you will get Sans normal, 
+not italic.</p></td>
+</tr>
+<tr>
+<td><p><span class="term">font_family, </span><span class="term">face</span></p></td>
+<td><p>
+A font family name
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">font_size<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup>, </span><span class="term">size</span></p></td>
+<td><p>
+Font size in 1024ths of a point, or one of the absolute sizes 
+'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large',
+'xx-large', or one of the relative sizes 'smaller' or 'larger'.
+If you want to specify a absolute size, it's usually easier
+to take advantage of the ability to specify a partial
+font description using 'font'; you can use
+<code class="literal">font='12.5'</code> rather than
+<code class="literal">size='12800'</code>.
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">font_style<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup>, </span><span class="term">style</span></p></td>
+<td><p>
+One of 'normal', 'oblique', 'italic'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">font_weight<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup>, </span><span class="term">weight</span></p></td>
+<td><p>
+One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy',
+or a numeric weight
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">font_variant<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup>, </span><span class="term">variant</span></p></td>
+<td><p>
+One of 'normal' or 'smallcaps'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">font_stretch<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup>, </span><span class="term">stretch</span></p></td>
+<td><p>
+One of 'ultracondensed', 'extracondensed', 'condensed',
+'semicondensed', 'normal', 'semiexpanded', 'expanded',
+'extraexpanded', 'ultraexpanded'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">foreground, </span><span class="term">fgcolor<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup>, </span><span class="term">color</span></p></td>
+<td><p>
+An RGB color specification such as '#00FF00' or a color name such as 
+'red'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">background, </span><span class="term">bgcolor<sup>[<a href="PangoMarkupFormat.html#ftn.since_1_21" class="footnoteref">1</a>]</sup></span></p></td>
+<td><p>
+An RGB color specification such as '#00FF00' or a color name such as 
+'red'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">underline</span></p></td>
+<td><p>
+One of 'none', 'single', 'double', 'low', 'error'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">underline_color</span></p></td>
+<td><p>
+The color of underlines; an RGB color specification such as '#00FF00'
+or a color name such as 'red'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">rise</span></p></td>
+<td><p>
+Vertical displacement, in 10000ths of an em. Can be negative for 
+subscript, positive for superscript.
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">strikethrough</span></p></td>
+<td><p>
+'true' or 'false' whether to strike through the text
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">strikethrough_color</span></p></td>
+<td><p>
+The color of strikethrough lines; an RGB color specification such as
+'#00FF00' or a color name such as 'red'
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">fallback</span></p></td>
+<td><p>
+'true' or 'false' whether to enable fallback. If disabled, then characters
+will only be used from the closest matching font on the system. No fallback
+will be done to other fonts on the system that might contain the characters
+in the text.  Fallback is enabled by default. Most applications should not
+disable fallback.
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">lang</span></p></td>
+<td><p>
+A language code, indicating the text language
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">letter_spacing</span></p></td>
+<td><p>
+Inter-letter spacing in 1024ths of a point.
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">gravity</span></p></td>
+<td><p>
+One of 'south', 'east', 'north', 'west', 'auto'.
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">gravity_hint</span></p></td>
+<td><p>
+One of 'natural', 'strong', 'line'.
+</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<p>
+
+</p>
+<p>
+The following convenience tags are provided:
+
+</p>
+<div class="variablelist">
+<p class="title"><b>Convenience tags</b></p>
+<table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">b</span></p></td>
+<td><p>
+Bold
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">big</span></p></td>
+<td><p>
+Makes font relatively larger, equivalent to &lt;span size="larger"&gt;
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">i</span></p></td>
+<td><p>
+Italic
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">s</span></p></td>
+<td><p>
+Strikethrough
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">sub</span></p></td>
+<td><p>
+Subscript
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">sup</span></p></td>
+<td><p>
+Superscript
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">small</span></p></td>
+<td><p>
+Makes font relatively smaller, equivalent to &lt;span size="smaller"&gt;
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">tt</span></p></td>
+<td><p>
+Monospace font
+</p></td>
+</tr>
+<tr>
+<td><p><span class="term">u</span></p></td>
+<td><p>
+Underline
+</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<p>
+
+</p>
+</div>
+<div class="footnotes">
+<br><hr width="100" align="left">
+<div class="footnote"><p><sup>[<a name="ftn.since_1_21" href="#since_1_21" class="para">1</a>] </sup>Since 1.21</p></div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/PangoRenderer.html b/docs/html/PangoRenderer.html
new file mode 100755 (executable)
index 0000000..423ac84
--- /dev/null
@@ -0,0 +1,1064 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>PangoRenderer</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="lowlevel.html" title="Low Level Functionality">
+<link rel="next" href="PangoFcFontMap.html" title="PangoFcFontMap">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="lowlevel.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoFcFontMap.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#PangoRenderer.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#PangoRenderer.description" class="shortcut">Description</a>
+                 | 
+                <a href="#PangoRenderer.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="PangoRenderer"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="PangoRenderer.top_of_page"></a>PangoRenderer</span></h2>
+<p>PangoRenderer — Rendering driver base class</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="PangoRenderer.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="PangoRenderer.html#PangoRenderer-struct" title="PangoRenderer">PangoRenderer</a>;
+enum                <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a>;
+#define             <a class="link" href="PangoRenderer.html#PANGO-TYPE-RENDER-PART--CAPS" title="PANGO_TYPE_RENDER_PART">PANGO_TYPE_RENDER_PART</a>
+                    <a class="link" href="PangoRenderer.html#PangoRendererClass" title="PangoRendererClass">PangoRendererClass</a>;
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-layout" title="pango_renderer_draw_layout ()">pango_renderer_draw_layout</a>          (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-layout-line" title="pango_renderer_draw_layout_line ()">pango_renderer_draw_layout_line</a>     (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-glyphs" title="pango_renderer_draw_glyphs ()">pango_renderer_draw_glyphs</a>          (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-glyph-item" title="pango_renderer_draw_glyph_item ()">pango_renderer_draw_glyph_item</a>      (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-rectangle" title="pango_renderer_draw_rectangle ()">pango_renderer_draw_rectangle</a>       (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part,
+                                                         int x,
+                                                         int y,
+                                                         int width,
+                                                         int height);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-error-underline" title="pango_renderer_draw_error_underline ()">pango_renderer_draw_error_underline</a> (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         int x,
+                                                         int y,
+                                                         int width,
+                                                         int height);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-trapezoid" title="pango_renderer_draw_trapezoid ()">pango_renderer_draw_trapezoid</a>       (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part,
+                                                         double y1_,
+                                                         double x11,
+                                                         double x21,
+                                                         double y2,
+                                                         double x12,
+                                                         double x22);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-draw-glyph" title="pango_renderer_draw_glyph ()">pango_renderer_draw_glyph</a>           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> glyph,
+                                                         double x,
+                                                         double y);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-activate" title="pango_renderer_activate ()">pango_renderer_activate</a>             (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-deactivate" title="pango_renderer_deactivate ()">pango_renderer_deactivate</a>           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-part-changed" title="pango_renderer_part_changed ()">pango_renderer_part_changed</a>         (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-set-color" title="pango_renderer_set_color ()">pango_renderer_set_color</a>            (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part,
+                                                         const <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color);
+<a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *        <a class="link" href="PangoRenderer.html#pango-renderer-get-color" title="pango_renderer_get_color ()">pango_renderer_get_color</a>            (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part);
+void                <a class="link" href="PangoRenderer.html#pango-renderer-set-matrix" title="pango_renderer_set_matrix ()">pango_renderer_set_matrix</a>           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);
+const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * <a class="link" href="PangoRenderer.html#pango-renderer-get-matrix" title="pango_renderer_get_matrix ()">pango_renderer_get_matrix</a>           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);
+<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       <a class="link" href="PangoRenderer.html#pango-renderer-get-layout" title="pango_renderer_get_layout ()">pango_renderer_get_layout</a>           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   <a class="link" href="PangoRenderer.html#pango-renderer-get-layout-line" title="pango_renderer_get_layout_line ()">pango_renderer_get_layout_line</a>      (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoRenderer.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoRenderer
+         +----<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">PangoXftRenderer</a>
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoRenderer.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a> is a base class that contains the necessary logic for
+rendering a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> or <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>. By subclassing
+<a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a> and overriding operations such as <em class="parameter"><code>draw_glyphs</code></em> and
+<em class="parameter"><code>draw_rectangle</code></em>, renderers for particular font backends and
+destinations can be created.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="PangoRenderer.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoRenderer-struct"></a><h3>PangoRenderer</h3>
+<pre class="programlisting">typedef struct {
+  PangoMatrix *matrix;         /* May be NULL */
+} PangoRenderer;
+</pre>
+<p>
+<a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a> is a base class for objects that are used to
+render Pango objects such as <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> and
+<a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *<em class="structfield"><code>matrix</code></em>;</span></p></td>
+<td> the current transformation matrix for the Renderer; may
+   be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, which should be treated the same as the identity matrix.
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoRenderPart"></a><h3>enum PangoRenderPart</h3>
+<pre class="programlisting">typedef enum
+{
+  PANGO_RENDER_PART_FOREGROUND,
+  PANGO_RENDER_PART_BACKGROUND,
+  PANGO_RENDER_PART_UNDERLINE,
+  PANGO_RENDER_PART_STRIKETHROUGH
+} PangoRenderPart;
+</pre>
+<p>
+<a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart"><span class="type">PangoRenderPart</span></a> defines different items to render for such
+purposes as setting colors.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-RENDER-PART-FOREGROUND--CAPS"></a><span class="term"><code class="literal">PANGO_RENDER_PART_FOREGROUND</code></span></p></td>
+<td> the text itself
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-RENDER-PART-BACKGROUND--CAPS"></a><span class="term"><code class="literal">PANGO_RENDER_PART_BACKGROUND</code></span></p></td>
+<td> the area behind the text
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-RENDER-PART-UNDERLINE--CAPS"></a><span class="term"><code class="literal">PANGO_RENDER_PART_UNDERLINE</code></span></p></td>
+<td> underlines
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-RENDER-PART-STRIKETHROUGH--CAPS"></a><span class="term"><code class="literal">PANGO_RENDER_PART_STRIKETHROUGH</code></span></p></td>
+<td> strikethrough lines
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-RENDER-PART--CAPS"></a><h3>PANGO_TYPE_RENDER_PART</h3>
+<pre class="programlisting">#define PANGO_TYPE_RENDER_PART (pango_render_part_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart"><span class="type">PangoRenderPart</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoRendererClass"></a><h3>PangoRendererClass</h3>
+<pre class="programlisting">typedef struct {
+  /* All of the following have default implementations
+   * and take as coordinates user coordinates in Pango units
+   */
+  void (*draw_glyphs) (PangoRenderer     *renderer,
+                      PangoFont         *font,
+                      PangoGlyphString  *glyphs,
+                      int                x,
+                      int                y);
+  void (*draw_rectangle) (PangoRenderer     *renderer,
+                         PangoRenderPart    part,
+                         int                x,
+                         int                y,
+                         int                width,
+                         int                height);
+  void (*draw_error_underline) (PangoRenderer     *renderer,
+                               int                x,
+                               int                y,
+                               int                width,
+                               int                height);
+
+  /* Nothing is drawn for shaped glyphs unless this is implemented */
+  void (*draw_shape) (PangoRenderer  *renderer,
+                     PangoAttrShape *attr,
+                     int             x,
+                     int             y);
+
+  /* These two must be implemented and take coordinates in
+   * device space as doubles.
+   */
+  void (*draw_trapezoid) (PangoRenderer  *renderer,
+                         PangoRenderPart part,
+                         double          y1_,
+                         double          x11,
+                         double          x21,
+                         double          y2,
+                         double          x12,
+                         double          x22);
+  void (*draw_glyph) (PangoRenderer *renderer,
+                     PangoFont     *font,
+                     PangoGlyph     glyph,
+                     double         x,
+                     double         y);
+
+  /* Notification of change in rendering attributes
+   */
+  void (*part_changed) (PangoRenderer   *renderer,
+                       PangoRenderPart  part);
+
+  /* Paired around drawing operations
+   */
+  void (*begin) (PangoRenderer *renderer);
+  void (*end)   (PangoRenderer *renderer);
+
+  /* Hooks into the details of layout rendering
+   */
+  void (*prepare_run) (PangoRenderer  *renderer,
+                      PangoLayoutRun *run);
+
+  /* All of the following have default implementations
+   * and take as coordinates user coordinates in Pango units
+   */
+  void (*draw_glyph_item) (PangoRenderer     *renderer,
+                          const char        *text,
+                          PangoGlyphItem    *glyph_item,
+                          int                x,
+                          int                y);
+} PangoRendererClass;
+</pre>
+<p>
+Class structure for <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_glyphs</code></em> ()</span></p></td>
+<td> draws a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_rectangle</code></em> ()</span></p></td>
+<td> draws a rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_error_underline</code></em> ()</span></p></td>
+<td> draws a squiggly line that approximately
+covers the given rectangle in the style of an underline used to
+indicate a spelling error.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_shape</code></em> ()</span></p></td>
+<td> draw content for a glyph shaped with <a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape"><span class="type">PangoAttrShape</span></a>.
+  <em class="parameter"><code>x</code></em>, <em class="parameter"><code>y</code></em> are the coordinates of the left edge of the baseline,
+  in user coordinates.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_trapezoid</code></em> ()</span></p></td>
+<td> draws a trapezoidal filled area
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_glyph</code></em> ()</span></p></td>
+<td> draws a single glyph
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>part_changed</code></em> ()</span></p></td>
+<td> do renderer specific processing when rendering
+ attributes change
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>begin</code></em> ()</span></p></td>
+<td> Do renderer-specific initialization before drawing
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>end</code></em> ()</span></p></td>
+<td> Do renderer-specific cleanup after drawing
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>prepare_run</code></em> ()</span></p></td>
+<td> updates the renderer for a new run
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>draw_glyph_item</code></em> ()</span></p></td>
+<td> draws a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-layout"></a><h3>pango_renderer_draw_layout ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_layout          (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Draws <em class="parameter"><code>layout</code></em> with the specified <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-layout-line"></a><h3>pango_renderer_draw_layout_line ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_layout_line     (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Draws <em class="parameter"><code>line</code></em> with the specified <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-glyphs"></a><h3>pango_renderer_draw_glyphs ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_glyphs          (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Draws the glyphs in <em class="parameter"><code>glyphs</code></em> with the specified <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-glyph-item"></a><h3>pango_renderer_draw_glyph_item ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_glyph_item      (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Draws the glyphs in <em class="parameter"><code>glyph_item</code></em> with the specified <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>,
+embedding the text associated with the glyphs in the output if the
+output format supports it (PDF for example).
+</p>
+<p>
+Note that <em class="parameter"><code>text</code></em> is the start of the text for layout, which is then
+indexed by <code class="literal"><em class="parameter"><code>glyph_item-&gt;item-&gt;offset</code></em></code>.
+</p>
+<p>
+If <em class="parameter"><code>text</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, this simply calls <a class="link" href="PangoRenderer.html#pango-renderer-draw-glyphs" title="pango_renderer_draw_glyphs ()"><code class="function">pango_renderer_draw_glyphs()</code></a>.
+</p>
+<p>
+The default implementation of this method simply falls back to
+<a class="link" href="PangoRenderer.html#pango-renderer-draw-glyphs" title="pango_renderer_draw_glyphs ()"><code class="function">pango_renderer_draw_glyphs()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> the UTF-8 text that <em class="parameter"><code>glyph_item</code></em> refers to, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-rectangle"></a><h3>pango_renderer_draw_rectangle ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_rectangle       (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part,
+                                                         int x,
+                                                         int y,
+                                                         int width,
+                                                         int height);</pre>
+<p>
+Draws an axis-aligned rectangle in user space coordinates with the
+specified <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>.
+</p>
+<p>
+This should be called while <em class="parameter"><code>renderer</code></em> is already active.  Use
+<a class="link" href="PangoRenderer.html#pango-renderer-activate" title="pango_renderer_activate ()"><code class="function">pango_renderer_activate()</code></a> to activate a renderer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td> type of object this rectangle is part of
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X position at which to draw rectangle, in user space coordinates in Pango units
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y position at which to draw rectangle, in user space coordinates in Pango units
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> width of rectangle in Pango units in user space coordinates
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> height of rectangle in Pango units in user space coordinates
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-error-underline"></a><h3>pango_renderer_draw_error_underline ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_error_underline (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         int x,
+                                                         int y,
+                                                         int width,
+                                                         int height);</pre>
+<p>
+Draw a squiggly line that approximately covers the given rectangle
+in the style of an underline used to indicate a spelling error.
+(The width of the underline is rounded to an integer number
+of up/down segments and the resulting rectangle is centered
+in the original rectangle)
+</p>
+<p>
+This should be called while <em class="parameter"><code>renderer</code></em> is already active.  Use
+<a class="link" href="PangoRenderer.html#pango-renderer-activate" title="pango_renderer_activate ()"><code class="function">pango_renderer_activate()</code></a> to activate a renderer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X coordinate of underline, in Pango units in user coordinate system
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y coordinate of underline, in Pango units in user coordinate system
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> width of underline, in Pango units in user coordinate system
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> height of underline, in Pango units in user coordinate system
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-trapezoid"></a><h3>pango_renderer_draw_trapezoid ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_trapezoid       (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part,
+                                                         double y1_,
+                                                         double x11,
+                                                         double x21,
+                                                         double y2,
+                                                         double x12,
+                                                         double x22);</pre>
+<p>
+Draws a trapezoid with the parallel sides aligned with the X axis
+using the given <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>; coordinates are in device space.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td> type of object this trapezoid is part of
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y1_</code></em> :</span></p></td>
+<td> Y coordinate of top of trapezoid
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x11</code></em> :</span></p></td>
+<td> X coordinate of left end of top of trapezoid
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x21</code></em> :</span></p></td>
+<td> X coordinate of right end of top of trapezoid
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y2</code></em> :</span></p></td>
+<td> Y coordinate of bottom of trapezoid
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x12</code></em> :</span></p></td>
+<td> X coordinate of left end of bottom of trapezoid
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x22</code></em> :</span></p></td>
+<td> X coordinate of right end of bottom of trapezoid
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-draw-glyph"></a><h3>pango_renderer_draw_glyph ()</h3>
+<pre class="programlisting">void                pango_renderer_draw_glyph           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> glyph,
+                                                         double x,
+                                                         double y);</pre>
+<p>
+Draws a single glyph with coordinates in device space.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph</code></em> :</span></p></td>
+<td> the glyph index of a single glyph
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> X coordinate of left edge of baseline of glyph
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> Y coordinate of left edge of baseline of glyph
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-activate"></a><h3>pango_renderer_activate ()</h3>
+<pre class="programlisting">void                pango_renderer_activate             (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);</pre>
+<p>
+Does initial setup before rendering operations on <em class="parameter"><code>renderer</code></em>.
+<a class="link" href="PangoRenderer.html#pango-renderer-deactivate" title="pango_renderer_deactivate ()"><code class="function">pango_renderer_deactivate()</code></a> should be called when done drawing.
+Calls such as <a class="link" href="PangoRenderer.html#pango-renderer-draw-layout" title="pango_renderer_draw_layout ()"><code class="function">pango_renderer_draw_layout()</code></a> automatically
+activate the layout before drawing on it. Calls to
+<a class="link" href="PangoRenderer.html#pango-renderer-activate" title="pango_renderer_activate ()"><code class="function">pango_renderer_activate()</code></a> and <a class="link" href="PangoRenderer.html#pango-renderer-deactivate" title="pango_renderer_deactivate ()"><code class="function">pango_renderer_deactivate()</code></a> can
+be nested and the renderer will only be initialized and
+deinitialized once.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-deactivate"></a><h3>pango_renderer_deactivate ()</h3>
+<pre class="programlisting">void                pango_renderer_deactivate           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);</pre>
+<p>
+Cleans up after rendering operations on <em class="parameter"><code>renderer</code></em>. See
+docs for <a class="link" href="PangoRenderer.html#pango-renderer-activate" title="pango_renderer_activate ()"><code class="function">pango_renderer_activate()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-part-changed"></a><h3>pango_renderer_part_changed ()</h3>
+<pre class="programlisting">void                pango_renderer_part_changed         (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part);</pre>
+<p>
+Informs Pango that the way that the rendering is done
+for <em class="parameter"><code>part</code></em> has changed in a way that would prevent multiple
+pieces being joined together into one drawing call. For
+instance, if a subclass of <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a> was to add a stipple
+option for drawing underlines, it needs to call
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+pango_renderer_part_changed (render, PANGO_RENDER_PART_UNDERLINE);
+</pre></div>
+<p>
+</p>
+<p>
+When the stipple changes or underlines with different stipples
+might be joined together. Pango automatically calls this for
+changes to colors. (See <a class="link" href="PangoRenderer.html#pango-renderer-set-color" title="pango_renderer_set_color ()"><code class="function">pango_renderer_set_color()</code></a>)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td> the part for which rendering has changed.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-set-color"></a><h3>pango_renderer_set_color ()</h3>
+<pre class="programlisting">void                pango_renderer_set_color            (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part,
+                                                         const <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color);</pre>
+<p>
+Sets the color for part of the rendering.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td> the part to change the color of
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td> the new color or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to unset the current color
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-get-color"></a><h3>pango_renderer_get_color ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *        pango_renderer_get_color            (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         <a class="link" href="PangoRenderer.html#PangoRenderPart" title="enum PangoRenderPart">PangoRenderPart</a> part);</pre>
+<p>
+Gets the current rendering color for the specified part.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>part</code></em> :</span></p></td>
+<td> the part to get the color for
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the color for the specified part, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+ if it hasn't been set and should be inherited from the
+ environment.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-set-matrix"></a><h3>pango_renderer_set_matrix ()</h3>
+<pre class="programlisting">void                pango_renderer_set_matrix           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);</pre>
+<p>
+Sets the transformation matrix that will be applied when rendering.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to unset any existing matrix.
+ (No matrix set is the same as setting the identity matrix.)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-get-matrix"></a><h3>pango_renderer_get_matrix ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * pango_renderer_get_matrix           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);</pre>
+<p>
+Gets the transformation matrix that will be applied when
+rendering. See <a class="link" href="PangoRenderer.html#pango-renderer-set-matrix" title="pango_renderer_set_matrix ()"><code class="function">pango_renderer_set_matrix()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the matrix, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no matrix has been set
+ (which is the same as the identity matrix). The returned
+ matrix is owned by Pango and must not be modified or
+ freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-get-layout"></a><h3>pango_renderer_get_layout ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       pango_renderer_get_layout           (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);</pre>
+<p>
+Gets the layout currently being rendered using <em class="parameter"><code>renderer</code></em>.
+Calling this function only makes sense from inside a subclass's
+methods, like in its draw_shape() for example.
+</p>
+<p>
+The returned layout should not be modified while still being
+rendered.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the layout, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no layout is being
+ rendered using <em class="parameter"><code>renderer</code></em> at this time.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-renderer-get-layout-line"></a><h3>pango_renderer_get_layout_line ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   pango_renderer_get_layout_line      (<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *renderer);</pre>
+<p>
+Gets the layout line currently being rendered using <em class="parameter"><code>renderer</code></em>.
+Calling this function only makes sense from inside a subclass's
+methods, like in its draw_shape() for example.
+</p>
+<p>
+The returned layout line should not be modified while still being
+rendered.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>renderer</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the layout line, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no layout line is being
+ rendered using <em class="parameter"><code>renderer</code></em> at this time.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/home.png b/docs/html/home.png
new file mode 100755 (executable)
index 0000000..1700361
Binary files /dev/null and b/docs/html/home.png differ
diff --git a/docs/html/index-1.10.html b/docs/html/index-1.10.html
new file mode 100755 (executable)
index 0000000..65dd08d
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.10</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="next" href="index-1.12.html" title="Index of new symbols in 1.12">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.8.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.12.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.10"></a>Index of new symbols in 1.10</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoCairoFontMap, <a class="indexterm" href="pango-Cairo-Rendering.html#PangoCairoFontMap-struct">PangoCairoFontMap</a>
+</dt>
+<dt>pango_attr_list_ref, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-ref">pango_attr_list_ref ()</a>
+</dt>
+<dt>pango_cairo_context_get_font_options, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-get-font-options">pango_cairo_context_get_font_options ()</a>
+</dt>
+<dt>pango_cairo_context_get_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-get-resolution">pango_cairo_context_get_resolution ()</a>
+</dt>
+<dt>pango_cairo_context_set_font_options, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-set-font-options">pango_cairo_context_set_font_options ()</a>
+</dt>
+<dt>pango_cairo_context_set_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-set-resolution">pango_cairo_context_set_resolution ()</a>
+</dt>
+<dt>pango_cairo_create_layout, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-create-layout">pango_cairo_create_layout ()</a>
+</dt>
+<dt>pango_cairo_font_map_create_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context">pango_cairo_font_map_create_context ()</a>
+</dt>
+<dt>pango_cairo_font_map_get_default, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default">pango_cairo_font_map_get_default ()</a>
+</dt>
+<dt>pango_cairo_font_map_get_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-resolution">pango_cairo_font_map_get_resolution ()</a>
+</dt>
+<dt>pango_cairo_font_map_new, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new">pango_cairo_font_map_new ()</a>
+</dt>
+<dt>pango_cairo_font_map_set_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution">pango_cairo_font_map_set_resolution ()</a>
+</dt>
+<dt>pango_cairo_glyph_string_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-glyph-string-path">pango_cairo_glyph_string_path ()</a>
+</dt>
+<dt>pango_cairo_layout_line_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-layout-line-path">pango_cairo_layout_line_path ()</a>
+</dt>
+<dt>pango_cairo_layout_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-layout-path">pango_cairo_layout_path ()</a>
+</dt>
+<dt>pango_cairo_show_glyph_string, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-string">pango_cairo_show_glyph_string ()</a>
+</dt>
+<dt>pango_cairo_show_layout, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-layout">pango_cairo_show_layout ()</a>
+</dt>
+<dt>pango_cairo_show_layout_line, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-layout-line">pango_cairo_show_layout_line ()</a>
+</dt>
+<dt>pango_cairo_update_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-update-context">pango_cairo_update_context ()</a>
+</dt>
+<dt>pango_cairo_update_layout, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-update-layout">pango_cairo_update_layout ()</a>
+</dt>
+<dt>pango_font_get_font_map, <a class="indexterm" href="pango-Fonts.html#pango-font-get-font-map">pango_font_get_font_map ()</a>
+</dt>
+<dt>pango_is_zero_width, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-is-zero-width">pango_is_zero_width ()</a>
+</dt>
+<dt>pango_layout_line_ref, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-ref">pango_layout_line_ref ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.12.html b/docs/html/index-1.12.html
new file mode 100755 (executable)
index 0000000..bbc4c1f
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.12</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="next" href="index-1.14.html" title="Index of new symbols in 1.14">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.10.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.14.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.12"></a>Index of new symbols in 1.12</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>pango_matrix_get_font_scale_factor, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-get-font-scale-factor">pango_matrix_get_font_scale_factor ()</a>
+</dt>
+<dt>pango_quantize_line_geometry, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-quantize-line-geometry">pango_quantize_line_geometry ()</a>
+</dt>
+<dt>pango_win32_font_description_from_logfont, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfont">pango_win32_font_description_from_logfont ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.14.html b/docs/html/index-1.14.html
new file mode 100755 (executable)
index 0000000..f56707e
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.14</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="next" href="index-1.16.html" title="Index of new symbols in 1.16">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.12.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.16.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.14"></a>Index of new symbols in 1.14</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>pango_cairo_error_underline_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-error-underline-path">pango_cairo_error_underline_path ()</a>
+</dt>
+<dt>pango_cairo_show_error_underline, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-error-underline">pango_cairo_show_error_underline ()</a>
+</dt>
+<dt>pango_font_describe_with_absolute_size, <a class="indexterm" href="pango-Fonts.html#pango-font-describe-with-absolute-size">pango_font_describe_with_absolute_size ()</a>
+</dt>
+<dt>pango_glyph_string_get_width, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-get-width">pango_glyph_string_get_width ()</a>
+</dt>
+<dt>PANGO_PIXELS_CEIL, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-PIXELS-CEIL--CAPS">PANGO_PIXELS_CEIL()</a>
+</dt>
+<dt>PANGO_PIXELS_FLOOR, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-PIXELS-FLOOR--CAPS">PANGO_PIXELS_FLOOR()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.16.html b/docs/html/index-1.16.html
new file mode 100755 (executable)
index 0000000..60479eb
--- /dev/null
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.16</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="next" href="index-1.18.html" title="Index of new symbols in 1.18">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.14.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.18.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.16"></a>Index of new symbols in 1.16</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoGravity, <a class="indexterm" href="pango-Vertical-Text.html#PangoGravity">enum PangoGravity</a>
+</dt>
+<dt>PangoGravityHint, <a class="indexterm" href="pango-Vertical-Text.html#PangoGravityHint">enum PangoGravityHint</a>
+</dt>
+<dt>pango_attr_gravity_hint_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-gravity-hint-new">pango_attr_gravity_hint_new ()</a>
+</dt>
+<dt>pango_attr_gravity_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-gravity-new">pango_attr_gravity_new ()</a>
+</dt>
+<dt>pango_color_to_string, <a class="indexterm" href="pango-Text-Attributes.html#pango-color-to-string">pango_color_to_string ()</a>
+</dt>
+<dt>pango_context_get_base_gravity, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-base-gravity">pango_context_get_base_gravity ()</a>
+</dt>
+<dt>pango_context_get_gravity, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-gravity">pango_context_get_gravity ()</a>
+</dt>
+<dt>pango_context_get_gravity_hint, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-gravity-hint">pango_context_get_gravity_hint ()</a>
+</dt>
+<dt>pango_context_set_base_gravity, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-base-gravity">pango_context_set_base_gravity ()</a>
+</dt>
+<dt>pango_context_set_gravity_hint, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-gravity-hint">pango_context_set_gravity_hint ()</a>
+</dt>
+<dt>pango_extents_to_pixels, <a class="indexterm" href="pango-Glyph-Storage.html#pango-extents-to-pixels">pango_extents_to_pixels ()</a>
+</dt>
+<dt>pango_font_description_get_gravity, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-gravity">pango_font_description_get_gravity ()</a>
+</dt>
+<dt>pango_font_description_set_gravity, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-gravity">pango_font_description_set_gravity ()</a>
+</dt>
+<dt>pango_gravity_get_for_matrix, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-get-for-matrix">pango_gravity_get_for_matrix ()</a>
+</dt>
+<dt>pango_gravity_get_for_script, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-get-for-script">pango_gravity_get_for_script ()</a>
+</dt>
+<dt>PANGO_GRAVITY_IS_VERTICAL, <a class="indexterm" href="pango-Vertical-Text.html#PANGO-GRAVITY-IS-VERTICAL--CAPS">PANGO_GRAVITY_IS_VERTICAL()</a>
+</dt>
+<dt>pango_gravity_to_rotation, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-to-rotation">pango_gravity_to_rotation ()</a>
+</dt>
+<dt>pango_language_get_default, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-get-default">pango_language_get_default ()</a>
+</dt>
+<dt>pango_layout_get_lines_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-lines-readonly">pango_layout_get_lines_readonly ()</a>
+</dt>
+<dt>pango_layout_get_line_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-line-readonly">pango_layout_get_line_readonly ()</a>
+</dt>
+<dt>pango_layout_get_unknown_glyphs_count, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-unknown-glyphs-count">pango_layout_get_unknown_glyphs_count ()</a>
+</dt>
+<dt>pango_layout_is_ellipsized, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-is-ellipsized">pango_layout_is_ellipsized ()</a>
+</dt>
+<dt>pango_layout_is_wrapped, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-is-wrapped">pango_layout_is_wrapped ()</a>
+</dt>
+<dt>pango_layout_iter_get_line_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-line-readonly">pango_layout_iter_get_line_readonly ()</a>
+</dt>
+<dt>pango_layout_iter_get_run_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-run-readonly">pango_layout_iter_get_run_readonly ()</a>
+</dt>
+<dt>pango_matrix_transform_distance, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-distance">pango_matrix_transform_distance ()</a>
+</dt>
+<dt>pango_matrix_transform_pixel_rectangle, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle">pango_matrix_transform_pixel_rectangle ()</a>
+</dt>
+<dt>pango_matrix_transform_point, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-point">pango_matrix_transform_point ()</a>
+</dt>
+<dt>pango_matrix_transform_rectangle, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-rectangle">pango_matrix_transform_rectangle ()</a>
+</dt>
+<dt>PANGO_OT_ALL_GLYPHS, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS">PANGO_OT_ALL_GLYPHS</a>
+</dt>
+<dt>PANGO_OT_DEFAULT_LANGUAGE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS">PANGO_OT_DEFAULT_LANGUAGE</a>
+</dt>
+<dt>pango_parse_enum, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-parse-enum">pango_parse_enum ()</a>
+</dt>
+<dt>pango_units_from_double, <a class="indexterm" href="pango-Glyph-Storage.html#pango-units-from-double">pango_units_from_double ()</a>
+</dt>
+<dt>pango_units_to_double, <a class="indexterm" href="pango-Glyph-Storage.html#pango-units-to-double">pango_units_to_double ()</a>
+</dt>
+<dt>pango_version, <a class="indexterm" href="pango-Version-Checking.html#pango-version">pango_version ()</a>
+</dt>
+<dt>pango_version_check, <a class="indexterm" href="pango-Version-Checking.html#pango-version-check">pango_version_check ()</a>
+</dt>
+<dt>pango_version_string, <a class="indexterm" href="pango-Version-Checking.html#pango-version-string">pango_version_string ()</a>
+</dt>
+<dt>pango_win32_font_cache_loadw, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-loadw">pango_win32_font_cache_loadw ()</a>
+</dt>
+<dt>pango_win32_font_description_from_logfontw, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfontw">pango_win32_font_description_from_logfontw ()</a>
+</dt>
+<dt>pango_win32_font_logfontw, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw">pango_win32_font_logfontw ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.18.html b/docs/html/index-1.18.html
new file mode 100755 (executable)
index 0000000..006fcfe
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.18</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="next" href="index-1.20.html" title="Index of new symbols in 1.20">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.16.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.20.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.18"></a>Index of new symbols in 1.18</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoCairoFont, <a class="indexterm" href="pango-Cairo-Rendering.html#PangoCairoFont-struct">PangoCairoFont</a>
+</dt>
+<dt>PangoOTFeatureMap, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap">PangoOTFeatureMap</a>
+</dt>
+<dt>PangoOTRulesetDescription, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription">PangoOTRulesetDescription</a>
+</dt>
+<dt>pango_atsui_font_get_cgfont, <a class="indexterm" href="pango-ATSUI-Fonts.html#pango-atsui-font-get-cgfont">pango_atsui_font_get_cgfont ()</a>
+</dt>
+<dt>pango_cairo_context_get_shape_renderer, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-get-shape-renderer">pango_cairo_context_get_shape_renderer ()</a>
+</dt>
+<dt>pango_cairo_context_set_shape_renderer, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer">pango_cairo_context_set_shape_renderer ()</a>
+</dt>
+<dt>pango_cairo_font_get_scaled_font, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-get-scaled-font">pango_cairo_font_get_scaled_font ()</a>
+</dt>
+<dt>pango_cairo_font_map_get_font_type, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-font-type">pango_cairo_font_map_get_font_type ()</a>
+</dt>
+<dt>pango_cairo_font_map_new_for_font_type, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new-for-font-type">pango_cairo_font_map_new_for_font_type ()</a>
+</dt>
+<dt>pango_font_face_is_synthesized, <a class="indexterm" href="pango-Fonts.html#pango-font-face-is-synthesized">pango_font_face_is_synthesized ()</a>
+</dt>
+<dt>PANGO_OT_NO_FEATURE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-FEATURE--CAPS">PANGO_OT_NO_FEATURE</a>
+</dt>
+<dt>PANGO_OT_NO_SCRIPT, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS">PANGO_OT_NO_SCRIPT</a>
+</dt>
+<dt>pango_ot_ruleset_description_copy, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy">pango_ot_ruleset_description_copy ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_equal, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-equal">pango_ot_ruleset_description_equal ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_free, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free">pango_ot_ruleset_description_free ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_hash, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-hash">pango_ot_ruleset_description_hash ()</a>
+</dt>
+<dt>pango_ot_ruleset_get_feature_count, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-feature-count">pango_ot_ruleset_get_feature_count ()</a>
+</dt>
+<dt>pango_ot_ruleset_get_for_description, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description">pango_ot_ruleset_get_for_description ()</a>
+</dt>
+<dt>pango_ot_ruleset_maybe_add_feature, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature">pango_ot_ruleset_maybe_add_feature ()</a>
+</dt>
+<dt>pango_ot_ruleset_maybe_add_features, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features">pango_ot_ruleset_maybe_add_features ()</a>
+</dt>
+<dt>pango_ot_ruleset_new_for, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for">pango_ot_ruleset_new_for ()</a>
+</dt>
+<dt>pango_ot_ruleset_new_from_description, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description">pango_ot_ruleset_new_from_description ()</a>
+</dt>
+<dt>PANGO_OT_TAG_DEFAULT_LANGUAGE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS">PANGO_OT_TAG_DEFAULT_LANGUAGE</a>
+</dt>
+<dt>PANGO_OT_TAG_DEFAULT_SCRIPT, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS">PANGO_OT_TAG_DEFAULT_SCRIPT</a>
+</dt>
+<dt>pango_ot_tag_from_language, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language">pango_ot_tag_from_language ()</a>
+</dt>
+<dt>pango_ot_tag_from_script, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script">pango_ot_tag_from_script ()</a>
+</dt>
+<dt>pango_ot_tag_to_language, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-to-language">pango_ot_tag_to_language ()</a>
+</dt>
+<dt>pango_ot_tag_to_script, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-to-script">pango_ot_tag_to_script ()</a>
+</dt>
+<dt>PANGO_UNITS_ROUND, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-UNITS-ROUND--CAPS">PANGO_UNITS_ROUND()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.2.html b/docs/html/index-1.2.html
new file mode 100755 (executable)
index 0000000..d1ebc94
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.2</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="next" href="index-1.4.html" title="Index of new symbols in 1.4">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-deprecated.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.4.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.2"></a>Index of new symbols in 1.2</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>pango_attr_iterator_get_attrs, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-get-attrs">pango_attr_iterator_get_attrs ()</a>
+</dt>
+<dt>pango_attr_list_filter, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-filter">pango_attr_list_filter ()</a>
+</dt>
+<dt>pango_ft2_font_map_create_context, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context">pango_ft2_font_map_create_context ()</a>
+</dt>
+<dt>pango_ft2_font_map_new, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new">pango_ft2_font_map_new ()</a>
+</dt>
+<dt>pango_ft2_font_map_set_default_substitute, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute">pango_ft2_font_map_set_default_substitute ()</a>
+</dt>
+<dt>pango_ft2_font_map_set_resolution, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-resolution">pango_ft2_font_map_set_resolution ()</a>
+</dt>
+<dt>pango_ft2_font_map_substitute_changed, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-substitute-changed">pango_ft2_font_map_substitute_changed ()</a>
+</dt>
+<dt>pango_glyph_item_apply_attrs, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-apply-attrs">pango_glyph_item_apply_attrs ()</a>
+</dt>
+<dt>pango_glyph_item_split, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-split">pango_glyph_item_split ()</a>
+</dt>
+<dt>pango_ot_info_get, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-get">pango_ot_info_get ()</a>
+</dt>
+<dt>pango_win32_get_debug_flag, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-debug-flag">pango_win32_get_debug_flag ()</a>
+</dt>
+<dt>pango_xft_font_get_glyph, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph">pango_xft_font_get_glyph ()</a>
+</dt>
+<dt>pango_xft_font_has_char, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char">pango_xft_font_has_char ()</a>
+</dt>
+<dt>pango_xft_font_lock_face, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face">pango_xft_font_lock_face ()</a>
+</dt>
+<dt>pango_xft_font_unlock_face, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face">pango_xft_font_unlock_face ()</a>
+</dt>
+<dt>pango_xft_get_font_map, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map">pango_xft_get_font_map ()</a>
+</dt>
+<dt>pango_xft_set_default_substitute, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute">pango_xft_set_default_substitute ()</a>
+</dt>
+<dt>pango_xft_shutdown_display, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-shutdown-display">pango_xft_shutdown_display ()</a>
+</dt>
+<dt>pango_xft_substitute_changed, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed">pango_xft_substitute_changed ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.20.html b/docs/html/index-1.20.html
new file mode 100755 (executable)
index 0000000..1120c85
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.20</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="next" href="index-1.22.html" title="Index of new symbols in 1.22">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.18.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.22.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.20"></a>Index of new symbols in 1.20</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>pango_attribute_init, <a class="indexterm" href="pango-Text-Attributes.html#pango-attribute-init">pango_attribute_init ()</a>
+</dt>
+<dt>PANGO_FC_GRAVITY, <a class="indexterm" href="PangoFcFontMap.html#PANGO-FC-GRAVITY--CAPS">PANGO_FC_GRAVITY</a>
+</dt>
+<dt>PANGO_FC_VERSION, <a class="indexterm" href="PangoFcFontMap.html#PANGO-FC-VERSION--CAPS">PANGO_FC_VERSION</a>
+</dt>
+<dt>PANGO_GLYPH_INVALID_INPUT, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-GLYPH-INVALID-INPUT--CAPS">PANGO_GLYPH_INVALID_INPUT</a>
+</dt>
+<dt>pango_glyph_item_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-copy">pango_glyph_item_copy ()</a>
+</dt>
+<dt>pango_layout_get_height, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-height">pango_layout_get_height ()</a>
+</dt>
+<dt>pango_layout_iter_copy, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-copy">pango_layout_iter_copy ()</a>
+</dt>
+<dt>pango_layout_iter_get_layout, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-layout">pango_layout_iter_get_layout ()</a>
+</dt>
+<dt>pango_layout_set_height, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-height">pango_layout_set_height ()</a>
+</dt>
+<dt>pango_renderer_get_layout, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-layout">pango_renderer_get_layout ()</a>
+</dt>
+<dt>pango_renderer_get_layout_line, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-layout-line">pango_renderer_get_layout_line ()</a>
+</dt>
+<dt>PANGO_TYPE_GLYPH_ITEM, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM--CAPS">PANGO_TYPE_GLYPH_ITEM</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.22.html b/docs/html/index-1.22.html
new file mode 100755 (executable)
index 0000000..fe136d9
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.22</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="next" href="index-1.24.html" title="Index of new symbols in 1.24">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.20.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.24.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.22"></a>Index of new symbols in 1.22</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoBidiType, <a class="indexterm" href="pango-Bidirectional-Text.html#PangoBidiType">enum PangoBidiType</a>
+</dt>
+<dt>PangoGlyphItemIter, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphItemIter">PangoGlyphItemIter</a>
+</dt>
+<dt>pango_attr_type_get_name, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-type-get-name">pango_attr_type_get_name ()</a>
+</dt>
+<dt>pango_bidi_type_for_unichar, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-bidi-type-for-unichar">pango_bidi_type_for_unichar ()</a>
+</dt>
+<dt>pango_cairo_create_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-create-context">pango_cairo_create_context ()</a>
+</dt>
+<dt>pango_cairo_font_map_set_default, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-default">pango_cairo_font_map_set_default ()</a>
+</dt>
+<dt>pango_cairo_show_glyph_item, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-item">pango_cairo_show_glyph_item ()</a>
+</dt>
+<dt>pango_font_map_create_context, <a class="indexterm" href="pango-Fonts.html#pango-font-map-create-context">pango_font_map_create_context ()</a>
+</dt>
+<dt>pango_glyph_item_iter_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-copy">pango_glyph_item_iter_copy ()</a>
+</dt>
+<dt>pango_glyph_item_iter_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-free">pango_glyph_item_iter_free ()</a>
+</dt>
+<dt>pango_glyph_item_iter_init_end, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-end">pango_glyph_item_iter_init_end ()</a>
+</dt>
+<dt>pango_glyph_item_iter_init_start, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-start">pango_glyph_item_iter_init_start ()</a>
+</dt>
+<dt>pango_glyph_item_iter_next_cluster, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster">pango_glyph_item_iter_next_cluster ()</a>
+</dt>
+<dt>pango_glyph_item_iter_prev_cluster, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster">pango_glyph_item_iter_prev_cluster ()</a>
+</dt>
+<dt>pango_language_get_scripts, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-get-scripts">pango_language_get_scripts ()</a>
+</dt>
+<dt>pango_layout_get_baseline, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-baseline">pango_layout_get_baseline ()</a>
+</dt>
+<dt>pango_renderer_draw_glyph_item, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-glyph-item">pango_renderer_draw_glyph_item ()</a>
+</dt>
+<dt>PANGO_TYPE_GLYPH_ITEM_ITER, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM-ITER--CAPS">PANGO_TYPE_GLYPH_ITEM_ITER</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.24.html b/docs/html/index-1.24.html
new file mode 100755 (executable)
index 0000000..10ff7a5
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.24</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="next" href="index-1.26.html" title="Index of new symbols in 1.26">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.22.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.26.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.24"></a>Index of new symbols in 1.24</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoFcFontKey, <a class="indexterm" href="PangoFcFontMap.html#PangoFcFontKey">PangoFcFontKey</a>
+</dt>
+<dt>PangoFcFontsetKey, <a class="indexterm" href="PangoFcFontMap.html#PangoFcFontsetKey">PangoFcFontsetKey</a>
+</dt>
+<dt>pango_fc_fontset_key_get_absolute_size, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-absolute-size">pango_fc_fontset_key_get_absolute_size ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_context_key, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-context-key">pango_fc_fontset_key_get_context_key ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_description, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-description">pango_fc_fontset_key_get_description ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_language, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-language">pango_fc_fontset_key_get_language ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_matrix, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-matrix">pango_fc_fontset_key_get_matrix ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_resolution, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-resolution">pango_fc_fontset_key_get_resolution ()</a>
+</dt>
+<dt>pango_fc_font_key_get_context_key, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-key-get-context-key">pango_fc_font_key_get_context_key ()</a>
+</dt>
+<dt>pango_fc_font_key_get_matrix, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-key-get-matrix">pango_fc_font_key_get_matrix ()</a>
+</dt>
+<dt>pango_fc_font_key_get_pattern, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-key-get-pattern">pango_fc_font_key_get_pattern ()</a>
+</dt>
+<dt>PANGO_FC_PRGNAME, <a class="indexterm" href="PangoFcFontMap.html#PANGO-FC-PRGNAME--CAPS">PANGO_FC_PRGNAME</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.26.html b/docs/html/index-1.26.html
new file mode 100755 (executable)
index 0000000..b3e861b
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.26</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.24.html" title="Index of new symbols in 1.24">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.24.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td> </td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.26"></a>Index of new symbols in 1.26</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>pango_glyph_item_get_logical_widths, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths">pango_glyph_item_get_logical_widths ()</a>
+</dt>
+<dt>pango_gravity_get_for_script_and_width, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-get-for-script-and-width">pango_gravity_get_for_script_and_width ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.4.html b/docs/html/index-1.4.html
new file mode 100755 (executable)
index 0000000..c4a4385
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.4</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="next" href="index-1.6.html" title="Index of new symbols in 1.6">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.2.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.6.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.4"></a>Index of new symbols in 1.4</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoFontsetForeachFunc, <a class="indexterm" href="pango-Fonts.html#PangoFontsetForeachFunc">PangoFontsetForeachFunc ()</a>
+</dt>
+<dt>pango_attr_fallback_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-fallback-new">pango_attr_fallback_new ()</a>
+</dt>
+<dt>pango_fc_font_description_from_pattern, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-description-from-pattern">pango_fc_font_description_from_pattern ()</a>
+</dt>
+<dt>pango_fc_font_get_glyph, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-get-glyph">pango_fc_font_get_glyph ()</a>
+</dt>
+<dt>pango_fc_font_get_unknown_glyph, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_fc_font_has_char, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-has-char">pango_fc_font_has_char ()</a>
+</dt>
+<dt>pango_fc_font_kern_glyphs, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-kern-glyphs">pango_fc_font_kern_glyphs ()</a>
+</dt>
+<dt>pango_fc_font_lock_face, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-lock-face">pango_fc_font_lock_face ()</a>
+</dt>
+<dt>pango_fc_font_map_cache_clear, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-cache-clear">pango_fc_font_map_cache_clear ()</a>
+</dt>
+<dt>pango_fc_font_map_create_context, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-create-context">pango_fc_font_map_create_context ()</a>
+</dt>
+<dt>pango_fc_font_map_shutdown, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-shutdown">pango_fc_font_map_shutdown ()</a>
+</dt>
+<dt>pango_fc_font_unlock_face, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-unlock-face">pango_fc_font_unlock_face ()</a>
+</dt>
+<dt>pango_find_base_dir, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-find-base-dir">pango_find_base_dir ()</a>
+</dt>
+<dt>pango_fontset_foreach, <a class="indexterm" href="pango-Fonts.html#pango-fontset-foreach">pango_fontset_foreach ()</a>
+</dt>
+<dt>pango_font_face_list_sizes, <a class="indexterm" href="pango-Fonts.html#pango-font-face-list-sizes">pango_font_face_list_sizes ()</a>
+</dt>
+<dt>pango_font_family_is_monospace, <a class="indexterm" href="pango-Fonts.html#pango-font-family-is-monospace">pango_font_family_is_monospace ()</a>
+</dt>
+<dt>pango_font_map_get_shape_engine_type, <a class="indexterm" href="pango-Fonts.html#pango-font-map-get-shape-engine-type">pango_font_map_get_shape_engine_type ()</a>
+</dt>
+<dt>pango_itemize_with_base_dir, <a class="indexterm" href="pango-Text-Processing.html#pango-itemize-with-base-dir">pango_itemize_with_base_dir ()</a>
+</dt>
+<dt>pango_language_includes_script, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-includes-script">pango_language_includes_script ()</a>
+</dt>
+<dt>pango_layout_get_auto_dir, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-auto-dir">pango_layout_get_auto_dir ()</a>
+</dt>
+<dt>pango_layout_set_auto_dir, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-auto-dir">pango_layout_set_auto_dir ()</a>
+</dt>
+<dt>pango_log2vis_get_embedding_levels, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-log2vis-get-embedding-levels">pango_log2vis_get_embedding_levels ()</a>
+</dt>
+<dt>pango_map_get_engines, <a class="indexterm" href="pango-Modules.html#pango-map-get-engines">pango_map_get_engines ()</a>
+</dt>
+<dt>pango_ot_buffer_add_glyph, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-add-glyph">pango_ot_buffer_add_glyph ()</a>
+</dt>
+<dt>pango_ot_buffer_clear, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-clear">pango_ot_buffer_clear ()</a>
+</dt>
+<dt>pango_ot_buffer_destroy, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy">pango_ot_buffer_destroy ()</a>
+</dt>
+<dt>pango_ot_buffer_get_glyphs, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-get-glyphs">pango_ot_buffer_get_glyphs ()</a>
+</dt>
+<dt>pango_ot_buffer_new, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-new">pango_ot_buffer_new ()</a>
+</dt>
+<dt>pango_ot_buffer_output, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-output">pango_ot_buffer_output ()</a>
+</dt>
+<dt>pango_ot_buffer_set_rtl, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-rtl">pango_ot_buffer_set_rtl ()</a>
+</dt>
+<dt>pango_ot_ruleset_position, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-position">pango_ot_ruleset_position ()</a>
+</dt>
+<dt>pango_ot_ruleset_substitute, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-substitute">pango_ot_ruleset_substitute ()</a>
+</dt>
+<dt>pango_script_for_unichar, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-for-unichar">pango_script_for_unichar ()</a>
+</dt>
+<dt>pango_script_get_sample_language, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-get-sample-language">pango_script_get_sample_language ()</a>
+</dt>
+<dt>pango_script_iter_free, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-free">pango_script_iter_free ()</a>
+</dt>
+<dt>pango_script_iter_get_range, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-get-range">pango_script_iter_get_range ()</a>
+</dt>
+<dt>pango_script_iter_new, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-new">pango_script_iter_new ()</a>
+</dt>
+<dt>pango_script_iter_next, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-next">pango_script_iter_next ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.6.html b/docs/html/index-1.6.html
new file mode 100755 (executable)
index 0000000..e07dd4a
--- /dev/null
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.6</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="next" href="index-1.8.html" title="Index of new symbols in 1.8">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.4.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.8.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.6"></a>Index of new symbols in 1.6</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoFcDecoder, <a class="indexterm" href="PangoFcDecoder.html#PangoFcDecoder-struct">PangoFcDecoder</a>
+</dt>
+<dt>PangoFcDecoderClass, <a class="indexterm" href="PangoFcDecoder.html#PangoFcDecoderClass">PangoFcDecoderClass</a>
+</dt>
+<dt>PangoMatrix, <a class="indexterm" href="pango-Glyph-Storage.html#PangoMatrix">PangoMatrix</a>
+</dt>
+<dt>pango_attr_letter_spacing_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-letter-spacing-new">pango_attr_letter_spacing_new ()</a>
+</dt>
+<dt>pango_context_get_font_map, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-font-map">pango_context_get_font_map ()</a>
+</dt>
+<dt>pango_context_get_matrix, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-matrix">pango_context_get_matrix ()</a>
+</dt>
+<dt>pango_context_set_matrix, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-matrix">pango_context_set_matrix ()</a>
+</dt>
+<dt>pango_fc_decoder_get_charset, <a class="indexterm" href="PangoFcDecoder.html#pango-fc-decoder-get-charset">pango_fc_decoder_get_charset ()</a>
+</dt>
+<dt>pango_fc_decoder_get_glyph, <a class="indexterm" href="PangoFcDecoder.html#pango-fc-decoder-get-glyph">pango_fc_decoder_get_glyph ()</a>
+</dt>
+<dt>pango_font_metrics_get_strikethrough_position, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-strikethrough-position">pango_font_metrics_get_strikethrough_position ()</a>
+</dt>
+<dt>pango_font_metrics_get_strikethrough_thickness, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-strikethrough-thickness">pango_font_metrics_get_strikethrough_thickness ()</a>
+</dt>
+<dt>pango_font_metrics_get_underline_position, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-underline-position">pango_font_metrics_get_underline_position ()</a>
+</dt>
+<dt>pango_font_metrics_get_underline_thickness, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-underline-thickness">pango_font_metrics_get_underline_thickness ()</a>
+</dt>
+<dt>pango_ft2_render_layout_line_subpixel, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line-subpixel">pango_ft2_render_layout_line_subpixel ()</a>
+</dt>
+<dt>pango_ft2_render_layout_subpixel, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-subpixel">pango_ft2_render_layout_subpixel ()</a>
+</dt>
+<dt>pango_ft2_render_transformed, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-transformed">pango_ft2_render_transformed ()</a>
+</dt>
+<dt>pango_glyph_item_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-free">pango_glyph_item_free ()</a>
+</dt>
+<dt>pango_glyph_item_letter_space, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-letter-space">pango_glyph_item_letter_space ()</a>
+</dt>
+<dt>pango_layout_get_ellipsize, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-ellipsize">pango_layout_get_ellipsize ()</a>
+</dt>
+<dt>pango_layout_set_ellipsize, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-ellipsize">pango_layout_set_ellipsize ()</a>
+</dt>
+<dt>pango_matrix_concat, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-concat">pango_matrix_concat ()</a>
+</dt>
+<dt>pango_matrix_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-copy">pango_matrix_copy ()</a>
+</dt>
+<dt>pango_matrix_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-free">pango_matrix_free ()</a>
+</dt>
+<dt>PANGO_MATRIX_INIT, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-MATRIX-INIT--CAPS">PANGO_MATRIX_INIT</a>
+</dt>
+<dt>pango_matrix_rotate, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-rotate">pango_matrix_rotate ()</a>
+</dt>
+<dt>pango_matrix_scale, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-scale">pango_matrix_scale ()</a>
+</dt>
+<dt>pango_matrix_translate, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-translate">pango_matrix_translate ()</a>
+</dt>
+<dt>pango_ot_buffer_set_zero_width_marks, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-zero-width-marks">pango_ot_buffer_set_zero_width_marks ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-1.8.html b/docs/html/index-1.8.html
new file mode 100755 (executable)
index 0000000..3f127ce
--- /dev/null
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 1.8</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="next" href="index-1.10.html" title="Index of new symbols in 1.10">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-1.6.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.10.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-1.8"></a>Index of new symbols in 1.8</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoRenderer, <a class="indexterm" href="PangoRenderer.html#PangoRenderer-struct">PangoRenderer</a>
+</dt>
+<dt>PangoRendererClass, <a class="indexterm" href="PangoRenderer.html#PangoRendererClass">PangoRendererClass</a>
+</dt>
+<dt>PangoRenderPart, <a class="indexterm" href="PangoRenderer.html#PangoRenderPart">enum PangoRenderPart</a>
+</dt>
+<dt>PangoXftRenderer, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer-struct">PangoXftRenderer</a>
+</dt>
+<dt>PangoXftRendererClass, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass">PangoXftRendererClass</a>
+</dt>
+<dt>pango_attr_shape_new_with_data, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-shape-new-with-data">pango_attr_shape_new_with_data ()</a>
+</dt>
+<dt>pango_attr_size_new_absolute, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-size-new-absolute">pango_attr_size_new_absolute ()</a>
+</dt>
+<dt>pango_attr_strikethrough_color_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-strikethrough-color-new">pango_attr_strikethrough_color_new ()</a>
+</dt>
+<dt>pango_attr_underline_color_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-underline-color-new">pango_attr_underline_color_new ()</a>
+</dt>
+<dt>pango_font_description_get_size_is_absolute, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-size-is-absolute">pango_font_description_get_size_is_absolute ()</a>
+</dt>
+<dt>pango_font_description_set_absolute_size, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-absolute-size">pango_font_description_set_absolute_size ()</a>
+</dt>
+<dt>pango_layout_get_font_description, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-font-description">pango_layout_get_font_description ()</a>
+</dt>
+<dt>pango_renderer_activate, <a class="indexterm" href="PangoRenderer.html#pango-renderer-activate">pango_renderer_activate ()</a>
+</dt>
+<dt>pango_renderer_deactivate, <a class="indexterm" href="PangoRenderer.html#pango-renderer-deactivate">pango_renderer_deactivate ()</a>
+</dt>
+<dt>pango_renderer_draw_error_underline, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-error-underline">pango_renderer_draw_error_underline ()</a>
+</dt>
+<dt>pango_renderer_draw_glyph, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-glyph">pango_renderer_draw_glyph ()</a>
+</dt>
+<dt>pango_renderer_draw_glyphs, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-glyphs">pango_renderer_draw_glyphs ()</a>
+</dt>
+<dt>pango_renderer_draw_layout, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-layout">pango_renderer_draw_layout ()</a>
+</dt>
+<dt>pango_renderer_draw_layout_line, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-layout-line">pango_renderer_draw_layout_line ()</a>
+</dt>
+<dt>pango_renderer_draw_rectangle, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-rectangle">pango_renderer_draw_rectangle ()</a>
+</dt>
+<dt>pango_renderer_draw_trapezoid, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-trapezoid">pango_renderer_draw_trapezoid ()</a>
+</dt>
+<dt>pango_renderer_get_color, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-color">pango_renderer_get_color ()</a>
+</dt>
+<dt>pango_renderer_get_matrix, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-matrix">pango_renderer_get_matrix ()</a>
+</dt>
+<dt>pango_renderer_part_changed, <a class="indexterm" href="PangoRenderer.html#pango-renderer-part-changed">pango_renderer_part_changed ()</a>
+</dt>
+<dt>pango_renderer_set_color, <a class="indexterm" href="PangoRenderer.html#pango-renderer-set-color">pango_renderer_set_color ()</a>
+</dt>
+<dt>pango_renderer_set_matrix, <a class="indexterm" href="PangoRenderer.html#pango-renderer-set-matrix">pango_renderer_set_matrix ()</a>
+</dt>
+<dt>pango_xft_renderer_new, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-new">pango_xft_renderer_new ()</a>
+</dt>
+<dt>pango_xft_renderer_set_default_color, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-default-color">pango_xft_renderer_set_default_color ()</a>
+</dt>
+<dt>pango_xft_renderer_set_draw, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw">pango_xft_renderer_set_draw ()</a>
+</dt>
+<dt>pango_xft_render_layout, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout">pango_xft_render_layout ()</a>
+</dt>
+<dt>pango_xft_render_layout_line, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout-line">pango_xft_render_layout_line ()</a>
+</dt>
+<dt>pango_xft_render_transformed, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-transformed">pango_xft_render_transformed ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-all.html b/docs/html/index-all.html
new file mode 100755 (executable)
index 0000000..f3114b8
--- /dev/null
@@ -0,0 +1,1534 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="next" href="index-deprecated.html" title="Index of deprecated symbols">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="pango-hierarchy.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-deprecated.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-all"></a>Index</h2></div></div></div>
+<div class="index">
+<div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoAlignment, <a class="indexterm" href="pango-Layout-Objects.html#PangoAlignment">enum PangoAlignment</a>
+</dt>
+<dt>PangoAnalysis, <a class="indexterm" href="pango-Text-Processing.html#PangoAnalysis">PangoAnalysis</a>
+</dt>
+<dt>PangoAttrClass, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrClass">PangoAttrClass</a>
+</dt>
+<dt>PangoAttrColor, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrColor">PangoAttrColor</a>
+</dt>
+<dt>PangoAttrDataCopyFunc, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrDataCopyFunc">PangoAttrDataCopyFunc ()</a>
+</dt>
+<dt>PangoAttrFilterFunc, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrFilterFunc">PangoAttrFilterFunc ()</a>
+</dt>
+<dt>PangoAttrFloat, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrFloat">PangoAttrFloat</a>
+</dt>
+<dt>PangoAttrFontDesc, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrFontDesc">PangoAttrFontDesc</a>
+</dt>
+<dt>PangoAttribute, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttribute">PangoAttribute</a>
+</dt>
+<dt>PangoAttrInt, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrInt">PangoAttrInt</a>
+</dt>
+<dt>PangoAttrIterator, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrIterator">PangoAttrIterator</a>
+</dt>
+<dt>PangoAttrLanguage, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrLanguage">PangoAttrLanguage</a>
+</dt>
+<dt>PangoAttrList, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrList">PangoAttrList</a>
+</dt>
+<dt>PangoAttrShape, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrShape">PangoAttrShape</a>
+</dt>
+<dt>PangoAttrSize, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrSize">PangoAttrSize</a>
+</dt>
+<dt>PangoAttrString, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrString">PangoAttrString</a>
+</dt>
+<dt>PangoAttrType, <a class="indexterm" href="pango-Text-Attributes.html#PangoAttrType">enum PangoAttrType</a>
+</dt>
+<dt>PangoBidiType, <a class="indexterm" href="pango-Bidirectional-Text.html#PangoBidiType">enum PangoBidiType</a>
+</dt>
+<dt>PangoCairoFont, <a class="indexterm" href="pango-Cairo-Rendering.html#PangoCairoFont-struct">PangoCairoFont</a>
+</dt>
+<dt>PangoCairoFontMap, <a class="indexterm" href="pango-Cairo-Rendering.html#PangoCairoFontMap-struct">PangoCairoFontMap</a>
+</dt>
+<dt>PangoCairoShapeRendererFunc, <a class="indexterm" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc ()</a>
+</dt>
+<dt>PangoColor, <a class="indexterm" href="pango-Text-Attributes.html#PangoColor">PangoColor</a>
+</dt>
+<dt>PangoContext, <a class="indexterm" href="pango-Text-Processing.html#PangoContext-struct">PangoContext</a>
+</dt>
+<dt>PangoCoverage, <a class="indexterm" href="pango-Coverage-Maps.html#PangoCoverage">PangoCoverage</a>
+</dt>
+<dt>PangoCoverageLevel, <a class="indexterm" href="pango-Coverage-Maps.html#PangoCoverageLevel">enum PangoCoverageLevel</a>
+</dt>
+<dt>PangoDirection, <a class="indexterm" href="pango-Bidirectional-Text.html#PangoDirection">enum PangoDirection</a>
+</dt>
+<dt>PangoEllipsizeMode, <a class="indexterm" href="pango-Layout-Objects.html#PangoEllipsizeMode">enum PangoEllipsizeMode</a>
+</dt>
+<dt>PangoEngine, <a class="indexterm" href="pango-Engines.html#PangoEngine-struct">PangoEngine</a>
+</dt>
+<dt>PangoEngineClass, <a class="indexterm" href="pango-Engines.html#PangoEngineClass">PangoEngineClass</a>
+</dt>
+<dt>PangoEngineInfo, <a class="indexterm" href="pango-Engines.html#PangoEngineInfo">PangoEngineInfo</a>
+</dt>
+<dt>PangoEngineLang, <a class="indexterm" href="PangoEngineLang.html#PangoEngineLang-struct">PangoEngineLang</a>
+</dt>
+<dt>PangoEngineLangClass, <a class="indexterm" href="PangoEngineLang.html#PangoEngineLangClass">PangoEngineLangClass</a>
+</dt>
+<dt>PangoEngineScriptInfo, <a class="indexterm" href="pango-Engines.html#PangoEngineScriptInfo">PangoEngineScriptInfo</a>
+</dt>
+<dt>PangoEngineShape, <a class="indexterm" href="PangoEngineShape.html#PangoEngineShape-struct">PangoEngineShape</a>
+</dt>
+<dt>PangoEngineShapeClass, <a class="indexterm" href="PangoEngineShape.html#PangoEngineShapeClass">PangoEngineShapeClass</a>
+</dt>
+<dt>PangoFcDecoder, <a class="indexterm" href="PangoFcDecoder.html#PangoFcDecoder-struct">PangoFcDecoder</a>
+</dt>
+<dt>PangoFcDecoderClass, <a class="indexterm" href="PangoFcDecoder.html#PangoFcDecoderClass">PangoFcDecoderClass</a>
+</dt>
+<dt>PangoFcDecoderFindFunc, <a class="indexterm" href="PangoFcFontMap.html#PangoFcDecoderFindFunc">PangoFcDecoderFindFunc ()</a>
+</dt>
+<dt>PangoFcFont, <a class="indexterm" href="PangoFcFont.html#PangoFcFont-struct">PangoFcFont</a>
+</dt>
+<dt>PangoFcFont:fontmap, <a class="indexterm" href="PangoFcFont.html#PangoFcFont--fontmap">The "fontmap" property</a>
+</dt>
+<dt>PangoFcFont:pattern, <a class="indexterm" href="PangoFcFont.html#PangoFcFont--pattern">The "pattern" property</a>
+</dt>
+<dt>PangoFcFontClass, <a class="indexterm" href="PangoFcFont.html#PangoFcFontClass">PangoFcFontClass</a>
+</dt>
+<dt>PangoFcFontKey, <a class="indexterm" href="PangoFcFontMap.html#PangoFcFontKey">PangoFcFontKey</a>
+</dt>
+<dt>PangoFcFontMap, <a class="indexterm" href="PangoFcFontMap.html#PangoFcFontMap-struct">PangoFcFontMap</a>
+</dt>
+<dt>PangoFcFontMapClass, <a class="indexterm" href="PangoFcFontMap.html#PangoFcFontMapClass">PangoFcFontMapClass</a>
+</dt>
+<dt>PangoFcFontsetKey, <a class="indexterm" href="PangoFcFontMap.html#PangoFcFontsetKey">PangoFcFontsetKey</a>
+</dt>
+<dt>PangoFont, <a class="indexterm" href="pango-Fonts.html#PangoFont-struct">PangoFont</a>
+</dt>
+<dt>PangoFontDescription, <a class="indexterm" href="pango-Fonts.html#PangoFontDescription">PangoFontDescription</a>
+</dt>
+<dt>PangoFontFace, <a class="indexterm" href="pango-Fonts.html#PangoFontFace-struct">PangoFontFace</a>
+</dt>
+<dt>PangoFontFamily, <a class="indexterm" href="pango-Fonts.html#PangoFontFamily-struct">PangoFontFamily</a>
+</dt>
+<dt>PangoFontMap, <a class="indexterm" href="pango-Fonts.html#PangoFontMap-struct">PangoFontMap</a>
+</dt>
+<dt>PangoFontMapClass, <a class="indexterm" href="pango-Fonts.html#PangoFontMapClass">PangoFontMapClass</a>
+</dt>
+<dt>PangoFontMask, <a class="indexterm" href="pango-Fonts.html#PangoFontMask">enum PangoFontMask</a>
+</dt>
+<dt>PangoFontMetrics, <a class="indexterm" href="pango-Fonts.html#PangoFontMetrics">PangoFontMetrics</a>
+</dt>
+<dt>PangoFontset, <a class="indexterm" href="pango-Fonts.html#PangoFontset-struct">PangoFontset</a>
+</dt>
+<dt>PangoFontsetClass, <a class="indexterm" href="pango-Fonts.html#PangoFontsetClass">PangoFontsetClass</a>
+</dt>
+<dt>PangoFontsetForeachFunc, <a class="indexterm" href="pango-Fonts.html#PangoFontsetForeachFunc">PangoFontsetForeachFunc ()</a>
+</dt>
+<dt>PangoFontsetSimple, <a class="indexterm" href="pango-Fonts.html#PangoFontsetSimple-struct">PangoFontsetSimple</a>
+</dt>
+<dt>PangoFreeGCFunc, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc">PangoFreeGCFunc ()</a>
+</dt>
+<dt>PangoFT2FontMap, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap-struct">PangoFT2FontMap</a>
+</dt>
+<dt>PangoFT2SubstituteFunc, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc">PangoFT2SubstituteFunc ()</a>
+</dt>
+<dt>PangoGetGCFunc, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc">PangoGetGCFunc ()</a>
+</dt>
+<dt>PangoGlyph, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyph">PangoGlyph</a>
+</dt>
+<dt>PangoGlyphGeometry, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphGeometry">PangoGlyphGeometry</a>
+</dt>
+<dt>PangoGlyphInfo, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphInfo">PangoGlyphInfo</a>
+</dt>
+<dt>PangoGlyphItem, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphItem">PangoGlyphItem</a>
+</dt>
+<dt>PangoGlyphItemIter, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphItemIter">PangoGlyphItemIter</a>
+</dt>
+<dt>PangoGlyphString, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphString">PangoGlyphString</a>
+</dt>
+<dt>PangoGlyphUnit, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphUnit">PangoGlyphUnit</a>
+</dt>
+<dt>PangoGlyphVisAttr, <a class="indexterm" href="pango-Glyph-Storage.html#PangoGlyphVisAttr">PangoGlyphVisAttr</a>
+</dt>
+<dt>PangoGravity, <a class="indexterm" href="pango-Vertical-Text.html#PangoGravity">enum PangoGravity</a>
+</dt>
+<dt>PangoGravityHint, <a class="indexterm" href="pango-Vertical-Text.html#PangoGravityHint">enum PangoGravityHint</a>
+</dt>
+<dt>PangoIncludedModule, <a class="indexterm" href="pango-Modules.html#PangoIncludedModule">PangoIncludedModule</a>
+</dt>
+<dt>PangoItem, <a class="indexterm" href="pango-Text-Processing.html#PangoItem">PangoItem</a>
+</dt>
+<dt>PangoLanguage, <a class="indexterm" href="pango-Scripts-and-Languages.html#PangoLanguage">PangoLanguage</a>
+</dt>
+<dt>PangoLayout, <a class="indexterm" href="pango-Layout-Objects.html#PangoLayout-struct">PangoLayout</a>
+</dt>
+<dt>PangoLayoutIter, <a class="indexterm" href="pango-Layout-Objects.html#PangoLayoutIter">PangoLayoutIter</a>
+</dt>
+<dt>PangoLayoutLine, <a class="indexterm" href="pango-Layout-Objects.html#PangoLayoutLine">PangoLayoutLine</a>
+</dt>
+<dt>PangoLayoutRun, <a class="indexterm" href="pango-Layout-Objects.html#PangoLayoutRun">PangoLayoutRun</a>
+</dt>
+<dt>PangoLogAttr, <a class="indexterm" href="pango-Text-Processing.html#PangoLogAttr">PangoLogAttr</a>
+</dt>
+<dt>PangoMap, <a class="indexterm" href="pango-Modules.html#PangoMap">PangoMap</a>
+</dt>
+<dt>PangoMapEntry, <a class="indexterm" href="pango-Modules.html#PangoMapEntry">PangoMapEntry</a>
+</dt>
+<dt>PangoMatrix, <a class="indexterm" href="pango-Glyph-Storage.html#PangoMatrix">PangoMatrix</a>
+</dt>
+<dt>PangoOTBuffer, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTBuffer">PangoOTBuffer</a>
+</dt>
+<dt>PangoOTFeatureMap, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap">PangoOTFeatureMap</a>
+</dt>
+<dt>PangoOTGlyph, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTGlyph">PangoOTGlyph</a>
+</dt>
+<dt>PangoOTInfo, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTInfo-struct">PangoOTInfo</a>
+</dt>
+<dt>PangoOTRuleset, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTRuleset-struct">PangoOTRuleset</a>
+</dt>
+<dt>PangoOTRulesetDescription, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription">PangoOTRulesetDescription</a>
+</dt>
+<dt>PangoOTTableType, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTTableType">enum PangoOTTableType</a>
+</dt>
+<dt>PangoOTTag, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PangoOTTag">PangoOTTag</a>
+</dt>
+<dt>PangoRectangle, <a class="indexterm" href="pango-Glyph-Storage.html#PangoRectangle">PangoRectangle</a>
+</dt>
+<dt>PangoRenderer, <a class="indexterm" href="PangoRenderer.html#PangoRenderer-struct">PangoRenderer</a>
+</dt>
+<dt>PangoRendererClass, <a class="indexterm" href="PangoRenderer.html#PangoRendererClass">PangoRendererClass</a>
+</dt>
+<dt>PangoRenderPart, <a class="indexterm" href="PangoRenderer.html#PangoRenderPart">enum PangoRenderPart</a>
+</dt>
+<dt>PangoScript, <a class="indexterm" href="pango-Scripts-and-Languages.html#PangoScript">enum PangoScript</a>
+</dt>
+<dt>PangoScriptIter, <a class="indexterm" href="pango-Scripts-and-Languages.html#PangoScriptIter">PangoScriptIter</a>
+</dt>
+<dt>PangoStretch, <a class="indexterm" href="pango-Fonts.html#PangoStretch">enum PangoStretch</a>
+</dt>
+<dt>PangoStyle, <a class="indexterm" href="pango-Fonts.html#PangoStyle">enum PangoStyle</a>
+</dt>
+<dt>PangoTabAlign, <a class="indexterm" href="pango-Tab-Stops.html#PangoTabAlign">enum PangoTabAlign</a>
+</dt>
+<dt>PangoTabArray, <a class="indexterm" href="pango-Tab-Stops.html#PangoTabArray">PangoTabArray</a>
+</dt>
+<dt>PangoUnderline, <a class="indexterm" href="pango-Text-Attributes.html#PangoUnderline">enum PangoUnderline</a>
+</dt>
+<dt>PangoVariant, <a class="indexterm" href="pango-Fonts.html#PangoVariant">enum PangoVariant</a>
+</dt>
+<dt>PangoWeight, <a class="indexterm" href="pango-Fonts.html#PangoWeight">enum PangoWeight</a>
+</dt>
+<dt>PangoWin32FontCache, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache">PangoWin32FontCache</a>
+</dt>
+<dt>PangoWrapMode, <a class="indexterm" href="pango-Layout-Objects.html#PangoWrapMode">enum PangoWrapMode</a>
+</dt>
+<dt>PangoXFontCache, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache">PangoXFontCache</a>
+</dt>
+<dt>PangoXftFont, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFont-struct">PangoXftFont</a>
+</dt>
+<dt>PangoXftFontMap, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap-struct">PangoXftFontMap</a>
+</dt>
+<dt>PangoXftRenderer, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer-struct">PangoXftRenderer</a>
+</dt>
+<dt>PangoXftRenderer:display, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--display">The "display" property</a>
+</dt>
+<dt>PangoXftRenderer:screen, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--screen">The "screen" property</a>
+</dt>
+<dt>PangoXftRendererClass, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass">PangoXftRendererClass</a>
+</dt>
+<dt>PangoXftSubstituteFunc, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc">PangoXftSubstituteFunc ()</a>
+</dt>
+<dt>PangoXSubfont, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont">PangoXSubfont</a>
+</dt>
+<dt>PANGO_ANALYSIS_FLAG_CENTERED_BASELINE, <a class="indexterm" href="pango-Text-Processing.html#PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS">PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</a>
+</dt>
+<dt>PANGO_ASCENT, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-ASCENT--CAPS">PANGO_ASCENT()</a>
+</dt>
+<dt>pango_atsui_font_get_cgfont, <a class="indexterm" href="pango-ATSUI-Fonts.html#pango-atsui-font-get-cgfont">pango_atsui_font_get_cgfont ()</a>
+</dt>
+<dt>pango_attribute_copy, <a class="indexterm" href="pango-Text-Attributes.html#pango-attribute-copy">pango_attribute_copy ()</a>
+</dt>
+<dt>pango_attribute_destroy, <a class="indexterm" href="pango-Text-Attributes.html#pango-attribute-destroy">pango_attribute_destroy ()</a>
+</dt>
+<dt>pango_attribute_equal, <a class="indexterm" href="pango-Text-Attributes.html#pango-attribute-equal">pango_attribute_equal ()</a>
+</dt>
+<dt>pango_attribute_init, <a class="indexterm" href="pango-Text-Attributes.html#pango-attribute-init">pango_attribute_init ()</a>
+</dt>
+<dt>pango_attr_background_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-background-new">pango_attr_background_new ()</a>
+</dt>
+<dt>pango_attr_fallback_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-fallback-new">pango_attr_fallback_new ()</a>
+</dt>
+<dt>pango_attr_family_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-family-new">pango_attr_family_new ()</a>
+</dt>
+<dt>pango_attr_font_desc_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-font-desc-new">pango_attr_font_desc_new ()</a>
+</dt>
+<dt>pango_attr_foreground_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-foreground-new">pango_attr_foreground_new ()</a>
+</dt>
+<dt>pango_attr_gravity_hint_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-gravity-hint-new">pango_attr_gravity_hint_new ()</a>
+</dt>
+<dt>pango_attr_gravity_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-gravity-new">pango_attr_gravity_new ()</a>
+</dt>
+<dt>PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS">PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</a>
+</dt>
+<dt>PANGO_ATTR_INDEX_TO_TEXT_END, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-ATTR-INDEX-TO-TEXT-END--CAPS">PANGO_ATTR_INDEX_TO_TEXT_END</a>
+</dt>
+<dt>pango_attr_iterator_copy, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-copy">pango_attr_iterator_copy ()</a>
+</dt>
+<dt>pango_attr_iterator_destroy, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-destroy">pango_attr_iterator_destroy ()</a>
+</dt>
+<dt>pango_attr_iterator_get, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-get">pango_attr_iterator_get ()</a>
+</dt>
+<dt>pango_attr_iterator_get_attrs, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-get-attrs">pango_attr_iterator_get_attrs ()</a>
+</dt>
+<dt>pango_attr_iterator_get_font, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-get-font">pango_attr_iterator_get_font ()</a>
+</dt>
+<dt>pango_attr_iterator_next, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-next">pango_attr_iterator_next ()</a>
+</dt>
+<dt>pango_attr_iterator_range, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-iterator-range">pango_attr_iterator_range ()</a>
+</dt>
+<dt>pango_attr_language_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-language-new">pango_attr_language_new ()</a>
+</dt>
+<dt>pango_attr_letter_spacing_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-letter-spacing-new">pango_attr_letter_spacing_new ()</a>
+</dt>
+<dt>pango_attr_list_change, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-change">pango_attr_list_change ()</a>
+</dt>
+<dt>pango_attr_list_copy, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-copy">pango_attr_list_copy ()</a>
+</dt>
+<dt>pango_attr_list_filter, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-filter">pango_attr_list_filter ()</a>
+</dt>
+<dt>pango_attr_list_get_iterator, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-get-iterator">pango_attr_list_get_iterator ()</a>
+</dt>
+<dt>pango_attr_list_insert, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-insert">pango_attr_list_insert ()</a>
+</dt>
+<dt>pango_attr_list_insert_before, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-insert-before">pango_attr_list_insert_before ()</a>
+</dt>
+<dt>pango_attr_list_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-new">pango_attr_list_new ()</a>
+</dt>
+<dt>pango_attr_list_ref, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-ref">pango_attr_list_ref ()</a>
+</dt>
+<dt>pango_attr_list_splice, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-splice">pango_attr_list_splice ()</a>
+</dt>
+<dt>pango_attr_list_unref, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-list-unref">pango_attr_list_unref ()</a>
+</dt>
+<dt>pango_attr_rise_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-rise-new">pango_attr_rise_new ()</a>
+</dt>
+<dt>pango_attr_scale_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-scale-new">pango_attr_scale_new ()</a>
+</dt>
+<dt>pango_attr_shape_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-shape-new">pango_attr_shape_new ()</a>
+</dt>
+<dt>pango_attr_shape_new_with_data, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-shape-new-with-data">pango_attr_shape_new_with_data ()</a>
+</dt>
+<dt>pango_attr_size_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-size-new">pango_attr_size_new ()</a>
+</dt>
+<dt>pango_attr_size_new_absolute, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-size-new-absolute">pango_attr_size_new_absolute ()</a>
+</dt>
+<dt>pango_attr_stretch_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-stretch-new">pango_attr_stretch_new ()</a>
+</dt>
+<dt>pango_attr_strikethrough_color_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-strikethrough-color-new">pango_attr_strikethrough_color_new ()</a>
+</dt>
+<dt>pango_attr_strikethrough_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-strikethrough-new">pango_attr_strikethrough_new ()</a>
+</dt>
+<dt>pango_attr_style_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-style-new">pango_attr_style_new ()</a>
+</dt>
+<dt>pango_attr_type_get_name, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-type-get-name">pango_attr_type_get_name ()</a>
+</dt>
+<dt>pango_attr_type_register, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-type-register">pango_attr_type_register ()</a>
+</dt>
+<dt>pango_attr_underline_color_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-underline-color-new">pango_attr_underline_color_new ()</a>
+</dt>
+<dt>pango_attr_underline_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-underline-new">pango_attr_underline_new ()</a>
+</dt>
+<dt>pango_attr_variant_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-variant-new">pango_attr_variant_new ()</a>
+</dt>
+<dt>pango_attr_weight_new, <a class="indexterm" href="pango-Text-Attributes.html#pango-attr-weight-new">pango_attr_weight_new ()</a>
+</dt>
+<dt>pango_bidi_type_for_unichar, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-bidi-type-for-unichar">pango_bidi_type_for_unichar ()</a>
+</dt>
+<dt>pango_break, <a class="indexterm" href="pango-Text-Processing.html#pango-break">pango_break ()</a>
+</dt>
+<dt>pango_cairo_context_get_font_options, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-get-font-options">pango_cairo_context_get_font_options ()</a>
+</dt>
+<dt>pango_cairo_context_get_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-get-resolution">pango_cairo_context_get_resolution ()</a>
+</dt>
+<dt>pango_cairo_context_get_shape_renderer, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-get-shape-renderer">pango_cairo_context_get_shape_renderer ()</a>
+</dt>
+<dt>pango_cairo_context_set_font_options, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-set-font-options">pango_cairo_context_set_font_options ()</a>
+</dt>
+<dt>pango_cairo_context_set_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-set-resolution">pango_cairo_context_set_resolution ()</a>
+</dt>
+<dt>pango_cairo_context_set_shape_renderer, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer">pango_cairo_context_set_shape_renderer ()</a>
+</dt>
+<dt>pango_cairo_create_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-create-context">pango_cairo_create_context ()</a>
+</dt>
+<dt>pango_cairo_create_layout, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-create-layout">pango_cairo_create_layout ()</a>
+</dt>
+<dt>pango_cairo_error_underline_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-error-underline-path">pango_cairo_error_underline_path ()</a>
+</dt>
+<dt>pango_cairo_font_get_scaled_font, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-get-scaled-font">pango_cairo_font_get_scaled_font ()</a>
+</dt>
+<dt>pango_cairo_font_map_create_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context">pango_cairo_font_map_create_context ()</a>
+</dt>
+<dt>pango_cairo_font_map_get_default, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default">pango_cairo_font_map_get_default ()</a>
+</dt>
+<dt>pango_cairo_font_map_get_font_type, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-font-type">pango_cairo_font_map_get_font_type ()</a>
+</dt>
+<dt>pango_cairo_font_map_get_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-resolution">pango_cairo_font_map_get_resolution ()</a>
+</dt>
+<dt>pango_cairo_font_map_new, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new">pango_cairo_font_map_new ()</a>
+</dt>
+<dt>pango_cairo_font_map_new_for_font_type, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new-for-font-type">pango_cairo_font_map_new_for_font_type ()</a>
+</dt>
+<dt>pango_cairo_font_map_set_default, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-default">pango_cairo_font_map_set_default ()</a>
+</dt>
+<dt>pango_cairo_font_map_set_resolution, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution">pango_cairo_font_map_set_resolution ()</a>
+</dt>
+<dt>pango_cairo_glyph_string_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-glyph-string-path">pango_cairo_glyph_string_path ()</a>
+</dt>
+<dt>pango_cairo_layout_line_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-layout-line-path">pango_cairo_layout_line_path ()</a>
+</dt>
+<dt>pango_cairo_layout_path, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-layout-path">pango_cairo_layout_path ()</a>
+</dt>
+<dt>pango_cairo_show_error_underline, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-error-underline">pango_cairo_show_error_underline ()</a>
+</dt>
+<dt>pango_cairo_show_glyph_item, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-item">pango_cairo_show_glyph_item ()</a>
+</dt>
+<dt>pango_cairo_show_glyph_string, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-string">pango_cairo_show_glyph_string ()</a>
+</dt>
+<dt>pango_cairo_show_layout, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-layout">pango_cairo_show_layout ()</a>
+</dt>
+<dt>pango_cairo_show_layout_line, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-show-layout-line">pango_cairo_show_layout_line ()</a>
+</dt>
+<dt>pango_cairo_update_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-update-context">pango_cairo_update_context ()</a>
+</dt>
+<dt>pango_cairo_update_layout, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-update-layout">pango_cairo_update_layout ()</a>
+</dt>
+<dt>pango_color_copy, <a class="indexterm" href="pango-Text-Attributes.html#pango-color-copy">pango_color_copy ()</a>
+</dt>
+<dt>pango_color_free, <a class="indexterm" href="pango-Text-Attributes.html#pango-color-free">pango_color_free ()</a>
+</dt>
+<dt>pango_color_parse, <a class="indexterm" href="pango-Text-Attributes.html#pango-color-parse">pango_color_parse ()</a>
+</dt>
+<dt>pango_color_to_string, <a class="indexterm" href="pango-Text-Attributes.html#pango-color-to-string">pango_color_to_string ()</a>
+</dt>
+<dt>pango_config_key_get, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-config-key-get">pango_config_key_get ()</a>
+</dt>
+<dt>pango_context_get_base_dir, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-base-dir">pango_context_get_base_dir ()</a>
+</dt>
+<dt>pango_context_get_base_gravity, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-base-gravity">pango_context_get_base_gravity ()</a>
+</dt>
+<dt>pango_context_get_font_description, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-font-description">pango_context_get_font_description ()</a>
+</dt>
+<dt>pango_context_get_font_map, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-font-map">pango_context_get_font_map ()</a>
+</dt>
+<dt>pango_context_get_gravity, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-gravity">pango_context_get_gravity ()</a>
+</dt>
+<dt>pango_context_get_gravity_hint, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-gravity-hint">pango_context_get_gravity_hint ()</a>
+</dt>
+<dt>pango_context_get_language, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-language">pango_context_get_language ()</a>
+</dt>
+<dt>pango_context_get_matrix, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-matrix">pango_context_get_matrix ()</a>
+</dt>
+<dt>pango_context_get_metrics, <a class="indexterm" href="pango-Text-Processing.html#pango-context-get-metrics">pango_context_get_metrics ()</a>
+</dt>
+<dt>pango_context_list_families, <a class="indexterm" href="pango-Text-Processing.html#pango-context-list-families">pango_context_list_families ()</a>
+</dt>
+<dt>pango_context_load_font, <a class="indexterm" href="pango-Text-Processing.html#pango-context-load-font">pango_context_load_font ()</a>
+</dt>
+<dt>pango_context_load_fontset, <a class="indexterm" href="pango-Text-Processing.html#pango-context-load-fontset">pango_context_load_fontset ()</a>
+</dt>
+<dt>pango_context_new, <a class="indexterm" href="pango-Text-Processing.html#pango-context-new">pango_context_new ()</a>
+</dt>
+<dt>pango_context_set_base_dir, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-base-dir">pango_context_set_base_dir ()</a>
+</dt>
+<dt>pango_context_set_base_gravity, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-base-gravity">pango_context_set_base_gravity ()</a>
+</dt>
+<dt>pango_context_set_font_description, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-font-description">pango_context_set_font_description ()</a>
+</dt>
+<dt>pango_context_set_font_map, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-font-map">pango_context_set_font_map ()</a>
+</dt>
+<dt>pango_context_set_gravity_hint, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-gravity-hint">pango_context_set_gravity_hint ()</a>
+</dt>
+<dt>pango_context_set_language, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-language">pango_context_set_language ()</a>
+</dt>
+<dt>pango_context_set_matrix, <a class="indexterm" href="pango-Text-Processing.html#pango-context-set-matrix">pango_context_set_matrix ()</a>
+</dt>
+<dt>pango_coverage_copy, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-copy">pango_coverage_copy ()</a>
+</dt>
+<dt>pango_coverage_from_bytes, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-from-bytes">pango_coverage_from_bytes ()</a>
+</dt>
+<dt>pango_coverage_get, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-get">pango_coverage_get ()</a>
+</dt>
+<dt>pango_coverage_max, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-max">pango_coverage_max ()</a>
+</dt>
+<dt>pango_coverage_new, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-new">pango_coverage_new ()</a>
+</dt>
+<dt>pango_coverage_ref, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-ref">pango_coverage_ref ()</a>
+</dt>
+<dt>pango_coverage_set, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-set">pango_coverage_set ()</a>
+</dt>
+<dt>pango_coverage_to_bytes, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-to-bytes">pango_coverage_to_bytes ()</a>
+</dt>
+<dt>pango_coverage_unref, <a class="indexterm" href="pango-Coverage-Maps.html#pango-coverage-unref">pango_coverage_unref ()</a>
+</dt>
+<dt>pango_default_break, <a class="indexterm" href="pango-Text-Processing.html#pango-default-break">pango_default_break ()</a>
+</dt>
+<dt>PANGO_DESCENT, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-DESCENT--CAPS">PANGO_DESCENT()</a>
+</dt>
+<dt>PANGO_ENGINE_LANG_DEFINE_TYPE, <a class="indexterm" href="PangoEngineLang.html#PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS">PANGO_ENGINE_LANG_DEFINE_TYPE()</a>
+</dt>
+<dt>PANGO_ENGINE_SHAPE_DEFINE_TYPE, <a class="indexterm" href="PangoEngineShape.html#PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS">PANGO_ENGINE_SHAPE_DEFINE_TYPE()</a>
+</dt>
+<dt>PANGO_ENGINE_TYPE_LANG, <a class="indexterm" href="PangoEngineLang.html#PANGO-ENGINE-TYPE-LANG--CAPS">PANGO_ENGINE_TYPE_LANG</a>
+</dt>
+<dt>PANGO_ENGINE_TYPE_SHAPE, <a class="indexterm" href="PangoEngineShape.html#PANGO-ENGINE-TYPE-SHAPE--CAPS">PANGO_ENGINE_TYPE_SHAPE</a>
+</dt>
+<dt>pango_extents_to_pixels, <a class="indexterm" href="pango-Glyph-Storage.html#pango-extents-to-pixels">pango_extents_to_pixels ()</a>
+</dt>
+<dt>pango_fc_decoder_get_charset, <a class="indexterm" href="PangoFcDecoder.html#pango-fc-decoder-get-charset">pango_fc_decoder_get_charset ()</a>
+</dt>
+<dt>pango_fc_decoder_get_glyph, <a class="indexterm" href="PangoFcDecoder.html#pango-fc-decoder-get-glyph">pango_fc_decoder_get_glyph ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_absolute_size, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-absolute-size">pango_fc_fontset_key_get_absolute_size ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_context_key, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-context-key">pango_fc_fontset_key_get_context_key ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_description, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-description">pango_fc_fontset_key_get_description ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_language, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-language">pango_fc_fontset_key_get_language ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_matrix, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-matrix">pango_fc_fontset_key_get_matrix ()</a>
+</dt>
+<dt>pango_fc_fontset_key_get_resolution, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-fontset-key-get-resolution">pango_fc_fontset_key_get_resolution ()</a>
+</dt>
+<dt>pango_fc_font_description_from_pattern, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-description-from-pattern">pango_fc_font_description_from_pattern ()</a>
+</dt>
+<dt>pango_fc_font_get_glyph, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-get-glyph">pango_fc_font_get_glyph ()</a>
+</dt>
+<dt>pango_fc_font_get_unknown_glyph, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_fc_font_has_char, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-has-char">pango_fc_font_has_char ()</a>
+</dt>
+<dt>pango_fc_font_kern_glyphs, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-kern-glyphs">pango_fc_font_kern_glyphs ()</a>
+</dt>
+<dt>pango_fc_font_key_get_context_key, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-key-get-context-key">pango_fc_font_key_get_context_key ()</a>
+</dt>
+<dt>pango_fc_font_key_get_matrix, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-key-get-matrix">pango_fc_font_key_get_matrix ()</a>
+</dt>
+<dt>pango_fc_font_key_get_pattern, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-key-get-pattern">pango_fc_font_key_get_pattern ()</a>
+</dt>
+<dt>pango_fc_font_lock_face, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-lock-face">pango_fc_font_lock_face ()</a>
+</dt>
+<dt>pango_fc_font_map_add_decoder_find_func, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func">pango_fc_font_map_add_decoder_find_func ()</a>
+</dt>
+<dt>pango_fc_font_map_cache_clear, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-cache-clear">pango_fc_font_map_cache_clear ()</a>
+</dt>
+<dt>pango_fc_font_map_create_context, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-create-context">pango_fc_font_map_create_context ()</a>
+</dt>
+<dt>pango_fc_font_map_find_decoder, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-find-decoder">pango_fc_font_map_find_decoder ()</a>
+</dt>
+<dt>pango_fc_font_map_shutdown, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-shutdown">pango_fc_font_map_shutdown ()</a>
+</dt>
+<dt>pango_fc_font_unlock_face, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-unlock-face">pango_fc_font_unlock_face ()</a>
+</dt>
+<dt>PANGO_FC_GRAVITY, <a class="indexterm" href="PangoFcFontMap.html#PANGO-FC-GRAVITY--CAPS">PANGO_FC_GRAVITY</a>
+</dt>
+<dt>PANGO_FC_PRGNAME, <a class="indexterm" href="PangoFcFontMap.html#PANGO-FC-PRGNAME--CAPS">PANGO_FC_PRGNAME</a>
+</dt>
+<dt>PANGO_FC_VERSION, <a class="indexterm" href="PangoFcFontMap.html#PANGO-FC-VERSION--CAPS">PANGO_FC_VERSION</a>
+</dt>
+<dt>pango_find_base_dir, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-find-base-dir">pango_find_base_dir ()</a>
+</dt>
+<dt>pango_find_map, <a class="indexterm" href="pango-Modules.html#pango-find-map">pango_find_map ()</a>
+</dt>
+<dt>pango_find_paragraph_boundary, <a class="indexterm" href="pango-Text-Processing.html#pango-find-paragraph-boundary">pango_find_paragraph_boundary ()</a>
+</dt>
+<dt>PANGO_FONT, <a class="indexterm" href="pango-Fonts.html#PANGO-FONT--CAPS">PANGO_FONT()</a>
+</dt>
+<dt>pango_fontset_foreach, <a class="indexterm" href="pango-Fonts.html#pango-fontset-foreach">pango_fontset_foreach ()</a>
+</dt>
+<dt>pango_fontset_get_font, <a class="indexterm" href="pango-Fonts.html#pango-fontset-get-font">pango_fontset_get_font ()</a>
+</dt>
+<dt>pango_fontset_get_metrics, <a class="indexterm" href="pango-Fonts.html#pango-fontset-get-metrics">pango_fontset_get_metrics ()</a>
+</dt>
+<dt>pango_fontset_simple_append, <a class="indexterm" href="pango-Fonts.html#pango-fontset-simple-append">pango_fontset_simple_append ()</a>
+</dt>
+<dt>pango_fontset_simple_new, <a class="indexterm" href="pango-Fonts.html#pango-fontset-simple-new">pango_fontset_simple_new ()</a>
+</dt>
+<dt>pango_fontset_simple_size, <a class="indexterm" href="pango-Fonts.html#pango-fontset-simple-size">pango_fontset_simple_size ()</a>
+</dt>
+<dt>pango_font_describe, <a class="indexterm" href="pango-Fonts.html#pango-font-describe">pango_font_describe ()</a>
+</dt>
+<dt>pango_font_describe_with_absolute_size, <a class="indexterm" href="pango-Fonts.html#pango-font-describe-with-absolute-size">pango_font_describe_with_absolute_size ()</a>
+</dt>
+<dt>pango_font_descriptions_free, <a class="indexterm" href="pango-Fonts.html#pango-font-descriptions-free">pango_font_descriptions_free ()</a>
+</dt>
+<dt>pango_font_description_better_match, <a class="indexterm" href="pango-Fonts.html#pango-font-description-better-match">pango_font_description_better_match ()</a>
+</dt>
+<dt>pango_font_description_copy, <a class="indexterm" href="pango-Fonts.html#pango-font-description-copy">pango_font_description_copy ()</a>
+</dt>
+<dt>pango_font_description_copy_static, <a class="indexterm" href="pango-Fonts.html#pango-font-description-copy-static">pango_font_description_copy_static ()</a>
+</dt>
+<dt>pango_font_description_equal, <a class="indexterm" href="pango-Fonts.html#pango-font-description-equal">pango_font_description_equal ()</a>
+</dt>
+<dt>pango_font_description_free, <a class="indexterm" href="pango-Fonts.html#pango-font-description-free">pango_font_description_free ()</a>
+</dt>
+<dt>pango_font_description_from_string, <a class="indexterm" href="pango-Fonts.html#pango-font-description-from-string">pango_font_description_from_string ()</a>
+</dt>
+<dt>pango_font_description_get_family, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-family">pango_font_description_get_family ()</a>
+</dt>
+<dt>pango_font_description_get_gravity, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-gravity">pango_font_description_get_gravity ()</a>
+</dt>
+<dt>pango_font_description_get_set_fields, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-set-fields">pango_font_description_get_set_fields ()</a>
+</dt>
+<dt>pango_font_description_get_size, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-size">pango_font_description_get_size ()</a>
+</dt>
+<dt>pango_font_description_get_size_is_absolute, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-size-is-absolute">pango_font_description_get_size_is_absolute ()</a>
+</dt>
+<dt>pango_font_description_get_stretch, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-stretch">pango_font_description_get_stretch ()</a>
+</dt>
+<dt>pango_font_description_get_style, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-style">pango_font_description_get_style ()</a>
+</dt>
+<dt>pango_font_description_get_variant, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-variant">pango_font_description_get_variant ()</a>
+</dt>
+<dt>pango_font_description_get_weight, <a class="indexterm" href="pango-Fonts.html#pango-font-description-get-weight">pango_font_description_get_weight ()</a>
+</dt>
+<dt>pango_font_description_hash, <a class="indexterm" href="pango-Fonts.html#pango-font-description-hash">pango_font_description_hash ()</a>
+</dt>
+<dt>pango_font_description_merge, <a class="indexterm" href="pango-Fonts.html#pango-font-description-merge">pango_font_description_merge ()</a>
+</dt>
+<dt>pango_font_description_merge_static, <a class="indexterm" href="pango-Fonts.html#pango-font-description-merge-static">pango_font_description_merge_static ()</a>
+</dt>
+<dt>pango_font_description_new, <a class="indexterm" href="pango-Fonts.html#pango-font-description-new">pango_font_description_new ()</a>
+</dt>
+<dt>pango_font_description_set_absolute_size, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-absolute-size">pango_font_description_set_absolute_size ()</a>
+</dt>
+<dt>pango_font_description_set_family, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-family">pango_font_description_set_family ()</a>
+</dt>
+<dt>pango_font_description_set_family_static, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-family-static">pango_font_description_set_family_static ()</a>
+</dt>
+<dt>pango_font_description_set_gravity, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-gravity">pango_font_description_set_gravity ()</a>
+</dt>
+<dt>pango_font_description_set_size, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-size">pango_font_description_set_size ()</a>
+</dt>
+<dt>pango_font_description_set_stretch, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-stretch">pango_font_description_set_stretch ()</a>
+</dt>
+<dt>pango_font_description_set_style, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-style">pango_font_description_set_style ()</a>
+</dt>
+<dt>pango_font_description_set_variant, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-variant">pango_font_description_set_variant ()</a>
+</dt>
+<dt>pango_font_description_set_weight, <a class="indexterm" href="pango-Fonts.html#pango-font-description-set-weight">pango_font_description_set_weight ()</a>
+</dt>
+<dt>pango_font_description_to_filename, <a class="indexterm" href="pango-Fonts.html#pango-font-description-to-filename">pango_font_description_to_filename ()</a>
+</dt>
+<dt>pango_font_description_to_string, <a class="indexterm" href="pango-Fonts.html#pango-font-description-to-string">pango_font_description_to_string ()</a>
+</dt>
+<dt>pango_font_description_unset_fields, <a class="indexterm" href="pango-Fonts.html#pango-font-description-unset-fields">pango_font_description_unset_fields ()</a>
+</dt>
+<dt>PANGO_FONT_FACE, <a class="indexterm" href="pango-Fonts.html#PANGO-FONT-FACE--CAPS">PANGO_FONT_FACE()</a>
+</dt>
+<dt>pango_font_face_describe, <a class="indexterm" href="pango-Fonts.html#pango-font-face-describe">pango_font_face_describe ()</a>
+</dt>
+<dt>pango_font_face_get_face_name, <a class="indexterm" href="pango-Fonts.html#pango-font-face-get-face-name">pango_font_face_get_face_name ()</a>
+</dt>
+<dt>pango_font_face_is_synthesized, <a class="indexterm" href="pango-Fonts.html#pango-font-face-is-synthesized">pango_font_face_is_synthesized ()</a>
+</dt>
+<dt>pango_font_face_list_sizes, <a class="indexterm" href="pango-Fonts.html#pango-font-face-list-sizes">pango_font_face_list_sizes ()</a>
+</dt>
+<dt>PANGO_FONT_FAMILY, <a class="indexterm" href="pango-Fonts.html#PANGO-FONT-FAMILY--CAPS">PANGO_FONT_FAMILY()</a>
+</dt>
+<dt>pango_font_family_get_name, <a class="indexterm" href="pango-Fonts.html#pango-font-family-get-name">pango_font_family_get_name ()</a>
+</dt>
+<dt>pango_font_family_is_monospace, <a class="indexterm" href="pango-Fonts.html#pango-font-family-is-monospace">pango_font_family_is_monospace ()</a>
+</dt>
+<dt>pango_font_family_list_faces, <a class="indexterm" href="pango-Fonts.html#pango-font-family-list-faces">pango_font_family_list_faces ()</a>
+</dt>
+<dt>pango_font_find_shaper, <a class="indexterm" href="pango-Fonts.html#pango-font-find-shaper">pango_font_find_shaper ()</a>
+</dt>
+<dt>pango_font_get_coverage, <a class="indexterm" href="pango-Fonts.html#pango-font-get-coverage">pango_font_get_coverage ()</a>
+</dt>
+<dt>pango_font_get_font_map, <a class="indexterm" href="pango-Fonts.html#pango-font-get-font-map">pango_font_get_font_map ()</a>
+</dt>
+<dt>pango_font_get_glyph_extents, <a class="indexterm" href="pango-Fonts.html#pango-font-get-glyph-extents">pango_font_get_glyph_extents ()</a>
+</dt>
+<dt>pango_font_get_metrics, <a class="indexterm" href="pango-Fonts.html#pango-font-get-metrics">pango_font_get_metrics ()</a>
+</dt>
+<dt>PANGO_FONT_MAP, <a class="indexterm" href="pango-Fonts.html#PANGO-FONT-MAP--CAPS">PANGO_FONT_MAP()</a>
+</dt>
+<dt>PANGO_FONT_MAP_CLASS, <a class="indexterm" href="pango-Fonts.html#PANGO-FONT-MAP-CLASS--CAPS">PANGO_FONT_MAP_CLASS()</a>
+</dt>
+<dt>pango_font_map_create_context, <a class="indexterm" href="pango-Fonts.html#pango-font-map-create-context">pango_font_map_create_context ()</a>
+</dt>
+<dt>PANGO_FONT_MAP_GET_CLASS, <a class="indexterm" href="pango-Fonts.html#PANGO-FONT-MAP-GET-CLASS--CAPS">PANGO_FONT_MAP_GET_CLASS()</a>
+</dt>
+<dt>pango_font_map_get_shape_engine_type, <a class="indexterm" href="pango-Fonts.html#pango-font-map-get-shape-engine-type">pango_font_map_get_shape_engine_type ()</a>
+</dt>
+<dt>pango_font_map_list_families, <a class="indexterm" href="pango-Fonts.html#pango-font-map-list-families">pango_font_map_list_families ()</a>
+</dt>
+<dt>pango_font_map_load_font, <a class="indexterm" href="pango-Fonts.html#pango-font-map-load-font">pango_font_map_load_font ()</a>
+</dt>
+<dt>pango_font_map_load_fontset, <a class="indexterm" href="pango-Fonts.html#pango-font-map-load-fontset">pango_font_map_load_fontset ()</a>
+</dt>
+<dt>pango_font_metrics_get_approximate_char_width, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-approximate-char-width">pango_font_metrics_get_approximate_char_width ()</a>
+</dt>
+<dt>pango_font_metrics_get_approximate_digit_width, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-approximate-digit-width">pango_font_metrics_get_approximate_digit_width ()</a>
+</dt>
+<dt>pango_font_metrics_get_ascent, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-ascent">pango_font_metrics_get_ascent ()</a>
+</dt>
+<dt>pango_font_metrics_get_descent, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-descent">pango_font_metrics_get_descent ()</a>
+</dt>
+<dt>pango_font_metrics_get_strikethrough_position, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-strikethrough-position">pango_font_metrics_get_strikethrough_position ()</a>
+</dt>
+<dt>pango_font_metrics_get_strikethrough_thickness, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-strikethrough-thickness">pango_font_metrics_get_strikethrough_thickness ()</a>
+</dt>
+<dt>pango_font_metrics_get_underline_position, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-underline-position">pango_font_metrics_get_underline_position ()</a>
+</dt>
+<dt>pango_font_metrics_get_underline_thickness, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-get-underline-thickness">pango_font_metrics_get_underline_thickness ()</a>
+</dt>
+<dt>pango_font_metrics_ref, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-ref">pango_font_metrics_ref ()</a>
+</dt>
+<dt>pango_font_metrics_unref, <a class="indexterm" href="pango-Fonts.html#pango-font-metrics-unref">pango_font_metrics_unref ()</a>
+</dt>
+<dt>pango_ft2_font_get_coverage, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-coverage">pango_ft2_font_get_coverage ()</a>
+</dt>
+<dt>pango_ft2_font_get_face, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-face">pango_ft2_font_get_face ()</a>
+</dt>
+<dt>pango_ft2_font_get_kerning, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-kerning">pango_ft2_font_get_kerning ()</a>
+</dt>
+<dt>pango_ft2_font_map_create_context, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context">pango_ft2_font_map_create_context ()</a>
+</dt>
+<dt>pango_ft2_font_map_for_display, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display">pango_ft2_font_map_for_display ()</a>
+</dt>
+<dt>pango_ft2_font_map_new, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new">pango_ft2_font_map_new ()</a>
+</dt>
+<dt>pango_ft2_font_map_set_default_substitute, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute">pango_ft2_font_map_set_default_substitute ()</a>
+</dt>
+<dt>pango_ft2_font_map_set_resolution, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-resolution">pango_ft2_font_map_set_resolution ()</a>
+</dt>
+<dt>pango_ft2_font_map_substitute_changed, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-substitute-changed">pango_ft2_font_map_substitute_changed ()</a>
+</dt>
+<dt>pango_ft2_get_context, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-context">pango_ft2_get_context ()</a>
+</dt>
+<dt>pango_ft2_get_unknown_glyph, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-unknown-glyph">pango_ft2_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_ft2_render, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render">pango_ft2_render ()</a>
+</dt>
+<dt>pango_ft2_render_layout, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout">pango_ft2_render_layout ()</a>
+</dt>
+<dt>pango_ft2_render_layout_line, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line">pango_ft2_render_layout_line ()</a>
+</dt>
+<dt>pango_ft2_render_layout_line_subpixel, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line-subpixel">pango_ft2_render_layout_line_subpixel ()</a>
+</dt>
+<dt>pango_ft2_render_layout_subpixel, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-subpixel">pango_ft2_render_layout_subpixel ()</a>
+</dt>
+<dt>pango_ft2_render_transformed, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-transformed">pango_ft2_render_transformed ()</a>
+</dt>
+<dt>pango_ft2_shutdown_display, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display">pango_ft2_shutdown_display ()</a>
+</dt>
+<dt>pango_get_lib_subdirectory, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-get-lib-subdirectory">pango_get_lib_subdirectory ()</a>
+</dt>
+<dt>pango_get_log_attrs, <a class="indexterm" href="pango-Text-Processing.html#pango-get-log-attrs">pango_get_log_attrs ()</a>
+</dt>
+<dt>pango_get_mirror_char, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-get-mirror-char">pango_get_mirror_char ()</a>
+</dt>
+<dt>pango_get_sysconf_subdirectory, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-get-sysconf-subdirectory">pango_get_sysconf_subdirectory ()</a>
+</dt>
+<dt>PANGO_GET_UNKNOWN_GLYPH, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS">PANGO_GET_UNKNOWN_GLYPH()</a>
+</dt>
+<dt>PANGO_GLYPH_EMPTY, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS">PANGO_GLYPH_EMPTY</a>
+</dt>
+<dt>PANGO_GLYPH_INVALID_INPUT, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-GLYPH-INVALID-INPUT--CAPS">PANGO_GLYPH_INVALID_INPUT</a>
+</dt>
+<dt>pango_glyph_item_apply_attrs, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-apply-attrs">pango_glyph_item_apply_attrs ()</a>
+</dt>
+<dt>pango_glyph_item_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-copy">pango_glyph_item_copy ()</a>
+</dt>
+<dt>pango_glyph_item_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-free">pango_glyph_item_free ()</a>
+</dt>
+<dt>pango_glyph_item_get_logical_widths, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths">pango_glyph_item_get_logical_widths ()</a>
+</dt>
+<dt>pango_glyph_item_iter_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-copy">pango_glyph_item_iter_copy ()</a>
+</dt>
+<dt>pango_glyph_item_iter_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-free">pango_glyph_item_iter_free ()</a>
+</dt>
+<dt>pango_glyph_item_iter_init_end, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-end">pango_glyph_item_iter_init_end ()</a>
+</dt>
+<dt>pango_glyph_item_iter_init_start, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-start">pango_glyph_item_iter_init_start ()</a>
+</dt>
+<dt>pango_glyph_item_iter_next_cluster, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster">pango_glyph_item_iter_next_cluster ()</a>
+</dt>
+<dt>pango_glyph_item_iter_prev_cluster, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster">pango_glyph_item_iter_prev_cluster ()</a>
+</dt>
+<dt>pango_glyph_item_letter_space, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-letter-space">pango_glyph_item_letter_space ()</a>
+</dt>
+<dt>pango_glyph_item_split, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-item-split">pango_glyph_item_split ()</a>
+</dt>
+<dt>pango_glyph_string_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-copy">pango_glyph_string_copy ()</a>
+</dt>
+<dt>pango_glyph_string_extents, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-extents">pango_glyph_string_extents ()</a>
+</dt>
+<dt>pango_glyph_string_extents_range, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-extents-range">pango_glyph_string_extents_range ()</a>
+</dt>
+<dt>pango_glyph_string_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-free">pango_glyph_string_free ()</a>
+</dt>
+<dt>pango_glyph_string_get_logical_widths, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-get-logical-widths">pango_glyph_string_get_logical_widths ()</a>
+</dt>
+<dt>pango_glyph_string_get_width, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-get-width">pango_glyph_string_get_width ()</a>
+</dt>
+<dt>pango_glyph_string_index_to_x, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-index-to-x">pango_glyph_string_index_to_x ()</a>
+</dt>
+<dt>pango_glyph_string_new, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-new">pango_glyph_string_new ()</a>
+</dt>
+<dt>pango_glyph_string_set_size, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-set-size">pango_glyph_string_set_size ()</a>
+</dt>
+<dt>pango_glyph_string_x_to_index, <a class="indexterm" href="pango-Glyph-Storage.html#pango-glyph-string-x-to-index">pango_glyph_string_x_to_index ()</a>
+</dt>
+<dt>PANGO_GLYPH_UNKNOWN_FLAG, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS">PANGO_GLYPH_UNKNOWN_FLAG</a>
+</dt>
+<dt>pango_gravity_get_for_matrix, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-get-for-matrix">pango_gravity_get_for_matrix ()</a>
+</dt>
+<dt>pango_gravity_get_for_script, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-get-for-script">pango_gravity_get_for_script ()</a>
+</dt>
+<dt>pango_gravity_get_for_script_and_width, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-get-for-script-and-width">pango_gravity_get_for_script_and_width ()</a>
+</dt>
+<dt>PANGO_GRAVITY_IS_VERTICAL, <a class="indexterm" href="pango-Vertical-Text.html#PANGO-GRAVITY-IS-VERTICAL--CAPS">PANGO_GRAVITY_IS_VERTICAL()</a>
+</dt>
+<dt>pango_gravity_to_rotation, <a class="indexterm" href="pango-Vertical-Text.html#pango-gravity-to-rotation">pango_gravity_to_rotation ()</a>
+</dt>
+<dt>PANGO_IS_FONT, <a class="indexterm" href="pango-Fonts.html#PANGO-IS-FONT--CAPS">PANGO_IS_FONT()</a>
+</dt>
+<dt>PANGO_IS_FONT_FACE, <a class="indexterm" href="pango-Fonts.html#PANGO-IS-FONT-FACE--CAPS">PANGO_IS_FONT_FACE()</a>
+</dt>
+<dt>PANGO_IS_FONT_FAMILY, <a class="indexterm" href="pango-Fonts.html#PANGO-IS-FONT-FAMILY--CAPS">PANGO_IS_FONT_FAMILY()</a>
+</dt>
+<dt>PANGO_IS_FONT_MAP, <a class="indexterm" href="pango-Fonts.html#PANGO-IS-FONT-MAP--CAPS">PANGO_IS_FONT_MAP()</a>
+</dt>
+<dt>PANGO_IS_FONT_MAP_CLASS, <a class="indexterm" href="pango-Fonts.html#PANGO-IS-FONT-MAP-CLASS--CAPS">PANGO_IS_FONT_MAP_CLASS()</a>
+</dt>
+<dt>pango_is_zero_width, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-is-zero-width">pango_is_zero_width ()</a>
+</dt>
+<dt>pango_itemize, <a class="indexterm" href="pango-Text-Processing.html#pango-itemize">pango_itemize ()</a>
+</dt>
+<dt>pango_itemize_with_base_dir, <a class="indexterm" href="pango-Text-Processing.html#pango-itemize-with-base-dir">pango_itemize_with_base_dir ()</a>
+</dt>
+<dt>pango_item_copy, <a class="indexterm" href="pango-Text-Processing.html#pango-item-copy">pango_item_copy ()</a>
+</dt>
+<dt>pango_item_free, <a class="indexterm" href="pango-Text-Processing.html#pango-item-free">pango_item_free ()</a>
+</dt>
+<dt>pango_item_new, <a class="indexterm" href="pango-Text-Processing.html#pango-item-new">pango_item_new ()</a>
+</dt>
+<dt>pango_item_split, <a class="indexterm" href="pango-Text-Processing.html#pango-item-split">pango_item_split ()</a>
+</dt>
+<dt>pango_language_from_string, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-from-string">pango_language_from_string ()</a>
+</dt>
+<dt>pango_language_get_default, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-get-default">pango_language_get_default ()</a>
+</dt>
+<dt>pango_language_get_sample_string, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-get-sample-string">pango_language_get_sample_string ()</a>
+</dt>
+<dt>pango_language_get_scripts, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-get-scripts">pango_language_get_scripts ()</a>
+</dt>
+<dt>pango_language_includes_script, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-includes-script">pango_language_includes_script ()</a>
+</dt>
+<dt>pango_language_matches, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-matches">pango_language_matches ()</a>
+</dt>
+<dt>pango_language_to_string, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-language-to-string">pango_language_to_string ()</a>
+</dt>
+<dt>pango_layout_context_changed, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-context-changed">pango_layout_context_changed ()</a>
+</dt>
+<dt>pango_layout_copy, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-copy">pango_layout_copy ()</a>
+</dt>
+<dt>pango_layout_get_alignment, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-alignment">pango_layout_get_alignment ()</a>
+</dt>
+<dt>pango_layout_get_attributes, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-attributes">pango_layout_get_attributes ()</a>
+</dt>
+<dt>pango_layout_get_auto_dir, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-auto-dir">pango_layout_get_auto_dir ()</a>
+</dt>
+<dt>pango_layout_get_baseline, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-baseline">pango_layout_get_baseline ()</a>
+</dt>
+<dt>pango_layout_get_context, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-context">pango_layout_get_context ()</a>
+</dt>
+<dt>pango_layout_get_cursor_pos, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-cursor-pos">pango_layout_get_cursor_pos ()</a>
+</dt>
+<dt>pango_layout_get_ellipsize, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-ellipsize">pango_layout_get_ellipsize ()</a>
+</dt>
+<dt>pango_layout_get_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-extents">pango_layout_get_extents ()</a>
+</dt>
+<dt>pango_layout_get_font_description, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-font-description">pango_layout_get_font_description ()</a>
+</dt>
+<dt>pango_layout_get_height, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-height">pango_layout_get_height ()</a>
+</dt>
+<dt>pango_layout_get_indent, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-indent">pango_layout_get_indent ()</a>
+</dt>
+<dt>pango_layout_get_iter, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-iter">pango_layout_get_iter ()</a>
+</dt>
+<dt>pango_layout_get_justify, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-justify">pango_layout_get_justify ()</a>
+</dt>
+<dt>pango_layout_get_line, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-line">pango_layout_get_line ()</a>
+</dt>
+<dt>pango_layout_get_lines, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-lines">pango_layout_get_lines ()</a>
+</dt>
+<dt>pango_layout_get_lines_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-lines-readonly">pango_layout_get_lines_readonly ()</a>
+</dt>
+<dt>pango_layout_get_line_count, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-line-count">pango_layout_get_line_count ()</a>
+</dt>
+<dt>pango_layout_get_line_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-line-readonly">pango_layout_get_line_readonly ()</a>
+</dt>
+<dt>pango_layout_get_log_attrs, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-log-attrs">pango_layout_get_log_attrs ()</a>
+</dt>
+<dt>pango_layout_get_pixel_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-pixel-extents">pango_layout_get_pixel_extents ()</a>
+</dt>
+<dt>pango_layout_get_pixel_size, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-pixel-size">pango_layout_get_pixel_size ()</a>
+</dt>
+<dt>pango_layout_get_single_paragraph_mode, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-single-paragraph-mode">pango_layout_get_single_paragraph_mode ()</a>
+</dt>
+<dt>pango_layout_get_size, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-size">pango_layout_get_size ()</a>
+</dt>
+<dt>pango_layout_get_spacing, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-spacing">pango_layout_get_spacing ()</a>
+</dt>
+<dt>pango_layout_get_tabs, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-tabs">pango_layout_get_tabs ()</a>
+</dt>
+<dt>pango_layout_get_text, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-text">pango_layout_get_text ()</a>
+</dt>
+<dt>pango_layout_get_unknown_glyphs_count, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-unknown-glyphs-count">pango_layout_get_unknown_glyphs_count ()</a>
+</dt>
+<dt>pango_layout_get_width, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-width">pango_layout_get_width ()</a>
+</dt>
+<dt>pango_layout_get_wrap, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-get-wrap">pango_layout_get_wrap ()</a>
+</dt>
+<dt>pango_layout_index_to_line_x, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-index-to-line-x">pango_layout_index_to_line_x ()</a>
+</dt>
+<dt>pango_layout_index_to_pos, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-index-to-pos">pango_layout_index_to_pos ()</a>
+</dt>
+<dt>pango_layout_is_ellipsized, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-is-ellipsized">pango_layout_is_ellipsized ()</a>
+</dt>
+<dt>pango_layout_is_wrapped, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-is-wrapped">pango_layout_is_wrapped ()</a>
+</dt>
+<dt>pango_layout_iter_at_last_line, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-at-last-line">pango_layout_iter_at_last_line ()</a>
+</dt>
+<dt>pango_layout_iter_copy, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-copy">pango_layout_iter_copy ()</a>
+</dt>
+<dt>pango_layout_iter_free, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-free">pango_layout_iter_free ()</a>
+</dt>
+<dt>pango_layout_iter_get_baseline, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-baseline">pango_layout_iter_get_baseline ()</a>
+</dt>
+<dt>pango_layout_iter_get_char_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-char-extents">pango_layout_iter_get_char_extents ()</a>
+</dt>
+<dt>pango_layout_iter_get_cluster_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-cluster-extents">pango_layout_iter_get_cluster_extents ()</a>
+</dt>
+<dt>pango_layout_iter_get_index, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-index">pango_layout_iter_get_index ()</a>
+</dt>
+<dt>pango_layout_iter_get_layout, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-layout">pango_layout_iter_get_layout ()</a>
+</dt>
+<dt>pango_layout_iter_get_layout_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-layout-extents">pango_layout_iter_get_layout_extents ()</a>
+</dt>
+<dt>pango_layout_iter_get_line, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-line">pango_layout_iter_get_line ()</a>
+</dt>
+<dt>pango_layout_iter_get_line_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-line-extents">pango_layout_iter_get_line_extents ()</a>
+</dt>
+<dt>pango_layout_iter_get_line_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-line-readonly">pango_layout_iter_get_line_readonly ()</a>
+</dt>
+<dt>pango_layout_iter_get_line_yrange, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-line-yrange">pango_layout_iter_get_line_yrange ()</a>
+</dt>
+<dt>pango_layout_iter_get_run, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-run">pango_layout_iter_get_run ()</a>
+</dt>
+<dt>pango_layout_iter_get_run_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-run-extents">pango_layout_iter_get_run_extents ()</a>
+</dt>
+<dt>pango_layout_iter_get_run_readonly, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-get-run-readonly">pango_layout_iter_get_run_readonly ()</a>
+</dt>
+<dt>pango_layout_iter_next_char, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-next-char">pango_layout_iter_next_char ()</a>
+</dt>
+<dt>pango_layout_iter_next_cluster, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-next-cluster">pango_layout_iter_next_cluster ()</a>
+</dt>
+<dt>pango_layout_iter_next_line, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-next-line">pango_layout_iter_next_line ()</a>
+</dt>
+<dt>pango_layout_iter_next_run, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-iter-next-run">pango_layout_iter_next_run ()</a>
+</dt>
+<dt>pango_layout_line_get_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-get-extents">pango_layout_line_get_extents ()</a>
+</dt>
+<dt>pango_layout_line_get_pixel_extents, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-get-pixel-extents">pango_layout_line_get_pixel_extents ()</a>
+</dt>
+<dt>pango_layout_line_get_x_ranges, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-get-x-ranges">pango_layout_line_get_x_ranges ()</a>
+</dt>
+<dt>pango_layout_line_index_to_x, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-index-to-x">pango_layout_line_index_to_x ()</a>
+</dt>
+<dt>pango_layout_line_ref, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-ref">pango_layout_line_ref ()</a>
+</dt>
+<dt>pango_layout_line_unref, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-unref">pango_layout_line_unref ()</a>
+</dt>
+<dt>pango_layout_line_x_to_index, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-line-x-to-index">pango_layout_line_x_to_index ()</a>
+</dt>
+<dt>pango_layout_move_cursor_visually, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-move-cursor-visually">pango_layout_move_cursor_visually ()</a>
+</dt>
+<dt>pango_layout_new, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-new">pango_layout_new ()</a>
+</dt>
+<dt>pango_layout_set_alignment, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-alignment">pango_layout_set_alignment ()</a>
+</dt>
+<dt>pango_layout_set_attributes, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-attributes">pango_layout_set_attributes ()</a>
+</dt>
+<dt>pango_layout_set_auto_dir, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-auto-dir">pango_layout_set_auto_dir ()</a>
+</dt>
+<dt>pango_layout_set_ellipsize, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-ellipsize">pango_layout_set_ellipsize ()</a>
+</dt>
+<dt>pango_layout_set_font_description, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-font-description">pango_layout_set_font_description ()</a>
+</dt>
+<dt>pango_layout_set_height, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-height">pango_layout_set_height ()</a>
+</dt>
+<dt>pango_layout_set_indent, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-indent">pango_layout_set_indent ()</a>
+</dt>
+<dt>pango_layout_set_justify, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-justify">pango_layout_set_justify ()</a>
+</dt>
+<dt>pango_layout_set_markup, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-markup">pango_layout_set_markup ()</a>
+</dt>
+<dt>pango_layout_set_markup_with_accel, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-markup-with-accel">pango_layout_set_markup_with_accel ()</a>
+</dt>
+<dt>pango_layout_set_single_paragraph_mode, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-single-paragraph-mode">pango_layout_set_single_paragraph_mode ()</a>
+</dt>
+<dt>pango_layout_set_spacing, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-spacing">pango_layout_set_spacing ()</a>
+</dt>
+<dt>pango_layout_set_tabs, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-tabs">pango_layout_set_tabs ()</a>
+</dt>
+<dt>pango_layout_set_text, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-text">pango_layout_set_text ()</a>
+</dt>
+<dt>pango_layout_set_width, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-width">pango_layout_set_width ()</a>
+</dt>
+<dt>pango_layout_set_wrap, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-set-wrap">pango_layout_set_wrap ()</a>
+</dt>
+<dt>pango_layout_xy_to_index, <a class="indexterm" href="pango-Layout-Objects.html#pango-layout-xy-to-index">pango_layout_xy_to_index ()</a>
+</dt>
+<dt>PANGO_LBEARING, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-LBEARING--CAPS">PANGO_LBEARING()</a>
+</dt>
+<dt>pango_log2vis_get_embedding_levels, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-log2vis-get-embedding-levels">pango_log2vis_get_embedding_levels ()</a>
+</dt>
+<dt>pango_lookup_aliases, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-lookup-aliases">pango_lookup_aliases ()</a>
+</dt>
+<dt>pango_map_get_engine, <a class="indexterm" href="pango-Modules.html#pango-map-get-engine">pango_map_get_engine ()</a>
+</dt>
+<dt>pango_map_get_engines, <a class="indexterm" href="pango-Modules.html#pango-map-get-engines">pango_map_get_engines ()</a>
+</dt>
+<dt>pango_matrix_concat, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-concat">pango_matrix_concat ()</a>
+</dt>
+<dt>pango_matrix_copy, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-copy">pango_matrix_copy ()</a>
+</dt>
+<dt>pango_matrix_free, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-free">pango_matrix_free ()</a>
+</dt>
+<dt>pango_matrix_get_font_scale_factor, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-get-font-scale-factor">pango_matrix_get_font_scale_factor ()</a>
+</dt>
+<dt>PANGO_MATRIX_INIT, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-MATRIX-INIT--CAPS">PANGO_MATRIX_INIT</a>
+</dt>
+<dt>pango_matrix_rotate, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-rotate">pango_matrix_rotate ()</a>
+</dt>
+<dt>pango_matrix_scale, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-scale">pango_matrix_scale ()</a>
+</dt>
+<dt>pango_matrix_transform_distance, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-distance">pango_matrix_transform_distance ()</a>
+</dt>
+<dt>pango_matrix_transform_pixel_rectangle, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle">pango_matrix_transform_pixel_rectangle ()</a>
+</dt>
+<dt>pango_matrix_transform_point, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-point">pango_matrix_transform_point ()</a>
+</dt>
+<dt>pango_matrix_transform_rectangle, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-transform-rectangle">pango_matrix_transform_rectangle ()</a>
+</dt>
+<dt>pango_matrix_translate, <a class="indexterm" href="pango-Glyph-Storage.html#pango-matrix-translate">pango_matrix_translate ()</a>
+</dt>
+<dt>pango_module_register, <a class="indexterm" href="pango-Modules.html#pango-module-register">pango_module_register ()</a>
+</dt>
+<dt>PANGO_OT_ALL_GLYPHS, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS">PANGO_OT_ALL_GLYPHS</a>
+</dt>
+<dt>pango_ot_buffer_add_glyph, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-add-glyph">pango_ot_buffer_add_glyph ()</a>
+</dt>
+<dt>pango_ot_buffer_clear, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-clear">pango_ot_buffer_clear ()</a>
+</dt>
+<dt>pango_ot_buffer_destroy, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy">pango_ot_buffer_destroy ()</a>
+</dt>
+<dt>pango_ot_buffer_get_glyphs, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-get-glyphs">pango_ot_buffer_get_glyphs ()</a>
+</dt>
+<dt>pango_ot_buffer_new, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-new">pango_ot_buffer_new ()</a>
+</dt>
+<dt>pango_ot_buffer_output, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-output">pango_ot_buffer_output ()</a>
+</dt>
+<dt>pango_ot_buffer_set_rtl, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-rtl">pango_ot_buffer_set_rtl ()</a>
+</dt>
+<dt>pango_ot_buffer_set_zero_width_marks, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-zero-width-marks">pango_ot_buffer_set_zero_width_marks ()</a>
+</dt>
+<dt>PANGO_OT_DEFAULT_LANGUAGE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS">PANGO_OT_DEFAULT_LANGUAGE</a>
+</dt>
+<dt>pango_ot_info_find_feature, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature">pango_ot_info_find_feature ()</a>
+</dt>
+<dt>pango_ot_info_find_language, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language">pango_ot_info_find_language ()</a>
+</dt>
+<dt>pango_ot_info_find_script, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-script">pango_ot_info_find_script ()</a>
+</dt>
+<dt>pango_ot_info_get, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-get">pango_ot_info_get ()</a>
+</dt>
+<dt>pango_ot_info_list_features, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-list-features">pango_ot_info_list_features ()</a>
+</dt>
+<dt>pango_ot_info_list_languages, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-list-languages">pango_ot_info_list_languages ()</a>
+</dt>
+<dt>pango_ot_info_list_scripts, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-info-list-scripts">pango_ot_info_list_scripts ()</a>
+</dt>
+<dt>PANGO_OT_NO_FEATURE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-FEATURE--CAPS">PANGO_OT_NO_FEATURE</a>
+</dt>
+<dt>PANGO_OT_NO_SCRIPT, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS">PANGO_OT_NO_SCRIPT</a>
+</dt>
+<dt>pango_ot_ruleset_add_feature, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature">pango_ot_ruleset_add_feature ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_copy, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy">pango_ot_ruleset_description_copy ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_equal, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-equal">pango_ot_ruleset_description_equal ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_free, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free">pango_ot_ruleset_description_free ()</a>
+</dt>
+<dt>pango_ot_ruleset_description_hash, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-hash">pango_ot_ruleset_description_hash ()</a>
+</dt>
+<dt>pango_ot_ruleset_get_feature_count, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-feature-count">pango_ot_ruleset_get_feature_count ()</a>
+</dt>
+<dt>pango_ot_ruleset_get_for_description, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description">pango_ot_ruleset_get_for_description ()</a>
+</dt>
+<dt>pango_ot_ruleset_maybe_add_feature, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature">pango_ot_ruleset_maybe_add_feature ()</a>
+</dt>
+<dt>pango_ot_ruleset_maybe_add_features, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features">pango_ot_ruleset_maybe_add_features ()</a>
+</dt>
+<dt>pango_ot_ruleset_new, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new">pango_ot_ruleset_new ()</a>
+</dt>
+<dt>pango_ot_ruleset_new_for, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for">pango_ot_ruleset_new_for ()</a>
+</dt>
+<dt>pango_ot_ruleset_new_from_description, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description">pango_ot_ruleset_new_from_description ()</a>
+</dt>
+<dt>pango_ot_ruleset_position, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-position">pango_ot_ruleset_position ()</a>
+</dt>
+<dt>pango_ot_ruleset_substitute, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-substitute">pango_ot_ruleset_substitute ()</a>
+</dt>
+<dt>PANGO_OT_TAG_DEFAULT_LANGUAGE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS">PANGO_OT_TAG_DEFAULT_LANGUAGE</a>
+</dt>
+<dt>PANGO_OT_TAG_DEFAULT_SCRIPT, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS">PANGO_OT_TAG_DEFAULT_SCRIPT</a>
+</dt>
+<dt>pango_ot_tag_from_language, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language">pango_ot_tag_from_language ()</a>
+</dt>
+<dt>pango_ot_tag_from_script, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script">pango_ot_tag_from_script ()</a>
+</dt>
+<dt>PANGO_OT_TAG_MAKE, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS">PANGO_OT_TAG_MAKE()</a>
+</dt>
+<dt>PANGO_OT_TAG_MAKE_FROM_STRING, <a class="indexterm" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE-FROM-STRING--CAPS">PANGO_OT_TAG_MAKE_FROM_STRING()</a>
+</dt>
+<dt>pango_ot_tag_to_language, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-to-language">pango_ot_tag_to_language ()</a>
+</dt>
+<dt>pango_ot_tag_to_script, <a class="indexterm" href="pango-OpenType-Font-Handling.html#pango-ot-tag-to-script">pango_ot_tag_to_script ()</a>
+</dt>
+<dt>pango_parse_enum, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-parse-enum">pango_parse_enum ()</a>
+</dt>
+<dt>pango_parse_markup, <a class="indexterm" href="pango-Text-Attributes.html#pango-parse-markup">pango_parse_markup ()</a>
+</dt>
+<dt>pango_parse_stretch, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-parse-stretch">pango_parse_stretch ()</a>
+</dt>
+<dt>pango_parse_style, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-parse-style">pango_parse_style ()</a>
+</dt>
+<dt>pango_parse_variant, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-parse-variant">pango_parse_variant ()</a>
+</dt>
+<dt>pango_parse_weight, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-parse-weight">pango_parse_weight ()</a>
+</dt>
+<dt>PANGO_PIXELS, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-PIXELS--CAPS">PANGO_PIXELS()</a>
+</dt>
+<dt>PANGO_PIXELS_CEIL, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-PIXELS-CEIL--CAPS">PANGO_PIXELS_CEIL()</a>
+</dt>
+<dt>PANGO_PIXELS_FLOOR, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-PIXELS-FLOOR--CAPS">PANGO_PIXELS_FLOOR()</a>
+</dt>
+<dt>pango_quantize_line_geometry, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-quantize-line-geometry">pango_quantize_line_geometry ()</a>
+</dt>
+<dt>PANGO_RBEARING, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-RBEARING--CAPS">PANGO_RBEARING()</a>
+</dt>
+<dt>pango_read_line, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-read-line">pango_read_line ()</a>
+</dt>
+<dt>pango_renderer_activate, <a class="indexterm" href="PangoRenderer.html#pango-renderer-activate">pango_renderer_activate ()</a>
+</dt>
+<dt>pango_renderer_deactivate, <a class="indexterm" href="PangoRenderer.html#pango-renderer-deactivate">pango_renderer_deactivate ()</a>
+</dt>
+<dt>pango_renderer_draw_error_underline, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-error-underline">pango_renderer_draw_error_underline ()</a>
+</dt>
+<dt>pango_renderer_draw_glyph, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-glyph">pango_renderer_draw_glyph ()</a>
+</dt>
+<dt>pango_renderer_draw_glyphs, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-glyphs">pango_renderer_draw_glyphs ()</a>
+</dt>
+<dt>pango_renderer_draw_glyph_item, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-glyph-item">pango_renderer_draw_glyph_item ()</a>
+</dt>
+<dt>pango_renderer_draw_layout, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-layout">pango_renderer_draw_layout ()</a>
+</dt>
+<dt>pango_renderer_draw_layout_line, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-layout-line">pango_renderer_draw_layout_line ()</a>
+</dt>
+<dt>pango_renderer_draw_rectangle, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-rectangle">pango_renderer_draw_rectangle ()</a>
+</dt>
+<dt>pango_renderer_draw_trapezoid, <a class="indexterm" href="PangoRenderer.html#pango-renderer-draw-trapezoid">pango_renderer_draw_trapezoid ()</a>
+</dt>
+<dt>pango_renderer_get_color, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-color">pango_renderer_get_color ()</a>
+</dt>
+<dt>pango_renderer_get_layout, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-layout">pango_renderer_get_layout ()</a>
+</dt>
+<dt>pango_renderer_get_layout_line, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-layout-line">pango_renderer_get_layout_line ()</a>
+</dt>
+<dt>pango_renderer_get_matrix, <a class="indexterm" href="PangoRenderer.html#pango-renderer-get-matrix">pango_renderer_get_matrix ()</a>
+</dt>
+<dt>pango_renderer_part_changed, <a class="indexterm" href="PangoRenderer.html#pango-renderer-part-changed">pango_renderer_part_changed ()</a>
+</dt>
+<dt>pango_renderer_set_color, <a class="indexterm" href="PangoRenderer.html#pango-renderer-set-color">pango_renderer_set_color ()</a>
+</dt>
+<dt>pango_renderer_set_matrix, <a class="indexterm" href="PangoRenderer.html#pango-renderer-set-matrix">pango_renderer_set_matrix ()</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_ATSUI, <a class="indexterm" href="pango-ATSUI-Fonts.html#PANGO-RENDER-TYPE-ATSUI--CAPS">PANGO_RENDER_TYPE_ATSUI</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_FC, <a class="indexterm" href="PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS">PANGO_RENDER_TYPE_FC</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_FT2, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-FT2--CAPS">PANGO_RENDER_TYPE_FT2</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_NONE, <a class="indexterm" href="pango-Engines.html#PANGO-RENDER-TYPE-NONE--CAPS">PANGO_RENDER_TYPE_NONE</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_WIN32, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-WIN32--CAPS">PANGO_RENDER_TYPE_WIN32</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_X, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-X--CAPS">PANGO_RENDER_TYPE_X</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_XFT, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-XFT--CAPS">PANGO_RENDER_TYPE_XFT</a>
+</dt>
+<dt>pango_reorder_items, <a class="indexterm" href="pango-Text-Processing.html#pango-reorder-items">pango_reorder_items ()</a>
+</dt>
+<dt>PANGO_SCALE, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS">PANGO_SCALE</a>
+</dt>
+<dt>PANGO_SCALE_LARGE, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-LARGE--CAPS">PANGO_SCALE_LARGE</a>
+</dt>
+<dt>PANGO_SCALE_MEDIUM, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-MEDIUM--CAPS">PANGO_SCALE_MEDIUM</a>
+</dt>
+<dt>PANGO_SCALE_SMALL, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-SMALL--CAPS">PANGO_SCALE_SMALL</a>
+</dt>
+<dt>PANGO_SCALE_XX_LARGE, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-XX-LARGE--CAPS">PANGO_SCALE_XX_LARGE</a>
+</dt>
+<dt>PANGO_SCALE_XX_SMALL, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-XX-SMALL--CAPS">PANGO_SCALE_XX_SMALL</a>
+</dt>
+<dt>PANGO_SCALE_X_LARGE, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-X-LARGE--CAPS">PANGO_SCALE_X_LARGE</a>
+</dt>
+<dt>PANGO_SCALE_X_SMALL, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-SCALE-X-SMALL--CAPS">PANGO_SCALE_X_SMALL</a>
+</dt>
+<dt>pango_scan_int, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-scan-int">pango_scan_int ()</a>
+</dt>
+<dt>pango_scan_string, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-scan-string">pango_scan_string ()</a>
+</dt>
+<dt>pango_scan_word, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-scan-word">pango_scan_word ()</a>
+</dt>
+<dt>pango_script_for_unichar, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-for-unichar">pango_script_for_unichar ()</a>
+</dt>
+<dt>pango_script_get_sample_language, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-get-sample-language">pango_script_get_sample_language ()</a>
+</dt>
+<dt>pango_script_iter_free, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-free">pango_script_iter_free ()</a>
+</dt>
+<dt>pango_script_iter_get_range, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-get-range">pango_script_iter_get_range ()</a>
+</dt>
+<dt>pango_script_iter_new, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-new">pango_script_iter_new ()</a>
+</dt>
+<dt>pango_script_iter_next, <a class="indexterm" href="pango-Scripts-and-Languages.html#pango-script-iter-next">pango_script_iter_next ()</a>
+</dt>
+<dt>pango_shape, <a class="indexterm" href="pango-Text-Processing.html#pango-shape">pango_shape ()</a>
+</dt>
+<dt>pango_skip_space, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-skip-space">pango_skip_space ()</a>
+</dt>
+<dt>pango_split_file_list, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-split-file-list">pango_split_file_list ()</a>
+</dt>
+<dt>pango_tab_array_copy, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-copy">pango_tab_array_copy ()</a>
+</dt>
+<dt>pango_tab_array_free, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-free">pango_tab_array_free ()</a>
+</dt>
+<dt>pango_tab_array_get_positions_in_pixels, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-get-positions-in-pixels">pango_tab_array_get_positions_in_pixels ()</a>
+</dt>
+<dt>pango_tab_array_get_size, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-get-size">pango_tab_array_get_size ()</a>
+</dt>
+<dt>pango_tab_array_get_tab, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-get-tab">pango_tab_array_get_tab ()</a>
+</dt>
+<dt>pango_tab_array_get_tabs, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-get-tabs">pango_tab_array_get_tabs ()</a>
+</dt>
+<dt>pango_tab_array_new, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-new">pango_tab_array_new ()</a>
+</dt>
+<dt>pango_tab_array_new_with_positions, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-new-with-positions">pango_tab_array_new_with_positions ()</a>
+</dt>
+<dt>pango_tab_array_resize, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-resize">pango_tab_array_resize ()</a>
+</dt>
+<dt>pango_tab_array_set_tab, <a class="indexterm" href="pango-Tab-Stops.html#pango-tab-array-set-tab">pango_tab_array_set_tab ()</a>
+</dt>
+<dt>pango_trim_string, <a class="indexterm" href="pango-Miscellaneous-Utilities.html#pango-trim-string">pango_trim_string ()</a>
+</dt>
+<dt>PANGO_TYPE_ALIGNMENT, <a class="indexterm" href="pango-Layout-Objects.html#PANGO-TYPE-ALIGNMENT--CAPS">PANGO_TYPE_ALIGNMENT</a>
+</dt>
+<dt>PANGO_TYPE_ATTR_LIST, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-TYPE-ATTR-LIST--CAPS">PANGO_TYPE_ATTR_LIST</a>
+</dt>
+<dt>PANGO_TYPE_ATTR_TYPE, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-TYPE-ATTR-TYPE--CAPS">PANGO_TYPE_ATTR_TYPE</a>
+</dt>
+<dt>PANGO_TYPE_COLOR, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-TYPE-COLOR--CAPS">PANGO_TYPE_COLOR</a>
+</dt>
+<dt>PANGO_TYPE_COVERAGE_LEVEL, <a class="indexterm" href="pango-Coverage-Maps.html#PANGO-TYPE-COVERAGE-LEVEL--CAPS">PANGO_TYPE_COVERAGE_LEVEL</a>
+</dt>
+<dt>PANGO_TYPE_DIRECTION, <a class="indexterm" href="pango-Text-Processing.html#PANGO-TYPE-DIRECTION--CAPS">PANGO_TYPE_DIRECTION</a>
+</dt>
+<dt>PANGO_TYPE_ELLIPSIZE_MODE, <a class="indexterm" href="pango-Layout-Objects.html#PANGO-TYPE-ELLIPSIZE-MODE--CAPS">PANGO_TYPE_ELLIPSIZE_MODE</a>
+</dt>
+<dt>PANGO_TYPE_FONT, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT--CAPS">PANGO_TYPE_FONT</a>
+</dt>
+<dt>PANGO_TYPE_FONTSET, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONTSET--CAPS">PANGO_TYPE_FONTSET</a>
+</dt>
+<dt>PANGO_TYPE_FONTSET_SIMPLE, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONTSET-SIMPLE--CAPS">PANGO_TYPE_FONTSET_SIMPLE</a>
+</dt>
+<dt>PANGO_TYPE_FONT_DESCRIPTION, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT-DESCRIPTION--CAPS">PANGO_TYPE_FONT_DESCRIPTION</a>
+</dt>
+<dt>PANGO_TYPE_FONT_FACE, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT-FACE--CAPS">PANGO_TYPE_FONT_FACE</a>
+</dt>
+<dt>PANGO_TYPE_FONT_FAMILY, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT-FAMILY--CAPS">PANGO_TYPE_FONT_FAMILY</a>
+</dt>
+<dt>PANGO_TYPE_FONT_MAP, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT-MAP--CAPS">PANGO_TYPE_FONT_MAP</a>
+</dt>
+<dt>PANGO_TYPE_FONT_MASK, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT-MASK--CAPS">PANGO_TYPE_FONT_MASK</a>
+</dt>
+<dt>PANGO_TYPE_FONT_METRICS, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-FONT-METRICS--CAPS">PANGO_TYPE_FONT_METRICS</a>
+</dt>
+<dt>PANGO_TYPE_GLYPH_ITEM, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM--CAPS">PANGO_TYPE_GLYPH_ITEM</a>
+</dt>
+<dt>PANGO_TYPE_GLYPH_ITEM_ITER, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM-ITER--CAPS">PANGO_TYPE_GLYPH_ITEM_ITER</a>
+</dt>
+<dt>PANGO_TYPE_GLYPH_STRING, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-STRING--CAPS">PANGO_TYPE_GLYPH_STRING</a>
+</dt>
+<dt>PANGO_TYPE_LANGUAGE, <a class="indexterm" href="pango-Scripts-and-Languages.html#PANGO-TYPE-LANGUAGE--CAPS">PANGO_TYPE_LANGUAGE</a>
+</dt>
+<dt>PANGO_TYPE_MATRIX, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-TYPE-MATRIX--CAPS">PANGO_TYPE_MATRIX</a>
+</dt>
+<dt>PANGO_TYPE_RENDER_PART, <a class="indexterm" href="PangoRenderer.html#PANGO-TYPE-RENDER-PART--CAPS">PANGO_TYPE_RENDER_PART</a>
+</dt>
+<dt>PANGO_TYPE_SCRIPT, <a class="indexterm" href="pango-Scripts-and-Languages.html#PANGO-TYPE-SCRIPT--CAPS">PANGO_TYPE_SCRIPT</a>
+</dt>
+<dt>PANGO_TYPE_STRETCH, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-STRETCH--CAPS">PANGO_TYPE_STRETCH</a>
+</dt>
+<dt>PANGO_TYPE_STYLE, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-STYLE--CAPS">PANGO_TYPE_STYLE</a>
+</dt>
+<dt>PANGO_TYPE_TAB_ALIGN, <a class="indexterm" href="pango-Tab-Stops.html#PANGO-TYPE-TAB-ALIGN--CAPS">PANGO_TYPE_TAB_ALIGN</a>
+</dt>
+<dt>PANGO_TYPE_TAB_ARRAY, <a class="indexterm" href="pango-Tab-Stops.html#PANGO-TYPE-TAB-ARRAY--CAPS">PANGO_TYPE_TAB_ARRAY</a>
+</dt>
+<dt>PANGO_TYPE_UNDERLINE, <a class="indexterm" href="pango-Text-Attributes.html#PANGO-TYPE-UNDERLINE--CAPS">PANGO_TYPE_UNDERLINE</a>
+</dt>
+<dt>PANGO_TYPE_VARIANT, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-VARIANT--CAPS">PANGO_TYPE_VARIANT</a>
+</dt>
+<dt>PANGO_TYPE_WEIGHT, <a class="indexterm" href="pango-Fonts.html#PANGO-TYPE-WEIGHT--CAPS">PANGO_TYPE_WEIGHT</a>
+</dt>
+<dt>PANGO_TYPE_WRAP_MODE, <a class="indexterm" href="pango-Layout-Objects.html#PANGO-TYPE-WRAP-MODE--CAPS">PANGO_TYPE_WRAP_MODE</a>
+</dt>
+<dt>pango_unichar_direction, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-unichar-direction">pango_unichar_direction ()</a>
+</dt>
+<dt>pango_units_from_double, <a class="indexterm" href="pango-Glyph-Storage.html#pango-units-from-double">pango_units_from_double ()</a>
+</dt>
+<dt>PANGO_UNITS_ROUND, <a class="indexterm" href="pango-Glyph-Storage.html#PANGO-UNITS-ROUND--CAPS">PANGO_UNITS_ROUND()</a>
+</dt>
+<dt>pango_units_to_double, <a class="indexterm" href="pango-Glyph-Storage.html#pango-units-to-double">pango_units_to_double ()</a>
+</dt>
+<dt>PANGO_VERSION, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION--CAPS">PANGO_VERSION</a>
+</dt>
+<dt>pango_version, <a class="indexterm" href="pango-Version-Checking.html#pango-version">pango_version ()</a>
+</dt>
+<dt>PANGO_VERSION_CHECK, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION-CHECK--CAPS">PANGO_VERSION_CHECK()</a>
+</dt>
+<dt>pango_version_check, <a class="indexterm" href="pango-Version-Checking.html#pango-version-check">pango_version_check ()</a>
+</dt>
+<dt>PANGO_VERSION_ENCODE, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS">PANGO_VERSION_ENCODE()</a>
+</dt>
+<dt>PANGO_VERSION_MAJOR, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION-MAJOR--CAPS">PANGO_VERSION_MAJOR</a>
+</dt>
+<dt>PANGO_VERSION_MICRO, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION-MICRO--CAPS">PANGO_VERSION_MICRO</a>
+</dt>
+<dt>PANGO_VERSION_MINOR, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION-MINOR--CAPS">PANGO_VERSION_MINOR</a>
+</dt>
+<dt>PANGO_VERSION_STRING, <a class="indexterm" href="pango-Version-Checking.html#PANGO-VERSION-STRING--CAPS">PANGO_VERSION_STRING</a>
+</dt>
+<dt>pango_version_string, <a class="indexterm" href="pango-Version-Checking.html#pango-version-string">pango_version_string ()</a>
+</dt>
+<dt>pango_win32_font_cache_free, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-free">pango_win32_font_cache_free ()</a>
+</dt>
+<dt>pango_win32_font_cache_load, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-load">pango_win32_font_cache_load ()</a>
+</dt>
+<dt>pango_win32_font_cache_loadw, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-loadw">pango_win32_font_cache_loadw ()</a>
+</dt>
+<dt>pango_win32_font_cache_new, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-new">pango_win32_font_cache_new ()</a>
+</dt>
+<dt>pango_win32_font_cache_unload, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload">pango_win32_font_cache_unload ()</a>
+</dt>
+<dt>pango_win32_font_description_from_logfont, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfont">pango_win32_font_description_from_logfont ()</a>
+</dt>
+<dt>pango_win32_font_description_from_logfontw, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfontw">pango_win32_font_description_from_logfontw ()</a>
+</dt>
+<dt>pango_win32_font_done_font, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font">pango_win32_font_done_font ()</a>
+</dt>
+<dt>pango_win32_font_get_glyph_index, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-glyph-index">pango_win32_font_get_glyph_index ()</a>
+</dt>
+<dt>pango_win32_font_get_metrics_factor, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-metrics-factor">pango_win32_font_get_metrics_factor ()</a>
+</dt>
+<dt>pango_win32_font_logfont, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfont">pango_win32_font_logfont ()</a>
+</dt>
+<dt>pango_win32_font_logfontw, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw">pango_win32_font_logfontw ()</a>
+</dt>
+<dt>pango_win32_font_map_for_display, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-for-display">pango_win32_font_map_for_display ()</a>
+</dt>
+<dt>pango_win32_font_map_get_font_cache, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-get-font-cache">pango_win32_font_map_get_font_cache ()</a>
+</dt>
+<dt>pango_win32_font_select_font, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-select-font">pango_win32_font_select_font ()</a>
+</dt>
+<dt>pango_win32_get_context, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-context">pango_win32_get_context ()</a>
+</dt>
+<dt>pango_win32_get_dc, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-dc">pango_win32_get_dc ()</a>
+</dt>
+<dt>pango_win32_get_debug_flag, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-debug-flag">pango_win32_get_debug_flag ()</a>
+</dt>
+<dt>pango_win32_get_unknown_glyph, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-unknown-glyph">pango_win32_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_win32_render, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render">pango_win32_render ()</a>
+</dt>
+<dt>pango_win32_render_layout, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout">pango_win32_render_layout ()</a>
+</dt>
+<dt>pango_win32_render_layout_line, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout-line">pango_win32_render_layout_line ()</a>
+</dt>
+<dt>pango_win32_render_transformed, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-transformed">pango_win32_render_transformed ()</a>
+</dt>
+<dt>pango_win32_shutdown_display, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-shutdown-display">pango_win32_shutdown_display ()</a>
+</dt>
+<dt>pango_xft_font_get_display, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-display">pango_xft_font_get_display ()</a>
+</dt>
+<dt>pango_xft_font_get_font, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-font">pango_xft_font_get_font ()</a>
+</dt>
+<dt>pango_xft_font_get_glyph, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph">pango_xft_font_get_glyph ()</a>
+</dt>
+<dt>pango_xft_font_get_unknown_glyph, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-unknown-glyph">pango_xft_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_xft_font_has_char, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char">pango_xft_font_has_char ()</a>
+</dt>
+<dt>pango_xft_font_lock_face, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face">pango_xft_font_lock_face ()</a>
+</dt>
+<dt>pango_xft_font_unlock_face, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face">pango_xft_font_unlock_face ()</a>
+</dt>
+<dt>pango_xft_get_context, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context">pango_xft_get_context ()</a>
+</dt>
+<dt>pango_xft_get_font_map, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map">pango_xft_get_font_map ()</a>
+</dt>
+<dt>pango_xft_picture_render, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-picture-render">pango_xft_picture_render ()</a>
+</dt>
+<dt>pango_xft_render, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render">pango_xft_render ()</a>
+</dt>
+<dt>pango_xft_renderer_new, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-new">pango_xft_renderer_new ()</a>
+</dt>
+<dt>pango_xft_renderer_set_default_color, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-default-color">pango_xft_renderer_set_default_color ()</a>
+</dt>
+<dt>pango_xft_renderer_set_draw, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw">pango_xft_renderer_set_draw ()</a>
+</dt>
+<dt>pango_xft_render_layout, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout">pango_xft_render_layout ()</a>
+</dt>
+<dt>pango_xft_render_layout_line, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout-line">pango_xft_render_layout_line ()</a>
+</dt>
+<dt>pango_xft_render_transformed, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-transformed">pango_xft_render_transformed ()</a>
+</dt>
+<dt>pango_xft_set_default_substitute, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute">pango_xft_set_default_substitute ()</a>
+</dt>
+<dt>pango_xft_shutdown_display, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-shutdown-display">pango_xft_shutdown_display ()</a>
+</dt>
+<dt>pango_xft_substitute_changed, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed">pango_xft_substitute_changed ()</a>
+</dt>
+<dt>pango_x_apply_ligatures, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-apply-ligatures">pango_x_apply_ligatures ()</a>
+</dt>
+<dt>pango_x_context_set_funcs, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-context-set-funcs">pango_x_context_set_funcs ()</a>
+</dt>
+<dt>pango_x_fallback_shape, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-fallback-shape">pango_x_fallback_shape ()</a>
+</dt>
+<dt>pango_x_find_first_subfont, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-find-first-subfont">pango_x_find_first_subfont ()</a>
+</dt>
+<dt>pango_x_font_cache_free, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free">pango_x_font_cache_free ()</a>
+</dt>
+<dt>pango_x_font_cache_load, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load">pango_x_font_cache_load ()</a>
+</dt>
+<dt>pango_x_font_cache_new, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-new">pango_x_font_cache_new ()</a>
+</dt>
+<dt>pango_x_font_cache_unload, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload">pango_x_font_cache_unload ()</a>
+</dt>
+<dt>pango_x_font_get_unknown_glyph, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-get-unknown-glyph">pango_x_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_x_font_map_for_display, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display">pango_x_font_map_for_display ()</a>
+</dt>
+<dt>pango_x_font_map_get_font_cache, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-get-font-cache">pango_x_font_map_get_font_cache ()</a>
+</dt>
+<dt>pango_x_font_subfont_xlfd, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-subfont-xlfd">pango_x_font_subfont_xlfd ()</a>
+</dt>
+<dt>pango_x_get_context, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-get-context">pango_x_get_context ()</a>
+</dt>
+<dt>pango_x_get_unknown_glyph, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-get-unknown-glyph">pango_x_get_unknown_glyph ()</a>
+</dt>
+<dt>PANGO_X_GLYPH_INDEX, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-INDEX--CAPS">PANGO_X_GLYPH_INDEX()</a>
+</dt>
+<dt>PANGO_X_GLYPH_SUBFONT, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-SUBFONT--CAPS">PANGO_X_GLYPH_SUBFONT()</a>
+</dt>
+<dt>pango_x_has_glyph, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-has-glyph">pango_x_has_glyph ()</a>
+</dt>
+<dt>pango_x_list_subfonts, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-list-subfonts">pango_x_list_subfonts ()</a>
+</dt>
+<dt>pango_x_load_font, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-load-font">pango_x_load_font ()</a>
+</dt>
+<dt>PANGO_X_MAKE_GLYPH, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS">PANGO_X_MAKE_GLYPH()</a>
+</dt>
+<dt>pango_x_render, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-render">pango_x_render ()</a>
+</dt>
+<dt>pango_x_render_layout, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-render-layout">pango_x_render_layout ()</a>
+</dt>
+<dt>pango_x_render_layout_line, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-render-layout-line">pango_x_render_layout_line ()</a>
+</dt>
+<dt>pango_x_shutdown_display, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display">pango_x_shutdown_display ()</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>S</h3>
+<dl>
+<dt>script_engine_create, <a class="indexterm" href="pango-Engines.html#script-engine-create">script_engine_create ()</a>
+</dt>
+<dt>script_engine_exit, <a class="indexterm" href="pango-Engines.html#script-engine-exit">script_engine_exit ()</a>
+</dt>
+<dt>script_engine_init, <a class="indexterm" href="pango-Engines.html#script-engine-init">script_engine_init ()</a>
+</dt>
+<dt>script_engine_list, <a class="indexterm" href="pango-Engines.html#script-engine-list">script_engine_list ()</a>
+</dt>
+</dl>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index-deprecated.html b/docs/html/index-deprecated.html
new file mode 100755 (executable)
index 0000000..10d01b1
--- /dev/null
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of deprecated symbols</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index-all.html" title="Index">
+<link rel="next" href="index-1.2.html" title="Index of new symbols in 1.2">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index-all.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-1.2.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="index-deprecated"></a>Index of deprecated symbols</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>P</h3>
+<dl>
+<dt>PangoFreeGCFunc, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc">PangoFreeGCFunc ()</a>
+</dt>
+<dt>PangoGetGCFunc, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc">PangoGetGCFunc ()</a>
+</dt>
+<dt>PangoXFontCache, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache">PangoXFontCache</a>
+</dt>
+<dt>PangoXSubfont, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont">PangoXSubfont</a>
+</dt>
+<dt>pango_cairo_font_map_create_context, <a class="indexterm" href="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context">pango_cairo_font_map_create_context ()</a>
+</dt>
+<dt>pango_fc_font_get_unknown_glyph, <a class="indexterm" href="PangoFcFont.html#pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_fc_font_map_create_context, <a class="indexterm" href="PangoFcFontMap.html#pango-fc-font-map-create-context">pango_fc_font_map_create_context ()</a>
+</dt>
+<dt>pango_ft2_font_get_coverage, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-coverage">pango_ft2_font_get_coverage ()</a>
+</dt>
+<dt>pango_ft2_font_get_face, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-face">pango_ft2_font_get_face ()</a>
+</dt>
+<dt>pango_ft2_font_get_kerning, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-kerning">pango_ft2_font_get_kerning ()</a>
+</dt>
+<dt>pango_ft2_font_map_create_context, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context">pango_ft2_font_map_create_context ()</a>
+</dt>
+<dt>pango_ft2_font_map_for_display, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display">pango_ft2_font_map_for_display ()</a>
+</dt>
+<dt>pango_ft2_get_context, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-context">pango_ft2_get_context ()</a>
+</dt>
+<dt>pango_ft2_get_unknown_glyph, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-unknown-glyph">pango_ft2_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_ft2_shutdown_display, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display">pango_ft2_shutdown_display ()</a>
+</dt>
+<dt>pango_get_mirror_char, <a class="indexterm" href="pango-Bidirectional-Text.html#pango-get-mirror-char">pango_get_mirror_char ()</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_FT2, <a class="indexterm" href="pango-FreeType-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-FT2--CAPS">PANGO_RENDER_TYPE_FT2</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_X, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-X--CAPS">PANGO_RENDER_TYPE_X</a>
+</dt>
+<dt>PANGO_RENDER_TYPE_XFT, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-XFT--CAPS">PANGO_RENDER_TYPE_XFT</a>
+</dt>
+<dt>pango_win32_get_context, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-context">pango_win32_get_context ()</a>
+</dt>
+<dt>pango_win32_get_unknown_glyph, <a class="indexterm" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-unknown-glyph">pango_win32_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_xft_font_get_glyph, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph">pango_xft_font_get_glyph ()</a>
+</dt>
+<dt>pango_xft_font_get_unknown_glyph, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-unknown-glyph">pango_xft_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_xft_font_has_char, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char">pango_xft_font_has_char ()</a>
+</dt>
+<dt>pango_xft_font_lock_face, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face">pango_xft_font_lock_face ()</a>
+</dt>
+<dt>pango_xft_font_unlock_face, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face">pango_xft_font_unlock_face ()</a>
+</dt>
+<dt>pango_xft_get_context, <a class="indexterm" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context">pango_xft_get_context ()</a>
+</dt>
+<dt>pango_x_apply_ligatures, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-apply-ligatures">pango_x_apply_ligatures ()</a>
+</dt>
+<dt>pango_x_context_set_funcs, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-context-set-funcs">pango_x_context_set_funcs ()</a>
+</dt>
+<dt>pango_x_fallback_shape, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-fallback-shape">pango_x_fallback_shape ()</a>
+</dt>
+<dt>pango_x_find_first_subfont, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-find-first-subfont">pango_x_find_first_subfont ()</a>
+</dt>
+<dt>pango_x_font_cache_free, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free">pango_x_font_cache_free ()</a>
+</dt>
+<dt>pango_x_font_cache_load, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load">pango_x_font_cache_load ()</a>
+</dt>
+<dt>pango_x_font_cache_new, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-new">pango_x_font_cache_new ()</a>
+</dt>
+<dt>pango_x_font_cache_unload, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload">pango_x_font_cache_unload ()</a>
+</dt>
+<dt>pango_x_font_get_unknown_glyph, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-get-unknown-glyph">pango_x_font_get_unknown_glyph ()</a>
+</dt>
+<dt>pango_x_font_map_for_display, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display">pango_x_font_map_for_display ()</a>
+</dt>
+<dt>pango_x_font_map_get_font_cache, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-get-font-cache">pango_x_font_map_get_font_cache ()</a>
+</dt>
+<dt>pango_x_font_subfont_xlfd, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-font-subfont-xlfd">pango_x_font_subfont_xlfd ()</a>
+</dt>
+<dt>pango_x_get_context, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-get-context">pango_x_get_context ()</a>
+</dt>
+<dt>pango_x_get_unknown_glyph, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-get-unknown-glyph">pango_x_get_unknown_glyph ()</a>
+</dt>
+<dt>PANGO_X_GLYPH_INDEX, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-INDEX--CAPS">PANGO_X_GLYPH_INDEX()</a>
+</dt>
+<dt>PANGO_X_GLYPH_SUBFONT, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-SUBFONT--CAPS">PANGO_X_GLYPH_SUBFONT()</a>
+</dt>
+<dt>pango_x_has_glyph, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-has-glyph">pango_x_has_glyph ()</a>
+</dt>
+<dt>pango_x_list_subfonts, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-list-subfonts">pango_x_list_subfonts ()</a>
+</dt>
+<dt>pango_x_load_font, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-load-font">pango_x_load_font ()</a>
+</dt>
+<dt>PANGO_X_MAKE_GLYPH, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS">PANGO_X_MAKE_GLYPH()</a>
+</dt>
+<dt>pango_x_render, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-render">pango_x_render ()</a>
+</dt>
+<dt>pango_x_render_layout, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-render-layout">pango_x_render_layout ()</a>
+</dt>
+<dt>pango_x_render_layout_line, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-render-layout-line">pango_x_render_layout_line ()</a>
+</dt>
+<dt>pango_x_shutdown_display, <a class="indexterm" href="pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display">pango_x_shutdown_display ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100755 (executable)
index 0000000..dfa57c5
--- /dev/null
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Pango Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="next" href="pango.html" title="Basic Pango Interfaces">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book" lang="en">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Pango Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">for Pango 1.26.1
+</p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="pango.html">Basic Pango Interfaces</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="pango-Text-Processing.html">Rendering</a></span><span class="refpurpose"> — Functions to run the rendering pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Glyph-Storage.html">Glyph Storage</a></span><span class="refpurpose"> — Structures for storing information about glyphs</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Fonts.html">Fonts</a></span><span class="refpurpose"> — Structures representing abstract fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Text-Attributes.html">Text Attributes</a></span><span class="refpurpose"> — Font and other attributes for annotating text</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Tab-Stops.html">Tab Stops</a></span><span class="refpurpose"> — Structures for storing tab stops</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoMarkupFormat.html">Text Attribute Markup</a></span><span class="refpurpose"> — Simple
+markup language to encode text with attributes</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Layout-Objects.html">Layout Objects</a></span><span class="refpurpose"> — High-level layout driver objects</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Scripts-and-Languages.html">Scripts and Languages</a></span><span class="refpurpose"> — Identifying writing systems and languages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Bidirectional-Text.html">Bidirectional Text</a></span><span class="refpurpose"> — Types and functions to help with handling bidirectional text</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Vertical-Text.html">Vertical Text</a></span><span class="refpurpose"> — Laying text out in vertical directions</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="rendering.html">Rendering with Pango</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="pango-Win32-Fonts-and-Rendering.html">Win32 Fonts and Rendering</a></span><span class="refpurpose"> — Functions for shape engines to manipulate Win32 fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-FreeType-Fonts-and-Rendering.html">FreeType Fonts and Rendering</a></span><span class="refpurpose"> — Functions for shape engines to manipulate FreeType fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Xft-Fonts-and-Rendering.html">Xft Fonts and Rendering</a></span><span class="refpurpose"> — Font handling and rendering with the Xft backend</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Cairo-Rendering.html">Cairo Rendering</a></span><span class="refpurpose"> — Rendering with the Cairo backend</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-ATSUI-Fonts.html">ATSUI Fonts</a></span><span class="refpurpose"> — Font handling with ATSUI fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-X-Fonts-and-Rendering.html">Deprecated X font backend</a></span><span class="refpurpose"> — Font handling and rendering with the deprecated X font backend</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="lowlevel.html">Low Level Functionality</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="PangoRenderer.html">PangoRenderer</a></span><span class="refpurpose"> — Rendering driver base class</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoFcFontMap.html">PangoFcFontMap</a></span><span class="refpurpose"> — Base fontmap class for Fontconfig-based backends</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoFcFont.html">PangoFcFont</a></span><span class="refpurpose"> — Base font class for Fontconfig-based backends</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoFcDecoder.html">PangoFcDecoder</a></span><span class="refpurpose"> — Custom font encoding handling</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-OpenType-Font-Handling.html">OpenType Font Handling</a></span><span class="refpurpose"> — Obtaining information from OpenType tables</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Coverage-Maps.html">Coverage Maps</a></span><span class="refpurpose"> — Unicode character range coverage storage</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Engines.html">Engines</a></span><span class="refpurpose"> — Language-specific and rendering-system-specific processing</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoEngineLang.html">PangoEngineLang</a></span><span class="refpurpose"> — Rendering-system independent script engines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoEngineShape.html">PangoEngineShape</a></span><span class="refpurpose"> — Rendering-system dependent script engines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Modules.html">Modules</a></span><span class="refpurpose"> — Support for loadable modules</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Miscellaneous-Utilities.html">Miscellaneous Utilities</a></span><span class="refpurpose"> — Various convenience and utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Version-Checking.html">Version Checking</a></span><span class="refpurpose"> — Tools for checking Pango version at compile- and run-time.</span>
+</dt>
+</dl></dd>
+<dt><span class="chapter"><a href="tools.html">Pango Tools</a></span></dt>
+<dd><dl><dt>
+<span class="refentrytitle"><a href="pango-querymodules.html">pango-querymodules</a></span><span class="refpurpose"> — Module registration utility</span>
+</dt></dl></dd>
+<dt><span class="chapter"><a href="pango-hierarchy.html">Object Hierarchy</a></span></dt>
+<dt><span class="index"><a href="index-all.html">Index</a></span></dt>
+<dt><span class="index"><a href="index-deprecated.html">Index of deprecated symbols</a></span></dt>
+<dt><span class="index"><a href="index-1.2.html">Index of new symbols in 1.2</a></span></dt>
+<dt><span class="index"><a href="index-1.4.html">Index of new symbols in 1.4</a></span></dt>
+<dt><span class="index"><a href="index-1.6.html">Index of new symbols in 1.6</a></span></dt>
+<dt><span class="index"><a href="index-1.8.html">Index of new symbols in 1.8</a></span></dt>
+<dt><span class="index"><a href="index-1.10.html">Index of new symbols in 1.10</a></span></dt>
+<dt><span class="index"><a href="index-1.12.html">Index of new symbols in 1.12</a></span></dt>
+<dt><span class="index"><a href="index-1.14.html">Index of new symbols in 1.14</a></span></dt>
+<dt><span class="index"><a href="index-1.16.html">Index of new symbols in 1.16</a></span></dt>
+<dt><span class="index"><a href="index-1.18.html">Index of new symbols in 1.18</a></span></dt>
+<dt><span class="index"><a href="index-1.20.html">Index of new symbols in 1.20</a></span></dt>
+<dt><span class="index"><a href="index-1.22.html">Index of new symbols in 1.22</a></span></dt>
+<dt><span class="index"><a href="index-1.24.html">Index of new symbols in 1.24</a></span></dt>
+<dt><span class="index"><a href="index-1.26.html">Index of new symbols in 1.26</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/index.sgml b/docs/html/index.sgml
new file mode 100755 (executable)
index 0000000..b75293e
--- /dev/null
@@ -0,0 +1,894 @@
+<ANCHOR id="pango-Text-Processing" href="pango/pango-Text-Processing.html">
+<ANCHOR id="pango-Text-Processing.synopsis" href="pango/pango-Text-Processing.html#pango-Text-Processing.synopsis">
+<ANCHOR id="PangoContext" href="pango/pango-Text-Processing.html#PangoContext">
+<ANCHOR id="pango-Text-Processing.object-hierarchy" href="pango/pango-Text-Processing.html#pango-Text-Processing.object-hierarchy">
+<ANCHOR id="pango-Text-Processing.description" href="pango/pango-Text-Processing.html#pango-Text-Processing.description">
+<ANCHOR id="pango-Text-Processing.details" href="pango/pango-Text-Processing.html#pango-Text-Processing.details">
+<ANCHOR id="PangoContext-struct" href="pango/pango-Text-Processing.html#PangoContext-struct">
+<ANCHOR id="PangoItem" href="pango/pango-Text-Processing.html#PangoItem">
+<ANCHOR id="PangoAnalysis" href="pango/pango-Text-Processing.html#PangoAnalysis">
+<ANCHOR id="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS" href="pango/pango-Text-Processing.html#PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS">
+<ANCHOR id="PANGO-TYPE-DIRECTION--CAPS" href="pango/pango-Text-Processing.html#PANGO-TYPE-DIRECTION--CAPS">
+<ANCHOR id="pango-itemize" href="pango/pango-Text-Processing.html#pango-itemize">
+<ANCHOR id="pango-itemize-with-base-dir" href="pango/pango-Text-Processing.html#pango-itemize-with-base-dir">
+<ANCHOR id="pango-item-free" href="pango/pango-Text-Processing.html#pango-item-free">
+<ANCHOR id="pango-item-copy" href="pango/pango-Text-Processing.html#pango-item-copy">
+<ANCHOR id="pango-item-new" href="pango/pango-Text-Processing.html#pango-item-new">
+<ANCHOR id="pango-item-split" href="pango/pango-Text-Processing.html#pango-item-split">
+<ANCHOR id="pango-reorder-items" href="pango/pango-Text-Processing.html#pango-reorder-items">
+<ANCHOR id="pango-context-new" href="pango/pango-Text-Processing.html#pango-context-new">
+<ANCHOR id="pango-context-set-font-map" href="pango/pango-Text-Processing.html#pango-context-set-font-map">
+<ANCHOR id="pango-context-get-font-map" href="pango/pango-Text-Processing.html#pango-context-get-font-map">
+<ANCHOR id="pango-context-get-font-description" href="pango/pango-Text-Processing.html#pango-context-get-font-description">
+<ANCHOR id="pango-context-set-font-description" href="pango/pango-Text-Processing.html#pango-context-set-font-description">
+<ANCHOR id="pango-context-get-language" href="pango/pango-Text-Processing.html#pango-context-get-language">
+<ANCHOR id="pango-context-set-language" href="pango/pango-Text-Processing.html#pango-context-set-language">
+<ANCHOR id="pango-context-get-base-dir" href="pango/pango-Text-Processing.html#pango-context-get-base-dir">
+<ANCHOR id="pango-context-set-base-dir" href="pango/pango-Text-Processing.html#pango-context-set-base-dir">
+<ANCHOR id="pango-context-get-base-gravity" href="pango/pango-Text-Processing.html#pango-context-get-base-gravity">
+<ANCHOR id="pango-context-set-base-gravity" href="pango/pango-Text-Processing.html#pango-context-set-base-gravity">
+<ANCHOR id="pango-context-get-gravity" href="pango/pango-Text-Processing.html#pango-context-get-gravity">
+<ANCHOR id="pango-context-get-gravity-hint" href="pango/pango-Text-Processing.html#pango-context-get-gravity-hint">
+<ANCHOR id="pango-context-set-gravity-hint" href="pango/pango-Text-Processing.html#pango-context-set-gravity-hint">
+<ANCHOR id="pango-context-get-matrix" href="pango/pango-Text-Processing.html#pango-context-get-matrix">
+<ANCHOR id="pango-context-set-matrix" href="pango/pango-Text-Processing.html#pango-context-set-matrix">
+<ANCHOR id="pango-context-load-font" href="pango/pango-Text-Processing.html#pango-context-load-font">
+<ANCHOR id="pango-context-load-fontset" href="pango/pango-Text-Processing.html#pango-context-load-fontset">
+<ANCHOR id="pango-context-get-metrics" href="pango/pango-Text-Processing.html#pango-context-get-metrics">
+<ANCHOR id="pango-context-list-families" href="pango/pango-Text-Processing.html#pango-context-list-families">
+<ANCHOR id="pango-break" href="pango/pango-Text-Processing.html#pango-break">
+<ANCHOR id="pango-get-log-attrs" href="pango/pango-Text-Processing.html#pango-get-log-attrs">
+<ANCHOR id="pango-find-paragraph-boundary" href="pango/pango-Text-Processing.html#pango-find-paragraph-boundary">
+<ANCHOR id="pango-default-break" href="pango/pango-Text-Processing.html#pango-default-break">
+<ANCHOR id="PangoLogAttr" href="pango/pango-Text-Processing.html#PangoLogAttr">
+<ANCHOR id="pango-shape" href="pango/pango-Text-Processing.html#pango-shape">
+<ANCHOR id="pango-Glyph-Storage" href="pango/pango-Glyph-Storage.html">
+<ANCHOR id="pango-Glyph-Storage.synopsis" href="pango/pango-Glyph-Storage.html#pango-Glyph-Storage.synopsis">
+<ANCHOR id="pango-Glyph-Storage.description" href="pango/pango-Glyph-Storage.html#pango-Glyph-Storage.description">
+<ANCHOR id="pango-Glyph-Storage.details" href="pango/pango-Glyph-Storage.html#pango-Glyph-Storage.details">
+<ANCHOR id="PANGO-SCALE--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-SCALE--CAPS">
+<ANCHOR id="PANGO-PIXELS--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-PIXELS--CAPS">
+<ANCHOR id="PANGO-PIXELS-FLOOR--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-PIXELS-FLOOR--CAPS">
+<ANCHOR id="PANGO-PIXELS-CEIL--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-PIXELS-CEIL--CAPS">
+<ANCHOR id="PANGO-UNITS-ROUND--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-UNITS-ROUND--CAPS">
+<ANCHOR id="pango-units-to-double" href="pango/pango-Glyph-Storage.html#pango-units-to-double">
+<ANCHOR id="pango-units-from-double" href="pango/pango-Glyph-Storage.html#pango-units-from-double">
+<ANCHOR id="PangoRectangle" href="pango/pango-Glyph-Storage.html#PangoRectangle">
+<ANCHOR id="PANGO-ASCENT--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-ASCENT--CAPS">
+<ANCHOR id="PANGO-DESCENT--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-DESCENT--CAPS">
+<ANCHOR id="PANGO-LBEARING--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-LBEARING--CAPS">
+<ANCHOR id="PANGO-RBEARING--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-RBEARING--CAPS">
+<ANCHOR id="pango-extents-to-pixels" href="pango/pango-Glyph-Storage.html#pango-extents-to-pixels">
+<ANCHOR id="PangoMatrix" href="pango/pango-Glyph-Storage.html#PangoMatrix">
+<ANCHOR id="PANGO-TYPE-MATRIX--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-TYPE-MATRIX--CAPS">
+<ANCHOR id="PANGO-MATRIX-INIT--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-MATRIX-INIT--CAPS">
+<ANCHOR id="pango-matrix-copy" href="pango/pango-Glyph-Storage.html#pango-matrix-copy">
+<ANCHOR id="pango-matrix-free" href="pango/pango-Glyph-Storage.html#pango-matrix-free">
+<ANCHOR id="pango-matrix-translate" href="pango/pango-Glyph-Storage.html#pango-matrix-translate">
+<ANCHOR id="pango-matrix-scale" href="pango/pango-Glyph-Storage.html#pango-matrix-scale">
+<ANCHOR id="pango-matrix-rotate" href="pango/pango-Glyph-Storage.html#pango-matrix-rotate">
+<ANCHOR id="pango-matrix-concat" href="pango/pango-Glyph-Storage.html#pango-matrix-concat">
+<ANCHOR id="pango-matrix-transform-point" href="pango/pango-Glyph-Storage.html#pango-matrix-transform-point">
+<ANCHOR id="pango-matrix-transform-distance" href="pango/pango-Glyph-Storage.html#pango-matrix-transform-distance">
+<ANCHOR id="pango-matrix-transform-rectangle" href="pango/pango-Glyph-Storage.html#pango-matrix-transform-rectangle">
+<ANCHOR id="pango-matrix-transform-pixel-rectangle" href="pango/pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle">
+<ANCHOR id="pango-matrix-get-font-scale-factor" href="pango/pango-Glyph-Storage.html#pango-matrix-get-font-scale-factor">
+<ANCHOR id="PangoGlyph" href="pango/pango-Glyph-Storage.html#PangoGlyph">
+<ANCHOR id="PANGO-GLYPH-EMPTY--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS">
+<ANCHOR id="PANGO-GLYPH-INVALID-INPUT--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-GLYPH-INVALID-INPUT--CAPS">
+<ANCHOR id="PANGO-GLYPH-UNKNOWN-FLAG--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS">
+<ANCHOR id="PANGO-GET-UNKNOWN-GLYPH--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS">
+<ANCHOR id="PangoGlyphInfo" href="pango/pango-Glyph-Storage.html#PangoGlyphInfo">
+<ANCHOR id="PangoGlyphGeometry" href="pango/pango-Glyph-Storage.html#PangoGlyphGeometry">
+<ANCHOR id="PangoGlyphUnit" href="pango/pango-Glyph-Storage.html#PangoGlyphUnit">
+<ANCHOR id="PangoGlyphVisAttr" href="pango/pango-Glyph-Storage.html#PangoGlyphVisAttr">
+<ANCHOR id="PangoGlyphString" href="pango/pango-Glyph-Storage.html#PangoGlyphString">
+<ANCHOR id="PangoGlyphItem" href="pango/pango-Glyph-Storage.html#PangoGlyphItem">
+<ANCHOR id="PangoGlyphItemIter" href="pango/pango-Glyph-Storage.html#PangoGlyphItemIter">
+<ANCHOR id="PANGO-TYPE-GLYPH-STRING--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-STRING--CAPS">
+<ANCHOR id="pango-glyph-string-new" href="pango/pango-Glyph-Storage.html#pango-glyph-string-new">
+<ANCHOR id="pango-glyph-string-copy" href="pango/pango-Glyph-Storage.html#pango-glyph-string-copy">
+<ANCHOR id="pango-glyph-string-set-size" href="pango/pango-Glyph-Storage.html#pango-glyph-string-set-size">
+<ANCHOR id="pango-glyph-string-free" href="pango/pango-Glyph-Storage.html#pango-glyph-string-free">
+<ANCHOR id="pango-glyph-string-extents" href="pango/pango-Glyph-Storage.html#pango-glyph-string-extents">
+<ANCHOR id="pango-glyph-string-extents-range" href="pango/pango-Glyph-Storage.html#pango-glyph-string-extents-range">
+<ANCHOR id="pango-glyph-string-get-width" href="pango/pango-Glyph-Storage.html#pango-glyph-string-get-width">
+<ANCHOR id="pango-glyph-string-index-to-x" href="pango/pango-Glyph-Storage.html#pango-glyph-string-index-to-x">
+<ANCHOR id="pango-glyph-string-x-to-index" href="pango/pango-Glyph-Storage.html#pango-glyph-string-x-to-index">
+<ANCHOR id="pango-glyph-string-get-logical-widths" href="pango/pango-Glyph-Storage.html#pango-glyph-string-get-logical-widths">
+<ANCHOR id="PANGO-TYPE-GLYPH-ITEM--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM--CAPS">
+<ANCHOR id="pango-glyph-item-copy" href="pango/pango-Glyph-Storage.html#pango-glyph-item-copy">
+<ANCHOR id="pango-glyph-item-free" href="pango/pango-Glyph-Storage.html#pango-glyph-item-free">
+<ANCHOR id="pango-glyph-item-split" href="pango/pango-Glyph-Storage.html#pango-glyph-item-split">
+<ANCHOR id="pango-glyph-item-apply-attrs" href="pango/pango-Glyph-Storage.html#pango-glyph-item-apply-attrs">
+<ANCHOR id="pango-glyph-item-letter-space" href="pango/pango-Glyph-Storage.html#pango-glyph-item-letter-space">
+<ANCHOR id="pango-glyph-item-get-logical-widths" href="pango/pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths">
+<ANCHOR id="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS" href="pango/pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM-ITER--CAPS">
+<ANCHOR id="pango-glyph-item-iter-copy" href="pango/pango-Glyph-Storage.html#pango-glyph-item-iter-copy">
+<ANCHOR id="pango-glyph-item-iter-free" href="pango/pango-Glyph-Storage.html#pango-glyph-item-iter-free">
+<ANCHOR id="pango-glyph-item-iter-init-start" href="pango/pango-Glyph-Storage.html#pango-glyph-item-iter-init-start">
+<ANCHOR id="pango-glyph-item-iter-init-end" href="pango/pango-Glyph-Storage.html#pango-glyph-item-iter-init-end">
+<ANCHOR id="pango-glyph-item-iter-next-cluster" href="pango/pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster">
+<ANCHOR id="pango-glyph-item-iter-prev-cluster" href="pango/pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster">
+<ANCHOR id="pango-Fonts" href="pango/pango-Fonts.html">
+<ANCHOR id="pango-Fonts.synopsis" href="pango/pango-Fonts.html#pango-Fonts.synopsis">
+<ANCHOR id="PangoFont" href="pango/pango-Fonts.html#PangoFont">
+<ANCHOR id="PangoFontFamily" href="pango/pango-Fonts.html#PangoFontFamily">
+<ANCHOR id="PangoFontFace" href="pango/pango-Fonts.html#PangoFontFace">
+<ANCHOR id="PangoFontMap" href="pango/pango-Fonts.html#PangoFontMap">
+<ANCHOR id="PangoFontset" href="pango/pango-Fonts.html#PangoFontset">
+<ANCHOR id="PangoFontsetSimple" href="pango/pango-Fonts.html#PangoFontsetSimple">
+<ANCHOR id="pango-Fonts.object-hierarchy" href="pango/pango-Fonts.html#pango-Fonts.object-hierarchy">
+<ANCHOR id="pango-Fonts.derived-interfaces" href="pango/pango-Fonts.html#pango-Fonts.derived-interfaces">
+<ANCHOR id="pango-Fonts.description" href="pango/pango-Fonts.html#pango-Fonts.description">
+<ANCHOR id="pango-Fonts.details" href="pango/pango-Fonts.html#pango-Fonts.details">
+<ANCHOR id="PangoFontDescription" href="pango/pango-Fonts.html#PangoFontDescription">
+<ANCHOR id="PANGO-TYPE-FONT-DESCRIPTION--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT-DESCRIPTION--CAPS">
+<ANCHOR id="PangoStyle" href="pango/pango-Fonts.html#PangoStyle">
+<ANCHOR id="PANGO-TYPE-STYLE--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-STYLE--CAPS">
+<ANCHOR id="PangoWeight" href="pango/pango-Fonts.html#PangoWeight">
+<ANCHOR id="PANGO-TYPE-WEIGHT--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-WEIGHT--CAPS">
+<ANCHOR id="PangoVariant" href="pango/pango-Fonts.html#PangoVariant">
+<ANCHOR id="PANGO-TYPE-VARIANT--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-VARIANT--CAPS">
+<ANCHOR id="PangoStretch" href="pango/pango-Fonts.html#PangoStretch">
+<ANCHOR id="PANGO-TYPE-STRETCH--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-STRETCH--CAPS">
+<ANCHOR id="PangoFontMask" href="pango/pango-Fonts.html#PangoFontMask">
+<ANCHOR id="PANGO-TYPE-FONT-MASK--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT-MASK--CAPS">
+<ANCHOR id="pango-font-description-new" href="pango/pango-Fonts.html#pango-font-description-new">
+<ANCHOR id="pango-font-description-copy" href="pango/pango-Fonts.html#pango-font-description-copy">
+<ANCHOR id="pango-font-description-copy-static" href="pango/pango-Fonts.html#pango-font-description-copy-static">
+<ANCHOR id="pango-font-description-hash" href="pango/pango-Fonts.html#pango-font-description-hash">
+<ANCHOR id="pango-font-description-equal" href="pango/pango-Fonts.html#pango-font-description-equal">
+<ANCHOR id="pango-font-description-free" href="pango/pango-Fonts.html#pango-font-description-free">
+<ANCHOR id="pango-font-descriptions-free" href="pango/pango-Fonts.html#pango-font-descriptions-free">
+<ANCHOR id="pango-font-description-set-family" href="pango/pango-Fonts.html#pango-font-description-set-family">
+<ANCHOR id="pango-font-description-set-family-static" href="pango/pango-Fonts.html#pango-font-description-set-family-static">
+<ANCHOR id="pango-font-description-get-family" href="pango/pango-Fonts.html#pango-font-description-get-family">
+<ANCHOR id="pango-font-description-set-style" href="pango/pango-Fonts.html#pango-font-description-set-style">
+<ANCHOR id="pango-font-description-get-style" href="pango/pango-Fonts.html#pango-font-description-get-style">
+<ANCHOR id="pango-font-description-set-variant" href="pango/pango-Fonts.html#pango-font-description-set-variant">
+<ANCHOR id="pango-font-description-get-variant" href="pango/pango-Fonts.html#pango-font-description-get-variant">
+<ANCHOR id="pango-font-description-set-weight" href="pango/pango-Fonts.html#pango-font-description-set-weight">
+<ANCHOR id="pango-font-description-get-weight" href="pango/pango-Fonts.html#pango-font-description-get-weight">
+<ANCHOR id="pango-font-description-set-stretch" href="pango/pango-Fonts.html#pango-font-description-set-stretch">
+<ANCHOR id="pango-font-description-get-stretch" href="pango/pango-Fonts.html#pango-font-description-get-stretch">
+<ANCHOR id="pango-font-description-set-size" href="pango/pango-Fonts.html#pango-font-description-set-size">
+<ANCHOR id="pango-font-description-get-size" href="pango/pango-Fonts.html#pango-font-description-get-size">
+<ANCHOR id="pango-font-description-set-absolute-size" href="pango/pango-Fonts.html#pango-font-description-set-absolute-size">
+<ANCHOR id="pango-font-description-get-size-is-absolute" href="pango/pango-Fonts.html#pango-font-description-get-size-is-absolute">
+<ANCHOR id="pango-font-description-set-gravity" href="pango/pango-Fonts.html#pango-font-description-set-gravity">
+<ANCHOR id="pango-font-description-get-gravity" href="pango/pango-Fonts.html#pango-font-description-get-gravity">
+<ANCHOR id="pango-font-description-get-set-fields" href="pango/pango-Fonts.html#pango-font-description-get-set-fields">
+<ANCHOR id="pango-font-description-unset-fields" href="pango/pango-Fonts.html#pango-font-description-unset-fields">
+<ANCHOR id="pango-font-description-merge" href="pango/pango-Fonts.html#pango-font-description-merge">
+<ANCHOR id="pango-font-description-merge-static" href="pango/pango-Fonts.html#pango-font-description-merge-static">
+<ANCHOR id="pango-font-description-better-match" href="pango/pango-Fonts.html#pango-font-description-better-match">
+<ANCHOR id="pango-font-description-from-string" href="pango/pango-Fonts.html#pango-font-description-from-string">
+<ANCHOR id="pango-font-description-to-string" href="pango/pango-Fonts.html#pango-font-description-to-string">
+<ANCHOR id="pango-font-description-to-filename" href="pango/pango-Fonts.html#pango-font-description-to-filename">
+<ANCHOR id="PangoFontMetrics" href="pango/pango-Fonts.html#PangoFontMetrics">
+<ANCHOR id="PANGO-TYPE-FONT-METRICS--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT-METRICS--CAPS">
+<ANCHOR id="pango-font-metrics-ref" href="pango/pango-Fonts.html#pango-font-metrics-ref">
+<ANCHOR id="pango-font-metrics-unref" href="pango/pango-Fonts.html#pango-font-metrics-unref">
+<ANCHOR id="pango-font-metrics-get-ascent" href="pango/pango-Fonts.html#pango-font-metrics-get-ascent">
+<ANCHOR id="pango-font-metrics-get-descent" href="pango/pango-Fonts.html#pango-font-metrics-get-descent">
+<ANCHOR id="pango-font-metrics-get-approximate-char-width" href="pango/pango-Fonts.html#pango-font-metrics-get-approximate-char-width">
+<ANCHOR id="pango-font-metrics-get-approximate-digit-width" href="pango/pango-Fonts.html#pango-font-metrics-get-approximate-digit-width">
+<ANCHOR id="pango-font-metrics-get-underline-thickness" href="pango/pango-Fonts.html#pango-font-metrics-get-underline-thickness">
+<ANCHOR id="pango-font-metrics-get-underline-position" href="pango/pango-Fonts.html#pango-font-metrics-get-underline-position">
+<ANCHOR id="pango-font-metrics-get-strikethrough-thickness" href="pango/pango-Fonts.html#pango-font-metrics-get-strikethrough-thickness">
+<ANCHOR id="pango-font-metrics-get-strikethrough-position" href="pango/pango-Fonts.html#pango-font-metrics-get-strikethrough-position">
+<ANCHOR id="PangoFont-struct" href="pango/pango-Fonts.html#PangoFont-struct">
+<ANCHOR id="PANGO-TYPE-FONT--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT--CAPS">
+<ANCHOR id="PANGO-FONT--CAPS" href="pango/pango-Fonts.html#PANGO-FONT--CAPS">
+<ANCHOR id="PANGO-IS-FONT--CAPS" href="pango/pango-Fonts.html#PANGO-IS-FONT--CAPS">
+<ANCHOR id="pango-font-find-shaper" href="pango/pango-Fonts.html#pango-font-find-shaper">
+<ANCHOR id="pango-font-describe" href="pango/pango-Fonts.html#pango-font-describe">
+<ANCHOR id="pango-font-describe-with-absolute-size" href="pango/pango-Fonts.html#pango-font-describe-with-absolute-size">
+<ANCHOR id="pango-font-get-coverage" href="pango/pango-Fonts.html#pango-font-get-coverage">
+<ANCHOR id="pango-font-get-glyph-extents" href="pango/pango-Fonts.html#pango-font-get-glyph-extents">
+<ANCHOR id="pango-font-get-metrics" href="pango/pango-Fonts.html#pango-font-get-metrics">
+<ANCHOR id="pango-font-get-font-map" href="pango/pango-Fonts.html#pango-font-get-font-map">
+<ANCHOR id="PangoFontFamily-struct" href="pango/pango-Fonts.html#PangoFontFamily-struct">
+<ANCHOR id="PANGO-TYPE-FONT-FAMILY--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT-FAMILY--CAPS">
+<ANCHOR id="PANGO-FONT-FAMILY--CAPS" href="pango/pango-Fonts.html#PANGO-FONT-FAMILY--CAPS">
+<ANCHOR id="PANGO-IS-FONT-FAMILY--CAPS" href="pango/pango-Fonts.html#PANGO-IS-FONT-FAMILY--CAPS">
+<ANCHOR id="pango-font-family-get-name" href="pango/pango-Fonts.html#pango-font-family-get-name">
+<ANCHOR id="pango-font-family-is-monospace" href="pango/pango-Fonts.html#pango-font-family-is-monospace">
+<ANCHOR id="pango-font-family-list-faces" href="pango/pango-Fonts.html#pango-font-family-list-faces">
+<ANCHOR id="PangoFontFace-struct" href="pango/pango-Fonts.html#PangoFontFace-struct">
+<ANCHOR id="PANGO-TYPE-FONT-FACE--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT-FACE--CAPS">
+<ANCHOR id="PANGO-FONT-FACE--CAPS" href="pango/pango-Fonts.html#PANGO-FONT-FACE--CAPS">
+<ANCHOR id="PANGO-IS-FONT-FACE--CAPS" href="pango/pango-Fonts.html#PANGO-IS-FONT-FACE--CAPS">
+<ANCHOR id="pango-font-face-get-face-name" href="pango/pango-Fonts.html#pango-font-face-get-face-name">
+<ANCHOR id="pango-font-face-list-sizes" href="pango/pango-Fonts.html#pango-font-face-list-sizes">
+<ANCHOR id="pango-font-face-describe" href="pango/pango-Fonts.html#pango-font-face-describe">
+<ANCHOR id="pango-font-face-is-synthesized" href="pango/pango-Fonts.html#pango-font-face-is-synthesized">
+<ANCHOR id="PangoFontMap-struct" href="pango/pango-Fonts.html#PangoFontMap-struct">
+<ANCHOR id="PANGO-TYPE-FONT-MAP--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONT-MAP--CAPS">
+<ANCHOR id="PANGO-FONT-MAP--CAPS" href="pango/pango-Fonts.html#PANGO-FONT-MAP--CAPS">
+<ANCHOR id="PANGO-IS-FONT-MAP--CAPS" href="pango/pango-Fonts.html#PANGO-IS-FONT-MAP--CAPS">
+<ANCHOR id="PangoFontMapClass" href="pango/pango-Fonts.html#PangoFontMapClass">
+<ANCHOR id="PANGO-FONT-MAP-CLASS--CAPS" href="pango/pango-Fonts.html#PANGO-FONT-MAP-CLASS--CAPS">
+<ANCHOR id="PANGO-IS-FONT-MAP-CLASS--CAPS" href="pango/pango-Fonts.html#PANGO-IS-FONT-MAP-CLASS--CAPS">
+<ANCHOR id="PANGO-FONT-MAP-GET-CLASS--CAPS" href="pango/pango-Fonts.html#PANGO-FONT-MAP-GET-CLASS--CAPS">
+<ANCHOR id="pango-font-map-create-context" href="pango/pango-Fonts.html#pango-font-map-create-context">
+<ANCHOR id="pango-font-map-load-font" href="pango/pango-Fonts.html#pango-font-map-load-font">
+<ANCHOR id="pango-font-map-load-fontset" href="pango/pango-Fonts.html#pango-font-map-load-fontset">
+<ANCHOR id="pango-font-map-list-families" href="pango/pango-Fonts.html#pango-font-map-list-families">
+<ANCHOR id="pango-font-map-get-shape-engine-type" href="pango/pango-Fonts.html#pango-font-map-get-shape-engine-type">
+<ANCHOR id="PangoFontset-struct" href="pango/pango-Fonts.html#PangoFontset-struct">
+<ANCHOR id="PANGO-TYPE-FONTSET--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONTSET--CAPS">
+<ANCHOR id="PangoFontsetClass" href="pango/pango-Fonts.html#PangoFontsetClass">
+<ANCHOR id="pango-fontset-get-font" href="pango/pango-Fonts.html#pango-fontset-get-font">
+<ANCHOR id="pango-fontset-get-metrics" href="pango/pango-Fonts.html#pango-fontset-get-metrics">
+<ANCHOR id="PangoFontsetForeachFunc" href="pango/pango-Fonts.html#PangoFontsetForeachFunc">
+<ANCHOR id="pango-fontset-foreach" href="pango/pango-Fonts.html#pango-fontset-foreach">
+<ANCHOR id="PangoFontsetSimple-struct" href="pango/pango-Fonts.html#PangoFontsetSimple-struct">
+<ANCHOR id="PANGO-TYPE-FONTSET-SIMPLE--CAPS" href="pango/pango-Fonts.html#PANGO-TYPE-FONTSET-SIMPLE--CAPS">
+<ANCHOR id="pango-fontset-simple-new" href="pango/pango-Fonts.html#pango-fontset-simple-new">
+<ANCHOR id="pango-fontset-simple-append" href="pango/pango-Fonts.html#pango-fontset-simple-append">
+<ANCHOR id="pango-fontset-simple-size" href="pango/pango-Fonts.html#pango-fontset-simple-size">
+<ANCHOR id="pango-Text-Attributes" href="pango/pango-Text-Attributes.html">
+<ANCHOR id="pango-Text-Attributes.synopsis" href="pango/pango-Text-Attributes.html#pango-Text-Attributes.synopsis">
+<ANCHOR id="pango-Text-Attributes.description" href="pango/pango-Text-Attributes.html#pango-Text-Attributes.description">
+<ANCHOR id="pango-Text-Attributes.details" href="pango/pango-Text-Attributes.html#pango-Text-Attributes.details">
+<ANCHOR id="PangoAttrType" href="pango/pango-Text-Attributes.html#PangoAttrType">
+<ANCHOR id="PANGO-TYPE-ATTR-TYPE--CAPS" href="pango/pango-Text-Attributes.html#PANGO-TYPE-ATTR-TYPE--CAPS">
+<ANCHOR id="PangoAttrClass" href="pango/pango-Text-Attributes.html#PangoAttrClass">
+<ANCHOR id="PangoAttribute" href="pango/pango-Text-Attributes.html#PangoAttribute">
+<ANCHOR id="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS" href="pango/pango-Text-Attributes.html#PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS">
+<ANCHOR id="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS" href="pango/pango-Text-Attributes.html#PANGO-ATTR-INDEX-TO-TEXT-END--CAPS">
+<ANCHOR id="PangoAttrString" href="pango/pango-Text-Attributes.html#PangoAttrString">
+<ANCHOR id="PangoAttrLanguage" href="pango/pango-Text-Attributes.html#PangoAttrLanguage">
+<ANCHOR id="PangoAttrColor" href="pango/pango-Text-Attributes.html#PangoAttrColor">
+<ANCHOR id="PangoAttrInt" href="pango/pango-Text-Attributes.html#PangoAttrInt">
+<ANCHOR id="PangoAttrFloat" href="pango/pango-Text-Attributes.html#PangoAttrFloat">
+<ANCHOR id="PangoAttrFontDesc" href="pango/pango-Text-Attributes.html#PangoAttrFontDesc">
+<ANCHOR id="PangoAttrShape" href="pango/pango-Text-Attributes.html#PangoAttrShape">
+<ANCHOR id="PangoAttrSize" href="pango/pango-Text-Attributes.html#PangoAttrSize">
+<ANCHOR id="pango-parse-markup" href="pango/pango-Text-Attributes.html#pango-parse-markup">
+<ANCHOR id="pango-attr-type-register" href="pango/pango-Text-Attributes.html#pango-attr-type-register">
+<ANCHOR id="pango-attr-type-get-name" href="pango/pango-Text-Attributes.html#pango-attr-type-get-name">
+<ANCHOR id="pango-attribute-init" href="pango/pango-Text-Attributes.html#pango-attribute-init">
+<ANCHOR id="pango-attribute-copy" href="pango/pango-Text-Attributes.html#pango-attribute-copy">
+<ANCHOR id="pango-attribute-equal" href="pango/pango-Text-Attributes.html#pango-attribute-equal">
+<ANCHOR id="pango-attribute-destroy" href="pango/pango-Text-Attributes.html#pango-attribute-destroy">
+<ANCHOR id="pango-attr-language-new" href="pango/pango-Text-Attributes.html#pango-attr-language-new">
+<ANCHOR id="pango-attr-family-new" href="pango/pango-Text-Attributes.html#pango-attr-family-new">
+<ANCHOR id="pango-attr-style-new" href="pango/pango-Text-Attributes.html#pango-attr-style-new">
+<ANCHOR id="pango-attr-variant-new" href="pango/pango-Text-Attributes.html#pango-attr-variant-new">
+<ANCHOR id="pango-attr-stretch-new" href="pango/pango-Text-Attributes.html#pango-attr-stretch-new">
+<ANCHOR id="pango-attr-weight-new" href="pango/pango-Text-Attributes.html#pango-attr-weight-new">
+<ANCHOR id="pango-attr-size-new" href="pango/pango-Text-Attributes.html#pango-attr-size-new">
+<ANCHOR id="pango-attr-size-new-absolute" href="pango/pango-Text-Attributes.html#pango-attr-size-new-absolute">
+<ANCHOR id="pango-attr-font-desc-new" href="pango/pango-Text-Attributes.html#pango-attr-font-desc-new">
+<ANCHOR id="pango-attr-foreground-new" href="pango/pango-Text-Attributes.html#pango-attr-foreground-new">
+<ANCHOR id="pango-attr-background-new" href="pango/pango-Text-Attributes.html#pango-attr-background-new">
+<ANCHOR id="pango-attr-strikethrough-new" href="pango/pango-Text-Attributes.html#pango-attr-strikethrough-new">
+<ANCHOR id="pango-attr-strikethrough-color-new" href="pango/pango-Text-Attributes.html#pango-attr-strikethrough-color-new">
+<ANCHOR id="pango-attr-underline-new" href="pango/pango-Text-Attributes.html#pango-attr-underline-new">
+<ANCHOR id="pango-attr-underline-color-new" href="pango/pango-Text-Attributes.html#pango-attr-underline-color-new">
+<ANCHOR id="PangoUnderline" href="pango/pango-Text-Attributes.html#PangoUnderline">
+<ANCHOR id="PANGO-TYPE-UNDERLINE--CAPS" href="pango/pango-Text-Attributes.html#PANGO-TYPE-UNDERLINE--CAPS">
+<ANCHOR id="pango-attr-shape-new" href="pango/pango-Text-Attributes.html#pango-attr-shape-new">
+<ANCHOR id="pango-attr-shape-new-with-data" href="pango/pango-Text-Attributes.html#pango-attr-shape-new-with-data">
+<ANCHOR id="PangoAttrDataCopyFunc" href="pango/pango-Text-Attributes.html#PangoAttrDataCopyFunc">
+<ANCHOR id="pango-attr-scale-new" href="pango/pango-Text-Attributes.html#pango-attr-scale-new">
+<ANCHOR id="PANGO-SCALE-XX-SMALL--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-XX-SMALL--CAPS">
+<ANCHOR id="PANGO-SCALE-X-SMALL--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-X-SMALL--CAPS">
+<ANCHOR id="PANGO-SCALE-SMALL--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-SMALL--CAPS">
+<ANCHOR id="PANGO-SCALE-MEDIUM--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-MEDIUM--CAPS">
+<ANCHOR id="PANGO-SCALE-LARGE--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-LARGE--CAPS">
+<ANCHOR id="PANGO-SCALE-X-LARGE--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-X-LARGE--CAPS">
+<ANCHOR id="PANGO-SCALE-XX-LARGE--CAPS" href="pango/pango-Text-Attributes.html#PANGO-SCALE-XX-LARGE--CAPS">
+<ANCHOR id="pango-attr-rise-new" href="pango/pango-Text-Attributes.html#pango-attr-rise-new">
+<ANCHOR id="pango-attr-letter-spacing-new" href="pango/pango-Text-Attributes.html#pango-attr-letter-spacing-new">
+<ANCHOR id="pango-attr-fallback-new" href="pango/pango-Text-Attributes.html#pango-attr-fallback-new">
+<ANCHOR id="pango-attr-gravity-new" href="pango/pango-Text-Attributes.html#pango-attr-gravity-new">
+<ANCHOR id="pango-attr-gravity-hint-new" href="pango/pango-Text-Attributes.html#pango-attr-gravity-hint-new">
+<ANCHOR id="PangoColor" href="pango/pango-Text-Attributes.html#PangoColor">
+<ANCHOR id="PANGO-TYPE-COLOR--CAPS" href="pango/pango-Text-Attributes.html#PANGO-TYPE-COLOR--CAPS">
+<ANCHOR id="pango-color-parse" href="pango/pango-Text-Attributes.html#pango-color-parse">
+<ANCHOR id="pango-color-copy" href="pango/pango-Text-Attributes.html#pango-color-copy">
+<ANCHOR id="pango-color-free" href="pango/pango-Text-Attributes.html#pango-color-free">
+<ANCHOR id="pango-color-to-string" href="pango/pango-Text-Attributes.html#pango-color-to-string">
+<ANCHOR id="PangoAttrList" href="pango/pango-Text-Attributes.html#PangoAttrList">
+<ANCHOR id="PANGO-TYPE-ATTR-LIST--CAPS" href="pango/pango-Text-Attributes.html#PANGO-TYPE-ATTR-LIST--CAPS">
+<ANCHOR id="pango-attr-list-new" href="pango/pango-Text-Attributes.html#pango-attr-list-new">
+<ANCHOR id="pango-attr-list-ref" href="pango/pango-Text-Attributes.html#pango-attr-list-ref">
+<ANCHOR id="pango-attr-list-unref" href="pango/pango-Text-Attributes.html#pango-attr-list-unref">
+<ANCHOR id="pango-attr-list-copy" href="pango/pango-Text-Attributes.html#pango-attr-list-copy">
+<ANCHOR id="pango-attr-list-insert" href="pango/pango-Text-Attributes.html#pango-attr-list-insert">
+<ANCHOR id="pango-attr-list-insert-before" href="pango/pango-Text-Attributes.html#pango-attr-list-insert-before">
+<ANCHOR id="pango-attr-list-change" href="pango/pango-Text-Attributes.html#pango-attr-list-change">
+<ANCHOR id="pango-attr-list-splice" href="pango/pango-Text-Attributes.html#pango-attr-list-splice">
+<ANCHOR id="pango-attr-list-filter" href="pango/pango-Text-Attributes.html#pango-attr-list-filter">
+<ANCHOR id="PangoAttrFilterFunc" href="pango/pango-Text-Attributes.html#PangoAttrFilterFunc">
+<ANCHOR id="pango-attr-list-get-iterator" href="pango/pango-Text-Attributes.html#pango-attr-list-get-iterator">
+<ANCHOR id="PangoAttrIterator" href="pango/pango-Text-Attributes.html#PangoAttrIterator">
+<ANCHOR id="pango-attr-iterator-copy" href="pango/pango-Text-Attributes.html#pango-attr-iterator-copy">
+<ANCHOR id="pango-attr-iterator-next" href="pango/pango-Text-Attributes.html#pango-attr-iterator-next">
+<ANCHOR id="pango-attr-iterator-range" href="pango/pango-Text-Attributes.html#pango-attr-iterator-range">
+<ANCHOR id="pango-attr-iterator-get" href="pango/pango-Text-Attributes.html#pango-attr-iterator-get">
+<ANCHOR id="pango-attr-iterator-get-font" href="pango/pango-Text-Attributes.html#pango-attr-iterator-get-font">
+<ANCHOR id="pango-attr-iterator-get-attrs" href="pango/pango-Text-Attributes.html#pango-attr-iterator-get-attrs">
+<ANCHOR id="pango-attr-iterator-destroy" href="pango/pango-Text-Attributes.html#pango-attr-iterator-destroy">
+<ANCHOR id="pango-Tab-Stops" href="pango/pango-Tab-Stops.html">
+<ANCHOR id="pango-Tab-Stops.synopsis" href="pango/pango-Tab-Stops.html#pango-Tab-Stops.synopsis">
+<ANCHOR id="pango-Tab-Stops.description" href="pango/pango-Tab-Stops.html#pango-Tab-Stops.description">
+<ANCHOR id="pango-Tab-Stops.details" href="pango/pango-Tab-Stops.html#pango-Tab-Stops.details">
+<ANCHOR id="PangoTabArray" href="pango/pango-Tab-Stops.html#PangoTabArray">
+<ANCHOR id="PANGO-TYPE-TAB-ARRAY--CAPS" href="pango/pango-Tab-Stops.html#PANGO-TYPE-TAB-ARRAY--CAPS">
+<ANCHOR id="PangoTabAlign" href="pango/pango-Tab-Stops.html#PangoTabAlign">
+<ANCHOR id="PANGO-TYPE-TAB-ALIGN--CAPS" href="pango/pango-Tab-Stops.html#PANGO-TYPE-TAB-ALIGN--CAPS">
+<ANCHOR id="pango-tab-array-new" href="pango/pango-Tab-Stops.html#pango-tab-array-new">
+<ANCHOR id="pango-tab-array-new-with-positions" href="pango/pango-Tab-Stops.html#pango-tab-array-new-with-positions">
+<ANCHOR id="pango-tab-array-copy" href="pango/pango-Tab-Stops.html#pango-tab-array-copy">
+<ANCHOR id="pango-tab-array-free" href="pango/pango-Tab-Stops.html#pango-tab-array-free">
+<ANCHOR id="pango-tab-array-get-size" href="pango/pango-Tab-Stops.html#pango-tab-array-get-size">
+<ANCHOR id="pango-tab-array-resize" href="pango/pango-Tab-Stops.html#pango-tab-array-resize">
+<ANCHOR id="pango-tab-array-set-tab" href="pango/pango-Tab-Stops.html#pango-tab-array-set-tab">
+<ANCHOR id="pango-tab-array-get-tab" href="pango/pango-Tab-Stops.html#pango-tab-array-get-tab">
+<ANCHOR id="pango-tab-array-get-tabs" href="pango/pango-Tab-Stops.html#pango-tab-array-get-tabs">
+<ANCHOR id="pango-tab-array-get-positions-in-pixels" href="pango/pango-Tab-Stops.html#pango-tab-array-get-positions-in-pixels">
+<ANCHOR id="PangoMarkupFormat" href="pango/PangoMarkupFormat.html">
+<ANCHOR id="PangoMarkupFormatLanguage" href="pango/PangoMarkupFormat.html#PangoMarkupFormatLanguage">
+<ANCHOR id="pango-Layout-Objects" href="pango/pango-Layout-Objects.html">
+<ANCHOR id="pango-Layout-Objects.synopsis" href="pango/pango-Layout-Objects.html#pango-Layout-Objects.synopsis">
+<ANCHOR id="PangoLayout" href="pango/pango-Layout-Objects.html#PangoLayout">
+<ANCHOR id="pango-Layout-Objects.object-hierarchy" href="pango/pango-Layout-Objects.html#pango-Layout-Objects.object-hierarchy">
+<ANCHOR id="pango-Layout-Objects.description" href="pango/pango-Layout-Objects.html#pango-Layout-Objects.description">
+<ANCHOR id="pango-Layout-Objects.details" href="pango/pango-Layout-Objects.html#pango-Layout-Objects.details">
+<ANCHOR id="PangoLayout-struct" href="pango/pango-Layout-Objects.html#PangoLayout-struct">
+<ANCHOR id="PangoLayoutIter" href="pango/pango-Layout-Objects.html#PangoLayoutIter">
+<ANCHOR id="pango-layout-new" href="pango/pango-Layout-Objects.html#pango-layout-new">
+<ANCHOR id="pango-layout-copy" href="pango/pango-Layout-Objects.html#pango-layout-copy">
+<ANCHOR id="pango-layout-get-context" href="pango/pango-Layout-Objects.html#pango-layout-get-context">
+<ANCHOR id="pango-layout-context-changed" href="pango/pango-Layout-Objects.html#pango-layout-context-changed">
+<ANCHOR id="pango-layout-set-text" href="pango/pango-Layout-Objects.html#pango-layout-set-text">
+<ANCHOR id="pango-layout-get-text" href="pango/pango-Layout-Objects.html#pango-layout-get-text">
+<ANCHOR id="pango-layout-set-markup" href="pango/pango-Layout-Objects.html#pango-layout-set-markup">
+<ANCHOR id="pango-layout-set-markup-with-accel" href="pango/pango-Layout-Objects.html#pango-layout-set-markup-with-accel">
+<ANCHOR id="pango-layout-set-attributes" href="pango/pango-Layout-Objects.html#pango-layout-set-attributes">
+<ANCHOR id="pango-layout-get-attributes" href="pango/pango-Layout-Objects.html#pango-layout-get-attributes">
+<ANCHOR id="pango-layout-set-font-description" href="pango/pango-Layout-Objects.html#pango-layout-set-font-description">
+<ANCHOR id="pango-layout-get-font-description" href="pango/pango-Layout-Objects.html#pango-layout-get-font-description">
+<ANCHOR id="pango-layout-set-width" href="pango/pango-Layout-Objects.html#pango-layout-set-width">
+<ANCHOR id="pango-layout-get-width" href="pango/pango-Layout-Objects.html#pango-layout-get-width">
+<ANCHOR id="pango-layout-set-height" href="pango/pango-Layout-Objects.html#pango-layout-set-height">
+<ANCHOR id="pango-layout-get-height" href="pango/pango-Layout-Objects.html#pango-layout-get-height">
+<ANCHOR id="pango-layout-set-wrap" href="pango/pango-Layout-Objects.html#pango-layout-set-wrap">
+<ANCHOR id="pango-layout-get-wrap" href="pango/pango-Layout-Objects.html#pango-layout-get-wrap">
+<ANCHOR id="pango-layout-is-wrapped" href="pango/pango-Layout-Objects.html#pango-layout-is-wrapped">
+<ANCHOR id="PangoWrapMode" href="pango/pango-Layout-Objects.html#PangoWrapMode">
+<ANCHOR id="PANGO-TYPE-WRAP-MODE--CAPS" href="pango/pango-Layout-Objects.html#PANGO-TYPE-WRAP-MODE--CAPS">
+<ANCHOR id="pango-layout-set-ellipsize" href="pango/pango-Layout-Objects.html#pango-layout-set-ellipsize">
+<ANCHOR id="pango-layout-get-ellipsize" href="pango/pango-Layout-Objects.html#pango-layout-get-ellipsize">
+<ANCHOR id="pango-layout-is-ellipsized" href="pango/pango-Layout-Objects.html#pango-layout-is-ellipsized">
+<ANCHOR id="PangoEllipsizeMode" href="pango/pango-Layout-Objects.html#PangoEllipsizeMode">
+<ANCHOR id="PANGO-TYPE-ELLIPSIZE-MODE--CAPS" href="pango/pango-Layout-Objects.html#PANGO-TYPE-ELLIPSIZE-MODE--CAPS">
+<ANCHOR id="pango-layout-set-indent" href="pango/pango-Layout-Objects.html#pango-layout-set-indent">
+<ANCHOR id="pango-layout-get-indent" href="pango/pango-Layout-Objects.html#pango-layout-get-indent">
+<ANCHOR id="pango-layout-get-spacing" href="pango/pango-Layout-Objects.html#pango-layout-get-spacing">
+<ANCHOR id="pango-layout-set-spacing" href="pango/pango-Layout-Objects.html#pango-layout-set-spacing">
+<ANCHOR id="pango-layout-set-justify" href="pango/pango-Layout-Objects.html#pango-layout-set-justify">
+<ANCHOR id="pango-layout-get-justify" href="pango/pango-Layout-Objects.html#pango-layout-get-justify">
+<ANCHOR id="pango-layout-set-auto-dir" href="pango/pango-Layout-Objects.html#pango-layout-set-auto-dir">
+<ANCHOR id="pango-layout-get-auto-dir" href="pango/pango-Layout-Objects.html#pango-layout-get-auto-dir">
+<ANCHOR id="pango-layout-set-alignment" href="pango/pango-Layout-Objects.html#pango-layout-set-alignment">
+<ANCHOR id="pango-layout-get-alignment" href="pango/pango-Layout-Objects.html#pango-layout-get-alignment">
+<ANCHOR id="pango-layout-set-tabs" href="pango/pango-Layout-Objects.html#pango-layout-set-tabs">
+<ANCHOR id="pango-layout-get-tabs" href="pango/pango-Layout-Objects.html#pango-layout-get-tabs">
+<ANCHOR id="pango-layout-set-single-paragraph-mode" href="pango/pango-Layout-Objects.html#pango-layout-set-single-paragraph-mode">
+<ANCHOR id="pango-layout-get-single-paragraph-mode" href="pango/pango-Layout-Objects.html#pango-layout-get-single-paragraph-mode">
+<ANCHOR id="PangoAlignment" href="pango/pango-Layout-Objects.html#PangoAlignment">
+<ANCHOR id="PANGO-TYPE-ALIGNMENT--CAPS" href="pango/pango-Layout-Objects.html#PANGO-TYPE-ALIGNMENT--CAPS">
+<ANCHOR id="pango-layout-get-unknown-glyphs-count" href="pango/pango-Layout-Objects.html#pango-layout-get-unknown-glyphs-count">
+<ANCHOR id="pango-layout-get-log-attrs" href="pango/pango-Layout-Objects.html#pango-layout-get-log-attrs">
+<ANCHOR id="pango-layout-index-to-pos" href="pango/pango-Layout-Objects.html#pango-layout-index-to-pos">
+<ANCHOR id="pango-layout-index-to-line-x" href="pango/pango-Layout-Objects.html#pango-layout-index-to-line-x">
+<ANCHOR id="pango-layout-xy-to-index" href="pango/pango-Layout-Objects.html#pango-layout-xy-to-index">
+<ANCHOR id="pango-layout-get-cursor-pos" href="pango/pango-Layout-Objects.html#pango-layout-get-cursor-pos">
+<ANCHOR id="pango-layout-move-cursor-visually" href="pango/pango-Layout-Objects.html#pango-layout-move-cursor-visually">
+<ANCHOR id="pango-layout-get-extents" href="pango/pango-Layout-Objects.html#pango-layout-get-extents">
+<ANCHOR id="pango-layout-get-pixel-extents" href="pango/pango-Layout-Objects.html#pango-layout-get-pixel-extents">
+<ANCHOR id="pango-layout-get-size" href="pango/pango-Layout-Objects.html#pango-layout-get-size">
+<ANCHOR id="pango-layout-get-pixel-size" href="pango/pango-Layout-Objects.html#pango-layout-get-pixel-size">
+<ANCHOR id="pango-layout-get-baseline" href="pango/pango-Layout-Objects.html#pango-layout-get-baseline">
+<ANCHOR id="pango-layout-get-line-count" href="pango/pango-Layout-Objects.html#pango-layout-get-line-count">
+<ANCHOR id="pango-layout-get-line" href="pango/pango-Layout-Objects.html#pango-layout-get-line">
+<ANCHOR id="pango-layout-get-line-readonly" href="pango/pango-Layout-Objects.html#pango-layout-get-line-readonly">
+<ANCHOR id="pango-layout-get-lines" href="pango/pango-Layout-Objects.html#pango-layout-get-lines">
+<ANCHOR id="pango-layout-get-lines-readonly" href="pango/pango-Layout-Objects.html#pango-layout-get-lines-readonly">
+<ANCHOR id="pango-layout-get-iter" href="pango/pango-Layout-Objects.html#pango-layout-get-iter">
+<ANCHOR id="pango-layout-iter-copy" href="pango/pango-Layout-Objects.html#pango-layout-iter-copy">
+<ANCHOR id="pango-layout-iter-free" href="pango/pango-Layout-Objects.html#pango-layout-iter-free">
+<ANCHOR id="pango-layout-iter-next-run" href="pango/pango-Layout-Objects.html#pango-layout-iter-next-run">
+<ANCHOR id="pango-layout-iter-next-char" href="pango/pango-Layout-Objects.html#pango-layout-iter-next-char">
+<ANCHOR id="pango-layout-iter-next-cluster" href="pango/pango-Layout-Objects.html#pango-layout-iter-next-cluster">
+<ANCHOR id="pango-layout-iter-next-line" href="pango/pango-Layout-Objects.html#pango-layout-iter-next-line">
+<ANCHOR id="pango-layout-iter-at-last-line" href="pango/pango-Layout-Objects.html#pango-layout-iter-at-last-line">
+<ANCHOR id="pango-layout-iter-get-index" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-index">
+<ANCHOR id="pango-layout-iter-get-baseline" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-baseline">
+<ANCHOR id="pango-layout-iter-get-run" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-run">
+<ANCHOR id="pango-layout-iter-get-run-readonly" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-run-readonly">
+<ANCHOR id="pango-layout-iter-get-line" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-line">
+<ANCHOR id="pango-layout-iter-get-line-readonly" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-line-readonly">
+<ANCHOR id="pango-layout-iter-get-layout" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-layout">
+<ANCHOR id="pango-layout-iter-get-char-extents" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-char-extents">
+<ANCHOR id="pango-layout-iter-get-cluster-extents" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-cluster-extents">
+<ANCHOR id="pango-layout-iter-get-run-extents" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-run-extents">
+<ANCHOR id="pango-layout-iter-get-line-yrange" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-line-yrange">
+<ANCHOR id="pango-layout-iter-get-line-extents" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-line-extents">
+<ANCHOR id="pango-layout-iter-get-layout-extents" href="pango/pango-Layout-Objects.html#pango-layout-iter-get-layout-extents">
+<ANCHOR id="PangoLayoutLine" href="pango/pango-Layout-Objects.html#PangoLayoutLine">
+<ANCHOR id="PangoLayoutRun" href="pango/pango-Layout-Objects.html#PangoLayoutRun">
+<ANCHOR id="pango-layout-line-ref" href="pango/pango-Layout-Objects.html#pango-layout-line-ref">
+<ANCHOR id="pango-layout-line-unref" href="pango/pango-Layout-Objects.html#pango-layout-line-unref">
+<ANCHOR id="pango-layout-line-get-extents" href="pango/pango-Layout-Objects.html#pango-layout-line-get-extents">
+<ANCHOR id="pango-layout-line-get-pixel-extents" href="pango/pango-Layout-Objects.html#pango-layout-line-get-pixel-extents">
+<ANCHOR id="pango-layout-line-index-to-x" href="pango/pango-Layout-Objects.html#pango-layout-line-index-to-x">
+<ANCHOR id="pango-layout-line-x-to-index" href="pango/pango-Layout-Objects.html#pango-layout-line-x-to-index">
+<ANCHOR id="pango-layout-line-get-x-ranges" href="pango/pango-Layout-Objects.html#pango-layout-line-get-x-ranges">
+<ANCHOR id="pango-Scripts-and-Languages" href="pango/pango-Scripts-and-Languages.html">
+<ANCHOR id="pango-Scripts-and-Languages.synopsis" href="pango/pango-Scripts-and-Languages.html#pango-Scripts-and-Languages.synopsis">
+<ANCHOR id="pango-Scripts-and-Languages.description" href="pango/pango-Scripts-and-Languages.html#pango-Scripts-and-Languages.description">
+<ANCHOR id="pango-Scripts-and-Languages.details" href="pango/pango-Scripts-and-Languages.html#pango-Scripts-and-Languages.details">
+<ANCHOR id="PangoScript" href="pango/pango-Scripts-and-Languages.html#PangoScript">
+<ANCHOR id="PANGO-TYPE-SCRIPT--CAPS" href="pango/pango-Scripts-and-Languages.html#PANGO-TYPE-SCRIPT--CAPS">
+<ANCHOR id="PangoScriptIter" href="pango/pango-Scripts-and-Languages.html#PangoScriptIter">
+<ANCHOR id="pango-script-for-unichar" href="pango/pango-Scripts-and-Languages.html#pango-script-for-unichar">
+<ANCHOR id="pango-script-get-sample-language" href="pango/pango-Scripts-and-Languages.html#pango-script-get-sample-language">
+<ANCHOR id="pango-script-iter-new" href="pango/pango-Scripts-and-Languages.html#pango-script-iter-new">
+<ANCHOR id="pango-script-iter-get-range" href="pango/pango-Scripts-and-Languages.html#pango-script-iter-get-range">
+<ANCHOR id="pango-script-iter-next" href="pango/pango-Scripts-and-Languages.html#pango-script-iter-next">
+<ANCHOR id="pango-script-iter-free" href="pango/pango-Scripts-and-Languages.html#pango-script-iter-free">
+<ANCHOR id="PangoLanguage" href="pango/pango-Scripts-and-Languages.html#PangoLanguage">
+<ANCHOR id="PANGO-TYPE-LANGUAGE--CAPS" href="pango/pango-Scripts-and-Languages.html#PANGO-TYPE-LANGUAGE--CAPS">
+<ANCHOR id="pango-language-from-string" href="pango/pango-Scripts-and-Languages.html#pango-language-from-string">
+<ANCHOR id="pango-language-to-string" href="pango/pango-Scripts-and-Languages.html#pango-language-to-string">
+<ANCHOR id="pango-language-matches" href="pango/pango-Scripts-and-Languages.html#pango-language-matches">
+<ANCHOR id="pango-language-includes-script" href="pango/pango-Scripts-and-Languages.html#pango-language-includes-script">
+<ANCHOR id="pango-language-get-scripts" href="pango/pango-Scripts-and-Languages.html#pango-language-get-scripts">
+<ANCHOR id="pango-language-get-default" href="pango/pango-Scripts-and-Languages.html#pango-language-get-default">
+<ANCHOR id="pango-language-get-sample-string" href="pango/pango-Scripts-and-Languages.html#pango-language-get-sample-string">
+<ANCHOR id="pango-Bidirectional-Text" href="pango/pango-Bidirectional-Text.html">
+<ANCHOR id="pango-Bidirectional-Text.synopsis" href="pango/pango-Bidirectional-Text.html#pango-Bidirectional-Text.synopsis">
+<ANCHOR id="pango-Bidirectional-Text.description" href="pango/pango-Bidirectional-Text.html#pango-Bidirectional-Text.description">
+<ANCHOR id="pango-Bidirectional-Text.details" href="pango/pango-Bidirectional-Text.html#pango-Bidirectional-Text.details">
+<ANCHOR id="PangoDirection" href="pango/pango-Bidirectional-Text.html#PangoDirection">
+<ANCHOR id="pango-unichar-direction" href="pango/pango-Bidirectional-Text.html#pango-unichar-direction">
+<ANCHOR id="pango-find-base-dir" href="pango/pango-Bidirectional-Text.html#pango-find-base-dir">
+<ANCHOR id="pango-get-mirror-char" href="pango/pango-Bidirectional-Text.html#pango-get-mirror-char">
+<ANCHOR id="PangoBidiType" href="pango/pango-Bidirectional-Text.html#PangoBidiType">
+<ANCHOR id="pango-bidi-type-for-unichar" href="pango/pango-Bidirectional-Text.html#pango-bidi-type-for-unichar">
+<ANCHOR id="pango-Bidirectional-Text.see-also" href="pango/pango-Bidirectional-Text.html#pango-Bidirectional-Text.see-also">
+<ANCHOR id="pango-Vertical-Text" href="pango/pango-Vertical-Text.html">
+<ANCHOR id="pango-Vertical-Text.synopsis" href="pango/pango-Vertical-Text.html#pango-Vertical-Text.synopsis">
+<ANCHOR id="pango-Vertical-Text.description" href="pango/pango-Vertical-Text.html#pango-Vertical-Text.description">
+<ANCHOR id="pango-Vertical-Text.details" href="pango/pango-Vertical-Text.html#pango-Vertical-Text.details">
+<ANCHOR id="PangoGravity" href="pango/pango-Vertical-Text.html#PangoGravity">
+<ANCHOR id="PangoGravityHint" href="pango/pango-Vertical-Text.html#PangoGravityHint">
+<ANCHOR id="PANGO-GRAVITY-IS-VERTICAL--CAPS" href="pango/pango-Vertical-Text.html#PANGO-GRAVITY-IS-VERTICAL--CAPS">
+<ANCHOR id="pango-gravity-get-for-matrix" href="pango/pango-Vertical-Text.html#pango-gravity-get-for-matrix">
+<ANCHOR id="pango-gravity-get-for-script" href="pango/pango-Vertical-Text.html#pango-gravity-get-for-script">
+<ANCHOR id="pango-gravity-get-for-script-and-width" href="pango/pango-Vertical-Text.html#pango-gravity-get-for-script-and-width">
+<ANCHOR id="pango-gravity-to-rotation" href="pango/pango-Vertical-Text.html#pango-gravity-to-rotation">
+<ANCHOR id="pango-Vertical-Text.see-also" href="pango/pango-Vertical-Text.html#pango-Vertical-Text.see-also">
+<ANCHOR id="pango-Win32-Fonts-and-Rendering" href="pango/pango-Win32-Fonts-and-Rendering.html">
+<ANCHOR id="pango-Win32-Fonts-and-Rendering.synopsis" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-Win32-Fonts-and-Rendering.synopsis">
+<ANCHOR id="pango-Win32-Fonts-and-Rendering.description" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-Win32-Fonts-and-Rendering.description">
+<ANCHOR id="pango-Win32-Fonts-and-Rendering.details" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-Win32-Fonts-and-Rendering.details">
+<ANCHOR id="PANGO-RENDER-TYPE-WIN32--CAPS" href="pango/pango-Win32-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-WIN32--CAPS">
+<ANCHOR id="pango-win32-get-context" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-get-context">
+<ANCHOR id="pango-win32-render" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-render">
+<ANCHOR id="pango-win32-render-transformed" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-render-transformed">
+<ANCHOR id="pango-win32-render-layout-line" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout-line">
+<ANCHOR id="pango-win32-render-layout" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout">
+<ANCHOR id="pango-win32-get-unknown-glyph" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-get-unknown-glyph">
+<ANCHOR id="pango-win32-font-get-glyph-index" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-glyph-index">
+<ANCHOR id="pango-win32-font-select-font" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-select-font">
+<ANCHOR id="pango-win32-font-done-font" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font">
+<ANCHOR id="pango-win32-font-get-metrics-factor" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-metrics-factor">
+<ANCHOR id="pango-win32-get-debug-flag" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-get-debug-flag">
+<ANCHOR id="pango-win32-get-dc" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-get-dc">
+<ANCHOR id="PangoWin32FontCache" href="pango/pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache">
+<ANCHOR id="pango-win32-font-cache-new" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-new">
+<ANCHOR id="pango-win32-font-cache-free" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-free">
+<ANCHOR id="pango-win32-font-cache-load" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-load">
+<ANCHOR id="pango-win32-font-cache-loadw" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-loadw">
+<ANCHOR id="pango-win32-font-cache-unload" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload">
+<ANCHOR id="pango-win32-font-map-for-display" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-for-display">
+<ANCHOR id="pango-win32-shutdown-display" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-shutdown-display">
+<ANCHOR id="pango-win32-font-map-get-font-cache" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-get-font-cache">
+<ANCHOR id="pango-win32-font-logfont" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfont">
+<ANCHOR id="pango-win32-font-logfontw" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw">
+<ANCHOR id="pango-win32-font-description-from-logfont" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfont">
+<ANCHOR id="pango-win32-font-description-from-logfontw" href="pango/pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfontw">
+<ANCHOR id="pango-FreeType-Fonts-and-Rendering" href="pango/pango-FreeType-Fonts-and-Rendering.html">
+<ANCHOR id="pango-FreeType-Fonts-and-Rendering.synopsis" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-FreeType-Fonts-and-Rendering.synopsis">
+<ANCHOR id="PangoFT2FontMap" href="pango/pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">
+<ANCHOR id="pango-FreeType-Fonts-and-Rendering.object-hierarchy" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-FreeType-Fonts-and-Rendering.object-hierarchy">
+<ANCHOR id="pango-FreeType-Fonts-and-Rendering.description" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-FreeType-Fonts-and-Rendering.description">
+<ANCHOR id="pango-FreeType-Fonts-and-Rendering.details" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-FreeType-Fonts-and-Rendering.details">
+<ANCHOR id="PangoFT2FontMap-struct" href="pango/pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap-struct">
+<ANCHOR id="PANGO-RENDER-TYPE-FT2--CAPS" href="pango/pango-FreeType-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-FT2--CAPS">
+<ANCHOR id="pango-ft2-font-map-new" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new">
+<ANCHOR id="pango-ft2-font-map-set-resolution" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-resolution">
+<ANCHOR id="pango-ft2-font-map-create-context" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context">
+<ANCHOR id="PangoFT2SubstituteFunc" href="pango/pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc">
+<ANCHOR id="pango-ft2-font-map-set-default-substitute" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute">
+<ANCHOR id="pango-ft2-font-map-substitute-changed" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-substitute-changed">
+<ANCHOR id="pango-ft2-get-context" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-context">
+<ANCHOR id="pango-ft2-render" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render">
+<ANCHOR id="pango-ft2-render-transformed" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-transformed">
+<ANCHOR id="pango-ft2-render-layout-line" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line">
+<ANCHOR id="pango-ft2-render-layout-line-subpixel" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line-subpixel">
+<ANCHOR id="pango-ft2-render-layout" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout">
+<ANCHOR id="pango-ft2-render-layout-subpixel" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-subpixel">
+<ANCHOR id="pango-ft2-get-unknown-glyph" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-unknown-glyph">
+<ANCHOR id="pango-ft2-font-get-kerning" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-kerning">
+<ANCHOR id="pango-ft2-font-get-face" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-face">
+<ANCHOR id="pango-ft2-font-get-coverage" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-coverage">
+<ANCHOR id="pango-ft2-font-map-for-display" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display">
+<ANCHOR id="pango-ft2-shutdown-display" href="pango/pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering" href="pango/pango-Xft-Fonts-and-Rendering.html">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering.synopsis" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-Xft-Fonts-and-Rendering.synopsis">
+<ANCHOR id="PangoXftFont" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftFont">
+<ANCHOR id="PangoXftFontMap" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap">
+<ANCHOR id="PangoXftRenderer" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering.object-hierarchy" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-Xft-Fonts-and-Rendering.object-hierarchy">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering.properties" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-Xft-Fonts-and-Rendering.properties">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering.description" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-Xft-Fonts-and-Rendering.description">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering.details" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-Xft-Fonts-and-Rendering.details">
+<ANCHOR id="PangoXftFont-struct" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftFont-struct">
+<ANCHOR id="PangoXftFontMap-struct" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap-struct">
+<ANCHOR id="PANGO-RENDER-TYPE-XFT--CAPS" href="pango/pango-Xft-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-XFT--CAPS">
+<ANCHOR id="pango-xft-get-context" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context">
+<ANCHOR id="pango-xft-get-font-map" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map">
+<ANCHOR id="pango-xft-set-default-substitute" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute">
+<ANCHOR id="PangoXftSubstituteFunc" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc">
+<ANCHOR id="pango-xft-substitute-changed" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed">
+<ANCHOR id="pango-xft-shutdown-display" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-shutdown-display">
+<ANCHOR id="pango-xft-font-get-font" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-font">
+<ANCHOR id="pango-xft-font-get-display" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-display">
+<ANCHOR id="pango-xft-font-has-char" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char">
+<ANCHOR id="pango-xft-font-lock-face" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face">
+<ANCHOR id="pango-xft-font-unlock-face" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face">
+<ANCHOR id="pango-xft-font-get-glyph" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph">
+<ANCHOR id="pango-xft-font-get-unknown-glyph" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-unknown-glyph">
+<ANCHOR id="PangoXftRenderer-struct" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer-struct">
+<ANCHOR id="PangoXftRendererClass" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass">
+<ANCHOR id="pango-xft-renderer-new" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-new">
+<ANCHOR id="pango-xft-renderer-set-draw" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw">
+<ANCHOR id="pango-xft-renderer-set-default-color" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-default-color">
+<ANCHOR id="pango-xft-render" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-render">
+<ANCHOR id="pango-xft-picture-render" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-picture-render">
+<ANCHOR id="pango-xft-render-transformed" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-render-transformed">
+<ANCHOR id="pango-xft-render-layout-line" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout-line">
+<ANCHOR id="pango-xft-render-layout" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout">
+<ANCHOR id="pango-Xft-Fonts-and-Rendering.property-details" href="pango/pango-Xft-Fonts-and-Rendering.html#pango-Xft-Fonts-and-Rendering.property-details">
+<ANCHOR id="PangoXftRenderer--display" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--display">
+<ANCHOR id="PangoXftRenderer--screen" href="pango/pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--screen">
+<ANCHOR id="pango-Cairo-Rendering" href="pango/pango-Cairo-Rendering.html">
+<ANCHOR id="pango-Cairo-Rendering.synopsis" href="pango/pango-Cairo-Rendering.html#pango-Cairo-Rendering.synopsis">
+<ANCHOR id="PangoCairoFont" href="pango/pango-Cairo-Rendering.html#PangoCairoFont">
+<ANCHOR id="PangoCairoFontMap" href="pango/pango-Cairo-Rendering.html#PangoCairoFontMap">
+<ANCHOR id="pango-Cairo-Rendering.object-hierarchy" href="pango/pango-Cairo-Rendering.html#pango-Cairo-Rendering.object-hierarchy">
+<ANCHOR id="pango-Cairo-Rendering.prerequisites" href="pango/pango-Cairo-Rendering.html#pango-Cairo-Rendering.prerequisites">
+<ANCHOR id="pango-Cairo-Rendering.description" href="pango/pango-Cairo-Rendering.html#pango-Cairo-Rendering.description">
+<ANCHOR id="pango-Cairo-Rendering.details" href="pango/pango-Cairo-Rendering.html#pango-Cairo-Rendering.details">
+<ANCHOR id="PangoCairoFont-struct" href="pango/pango-Cairo-Rendering.html#PangoCairoFont-struct">
+<ANCHOR id="PangoCairoFontMap-struct" href="pango/pango-Cairo-Rendering.html#PangoCairoFontMap-struct">
+<ANCHOR id="pango-cairo-font-map-get-default" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-get-default">
+<ANCHOR id="pango-cairo-font-map-set-default" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-set-default">
+<ANCHOR id="pango-cairo-font-map-new" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-new">
+<ANCHOR id="pango-cairo-font-map-new-for-font-type" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-new-for-font-type">
+<ANCHOR id="pango-cairo-font-map-get-font-type" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-get-font-type">
+<ANCHOR id="pango-cairo-font-map-set-resolution" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution">
+<ANCHOR id="pango-cairo-font-map-get-resolution" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-get-resolution">
+<ANCHOR id="pango-cairo-font-map-create-context" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-map-create-context">
+<ANCHOR id="pango-cairo-font-get-scaled-font" href="pango/pango-Cairo-Rendering.html#pango-cairo-font-get-scaled-font">
+<ANCHOR id="pango-cairo-context-set-resolution" href="pango/pango-Cairo-Rendering.html#pango-cairo-context-set-resolution">
+<ANCHOR id="pango-cairo-context-get-resolution" href="pango/pango-Cairo-Rendering.html#pango-cairo-context-get-resolution">
+<ANCHOR id="pango-cairo-context-set-font-options" href="pango/pango-Cairo-Rendering.html#pango-cairo-context-set-font-options">
+<ANCHOR id="pango-cairo-context-get-font-options" href="pango/pango-Cairo-Rendering.html#pango-cairo-context-get-font-options">
+<ANCHOR id="PangoCairoShapeRendererFunc" href="pango/pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc">
+<ANCHOR id="pango-cairo-context-set-shape-renderer" href="pango/pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer">
+<ANCHOR id="pango-cairo-context-get-shape-renderer" href="pango/pango-Cairo-Rendering.html#pango-cairo-context-get-shape-renderer">
+<ANCHOR id="pango-cairo-create-context" href="pango/pango-Cairo-Rendering.html#pango-cairo-create-context">
+<ANCHOR id="pango-cairo-update-context" href="pango/pango-Cairo-Rendering.html#pango-cairo-update-context">
+<ANCHOR id="pango-cairo-create-layout" href="pango/pango-Cairo-Rendering.html#pango-cairo-create-layout">
+<ANCHOR id="pango-cairo-update-layout" href="pango/pango-Cairo-Rendering.html#pango-cairo-update-layout">
+<ANCHOR id="pango-cairo-show-glyph-string" href="pango/pango-Cairo-Rendering.html#pango-cairo-show-glyph-string">
+<ANCHOR id="pango-cairo-show-glyph-item" href="pango/pango-Cairo-Rendering.html#pango-cairo-show-glyph-item">
+<ANCHOR id="pango-cairo-show-layout-line" href="pango/pango-Cairo-Rendering.html#pango-cairo-show-layout-line">
+<ANCHOR id="pango-cairo-show-layout" href="pango/pango-Cairo-Rendering.html#pango-cairo-show-layout">
+<ANCHOR id="pango-cairo-show-error-underline" href="pango/pango-Cairo-Rendering.html#pango-cairo-show-error-underline">
+<ANCHOR id="pango-cairo-glyph-string-path" href="pango/pango-Cairo-Rendering.html#pango-cairo-glyph-string-path">
+<ANCHOR id="pango-cairo-layout-line-path" href="pango/pango-Cairo-Rendering.html#pango-cairo-layout-line-path">
+<ANCHOR id="pango-cairo-layout-path" href="pango/pango-Cairo-Rendering.html#pango-cairo-layout-path">
+<ANCHOR id="pango-cairo-error-underline-path" href="pango/pango-Cairo-Rendering.html#pango-cairo-error-underline-path">
+<ANCHOR id="pango-ATSUI-Fonts" href="pango/pango-ATSUI-Fonts.html">
+<ANCHOR id="pango-ATSUI-Fonts.synopsis" href="pango/pango-ATSUI-Fonts.html#pango-ATSUI-Fonts.synopsis">
+<ANCHOR id="pango-ATSUI-Fonts.description" href="pango/pango-ATSUI-Fonts.html#pango-ATSUI-Fonts.description">
+<ANCHOR id="pango-ATSUI-Fonts.details" href="pango/pango-ATSUI-Fonts.html#pango-ATSUI-Fonts.details">
+<ANCHOR id="PANGO-RENDER-TYPE-ATSUI--CAPS" href="pango/pango-ATSUI-Fonts.html#PANGO-RENDER-TYPE-ATSUI--CAPS">
+<ANCHOR id="pango-atsui-font-get-cgfont" href="pango/pango-ATSUI-Fonts.html#pango-atsui-font-get-cgfont">
+<ANCHOR id="pango-X-Fonts-and-Rendering" href="pango/pango-X-Fonts-and-Rendering.html">
+<ANCHOR id="pango-X-Fonts-and-Rendering.synopsis" href="pango/pango-X-Fonts-and-Rendering.html#pango-X-Fonts-and-Rendering.synopsis">
+<ANCHOR id="pango-X-Fonts-and-Rendering.description" href="pango/pango-X-Fonts-and-Rendering.html#pango-X-Fonts-and-Rendering.description">
+<ANCHOR id="pango-X-Fonts-and-Rendering.details" href="pango/pango-X-Fonts-and-Rendering.html#pango-X-Fonts-and-Rendering.details">
+<ANCHOR id="PANGO-RENDER-TYPE-X--CAPS" href="pango/pango-X-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-X--CAPS">
+<ANCHOR id="pango-x-get-context" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-get-context">
+<ANCHOR id="pango-x-context-set-funcs" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-context-set-funcs">
+<ANCHOR id="PangoGetGCFunc" href="pango/pango-X-Fonts-and-Rendering.html#PangoGetGCFunc">
+<ANCHOR id="PangoFreeGCFunc" href="pango/pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc">
+<ANCHOR id="pango-x-render" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-render">
+<ANCHOR id="pango-x-render-layout-line" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-render-layout-line">
+<ANCHOR id="pango-x-render-layout" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-render-layout">
+<ANCHOR id="PangoXSubfont" href="pango/pango-X-Fonts-and-Rendering.html#PangoXSubfont">
+<ANCHOR id="PANGO-X-MAKE-GLYPH--CAPS" href="pango/pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS">
+<ANCHOR id="PANGO-X-GLYPH-SUBFONT--CAPS" href="pango/pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-SUBFONT--CAPS">
+<ANCHOR id="PANGO-X-GLYPH-INDEX--CAPS" href="pango/pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-INDEX--CAPS">
+<ANCHOR id="pango-x-load-font" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-load-font">
+<ANCHOR id="pango-x-get-unknown-glyph" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-get-unknown-glyph">
+<ANCHOR id="pango-x-has-glyph" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-has-glyph">
+<ANCHOR id="pango-x-list-subfonts" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-list-subfonts">
+<ANCHOR id="pango-x-font-map-for-display" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display">
+<ANCHOR id="pango-x-shutdown-display" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display">
+<ANCHOR id="pango-x-font-map-get-font-cache" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-map-get-font-cache">
+<ANCHOR id="pango-x-font-subfont-xlfd" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-subfont-xlfd">
+<ANCHOR id="pango-x-find-first-subfont" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-find-first-subfont">
+<ANCHOR id="pango-x-font-get-unknown-glyph" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-get-unknown-glyph">
+<ANCHOR id="pango-x-apply-ligatures" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-apply-ligatures">
+<ANCHOR id="pango-x-fallback-shape" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-fallback-shape">
+<ANCHOR id="PangoXFontCache" href="pango/pango-X-Fonts-and-Rendering.html#PangoXFontCache">
+<ANCHOR id="pango-x-font-cache-new" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-cache-new">
+<ANCHOR id="pango-x-font-cache-free" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free">
+<ANCHOR id="pango-x-font-cache-load" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load">
+<ANCHOR id="pango-x-font-cache-unload" href="pango/pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload">
+<ANCHOR id="PangoRenderer" href="pango/PangoRenderer.html">
+<ANCHOR id="PangoRenderer.synopsis" href="pango/PangoRenderer.html#PangoRenderer.synopsis">
+<ANCHOR id="PangoRenderer.object-hierarchy" href="pango/PangoRenderer.html#PangoRenderer.object-hierarchy">
+<ANCHOR id="PangoRenderer.description" href="pango/PangoRenderer.html#PangoRenderer.description">
+<ANCHOR id="PangoRenderer.details" href="pango/PangoRenderer.html#PangoRenderer.details">
+<ANCHOR id="PangoRenderer-struct" href="pango/PangoRenderer.html#PangoRenderer-struct">
+<ANCHOR id="PangoRenderPart" href="pango/PangoRenderer.html#PangoRenderPart">
+<ANCHOR id="PANGO-TYPE-RENDER-PART--CAPS" href="pango/PangoRenderer.html#PANGO-TYPE-RENDER-PART--CAPS">
+<ANCHOR id="PangoRendererClass" href="pango/PangoRenderer.html#PangoRendererClass">
+<ANCHOR id="pango-renderer-draw-layout" href="pango/PangoRenderer.html#pango-renderer-draw-layout">
+<ANCHOR id="pango-renderer-draw-layout-line" href="pango/PangoRenderer.html#pango-renderer-draw-layout-line">
+<ANCHOR id="pango-renderer-draw-glyphs" href="pango/PangoRenderer.html#pango-renderer-draw-glyphs">
+<ANCHOR id="pango-renderer-draw-glyph-item" href="pango/PangoRenderer.html#pango-renderer-draw-glyph-item">
+<ANCHOR id="pango-renderer-draw-rectangle" href="pango/PangoRenderer.html#pango-renderer-draw-rectangle">
+<ANCHOR id="pango-renderer-draw-error-underline" href="pango/PangoRenderer.html#pango-renderer-draw-error-underline">
+<ANCHOR id="pango-renderer-draw-trapezoid" href="pango/PangoRenderer.html#pango-renderer-draw-trapezoid">
+<ANCHOR id="pango-renderer-draw-glyph" href="pango/PangoRenderer.html#pango-renderer-draw-glyph">
+<ANCHOR id="pango-renderer-activate" href="pango/PangoRenderer.html#pango-renderer-activate">
+<ANCHOR id="pango-renderer-deactivate" href="pango/PangoRenderer.html#pango-renderer-deactivate">
+<ANCHOR id="pango-renderer-part-changed" href="pango/PangoRenderer.html#pango-renderer-part-changed">
+<ANCHOR id="pango-renderer-set-color" href="pango/PangoRenderer.html#pango-renderer-set-color">
+<ANCHOR id="pango-renderer-get-color" href="pango/PangoRenderer.html#pango-renderer-get-color">
+<ANCHOR id="pango-renderer-set-matrix" href="pango/PangoRenderer.html#pango-renderer-set-matrix">
+<ANCHOR id="pango-renderer-get-matrix" href="pango/PangoRenderer.html#pango-renderer-get-matrix">
+<ANCHOR id="pango-renderer-get-layout" href="pango/PangoRenderer.html#pango-renderer-get-layout">
+<ANCHOR id="pango-renderer-get-layout-line" href="pango/PangoRenderer.html#pango-renderer-get-layout-line">
+<ANCHOR id="PangoFcFontMap" href="pango/PangoFcFontMap.html">
+<ANCHOR id="PangoFcFontMap.synopsis" href="pango/PangoFcFontMap.html#PangoFcFontMap.synopsis">
+<ANCHOR id="PangoFcFontMap.object-hierarchy" href="pango/PangoFcFontMap.html#PangoFcFontMap.object-hierarchy">
+<ANCHOR id="PangoFcFontMap.description" href="pango/PangoFcFontMap.html#PangoFcFontMap.description">
+<ANCHOR id="PangoFcFontMap.details" href="pango/PangoFcFontMap.html#PangoFcFontMap.details">
+<ANCHOR id="PangoFcFontMap-struct" href="pango/PangoFcFontMap.html#PangoFcFontMap-struct">
+<ANCHOR id="PangoFcFontMapClass" href="pango/PangoFcFontMap.html#PangoFcFontMapClass">
+<ANCHOR id="pango-fc-font-map-create-context" href="pango/PangoFcFontMap.html#pango-fc-font-map-create-context">
+<ANCHOR id="PangoFcDecoderFindFunc" href="pango/PangoFcFontMap.html#PangoFcDecoderFindFunc">
+<ANCHOR id="pango-fc-font-map-add-decoder-find-func" href="pango/PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func">
+<ANCHOR id="pango-fc-font-map-find-decoder" href="pango/PangoFcFontMap.html#pango-fc-font-map-find-decoder">
+<ANCHOR id="pango-fc-font-map-cache-clear" href="pango/PangoFcFontMap.html#pango-fc-font-map-cache-clear">
+<ANCHOR id="pango-fc-font-map-shutdown" href="pango/PangoFcFontMap.html#pango-fc-font-map-shutdown">
+<ANCHOR id="pango-fc-font-description-from-pattern" href="pango/PangoFcFontMap.html#pango-fc-font-description-from-pattern">
+<ANCHOR id="PANGO-FC-GRAVITY--CAPS" href="pango/PangoFcFontMap.html#PANGO-FC-GRAVITY--CAPS">
+<ANCHOR id="PANGO-FC-VERSION--CAPS" href="pango/PangoFcFontMap.html#PANGO-FC-VERSION--CAPS">
+<ANCHOR id="PANGO-FC-PRGNAME--CAPS" href="pango/PangoFcFontMap.html#PANGO-FC-PRGNAME--CAPS">
+<ANCHOR id="PangoFcFontsetKey" href="pango/PangoFcFontMap.html#PangoFcFontsetKey">
+<ANCHOR id="pango-fc-fontset-key-get-context-key" href="pango/PangoFcFontMap.html#pango-fc-fontset-key-get-context-key">
+<ANCHOR id="pango-fc-fontset-key-get-description" href="pango/PangoFcFontMap.html#pango-fc-fontset-key-get-description">
+<ANCHOR id="pango-fc-fontset-key-get-language" href="pango/PangoFcFontMap.html#pango-fc-fontset-key-get-language">
+<ANCHOR id="pango-fc-fontset-key-get-matrix" href="pango/PangoFcFontMap.html#pango-fc-fontset-key-get-matrix">
+<ANCHOR id="pango-fc-fontset-key-get-absolute-size" href="pango/PangoFcFontMap.html#pango-fc-fontset-key-get-absolute-size">
+<ANCHOR id="pango-fc-fontset-key-get-resolution" href="pango/PangoFcFontMap.html#pango-fc-fontset-key-get-resolution">
+<ANCHOR id="PangoFcFontKey" href="pango/PangoFcFontMap.html#PangoFcFontKey">
+<ANCHOR id="pango-fc-font-key-get-context-key" href="pango/PangoFcFontMap.html#pango-fc-font-key-get-context-key">
+<ANCHOR id="pango-fc-font-key-get-matrix" href="pango/PangoFcFontMap.html#pango-fc-font-key-get-matrix">
+<ANCHOR id="pango-fc-font-key-get-pattern" href="pango/PangoFcFontMap.html#pango-fc-font-key-get-pattern">
+<ANCHOR id="PangoFcFontMap.see-also" href="pango/PangoFcFontMap.html#PangoFcFontMap.see-also">
+<ANCHOR id="PangoFcFont" href="pango/PangoFcFont.html">
+<ANCHOR id="PangoFcFont.synopsis" href="pango/PangoFcFont.html#PangoFcFont.synopsis">
+<ANCHOR id="PangoFcFont.object-hierarchy" href="pango/PangoFcFont.html#PangoFcFont.object-hierarchy">
+<ANCHOR id="PangoFcFont.properties" href="pango/PangoFcFont.html#PangoFcFont.properties">
+<ANCHOR id="PangoFcFont.description" href="pango/PangoFcFont.html#PangoFcFont.description">
+<ANCHOR id="PangoFcFont.details" href="pango/PangoFcFont.html#PangoFcFont.details">
+<ANCHOR id="PangoFcFont-struct" href="pango/PangoFcFont.html#PangoFcFont-struct">
+<ANCHOR id="PangoFcFontClass" href="pango/PangoFcFont.html#PangoFcFontClass">
+<ANCHOR id="PANGO-RENDER-TYPE-FC--CAPS" href="pango/PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS">
+<ANCHOR id="pango-fc-font-lock-face" href="pango/PangoFcFont.html#pango-fc-font-lock-face">
+<ANCHOR id="pango-fc-font-unlock-face" href="pango/PangoFcFont.html#pango-fc-font-unlock-face">
+<ANCHOR id="pango-fc-font-has-char" href="pango/PangoFcFont.html#pango-fc-font-has-char">
+<ANCHOR id="pango-fc-font-get-glyph" href="pango/PangoFcFont.html#pango-fc-font-get-glyph">
+<ANCHOR id="pango-fc-font-get-unknown-glyph" href="pango/PangoFcFont.html#pango-fc-font-get-unknown-glyph">
+<ANCHOR id="pango-fc-font-kern-glyphs" href="pango/PangoFcFont.html#pango-fc-font-kern-glyphs">
+<ANCHOR id="PangoFcFont.property-details" href="pango/PangoFcFont.html#PangoFcFont.property-details">
+<ANCHOR id="PangoFcFont--fontmap" href="pango/PangoFcFont.html#PangoFcFont--fontmap">
+<ANCHOR id="PangoFcFont--pattern" href="pango/PangoFcFont.html#PangoFcFont--pattern">
+<ANCHOR id="PangoFcFont.see-also" href="pango/PangoFcFont.html#PangoFcFont.see-also">
+<ANCHOR id="PangoFcDecoder" href="pango/PangoFcDecoder.html">
+<ANCHOR id="PangoFcDecoder.synopsis" href="pango/PangoFcDecoder.html#PangoFcDecoder.synopsis">
+<ANCHOR id="PangoFcDecoder.object-hierarchy" href="pango/PangoFcDecoder.html#PangoFcDecoder.object-hierarchy">
+<ANCHOR id="PangoFcDecoder.description" href="pango/PangoFcDecoder.html#PangoFcDecoder.description">
+<ANCHOR id="PangoFcDecoder.details" href="pango/PangoFcDecoder.html#PangoFcDecoder.details">
+<ANCHOR id="PangoFcDecoder-struct" href="pango/PangoFcDecoder.html#PangoFcDecoder-struct">
+<ANCHOR id="PangoFcDecoderClass" href="pango/PangoFcDecoder.html#PangoFcDecoderClass">
+<ANCHOR id="pango-fc-decoder-get-charset" href="pango/PangoFcDecoder.html#pango-fc-decoder-get-charset">
+<ANCHOR id="pango-fc-decoder-get-glyph" href="pango/PangoFcDecoder.html#pango-fc-decoder-get-glyph">
+<ANCHOR id="pango-OpenType-Font-Handling" href="pango/pango-OpenType-Font-Handling.html">
+<ANCHOR id="pango-OpenType-Font-Handling.stability-level" href="pango/pango-OpenType-Font-Handling.html#pango-OpenType-Font-Handling.stability-level">
+<ANCHOR id="pango-OpenType-Font-Handling.synopsis" href="pango/pango-OpenType-Font-Handling.html#pango-OpenType-Font-Handling.synopsis">
+<ANCHOR id="PangoOTInfo" href="pango/pango-OpenType-Font-Handling.html#PangoOTInfo">
+<ANCHOR id="PangoOTRuleset" href="pango/pango-OpenType-Font-Handling.html#PangoOTRuleset">
+<ANCHOR id="pango-OpenType-Font-Handling.object-hierarchy" href="pango/pango-OpenType-Font-Handling.html#pango-OpenType-Font-Handling.object-hierarchy">
+<ANCHOR id="pango-OpenType-Font-Handling.description" href="pango/pango-OpenType-Font-Handling.html#pango-OpenType-Font-Handling.description">
+<ANCHOR id="pango-OpenType-Font-Handling.details" href="pango/pango-OpenType-Font-Handling.html#pango-OpenType-Font-Handling.details">
+<ANCHOR id="PangoOTTag" href="pango/pango-OpenType-Font-Handling.html#PangoOTTag">
+<ANCHOR id="PangoOTInfo-struct" href="pango/pango-OpenType-Font-Handling.html#PangoOTInfo-struct">
+<ANCHOR id="PangoOTBuffer" href="pango/pango-OpenType-Font-Handling.html#PangoOTBuffer">
+<ANCHOR id="PangoOTGlyph" href="pango/pango-OpenType-Font-Handling.html#PangoOTGlyph">
+<ANCHOR id="PangoOTRuleset-struct" href="pango/pango-OpenType-Font-Handling.html#PangoOTRuleset-struct">
+<ANCHOR id="PangoOTRulesetDescription" href="pango/pango-OpenType-Font-Handling.html#PangoOTRulesetDescription">
+<ANCHOR id="PangoOTTableType" href="pango/pango-OpenType-Font-Handling.html#PangoOTTableType">
+<ANCHOR id="PangoOTFeatureMap" href="pango/pango-OpenType-Font-Handling.html#PangoOTFeatureMap">
+<ANCHOR id="PANGO-OT-TAG-MAKE--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS">
+<ANCHOR id="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE-FROM-STRING--CAPS">
+<ANCHOR id="PANGO-OT-ALL-GLYPHS--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS">
+<ANCHOR id="PANGO-OT-NO-FEATURE--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-NO-FEATURE--CAPS">
+<ANCHOR id="PANGO-OT-NO-SCRIPT--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS">
+<ANCHOR id="PANGO-OT-DEFAULT-LANGUAGE--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS">
+<ANCHOR id="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS">
+<ANCHOR id="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" href="pango/pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS">
+<ANCHOR id="pango-ot-info-get" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-get">
+<ANCHOR id="pango-ot-info-find-script" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-find-script">
+<ANCHOR id="pango-ot-info-find-language" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-find-language">
+<ANCHOR id="pango-ot-info-find-feature" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-find-feature">
+<ANCHOR id="pango-ot-info-list-scripts" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-list-scripts">
+<ANCHOR id="pango-ot-info-list-languages" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-list-languages">
+<ANCHOR id="pango-ot-info-list-features" href="pango/pango-OpenType-Font-Handling.html#pango-ot-info-list-features">
+<ANCHOR id="pango-ot-buffer-new" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-new">
+<ANCHOR id="pango-ot-buffer-destroy" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy">
+<ANCHOR id="pango-ot-buffer-clear" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-clear">
+<ANCHOR id="pango-ot-buffer-add-glyph" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-add-glyph">
+<ANCHOR id="pango-ot-buffer-set-rtl" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-set-rtl">
+<ANCHOR id="pango-ot-buffer-set-zero-width-marks" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-set-zero-width-marks">
+<ANCHOR id="pango-ot-buffer-get-glyphs" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-get-glyphs">
+<ANCHOR id="pango-ot-buffer-output" href="pango/pango-OpenType-Font-Handling.html#pango-ot-buffer-output">
+<ANCHOR id="pango-ot-ruleset-get-for-description" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description">
+<ANCHOR id="pango-ot-ruleset-new" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-new">
+<ANCHOR id="pango-ot-ruleset-new-for" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for">
+<ANCHOR id="pango-ot-ruleset-new-from-description" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description">
+<ANCHOR id="pango-ot-ruleset-add-feature" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature">
+<ANCHOR id="pango-ot-ruleset-maybe-add-feature" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature">
+<ANCHOR id="pango-ot-ruleset-maybe-add-features" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features">
+<ANCHOR id="pango-ot-ruleset-get-feature-count" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-feature-count">
+<ANCHOR id="pango-ot-ruleset-substitute" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-substitute">
+<ANCHOR id="pango-ot-ruleset-position" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-position">
+<ANCHOR id="pango-ot-ruleset-description-copy" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy">
+<ANCHOR id="pango-ot-ruleset-description-equal" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-equal">
+<ANCHOR id="pango-ot-ruleset-description-free" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free">
+<ANCHOR id="pango-ot-ruleset-description-hash" href="pango/pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-hash">
+<ANCHOR id="pango-ot-tag-from-language" href="pango/pango-OpenType-Font-Handling.html#pango-ot-tag-from-language">
+<ANCHOR id="pango-ot-tag-from-script" href="pango/pango-OpenType-Font-Handling.html#pango-ot-tag-from-script">
+<ANCHOR id="pango-ot-tag-to-language" href="pango/pango-OpenType-Font-Handling.html#pango-ot-tag-to-language">
+<ANCHOR id="pango-ot-tag-to-script" href="pango/pango-OpenType-Font-Handling.html#pango-ot-tag-to-script">
+<ANCHOR id="pango-Coverage-Maps" href="pango/pango-Coverage-Maps.html">
+<ANCHOR id="pango-Coverage-Maps.synopsis" href="pango/pango-Coverage-Maps.html#pango-Coverage-Maps.synopsis">
+<ANCHOR id="pango-Coverage-Maps.description" href="pango/pango-Coverage-Maps.html#pango-Coverage-Maps.description">
+<ANCHOR id="pango-Coverage-Maps.details" href="pango/pango-Coverage-Maps.html#pango-Coverage-Maps.details">
+<ANCHOR id="PangoCoverageLevel" href="pango/pango-Coverage-Maps.html#PangoCoverageLevel">
+<ANCHOR id="PANGO-TYPE-COVERAGE-LEVEL--CAPS" href="pango/pango-Coverage-Maps.html#PANGO-TYPE-COVERAGE-LEVEL--CAPS">
+<ANCHOR id="PangoCoverage" href="pango/pango-Coverage-Maps.html#PangoCoverage">
+<ANCHOR id="pango-coverage-new" href="pango/pango-Coverage-Maps.html#pango-coverage-new">
+<ANCHOR id="pango-coverage-ref" href="pango/pango-Coverage-Maps.html#pango-coverage-ref">
+<ANCHOR id="pango-coverage-unref" href="pango/pango-Coverage-Maps.html#pango-coverage-unref">
+<ANCHOR id="pango-coverage-copy" href="pango/pango-Coverage-Maps.html#pango-coverage-copy">
+<ANCHOR id="pango-coverage-get" href="pango/pango-Coverage-Maps.html#pango-coverage-get">
+<ANCHOR id="pango-coverage-max" href="pango/pango-Coverage-Maps.html#pango-coverage-max">
+<ANCHOR id="pango-coverage-set" href="pango/pango-Coverage-Maps.html#pango-coverage-set">
+<ANCHOR id="pango-coverage-to-bytes" href="pango/pango-Coverage-Maps.html#pango-coverage-to-bytes">
+<ANCHOR id="pango-coverage-from-bytes" href="pango/pango-Coverage-Maps.html#pango-coverage-from-bytes">
+<ANCHOR id="pango-Engines" href="pango/pango-Engines.html">
+<ANCHOR id="pango-Engines.synopsis" href="pango/pango-Engines.html#pango-Engines.synopsis">
+<ANCHOR id="PangoEngine" href="pango/pango-Engines.html#PangoEngine">
+<ANCHOR id="pango-Engines.object-hierarchy" href="pango/pango-Engines.html#pango-Engines.object-hierarchy">
+<ANCHOR id="pango-Engines.description" href="pango/pango-Engines.html#pango-Engines.description">
+<ANCHOR id="pango-Engines.details" href="pango/pango-Engines.html#pango-Engines.details">
+<ANCHOR id="PangoEngineInfo" href="pango/pango-Engines.html#PangoEngineInfo">
+<ANCHOR id="PangoEngineScriptInfo" href="pango/pango-Engines.html#PangoEngineScriptInfo">
+<ANCHOR id="PangoEngine-struct" href="pango/pango-Engines.html#PangoEngine-struct">
+<ANCHOR id="PangoEngineClass" href="pango/pango-Engines.html#PangoEngineClass">
+<ANCHOR id="PANGO-RENDER-TYPE-NONE--CAPS" href="pango/pango-Engines.html#PANGO-RENDER-TYPE-NONE--CAPS">
+<ANCHOR id="script-engine-list" href="pango/pango-Engines.html#script-engine-list">
+<ANCHOR id="script-engine-init" href="pango/pango-Engines.html#script-engine-init">
+<ANCHOR id="script-engine-exit" href="pango/pango-Engines.html#script-engine-exit">
+<ANCHOR id="script-engine-create" href="pango/pango-Engines.html#script-engine-create">
+<ANCHOR id="PangoEngineLang" href="pango/PangoEngineLang.html">
+<ANCHOR id="PangoEngineLang.stability-level" href="pango/PangoEngineLang.html#PangoEngineLang.stability-level">
+<ANCHOR id="PangoEngineLang.synopsis" href="pango/PangoEngineLang.html#PangoEngineLang.synopsis">
+<ANCHOR id="PangoEngineLang.object-hierarchy" href="pango/PangoEngineLang.html#PangoEngineLang.object-hierarchy">
+<ANCHOR id="PangoEngineLang.description" href="pango/PangoEngineLang.html#PangoEngineLang.description">
+<ANCHOR id="PangoEngineLang.details" href="pango/PangoEngineLang.html#PangoEngineLang.details">
+<ANCHOR id="PangoEngineLang-struct" href="pango/PangoEngineLang.html#PangoEngineLang-struct">
+<ANCHOR id="PangoEngineLangClass" href="pango/PangoEngineLang.html#PangoEngineLangClass">
+<ANCHOR id="PANGO-ENGINE-TYPE-LANG--CAPS" href="pango/PangoEngineLang.html#PANGO-ENGINE-TYPE-LANG--CAPS">
+<ANCHOR id="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS" href="pango/PangoEngineLang.html#PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS">
+<ANCHOR id="PangoEngineShape" href="pango/PangoEngineShape.html">
+<ANCHOR id="PangoEngineShape.stability-level" href="pango/PangoEngineShape.html#PangoEngineShape.stability-level">
+<ANCHOR id="PangoEngineShape.synopsis" href="pango/PangoEngineShape.html#PangoEngineShape.synopsis">
+<ANCHOR id="PangoEngineShape.object-hierarchy" href="pango/PangoEngineShape.html#PangoEngineShape.object-hierarchy">
+<ANCHOR id="PangoEngineShape.description" href="pango/PangoEngineShape.html#PangoEngineShape.description">
+<ANCHOR id="PangoEngineShape.details" href="pango/PangoEngineShape.html#PangoEngineShape.details">
+<ANCHOR id="PangoEngineShape-struct" href="pango/PangoEngineShape.html#PangoEngineShape-struct">
+<ANCHOR id="PangoEngineShapeClass" href="pango/PangoEngineShape.html#PangoEngineShapeClass">
+<ANCHOR id="PANGO-ENGINE-TYPE-SHAPE--CAPS" href="pango/PangoEngineShape.html#PANGO-ENGINE-TYPE-SHAPE--CAPS">
+<ANCHOR id="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS" href="pango/PangoEngineShape.html#PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS">
+<ANCHOR id="pango-Modules" href="pango/pango-Modules.html">
+<ANCHOR id="pango-Modules.synopsis" href="pango/pango-Modules.html#pango-Modules.synopsis">
+<ANCHOR id="pango-Modules.description" href="pango/pango-Modules.html#pango-Modules.description">
+<ANCHOR id="pango-Modules.details" href="pango/pango-Modules.html#pango-Modules.details">
+<ANCHOR id="PangoIncludedModule" href="pango/pango-Modules.html#PangoIncludedModule">
+<ANCHOR id="PangoMap" href="pango/pango-Modules.html#PangoMap">
+<ANCHOR id="PangoMapEntry" href="pango/pango-Modules.html#PangoMapEntry">
+<ANCHOR id="pango-find-map" href="pango/pango-Modules.html#pango-find-map">
+<ANCHOR id="pango-map-get-engine" href="pango/pango-Modules.html#pango-map-get-engine">
+<ANCHOR id="pango-map-get-engines" href="pango/pango-Modules.html#pango-map-get-engines">
+<ANCHOR id="pango-module-register" href="pango/pango-Modules.html#pango-module-register">
+<ANCHOR id="pango-Miscellaneous-Utilities" href="pango/pango-Miscellaneous-Utilities.html">
+<ANCHOR id="pango-Miscellaneous-Utilities.synopsis" href="pango/pango-Miscellaneous-Utilities.html#pango-Miscellaneous-Utilities.synopsis">
+<ANCHOR id="pango-Miscellaneous-Utilities.description" href="pango/pango-Miscellaneous-Utilities.html#pango-Miscellaneous-Utilities.description">
+<ANCHOR id="pango-Miscellaneous-Utilities.details" href="pango/pango-Miscellaneous-Utilities.html#pango-Miscellaneous-Utilities.details">
+<ANCHOR id="pango-split-file-list" href="pango/pango-Miscellaneous-Utilities.html#pango-split-file-list">
+<ANCHOR id="pango-trim-string" href="pango/pango-Miscellaneous-Utilities.html#pango-trim-string">
+<ANCHOR id="pango-read-line" href="pango/pango-Miscellaneous-Utilities.html#pango-read-line">
+<ANCHOR id="pango-skip-space" href="pango/pango-Miscellaneous-Utilities.html#pango-skip-space">
+<ANCHOR id="pango-scan-word" href="pango/pango-Miscellaneous-Utilities.html#pango-scan-word">
+<ANCHOR id="pango-scan-string" href="pango/pango-Miscellaneous-Utilities.html#pango-scan-string">
+<ANCHOR id="pango-scan-int" href="pango/pango-Miscellaneous-Utilities.html#pango-scan-int">
+<ANCHOR id="pango-config-key-get" href="pango/pango-Miscellaneous-Utilities.html#pango-config-key-get">
+<ANCHOR id="pango-lookup-aliases" href="pango/pango-Miscellaneous-Utilities.html#pango-lookup-aliases">
+<ANCHOR id="pango-parse-enum" href="pango/pango-Miscellaneous-Utilities.html#pango-parse-enum">
+<ANCHOR id="pango-parse-style" href="pango/pango-Miscellaneous-Utilities.html#pango-parse-style">
+<ANCHOR id="pango-parse-variant" href="pango/pango-Miscellaneous-Utilities.html#pango-parse-variant">
+<ANCHOR id="pango-parse-weight" href="pango/pango-Miscellaneous-Utilities.html#pango-parse-weight">
+<ANCHOR id="pango-parse-stretch" href="pango/pango-Miscellaneous-Utilities.html#pango-parse-stretch">
+<ANCHOR id="pango-get-sysconf-subdirectory" href="pango/pango-Miscellaneous-Utilities.html#pango-get-sysconf-subdirectory">
+<ANCHOR id="pango-get-lib-subdirectory" href="pango/pango-Miscellaneous-Utilities.html#pango-get-lib-subdirectory">
+<ANCHOR id="pango-log2vis-get-embedding-levels" href="pango/pango-Miscellaneous-Utilities.html#pango-log2vis-get-embedding-levels">
+<ANCHOR id="pango-is-zero-width" href="pango/pango-Miscellaneous-Utilities.html#pango-is-zero-width">
+<ANCHOR id="pango-quantize-line-geometry" href="pango/pango-Miscellaneous-Utilities.html#pango-quantize-line-geometry">
+<ANCHOR id="pango-Version-Checking" href="pango/pango-Version-Checking.html">
+<ANCHOR id="pango-Version-Checking.synopsis" href="pango/pango-Version-Checking.html#pango-Version-Checking.synopsis">
+<ANCHOR id="pango-Version-Checking.description" href="pango/pango-Version-Checking.html#pango-Version-Checking.description">
+<ANCHOR id="pango-Version-Checking.details" href="pango/pango-Version-Checking.html#pango-Version-Checking.details">
+<ANCHOR id="PANGO-VERSION-ENCODE--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS">
+<ANCHOR id="PANGO-VERSION--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION--CAPS">
+<ANCHOR id="PANGO-VERSION-MAJOR--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION-MAJOR--CAPS">
+<ANCHOR id="PANGO-VERSION-MINOR--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION-MINOR--CAPS">
+<ANCHOR id="PANGO-VERSION-MICRO--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION-MICRO--CAPS">
+<ANCHOR id="PANGO-VERSION-STRING--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION-STRING--CAPS">
+<ANCHOR id="PANGO-VERSION-CHECK--CAPS" href="pango/pango-Version-Checking.html#PANGO-VERSION-CHECK--CAPS">
+<ANCHOR id="pango-version" href="pango/pango-Version-Checking.html#pango-version">
+<ANCHOR id="pango-version-string" href="pango/pango-Version-Checking.html#pango-version-string">
+<ANCHOR id="pango-version-check" href="pango/pango-Version-Checking.html#pango-version-check">
+<ANCHOR id="pango-querymodules" href="pango/pango-querymodules.html">
+<ANCHOR id="Description" href="pango/pango-querymodules.html#Description">
+<ANCHOR id="Environment" href="pango/pango-querymodules.html#Environment">
+<ANCHOR id="Bugs" href="pango/pango-querymodules.html#Bugs">
diff --git a/docs/html/layout.gif b/docs/html/layout.gif
new file mode 100755 (executable)
index 0000000..96bde1f
Binary files /dev/null and b/docs/html/layout.gif differ
diff --git a/docs/html/left.png b/docs/html/left.png
new file mode 100755 (executable)
index 0000000..2d05b3d
Binary files /dev/null and b/docs/html/left.png differ
diff --git a/docs/html/lowlevel.html b/docs/html/lowlevel.html
new file mode 100755 (executable)
index 0000000..f60f04a
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Low Level Functionality</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="pango-X-Fonts-and-Rendering.html" title="Deprecated X font backend">
+<link rel="next" href="PangoRenderer.html" title="PangoRenderer">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="pango-X-Fonts-and-Rendering.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoRenderer.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="lowlevel"></a>Low Level Functionality</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="PangoRenderer.html">PangoRenderer</a></span><span class="refpurpose"> — Rendering driver base class</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoFcFontMap.html">PangoFcFontMap</a></span><span class="refpurpose"> — Base fontmap class for Fontconfig-based backends</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoFcFont.html">PangoFcFont</a></span><span class="refpurpose"> — Base font class for Fontconfig-based backends</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoFcDecoder.html">PangoFcDecoder</a></span><span class="refpurpose"> — Custom font encoding handling</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-OpenType-Font-Handling.html">OpenType Font Handling</a></span><span class="refpurpose"> — Obtaining information from OpenType tables</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Coverage-Maps.html">Coverage Maps</a></span><span class="refpurpose"> — Unicode character range coverage storage</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Engines.html">Engines</a></span><span class="refpurpose"> — Language-specific and rendering-system-specific processing</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoEngineLang.html">PangoEngineLang</a></span><span class="refpurpose"> — Rendering-system independent script engines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoEngineShape.html">PangoEngineShape</a></span><span class="refpurpose"> — Rendering-system dependent script engines</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Modules.html">Modules</a></span><span class="refpurpose"> — Support for loadable modules</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Miscellaneous-Utilities.html">Miscellaneous Utilities</a></span><span class="refpurpose"> — Various convenience and utility functions</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Version-Checking.html">Version Checking</a></span><span class="refpurpose"> — Tools for checking Pango version at compile- and run-time.</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-ATSUI-Fonts.html b/docs/html/pango-ATSUI-Fonts.html
new file mode 100755 (executable)
index 0000000..683caa5
--- /dev/null
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ATSUI Fonts</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="rendering.html" title="Rendering with Pango">
+<link rel="prev" href="pango-Cairo-Rendering.html" title="Cairo Rendering">
+<link rel="next" href="pango-X-Fonts-and-Rendering.html" title="Deprecated X font backend">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Cairo-Rendering.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="rendering.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-X-Fonts-and-Rendering.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-ATSUI-Fonts.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-ATSUI-Fonts.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-ATSUI-Fonts"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-ATSUI-Fonts.top_of_page"></a>ATSUI Fonts</span></h2>
+<p>ATSUI Fonts — Font handling with ATSUI fonts</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-ATSUI-Fonts.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#define             <a class="link" href="pango-ATSUI-Fonts.html#PANGO-RENDER-TYPE-ATSUI--CAPS" title="PANGO_RENDER_TYPE_ATSUI">PANGO_RENDER_TYPE_ATSUI</a>
+CGFontRef           <a class="link" href="pango-ATSUI-Fonts.html#pango-atsui-font-get-cgfont" title="pango_atsui_font_get_cgfont ()">pango_atsui_font_get_cgfont</a>         (PangoATSUIFont *font);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-ATSUI-Fonts.description"></a><h2>Description</h2>
+<p>
+The macros and functions in this section are used to access fonts natively on
+MacOS systems using the ATSUI text rendering subsystem.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-ATSUI-Fonts.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-ATSUI--CAPS"></a><h3>PANGO_RENDER_TYPE_ATSUI</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_ATSUI "PangoRenderATSUI"
+</pre>
+<p>
+A string constant identifying the ATSUI renderer. The associated quark (see
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#g-quark-from-string"
+><code class="function">g_quark_from_string()</code></a>) is used to identify the renderer in <a class="link" href="pango-Modules.html#pango-find-map" title="pango_find_map ()"><code class="function">pango_find_map()</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-atsui-font-get-cgfont"></a><h3>pango_atsui_font_get_cgfont ()</h3>
+<pre class="programlisting">CGFontRef           pango_atsui_font_get_cgfont         (PangoATSUIFont *font);</pre>
+<p>
+Returns the CGFontRef of a font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> A <span class="type">PangoATSUIFont</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the CGFontRef associated to <em class="parameter"><code>font</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Bidirectional-Text.html b/docs/html/pango-Bidirectional-Text.html
new file mode 100755 (executable)
index 0000000..f254017
--- /dev/null
@@ -0,0 +1,487 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Bidirectional Text</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Scripts-and-Languages.html" title="Scripts and Languages">
+<link rel="next" href="pango-Vertical-Text.html" title="Vertical Text">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Scripts-and-Languages.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Vertical-Text.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Bidirectional-Text.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Bidirectional-Text.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Bidirectional-Text"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Bidirectional-Text.top_of_page"></a>Bidirectional Text</span></h2>
+<p>Bidirectional Text — Types and functions to help with handling bidirectional text</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Bidirectional-Text.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+enum                <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>;
+<a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>      <a class="link" href="pango-Bidirectional-Text.html#pango-unichar-direction" title="pango_unichar_direction ()">pango_unichar_direction</a>             (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);
+<a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>      <a class="link" href="pango-Bidirectional-Text.html#pango-find-base-dir" title="pango_find_base_dir ()">pango_find_base_dir</a>                 (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> length);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Bidirectional-Text.html#pango-get-mirror-char" title="pango_get_mirror_char ()">pango_get_mirror_char</a>               (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> *mirrored_ch);
+enum                <a class="link" href="pango-Bidirectional-Text.html#PangoBidiType" title="enum PangoBidiType">PangoBidiType</a>;
+<a class="link" href="pango-Bidirectional-Text.html#PangoBidiType" title="enum PangoBidiType">PangoBidiType</a>       <a class="link" href="pango-Bidirectional-Text.html#pango-bidi-type-for-unichar" title="pango_bidi_type_for_unichar ()">pango_bidi_type_for_unichar</a>         (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Bidirectional-Text.description"></a><h2>Description</h2>
+<p>
+Pango supports bidirectional text (like Arabic and Hebrew) automatically.
+Some applications however, need some help to correctly handle bidirectional
+text.
+</p>
+<p>
+The <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection"><span class="type">PangoDirection</span></a> type can be used with <a class="link" href="pango-Text-Processing.html#pango-context-set-base-dir" title="pango_context_set_base_dir ()"><code class="function">pango_context_set_base_dir()</code></a> to
+instruct Pango about direction of text, though in most cases Pango detects
+that correctly and automatically.  The rest of the facilities in this section
+are used internally by Pango already, and are provided to help applications
+that need more direct control over bidirectional setting of text.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Bidirectional-Text.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoDirection"></a><h3>enum PangoDirection</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_DIRECTION_LTR,
+  PANGO_DIRECTION_RTL,
+  PANGO_DIRECTION_TTB_LTR,
+  PANGO_DIRECTION_TTB_RTL,
+  PANGO_DIRECTION_WEAK_LTR,
+  PANGO_DIRECTION_WEAK_RTL,
+  PANGO_DIRECTION_NEUTRAL
+} PangoDirection;
+</pre>
+<p>
+The <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection"><span class="type">PangoDirection</span></a> type represents a direction in the
+Unicode bidirectional algorithm; not every value in this
+enumeration makes sense for every usage of <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection"><span class="type">PangoDirection</span></a>;
+for example, the return value of <a class="link" href="pango-Bidirectional-Text.html#pango-unichar-direction" title="pango_unichar_direction ()"><code class="function">pango_unichar_direction()</code></a>
+and <a class="link" href="pango-Bidirectional-Text.html#pango-find-base-dir" title="pango_find_base_dir ()"><code class="function">pango_find_base_dir()</code></a> cannot be <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-WEAK-LTR--CAPS"><code class="literal">PANGO_DIRECTION_WEAK_LTR</code></a>
+or <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-WEAK-RTL--CAPS"><code class="literal">PANGO_DIRECTION_WEAK_RTL</code></a>, since every character is either
+neutral or has a strong direction; on the other hand
+<a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-NEUTRAL--CAPS"><code class="literal">PANGO_DIRECTION_NEUTRAL</code></a> doesn't make sense to pass
+to <a class="link" href="pango-Text-Processing.html#pango-itemize-with-base-dir" title="pango_itemize_with_base_dir ()"><code class="function">pango_itemize_with_base_dir()</code></a>.
+</p>
+<p>
+The <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-TTB-LTR--CAPS"><code class="literal">PANGO_DIRECTION_TTB_LTR</code></a>, <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-TTB-RTL--CAPS"><code class="literal">PANGO_DIRECTION_TTB_RTL</code></a>
+values come from an earlier interpretation of this
+enumeration as the writing direction of a block of
+text and are no longer used; See <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> for how
+vertical text is handled in Pango.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-DIRECTION-LTR--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_LTR</code></span></p></td>
+<td> A strong left-to-right direction
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-DIRECTION-RTL--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_RTL</code></span></p></td>
+<td> A strong right-to-left direction
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-DIRECTION-TTB-LTR--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_TTB_LTR</code></span></p></td>
+<td> Deprecated value; treated the
+  same as <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-RTL--CAPS"><code class="literal">PANGO_DIRECTION_RTL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-DIRECTION-TTB-RTL--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_TTB_RTL</code></span></p></td>
+<td> Deprecated value; treated the
+  same as <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-LTR--CAPS"><code class="literal">PANGO_DIRECTION_LTR</code></a>
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-DIRECTION-WEAK-LTR--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_WEAK_LTR</code></span></p></td>
+<td> A weak left-to-right direction
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-DIRECTION-WEAK-RTL--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_WEAK_RTL</code></span></p></td>
+<td> A weak right-to-left direction
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-DIRECTION-NEUTRAL--CAPS"></a><span class="term"><code class="literal">PANGO_DIRECTION_NEUTRAL</code></span></p></td>
+<td> No direction specified
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-unichar-direction"></a><h3>pango_unichar_direction ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>      pango_unichar_direction             (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);</pre>
+<p>
+Determines the inherent direction of a character; either
+<a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-LTR--CAPS"><code class="literal">PANGO_DIRECTION_LTR</code></a>, <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-RTL--CAPS"><code class="literal">PANGO_DIRECTION_RTL</code></a>, or
+<a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-NEUTRAL--CAPS"><code class="literal">PANGO_DIRECTION_NEUTRAL</code></a>.
+</p>
+<p>
+This function is useful to categorize characters into left-to-right
+letters, right-to-left letters, and everything else.  If full
+Unicode bidirectional type of a character is needed,
+<code class="function">pango_bidi_type_for_gunichar()</code> can be used instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ch</code></em> :</span></p></td>
+<td> a Unicode character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the direction of the character.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-find-base-dir"></a><h3>pango_find_base_dir ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>      pango_find_base_dir                 (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> length);</pre>
+<p>
+Searches a string the first character that has a strong
+direction, according to the Unicode bidirectional algorithm.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>   the text to process
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of <em class="parameter"><code>text</code></em> in bytes (may be -1 if <em class="parameter"><code>text</code></em> is nul-terminated)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The direction corresponding to the first strong character.
+If no such character is found, then <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-NEUTRAL--CAPS"><code class="literal">PANGO_DIRECTION_NEUTRAL</code></a> is returned.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-get-mirror-char"></a><h3>pango_get_mirror_char ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_get_mirror_char               (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> *mirrored_ch);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_get_mirror_char</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+If <em class="parameter"><code>ch</code></em> has the Unicode mirrored property and there is another Unicode
+character that typically has a glyph that is the mirror image of <em class="parameter"><code>ch</code></em>'s
+glyph, puts that character in the address pointed to by <em class="parameter"><code>mirrored_ch</code></em>.
+</p>
+<p>
+Use <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#g-unichar-get-mirror-char"
+><code class="function">g_unichar_get_mirror_char()</code></a> instead; the docs for that function
+provide full details.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ch</code></em> :</span></p></td>
+<td> a Unicode character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mirrored_ch</code></em> :</span></p></td>
+<td> location to store the mirrored character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>ch</code></em> has a mirrored character and <em class="parameter"><code>mirrored_ch</code></em> is
+filled in, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoBidiType"></a><h3>enum PangoBidiType</h3>
+<pre class="programlisting">typedef enum {
+  /* Strong types */
+  PANGO_BIDI_TYPE_L,
+  PANGO_BIDI_TYPE_LRE,
+  PANGO_BIDI_TYPE_LRO,
+  PANGO_BIDI_TYPE_R,
+  PANGO_BIDI_TYPE_AL,
+  PANGO_BIDI_TYPE_RLE,
+  PANGO_BIDI_TYPE_RLO,
+
+  /* Weak types */
+  PANGO_BIDI_TYPE_PDF,
+  PANGO_BIDI_TYPE_EN,
+  PANGO_BIDI_TYPE_ES,
+  PANGO_BIDI_TYPE_ET,
+  PANGO_BIDI_TYPE_AN,
+  PANGO_BIDI_TYPE_CS,
+  PANGO_BIDI_TYPE_NSM,
+  PANGO_BIDI_TYPE_BN,
+
+  /* Neutral types */
+  PANGO_BIDI_TYPE_B,
+  PANGO_BIDI_TYPE_S,
+  PANGO_BIDI_TYPE_WS,
+  PANGO_BIDI_TYPE_ON
+} PangoBidiType;
+</pre>
+<p>
+The <a class="link" href="pango-Bidirectional-Text.html#PangoBidiType" title="enum PangoBidiType"><span class="type">PangoBidiType</span></a> type represents the bidirectional character
+type of a Unicode character as specified by the
+<a class="ulink" href="http://www.unicode.org/reports/tr9/" target="_top">Unicode bidirectional algorithm</a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-L--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_L</code></span></p></td>
+<td> Left-to-Right
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-LRE--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_LRE</code></span></p></td>
+<td> Left-to-Right Embedding
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-LRO--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_LRO</code></span></p></td>
+<td> Left-to-Right Override
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-R--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_R</code></span></p></td>
+<td> Right-to-Left
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-AL--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_AL</code></span></p></td>
+<td> Right-to-Left Arabic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-RLE--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_RLE</code></span></p></td>
+<td> Right-to-Left Embedding
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-RLO--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_RLO</code></span></p></td>
+<td> Right-to-Left Override
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-PDF--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_PDF</code></span></p></td>
+<td> Pop Directional Format
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-EN--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_EN</code></span></p></td>
+<td> European Number
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-ES--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_ES</code></span></p></td>
+<td> European Number Separator
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-ET--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_ET</code></span></p></td>
+<td> European Number Terminator
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-AN--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_AN</code></span></p></td>
+<td> Arabic Number
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-CS--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_CS</code></span></p></td>
+<td> Common Number Separator
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-NSM--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_NSM</code></span></p></td>
+<td> Nonspacing Mark
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-BN--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_BN</code></span></p></td>
+<td> Boundary Neutral
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-B--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_B</code></span></p></td>
+<td> Paragraph Separator
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-S--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_S</code></span></p></td>
+<td> Segment Separator
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-WS--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_WS</code></span></p></td>
+<td> Whitespace
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-BIDI-TYPE-ON--CAPS"></a><span class="term"><code class="literal">PANGO_BIDI_TYPE_ON</code></span></p></td>
+<td> Other Neutrals
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-bidi-type-for-unichar"></a><h3>pango_bidi_type_for_unichar ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Bidirectional-Text.html#PangoBidiType" title="enum PangoBidiType">PangoBidiType</a>       pango_bidi_type_for_unichar         (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);</pre>
+<p>
+Determines the normative bidirectional character type of a
+character, as specified in the Unicode Character Database.
+</p>
+<p>
+A simplified version of this function is available as
+<code class="function">pango_unichar_get_direction()</code>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ch</code></em> :</span></p></td>
+<td> a Unicode character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the bidirectional character type, as used in the
+Unicode bidirectional algorithm.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Bidirectional-Text.see-also"></a><h2>See Also</h2>
+<p>
+<a class="link" href="pango-Text-Processing.html#pango-context-get-base-dir" title="pango_context_get_base_dir ()"><code class="function">pango_context_get_base_dir()</code></a>,
+<a class="link" href="pango-Text-Processing.html#pango-context-set-base-dir" title="pango_context_set_base_dir ()"><code class="function">pango_context_set_base_dir()</code></a>,
+<a class="link" href="pango-Text-Processing.html#pango-itemize-with-base-dir" title="pango_itemize_with_base_dir ()"><code class="function">pango_itemize_with_base_dir()</code></a>
+</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Cairo-Rendering.html b/docs/html/pango-Cairo-Rendering.html
new file mode 100755 (executable)
index 0000000..7a5092f
--- /dev/null
@@ -0,0 +1,1400 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Cairo Rendering</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="rendering.html" title="Rendering with Pango">
+<link rel="prev" href="pango-Xft-Fonts-and-Rendering.html" title="Xft Fonts and Rendering">
+<link rel="next" href="pango-ATSUI-Fonts.html" title="ATSUI Fonts">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Xft-Fonts-and-Rendering.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="rendering.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-ATSUI-Fonts.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Cairo-Rendering.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Cairo-Rendering.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-Cairo-Rendering.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                 | 
+                <a href="#pango-Cairo-Rendering.prerequisites" class="shortcut">Prerequisites</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Cairo-Rendering"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Cairo-Rendering.top_of_page"></a>Cairo Rendering</span></h2>
+<p>Cairo Rendering — Rendering with the Cairo backend</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Cairo-Rendering.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoCairoFont"></a><a name="PangoCairoFontMap"></a><pre class="synopsis">
+                    <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFont-struct" title="PangoCairoFont">PangoCairoFont</a>;
+                    <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap-struct" title="PangoCairoFontMap">PangoCairoFontMap</a>;
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default" title="pango_cairo_font_map_get_default ()">pango_cairo_font_map_get_default</a>    (void);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-default" title="pango_cairo_font_map_set_default ()">pango_cairo_font_map_set_default</a>    (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new" title="pango_cairo_font_map_new ()">pango_cairo_font_map_new</a>            (void);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new-for-font-type" title="pango_cairo_font_map_new_for_font_type ()">pango_cairo_font_map_new_for_font_type</a>
+                                                        (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-face.html#cairo-font-type-t"
+>cairo_font_type_t</a> fonttype);
+<a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-face.html#cairo-font-type-t"
+>cairo_font_type_t</a>   <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-font-type" title="pango_cairo_font_map_get_font_type ()">pango_cairo_font_map_get_font_type</a>  (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution" title="pango_cairo_font_map_set_resolution ()">pango_cairo_font_map_set_resolution</a> (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap,
+                                                         double dpi);
+double              <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-resolution" title="pango_cairo_font_map_get_resolution ()">pango_cairo_font_map_get_resolution</a> (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context" title="pango_cairo_font_map_create_context ()">pango_cairo_font_map_create_context</a> (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);
+<a
+href="/usr/share/gtk-doc/html/cairo/cairo-scaled-font.html#cairo-scaled-font-t"
+>cairo_scaled_font_t</a> * <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-get-scaled-font" title="pango_cairo_font_get_scaled_font ()">pango_cairo_font_get_scaled_font</a>  (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFont">PangoCairoFont</a> *font);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-set-resolution" title="pango_cairo_context_set_resolution ()">pango_cairo_context_set_resolution</a>  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         double dpi);
+double              <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-get-resolution" title="pango_cairo_context_get_resolution ()">pango_cairo_context_get_resolution</a>  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-set-font-options" title="pango_cairo_context_set_font_options ()">pango_cairo_context_set_font_options</a>
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-options.html#cairo-font-options-t"
+>cairo_font_options_t</a> *options);
+const <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-options.html#cairo-font-options-t"
+>cairo_font_options_t</a> * <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-get-font-options" title="pango_cairo_context_get_font_options ()">pango_cairo_context_get_font_options</a>
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()">*PangoCairoShapeRendererFunc</a>)      (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape">PangoAttrShape</a> *attr,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> do_path,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer" title="pango_cairo_context_set_shape_renderer ()">pango_cairo_context_set_shape_renderer</a>
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()">PangoCairoShapeRendererFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> dnotify);
+<a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()">PangoCairoShapeRendererFunc</a>  <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-get-shape-renderer" title="pango_cairo_context_get_shape_renderer ()">pango_cairo_context_get_shape_renderer</a>
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> *data);
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-create-context" title="pango_cairo_create_context ()">pango_cairo_create_context</a>          (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-context" title="pango_cairo_update_context ()">pango_cairo_update_context</a>          (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-create-layout" title="pango_cairo_create_layout ()">pango_cairo_create_layout</a>           (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-layout" title="pango_cairo_update_layout ()">pango_cairo_update_layout</a>           (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-string" title="pango_cairo_show_glyph_string ()">pango_cairo_show_glyph_string</a>       (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-item" title="pango_cairo_show_glyph_item ()">pango_cairo_show_glyph_item</a>         (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-layout-line" title="pango_cairo_show_layout_line ()">pango_cairo_show_layout_line</a>        (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-layout" title="pango_cairo_show_layout ()">pango_cairo_show_layout</a>             (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-error-underline" title="pango_cairo_show_error_underline ()">pango_cairo_show_error_underline</a>    (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         double x,
+                                                         double y,
+                                                         double width,
+                                                         double height);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-glyph-string-path" title="pango_cairo_glyph_string_path ()">pango_cairo_glyph_string_path</a>       (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-layout-line-path" title="pango_cairo_layout_line_path ()">pango_cairo_layout_line_path</a>        (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-layout-path" title="pango_cairo_layout_path ()">pango_cairo_layout_path</a>             (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-error-underline-path" title="pango_cairo_error_underline_path ()">pango_cairo_error_underline_path</a>    (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         double x,
+                                                         double y,
+                                                         double width,
+                                                         double height);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Cairo-Rendering.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  GInterface
+   +----PangoCairoFont
+</pre>
+<pre class="synopsis">
+  GInterface
+   +----PangoCairoFontMap
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Cairo-Rendering.prerequisites"></a><h2>Prerequisites</h2>
+<p>
+PangoCairoFont requires
+ <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a>.</p>
+<p>
+PangoCairoFontMap requires
+ <a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a>.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Cairo-Rendering.description"></a><h2>Description</h2>
+<p>
+The <a class="ulink" href="http://cairographics.org" target="_top">Cairo library</a> is a
+vector graphics library with a powerful rendering model. It has such
+features as anti-aliased primitives, alpha-compositing, and
+gradients. Multiple backends for Cairo are available, to allow
+rendering to images, to PDF files, and to the screen on X and on other
+windowing systems. The functions in this section allow using Pango
+to render to Cairo surfaces.
+</p>
+<p>
+Using Pango with Cairo is straightforward. A <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> created
+with <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context" title="pango_cairo_font_map_create_context ()"><code class="function">pango_cairo_font_map_create_context()</code></a> can be used on any
+Cairo context (cairo_t), but needs to be updated to match the
+current transformation matrix and target surface of the Cairo context
+using <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-context" title="pango_cairo_update_context ()"><code class="function">pango_cairo_update_context()</code></a>. The convenience functions
+<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-create-layout" title="pango_cairo_create_layout ()"><code class="function">pango_cairo_create_layout()</code></a> and <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-layout" title="pango_cairo_update_layout ()"><code class="function">pango_cairo_update_layout()</code></a> handle
+the common case where the program doesn't need to manipulate the
+properties of the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+</p>
+<p>
+When you get the metrics of a layout or of a piece of a layout using
+functions such as <a class="link" href="pango-Layout-Objects.html#pango-layout-get-extents" title="pango_layout_get_extents ()"><code class="function">pango_layout_get_extents()</code></a>, the reported metrics
+are in user-space coordinates. If a piece of text is 10 units long,
+and you call cairo_scale (cr, 2.0), it still is more-or-less 10
+units long. However, the results will be affected by hinting
+(that is, the process of adjusting the text to look good on the
+pixel grid), so you shouldn't assume they are completely independent
+of the current transformation matrix. Note that the basic metrics
+functions in Pango report results in integer Pango units. To get
+to the floating point units used in Cairo divide by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>.
+</p>
+<div class="example">
+<a name="rotated-example"></a><p class="title"><b>Example 1. Using Pango with Cairo</b></p>
+<div class="example-contents"><pre class="programlisting">
+#include &lt;math.h&gt;
+#include &lt;pango/pangocairo.h&gt;
+static void
+draw_text (cairo_t *cr)
+{
+#define RADIUS 150
+#define N_WORDS 10
+#define FONT "Sans Bold 27"
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+  int i;
+  /* Center coordinates on the middle of the region we are drawing
+   */
+  cairo_translate (cr, RADIUS, RADIUS);
+  /* Create a PangoLayout, set the font and text */
+  layout = pango_cairo_create_layout (cr);
+  pango_layout_set_text (layout, "Text", -1);
+  desc = pango_font_description_from_string (FONT);
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+  /* Draw the layout N_WORDS times in a circle */
+  for (i = 0; i &lt; N_WORDS; i++)
+    {
+      int width, height;
+      double angle = (360. * i) / N_WORDS;
+      double red;
+      cairo_save (cr);
+      /* Gradient from red at angle == 60 to blue at angle == 240 */
+      red   = (1 + cos ((angle - 60) * G_PI / 180.)) / 2;
+      cairo_set_source_rgb (cr, red, 0, 1.0 - red);
+      cairo_rotate (cr, angle * G_PI / 180.);
+      /* Inform Pango to re-layout the text with the new transformation */
+      pango_cairo_update_layout (cr, layout);
+      pango_layout_get_size (layout, &amp;width, &amp;height);
+      cairo_move_to (cr, - ((double)width / PANGO_SCALE) / 2, - RADIUS);
+      pango_cairo_show_layout (cr, layout);
+      cairo_restore (cr);
+    }
+  /* free the layout object */
+  g_object_unref (layout);
+}
+int main (int argc, char **argv)
+{
+  cairo_t *cr;
+  char *filename;
+  cairo_status_t status;
+  cairo_surface_t *surface;
+  if (argc != 2)
+    {
+      g_printerr ("Usage: cairosimple OUTPUT_FILENAME\n");
+      return 1;
+    }
+  filename = argv[1];
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       2 * RADIUS, 2 * RADIUS);
+  cr = cairo_create (surface);
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+  draw_text (cr);
+  cairo_destroy (cr);
+  status = cairo_surface_write_to_png (surface, filename);
+  cairo_surface_destroy (surface);
+  if (status != CAIRO_STATUS_SUCCESS)
+    {
+      g_printerr ("Could not save png to '%s'\n", filename);
+      return 1;
+    }
+  return 0;
+}
+</pre></div>
+</div>
+<br class="example-break"><div class="figure">
+<a name="rotated-example-output"></a><p class="title"><b>Figure 2. Output of <a class="xref" href="pango-Cairo-Rendering.html#rotated-example" title="Example 1. Using Pango with Cairo">Example 1, “Using Pango with Cairo”</a></b></p>
+<div class="figure-contents"><div><img src="rotated-text.png" alt="Output of"></div></div>
+</div>
+<br class="figure-break">
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Cairo-Rendering.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoCairoFont-struct"></a><h3>PangoCairoFont</h3>
+<pre class="programlisting">typedef struct _PangoCairoFont PangoCairoFont;</pre>
+<p>
+<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFont"><span class="type">PangoCairoFont</span></a> is an interface exported by fonts for
+use with Cairo. The actual type of the font will depend
+on the particular font technology Cairo was compiled to use.</p>
+<p>
+</p>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoCairoFontMap-struct"></a><h3>PangoCairoFontMap</h3>
+<pre class="programlisting">typedef struct _PangoCairoFontMap PangoCairoFontMap;</pre>
+<p>
+<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> is an interface exported by font maps for
+use with Cairo. The actual type of the font map will depend
+on the particular font technology Cairo was compiled to use.</p>
+<p>
+</p>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-get-default"></a><h3>pango_cairo_font_map_get_default ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_cairo_font_map_get_default    (void);</pre>
+<p>
+Gets a default <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> to use with Cairo.
+</p>
+<p>
+Note that the type of the returned object will depend
+on the particular font backend Cairo was compiled to use;
+You generally should only use the <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> and
+<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> interfaces on the returned object.
+</p>
+<p>
+The default Cairo fontmap can be changed by using
+<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-default" title="pango_cairo_font_map_set_default ()"><code class="function">pango_cairo_font_map_set_default()</code></a>.  This can be used to
+change the Cairo font backend that the default fontmap
+uses for example.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the default Cairo fontmap for Pango. This
+ object is owned by Pango and must not be freed.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-set-default"></a><h3>pango_cairo_font_map_set_default ()</h3>
+<pre class="programlisting">void                pango_cairo_font_map_set_default    (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);</pre>
+<p>
+Sets a default <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> to use with Cairo.
+</p>
+<p>
+This can be used to change the Cairo font backend that the
+default fontmap uses for example.  The old default font map
+is unreffed and the new font map referenced.
+</p>
+<p>
+A value of <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> for <em class="parameter"><code>fontmap</code></em> will cause the current default
+font map to be released and a new default font
+map to be created on demand, using <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new" title="pango_cairo_font_map_new ()"><code class="function">pango_cairo_font_map_new()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> The new default font map, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-new"></a><h3>pango_cairo_font_map_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_cairo_font_map_new            (void);</pre>
+<p>
+Creates a new <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> object; a fontmap is used
+to cache information about available fonts, and holds
+certain global parameters such as the resolution.
+In most cases, you can use <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default" title="pango_cairo_font_map_get_default ()"><code class="function">pango_cairo_font_map_get_default()</code></a>
+instead.
+</p>
+<p>
+Note that the type of the returned object will depend
+on the particular font backend Cairo was compiled to use;
+You generally should only use the <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> and
+<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> interfaces on the returned object.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>, which should
+              be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-new-for-font-type"></a><h3>pango_cairo_font_map_new_for_font_type ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_cairo_font_map_new_for_font_type
+                                                        (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-face.html#cairo-font-type-t"
+>cairo_font_type_t</a> fonttype);</pre>
+<p>
+Creates a new <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a> object of the type suitable
+to be used with cairo font backend of type <em class="parameter"><code>fonttype</code></em>.
+</p>
+<p>
+In most cases one should simply use @<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-new" title="pango_cairo_font_map_new ()"><code class="function">pango_cairo_font_map_new()</code></a>,
+or in fact in most of those cases, just use
+@<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default" title="pango_cairo_font_map_get_default ()"><code class="function">pango_cairo_font_map_get_default()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fonttype</code></em> :</span></p></td>
+<td> desired <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-face.html#cairo-font-type-t"
+><span class="type">cairo_font_type_t</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> of suitable type
+              which should be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>,
+              or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the requested cairo font backend is
+              not supported / compiled in.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-get-font-type"></a><h3>pango_cairo_font_map_get_font_type ()</h3>
+<pre class="programlisting"><a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-face.html#cairo-font-type-t"
+>cairo_font_type_t</a>   pango_cairo_font_map_get_font_type  (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);</pre>
+<p>
+Gets the type of Cairo font backend that <em class="parameter"><code>fontmap</code></em> uses.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-face.html#cairo-font-type-t"
+><span class="type">cairo_font_type_t</span></a> cairo font backend type
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-set-resolution"></a><h3>pango_cairo_font_map_set_resolution ()</h3>
+<pre class="programlisting">void                pango_cairo_font_map_set_resolution (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap,
+                                                         double dpi);</pre>
+<p>
+Sets the resolution for the fontmap. This is a scale factor between
+points specified in a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> and Cairo units. The
+default value is 96, meaning that a 10 point font will be 13
+units high. (10 * 96. / 72. = 13.3).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dpi</code></em> :</span></p></td>
+<td> the resolution in "dots per inch". (Physical inches aren't actually
+  involved; the terminology is conventional.)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-get-resolution"></a><h3>pango_cairo_font_map_get_resolution ()</h3>
+<pre class="programlisting">double              pango_cairo_font_map_get_resolution (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);</pre>
+<p>
+Gets the resolution for the fontmap. See <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution" title="pango_cairo_font_map_set_resolution ()"><code class="function">pango_cairo_font_map_set_resolution()</code></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the resolution in "dots per inch"
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-map-create-context"></a><h3>pango_cairo_font_map_create_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_cairo_font_map_create_context (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a> *fontmap);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_cairo_font_map_create_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Create a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> for the given fontmap.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly created context; free with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-font-get-scaled-font"></a><h3>pango_cairo_font_get_scaled_font ()</h3>
+<pre class="programlisting"><a
+href="/usr/share/gtk-doc/html/cairo/cairo-scaled-font.html#cairo-scaled-font-t"
+>cairo_scaled_font_t</a> * pango_cairo_font_get_scaled_font  (<a class="link" href="pango-Cairo-Rendering.html#PangoCairoFont">PangoCairoFont</a> *font);</pre>
+<p>
+Gets the <a
+href="/usr/share/gtk-doc/html/cairo/cairo-scaled-font.html#cairo-scaled-font-t"
+><span class="type">cairo_scaled_font_t</span></a> used by <em class="parameter"><code>font</code></em>.
+The scaled font can be referenced and kept using
+<a
+href="/usr/share/gtk-doc/html/cairo/cairo-scaled-font.html#cairo-scaled-font-reference"
+><code class="function">cairo_scaled_font_reference()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> from a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a
+href="/usr/share/gtk-doc/html/cairo/cairo-scaled-font.html#cairo-scaled-font-t"
+><span class="type">cairo_scaled_font_t</span></a> used by <em class="parameter"><code>font</code></em>,
+              or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>font</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-context-set-resolution"></a><h3>pango_cairo_context_set_resolution ()</h3>
+<pre class="programlisting">void                pango_cairo_context_set_resolution  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         double dpi);</pre>
+<p>
+Sets the resolution for the context. This is a scale factor between
+points specified in a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> and Cairo units. The
+default value is 96, meaning that a 10 point font will be 13
+units high. (10 * 96. / 72. = 13.3).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dpi</code></em> :</span></p></td>
+<td> the resolution in "dots per inch". (Physical inches aren't actually
+  involved; the terminology is conventional.) A 0 or negative value
+  means to use the resolution from the font map.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-context-get-resolution"></a><h3>pango_cairo_context_get_resolution ()</h3>
+<pre class="programlisting">double              pango_cairo_context_get_resolution  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Gets the resolution for the context. See <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-set-resolution" title="pango_cairo_context_set_resolution ()"><code class="function">pango_cairo_context_set_resolution()</code></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the resolution in "dots per inch". A negative value will
+ be returned if no resolution has previously been set.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-context-set-font-options"></a><h3>pango_cairo_context_set_font_options ()</h3>
+<pre class="programlisting">void                pango_cairo_context_set_font_options
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-options.html#cairo-font-options-t"
+>cairo_font_options_t</a> *options);</pre>
+<p>
+Sets the font options used when rendering text with this context.
+These options override any options that <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-context" title="pango_cairo_update_context ()"><code class="function">pango_cairo_update_context()</code></a>
+derives from the target surface.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>options</code></em> :</span></p></td>
+<td> a <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-options.html#cairo-font-options-t"
+><span class="type">cairo_font_options_t</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to unset any previously set
+          options. A copy is made.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-context-get-font-options"></a><h3>pango_cairo_context_get_font_options ()</h3>
+<pre class="programlisting">const <a
+href="/usr/share/gtk-doc/html/cairo/cairo-font-options.html#cairo-font-options-t"
+>cairo_font_options_t</a> * pango_cairo_context_get_font_options
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieves any font rendering options previously set with
+<code class="function">pango_cairo_font_map_set_font_options()</code>. This function does not report options
+that are derived from the target surface by <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-context" title="pango_cairo_update_context ()"><code class="function">pango_cairo_update_context()</code></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the font options previously set on the context, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+  if no options have been set. This value is owned by the context
+  and must not be modified or freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoCairoShapeRendererFunc"></a><h3>PangoCairoShapeRendererFunc ()</h3>
+<pre class="programlisting">void                (*PangoCairoShapeRendererFunc)      (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape">PangoAttrShape</a> *attr,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> do_path,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+Function type for rendering attributes of type <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"><code class="literal">PANGO_ATTR_SHAPE</code></a>
+with Pango's Cairo renderer.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td>a Cairo context with current point set to where the shape should
+     be rendered
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td>the <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"><code class="literal">PANGO_ATTR_SHAPE</code></a> to render
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>do_path</code></em> :</span></p></td>
+<td>whether only the shape path should be appended to current
+          path of <em class="parameter"><code>cr</code></em> and no filling/stroking done.  This will be set
+         to <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> when called from <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-layout-path" title="pango_cairo_layout_path ()"><code class="function">pango_cairo_layout_path()</code></a> and
+         <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-layout-line-path" title="pango_cairo_layout_line_path ()"><code class="function">pango_cairo_layout_line_path()</code></a> rendering functions.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>user data passed to <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer" title="pango_cairo_context_set_shape_renderer ()"><code class="function">pango_cairo_context_set_shape_renderer()</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-context-set-shape-renderer"></a><h3>pango_cairo_context_set_shape_renderer ()</h3>
+<pre class="programlisting">void                pango_cairo_context_set_shape_renderer
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()">PangoCairoShapeRendererFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> dnotify);</pre>
+<p>
+Sets callback function for context to use for rendering attributes
+of type <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"><code class="literal">PANGO_ATTR_SHAPE</code></a>.  See <a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()"><span class="type">PangoCairoShapeRendererFunc</span></a> for
+details.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td> Callback function for rendering attributes of type
+<a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"><code class="literal">PANGO_ATTR_SHAPE</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to disable shape rendering.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> User data that will be passed to <em class="parameter"><code>func</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dnotify</code></em> :</span></p></td>
+<td> Callback that will be called when the
+          context is freed to release <em class="parameter"><code>data</code></em>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-context-get-shape-renderer"></a><h3>pango_cairo_context_get_shape_renderer ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()">PangoCairoShapeRendererFunc</a>  pango_cairo_context_get_shape_renderer
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> *data);</pre>
+<p>
+Sets callback function for context to use for rendering attributes
+of type <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"><code class="literal">PANGO_ATTR_SHAPE</code></a>.  See <a class="link" href="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc" title="PangoCairoShapeRendererFunc ()"><span class="type">PangoCairoShapeRendererFunc</span></a> for
+details.
+</p>
+<p>
+Retrieves callback function and associated user data for rendering
+attributes of type <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"><code class="literal">PANGO_ATTR_SHAPE</code></a> as set by
+<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer" title="pango_cairo_context_set_shape_renderer ()"><code class="function">pango_cairo_context_set_shape_renderer()</code></a>, if any.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> Pointer to <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+><span class="type">gpointer</span></a> to return user data
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the shape rendering callback previously set on the context, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+  if no shape rendering callback have been set.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-create-context"></a><h3>pango_cairo_create_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_cairo_create_context          (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr);</pre>
+<p>
+Creates a context object set up to match the current transformation
+and target surface of the Cairo context.  This context can then be
+used to create a layout using <a class="link" href="pango-Layout-Objects.html#pango-layout-new" title="pango_layout_new ()"><code class="function">pango_layout_new()</code></a>.
+</p>
+<p>
+This function is a convenience function that creates a context using
+the default font map, then updates it to <em class="parameter"><code>cr</code></em>.  If you just need to
+create a layout for use with <em class="parameter"><code>cr</code></em> and do not need to access <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+directly, you can use <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-create-layout" title="pango_cairo_create_layout ()"><code class="function">pango_cairo_create_layout()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly created <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>. Free with
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-update-context"></a><h3>pango_cairo_update_context ()</h3>
+<pre class="programlisting">void                pango_cairo_update_context          (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Updates a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> previously created for use with Cairo to
+match the current transformation and target surface of a Cairo
+context. If any layouts have been created for the context,
+it's necessary to call <a class="link" href="pango-Layout-Objects.html#pango-layout-context-changed" title="pango_layout_context_changed ()"><code class="function">pango_layout_context_changed()</code></a> on those
+layouts.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, from a pangocairo font map
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-create-layout"></a><h3>pango_cairo_create_layout ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       pango_cairo_create_layout           (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr);</pre>
+<p>
+Creates a layout object set up to match the current transformation
+and target surface of the Cairo context.  This layout can then be
+used for text measurement with functions like
+<a class="link" href="pango-Layout-Objects.html#pango-layout-get-size" title="pango_layout_get_size ()"><code class="function">pango_layout_get_size()</code></a> or drawing with functions like
+<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-layout" title="pango_cairo_show_layout ()"><code class="function">pango_cairo_show_layout()</code></a>. If you change the transformation
+or target surface for <em class="parameter"><code>cr</code></em>, you need to call <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-update-layout" title="pango_cairo_update_layout ()"><code class="function">pango_cairo_update_layout()</code></a>
+</p>
+<p>
+This function is the most convenient way to use Cairo with Pango,
+however it is slightly inefficient since it creates a separate
+<a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> object for each layout. This might matter in an
+application that was laying out large amounts of text.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly created <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>. Free with
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-update-layout"></a><h3>pango_cairo_update_layout ()</h3>
+<pre class="programlisting">void                pango_cairo_update_layout           (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Updates the private <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> created with
+<a class="link" href="pango-Cairo-Rendering.html#pango-cairo-create-layout" title="pango_cairo_create_layout ()"><code class="function">pango_cairo_create_layout()</code></a> to match the current transformation
+and target surface of a Cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>, from <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-create-layout" title="pango_cairo_create_layout ()"><code class="function">pango_cairo_create_layout()</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-show-glyph-string"></a><h3>pango_cairo_show_glyph_string ()</h3>
+<pre class="programlisting">void                pango_cairo_show_glyph_string       (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);</pre>
+<p>
+Draws the glyphs in <em class="parameter"><code>glyphs</code></em> in the specified cairo context.
+The origin of the glyphs (the left edge of the baseline) will
+be drawn at the current point of the cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> from a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-show-glyph-item"></a><h3>pango_cairo_show_glyph_item ()</h3>
+<pre class="programlisting">void                pango_cairo_show_glyph_item         (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item);</pre>
+<p>
+Draws the glyphs in <em class="parameter"><code>glyph_item</code></em> in the specified cairo context,
+embedding the text associated with the glyphs in the output if the
+output format supports it (PDF for example), otherwise it acts
+similar to <a class="link" href="pango-Cairo-Rendering.html#pango-cairo-show-glyph-string" title="pango_cairo_show_glyph_string ()"><code class="function">pango_cairo_show_glyph_string()</code></a>.
+</p>
+<p>
+The origin of the glyphs (the left edge of the baseline) will
+be drawn at the current point of the cairo context.
+</p>
+<p>
+Note that <em class="parameter"><code>text</code></em> is the start of the text for layout, which is then
+indexed by <code class="literal"><em class="parameter"><code>glyph_item-&gt;item-&gt;offset</code></em></code>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> the UTF-8 text that <em class="parameter"><code>glyph_item</code></em> refers to
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-show-layout-line"></a><h3>pango_cairo_show_layout_line ()</h3>
+<pre class="programlisting">void                pango_cairo_show_layout_line        (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);</pre>
+<p>
+Draws a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> in the specified cairo context.
+The origin of the glyphs (the left edge of the line) will
+be drawn at the current point of the cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-show-layout"></a><h3>pango_cairo_show_layout ()</h3>
+<pre class="programlisting">void                pango_cairo_show_layout             (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Draws a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> in the specified cairo context.
+The top-left corner of the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> will be drawn
+at the current point of the cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a Pango layout
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-show-error-underline"></a><h3>pango_cairo_show_error_underline ()</h3>
+<pre class="programlisting">void                pango_cairo_show_error_underline    (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         double x,
+                                                         double y,
+                                                         double width,
+                                                         double height);</pre>
+<p>
+Draw a squiggly line in the specified cairo context that approximately
+covers the given rectangle in the style of an underline used to indicate a
+spelling error.  (The width of the underline is rounded to an integer
+number of up/down segments and the resulting rectangle is centered in the
+original rectangle)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> The X coordinate of one corner of the rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> The Y coordinate of one corner of the rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> Non-negative width of the rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> Non-negative height of the rectangle
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.14</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-glyph-string-path"></a><h3>pango_cairo_glyph_string_path ()</h3>
+<pre class="programlisting">void                pango_cairo_glyph_string_path       (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);</pre>
+<p>
+Adds the glyphs in <em class="parameter"><code>glyphs</code></em> to the current path in the specified
+cairo context. The origin of the glyphs (the left edge of the baseline)
+will be at the current point of the cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> from a <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap"><span class="type">PangoCairoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-layout-line-path"></a><h3>pango_cairo_layout_line_path ()</h3>
+<pre class="programlisting">void                pango_cairo_layout_line_path        (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);</pre>
+<p>
+Adds the text in <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> to the current path in the
+specified cairo context.  The origin of the glyphs (the left edge
+of the line) will be at the current point of the cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-layout-path"></a><h3>pango_cairo_layout_path ()</h3>
+<pre class="programlisting">void                pango_cairo_layout_path             (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Adds the text in a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> to the current path in the
+specified cairo context.  The top-left corner of the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+will be at the current point of the cairo context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a Pango layout
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-cairo-error-underline-path"></a><h3>pango_cairo_error_underline_path ()</h3>
+<pre class="programlisting">void                pango_cairo_error_underline_path    (<a
+href="/usr/share/gtk-doc/html/cairo/cairo-context.html#cairo-t"
+>cairo_t</a> *cr,
+                                                         double x,
+                                                         double y,
+                                                         double width,
+                                                         double height);</pre>
+<p>
+Add a squiggly line to the current path in the specified cairo context that
+approximately covers the given rectangle in the style of an underline used
+to indicate a spelling error.  (The width of the underline is rounded to an
+integer number of up/down segments and the resulting rectangle is centered
+in the original rectangle)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cr</code></em> :</span></p></td>
+<td> a Cairo context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> The X coordinate of one corner of the rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> The Y coordinate of one corner of the rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> Non-negative width of the rectangle
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> Non-negative height of the rectangle
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.14</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Coverage-Maps.html b/docs/html/pango-Coverage-Maps.html
new file mode 100755 (executable)
index 0000000..504ce4b
--- /dev/null
@@ -0,0 +1,417 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Coverage Maps</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="pango-OpenType-Font-Handling.html" title="OpenType Font Handling">
+<link rel="next" href="pango-Engines.html" title="Engines">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-OpenType-Font-Handling.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Engines.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Coverage-Maps.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Coverage-Maps.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Coverage-Maps"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Coverage-Maps.top_of_page"></a>Coverage Maps</span></h2>
+<p>Coverage Maps — Unicode character range coverage storage</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Coverage-Maps.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+enum                <a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel">PangoCoverageLevel</a>;
+#define             <a class="link" href="pango-Coverage-Maps.html#PANGO-TYPE-COVERAGE-LEVEL--CAPS" title="PANGO_TYPE_COVERAGE_LEVEL">PANGO_TYPE_COVERAGE_LEVEL</a>
+                    <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a>;
+
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     <a class="link" href="pango-Coverage-Maps.html#pango-coverage-new" title="pango_coverage_new ()">pango_coverage_new</a>                  (void);
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     <a class="link" href="pango-Coverage-Maps.html#pango-coverage-ref" title="pango_coverage_ref ()">pango_coverage_ref</a>                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage);
+void                <a class="link" href="pango-Coverage-Maps.html#pango-coverage-unref" title="pango_coverage_unref ()">pango_coverage_unref</a>                (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage);
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     <a class="link" href="pango-Coverage-Maps.html#pango-coverage-copy" title="pango_coverage_copy ()">pango_coverage_copy</a>                 (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage);
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel">PangoCoverageLevel</a>  <a class="link" href="pango-Coverage-Maps.html#pango-coverage-get" title="pango_coverage_get ()">pango_coverage_get</a>                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         int index_);
+void                <a class="link" href="pango-Coverage-Maps.html#pango-coverage-max" title="pango_coverage_max ()">pango_coverage_max</a>                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *other);
+void                <a class="link" href="pango-Coverage-Maps.html#pango-coverage-set" title="pango_coverage_set ()">pango_coverage_set</a>                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         int index_,
+                                                         <a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel">PangoCoverageLevel</a> level);
+void                <a class="link" href="pango-Coverage-Maps.html#pango-coverage-to-bytes" title="pango_coverage_to_bytes ()">pango_coverage_to_bytes</a>             (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"
+>guchar</a> **bytes,
+                                                         int *n_bytes);
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     <a class="link" href="pango-Coverage-Maps.html#pango-coverage-from-bytes" title="pango_coverage_from_bytes ()">pango_coverage_from_bytes</a>           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"
+>guchar</a> *bytes,
+                                                         int n_bytes);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Coverage-Maps.description"></a><h2>Description</h2>
+<p>
+It is often necessary in Pango to determine if a particular font can
+represent a particular character, and also how well it can represent
+that character. The <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> is a data structure that is used
+to represent that information.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Coverage-Maps.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoCoverageLevel"></a><h3>enum PangoCoverageLevel</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_COVERAGE_NONE,
+  PANGO_COVERAGE_FALLBACK,
+  PANGO_COVERAGE_APPROXIMATE,
+  PANGO_COVERAGE_EXACT
+} PangoCoverageLevel;
+</pre>
+<p>
+Used to indicate how well a font can represent a particular Unicode
+character point for a particular script.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-COVERAGE-NONE--CAPS"></a><span class="term"><code class="literal">PANGO_COVERAGE_NONE</code></span></p></td>
+<td>The character is not representable with the font.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-COVERAGE-FALLBACK--CAPS"></a><span class="term"><code class="literal">PANGO_COVERAGE_FALLBACK</code></span></p></td>
+<td>The character is represented in a way that may be
+                          comprehensible but is not the correct graphical form.
+                          For instance, a Hangul character represented as a
+                          a sequence of Jamos, or a Latin transliteration of
+                          a Cyrillic word.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-COVERAGE-APPROXIMATE--CAPS"></a><span class="term"><code class="literal">PANGO_COVERAGE_APPROXIMATE</code></span></p></td>
+<td>The character is represented as basically the correct
+                             graphical form, but with a stylistic variant inappropriate for
+                             the current script.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-COVERAGE-EXACT--CAPS"></a><span class="term"><code class="literal">PANGO_COVERAGE_EXACT</code></span></p></td>
+<td>The character is represented as the correct graphical form.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-COVERAGE-LEVEL--CAPS"></a><h3>PANGO_TYPE_COVERAGE_LEVEL</h3>
+<pre class="programlisting">#define PANGO_TYPE_COVERAGE_LEVEL (pango_coverage_level_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel"><span class="type">PangoCoverageLevel</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoCoverage"></a><h3>PangoCoverage</h3>
+<pre class="programlisting">typedef struct _PangoCoverage PangoCoverage;</pre>
+<p>
+The <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> structure represents a map from Unicode characters
+to <a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel"><span class="type">PangoCoverageLevel</span></a>. It is an opaque structure with no public fields.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-new"></a><h3>pango_coverage_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     pango_coverage_new                  (void);</pre>
+<p>
+Create a new <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>,
+              initialized to <a class="link" href="pango-Coverage-Maps.html#PANGO-COVERAGE-NONE--CAPS"><code class="literal">PANGO_COVERAGE_NONE</code></a>
+              with a reference count of one, which
+              should be freed with <a class="link" href="pango-Coverage-Maps.html#pango-coverage-unref" title="pango_coverage_unref ()"><code class="function">pango_coverage_unref()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-ref"></a><h3>pango_coverage_ref ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     pango_coverage_ref                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage);</pre>
+<p>
+Increase the reference count on the <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> by one</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <em class="parameter"><code>coverage</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-unref"></a><h3>pango_coverage_unref ()</h3>
+<pre class="programlisting">void                pango_coverage_unref                (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage);</pre>
+<p>
+Decrease the reference count on the <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> by one.
+If the result is zero, free the coverage and all associated memory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-copy"></a><h3>pango_coverage_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     pango_coverage_copy                 (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage);</pre>
+<p>
+Copy an existing <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>. (This function may now be unnecessary
+since we refcount the structure. File a bug if you use it.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>,
+              with a reference count of one, which
+              should be freed with <a class="link" href="pango-Coverage-Maps.html#pango-coverage-unref" title="pango_coverage_unref ()"><code class="function">pango_coverage_unref()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-get"></a><h3>pango_coverage_get ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel">PangoCoverageLevel</a>  pango_coverage_get                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         int index_);</pre>
+<p>
+Determine whether a particular index is covered by <em class="parameter"><code>coverage</code></em></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td> the index to check
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the coverage level of <em class="parameter"><code>coverage</code></em> for character <em class="parameter"><code>index_</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-max"></a><h3>pango_coverage_max ()</h3>
+<pre class="programlisting">void                pango_coverage_max                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *other);</pre>
+<p>
+Set the coverage for each index in <em class="parameter"><code>coverage</code></em> to be the max (better)
+value of the current coverage for the index and the coverage for
+the corresponding index in <em class="parameter"><code>other</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
+<td> another <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-set"></a><h3>pango_coverage_set ()</h3>
+<pre class="programlisting">void                pango_coverage_set                  (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         int index_,
+                                                         <a class="link" href="pango-Coverage-Maps.html#PangoCoverageLevel" title="enum PangoCoverageLevel">PangoCoverageLevel</a> level);</pre>
+<p>
+Modify a particular index within <em class="parameter"><code>coverage</code></em></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td> the index to modify
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>level</code></em> :</span></p></td>
+<td> the new level for <em class="parameter"><code>index_</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-to-bytes"></a><h3>pango_coverage_to_bytes ()</h3>
+<pre class="programlisting">void                pango_coverage_to_bytes             (<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *coverage,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"
+>guchar</a> **bytes,
+                                                         int *n_bytes);</pre>
+<p>
+Convert a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> structure into a flat binary format</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>coverage</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bytes</code></em> :</span></p></td>
+<td> location to store result (must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_bytes</code></em> :</span></p></td>
+<td> location to store size of result
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-coverage-from-bytes"></a><h3>pango_coverage_from_bytes ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     pango_coverage_from_bytes           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guchar"
+>guchar</a> *bytes,
+                                                         int n_bytes);</pre>
+<p>
+Convert data generated from <code class="function">pango_converage_to_bytes()</code> back
+to a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bytes</code></em> :</span></p></td>
+<td> binary data representing a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_bytes</code></em> :</span></p></td>
+<td> the size of <em class="parameter"><code>bytes</code></em> in bytes
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if
+              the data was invalid.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Engines.html b/docs/html/pango-Engines.html
new file mode 100755 (executable)
index 0000000..db02a14
--- /dev/null
@@ -0,0 +1,341 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Engines</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="pango-Coverage-Maps.html" title="Coverage Maps">
+<link rel="next" href="PangoEngineLang.html" title="PangoEngineLang">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Coverage-Maps.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoEngineLang.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Engines.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Engines.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-Engines.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Engines"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Engines.top_of_page"></a>Engines</span></h2>
+<p>Engines — Language-specific and rendering-system-specific processing</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Engines.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoEngine"></a><pre class="synopsis">
+                    <a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo">PangoEngineInfo</a>;
+                    <a class="link" href="pango-Engines.html#PangoEngineScriptInfo" title="PangoEngineScriptInfo">PangoEngineScriptInfo</a>;
+                    <a class="link" href="pango-Engines.html#PangoEngine-struct" title="PangoEngine">PangoEngine</a>;
+                    <a class="link" href="pango-Engines.html#PangoEngineClass" title="PangoEngineClass">PangoEngineClass</a>;
+#define             <a class="link" href="pango-Engines.html#PANGO-RENDER-TYPE-NONE--CAPS" title="PANGO_RENDER_TYPE_NONE">PANGO_RENDER_TYPE_NONE</a>
+void                <a class="link" href="pango-Engines.html#script-engine-list" title="script_engine_list ()">script_engine_list</a>                  (<a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo">PangoEngineInfo</a> **engines,
+                                                         int *n_engines);
+void                <a class="link" href="pango-Engines.html#script-engine-init" title="script_engine_init ()">script_engine_init</a>                  (<a
+href="http://library.gnome.org/devel/gobject/unstable/GTypeModule.html"
+>GTypeModule</a> *module);
+void                <a class="link" href="pango-Engines.html#script-engine-exit" title="script_engine_exit ()">script_engine_exit</a>                  (void);
+<a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a> *       <a class="link" href="pango-Engines.html#script-engine-create" title="script_engine_create ()">script_engine_create</a>                (const char *id);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Engines.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoEngine
+         +----<a class="link" href="PangoEngineLang.html" title="PangoEngineLang">PangoEngineLang</a>
+         +----<a class="link" href="PangoEngineShape.html" title="PangoEngineShape">PangoEngineShape</a>
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Engines.description"></a><h2>Description</h2>
+<p>
+Pango utilizes a module architecture in which the language-specific
+and render-system-specific components are provided by loadable
+modules. Each loadable module supplies one or more
+<em class="firstterm">engines</em>.  Each <em class="firstterm">engine</em>
+has an associated <em class="firstterm">engine type</em> and
+<em class="firstterm">render type</em>. These two types are represented by
+strings.
+</p>
+<p>
+Each dynamically-loaded module exports several functions which provide
+the public API. These functions are <a class="link" href="pango-Engines.html#script-engine-list" title="script_engine_list ()"><code class="function">script_engine_list()</code></a>,
+<a class="link" href="pango-Engines.html#script-engine-init" title="script_engine_init ()"><code class="function">script_engine_init()</code></a> and script_engine_exit, and
+<a class="link" href="pango-Engines.html#script-engine-create" title="script_engine_create ()"><code class="function">script_engine_create()</code></a>. The latter three functions are used when
+creating engines from the module at run time, while the first
+function is used when building a catalog of all available modules.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Engines.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoEngineInfo"></a><h3>PangoEngineInfo</h3>
+<pre class="programlisting">typedef struct {
+  const gchar *id;
+  const gchar *engine_type;
+  const gchar *render_type;
+  PangoEngineScriptInfo *scripts;
+  gint n_scripts;
+} PangoEngineInfo;
+</pre>
+<p>
+The <a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo"><span class="type">PangoEngineInfo</span></a> structure contains information about a particular
+engine. It contains the following fields:
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>id</code></em>;</span></p></td>
+<td>a unique string ID for the engine.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>engine_type</code></em>;</span></p></td>
+<td>a string identifying the engine type.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>render_type</code></em>;</span></p></td>
+<td>a string identifying the render type.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Engines.html#PangoEngineScriptInfo" title="PangoEngineScriptInfo">PangoEngineScriptInfo</a> *<em class="structfield"><code>scripts</code></em>;</span></p></td>
+<td>array of scripts this engine supports.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>n_scripts</code></em>;</span></p></td>
+<td>number of items in <em class="parameter"><code>scripts</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoEngineScriptInfo"></a><h3>PangoEngineScriptInfo</h3>
+<pre class="programlisting">typedef struct {
+  PangoScript script;
+  const gchar *langs;
+} PangoEngineScriptInfo;
+</pre>
+<p>
+The <a class="link" href="pango-Engines.html#PangoEngineScriptInfo" title="PangoEngineScriptInfo"><span class="type">PangoEngineScriptInfo</span></a> structure contains
+information about how the shaper covers a particular
+script.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> <em class="structfield"><code>script</code></em>;</span></p></td>
+<td>a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>. The value <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-COMMON--CAPS"><code class="literal">PANGO_SCRIPT_COMMON</code></a> has
+        the special meaning here of "all scripts"
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>langs</code></em>;</span></p></td>
+<td>a semicolon separated list of languages that this
+        engine handles for this script. This may be empty,
+        in which case the engine is saying that it is a
+        fallback choice for all languages for this range,
+        but should not be used if another engine
+        indicates that it is specific for the language for
+        a given code point. An entry in this list of "*"
+        indicates that this engine is specific to all
+        languages for this range.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoEngine-struct"></a><h3>PangoEngine</h3>
+<pre class="programlisting">typedef struct _PangoEngine PangoEngine;</pre>
+<p>
+<a class="link" href="pango-Engines.html#PangoEngine"><span class="type">PangoEngine</span></a> is the base class for all types of language and
+script specific engines. It has no functionality by itself.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoEngineClass"></a><h3>PangoEngineClass</h3>
+<pre class="programlisting">typedef struct {
+} PangoEngineClass;
+</pre>
+<p>
+Class structure for <a class="link" href="pango-Engines.html#PangoEngine"><span class="type">PangoEngine</span></a></p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-NONE--CAPS"></a><h3>PANGO_RENDER_TYPE_NONE</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_NONE "PangoRenderNone"
+</pre>
+<p>
+A string constant defining the render type
+for engines that are not rendering-system
+specific.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="script-engine-list"></a><h3>script_engine_list ()</h3>
+<pre class="programlisting">void                script_engine_list                  (<a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo">PangoEngineInfo</a> **engines,
+                                                         int *n_engines);</pre>
+<p>
+Function to be provided by a module to list the engines that the
+module supplies. The function stores a pointer to an array
+of <a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo"><span class="type">PangoEngineInfo</span></a> structures and the length of that array in
+the given location.
+</p>
+<p>
+Note that <a class="link" href="pango-Engines.html#script-engine-init" title="script_engine_init ()"><code class="function">script_engine_init()</code></a> will not be called before this
+function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>engines</code></em> :</span></p></td>
+<td> location to store a pointer to an array of engines.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_engines</code></em> :</span></p></td>
+<td> location to store the number of elements in <em class="parameter"><code>engines</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="script-engine-init"></a><h3>script_engine_init ()</h3>
+<pre class="programlisting">void                script_engine_init                  (<a
+href="http://library.gnome.org/devel/gobject/unstable/GTypeModule.html"
+>GTypeModule</a> *module);</pre>
+<p>
+Function to be provided by a module to register any
+GObject types in the module.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>module</code></em> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/gobject/unstable/GTypeModule.html"
+><span class="type">GTypeModule</span></a> structure used to associate any
+ GObject types created in this module with the module.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="script-engine-exit"></a><h3>script_engine_exit ()</h3>
+<pre class="programlisting">void                script_engine_exit                  (void);</pre>
+<p>
+Function to be provided by the module that is called
+when the module is unloading. Frequently does nothing.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="script-engine-create"></a><h3>script_engine_create ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a> *       script_engine_create                (const char *id);</pre>
+<p>
+Function to be provided by the module to create an instance
+of one of the engines implemented by the module.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>id</code></em> :</span></p></td>
+<td> the ID of an engine as reported by script_engine_list.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly created <a class="link" href="pango-Engines.html#PangoEngine"><span class="type">PangoEngine</span></a> of the specified
+ type, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if an error occurred. (In normal operation,
+ a module should not return <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>. A <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> return is only
+ acceptable in the case where system misconfiguration or
+ bugs in the driver routine are encountered.)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Fonts.html b/docs/html/pango-Fonts.html
new file mode 100755 (executable)
index 0000000..a020e3d
--- /dev/null
@@ -0,0 +1,3465 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Fonts</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Glyph-Storage.html" title="Glyph Storage">
+<link rel="next" href="pango-Text-Attributes.html" title="Text Attributes">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Glyph-Storage.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Text-Attributes.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Fonts.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Fonts.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-Fonts.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                 | 
+                <a href="#pango-Fonts.derived-interfaces" class="shortcut">Known Derived Interfaces</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Fonts"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Fonts.top_of_page"></a>Fonts</span></h2>
+<p>Fonts — Structures representing abstract fonts</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Fonts.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoFont"></a><a name="PangoFontFamily"></a><a name="PangoFontFace"></a><a name="PangoFontMap"></a><a name="PangoFontset"></a><a name="PangoFontsetSimple"></a><pre class="synopsis">
+                    <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT-DESCRIPTION--CAPS" title="PANGO_TYPE_FONT_DESCRIPTION">PANGO_TYPE_FONT_DESCRIPTION</a>
+enum                <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-STYLE--CAPS" title="PANGO_TYPE_STYLE">PANGO_TYPE_STYLE</a>
+enum                <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-WEIGHT--CAPS" title="PANGO_TYPE_WEIGHT">PANGO_TYPE_WEIGHT</a>
+enum                <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-VARIANT--CAPS" title="PANGO_TYPE_VARIANT">PANGO_TYPE_VARIANT</a>
+enum                <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-STRETCH--CAPS" title="PANGO_TYPE_STRETCH">PANGO_TYPE_STRETCH</a>
+enum                <a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask">PangoFontMask</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT-MASK--CAPS" title="PANGO_TYPE_FONT_MASK">PANGO_TYPE_FONT_MASK</a>
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-description-new" title="pango_font_description_new ()">pango_font_description_new</a>       (void);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-description-copy" title="pango_font_description_copy ()">pango_font_description_copy</a>      (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-description-copy-static" title="pango_font_description_copy_static ()">pango_font_description_copy_static</a>
+                                                        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="pango-Fonts.html#pango-font-description-hash" title="pango_font_description_hash ()">pango_font_description_hash</a>         (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Fonts.html#pango-font-description-equal" title="pango_font_description_equal ()">pango_font_description_equal</a>        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc1,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc2);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()">pango_font_description_free</a>         (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-descriptions-free" title="pango_font_descriptions_free ()">pango_font_descriptions_free</a>        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> **descs,
+                                                         int n_descs);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-family" title="pango_font_description_set_family ()">pango_font_description_set_family</a>   (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const char *family);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-family-static" title="pango_font_description_set_family_static ()">pango_font_description_set_family_static</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const char *family);
+const char *        <a class="link" href="pango-Fonts.html#pango-font-description-get-family" title="pango_font_description_get_family ()">pango_font_description_get_family</a>   (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-style" title="pango_font_description_set_style ()">pango_font_description_set_style</a>    (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a> style);
+<a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a>          <a class="link" href="pango-Fonts.html#pango-font-description-get-style" title="pango_font_description_get_style ()">pango_font_description_get_style</a>    (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-variant" title="pango_font_description_set_variant ()">pango_font_description_set_variant</a>  (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a> variant);
+<a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a>        <a class="link" href="pango-Fonts.html#pango-font-description-get-variant" title="pango_font_description_get_variant ()">pango_font_description_get_variant</a>  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-weight" title="pango_font_description_set_weight ()">pango_font_description_set_weight</a>   (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a> weight);
+<a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a>         <a class="link" href="pango-Fonts.html#pango-font-description-get-weight" title="pango_font_description_get_weight ()">pango_font_description_get_weight</a>   (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-stretch" title="pango_font_description_set_stretch ()">pango_font_description_set_stretch</a>  (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a> stretch);
+<a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a>        <a class="link" href="pango-Fonts.html#pango-font-description-get-stretch" title="pango_font_description_get_stretch ()">pango_font_description_get_stretch</a>  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-size" title="pango_font_description_set_size ()">pango_font_description_set_size</a>     (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> size);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="pango-Fonts.html#pango-font-description-get-size" title="pango_font_description_get_size ()">pango_font_description_get_size</a>     (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-absolute-size" title="pango_font_description_set_absolute_size ()">pango_font_description_set_absolute_size</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         double size);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Fonts.html#pango-font-description-get-size-is-absolute" title="pango_font_description_get_size_is_absolute ()">pango_font_description_get_size_is_absolute</a>
+                                                        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-set-gravity" title="pango_font_description_set_gravity ()">pango_font_description_set_gravity</a>  (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        <a class="link" href="pango-Fonts.html#pango-font-description-get-gravity" title="pango_font_description_get_gravity ()">pango_font_description_get_gravity</a>  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask">PangoFontMask</a>       <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()">pango_font_description_get_set_fields</a>
+                                                        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-unset-fields" title="pango_font_description_unset_fields ()">pango_font_description_unset_fields</a> (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask">PangoFontMask</a> to_unset);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-merge" title="pango_font_description_merge ()">pango_font_description_merge</a>        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc_to_merge,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> replace_existing);
+void                <a class="link" href="pango-Fonts.html#pango-font-description-merge-static" title="pango_font_description_merge_static ()">pango_font_description_merge_static</a> (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc_to_merge,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> replace_existing);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Fonts.html#pango-font-description-better-match" title="pango_font_description_better_match ()">pango_font_description_better_match</a> (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *old_match,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *new_match);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-description-from-string" title="pango_font_description_from_string ()">pango_font_description_from_string</a>
+                                                        (const char *str);
+char *              <a class="link" href="pango-Fonts.html#pango-font-description-to-string" title="pango_font_description_to_string ()">pango_font_description_to_string</a>    (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+char *              <a class="link" href="pango-Fonts.html#pango-font-description-to-filename" title="pango_font_description_to_filename ()">pango_font_description_to_filename</a>  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+
+                    <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT-METRICS--CAPS" title="PANGO_TYPE_FONT_METRICS">PANGO_TYPE_FONT_METRICS</a>
+<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  <a class="link" href="pango-Fonts.html#pango-font-metrics-ref" title="pango_font_metrics_ref ()">pango_font_metrics_ref</a>              (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+void                <a class="link" href="pango-Fonts.html#pango-font-metrics-unref" title="pango_font_metrics_unref ()">pango_font_metrics_unref</a>            (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-ascent" title="pango_font_metrics_get_ascent ()">pango_font_metrics_get_ascent</a>       (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-descent" title="pango_font_metrics_get_descent ()">pango_font_metrics_get_descent</a>      (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-approximate-char-width" title="pango_font_metrics_get_approximate_char_width ()">pango_font_metrics_get_approximate_char_width</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-approximate-digit-width" title="pango_font_metrics_get_approximate_digit_width ()">pango_font_metrics_get_approximate_digit_width</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-underline-thickness" title="pango_font_metrics_get_underline_thickness ()">pango_font_metrics_get_underline_thickness</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-underline-position" title="pango_font_metrics_get_underline_position ()">pango_font_metrics_get_underline_position</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-strikethrough-thickness" title="pango_font_metrics_get_strikethrough_thickness ()">pango_font_metrics_get_strikethrough_thickness</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+int                 <a class="link" href="pango-Fonts.html#pango-font-metrics-get-strikethrough-position" title="pango_font_metrics_get_strikethrough_position ()">pango_font_metrics_get_strikethrough_position</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);
+
+                    <a class="link" href="pango-Fonts.html#PangoFont-struct" title="PangoFont">PangoFont</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT--CAPS" title="PANGO_TYPE_FONT">PANGO_TYPE_FONT</a>
+#define             <a class="link" href="pango-Fonts.html#PANGO-FONT--CAPS" title="PANGO_FONT()">PANGO_FONT</a>                          (object)
+#define             <a class="link" href="pango-Fonts.html#PANGO-IS-FONT--CAPS" title="PANGO_IS_FONT()">PANGO_IS_FONT</a>                       (object)
+<a class="link" href="PangoEngineShape.html" title="PangoEngineShape">PangoEngineShape</a> *  <a class="link" href="pango-Fonts.html#pango-font-find-shaper" title="pango_font_find_shaper ()">pango_font_find_shaper</a>              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"
+>guint32</a> ch);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-describe" title="pango_font_describe ()">pango_font_describe</a>              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-describe-with-absolute-size" title="pango_font_describe_with_absolute_size ()">pango_font_describe_with_absolute_size</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     <a class="link" href="pango-Fonts.html#pango-font-get-coverage" title="pango_font_get_coverage ()">pango_font_get_coverage</a>             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+void                <a class="link" href="pango-Fonts.html#pango-font-get-glyph-extents" title="pango_font_get_glyph_extents ()">pango_font_get_glyph_extents</a>        (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> glyph,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  <a class="link" href="pango-Fonts.html#pango-font-get-metrics" title="pango_font_get_metrics ()">pango_font_get_metrics</a>              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Fonts.html#pango-font-get-font-map" title="pango_font_get_font_map ()">pango_font_get_font_map</a>             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+
+                    <a class="link" href="pango-Fonts.html#PangoFontFamily-struct" title="PangoFontFamily">PangoFontFamily</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT-FAMILY--CAPS" title="PANGO_TYPE_FONT_FAMILY">PANGO_TYPE_FONT_FAMILY</a>
+#define             <a class="link" href="pango-Fonts.html#PANGO-FONT-FAMILY--CAPS" title="PANGO_FONT_FAMILY()">PANGO_FONT_FAMILY</a>                   (object)
+#define             <a class="link" href="pango-Fonts.html#PANGO-IS-FONT-FAMILY--CAPS" title="PANGO_IS_FONT_FAMILY()">PANGO_IS_FONT_FAMILY</a>                (object)
+const char *        <a class="link" href="pango-Fonts.html#pango-font-family-get-name" title="pango_font_family_get_name ()">pango_font_family_get_name</a>          (<a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> *family);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Fonts.html#pango-font-family-is-monospace" title="pango_font_family_is_monospace ()">pango_font_family_is_monospace</a>      (<a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> *family);
+void                <a class="link" href="pango-Fonts.html#pango-font-family-list-faces" title="pango_font_family_list_faces ()">pango_font_family_list_faces</a>        (<a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> *family,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> ***faces,
+                                                         int *n_faces);
+
+                    <a class="link" href="pango-Fonts.html#PangoFontFace-struct" title="PangoFontFace">PangoFontFace</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT-FACE--CAPS" title="PANGO_TYPE_FONT_FACE">PANGO_TYPE_FONT_FACE</a>
+#define             <a class="link" href="pango-Fonts.html#PANGO-FONT-FACE--CAPS" title="PANGO_FONT_FACE()">PANGO_FONT_FACE</a>                     (object)
+#define             <a class="link" href="pango-Fonts.html#PANGO-IS-FONT-FACE--CAPS" title="PANGO_IS_FONT_FACE()">PANGO_IS_FONT_FACE</a>                  (object)
+const char *        <a class="link" href="pango-Fonts.html#pango-font-face-get-face-name" title="pango_font_face_get_face_name ()">pango_font_face_get_face_name</a>       (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face);
+void                <a class="link" href="pango-Fonts.html#pango-font-face-list-sizes" title="pango_font_face_list_sizes ()">pango_font_face_list_sizes</a>          (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face,
+                                                         int **sizes,
+                                                         int *n_sizes);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Fonts.html#pango-font-face-describe" title="pango_font_face_describe ()">pango_font_face_describe</a>         (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Fonts.html#pango-font-face-is-synthesized" title="pango_font_face_is_synthesized ()">pango_font_face_is_synthesized</a>      (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face);
+
+                    <a class="link" href="pango-Fonts.html#PangoFontMap-struct" title="PangoFontMap">PangoFontMap</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONT-MAP--CAPS" title="PANGO_TYPE_FONT_MAP">PANGO_TYPE_FONT_MAP</a>
+#define             <a class="link" href="pango-Fonts.html#PANGO-FONT-MAP--CAPS" title="PANGO_FONT_MAP()">PANGO_FONT_MAP</a>                      (object)
+#define             <a class="link" href="pango-Fonts.html#PANGO-IS-FONT-MAP--CAPS" title="PANGO_IS_FONT_MAP()">PANGO_IS_FONT_MAP</a>                   (object)
+                    <a class="link" href="pango-Fonts.html#PangoFontMapClass" title="PangoFontMapClass">PangoFontMapClass</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-FONT-MAP-CLASS--CAPS" title="PANGO_FONT_MAP_CLASS()">PANGO_FONT_MAP_CLASS</a>                (klass)
+#define             <a class="link" href="pango-Fonts.html#PANGO-IS-FONT-MAP-CLASS--CAPS" title="PANGO_IS_FONT_MAP_CLASS()">PANGO_IS_FONT_MAP_CLASS</a>             (klass)
+#define             <a class="link" href="pango-Fonts.html#PANGO-FONT-MAP-GET-CLASS--CAPS" title="PANGO_FONT_MAP_GET_CLASS()">PANGO_FONT_MAP_GET_CLASS</a>            (obj)
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()">pango_font_map_create_context</a>       (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap);
+<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         <a class="link" href="pango-Fonts.html#pango-font-map-load-font" title="pango_font_map_load_font ()">pango_font_map_load_font</a>            (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *      <a class="link" href="pango-Fonts.html#pango-font-map-load-fontset" title="pango_font_map_load_fontset ()">pango_font_map_load_fontset</a>         (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+void                <a class="link" href="pango-Fonts.html#pango-font-map-list-families" title="pango_font_map_list_families ()">pango_font_map_list_families</a>        (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> ***families,
+                                                         int *n_families);
+const char *        <a class="link" href="pango-Fonts.html#pango-font-map-get-shape-engine-type" title="pango_font_map_get_shape_engine_type ()">pango_font_map_get_shape_engine_type</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap);
+
+                    <a class="link" href="pango-Fonts.html#PangoFontset-struct" title="PangoFontset">PangoFontset</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONTSET--CAPS" title="PANGO_TYPE_FONTSET">PANGO_TYPE_FONTSET</a>
+                    <a class="link" href="pango-Fonts.html#PangoFontsetClass" title="PangoFontsetClass">PangoFontsetClass</a>;
+<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         <a class="link" href="pango-Fonts.html#pango-fontset-get-font" title="pango_fontset_get_font ()">pango_fontset_get_font</a>              (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> wc);
+<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  <a class="link" href="pango-Fonts.html#pango-fontset-get-metrics" title="pango_fontset_get_metrics ()">pango_fontset_get_metrics</a>           (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            (<a class="link" href="pango-Fonts.html#PangoFontsetForeachFunc" title="PangoFontsetForeachFunc ()">*PangoFontsetForeachFunc</a>)          (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+void                <a class="link" href="pango-Fonts.html#pango-fontset-foreach" title="pango_fontset_foreach ()">pango_fontset_foreach</a>               (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontsetForeachFunc" title="PangoFontsetForeachFunc ()">PangoFontsetForeachFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+                    <a class="link" href="pango-Fonts.html#PangoFontsetSimple-struct" title="PangoFontsetSimple">PangoFontsetSimple</a>;
+#define             <a class="link" href="pango-Fonts.html#PANGO-TYPE-FONTSET-SIMPLE--CAPS" title="PANGO_TYPE_FONTSET_SIMPLE">PANGO_TYPE_FONTSET_SIMPLE</a>
+<a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a> * <a class="link" href="pango-Fonts.html#pango-fontset-simple-new" title="pango_fontset_simple_new ()">pango_fontset_simple_new</a>           (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+void                <a class="link" href="pango-Fonts.html#pango-fontset-simple-append" title="pango_fontset_simple_append ()">pango_fontset_simple_append</a>         (<a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a> *fontset,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+int                 <a class="link" href="pango-Fonts.html#pango-fontset-simple-size" title="pango_fontset_simple_size ()">pango_fontset_simple_size</a>           (<a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a> *fontset);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Fonts.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoFont
+         +----<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a>
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoFontFamily
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoFontFace
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoFontMap
+         +----<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a>
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoFontset
+         +----<a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a>
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a>
+         +----PangoFontsetSimple
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Fonts.derived-interfaces"></a><h2>Known Derived Interfaces</h2>
+<p>
+PangoFont is required by
+ <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFont">PangoCairoFont</a>.</p>
+<p>
+PangoFontMap is required by
+ <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a>.</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Fonts.description"></a><h2>Description</h2>
+<p>
+Pango supports a flexible architecture where a
+particular rendering architecture can supply an
+implementation of fonts. The <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> structure
+represents an abstract rendering-system-independent font.
+Pango provides routines to list available fonts, and
+to load a font of a given description.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Fonts.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoFontDescription"></a><h3>PangoFontDescription</h3>
+<pre class="programlisting">typedef struct _PangoFontDescription PangoFontDescription;</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> structure represents the description
+of an ideal font. These structures are used both to list
+what fonts are available on the system and also for specifying
+the characteristics of a font to load.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT-DESCRIPTION--CAPS"></a><h3>PANGO_TYPE_FONT_DESCRIPTION</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT_DESCRIPTION (pango_font_description_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoStyle"></a><h3>enum PangoStyle</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_STYLE_NORMAL,
+  PANGO_STYLE_OBLIQUE,
+  PANGO_STYLE_ITALIC
+} PangoStyle;
+</pre>
+<p>
+An enumeration specifying the various slant styles possible for a font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-STYLE-NORMAL--CAPS"></a><span class="term"><code class="literal">PANGO_STYLE_NORMAL</code></span></p></td>
+<td> the font is upright.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STYLE-OBLIQUE--CAPS"></a><span class="term"><code class="literal">PANGO_STYLE_OBLIQUE</code></span></p></td>
+<td> the font is slanted, but in a roman style.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STYLE-ITALIC--CAPS"></a><span class="term"><code class="literal">PANGO_STYLE_ITALIC</code></span></p></td>
+<td> the font is slanted in an italic style.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-STYLE--CAPS"></a><h3>PANGO_TYPE_STYLE</h3>
+<pre class="programlisting">#define PANGO_TYPE_STYLE (pango_style_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle"><span class="type">PangoStyle</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoWeight"></a><h3>enum PangoWeight</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_WEIGHT_THIN = 100,
+  PANGO_WEIGHT_ULTRALIGHT = 200,
+  PANGO_WEIGHT_LIGHT = 300,
+  PANGO_WEIGHT_BOOK = 380,
+  PANGO_WEIGHT_NORMAL = 400,
+  PANGO_WEIGHT_MEDIUM = 500,
+  PANGO_WEIGHT_SEMIBOLD = 600,
+  PANGO_WEIGHT_BOLD = 700,
+  PANGO_WEIGHT_ULTRABOLD = 800,
+  PANGO_WEIGHT_HEAVY = 900,
+  PANGO_WEIGHT_ULTRAHEAVY = 1000
+} PangoWeight;
+</pre>
+<p>
+An enumeration specifying the weight (boldness) of a font. This is a numerical
+value ranging from 100 to 900, but there are some predefined values:
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-WEIGHT-THIN--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_THIN</code></span></p></td>
+<td>the thin weight (= 100; Since: 1.24)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-ULTRALIGHT--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_ULTRALIGHT</code></span></p></td>
+<td>the ultralight weight (= 200)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-LIGHT--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_LIGHT</code></span></p></td>
+<td>the light weight (= 300)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-BOOK--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_BOOK</code></span></p></td>
+<td>the book weight (= 380; Since: 1.24)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-NORMAL--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_NORMAL</code></span></p></td>
+<td>the default weight (= 400)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-MEDIUM--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_MEDIUM</code></span></p></td>
+<td>the normal weight (= 500; Since: 1.24)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-SEMIBOLD--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_SEMIBOLD</code></span></p></td>
+<td>the semibold weight (= 600)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-BOLD--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_BOLD</code></span></p></td>
+<td>the bold weight (= 700)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-ULTRABOLD--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_ULTRABOLD</code></span></p></td>
+<td>the ultrabold weight (= 800)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-HEAVY--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_HEAVY</code></span></p></td>
+<td>the heavy weight (= 900)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WEIGHT-ULTRAHEAVY--CAPS"></a><span class="term"><code class="literal">PANGO_WEIGHT_ULTRAHEAVY</code></span></p></td>
+<td>the ultraheavy weight (= 1000; Since: 1.24)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-WEIGHT--CAPS"></a><h3>PANGO_TYPE_WEIGHT</h3>
+<pre class="programlisting">#define PANGO_TYPE_WEIGHT (pango_weight_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight"><span class="type">PangoWeight</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoVariant"></a><h3>enum PangoVariant</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_VARIANT_NORMAL,
+  PANGO_VARIANT_SMALL_CAPS
+} PangoVariant;
+</pre>
+<p>
+An enumeration specifying capitalization variant of the font.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-VARIANT-NORMAL--CAPS"></a><span class="term"><code class="literal">PANGO_VARIANT_NORMAL</code></span></p></td>
+<td>A normal font.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-VARIANT-SMALL-CAPS--CAPS"></a><span class="term"><code class="literal">PANGO_VARIANT_SMALL_CAPS</code></span></p></td>
+<td>A font with the lower case characters
+  replaced by smaller variants of the capital characters.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-VARIANT--CAPS"></a><h3>PANGO_TYPE_VARIANT</h3>
+<pre class="programlisting">#define PANGO_TYPE_VARIANT (pango_variant_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant"><span class="type">PangoVariant</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoStretch"></a><h3>enum PangoStretch</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_STRETCH_ULTRA_CONDENSED,
+  PANGO_STRETCH_EXTRA_CONDENSED,
+  PANGO_STRETCH_CONDENSED,
+  PANGO_STRETCH_SEMI_CONDENSED,
+  PANGO_STRETCH_NORMAL,
+  PANGO_STRETCH_SEMI_EXPANDED,
+  PANGO_STRETCH_EXPANDED,
+  PANGO_STRETCH_EXTRA_EXPANDED,
+  PANGO_STRETCH_ULTRA_EXPANDED
+} PangoStretch;
+</pre>
+<p>
+An enumeration specifying the width of the font relative to other designs
+within a family.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-STRETCH-ULTRA-CONDENSED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_ULTRA_CONDENSED</code></span></p></td>
+<td>ultra condensed width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-EXTRA-CONDENSED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_EXTRA_CONDENSED</code></span></p></td>
+<td>extra condensed width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-CONDENSED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_CONDENSED</code></span></p></td>
+<td>condensed width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-SEMI-CONDENSED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_SEMI_CONDENSED</code></span></p></td>
+<td>semi condensed width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-NORMAL--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_NORMAL</code></span></p></td>
+<td>the normal width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-SEMI-EXPANDED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_SEMI_EXPANDED</code></span></p></td>
+<td>semi expanded width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-EXPANDED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_EXPANDED</code></span></p></td>
+<td>expanded width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-EXTRA-EXPANDED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_EXTRA_EXPANDED</code></span></p></td>
+<td>extra expanded width
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-STRETCH-ULTRA-EXPANDED--CAPS"></a><span class="term"><code class="literal">PANGO_STRETCH_ULTRA_EXPANDED</code></span></p></td>
+<td>ultra expanded width
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-STRETCH--CAPS"></a><h3>PANGO_TYPE_STRETCH</h3>
+<pre class="programlisting">#define PANGO_TYPE_STRETCH (pango_stretch_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch"><span class="type">PangoStretch</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontMask"></a><h3>enum PangoFontMask</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_FONT_MASK_FAMILY  = 1 &lt;&lt; 0,
+  PANGO_FONT_MASK_STYLE   = 1 &lt;&lt; 1,
+  PANGO_FONT_MASK_VARIANT = 1 &lt;&lt; 2,
+  PANGO_FONT_MASK_WEIGHT  = 1 &lt;&lt; 3,
+  PANGO_FONT_MASK_STRETCH = 1 &lt;&lt; 4,
+  PANGO_FONT_MASK_SIZE    = 1 &lt;&lt; 5,
+  PANGO_FONT_MASK_GRAVITY = 1 &lt;&lt; 6
+} PangoFontMask;
+</pre>
+<p>
+The bits in a <a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask"><span class="type">PangoFontMask</span></a> correspond to fields in a
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> that have been set.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-FAMILY--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_FAMILY</code></span></p></td>
+<td>the font family is specified.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-STYLE--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_STYLE</code></span></p></td>
+<td>the font style is specified.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-VARIANT--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_VARIANT</code></span></p></td>
+<td>the font variant is specified.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-WEIGHT--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_WEIGHT</code></span></p></td>
+<td>the font weight is specified.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-STRETCH--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_STRETCH</code></span></p></td>
+<td>the font stretch is specified.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-SIZE--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_SIZE</code></span></p></td>
+<td>the font size is specified.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-FONT-MASK-GRAVITY--CAPS"></a><span class="term"><code class="literal">PANGO_FONT_MASK_GRAVITY</code></span></p></td>
+<td>the font gravity is specified (Since: 1.16.)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT-MASK--CAPS"></a><h3>PANGO_TYPE_FONT_MASK</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT_MASK (pango_font_mask_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask"><span class="type">PangoFontMask</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-new"></a><h3>pango_font_description_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_description_new       (void);</pre>
+<p>
+Creates a new font description structure with all fields unset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, which
+              should be freed using <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-copy"></a><h3>pango_font_description_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_description_copy      (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Make a copy of a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, which should
+              be freed with <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if <em class="parameter"><code>desc</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-copy-static"></a><h3>pango_font_description_copy_static ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_description_copy_static
+                                                        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Like <a class="link" href="pango-Fonts.html#pango-font-description-copy" title="pango_font_description_copy ()"><code class="function">pango_font_description_copy()</code></a>, but only a shallow copy is made
+of the family name and other allocated fields. The result can only
+be used until <em class="parameter"><code>desc</code></em> is modified or freed. This is meant to be used
+when the copy is only needed temporarily.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, which should
+              be freed with <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if <em class="parameter"><code>desc</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-hash"></a><h3>pango_font_description_hash ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               pango_font_description_hash         (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Computes a hash of a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> structure suitable
+to be used, for example, as an argument to <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-new"
+><code class="function">g_hash_table_new()</code></a>.
+The hash value is independent of <em class="parameter"><code>desc-&gt;mask</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the hash value.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-equal"></a><h3>pango_font_description_equal ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_font_description_equal        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc1,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc2);</pre>
+<p>
+Compares two font descriptions for equality. Two font descriptions
+are considered equal if the fonts they describe are provably identical.
+This means that their masks do not have to match, as long as other fields
+are all the same. (Two font descriptions may result in identical fonts
+being loaded, but still compare <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc1</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc2</code></em> :</span></p></td>
+<td> another <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the two font descriptions are identical,
+        <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-free"></a><h3>pango_font_description_free ()</h3>
+<pre class="programlisting">void                pango_font_description_free         (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Frees a font description.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-descriptions-free"></a><h3>pango_font_descriptions_free ()</h3>
+<pre class="programlisting">void                pango_font_descriptions_free        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> **descs,
+                                                         int n_descs);</pre>
+<p>
+Frees an array of font descriptions.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>descs</code></em> :</span></p></td>
+<td> a pointer to an array of <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_descs</code></em> :</span></p></td>
+<td> number of font descriptions in <em class="parameter"><code>descs</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-family"></a><h3>pango_font_description_set_family ()</h3>
+<pre class="programlisting">void                pango_font_description_set_family   (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const char *family);</pre>
+<p>
+Sets the family name field of a font description. The family
+name represents a family of related font styles, and will
+resolve to a particular <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>. In some uses of
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, it is also possible to use a comma
+separated list of family names for this field.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td> a string representing the family name.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-family-static"></a><h3>pango_font_description_set_family_static ()</h3>
+<pre class="programlisting">void                pango_font_description_set_family_static
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const char *family);</pre>
+<p>
+Like <a class="link" href="pango-Fonts.html#pango-font-description-set-family" title="pango_font_description_set_family ()"><code class="function">pango_font_description_set_family()</code></a>, except that no
+copy of <em class="parameter"><code>family</code></em> is made. The caller must make sure that the
+string passed in stays around until <em class="parameter"><code>desc</code></em> has been freed
+or the name is set again. This function can be used if
+<em class="parameter"><code>family</code></em> is a static string such as a C string literal, or
+if <em class="parameter"><code>desc</code></em> is only needed temporarily.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td> a string representing the family name.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-family"></a><h3>pango_font_description_get_family ()</h3>
+<pre class="programlisting">const char *        pango_font_description_get_family   (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the family name field of a font description. See
+<a class="link" href="pango-Fonts.html#pango-font-description-set-family" title="pango_font_description_set_family ()"><code class="function">pango_font_description_set_family()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the family name field for the font description, or
+              <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if not previously set.  This has the same life-time
+              as the font description itself and should not be freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-style"></a><h3>pango_font_description_set_style ()</h3>
+<pre class="programlisting">void                pango_font_description_set_style    (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a> style);</pre>
+<p>
+Sets the style field of a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>. The
+<a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle"><span class="type">PangoStyle</span></a> enumeration describes whether the font is slanted and
+the manner in which it is slanted; it can be either
+<a class="link" href="pango-Fonts.html#PANGO-STYLE-NORMAL--CAPS"><span class="type">PANGO_STYLE_NORMAL</span></a>, <a class="link" href="pango-Fonts.html#PANGO-STYLE-ITALIC--CAPS"><span class="type">PANGO_STYLE_ITALIC</span></a>, or <a class="link" href="pango-Fonts.html#PANGO-STYLE-OBLIQUE--CAPS"><span class="type">PANGO_STYLE_OBLIQUE</span></a>.
+Most fonts will either have a italic style or an oblique
+style, but not both, and font matching in Pango will
+match italic specifications with oblique fonts and vice-versa
+if an exact match is not found.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>style</code></em> :</span></p></td>
+<td> the style for the font description
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-style"></a><h3>pango_font_description_get_style ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a>          pango_font_description_get_style    (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the style field of a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>. See
+<a class="link" href="pango-Fonts.html#pango-font-description-set-style" title="pango_font_description_set_style ()"><code class="function">pango_font_description_set_style()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the style field for the font description.
+  Use <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to find out if
+  the field was explicitly set or not.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-variant"></a><h3>pango_font_description_set_variant ()</h3>
+<pre class="programlisting">void                pango_font_description_set_variant  (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a> variant);</pre>
+<p>
+Sets the variant field of a font description. The <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant"><span class="type">PangoVariant</span></a>
+can either be <a class="link" href="pango-Fonts.html#PANGO-VARIANT-NORMAL--CAPS"><code class="literal">PANGO_VARIANT_NORMAL</code></a> or <a class="link" href="pango-Fonts.html#PANGO-VARIANT-SMALL-CAPS--CAPS"><code class="literal">PANGO_VARIANT_SMALL_CAPS</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>variant</code></em> :</span></p></td>
+<td> the variant type for the font description.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-variant"></a><h3>pango_font_description_get_variant ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a>        pango_font_description_get_variant  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the variant field of a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>. See
+<a class="link" href="pango-Fonts.html#pango-font-description-set-variant" title="pango_font_description_set_variant ()"><code class="function">pango_font_description_set_variant()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the variant field for the font description. Use
+  <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to find out if
+  the field was explicitly set or not.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-weight"></a><h3>pango_font_description_set_weight ()</h3>
+<pre class="programlisting">void                pango_font_description_set_weight   (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a> weight);</pre>
+<p>
+Sets the weight field of a font description. The weight field
+specifies how bold or light the font should be. In addition
+to the values of the <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight"><span class="type">PangoWeight</span></a> enumeration, other intermediate
+numeric values are possible.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>weight</code></em> :</span></p></td>
+<td> the weight for the font description.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-weight"></a><h3>pango_font_description_get_weight ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a>         pango_font_description_get_weight   (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the weight field of a font description. See
+<a class="link" href="pango-Fonts.html#pango-font-description-set-weight" title="pango_font_description_set_weight ()"><code class="function">pango_font_description_set_weight()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the weight field for the font description. Use
+  <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to find out if
+  the field was explicitly set or not.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-stretch"></a><h3>pango_font_description_set_stretch ()</h3>
+<pre class="programlisting">void                pango_font_description_set_stretch  (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a> stretch);</pre>
+<p>
+Sets the stretch field of a font description. The stretch field
+specifies how narrow or wide the font should be.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>stretch</code></em> :</span></p></td>
+<td> the stretch for the font description
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-stretch"></a><h3>pango_font_description_get_stretch ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a>        pango_font_description_get_stretch  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the stretch field of a font description.
+See <a class="link" href="pango-Fonts.html#pango-font-description-set-stretch" title="pango_font_description_set_stretch ()"><code class="function">pango_font_description_set_stretch()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the stretch field for the font description. Use
+  <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to find out if
+  the field was explicitly set or not.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-size"></a><h3>pango_font_description_set_size ()</h3>
+<pre class="programlisting">void                pango_font_description_set_size     (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> size);</pre>
+<p>
+Sets the size field of a font description in fractional points. This is mutually
+exclusive with <a class="link" href="pango-Fonts.html#pango-font-description-set-absolute-size" title="pango_font_description_set_absolute_size ()"><code class="function">pango_font_description_set_absolute_size()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td> the size of the font in points, scaled by PANGO_SCALE. (That is,
+       a <em class="parameter"><code>size</code></em> value of 10 * PANGO_SCALE is a 10 point font. The conversion
+       factor between points and device units depends on system configuration
+       and the output device. For screen display, a logical DPI of 96 is
+       common, in which case a 10 point font corresponds to a 10 * (96 / 72) = 13.3
+       pixel font. Use <a class="link" href="pango-Fonts.html#pango-font-description-set-absolute-size" title="pango_font_description_set_absolute_size ()"><code class="function">pango_font_description_set_absolute_size()</code></a> if you need
+       a particular size in device units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-size"></a><h3>pango_font_description_get_size ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                pango_font_description_get_size     (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the size field of a font description.
+See <a class="link" href="pango-Fonts.html#pango-font-description-set-size" title="pango_font_description_set_size ()"><code class="function">pango_font_description_set_size()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the size field for the font description in points or device units.
+  You must call <a class="link" href="pango-Fonts.html#pango-font-description-get-size-is-absolute" title="pango_font_description_get_size_is_absolute ()"><code class="function">pango_font_description_get_size_is_absolute()</code></a>
+  to find out which is the case. Returns 0 if the size field has not
+  previously been set or it has been set to 0 explicitly.
+  Use <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to
+  find out if the field was explicitly set or not.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-absolute-size"></a><h3>pango_font_description_set_absolute_size ()</h3>
+<pre class="programlisting">void                pango_font_description_set_absolute_size
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         double size);</pre>
+<p>
+Sets the size field of a font description, in device units. This is mutually
+exclusive with <a class="link" href="pango-Fonts.html#pango-font-description-set-size" title="pango_font_description_set_size ()"><code class="function">pango_font_description_set_size()</code></a> which sets the font size
+in points.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td> the new size, in Pango units. There are <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> Pango units in one
+  device unit. For an output backend where a device unit is a pixel, a <em class="parameter"><code>size</code></em>
+  value of 10 * PANGO_SCALE gives a 10 pixel font.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-size-is-absolute"></a><h3>pango_font_description_get_size_is_absolute ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_font_description_get_size_is_absolute
+                                                        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Determines whether the size of the font is in points (not absolute) or device units (absolute).
+See <a class="link" href="pango-Fonts.html#pango-font-description-set-size" title="pango_font_description_set_size ()"><code class="function">pango_font_description_set_size()</code></a> and <a class="link" href="pango-Fonts.html#pango-font-description-set-absolute-size" title="pango_font_description_set_absolute_size ()"><code class="function">pango_font_description_set_absolute_size()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether the size for the font description is in
+  points or device units.  Use <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to
+  find out if the size field of the font description was explicitly set or not.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-set-gravity"></a><h3>pango_font_description_set_gravity ()</h3>
+<pre class="programlisting">void                pango_font_description_set_gravity  (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);</pre>
+<p>
+Sets the gravity field of a font description. The gravity field
+specifies how the glyphs should be rotated.  If <em class="parameter"><code>gravity</code></em> is
+<a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>, this actually unsets the gravity mask on
+the font description.
+</p>
+<p>
+This function is seldom useful to the user.  Gravity should normally
+be set on a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gravity</code></em> :</span></p></td>
+<td> the gravity for the font description.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-gravity"></a><h3>pango_font_description_get_gravity ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        pango_font_description_get_gravity  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Gets the gravity field of a font description. See
+<a class="link" href="pango-Fonts.html#pango-font-description-set-gravity" title="pango_font_description_set_gravity ()"><code class="function">pango_font_description_set_gravity()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the gravity field for the font description. Use
+  <a class="link" href="pango-Fonts.html#pango-font-description-get-set-fields" title="pango_font_description_get_set_fields ()"><code class="function">pango_font_description_get_set_fields()</code></a> to find out if
+  the field was explicitly set or not.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-get-set-fields"></a><h3>pango_font_description_get_set_fields ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask">PangoFontMask</a>       pango_font_description_get_set_fields
+                                                        (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Determines which fields in a font description have been set.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a bitmask with bits set corresponding to the
+  fields in <em class="parameter"><code>desc</code></em> that have been set.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-unset-fields"></a><h3>pango_font_description_unset_fields ()</h3>
+<pre class="programlisting">void                pango_font_description_unset_fields (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontMask" title="enum PangoFontMask">PangoFontMask</a> to_unset);</pre>
+<p>
+Unsets some of the fields in a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.  The unset
+fields will get back to their default values.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>to_unset</code></em> :</span></p></td>
+<td> bitmask of fields in the <em class="parameter"><code>desc</code></em> to unset.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-merge"></a><h3>pango_font_description_merge ()</h3>
+<pre class="programlisting">void                pango_font_description_merge        (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc_to_merge,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> replace_existing);</pre>
+<p>
+Merges the fields that are set in <em class="parameter"><code>desc_to_merge</code></em> into the fields in
+<em class="parameter"><code>desc</code></em>.  If <em class="parameter"><code>replace_existing</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>, only fields in <em class="parameter"><code>desc</code></em> that
+are not already set are affected. If <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, then fields that are
+already set will be replaced as well.
+</p>
+<p>
+If <em class="parameter"><code>desc_to_merge</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, this function performs nothing.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc_to_merge</code></em> :</span></p></td>
+<td> the <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> to merge from, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>replace_existing</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, replace fields in <em class="parameter"><code>desc</code></em> with the
+  corresponding values from <em class="parameter"><code>desc_to_merge</code></em>, even if they
+  are already exist.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-merge-static"></a><h3>pango_font_description_merge_static ()</h3>
+<pre class="programlisting">void                pango_font_description_merge_static (<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc_to_merge,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> replace_existing);</pre>
+<p>
+Like <a class="link" href="pango-Fonts.html#pango-font-description-merge" title="pango_font_description_merge ()"><code class="function">pango_font_description_merge()</code></a>, but only a shallow copy is made
+of the family name and other allocated fields. <em class="parameter"><code>desc</code></em> can only be
+used until <em class="parameter"><code>desc_to_merge</code></em> is modified or freed. This is meant
+to be used when the merged font description is only needed temporarily.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc_to_merge</code></em> :</span></p></td>
+<td> the <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> to merge from
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>replace_existing</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, replace fields in <em class="parameter"><code>desc</code></em> with the
+  corresponding values from <em class="parameter"><code>desc_to_merge</code></em>, even if they
+  are already exist.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-better-match"></a><h3>pango_font_description_better_match ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_font_description_better_match (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *old_match,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *new_match);</pre>
+<p>
+Determines if the style attributes of <em class="parameter"><code>new_match</code></em> are a closer match
+for <em class="parameter"><code>desc</code></em> than those of <em class="parameter"><code>old_match</code></em> are, or if <em class="parameter"><code>old_match</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>,
+determines if <em class="parameter"><code>new_match</code></em> is a match at all.
+Approximate matching is done for
+weight and style; other style attributes must match exactly.
+Style attributes are all attributes other than family and size-related
+attributes.  Approximate matching for style considers PANGO_STYLE_OBLIQUE
+and PANGO_STYLE_ITALIC as matches, but not as good a match as when the
+styles are equal.
+</p>
+<p>
+Note that <em class="parameter"><code>old_match</code></em> must match <em class="parameter"><code>desc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>old_match</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_match</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>new_match</code></em> is a better match
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-from-string"></a><h3>pango_font_description_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_description_from_string
+                                                        (const char *str);</pre>
+<p>
+Creates a new font description from a string representation in the
+form "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]", where FAMILY-LIST is a
+comma separated list of families optionally terminated by a comma,
+STYLE_OPTIONS is a whitespace separated list of words where each WORD
+describes one of style, variant, weight, stretch, or gravity, and SIZE
+is a decimal number (size in points) or optionally followed by the
+unit modifier "px" for absolute size. Any one of the options may
+be absent.  If FAMILY-LIST is absent, then the family_name field of
+the resulting font description will be initialized to <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.  If
+STYLE-OPTIONS is missing, then all style options will be set to the
+default values. If SIZE is missing, the size in the resulting font
+description will be set to 0.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> string representation of a font description.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-to-string"></a><h3>pango_font_description_to_string ()</h3>
+<pre class="programlisting">char *              pango_font_description_to_string    (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Creates a string representation of a font description. See
+<a class="link" href="pango-Fonts.html#pango-font-description-from-string" title="pango_font_description_from_string ()"><code class="function">pango_font_description_from_string()</code></a> for a description of the
+format of the string representation. The family list in the
+string description will only have a terminating comma if the
+last word of the list is a valid style option.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new string that must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-description-to-filename"></a><h3>pango_font_description_to_filename ()</h3>
+<pre class="programlisting">char *              pango_font_description_to_filename  (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Creates a filename representation of a font description. The
+filename is identical to the result from calling
+<a class="link" href="pango-Fonts.html#pango-font-description-to-string" title="pango_font_description_to_string ()"><code class="function">pango_font_description_to_string()</code></a>, but with underscores instead of
+characters that are untypical in filenames, and in lower case only.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new string that must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontMetrics"></a><h3>PangoFontMetrics</h3>
+<pre class="programlisting">typedef struct {
+  guint ref_count;
+
+  int ascent;
+  int descent;
+  int approximate_char_width;
+  int approximate_digit_width;
+  int underline_position;
+  int underline_thickness;
+  int strikethrough_position;
+  int strikethrough_thickness;
+} PangoFontMetrics;
+</pre>
+<p>
+A <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure holds the overall metric information
+for a font (possibly restricted to a script). The fields of this
+structure are private to implementations of a font backend. See
+the documentation of the corresponding getters for documentation
+of their meaning.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>ref_count</code></em>;</span></p></td>
+<td>reference count.  Used internally.  See <a class="link" href="pango-Fonts.html#pango-font-metrics-ref" title="pango_font_metrics_ref ()"><code class="function">pango_font_metrics_ref()</code></a>
+            and <a class="link" href="pango-Fonts.html#pango-font-metrics-unref" title="pango_font_metrics_unref ()"><code class="function">pango_font_metrics_unref()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>ascent</code></em>;</span></p></td>
+<td>the distance from the baseline to the highest point of the glyphs of
+        the font. This is positive in practically all fonts.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>descent</code></em>;</span></p></td>
+<td>the distance from the baseline to the lowest point of the glyphs of
+        the font. This is positive in practically all fonts.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>approximate_char_width</code></em>;</span></p></td>
+<td>approximate average width of the regular glyphs of
+         the font.  Note that for this calculation, East Asian characters
+        (those passing <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#g-unichar-iswide"
+><code class="function">g_unichar_iswide()</code></a>) are counted as double-width.
+        This produces a more uniform value for this measure across languages
+        and results in more uniform and more expected UI sizes.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>approximate_digit_width</code></em>;</span></p></td>
+<td>approximate average width of the glyphs for digits
+         of the font.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>underline_position</code></em>;</span></p></td>
+<td>position of the underline. This is normally negative.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>underline_thickness</code></em>;</span></p></td>
+<td>thickness of the underline.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>strikethrough_position</code></em>;</span></p></td>
+<td>position of the strikethrough line. This is
+        normally positive.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>strikethrough_thickness</code></em>;</span></p></td>
+<td>thickness of the strikethrough line.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT-METRICS--CAPS"></a><h3>PANGO_TYPE_FONT_METRICS</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT_METRICS  (pango_font_metrics_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-ref"></a><h3>pango_font_metrics_ref ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  pango_font_metrics_ref              (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Increase the reference count of a font metrics structure by one.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <em class="parameter"><code>metrics</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-unref"></a><h3>pango_font_metrics_unref ()</h3>
+<pre class="programlisting">void                pango_font_metrics_unref            (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Decrease the reference count of a font metrics structure by one. If
+the result is zero, frees the structure and any associated
+memory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-ascent"></a><h3>pango_font_metrics_get_ascent ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_ascent       (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the ascent from a font metrics structure. The ascent is
+the distance from the baseline to the logical top of a line
+of text. (The logical top may be above or below the top of the
+actual drawn ink. It is necessary to lay out the text to figure
+where the ink will be.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the ascent, in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-descent"></a><h3>pango_font_metrics_get_descent ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_descent      (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the descent from a font metrics structure. The descent is
+the distance from the baseline to the logical bottom of a line
+of text. (The logical bottom may be above or below the bottom of the
+actual drawn ink. It is necessary to lay out the text to figure
+where the ink will be.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the descent, in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-approximate-char-width"></a><h3>pango_font_metrics_get_approximate_char_width ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_approximate_char_width
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the approximate character width for a font metrics structure.
+This is merely a representative value useful, for example, for
+determining the initial size for a window. Actual characters in
+text will be wider and narrower than this.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the character width, in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-approximate-digit-width"></a><h3>pango_font_metrics_get_approximate_digit_width ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_approximate_digit_width
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the approximate digit width for a font metrics structure.
+This is merely a representative value useful, for example, for
+determining the initial size for a window. Actual digits in
+text can be wider or narrower than this, though this value
+is generally somewhat more accurate than the result of
+<a class="link" href="pango-Fonts.html#pango-font-metrics-get-approximate-char-width" title="pango_font_metrics_get_approximate_char_width ()"><code class="function">pango_font_metrics_get_approximate_char_width()</code></a> for digits.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the digit width, in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-underline-thickness"></a><h3>pango_font_metrics_get_underline_thickness ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_underline_thickness
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the suggested thickness to draw for the underline.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the suggested underline thickness, in Pango units.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-underline-position"></a><h3>pango_font_metrics_get_underline_position ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_underline_position
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the suggested position to draw the underline.
+The value returned is the distance <span class="emphasis"><em>above</em></span> the
+baseline of the top of the underline. Since most fonts have
+underline positions beneath the baseline, this value is typically
+negative.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the suggested underline position, in Pango units.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-strikethrough-thickness"></a><h3>pango_font_metrics_get_strikethrough_thickness ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_strikethrough_thickness
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the suggested thickness to draw for the strikethrough.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the suggested strikethrough thickness, in Pango units.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-metrics-get-strikethrough-position"></a><h3>pango_font_metrics_get_strikethrough_position ()</h3>
+<pre class="programlisting">int                 pango_font_metrics_get_strikethrough_position
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *metrics);</pre>
+<p>
+Gets the suggested position to draw the strikethrough.
+The value returned is the distance <span class="emphasis"><em>above</em></span> the
+baseline of the top of the strikethrough.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>metrics</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the suggested strikethrough position, in Pango units.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFont-struct"></a><h3>PangoFont</h3>
+<pre class="programlisting">typedef struct _PangoFont PangoFont;</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> structure is used to represent
+a font in a rendering-system-independent matter.
+To create an implementation of a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>,
+the rendering-system specific code should allocate
+a larger structure that contains a nested
+<a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>, fill in the <em class="structfield"><code>klass</code></em> member of
+the nested <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> with a pointer to
+a appropriate <span class="type">PangoFontClass</span>, then call
+<code class="function">pango_font_init()</code> on the structure.
+</p>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> structure contains one member
+which the implementation fills in.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT--CAPS"></a><h3>PANGO_TYPE_FONT</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT              (pango_font_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FONT--CAPS"></a><h3>PANGO_FONT()</h3>
+<pre class="programlisting">#define PANGO_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT, PangoFont))
+</pre>
+<p>
+Casts a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> to a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-IS-FONT--CAPS"></a><h3>PANGO_IS_FONT()</h3>
+<pre class="programlisting">#define PANGO_IS_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT))
+</pre>
+<p>
+Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>object</code></em> is a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-find-shaper"></a><h3>pango_font_find_shaper ()</h3>
+<pre class="programlisting"><a class="link" href="PangoEngineShape.html" title="PangoEngineShape">PangoEngineShape</a> *  pango_font_find_shaper              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"
+>guint32</a> ch);</pre>
+<p>
+Finds the best matching shaper for a font for a particular
+language tag and character point.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> the language tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ch</code></em> :</span></p></td>
+<td> a Unicode character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the best matching shaper.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-describe"></a><h3>pango_font_describe ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_describe              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Returns a description of the font, with font size set in points.
+Use <a class="link" href="pango-Fonts.html#pango-font-describe-with-absolute-size" title="pango_font_describe_with_absolute_size ()"><code class="function">pango_font_describe_with_absolute_size()</code></a> if you want the font
+size in device units.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> object.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-describe-with-absolute-size"></a><h3>pango_font_describe_with_absolute_size ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_describe_with_absolute_size
+                                                        (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Returns a description of the font, with absolute font size set
+(in device units). Use <a class="link" href="pango-Fonts.html#pango-font-describe" title="pango_font_describe ()"><code class="function">pango_font_describe()</code></a> if you want the font
+size in points.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> object.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.14</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-get-coverage"></a><h3>pango_font_get_coverage ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     pango_font_get_coverage             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Computes the coverage map for a given font and language tag.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> the language tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> object.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-get-glyph-extents"></a><h3>pango_font_get_glyph_extents ()</h3>
+<pre class="programlisting">void                pango_font_get_glyph_extents        (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> glyph,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Gets the logical and ink extents of a glyph within a font. The
+coordinate system for each rectangle has its origin at the
+base line and horizontal origin of the character with increasing
+coordinates extending to the right and down. The macros <a class="link" href="pango-Glyph-Storage.html#PANGO-ASCENT--CAPS" title="PANGO_ASCENT()"><code class="function">PANGO_ASCENT()</code></a>,
+<a class="link" href="pango-Glyph-Storage.html#PANGO-DESCENT--CAPS" title="PANGO_DESCENT()"><code class="function">PANGO_DESCENT()</code></a>, <a class="link" href="pango-Glyph-Storage.html#PANGO-LBEARING--CAPS" title="PANGO_LBEARING()"><code class="function">PANGO_LBEARING()</code></a>, and <a class="link" href="pango-Glyph-Storage.html#PANGO-RBEARING--CAPS" title="PANGO_RBEARING()"><code class="function">PANGO_RBEARING()</code></a> can be used to convert
+from the extents rectangle to more traditional font metrics. The units
+of the rectangles are in 1/PANGO_SCALE of a device unit.
+</p>
+<p>
+If <em class="parameter"><code>font</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, this function gracefully sets some sane values in the
+output variables and returns.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph</code></em> :</span></p></td>
+<td> the glyph index
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle used to store the extents of the glyph as drawn
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the glyph
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-get-metrics"></a><h3>pango_font_get_metrics ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  pango_font_get_metrics              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Gets overall metric information for a font. Since the metrics may be
+substantially different for different scripts, a language tag can
+be provided to indicate that the metrics should be retrieved that
+correspond to the script(s) used by that language.
+</p>
+<p>
+If <em class="parameter"><code>font</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, this function gracefully sets some sane values in the
+output variables and returns.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> language tag used to determine which script to get the metrics
+           for, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate to get the metrics for the entire
+           font.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> object. The caller must call <a class="link" href="pango-Fonts.html#pango-font-metrics-unref" title="pango_font_metrics_unref ()"><code class="function">pango_font_metrics_unref()</code></a>
+  when finished using the object.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-get-font-map"></a><h3>pango_font_get_font_map ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_font_get_font_map             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Gets the font map for which the font was created.
+</p>
+<p>
+Note that the font maintains a <em class="firstterm">weak</em> reference
+to the font map, so if all references to font map are dropped, the font
+map will be finalized even if there are fonts created with the font
+map that are still alive.  In that case this function will return <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+It is the responsibility of the user to ensure that the font map is kept
+alive.  In most uses this is not an issue as a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> holds
+a reference to the font map.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> for the font, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>font</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontFamily-struct"></a><h3>PangoFontFamily</h3>
+<pre class="programlisting">typedef struct _PangoFontFamily PangoFontFamily;</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a> structure is used to represent a family of related
+font faces. The faces in a family share a common design, but differ in
+slant, weight, width and other aspects.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT-FAMILY--CAPS"></a><h3>PANGO_TYPE_FONT_FAMILY</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT_FAMILY              (pango_font_family_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FONT-FAMILY--CAPS"></a><h3>PANGO_FONT_FAMILY()</h3>
+<pre class="programlisting">#define PANGO_FONT_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FAMILY, PangoFontFamily))
+</pre>
+<p>
+Casts a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> to a <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-IS-FONT-FAMILY--CAPS"></a><h3>PANGO_IS_FONT_FAMILY()</h3>
+<pre class="programlisting">#define PANGO_IS_FONT_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FAMILY))
+</pre>
+<p>
+Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>object</code></em> is a <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-family-get-name"></a><h3>pango_font_family_get_name ()</h3>
+<pre class="programlisting">const char *        pango_font_family_get_name          (<a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> *family);</pre>
+<p>
+Gets the name of the family. The name is unique among all
+fonts for the font backend and can be used in a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>
+to specify that a face from this family is desired.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the name of the family. This string is owned
+  by the family object and must not be modified or freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-family-is-monospace"></a><h3>pango_font_family_is_monospace ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_font_family_is_monospace      (<a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> *family);</pre>
+<p>
+A monospace font is a font designed for text display where the the
+characters form a regular grid. For Western languages this would
+mean that the advance width of all characters are the same, but
+this categorization also includes Asian fonts which include
+double-width characters: characters that occupy two grid cells.
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#g-unichar-iswide"
+><code class="function">g_unichar_iswide()</code></a> returns a result that indicates whether a
+character is typically double-width in a monospace font.
+</p>
+<p>
+The best way to find out the grid-cell size is to call
+<a class="link" href="pango-Fonts.html#pango-font-metrics-get-approximate-digit-width" title="pango_font_metrics_get_approximate_digit_width ()"><code class="function">pango_font_metrics_get_approximate_digit_width()</code></a>, since the results
+of <a class="link" href="pango-Fonts.html#pango-font-metrics-get-approximate-char-width" title="pango_font_metrics_get_approximate_char_width ()"><code class="function">pango_font_metrics_get_approximate_char_width()</code></a> may be affected
+by double-width characters.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the family is monospace.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-family-list-faces"></a><h3>pango_font_family_list_faces ()</h3>
+<pre class="programlisting">void                pango_font_family_list_faces        (<a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> *family,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> ***faces,
+                                                         int *n_faces);</pre>
+<p>
+Lists the different font faces that make up <em class="parameter"><code>family</code></em>. The faces
+in a family share a common design, but differ in slant, weight,
+width and other aspects.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>faces</code></em> :</span></p></td>
+<td> location to store an array of pointers to <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>
+  objects, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>. This array should be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>
+  when it is no longer needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_faces</code></em> :</span></p></td>
+<td> location to store number of elements in <em class="parameter"><code>faces</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontFace-struct"></a><h3>PangoFontFace</h3>
+<pre class="programlisting">typedef struct _PangoFontFace PangoFontFace;</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a> structure is used to represent a group of fonts with
+the same family, slant, weight, width, but varying sizes.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT-FACE--CAPS"></a><h3>PANGO_TYPE_FONT_FACE</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT_FACE              (pango_font_face_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FONT-FACE--CAPS"></a><h3>PANGO_FONT_FACE()</h3>
+<pre class="programlisting">#define PANGO_FONT_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FACE, PangoFontFace))
+</pre>
+<p>
+Casts a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> to a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-IS-FONT-FACE--CAPS"></a><h3>PANGO_IS_FONT_FACE()</h3>
+<pre class="programlisting">#define PANGO_IS_FONT_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FACE))
+</pre>
+<p>
+Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>object</code></em> is a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-face-get-face-name"></a><h3>pango_font_face_get_face_name ()</h3>
+<pre class="programlisting">const char *        pango_font_face_get_face_name       (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face);</pre>
+<p>
+Gets a name representing the style of this face among the
+different faces in the <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a> for the face. This
+name is unique among all faces in the family and is suitable
+for displaying to users.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>face</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the face name for the face. This string is
+  owned by the face object and must not be modified or freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-face-list-sizes"></a><h3>pango_font_face_list_sizes ()</h3>
+<pre class="programlisting">void                pango_font_face_list_sizes          (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face,
+                                                         int **sizes,
+                                                         int *n_sizes);</pre>
+<p>
+List the available sizes for a font. This is only applicable to bitmap
+fonts. For scalable fonts, stores <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> at the location pointed to by
+<em class="parameter"><code>sizes</code></em> and 0 at the location pointed to by <em class="parameter"><code>n_sizes</code></em>. The sizes returned
+are in Pango units and are sorted in ascending order.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>face</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>sizes</code></em> :</span></p></td>
+<td> location to store a pointer to an array of int. This array
+        should be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_sizes</code></em> :</span></p></td>
+<td> location to store the number of elements in <em class="parameter"><code>sizes</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-face-describe"></a><h3>pango_font_face_describe ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_font_face_describe         (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face);</pre>
+<p>
+Returns the family, style, variant, weight and stretch of
+a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>. The size field of the resulting font description
+will be unset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>face</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-created <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> structure
+ holding the description of the face. Use <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>
+ to free the result.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-face-is-synthesized"></a><h3>pango_font_face_is_synthesized ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_font_face_is_synthesized      (<a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a> *face);</pre>
+<p>
+Returns whether a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a> is synthesized by the underlying
+font rendering engine from another face, perhaps by shearing, emboldening,
+or lightening it.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>face</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontFace"><span class="type">PangoFontFace</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether <em class="parameter"><code>face</code></em> is synthesized.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontMap-struct"></a><h3>PangoFontMap</h3>
+<pre class="programlisting">typedef struct _PangoFontMap PangoFontMap;</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> represents the set of fonts available for a
+particular rendering system. This is a virtual object with
+implementations being specific to particular rendering systems.  To
+create an implementation of a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>, the rendering-system
+specific code should allocate a larger structure that contains a nested
+<a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>, fill in the <em class="structfield"><code>klass</code></em> member of the nested <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> with a
+pointer to a appropriate <a class="link" href="pango-Fonts.html#PangoFontMapClass" title="PangoFontMapClass"><span class="type">PangoFontMapClass</span></a>, then call
+<code class="function">pango_font_map_init()</code> on the structure.
+</p>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> structure contains one member which the implementation
+fills in.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONT-MAP--CAPS"></a><h3>PANGO_TYPE_FONT_MAP</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONT_MAP              (pango_font_map_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FONT-MAP--CAPS"></a><h3>PANGO_FONT_MAP()</h3>
+<pre class="programlisting">#define PANGO_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_MAP, PangoFontMap))
+</pre>
+<p>
+Casts a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> to a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-IS-FONT-MAP--CAPS"></a><h3>PANGO_IS_FONT_MAP()</h3>
+<pre class="programlisting">#define PANGO_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_MAP))
+</pre>
+<p>
+Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>object</code></em> is a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>object</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontMapClass"></a><h3>PangoFontMapClass</h3>
+<pre class="programlisting">typedef struct {
+  GObjectClass parent_class;
+
+
+  PangoFont *   (*load_font)     (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc);
+  void          (*list_families) (PangoFontMap               *fontmap,
+                                 PangoFontFamily          ***families,
+                                 int                        *n_families);
+  PangoFontset *(*load_fontset)  (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc,
+                                 PangoLanguage              *language);
+
+  const char *shape_engine_type;
+} PangoFontMapClass;
+</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontMapClass" title="PangoFontMapClass"><span class="type">PangoFontMapClass</span></a> structure holds the virtual functions for
+a particular <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> implementation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"
+>GObjectClass</a> <em class="structfield"><code>parent_class</code></em>;</span></p></td>
+<td>parent <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"
+><span class="type">GObjectClass</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>load_font</code></em> ()</span></p></td>
+<td>a function to load a font with a given description. See
+            <a class="link" href="pango-Fonts.html#pango-font-map-load-font" title="pango_font_map_load_font ()"><code class="function">pango_font_map_load_font()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>list_families</code></em> ()</span></p></td>
+<td>A function to list available font families. See
+                <a class="link" href="pango-Fonts.html#pango-font-map-list-families" title="pango_font_map_list_families ()"><code class="function">pango_font_map_list_families()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>load_fontset</code></em> ()</span></p></td>
+<td>a function to load a fontset with a given given description
+             suitable for a particular language. See
+            <a class="link" href="pango-Fonts.html#pango-font-map-load-fontset" title="pango_font_map_load_fontset ()"><code class="function">pango_font_map_load_fontset()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const char *<em class="structfield"><code>shape_engine_type</code></em>;</span></p></td>
+<td>the type of rendering-system-dependent engines that
+             can handle fonts of this fonts loaded with this fontmap.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FONT-MAP-CLASS--CAPS"></a><h3>PANGO_FONT_MAP_CLASS()</h3>
+<pre class="programlisting">#define PANGO_FONT_MAP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_MAP, PangoFontMapClass))
+</pre>
+<p>
+Casts a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> to a <a class="link" href="pango-Fonts.html#PangoFontMapClass" title="PangoFontMapClass"><span class="type">PangoFontMapClass</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-IS-FONT-MAP-CLASS--CAPS"></a><h3>PANGO_IS_FONT_MAP_CLASS()</h3>
+<pre class="programlisting">#define PANGO_IS_FONT_MAP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_MAP))
+</pre>
+<p>
+Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>klass</code></em> is a subtype of <a class="link" href="pango-Fonts.html#PangoFontMapClass" title="PangoFontMapClass"><span class="type">PangoFontMapClass</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
+<td>a <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-FONT-MAP-GET-CLASS--CAPS"></a><h3>PANGO_FONT_MAP_GET_CLASS()</h3>
+<pre class="programlisting">#define PANGO_FONT_MAP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_MAP, PangoFontMapClass))
+</pre>
+<p>
+Returns the type of a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-map-create-context"></a><h3>pango_font_map_create_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_font_map_create_context       (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap);</pre>
+<p>
+Creates a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> connected to <em class="parameter"><code>fontmap</code></em>.  This is equivalent
+to <a class="link" href="pango-Text-Processing.html#pango-context-new" title="pango_context_new ()"><code class="function">pango_context_new()</code></a> followed by <a class="link" href="pango-Text-Processing.html#pango-context-set-font-map" title="pango_context_set_font_map ()"><code class="function">pango_context_set_font_map()</code></a>.
+</p>
+<p>
+If you are using Pango as part of a higher-level system,
+that system may have it's own way of create a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+For instance, the GTK+ toolkit has, among others,
+<a
+href="http://library.gnome.org/devel/gdk/unstable/gdk-Pango-Interaction.html#gdk-pango-context-get-for-screen"
+><code class="function">gdk_pango_context_get_for_screen()</code></a>, and
+<a
+href="http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#gtk-widget-get-pango-context"
+><code class="function">gtk_widget_get_pango_context()</code></a>.  Use those instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, which should
+              be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-map-load-font"></a><h3>pango_font_map_load_font ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         pango_font_map_load_font            (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Load the font in the fontmap that is the closest match for <em class="parameter"><code>desc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> the font will be used with
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> describing the font to load
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the font loaded, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no font matched.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-map-load-fontset"></a><h3>pango_font_map_load_fontset ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *      pango_font_map_load_fontset         (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Load a set of fonts in the fontmap that can be used to render
+a font matching <em class="parameter"><code>desc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> the font will be used with
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> describing the font to load
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> the fonts will be used for
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the fontset, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no font matched.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-map-list-families"></a><h3>pango_font_map_list_families ()</h3>
+<pre class="programlisting">void                pango_font_map_list_families        (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> ***families,
+                                                         int *n_families);</pre>
+<p>
+List all families for a fontmap.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>families</code></em> :</span></p></td>
+<td> location to store a pointer to an array of <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a> *.
+           This array should be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_families</code></em> :</span></p></td>
+<td> location to store the number of elements in <em class="parameter"><code>families</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-font-map-get-shape-engine-type"></a><h3>pango_font_map_get_shape_engine_type ()</h3>
+<pre class="programlisting">const char *        pango_font_map_get_shape_engine_type
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *fontmap);</pre>
+<p>
+Returns the render ID for shape engines for this fontmap.
+See the <em class="structfield"><code>render_type</code></em> field of
+<a class="link" href="pango-Engines.html#PangoEngineInfo" title="PangoEngineInfo"><span class="type">PangoEngineInfo</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the ID string for shape engines for
+ this fontmap. Owned by Pango, should not be modified
+ or freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontset-struct"></a><h3>PangoFontset</h3>
+<pre class="programlisting">typedef struct _PangoFontset PangoFontset;</pre>
+<p>
+A <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a> represents a set of <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> to use
+when rendering text. It is the result of resolving a
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> against a particular <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+It has operations for finding the component font for
+a particular Unicode character, and for finding a composite
+set of metrics for the entire fontset.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONTSET--CAPS"></a><h3>PANGO_TYPE_FONTSET</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONTSET              (pango_fontset_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontsetClass"></a><h3>PangoFontsetClass</h3>
+<pre class="programlisting">typedef struct {
+  GObjectClass parent_class;
+
+
+  PangoFont *       (*get_font)     (PangoFontset     *fontset,
+                                    guint             wc);
+
+  PangoFontMetrics *(*get_metrics)  (PangoFontset     *fontset);
+  PangoLanguage *   (*get_language) (PangoFontset     *fontset);
+  void              (*foreach)      (PangoFontset           *fontset,
+                                    PangoFontsetForeachFunc func,
+                                    gpointer                data);
+} PangoFontsetClass;
+</pre>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontsetClass" title="PangoFontsetClass"><span class="type">PangoFontsetClass</span></a> structure holds the virtual functions for
+a particular <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a> implementation.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"
+>GObjectClass</a> <em class="structfield"><code>parent_class</code></em>;</span></p></td>
+<td>parent <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"
+><span class="type">GObjectClass</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_font</code></em> ()</span></p></td>
+<td>a function to get the font in the fontset that contains the 
+   best glyph for the given Unicode character; see <a class="link" href="pango-Fonts.html#pango-fontset-get-font" title="pango_fontset_get_font ()"><code class="function">pango_fontset_get_font()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_metrics</code></em> ()</span></p></td>
+<td>a function to get overall metric information for the fonts 
+   in the fontset; see <a class="link" href="pango-Fonts.html#pango-fontset-get-metrics" title="pango_fontset_get_metrics ()"><code class="function">pango_fontset_get_metrics()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>get_language</code></em> ()</span></p></td>
+<td>a function to get the language of the fontset.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>foreach</code></em> ()</span></p></td>
+<td>a function to loop over the fonts in the fontset. See
+   <a class="link" href="pango-Fonts.html#pango-fontset-foreach" title="pango_fontset_foreach ()"><code class="function">pango_fontset_foreach()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fontset-get-font"></a><h3>pango_fontset_get_font ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         pango_fontset_get_font              (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> wc);</pre>
+<p>
+Returns the font in the fontset that contains the best glyph for the
+Unicode character <em class="parameter"><code>wc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> a Unicode character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>. The caller must call g_object_unref when finished
+         with the font.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fontset-get-metrics"></a><h3>pango_fontset_get_metrics ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  pango_fontset_get_metrics           (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset);</pre>
+<p>
+Get overall metric information for the fonts in the fontset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> object. The caller must call <a class="link" href="pango-Fonts.html#pango-font-metrics-unref" title="pango_font_metrics_unref ()"><code class="function">pango_font_metrics_unref()</code></a>
+  when finished using the object.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontsetForeachFunc"></a><h3>PangoFontsetForeachFunc ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            (*PangoFontsetForeachFunc)          (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+A callback function used by <a class="link" href="pango-Fonts.html#pango-fontset-foreach" title="pango_fontset_foreach ()"><code class="function">pango_fontset_foreach()</code></a> when enumerating
+the fonts in a fontset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a font from <em class="parameter"><code>fontset</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> callback data
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, stop iteration and return immediately.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fontset-foreach"></a><h3>pango_fontset_foreach ()</h3>
+<pre class="programlisting">void                pango_fontset_foreach               (<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *fontset,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontsetForeachFunc" title="PangoFontsetForeachFunc ()">PangoFontsetForeachFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+Iterates through all the fonts in a fontset, calling <em class="parameter"><code>func</code></em> for
+each one. If <em class="parameter"><code>func</code></em> returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, that stops the iteration.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td> Callback function
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> data to pass to the callback function
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFontsetSimple-struct"></a><h3>PangoFontsetSimple</h3>
+<pre class="programlisting">typedef struct _PangoFontsetSimple PangoFontsetSimple;</pre>
+<p>
+<a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a> is a implementation of the abstract
+<a class="link" href="pango-Fonts.html#PangoFontset"><span class="type">PangoFontset</span></a> base class in terms of an array of fonts,
+which the creator provides when constructing the
+<a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-FONTSET-SIMPLE--CAPS"></a><h3>PANGO_TYPE_FONTSET_SIMPLE</h3>
+<pre class="programlisting">#define PANGO_TYPE_FONTSET_SIMPLE       (pango_fontset_simple_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fontset-simple-new"></a><h3>pango_fontset_simple_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a> * pango_fontset_simple_new           (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Creates a new <a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a> for the given language.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a>, which should
+              be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fontset-simple-append"></a><h3>pango_fontset_simple_append ()</h3>
+<pre class="programlisting">void                pango_fontset_simple_append         (<a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a> *fontset,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Adds a font to the fontset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-fontset-simple-size"></a><h3>pango_fontset_simple_size ()</h3>
+<pre class="programlisting">int                 pango_fontset_simple_size           (<a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a> *fontset);</pre>
+<p>
+Returns the number of fonts in the fontset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontsetSimple"><span class="type">PangoFontsetSimple</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the size of <em class="parameter"><code>fontset</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-FreeType-Fonts-and-Rendering.html b/docs/html/pango-FreeType-Fonts-and-Rendering.html
new file mode 100755 (executable)
index 0000000..be1b4aa
--- /dev/null
@@ -0,0 +1,856 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>FreeType Fonts and Rendering</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="rendering.html" title="Rendering with Pango">
+<link rel="prev" href="pango-Win32-Fonts-and-Rendering.html" title="Win32 Fonts and Rendering">
+<link rel="next" href="pango-Xft-Fonts-and-Rendering.html" title="Xft Fonts and Rendering">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Win32-Fonts-and-Rendering.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="rendering.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Xft-Fonts-and-Rendering.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-FreeType-Fonts-and-Rendering.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-FreeType-Fonts-and-Rendering.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-FreeType-Fonts-and-Rendering.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-FreeType-Fonts-and-Rendering"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-FreeType-Fonts-and-Rendering.top_of_page"></a>FreeType Fonts and Rendering</span></h2>
+<p>FreeType Fonts and Rendering — Functions for shape engines to manipulate FreeType fonts</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-FreeType-Fonts-and-Rendering.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoFT2FontMap"></a><pre class="synopsis">
+                    <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap-struct" title="PangoFT2FontMap">PangoFT2FontMap</a>;
+#define             <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-FT2--CAPS" title="PANGO_RENDER_TYPE_FT2">PANGO_RENDER_TYPE_FT2</a>
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new" title="pango_ft2_font_map_new ()">pango_ft2_font_map_new</a>              (void);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-resolution" title="pango_ft2_font_map_set_resolution ()">pango_ft2_font_map_set_resolution</a>   (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap,
+                                                         double dpi_x,
+                                                         double dpi_y);
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context" title="pango_ft2_font_map_create_context ()">pango_ft2_font_map_create_context</a>   (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap);
+void                (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc" title="PangoFT2SubstituteFunc ()">*PangoFT2SubstituteFunc</a>)           (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute" title="pango_ft2_font_map_set_default_substitute ()">pango_ft2_font_map_set_default_substitute</a>
+                                                        (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap,
+                                                         <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc" title="PangoFT2SubstituteFunc ()">PangoFT2SubstituteFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> notify);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-substitute-changed" title="pango_ft2_font_map_substitute_changed ()">pango_ft2_font_map_substitute_changed</a>
+                                                        (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap);
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-context" title="pango_ft2_get_context ()">pango_ft2_get_context</a>               (double dpi_x,
+                                                         double dpi_y);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render" title="pango_ft2_render ()">pango_ft2_render</a>                    (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-transformed" title="pango_ft2_render_transformed ()">pango_ft2_render_transformed</a>        (FT_Bitmap *bitmap,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line" title="pango_ft2_render_layout_line ()">pango_ft2_render_layout_line</a>        (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line-subpixel" title="pango_ft2_render_layout_line_subpixel ()">pango_ft2_render_layout_line_subpixel</a>
+                                                        (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout" title="pango_ft2_render_layout ()">pango_ft2_render_layout</a>             (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-subpixel" title="pango_ft2_render_layout_subpixel ()">pango_ft2_render_layout_subpixel</a>    (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-unknown-glyph" title="pango_ft2_get_unknown_glyph ()">pango_ft2_get_unknown_glyph</a>         (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+int                 <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-kerning" title="pango_ft2_font_get_kerning ()">pango_ft2_font_get_kerning</a>          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> left,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> right);
+FT_Face             <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-face" title="pango_ft2_font_get_face ()">pango_ft2_font_get_face</a>             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-coverage" title="pango_ft2_font_get_coverage ()">pango_ft2_font_get_coverage</a>         (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display" title="pango_ft2_font_map_for_display ()">pango_ft2_font_map_for_display</a>      (void);
+void                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display" title="pango_ft2_shutdown_display ()">pango_ft2_shutdown_display</a>          (void);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-FreeType-Fonts-and-Rendering.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a>
+         +----<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a>
+               +----PangoFT2FontMap
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-FreeType-Fonts-and-Rendering.description"></a><h2>Description</h2>
+<p>
+The macros and functions in this section are used to access fonts and render
+text to bitmaps using the FreeType 2 library.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-FreeType-Fonts-and-Rendering.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoFT2FontMap-struct"></a><h3>PangoFT2FontMap</h3>
+<pre class="programlisting">typedef struct _PangoFT2FontMap PangoFT2FontMap;</pre>
+<p>
+The <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap"><span class="type">PangoFT2FontMap</span></a> is the <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> implementation for FreeType fonts.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-FT2--CAPS"></a><h3>PANGO_RENDER_TYPE_FT2</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_FT2 "PangoRenderFT2"
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PANGO_RENDER_TYPE_FT2</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+A string constant that was used to identify shape engines that work
+with the FreeType backend. See <a class="link" href="PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS" title="PANGO_RENDER_TYPE_FC"><code class="literal">PANGO_RENDER_TYPE_FC</code></a> for the replacement.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-map-new"></a><h3>pango_ft2_font_map_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_ft2_font_map_new              (void);</pre>
+<p>
+Create a new <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap"><span class="type">PangoFT2FontMap</span></a> object; a fontmap is used
+to cache information about available fonts, and holds
+certain global parameters such as the resolution and
+the default substitute function (see
+<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute" title="pango_ft2_font_map_set_default_substitute ()"><code class="function">pango_ft2_font_map_set_default_substitute()</code></a>).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly created fontmap object. Unref
+with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a> when you are finished with it.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-map-set-resolution"></a><h3>pango_ft2_font_map_set_resolution ()</h3>
+<pre class="programlisting">void                pango_ft2_font_map_set_resolution   (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap,
+                                                         double dpi_x,
+                                                         double dpi_y);</pre>
+<p>
+Sets the horizontal and vertical resolutions for the fontmap.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <span class="type">PangoFT2Fontmap</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dpi_x</code></em> :</span></p></td>
+<td> dots per inch in the X direction
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dpi_y</code></em> :</span></p></td>
+<td> dots per inch in the Y direction
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-map-create-context"></a><h3>pango_ft2_font_map_create_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_ft2_font_map_create_context   (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_font_map_create_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Create a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> for the given fontmap.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <span class="type">PangoFT2Fontmap</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly created context; free with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFT2SubstituteFunc"></a><h3>PangoFT2SubstituteFunc ()</h3>
+<pre class="programlisting">void                (*PangoFT2SubstituteFunc)           (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+Function type for doing final config tweaking on prepared FcPatterns.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
+<td>the <span class="type">FcPattern</span> to tweak.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>user data.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-map-set-default-substitute"></a><h3>pango_ft2_font_map_set_default_substitute ()</h3>
+<pre class="programlisting">void                pango_ft2_font_map_set_default_substitute
+                                                        (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap,
+                                                         <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc" title="PangoFT2SubstituteFunc ()">PangoFT2SubstituteFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> notify);</pre>
+<p>
+Sets a function that will be called to do final configuration
+substitution on a <span class="type">FcPattern</span> before it is used to load
+the font. This function can be used to do things like set
+hinting and antialiasing options.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap"><span class="type">PangoFT2FontMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td> function to call to to do final config tweaking
+       on <span class="type">FcPattern</span> objects.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> data to pass to <em class="parameter"><code>func</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
+<td> function to call when <em class="parameter"><code>data</code></em> is no longer used.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-map-substitute-changed"></a><h3>pango_ft2_font_map_substitute_changed ()</h3>
+<pre class="programlisting">void                pango_ft2_font_map_substitute_changed
+                                                        (<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a> *fontmap);</pre>
+<p>
+Call this function any time the results of the
+default substitution function set with
+<a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute" title="pango_ft2_font_map_set_default_substitute ()"><code class="function">pango_ft2_font_map_set_default_substitute()</code></a> change.
+That is, if your substitution function will return different
+results for the same input pattern, you must call this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>fontmap</code></em> :</span></p></td>
+<td> a <span class="type">PangoFT2Fontmap</span>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-get-context"></a><h3>pango_ft2_get_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_ft2_get_context               (double dpi_x,
+                                                         double dpi_y);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_get_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Retrieves a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> for the default PangoFT2 fontmap
+(see <code class="function">pango_ft2_fontmap_get_for_display()</code>) and sets the resolution
+for the default fontmap to <em class="parameter"><code>dpi_x</code></em> by <em class="parameter"><code>dpi_y</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dpi_x</code></em> :</span></p></td>
+<td>  the horizontal DPI of the target device
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dpi_y</code></em> :</span></p></td>
+<td>  the vertical DPI of the target device
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-render"></a><h3>pango_ft2_render ()</h3>
+<pre class="programlisting">void                pango_ft2_render                    (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);</pre>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto a FreeType2 bitmap.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bitmap</code></em> :</span></p></td>
+<td>  the FreeType2 bitmap onto which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of the start of the string (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of the baseline (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-render-transformed"></a><h3>pango_ft2_render_transformed ()</h3>
+<pre class="programlisting">void                pango_ft2_render_transformed        (FT_Bitmap *bitmap,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto a FreeType2 bitmap, possibly
+transforming the layed-out coordinates through a transformation
+matrix. Note that the transformation matrix for <em class="parameter"><code>font</code></em> is not
+changed, so to produce correct rendering results, the <em class="parameter"><code>font</code></em>
+must have been loaded using a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> with an identical
+transformation matrix to that passed in to this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bitmap</code></em> :</span></p></td>
+<td>  the FreeType2 bitmap onto which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td>  a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to use an identity transformation
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of the start of the string (in Pango
+          units in user space coordinates)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of the baseline (in Pango units
+          in user space coordinates)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-render-layout-line"></a><h3>pango_ft2_render_layout_line ()</h3>
+<pre class="programlisting">void                pango_ft2_render_layout_line        (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> onto a FreeType2 bitmap</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bitmap</code></em> :</span></p></td>
+<td>    a <span class="type">FT_Bitmap</span> to render the line onto
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the x position of start of string (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the y position of baseline (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-render-layout-line-subpixel"></a><h3>pango_ft2_render_layout_line_subpixel ()</h3>
+<pre class="programlisting">void                pango_ft2_render_layout_line_subpixel
+                                                        (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> onto a FreeType2 bitmap, with he
+location specified in fixed-point Pango units rather than
+pixels. (Using this will avoid extra inaccuracies from
+rounding to integer pixels multiple times, even if the
+final glyph positions are integers.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bitmap</code></em> :</span></p></td>
+<td>    a <span class="type">FT_Bitmap</span> to render the line onto
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the x position of start of string (in Pango units)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the y position of baseline (in Pango units)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-render-layout"></a><h3>pango_ft2_render_layout ()</h3>
+<pre class="programlisting">void                pango_ft2_render_layout             (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> onto a FreeType2 bitmap</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bitmap</code></em> :</span></p></td>
+<td>    a <span class="type">FT_Bitmap</span> to render the layout onto
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the X position of the left of the layout (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the Y position of the top of the layout (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-render-layout-subpixel"></a><h3>pango_ft2_render_layout_subpixel ()</h3>
+<pre class="programlisting">void                pango_ft2_render_layout_subpixel    (FT_Bitmap *bitmap,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> onto a FreeType2 bitmap, with he
+location specified in fixed-point Pango units rather than
+pixels. (Using this will avoid extra inaccuracies from
+rounding to integer pixels multiple times, even if the
+final glyph positions are integers.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bitmap</code></em> :</span></p></td>
+<td>    a <span class="type">FT_Bitmap</span> to render the layout onto
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the X position of the left of the layout (in Pango units)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the Y position of the top of the layout (in Pango units)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-get-unknown-glyph"></a><h3>pango_ft2_get_unknown_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_ft2_get_unknown_glyph         (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_get_unknown_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Return the index of a glyph suitable for drawing unknown characters with
+<em class="parameter"><code>font</code></em>, or <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS" title="PANGO_GLYPH_EMPTY"><code class="literal">PANGO_GLYPH_EMPTY</code></a> if no suitable glyph found.
+</p>
+<p>
+If you want to draw an unknown-box for a character that is not covered
+by the font,
+use <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()"><code class="function">PANGO_GET_UNKNOWN_GLYPH()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a glyph index into <em class="parameter"><code>font</code></em>, or <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS" title="PANGO_GLYPH_EMPTY"><code class="literal">PANGO_GLYPH_EMPTY</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-get-kerning"></a><h3>pango_ft2_font_get_kerning ()</h3>
+<pre class="programlisting">int                 pango_ft2_font_get_kerning          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> left,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> right);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_font_get_kerning</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Retrieves kerning information for a combination of two glyphs.
+</p>
+<p>
+Use <a class="link" href="PangoFcFont.html#pango-fc-font-kern-glyphs" title="pango_fc_font_kern_glyphs ()"><code class="function">pango_fc_font_kern_glyphs()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>left</code></em> :</span></p></td>
+<td> the left <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>right</code></em> :</span></p></td>
+<td> the right <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The amount of kerning (in Pango units) to apply for
+the given combination of glyphs.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-get-face"></a><h3>pango_ft2_font_get_face ()</h3>
+<pre class="programlisting">FT_Face             pango_ft2_font_get_face             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_font_get_face</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns the native FreeType2 <span class="type">FT_Face</span> structure used for this <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+This may be useful if you want to use FreeType2 functions directly.
+</p>
+<p>
+Use <a class="link" href="PangoFcFont.html#pango-fc-font-lock-face" title="pango_fc_font_lock_face ()"><code class="function">pango_fc_font_lock_face()</code></a> instead; when you are done with a
+face from <a class="link" href="PangoFcFont.html#pango-fc-font-lock-face" title="pango_fc_font_lock_face ()"><code class="function">pango_fc_font_lock_face()</code></a> you must call
+<a class="link" href="PangoFcFont.html#pango-fc-font-unlock-face" title="pango_fc_font_unlock_face ()"><code class="function">pango_fc_font_unlock_face()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to a <span class="type">FT_Face</span> structure, with the size set correctly,
+              or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>font</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-get-coverage"></a><h3>pango_ft2_font_get_coverage ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage">PangoCoverage</a> *     pango_ft2_font_get_coverage         (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_font_get_coverage</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Gets the <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a> for a <span class="type">PangoFT2Font</span>. Use
+<a class="link" href="pango-Fonts.html#pango-font-get-coverage" title="pango_font_get_coverage ()"><code class="function">pango_font_get_coverage()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <span class="type">PangoFT2Font</span>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a language tag.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Coverage-Maps.html#PangoCoverage" title="PangoCoverage"><span class="type">PangoCoverage</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-font-map-for-display"></a><h3>pango_ft2_font_map_for_display ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_ft2_font_map_for_display      (void);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_font_map_for_display</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns a <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap"><span class="type">PangoFT2FontMap</span></a>. This font map is cached and should
+not be freed. If the font map is no longer needed, it can
+be released with <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display" title="pango_ft2_shutdown_display ()"><code class="function">pango_ft2_shutdown_display()</code></a>. Use of the
+global PangoFT2 fontmap is deprecated; use <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new" title="pango_ft2_font_map_new ()"><code class="function">pango_ft2_font_map_new()</code></a>
+instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap"><span class="type">PangoFT2FontMap</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ft2-shutdown-display"></a><h3>pango_ft2_shutdown_display ()</h3>
+<pre class="programlisting">void                pango_ft2_shutdown_display          (void);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_ft2_shutdown_display</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Free the global fontmap. (See <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display" title="pango_ft2_font_map_for_display ()"><code class="function">pango_ft2_font_map_for_display()</code></a>)
+Use of the global PangoFT2 fontmap is deprecated.</p>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Glyph-Storage.html b/docs/html/pango-Glyph-Storage.html
new file mode 100755 (executable)
index 0000000..e11ef3b
--- /dev/null
@@ -0,0 +1,2302 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Glyph Storage</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Text-Processing.html" title="Rendering">
+<link rel="next" href="pango-Fonts.html" title="Fonts">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Text-Processing.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Fonts.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Glyph-Storage.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Glyph-Storage.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Glyph-Storage"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Glyph-Storage.top_of_page"></a>Glyph Storage</span></h2>
+<p>Glyph Storage — Structures for storing information about glyphs</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Glyph-Storage.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE">PANGO_SCALE</a>
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-PIXELS--CAPS" title="PANGO_PIXELS()">PANGO_PIXELS</a>                        (d)
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-PIXELS-FLOOR--CAPS" title="PANGO_PIXELS_FLOOR()">PANGO_PIXELS_FLOOR</a>                  (d)
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-PIXELS-CEIL--CAPS" title="PANGO_PIXELS_CEIL()">PANGO_PIXELS_CEIL</a>                   (d)
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-UNITS-ROUND--CAPS" title="PANGO_UNITS_ROUND()">PANGO_UNITS_ROUND</a>                   (d)
+double              <a class="link" href="pango-Glyph-Storage.html#pango-units-to-double" title="pango_units_to_double ()">pango_units_to_double</a>               (int i);
+int                 <a class="link" href="pango-Glyph-Storage.html#pango-units-from-double" title="pango_units_from_double ()">pango_units_from_double</a>             (double d);
+                    <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a>;
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-ASCENT--CAPS" title="PANGO_ASCENT()">PANGO_ASCENT</a>                        (rect)
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-DESCENT--CAPS" title="PANGO_DESCENT()">PANGO_DESCENT</a>                       (rect)
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-LBEARING--CAPS" title="PANGO_LBEARING()">PANGO_LBEARING</a>                      (rect)
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-RBEARING--CAPS" title="PANGO_RBEARING()">PANGO_RBEARING</a>                      (rect)
+void                <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()">pango_extents_to_pixels</a>             (<a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *inclusive,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *nearest);
+                    <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a>;
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-TYPE-MATRIX--CAPS" title="PANGO_TYPE_MATRIX">PANGO_TYPE_MATRIX</a>
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-MATRIX-INIT--CAPS" title="PANGO_MATRIX_INIT">PANGO_MATRIX_INIT</a>
+<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *       <a class="link" href="pango-Glyph-Storage.html#pango-matrix-copy" title="pango_matrix_copy ()">pango_matrix_copy</a>                   (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-free" title="pango_matrix_free ()">pango_matrix_free</a>                   (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-translate" title="pango_matrix_translate ()">pango_matrix_translate</a>              (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double tx,
+                                                         double ty);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-scale" title="pango_matrix_scale ()">pango_matrix_scale</a>                  (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double scale_x,
+                                                         double scale_y);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-rotate" title="pango_matrix_rotate ()">pango_matrix_rotate</a>                 (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double degrees);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-concat" title="pango_matrix_concat ()">pango_matrix_concat</a>                 (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *new_matrix);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-point" title="pango_matrix_transform_point ()">pango_matrix_transform_point</a>        (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double *x,
+                                                         double *y);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-distance" title="pango_matrix_transform_distance ()">pango_matrix_transform_distance</a>     (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double *dx,
+                                                         double *dy);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-rectangle" title="pango_matrix_transform_rectangle ()">pango_matrix_transform_rectangle</a>    (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *rect);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle" title="pango_matrix_transform_pixel_rectangle ()">pango_matrix_transform_pixel_rectangle</a>
+                                                        (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *rect);
+double              <a class="link" href="pango-Glyph-Storage.html#pango-matrix-get-font-scale-factor" title="pango_matrix_get_font_scale_factor ()">pango_matrix_get_font_scale_factor</a>  (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);
+typedef             <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>;
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS" title="PANGO_GLYPH_EMPTY">PANGO_GLYPH_EMPTY</a>
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-INVALID-INPUT--CAPS" title="PANGO_GLYPH_INVALID_INPUT">PANGO_GLYPH_INVALID_INPUT</a>
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS" title="PANGO_GLYPH_UNKNOWN_FLAG">PANGO_GLYPH_UNKNOWN_FLAG</a>
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()">PANGO_GET_UNKNOWN_GLYPH</a>             (wc)
+                    <a class="link" href="pango-Glyph-Storage.html#PangoGlyphInfo" title="PangoGlyphInfo">PangoGlyphInfo</a>;
+                    <a class="link" href="pango-Glyph-Storage.html#PangoGlyphGeometry" title="PangoGlyphGeometry">PangoGlyphGeometry</a>;
+typedef             <a class="link" href="pango-Glyph-Storage.html#PangoGlyphUnit" title="PangoGlyphUnit">PangoGlyphUnit</a>;
+                    <a class="link" href="pango-Glyph-Storage.html#PangoGlyphVisAttr" title="PangoGlyphVisAttr">PangoGlyphVisAttr</a>;
+                    <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a>;
+                    <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a>;
+                    <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a>;
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-STRING--CAPS" title="PANGO_TYPE_GLYPH_STRING">PANGO_TYPE_GLYPH_STRING</a>
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *  <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-new" title="pango_glyph_string_new ()">pango_glyph_string_new</a>              (void);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *  <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-copy" title="pango_glyph_string_copy ()">pango_glyph_string_copy</a>             (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *string);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-set-size" title="pango_glyph_string_set_size ()">pango_glyph_string_set_size</a>         (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *string,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> new_len);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-free" title="pango_glyph_string_free ()">pango_glyph_string_free</a>             (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *string);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-extents" title="pango_glyph_string_extents ()">pango_glyph_string_extents</a>          (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-extents-range" title="pango_glyph_string_extents_range ()">pango_glyph_string_extents_range</a>    (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int start,
+                                                         int end,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+int                 <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-get-width" title="pango_glyph_string_get_width ()">pango_glyph_string_get_width</a>        (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-index-to-x" title="pango_glyph_string_index_to_x ()">pango_glyph_string_index_to_x</a>       (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         char *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         int index_,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> trailing,
+                                                         int *x_pos);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-x-to-index" title="pango_glyph_string_x_to_index ()">pango_glyph_string_x_to_index</a>       (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         char *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         int x_pos,
+                                                         int *index_,
+                                                         int *trailing);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-get-logical-widths" title="pango_glyph_string_get_logical_widths ()">pango_glyph_string_get_logical_widths</a>
+                                                        (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         const char *text,
+                                                         int length,
+                                                         int embedding_level,
+                                                         int *logical_widths);
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM--CAPS" title="PANGO_TYPE_GLYPH_ITEM">PANGO_TYPE_GLYPH_ITEM</a>
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *    <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-copy" title="pango_glyph_item_copy ()">pango_glyph_item_copy</a>               (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *orig);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-free" title="pango_glyph_item_free ()">pango_glyph_item_free</a>               (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *    <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-split" title="pango_glyph_item_split ()">pango_glyph_item_split</a>              (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *orig,
+                                                         const char *text,
+                                                         int split_index);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-apply-attrs" title="pango_glyph_item_apply_attrs ()">pango_glyph_item_apply_attrs</a>        (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-letter-space" title="pango_glyph_item_letter_space ()">pango_glyph_item_letter_space</a>       (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *log_attrs,
+                                                         int letter_spacing);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths" title="pango_glyph_item_get_logical_widths ()">pango_glyph_item_get_logical_widths</a> (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text,
+                                                         int *logical_widths);
+#define             <a class="link" href="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM-ITER--CAPS" title="PANGO_TYPE_GLYPH_ITEM_ITER">PANGO_TYPE_GLYPH_ITEM_ITER</a>
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> * <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-copy" title="pango_glyph_item_iter_copy ()">pango_glyph_item_iter_copy</a>         (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *orig);
+void                <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-free" title="pango_glyph_item_iter_free ()">pango_glyph_item_iter_free</a>          (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-start" title="pango_glyph_item_iter_init_start ()">pango_glyph_item_iter_init_start</a>    (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-end" title="pango_glyph_item_iter_init_end ()">pango_glyph_item_iter_init_end</a>      (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster" title="pango_glyph_item_iter_next_cluster ()">pango_glyph_item_iter_next_cluster</a>  (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster" title="pango_glyph_item_iter_prev_cluster ()">pango_glyph_item_iter_prev_cluster</a>  (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Glyph-Storage.description"></a><h2>Description</h2>
+<p>
+<a class="link" href="pango-Text-Processing.html#pango-shape" title="pango_shape ()"><code class="function">pango_shape()</code></a> produces a string of glyphs which
+can be measured or drawn to the screen. The following
+structures are used to store information about
+glyphs.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Glyph-Storage.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE--CAPS"></a><h3>PANGO_SCALE</h3>
+<pre class="programlisting">#define PANGO_SCALE 1024
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> macro represents the scale between dimensions used
+for Pango distances and device units. (The definition of device
+units is dependent on the output device; it will typically be pixels
+for a screen, and points for a printer.) <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> is currently
+1024, but this may be changed in the future.
+</p>
+<p>
+When setting font sizes, device units are always considered to be
+points (as in "12 point font"), rather than pixels.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-PIXELS--CAPS"></a><h3>PANGO_PIXELS()</h3>
+<pre class="programlisting">#define PANGO_PIXELS(d) (((int)(d) + 512) &gt;&gt; 10)
+</pre>
+<p>
+Converts a dimension to device units by rounding.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>d</code></em> :</span></p></td>
+<td>a dimension in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>rounded dimension in device units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-PIXELS-FLOOR--CAPS"></a><h3>PANGO_PIXELS_FLOOR()</h3>
+<pre class="programlisting">#define PANGO_PIXELS_FLOOR(d) (((int)(d)) &gt;&gt; 10)
+</pre>
+<p>
+Converts a dimension to device units by flooring.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>d</code></em> :</span></p></td>
+<td>a dimension in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>floored dimension in device units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.14</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-PIXELS-CEIL--CAPS"></a><h3>PANGO_PIXELS_CEIL()</h3>
+<pre class="programlisting">#define PANGO_PIXELS_CEIL(d) (((int)(d) + 1023) &gt;&gt; 10)
+</pre>
+<p>
+Converts a dimension to device units by ceiling.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>d</code></em> :</span></p></td>
+<td>a dimension in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>ceiled dimension in device units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.14</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-UNITS-ROUND--CAPS"></a><h3>PANGO_UNITS_ROUND()</h3>
+<pre class="programlisting">#define             PANGO_UNITS_ROUND(d)</pre>
+<p>
+Rounds a dimension to whole device units, but does not
+convert it to device units.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>d</code></em> :</span></p></td>
+<td>a dimension in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>rounded dimension in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-units-to-double"></a><h3>pango_units_to_double ()</h3>
+<pre class="programlisting">double              pango_units_to_double               (int i);</pre>
+<p>
+Converts a number in Pango units to floating-point: divides
+it by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>i</code></em> :</span></p></td>
+<td> value in Pango units
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the double value.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-units-from-double"></a><h3>pango_units_from_double ()</h3>
+<pre class="programlisting">int                 pango_units_from_double             (double d);</pre>
+<p>
+Converts a floating-point number to Pango units: multiplies
+it by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> and rounds to nearest integer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>d</code></em> :</span></p></td>
+<td> double floating-point value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the value in Pango units.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoRectangle"></a><h3>PangoRectangle</h3>
+<pre class="programlisting">typedef struct {
+  int x;
+  int y;
+  int width;
+  int height;
+} PangoRectangle;
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a> structure represents a rectangle. It is frequently
+used to represent the logical or ink extents of a single glyph or section
+of text. (See, for instance, <a class="link" href="pango-Fonts.html#pango-font-get-glyph-extents" title="pango_font_get_glyph_extents ()"><code class="function">pango_font_get_glyph_extents()</code></a>)
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>x</code></em>;</span></p></td>
+<td>X coordinate of the left side of the rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>y</code></em>;</span></p></td>
+<td>Y coordinate of the the top side of the rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>width</code></em>;</span></p></td>
+<td>width of the rectangle.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>height</code></em>;</span></p></td>
+<td>height of the rectangle.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ASCENT--CAPS"></a><h3>PANGO_ASCENT()</h3>
+<pre class="programlisting">#define PANGO_ASCENT(rect) (-(rect).y)
+</pre>
+<p>
+Extracts the <em class="firstterm">ascent</em> from a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+representing glyph extents. The ascent is the distance from the
+baseline to the highest point of the character. This is positive if the
+glyph ascends above the baseline.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>rect</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-DESCENT--CAPS"></a><h3>PANGO_DESCENT()</h3>
+<pre class="programlisting">#define PANGO_DESCENT(rect) ((rect).y + (rect).height)
+</pre>
+<p>
+Extracts the <em class="firstterm">descent</em> from a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+representing glyph extents. The descent is the distance from the
+baseline to the lowest point of the character. This is positive if the
+glyph descends below the baseline.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>rect</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-LBEARING--CAPS"></a><h3>PANGO_LBEARING()</h3>
+<pre class="programlisting">#define PANGO_LBEARING(rect) ((rect).x)
+</pre>
+<p>
+Extracts the <em class="firstterm">left bearing</em> from a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+representing glyph extents. The left bearing is the distance from the
+horizontal origin to the farthest left point of the character.
+This is positive for characters drawn completely to the right of the
+glyph origin.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>rect</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-RBEARING--CAPS"></a><h3>PANGO_RBEARING()</h3>
+<pre class="programlisting">#define PANGO_RBEARING(rect) ((rect).x + (rect).width)
+</pre>
+<p>
+Extracts the <em class="firstterm">right bearing</em> from a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+representing glyph extents. The right bearing is the distance from the
+horizontal origin to the farthest right point of the character.
+This is positive except for characters drawn completely to the left of the
+horizontal origin.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>rect</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle"><span class="type">PangoRectangle</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-extents-to-pixels"></a><h3>pango_extents_to_pixels ()</h3>
+<pre class="programlisting">void                pango_extents_to_pixels             (<a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *inclusive,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *nearest);</pre>
+<p>
+Converts extents from Pango units to device units, dividing by the
+<a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> factor and performing rounding.
+</p>
+<p>
+The <em class="parameter"><code>inclusive</code></em> rectangle is converted by flooring the x/y coordinates and extending
+width/height, such that the final rectangle completely includes the original
+rectangle.
+</p>
+<p>
+The <em class="parameter"><code>nearest</code></em> rectangle is converted by rounding the coordinates
+of the rectangle to the nearest device unit (pixel).
+</p>
+<p>
+The rule to which argument to use is: if you want the resulting device-space
+rectangle to completely contain the original rectangle, pass it in as <em class="parameter"><code>inclusive</code></em>.
+If you want two touching-but-not-overlapping rectangles stay
+touching-but-not-overlapping after rounding to device units, pass them in
+as <em class="parameter"><code>nearest</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>inclusive</code></em> :</span></p></td>
+<td> rectangle to round to pixels inclusively, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>nearest</code></em> :</span></p></td>
+<td> rectangle to round to nearest pixels, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoMatrix"></a><h3>PangoMatrix</h3>
+<pre class="programlisting">typedef struct {
+  double xx;
+  double xy;
+  double yx;
+  double yy;
+  double x0;
+  double y0;
+} PangoMatrix;
+</pre>
+<p>
+A structure specifying a transformation between user-space
+coordinates and device coordinates. The transformation
+is given by
+</p>
+<p>
+</p>
+<pre class="programlisting">
+x_device = x_user * matrix-&gt;xx + y_user * matrix-&gt;xy + matrix-&gt;x0;
+y_device = x_user * matrix-&gt;yx + y_user * matrix-&gt;yy + matrix-&gt;y0;
+</pre>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>xx</code></em>;</span></p></td>
+<td> 1st component of the transformation matrix
+</td>
+</tr>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>xy</code></em>;</span></p></td>
+<td> 2nd component of the transformation matrix
+</td>
+</tr>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>yx</code></em>;</span></p></td>
+<td> 3rd component of the transformation matrix
+</td>
+</tr>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>yy</code></em>;</span></p></td>
+<td> 4th component of the transformation matrix
+</td>
+</tr>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>x0</code></em>;</span></p></td>
+<td> x translation
+</td>
+</tr>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>y0</code></em>;</span></p></td>
+<td> y translation
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-MATRIX--CAPS"></a><h3>PANGO_TYPE_MATRIX</h3>
+<pre class="programlisting">#define PANGO_TYPE_MATRIX (pango_matrix_get_type ())
+</pre>
+<p>
+The GObject type for <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a></p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-MATRIX-INIT--CAPS"></a><h3>PANGO_MATRIX_INIT</h3>
+<pre class="programlisting">#define PANGO_MATRIX_INIT { 1., 0., 0., 1., 0., 0. }
+</pre>
+<p>
+Constant that can be used to initialize a PangoMatrix to
+the identity transform.
+</p>
+<p>
+</p>
+<div class="informalexample"><pre class="programlisting">
+PangoMatrix matrix = PANGO_MATRIX_INIT;
+pango_matrix_rotate (&amp;matrix, 45.);
+</pre></div>
+<p>
+</p>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-copy"></a><h3>pango_matrix_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *       pango_matrix_copy                   (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);</pre>
+<p>
+Copies a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, which should
+              be freed with <a class="link" href="pango-Glyph-Storage.html#pango-matrix-free" title="pango_matrix_free ()"><code class="function">pango_matrix_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if
+              <em class="parameter"><code>matrix</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-free"></a><h3>pango_matrix_free ()</h3>
+<pre class="programlisting">void                pango_matrix_free                   (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);</pre>
+<p>
+Free a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a> created with <a class="link" href="pango-Glyph-Storage.html#pango-matrix-copy" title="pango_matrix_copy ()"><code class="function">pango_matrix_copy()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-translate"></a><h3>pango_matrix_translate ()</h3>
+<pre class="programlisting">void                pango_matrix_translate              (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double tx,
+                                                         double ty);</pre>
+<p>
+Changes the transformation represented by <em class="parameter"><code>matrix</code></em> to be the
+transformation given by first translating by (<em class="parameter"><code>tx</code></em>, <em class="parameter"><code>ty</code></em>)
+then applying the original transformation.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tx</code></em> :</span></p></td>
+<td> amount to translate in the X direction
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ty</code></em> :</span></p></td>
+<td> amount to translate in the Y direction
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-scale"></a><h3>pango_matrix_scale ()</h3>
+<pre class="programlisting">void                pango_matrix_scale                  (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double scale_x,
+                                                         double scale_y);</pre>
+<p>
+Changes the transformation represented by <em class="parameter"><code>matrix</code></em> to be the
+transformation given by first scaling by <em class="parameter"><code>sx</code></em> in the X direction
+and <em class="parameter"><code>sy</code></em> in the Y direction then applying the original
+transformation.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scale_x</code></em> :</span></p></td>
+<td> amount to scale by in X direction
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scale_y</code></em> :</span></p></td>
+<td> amount to scale by in Y direction
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-rotate"></a><h3>pango_matrix_rotate ()</h3>
+<pre class="programlisting">void                pango_matrix_rotate                 (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double degrees);</pre>
+<p>
+Changes the transformation represented by <em class="parameter"><code>matrix</code></em> to be the
+transformation given by first rotating by <em class="parameter"><code>degrees</code></em> degrees
+counter-clockwise then applying the original transformation.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>degrees</code></em> :</span></p></td>
+<td> degrees to rotate counter-clockwise
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-concat"></a><h3>pango_matrix_concat ()</h3>
+<pre class="programlisting">void                pango_matrix_concat                 (<a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *new_matrix);</pre>
+<p>
+Changes the transformation represented by <em class="parameter"><code>matrix</code></em> to be the
+transformation given by first applying transformation
+given by <em class="parameter"><code>new_matrix</code></em> then applying the original transformation.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-transform-point"></a><h3>pango_matrix_transform_point ()</h3>
+<pre class="programlisting">void                pango_matrix_transform_point        (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double *x,
+                                                         double *y);</pre>
+<p>
+Transforms the point (<em class="parameter"><code>x</code></em>, <em class="parameter"><code>y</code></em>) by <em class="parameter"><code>matrix</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td> in/out X position
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td> in/out Y position
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-transform-distance"></a><h3>pango_matrix_transform_distance ()</h3>
+<pre class="programlisting">void                pango_matrix_transform_distance     (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         double *dx,
+                                                         double *dy);</pre>
+<p>
+Transforms the distance vector (<em class="parameter"><code>dx</code></em>,<em class="parameter"><code>dy</code></em>) by <em class="parameter"><code>matrix</code></em>. This is
+similar to <a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-point" title="pango_matrix_transform_point ()"><code class="function">pango_matrix_transform_point()</code></a> except that the translation
+components of the transformation are ignored. The calculation of
+the returned vector is as follows:
+</p>
+<p>
+</p>
+<pre class="programlisting">
+dx2 = dx1 * xx + dy1 * xy;
+dy2 = dx1 * yx + dy1 * yy;
+</pre>
+<p>
+</p>
+<p>
+Affine transformations are position invariant, so the same vector
+always transforms to the same vector. If (<em class="parameter"><code>x1</code></em>,<em class="parameter"><code>y1</code></em>) transforms
+to (<em class="parameter"><code>x2</code></em>,<em class="parameter"><code>y2</code></em>) then (<em class="parameter"><code>x1</code></em>+<em class="parameter"><code>dx1</code></em>,<em class="parameter"><code>y1</code></em>+<em class="parameter"><code>dy1</code></em>) will transform to
+(<em class="parameter"><code>x1</code></em>+<em class="parameter"><code>dx2</code></em>,<em class="parameter"><code>y1</code></em>+<em class="parameter"><code>dy2</code></em>) for all values of <em class="parameter"><code>x1</code></em> and <em class="parameter"><code>x2</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dx</code></em> :</span></p></td>
+<td> in/out X component of a distance vector
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dy</code></em> :</span></p></td>
+<td> yn/out Y component of a distance vector
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-transform-rectangle"></a><h3>pango_matrix_transform_rectangle ()</h3>
+<pre class="programlisting">void                pango_matrix_transform_rectangle    (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *rect);</pre>
+<p>
+First transforms <em class="parameter"><code>rect</code></em> using <em class="parameter"><code>matrix</code></em>, then calculates the bounding box
+of the transformed rectangle.  The rectangle should be in Pango units.
+</p>
+<p>
+This function is useful for example when you want to draw a rotated
+<em class="parameter"><code>PangoLayout</code></em> to an image buffer, and want to know how large the image
+should be and how much you should shift the layout when rendering.
+</p>
+<p>
+If you have a rectangle in device units (pixels), use
+<a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle" title="pango_matrix_transform_pixel_rectangle ()"><code class="function">pango_matrix_transform_pixel_rectangle()</code></a>.
+</p>
+<p>
+If you have the rectangle in Pango units and want to convert to
+transformed pixel bounding box, it is more accurate to transform it first
+(using this function) and pass the result to <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()"><code class="function">pango_extents_to_pixels()</code></a>,
+first argument, for an inclusive rounded rectangle.
+However, there are valid reasons that you may want to convert
+to pixels first and then transform, for example when the transformed
+coordinates may overflow in Pango units (large matrix translation for
+example).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rect</code></em> :</span></p></td>
+<td> in/out bounding box in Pango units, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-transform-pixel-rectangle"></a><h3>pango_matrix_transform_pixel_rectangle ()</h3>
+<pre class="programlisting">void                pango_matrix_transform_pixel_rectangle
+                                                        (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *rect);</pre>
+<p>
+First transforms the <em class="parameter"><code>rect</code></em> using <em class="parameter"><code>matrix</code></em>, then calculates the bounding box
+of the transformed rectangle.  The rectangle should be in device units
+(pixels).
+</p>
+<p>
+This function is useful for example when you want to draw a rotated
+<em class="parameter"><code>PangoLayout</code></em> to an image buffer, and want to know how large the image
+should be and how much you should shift the layout when rendering.
+</p>
+<p>
+For better accuracy, you should use <a class="link" href="pango-Glyph-Storage.html#pango-matrix-transform-rectangle" title="pango_matrix_transform_rectangle ()"><code class="function">pango_matrix_transform_rectangle()</code></a> on
+original rectangle in Pango units and convert to pixels afterward
+using <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()"><code class="function">pango_extents_to_pixels()</code></a>'s first argument.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rect</code></em> :</span></p></td>
+<td> in/out bounding box in device units, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-matrix-get-font-scale-factor"></a><h3>pango_matrix_get_font_scale_factor ()</h3>
+<pre class="programlisting">double              pango_matrix_get_font_scale_factor  (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);</pre>
+<p>
+Returns the scale factor of a matrix on the height of the font.
+That is, the scale factor in the direction perpendicular to the
+vector that the X coordinate is mapped to.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the scale factor of <em class="parameter"><code>matrix</code></em> on the height of the font,
+or 1.0 if <em class="parameter"><code>matrix</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.12</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyph"></a><h3>PangoGlyph</h3>
+<pre class="programlisting">typedef guint32 PangoGlyph;
+</pre>
+<p>
+A <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> represents a single glyph in the output form of a string.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-GLYPH-EMPTY--CAPS"></a><h3>PANGO_GLYPH_EMPTY</h3>
+<pre class="programlisting">#define PANGO_GLYPH_EMPTY           ((PangoGlyph)0x0FFFFFFF)
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS" title="PANGO_GLYPH_EMPTY"><code class="literal">PANGO_GLYPH_EMPTY</code></a> macro represents a <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> value that has a
+special meaning, which is a zero-width empty glyph.  This is useful for
+example in shaper modules, to use as the glyph for various zero-width
+Unicode characters (those passing <a class="link" href="pango-Miscellaneous-Utilities.html#pango-is-zero-width" title="pango_is_zero_width ()"><code class="function">pango_is_zero_width()</code></a>).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-GLYPH-INVALID-INPUT--CAPS"></a><h3>PANGO_GLYPH_INVALID_INPUT</h3>
+<pre class="programlisting">#define PANGO_GLYPH_INVALID_INPUT   ((PangoGlyph)0xFFFFFFFF)
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS" title="PANGO_GLYPH_EMPTY"><code class="literal">PANGO_GLYPH_EMPTY</code></a> macro represents a <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> value that has a
+special meaning of invalid input.  <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> produces one such glyph
+per invalid input UTF-8 byte and such a glyph is rendered as a crossed
+box.
+Note that this value is defined such that it has the <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS" title="PANGO_GLYPH_UNKNOWN_FLAG"><code class="literal">PANGO_GLYPH_UNKNOWN_FLAG</code></a>
+on.
+</p>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-GLYPH-UNKNOWN-FLAG--CAPS"></a><h3>PANGO_GLYPH_UNKNOWN_FLAG</h3>
+<pre class="programlisting">#define PANGO_GLYPH_UNKNOWN_FLAG    ((PangoGlyph)0x10000000)
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS" title="PANGO_GLYPH_UNKNOWN_FLAG"><code class="literal">PANGO_GLYPH_UNKNOWN_FLAG</code></a> macro is a flag value that can be added to
+a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+><span class="type">gunichar</span></a> value of a valid Unicode character, to produce a <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a>
+value, representing an unknown-character glyph for the respective <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+><span class="type">gunichar</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-GET-UNKNOWN-GLYPH--CAPS"></a><h3>PANGO_GET_UNKNOWN_GLYPH()</h3>
+<pre class="programlisting">#define PANGO_GET_UNKNOWN_GLYPH(wc) ((PangoGlyph)(wc)|PANGO_GLYPH_UNKNOWN_FLAG)
+</pre>
+<p>
+Returns a <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a> value that means no glyph was found for <em class="parameter"><code>wc</code></em>.
+The way this unknown glyphs are rendered is backend specific.  For example,
+a box with the hexadecimal Unicode code-point of the character written in it
+is what is done in the most common backends.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td>a Unicode character
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphInfo"></a><h3>PangoGlyphInfo</h3>
+<pre class="programlisting">typedef struct {
+  PangoGlyph    glyph;
+  PangoGlyphGeometry geometry;
+  PangoGlyphVisAttr  attr;
+} PangoGlyphInfo;
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PangoGlyphInfo" title="PangoGlyphInfo"><span class="type">PangoGlyphInfo</span></a> structure represents a single glyph together with
+positioning information and visual attributes.
+It contains the following fields.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> <em class="structfield"><code>glyph</code></em>;</span></p></td>
+<td>the glyph itself.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphGeometry" title="PangoGlyphGeometry">PangoGlyphGeometry</a> <em class="structfield"><code>geometry</code></em>;</span></p></td>
+<td>the positional information about the glyph.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphVisAttr" title="PangoGlyphVisAttr">PangoGlyphVisAttr</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the visual attributes of the glyph.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphGeometry"></a><h3>PangoGlyphGeometry</h3>
+<pre class="programlisting">typedef struct {
+  PangoGlyphUnit width;
+  PangoGlyphUnit x_offset;
+  PangoGlyphUnit y_offset;
+} PangoGlyphGeometry;
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PangoGlyphGeometry" title="PangoGlyphGeometry"><span class="type">PangoGlyphGeometry</span></a> structure contains width and positioning
+information for a single glyph.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphUnit" title="PangoGlyphUnit">PangoGlyphUnit</a> <em class="structfield"><code>width</code></em>;</span></p></td>
+<td>the logical width to use for the the character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphUnit" title="PangoGlyphUnit">PangoGlyphUnit</a> <em class="structfield"><code>x_offset</code></em>;</span></p></td>
+<td>horizontal offset from nominal character position.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphUnit" title="PangoGlyphUnit">PangoGlyphUnit</a> <em class="structfield"><code>y_offset</code></em>;</span></p></td>
+<td>vertical offset from nominal character position.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphUnit"></a><h3>PangoGlyphUnit</h3>
+<pre class="programlisting">typedef gint32 PangoGlyphUnit;
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PangoGlyphUnit" title="PangoGlyphUnit"><span class="type">PangoGlyphUnit</span></a> type is used to store dimensions within
+Pango. Dimensions are stored in 1/<a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> of a device unit.
+(A device unit might be a pixel for screen display, or
+a point on a printer.) <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> is currently 1024, and
+may change in the future (unlikely though), but you should not
+depend on its exact value. The <a class="link" href="pango-Glyph-Storage.html#PANGO-PIXELS--CAPS" title="PANGO_PIXELS()"><code class="function">PANGO_PIXELS()</code></a> macro can be used
+to convert from glyph units into device units with correct rounding.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphVisAttr"></a><h3>PangoGlyphVisAttr</h3>
+<pre class="programlisting">typedef struct {
+  guint is_cluster_start : 1;
+} PangoGlyphVisAttr;
+</pre>
+<p>
+The PangoGlyphVisAttr is used to communicate information between
+the shaping phase and the rendering phase.  More attributes may be
+added in the future.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_cluster_start</code></em> : 1;</span></p></td>
+<td>set for the first logical glyph in each cluster. (Clusters
+                  are stored in visual order, within the cluster, glyphs
+                  are always ordered in logical order, since visual
+                  order is meaningless; that is, in Arabic text, accent glyphs
+                  follow the glyphs for the base character.)
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphString"></a><h3>PangoGlyphString</h3>
+<pre class="programlisting">typedef struct {
+  gint num_glyphs;
+
+  PangoGlyphInfo *glyphs;
+
+  /* This is a memory inefficient way of representing the information
+   * here - each value gives the byte index within the text
+   * corresponding to the glyph string of the start of the cluster to
+   * which the glyph belongs.
+   */
+  gint *log_clusters;
+} PangoGlyphString;
+</pre>
+<p>
+The <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> structure is used to store strings
+of glyphs with geometry and visual attribute information.
+The storage for the glyph information is owned
+by the structure which simplifies memory management.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>num_glyphs</code></em>;</span></p></td>
+<td>the number of glyphs in the string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphInfo" title="PangoGlyphInfo">PangoGlyphInfo</a> *<em class="structfield"><code>glyphs</code></em>;</span></p></td>
+<td>an array of <a class="link" href="pango-Glyph-Storage.html#PangoGlyphInfo" title="PangoGlyphInfo"><span class="type">PangoGlyphInfo</span></a> structures of length <em class="structfield"><code>num_glyphs</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *<em class="structfield"><code>log_clusters</code></em>;</span></p></td>
+<td>for each glyph, byte index of the starting character for the
+cluster. The indices are relative to the start of the text
+corresponding to the PangoGlyphString.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphItem"></a><h3>PangoGlyphItem</h3>
+<pre class="programlisting">typedef struct {
+  PangoItem        *item;
+  PangoGlyphString *glyphs;
+} PangoGlyphItem;
+</pre>
+<p>
+A <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a> is a pair of a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> and the glyphs
+resulting from shaping the text corresponding to an item.
+As an example of the usage of <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>, the results
+of shaping text with <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> is a list of <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>,
+each of which contains a list of <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *<em class="structfield"><code>item</code></em>;</span></p></td>
+<td>a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structure that provides information
+       about a segment of text.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *<em class="structfield"><code>glyphs</code></em>;</span></p></td>
+<td>the glyphs obtained by shaping the text
+         corresponding to <em class="parameter"><code>item</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGlyphItemIter"></a><h3>PangoGlyphItemIter</h3>
+<pre class="programlisting">typedef struct {
+  PangoGlyphItem *glyph_item;
+  const gchar *text;
+
+  int start_glyph;
+  int start_index;
+  int start_char;
+
+  int end_glyph;
+  int end_index;
+  int end_char;
+} PangoGlyphItemIter;
+</pre>
+<p>
+A <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> is an iterator over the clusters in a
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>.  The <em class="firstterm">forward direction</em> of the
+iterator is the logical direction of text.  That is, with increasing
+<em class="parameter"><code>start_index</code></em> and <em class="parameter"><code>start_char</code></em> values.  If <em class="parameter"><code>glyph_item</code></em> is right-to-left
+(that is, if <code class="literal"><em class="parameter"><code>glyph_item-&gt;item-&gt;analysis.level</code></em></code> is odd),
+then <em class="parameter"><code>start_glyph</code></em> decreases as the iterator moves forward.  Moreover,
+in right-to-left cases, <em class="parameter"><code>start_glyph</code></em> is greater than <em class="parameter"><code>end_glyph</code></em>.
+An iterator should be initialized using either of
+<a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-start" title="pango_glyph_item_iter_init_start ()"><code class="function">pango_glyph_item_iter_init_start()</code></a> and
+<a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-init-end" title="pango_glyph_item_iter_init_end ()"><code class="function">pango_glyph_item_iter_init_end()</code></a>, for forward and backward iteration
+respectively, and walked over using any desired mixture of
+<a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster" title="pango_glyph_item_iter_next_cluster ()"><code class="function">pango_glyph_item_iter_next_cluster()</code></a> and
+<a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster" title="pango_glyph_item_iter_prev_cluster ()"><code class="function">pango_glyph_item_iter_prev_cluster()</code></a>.  A common idiom for doing a
+forward iteration over the clusters is:
+</p>
+<pre class="programlisting">
+PangoGlyphItemIter cluster_iter;
+gboolean have_cluster;
+for (have_cluster = pango_glyph_item_iter_init_start (&amp;cluster_iter,
+                                                      glyph_item, text);
+     have_cluster;
+     have_cluster = pango_glyph_item_iter_next_cluster (&amp;cluster_iter))
+{
+  ...
+}
+</pre>
+<p>
+Note that <em class="parameter"><code>text</code></em> is the start of the text for layout, which is then
+indexed by <code class="literal"><em class="parameter"><code>glyph_item-&gt;item-&gt;offset</code></em></code> to get to the
+text of <em class="parameter"><code>glyph_item</code></em>.  The <em class="parameter"><code>start_index</code></em> and <em class="parameter"><code>end_index</code></em> values can directly
+index into <em class="parameter"><code>text</code></em>.  The <em class="parameter"><code>start_glyph</code></em>, <em class="parameter"><code>end_glyph</code></em>, <em class="parameter"><code>start_char</code></em>, and <em class="parameter"><code>end_char</code></em>
+values however are zero-based for the <em class="parameter"><code>glyph_item</code></em>.  For each cluster, the
+item pointed at by the start variables is included in the cluster while
+the one pointed at by end variables is not.
+None of the members of a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> should be modified manually.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *<em class="structfield"><code>glyph_item</code></em>;</span></p></td>
+<td>the <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a> this iterator iterates over
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *<em class="structfield"><code>text</code></em>;</span></p></td>
+<td>the UTF-8 text that <em class="parameter"><code>glyph_item</code></em> refers to
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>start_glyph</code></em>;</span></p></td>
+<td>starting glyph of the cluster
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>start_index</code></em>;</span></p></td>
+<td>starting text index of the cluster
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>start_char</code></em>;</span></p></td>
+<td>starting number of characters of the cluster
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>end_glyph</code></em>;</span></p></td>
+<td>ending glyph of the cluster
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>end_index</code></em>;</span></p></td>
+<td>ending text index of the cluster
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>end_char</code></em>;</span></p></td>
+<td>ending number of characters of the cluster
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-GLYPH-STRING--CAPS"></a><h3>PANGO_TYPE_GLYPH_STRING</h3>
+<pre class="programlisting">#define PANGO_TYPE_GLYPH_STRING (pango_glyph_string_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-new"></a><h3>pango_glyph_string_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *  pango_glyph_string_new              (void);</pre>
+<p>
+Create a new <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>, which
+              should be freed with <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-free" title="pango_glyph_string_free ()"><code class="function">pango_glyph_string_free()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-copy"></a><h3>pango_glyph_string_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *  pango_glyph_string_copy             (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *string);</pre>
+<p>
+Copy a glyph string and associated storage.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>string</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>, which
+              should be freed with <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-free" title="pango_glyph_string_free ()"><code class="function">pango_glyph_string_free()</code></a>,
+              or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>string</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-set-size"></a><h3>pango_glyph_string_set_size ()</h3>
+<pre class="programlisting">void                pango_glyph_string_set_size         (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *string,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> new_len);</pre>
+<p>
+Resize a glyph string to the given length.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>string</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_len</code></em> :</span></p></td>
+<td>   the new length of the string.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-free"></a><h3>pango_glyph_string_free ()</h3>
+<pre class="programlisting">void                pango_glyph_string_free             (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *string);</pre>
+<p>
+Free a glyph string and associated storage.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>string</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-extents"></a><h3>pango_glyph_string_extents ()</h3>
+<pre class="programlisting">void                pango_glyph_string_extents          (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Compute the logical and ink extents of a glyph string. See the documentation
+for <a class="link" href="pango-Fonts.html#pango-font-get-glyph-extents" title="pango_font_get_glyph_extents ()"><code class="function">pango_font_get_glyph_extents()</code></a> for details about the interpretation
+of the rectangles.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>   a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>     a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle used to store the extents of the glyph string as drawn
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the glyph string
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-extents-range"></a><h3>pango_glyph_string_extents_range ()</h3>
+<pre class="programlisting">void                pango_glyph_string_extents_range    (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int start,
+                                                         int end,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Computes the extents of a sub-portion of a glyph string. The extents are
+relative to the start of the glyph string range (the origin of their
+coordinate system is at the start of the range, not at the start of the entire
+glyph string).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>   a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start</code></em> :</span></p></td>
+<td>    start index
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>end</code></em> :</span></p></td>
+<td>      end index (the range is the set of bytes with
+             indices such that start &lt;= index &lt; end)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>     a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle used to store the extents of the glyph string range as drawn
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the glyph string range
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-get-width"></a><h3>pango_glyph_string_get_width ()</h3>
+<pre class="programlisting">int                 pango_glyph_string_get_width        (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);</pre>
+<p>
+Computes the logical width of the glyph string as can also be computed
+using <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-extents" title="pango_glyph_string_extents ()"><code class="function">pango_glyph_string_extents()</code></a>.  However, since this only computes the
+width, it's much faster.  This is in fact only a convenience function that
+computes the sum of geometry.width for each glyph in the <em class="parameter"><code>glyphs</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>   a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the logical width of the glyph string.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.14</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-index-to-x"></a><h3>pango_glyph_string_index_to_x ()</h3>
+<pre class="programlisting">void                pango_glyph_string_index_to_x       (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         char *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         int index_,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> trailing,
+                                                         int *x_pos);</pre>
+<p>
+Converts from character position to x position. (X position
+is measured from the left edge of the run). Character positions
+are computed by dividing up each cluster into equal portions.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>    the glyphs return from <a class="link" href="pango-Text-Processing.html#pango-shape" title="pango_shape ()"><code class="function">pango_shape()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text for the run
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    the number of bytes (not characters) in <em class="parameter"><code>text</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>analysis</code></em> :</span></p></td>
+<td>  the analysis information return from <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>    the byte index within <em class="parameter"><code>text</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trailing</code></em> :</span></p></td>
+<td>  whether we should compute the result for the beginning (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>)
+            or end (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>) of the character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x_pos</code></em> :</span></p></td>
+<td>     location to store result
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-x-to-index"></a><h3>pango_glyph_string_x_to_index ()</h3>
+<pre class="programlisting">void                pango_glyph_string_x_to_index       (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         char *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         int x_pos,
+                                                         int *index_,
+                                                         int *trailing);</pre>
+<p>
+Convert from x offset to character position. Character positions
+are computed by dividing up each cluster into equal portions.
+In scripts where positioning within a cluster is not allowed
+(such as Thai), the returned value may not be a valid cursor
+position; the caller must combine the result with the logical
+attributes for the text to compute the valid cursor position.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>    the glyphs returned from <a class="link" href="pango-Text-Processing.html#pango-shape" title="pango_shape ()"><code class="function">pango_shape()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text for the run
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    the number of bytes (not characters) in text.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>analysis</code></em> :</span></p></td>
+<td>  the analysis information return from <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x_pos</code></em> :</span></p></td>
+<td>     the x offset (in Pango units)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>    location to store calculated byte index within <em class="parameter"><code>text</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trailing</code></em> :</span></p></td>
+<td>  location to store a boolean indicating
+            whether the user clicked on the leading or trailing
+            edge of the character.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-string-get-logical-widths"></a><h3>pango_glyph_string_get_logical_widths ()</h3>
+<pre class="programlisting">void                pango_glyph_string_get_logical_widths
+                                                        (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         const char *text,
+                                                         int length,
+                                                         int embedding_level,
+                                                         int *logical_widths);</pre>
+<p>
+Given a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> resulting from <a class="link" href="pango-Text-Processing.html#pango-shape" title="pango_shape ()"><code class="function">pango_shape()</code></a> and the corresponding
+text, determine the screen width corresponding to each character. When
+multiple characters compose a single cluster, the width of the entire
+cluster is divided equally among the characters.
+</p>
+<p>
+See also <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths" title="pango_glyph_item_get_logical_widths ()"><code class="function">pango_glyph_item_get_logical_widths()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> the text corresponding to the glyphs
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> the length of <em class="parameter"><code>text</code></em>, in bytes
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>embedding_level</code></em> :</span></p></td>
+<td> the embedding level of the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_widths</code></em> :</span></p></td>
+<td> an array whose length is the number of characters in
+                 text (equal to g_utf8_strlen (text, length) unless
+                 text has NUL bytes)
+                 to be filled in with the resulting character widths.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-GLYPH-ITEM--CAPS"></a><h3>PANGO_TYPE_GLYPH_ITEM</h3>
+<pre class="programlisting">#define PANGO_TYPE_GLYPH_ITEM (pango_glyph_item_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>.
+</p>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-copy"></a><h3>pango_glyph_item_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *    pango_glyph_item_copy               (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *orig);</pre>
+<p>
+Make a deep copy of an existing <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>, which should
+              be freed with <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-free" title="pango_glyph_item_free ()"><code class="function">pango_glyph_item_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if <em class="parameter"><code>orig</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-free"></a><h3>pango_glyph_item_free ()</h3>
+<pre class="programlisting">void                pango_glyph_item_free               (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item);</pre>
+<p>
+Frees a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a> and resources to which it points.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-split"></a><h3>pango_glyph_item_split ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *    pango_glyph_item_split              (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *orig,
+                                                         const char *text,
+                                                         int split_index);</pre>
+<p>
+Modifies <em class="parameter"><code>orig</code></em> to cover only the text after <em class="parameter"><code>split_index</code></em>, and
+returns a new item that covers the text before <em class="parameter"><code>split_index</code></em> that
+used to be in <em class="parameter"><code>orig</code></em>. You can think of <em class="parameter"><code>split_index</code></em> as the length of
+the returned item. <em class="parameter"><code>split_index</code></em> may not be 0, and it may not be
+greater than or equal to the length of <em class="parameter"><code>orig</code></em> (that is, there must
+be at least one byte assigned to each item, you can't create a
+zero-length item).
+</p>
+<p>
+This function is similar in function to <a class="link" href="pango-Text-Processing.html#pango-item-split" title="pango_item_split ()"><code class="function">pango_item_split()</code></a> (and uses
+it internally.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text to which positions in <em class="parameter"><code>orig</code></em> apply
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>split_index</code></em> :</span></p></td>
+<td> byte index of position to split item, relative to the start of the item
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated item representing text before
+              <em class="parameter"><code>split_index</code></em>, which should be freed
+              with <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-free" title="pango_glyph_item_free ()"><code class="function">pango_glyph_item_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-apply-attrs"></a><h3>pango_glyph_item_apply_attrs ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            pango_glyph_item_apply_attrs        (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);</pre>
+<p>
+Splits a shaped item (PangoGlyphItem) into multiple items based
+on an attribute list. The idea is that if you have attributes
+that don't affect shaping, such as color or underline, to avoid
+affecting shaping, you filter them out (<a class="link" href="pango-Text-Attributes.html#pango-attr-list-filter" title="pango_attr_list_filter ()"><code class="function">pango_attr_list_filter()</code></a>),
+apply the shaping process and then reapply them to the result using
+this function.
+</p>
+<p>
+All attributes that start or end inside a cluster are applied
+to that cluster; for instance, if half of a cluster is underlined
+and the other-half strikethrough, then the cluster will end
+up with both underline and strikethrough attributes. In these
+cases, it may happen that item-&gt;extra_attrs for some of the
+result items can have multiple attributes of the same type.
+</p>
+<p>
+This function takes ownership of <em class="parameter"><code>glyph_item</code></em>; it will be reused
+as one of the elements in the list.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> a shaped item
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text that <em class="parameter"><code>list</code></em> applies to
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of glyph items resulting from splitting
+  <em class="parameter"><code>glyph_item</code></em>. Free the elements using <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-free" title="pango_glyph_item_free ()"><code class="function">pango_glyph_item_free()</code></a>,
+  the list using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#g-slist-free"
+><code class="function">g_slist_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-letter-space"></a><h3>pango_glyph_item_letter_space ()</h3>
+<pre class="programlisting">void                pango_glyph_item_letter_space       (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *log_attrs,
+                                                         int letter_spacing);</pre>
+<p>
+Adds spacing between the graphemes of <em class="parameter"><code>glyph_item</code></em> to
+give the effect of typographic letter spacing.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text that <em class="parameter"><code>glyph_item</code></em> corresponds to
+  (glyph_item-&gt;item-&gt;offset is an offset from the
+   start of <em class="parameter"><code>text</code></em>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>log_attrs</code></em> :</span></p></td>
+<td> logical attributes for the item (the
+  first logical attribute refers to the position
+  before the first character in the item)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>letter_spacing</code></em> :</span></p></td>
+<td> amount of letter spacing to add
+  in Pango units. May be negative, though too large
+  negative values will give ugly results.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-get-logical-widths"></a><h3>pango_glyph_item_get_logical_widths ()</h3>
+<pre class="programlisting">void                pango_glyph_item_get_logical_widths (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text,
+                                                         int *logical_widths);</pre>
+<p>
+Given a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a> and the corresponding
+text, determine the screen width corresponding to each character. When
+multiple characters compose a single cluster, the width of the entire
+cluster is divided equally among the characters.
+</p>
+<p>
+See also <a class="link" href="pango-Glyph-Storage.html#pango-glyph-string-get-logical-widths" title="pango_glyph_string_get_logical_widths ()"><code class="function">pango_glyph_string_get_logical_widths()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text that <em class="parameter"><code>glyph_item</code></em> corresponds to
+  (glyph_item-&gt;item-&gt;offset is an offset from the
+   start of <em class="parameter"><code>text</code></em>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_widths</code></em> :</span></p></td>
+<td> an array whose length is the number of characters in
+                 glyph_item (equal to glyph_item-&gt;item-&gt;num_chars)
+                 to be filled in with the resulting character widths.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.26</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS"></a><h3>PANGO_TYPE_GLYPH_ITEM_ITER</h3>
+<pre class="programlisting">#define PANGO_TYPE_GLYPH_ITEM_ITER (pango_glyph_item_iter_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>.
+</p>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-iter-copy"></a><h3>pango_glyph_item_iter_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> * pango_glyph_item_iter_copy         (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *orig);</pre>
+<p>
+Make a shallow copy of an existing <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>, which should
+              be freed with <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-free" title="pango_glyph_item_iter_free ()"><code class="function">pango_glyph_item_iter_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if <em class="parameter"><code>orig</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-iter-free"></a><h3>pango_glyph_item_iter_free ()</h3>
+<pre class="programlisting">void                pango_glyph_item_iter_free          (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter);</pre>
+<p>
+Frees a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> created by <a class="link" href="pango-Glyph-Storage.html#pango-glyph-item-iter-copy" title="pango_glyph_item_iter_copy ()"><code class="function">pango_glyph_item_iter_copy()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-iter-init-start"></a><h3>pango_glyph_item_iter_init_start ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_glyph_item_iter_init_start    (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text);</pre>
+<p>
+Initializes a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> structure to point to the
+first cluster in a glyph item.
+See <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> for details of cluster orders.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> the glyph item to iterate over
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text corresponding to the glyph item
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if there are no clusters in the glyph item
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-iter-init-end"></a><h3>pango_glyph_item_iter_init_end ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_glyph_item_iter_init_end      (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem">PangoGlyphItem</a> *glyph_item,
+                                                         const char *text);</pre>
+<p>
+Initializes a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> structure to point to the
+last cluster in a glyph item.
+See <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> for details of cluster orders.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph_item</code></em> :</span></p></td>
+<td> the glyph item to iterate over
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text corresponding to the glyph item
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if there are no clusters in the glyph item
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-iter-next-cluster"></a><h3>pango_glyph_item_iter_next_cluster ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_glyph_item_iter_next_cluster  (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter);</pre>
+<p>
+Advances the iterator to the next cluster in the glyph item.
+See <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> for details of cluster orders.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the iterator was advanced, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if we were already on the
+ last cluster.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-glyph-item-iter-prev-cluster"></a><h3>pango_glyph_item_iter_prev_cluster ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_glyph_item_iter_prev_cluster  (<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter">PangoGlyphItemIter</a> *iter);</pre>
+<p>
+Moves the iterator to the preceding cluster in the glyph item.
+See <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a> for details of cluster orders.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItemIter" title="PangoGlyphItemIter"><span class="type">PangoGlyphItemIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the iterator was moved, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if we were already on the
+ first cluster.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Layout-Objects.html b/docs/html/pango-Layout-Objects.html
new file mode 100755 (executable)
index 0000000..7e8b818
--- /dev/null
@@ -0,0 +1,3398 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Layout Objects</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="PangoMarkupFormat.html" title="Text Attribute Markup">
+<link rel="next" href="pango-Scripts-and-Languages.html" title="Scripts and Languages">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoMarkupFormat.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Scripts-and-Languages.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Layout-Objects.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Layout-Objects.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-Layout-Objects.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Layout-Objects"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Layout-Objects.top_of_page"></a>Layout Objects</span></h2>
+<p>Layout Objects — High-level layout driver objects</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Layout-Objects.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoLayout"></a><pre class="synopsis">
+                    <a class="link" href="pango-Layout-Objects.html#PangoLayout-struct" title="PangoLayout">PangoLayout</a>;
+                    <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a>;
+<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       <a class="link" href="pango-Layout-Objects.html#pango-layout-new" title="pango_layout_new ()">pango_layout_new</a>                    (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       <a class="link" href="pango-Layout-Objects.html#pango-layout-copy" title="pango_layout_copy ()">pango_layout_copy</a>                   (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *src);
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Layout-Objects.html#pango-layout-get-context" title="pango_layout_get_context ()">pango_layout_get_context</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-context-changed" title="pango_layout_context_changed ()">pango_layout_context_changed</a>        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-text" title="pango_layout_set_text ()">pango_layout_set_text</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const char *text,
+                                                         int length);
+const char *        <a class="link" href="pango-Layout-Objects.html#pango-layout-get-text" title="pango_layout_get_text ()">pango_layout_get_text</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-markup" title="pango_layout_set_markup ()">pango_layout_set_markup</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const char *markup,
+                                                         int length);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-markup-with-accel" title="pango_layout_set_markup_with_accel ()">pango_layout_set_markup_with_accel</a>  (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const char *markup,
+                                                         int length,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> accel_marker,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> *accel_char);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-attributes" title="pango_layout_set_attributes ()">pango_layout_set_attributes</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *attrs);
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     <a class="link" href="pango-Layout-Objects.html#pango-layout-get-attributes" title="pango_layout_get_attributes ()">pango_layout_get_attributes</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-font-description" title="pango_layout_set_font_description ()">pango_layout_set_font_description</a>   (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Layout-Objects.html#pango-layout-get-font-description" title="pango_layout_get_font_description ()">pango_layout_get_font_description</a>
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-width" title="pango_layout_set_width ()">pango_layout_set_width</a>              (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int width);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-width" title="pango_layout_get_width ()">pango_layout_get_width</a>              (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-height" title="pango_layout_set_height ()">pango_layout_set_height</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int height);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-height" title="pango_layout_get_height ()">pango_layout_get_height</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-wrap" title="pango_layout_set_wrap ()">pango_layout_set_wrap</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode">PangoWrapMode</a> wrap);
+<a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode">PangoWrapMode</a>       <a class="link" href="pango-Layout-Objects.html#pango-layout-get-wrap" title="pango_layout_get_wrap ()">pango_layout_get_wrap</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-is-wrapped" title="pango_layout_is_wrapped ()">pango_layout_is_wrapped</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+enum                <a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode">PangoWrapMode</a>;
+#define             <a class="link" href="pango-Layout-Objects.html#PANGO-TYPE-WRAP-MODE--CAPS" title="PANGO_TYPE_WRAP_MODE">PANGO_TYPE_WRAP_MODE</a>
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-ellipsize" title="pango_layout_set_ellipsize ()">pango_layout_set_ellipsize</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode">PangoEllipsizeMode</a> ellipsize);
+<a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode">PangoEllipsizeMode</a>  <a class="link" href="pango-Layout-Objects.html#pango-layout-get-ellipsize" title="pango_layout_get_ellipsize ()">pango_layout_get_ellipsize</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-is-ellipsized" title="pango_layout_is_ellipsized ()">pango_layout_is_ellipsized</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+enum                <a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode">PangoEllipsizeMode</a>;
+#define             <a class="link" href="pango-Layout-Objects.html#PANGO-TYPE-ELLIPSIZE-MODE--CAPS" title="PANGO_TYPE_ELLIPSIZE_MODE">PANGO_TYPE_ELLIPSIZE_MODE</a>
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-indent" title="pango_layout_set_indent ()">pango_layout_set_indent</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int indent);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-indent" title="pango_layout_get_indent ()">pango_layout_get_indent</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-spacing" title="pango_layout_get_spacing ()">pango_layout_get_spacing</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-spacing" title="pango_layout_set_spacing ()">pango_layout_set_spacing</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int spacing);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-justify" title="pango_layout_set_justify ()">pango_layout_set_justify</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> justify);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-get-justify" title="pango_layout_get_justify ()">pango_layout_get_justify</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-auto-dir" title="pango_layout_set_auto_dir ()">pango_layout_set_auto_dir</a>           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> auto_dir);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-get-auto-dir" title="pango_layout_get_auto_dir ()">pango_layout_get_auto_dir</a>           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-alignment" title="pango_layout_set_alignment ()">pango_layout_set_alignment</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment">PangoAlignment</a> alignment);
+<a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment">PangoAlignment</a>      <a class="link" href="pango-Layout-Objects.html#pango-layout-get-alignment" title="pango_layout_get_alignment ()">pango_layout_get_alignment</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-tabs" title="pango_layout_set_tabs ()">pango_layout_set_tabs</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tabs);
+<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a>*      <a class="link" href="pango-Layout-Objects.html#pango-layout-get-tabs" title="pango_layout_get_tabs ()">pango_layout_get_tabs</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-set-single-paragraph-mode" title="pango_layout_set_single_paragraph_mode ()">pango_layout_set_single_paragraph_mode</a>
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> setting);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-get-single-paragraph-mode" title="pango_layout_get_single_paragraph_mode ()">pango_layout_get_single_paragraph_mode</a>
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+enum                <a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment">PangoAlignment</a>;
+#define             <a class="link" href="pango-Layout-Objects.html#PANGO-TYPE-ALIGNMENT--CAPS" title="PANGO_TYPE_ALIGNMENT">PANGO_TYPE_ALIGNMENT</a>
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-unknown-glyphs-count" title="pango_layout_get_unknown_glyphs_count ()">pango_layout_get_unknown_glyphs_count</a>
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-get-log-attrs" title="pango_layout_get_log_attrs ()">pango_layout_get_log_attrs</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> **attrs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *n_attrs);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-index-to-pos" title="pango_layout_index_to_pos ()">pango_layout_index_to_pos</a>           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int index_,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *pos);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-index-to-line-x" title="pango_layout_index_to_line_x ()">pango_layout_index_to_line_x</a>        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int index_,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> trailing,
+                                                         int *line,
+                                                         int *x_pos);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-xy-to-index" title="pango_layout_xy_to_index ()">pango_layout_xy_to_index</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y,
+                                                         int *index_,
+                                                         int *trailing);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-get-cursor-pos" title="pango_layout_get_cursor_pos ()">pango_layout_get_cursor_pos</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int index_,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *strong_pos,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *weak_pos);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-move-cursor-visually" title="pango_layout_move_cursor_visually ()">pango_layout_move_cursor_visually</a>   (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> strong,
+                                                         int old_index,
+                                                         int old_trailing,
+                                                         int direction,
+                                                         int *new_index,
+                                                         int *new_trailing);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-get-extents" title="pango_layout_get_extents ()">pango_layout_get_extents</a>            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-get-pixel-extents" title="pango_layout_get_pixel_extents ()">pango_layout_get_pixel_extents</a>      (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-get-size" title="pango_layout_get_size ()">pango_layout_get_size</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int *width,
+                                                         int *height);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-get-pixel-size" title="pango_layout_get_pixel_size ()">pango_layout_get_pixel_size</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int *width,
+                                                         int *height);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-baseline" title="pango_layout_get_baseline ()">pango_layout_get_baseline</a>           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-get-line-count" title="pango_layout_get_line_count ()">pango_layout_get_line_count</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-get-line" title="pango_layout_get_line ()">pango_layout_get_line</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int line);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-get-line-readonly" title="pango_layout_get_line_readonly ()">pango_layout_get_line_readonly</a>      (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int line);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            <a class="link" href="pango-Layout-Objects.html#pango-layout-get-lines" title="pango_layout_get_lines ()">pango_layout_get_lines</a>              (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            <a class="link" href="pango-Layout-Objects.html#pango-layout-get-lines-readonly" title="pango_layout_get_lines_readonly ()">pango_layout_get_lines_readonly</a>     (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-get-iter" title="pango_layout_get_iter ()">pango_layout_get_iter</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-copy" title="pango_layout_iter_copy ()">pango_layout_iter_copy</a>              (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-free" title="pango_layout_iter_free ()">pango_layout_iter_free</a>              (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-next-run" title="pango_layout_iter_next_run ()">pango_layout_iter_next_run</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-next-char" title="pango_layout_iter_next_char ()">pango_layout_iter_next_char</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-next-cluster" title="pango_layout_iter_next_cluster ()">pango_layout_iter_next_cluster</a>      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-next-line" title="pango_layout_iter_next_line ()">pango_layout_iter_next_line</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-at-last-line" title="pango_layout_iter_at_last_line ()">pango_layout_iter_at_last_line</a>      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-index" title="pango_layout_iter_get_index ()">pango_layout_iter_get_index</a>         (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+int                 <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-baseline" title="pango_layout_iter_get_baseline ()">pango_layout_iter_get_baseline</a>      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutRun" title="PangoLayoutRun">PangoLayoutRun</a> *    <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-run" title="pango_layout_iter_get_run ()">pango_layout_iter_get_run</a>           (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutRun" title="PangoLayoutRun">PangoLayoutRun</a> *    <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-run-readonly" title="pango_layout_iter_get_run_readonly ()">pango_layout_iter_get_run_readonly</a>  (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-line" title="pango_layout_iter_get_line ()">pango_layout_iter_get_line</a>          (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-line-readonly" title="pango_layout_iter_get_line_readonly ()">pango_layout_iter_get_line_readonly</a> (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-layout" title="pango_layout_iter_get_layout ()">pango_layout_iter_get_layout</a>        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-char-extents" title="pango_layout_iter_get_char_extents ()">pango_layout_iter_get_char_extents</a>  (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-cluster-extents" title="pango_layout_iter_get_cluster_extents ()">pango_layout_iter_get_cluster_extents</a>
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-run-extents" title="pango_layout_iter_get_run_extents ()">pango_layout_iter_get_run_extents</a>   (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-line-yrange" title="pango_layout_iter_get_line_yrange ()">pango_layout_iter_get_line_yrange</a>   (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         int *y0_,
+                                                         int *y1_);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-line-extents" title="pango_layout_iter_get_line_extents ()">pango_layout_iter_get_line_extents</a>  (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-layout-extents" title="pango_layout_iter_get_layout_extents ()">pango_layout_iter_get_layout_extents</a>
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+
+                    <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a>;
+typedef             <a class="link" href="pango-Layout-Objects.html#PangoLayoutRun" title="PangoLayoutRun">PangoLayoutRun</a>;
+<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   <a class="link" href="pango-Layout-Objects.html#pango-layout-line-ref" title="pango_layout_line_ref ()">pango_layout_line_ref</a>               (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-line-unref" title="pango_layout_line_unref ()">pango_layout_line_unref</a>             (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-line-get-extents" title="pango_layout_line_get_extents ()">pango_layout_line_get_extents</a>       (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-line-get-pixel-extents" title="pango_layout_line_get_pixel_extents ()">pango_layout_line_get_pixel_extents</a> (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *layout_line,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-line-index-to-x" title="pango_layout_line_index_to_x ()">pango_layout_line_index_to_x</a>        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int index_,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> trailing,
+                                                         int *x_pos);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Layout-Objects.html#pango-layout-line-x-to-index" title="pango_layout_line_x_to_index ()">pango_layout_line_x_to_index</a>        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x_pos,
+                                                         int *index_,
+                                                         int *trailing);
+void                <a class="link" href="pango-Layout-Objects.html#pango-layout-line-get-x-ranges" title="pango_layout_line_get_x_ranges ()">pango_layout_line_get_x_ranges</a>      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int start_index,
+                                                         int end_index,
+                                                         int **ranges,
+                                                         int *n_ranges);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Layout-Objects.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoLayout
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Layout-Objects.description"></a><h2>Description</h2>
+<p>
+While complete access to the layout capabilities of Pango is provided
+using the detailed interfaces for itemization and shaping, using
+that functionality directly involves writing a fairly large amount
+of code. The objects and functions in this section provide a
+high-level driver for formatting entire paragraphs of text
+at once.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Layout-Objects.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoLayout-struct"></a><h3>PangoLayout</h3>
+<pre class="programlisting">typedef struct _PangoLayout PangoLayout;</pre>
+<p>
+The <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> structure represents an entire paragraph
+of text. It is initialized with a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, UTF-8 string
+and set of attributes for that string. Once that is done, the
+set of formatted lines can be extracted from the object,
+the layout can be rendered, and conversion between logical
+character positions within the layout's text, and the physical
+position of the resulting glyphs can be made.
+</p>
+<p>
+There are also a number of parameters to adjust the formatting
+of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>, which are illustrated in <a class="xref" href="pango-Layout-Objects.html#parameters" title="Figure 1. Adjustable parameters for a PangoLayout">Figure 1, “Adjustable parameters for a PangoLayout”</a>.
+It is possible, as well, to ignore the 2-D setup, and simply
+treat the results of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> as a list of lines.
+</p>
+<div class="figure">
+<a name="parameters"></a><p class="title"><b>Figure 1. Adjustable parameters for a PangoLayout</b></p>
+<div class="figure-contents"><div><img src="layout.gif" alt="Adjustable parameters for a PangoLayout"></div></div>
+</div>
+<br class="figure-break"><p>
+The <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> structure is opaque, and has no user-visible
+fields.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoLayoutIter"></a><h3>PangoLayoutIter</h3>
+<pre class="programlisting">typedef struct _PangoLayoutIter PangoLayoutIter;</pre>
+<p>
+A <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a> structure can be used to
+iterate over the visual extents of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</p>
+<p>
+The <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a> structure is opaque, and
+has no user-visible fields.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-new"></a><h3>pango_layout_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       pango_layout_new                    (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Create a new <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> object with attributes initialized to
+default values for a particular <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>, with a reference
+              count of one, which should be freed with
+              <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-copy"></a><h3>pango_layout_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       pango_layout_copy                   (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *src);</pre>
+<p>
+Does a deep copy-by-value of the <em class="parameter"><code>src</code></em> layout. The attribute list,
+tab array, and text from the original layout are all copied by
+value.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>, with a reference
+              count of one, which should be freed with
+              <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-context"></a><h3>pango_layout_get_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_layout_get_context            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Retrieves the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> used for this layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> for the layout. This does not
+have an additional refcount added, so if you want to keep
+a copy of this around, you must reference it yourself.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-context-changed"></a><h3>pango_layout_context_changed ()</h3>
+<pre class="programlisting">void                pango_layout_context_changed        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Forces recomputation of any state in the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> that
+might depend on the layout's context. This function should
+be called if you make changes to the context subsequent
+to creating the layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-text"></a><h3>pango_layout_set_text ()</h3>
+<pre class="programlisting">void                pango_layout_set_text               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const char *text,
+                                                         int length);</pre>
+<p>
+Sets the text of the layout.
+</p>
+<p>
+Note that if you have used
+<a class="link" href="pango-Layout-Objects.html#pango-layout-set-markup" title="pango_layout_set_markup ()"><code class="function">pango_layout_set_markup()</code></a> or <a class="link" href="pango-Layout-Objects.html#pango-layout-set-markup-with-accel" title="pango_layout_set_markup_with_accel ()"><code class="function">pango_layout_set_markup_with_accel()</code></a> on
+<em class="parameter"><code>layout</code></em> before, you may want to call <a class="link" href="pango-Layout-Objects.html#pango-layout-set-attributes" title="pango_layout_set_attributes ()"><code class="function">pango_layout_set_attributes()</code></a> to clear
+the attributes set on the layout from the markup as this function does not
+clear attributes.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> a valid UTF-8 string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> maximum length of <em class="parameter"><code>text</code></em>, in bytes. -1 indicates that
+         the string is nul-terminated and the length should be
+         calculated.  The text will also be truncated on
+         encountering a nul-termination even when <em class="parameter"><code>length</code></em> is
+         positive.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-text"></a><h3>pango_layout_get_text ()</h3>
+<pre class="programlisting">const char *        pango_layout_get_text               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the text in the layout. The returned text should not
+be freed or modified.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the text in the <em class="parameter"><code>layout</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-markup"></a><h3>pango_layout_set_markup ()</h3>
+<pre class="programlisting">void                pango_layout_set_markup             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const char *markup,
+                                                         int length);</pre>
+<p>
+Same as <a class="link" href="pango-Layout-Objects.html#pango-layout-set-markup-with-accel" title="pango_layout_set_markup_with_accel ()"><code class="function">pango_layout_set_markup_with_accel()</code></a>, but
+the markup text isn't scanned for accelerators.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>markup</code></em> :</span></p></td>
+<td> marked-up text
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of marked-up text in bytes, or -1 if <em class="parameter"><code>markup</code></em> is
+nul-terminated
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-markup-with-accel"></a><h3>pango_layout_set_markup_with_accel ()</h3>
+<pre class="programlisting">void                pango_layout_set_markup_with_accel  (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const char *markup,
+                                                         int length,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> accel_marker,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> *accel_char);</pre>
+<p>
+Sets the layout text and attribute list from marked-up text (see
+<a class="link" href="PangoMarkupFormat.html" title="Text Attribute Markup">markup format</a>). Replaces
+the current text and attribute list.
+</p>
+<p>
+If <em class="parameter"><code>accel_marker</code></em> is nonzero, the given character will mark the
+character following it as an accelerator. For example, <em class="parameter"><code>accel_marker</code></em>
+might be an ampersand or underscore. All characters marked
+as an accelerator will receive a <a class="link" href="pango-Text-Attributes.html#PANGO-UNDERLINE-LOW--CAPS"><code class="literal">PANGO_UNDERLINE_LOW</code></a> attribute,
+and the first character so marked will be returned in <em class="parameter"><code>accel_char</code></em>.
+Two <em class="parameter"><code>accel_marker</code></em> characters following each other produce a single
+literal <em class="parameter"><code>accel_marker</code></em> character.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>markup</code></em> :</span></p></td>
+<td> marked-up text
+(see <a class="link" href="PangoMarkupFormat.html" title="Text Attribute Markup">markup format</a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of marked-up text in bytes, or -1 if <em class="parameter"><code>markup</code></em> is
+nul-terminated
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>accel_marker</code></em> :</span></p></td>
+<td> marker for accelerators in the text
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>accel_char</code></em> :</span></p></td>
+<td> return location for first located accelerator, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-attributes"></a><h3>pango_layout_set_attributes ()</h3>
+<pre class="programlisting">void                pango_layout_set_attributes         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *attrs);</pre>
+<p>
+Sets the text attributes for a layout object.
+References <em class="parameter"><code>attrs</code></em>, so the caller can unref its reference.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, can be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-attributes"></a><h3>pango_layout_get_attributes ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     pango_layout_get_attributes         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the attribute list for the layout, if any.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-font-description"></a><h3>pango_layout_set_font_description ()</h3>
+<pre class="programlisting">void                pango_layout_set_font_description   (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Sets the default font description for the layout. If no font
+description is set on the layout, the font description from
+the layout's context is used.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> the new <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to unset the
+       current font description
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-font-description"></a><h3>pango_layout_get_font_description ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_layout_get_font_description
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the font description for the layout, if any.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to the layout's font description,
+ or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the font description from the layout's
+ context is inherited. This value is owned by the layout
+ and must not be modified or freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-width"></a><h3>pango_layout_set_width ()</h3>
+<pre class="programlisting">void                pango_layout_set_width              (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int width);</pre>
+<p>
+Sets the width to which the lines of the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> should wrap or
+ellipsized.  The default value is -1: no width set.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> the desired width in Pango units, or -1 to indicate that no
+        wrapping or ellipsization should be performed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-width"></a><h3>pango_layout_get_width ()</h3>
+<pre class="programlisting">int                 pango_layout_get_width              (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the width to which the lines of the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> should wrap.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the width in Pango units, or -1 if no width set.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-height"></a><h3>pango_layout_set_height ()</h3>
+<pre class="programlisting">void                pango_layout_set_height             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int height);</pre>
+<p>
+Sets the height to which the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> should be ellipsized at.  There
+are two different behaviors, based on whether <em class="parameter"><code>height</code></em> is positive or
+negative.
+</p>
+<p>
+If <em class="parameter"><code>height</code></em> is positive, it will be the maximum height of the layout.  Only
+lines would be shown that would fit, and if there is any text omitted,
+an ellipsis added.  At least one line is included in each paragraph regardless
+of how small the height value is.  A value of zero will render exactly one
+line for the entire layout.
+</p>
+<p>
+If <em class="parameter"><code>height</code></em> is negative, it will be the (negative of) maximum number of lines per
+paragraph.  That is, the total number of lines shown may well be more than
+this value if the layout contains multiple paragraphs of text.
+The default value of -1 means that first line of each paragraph is ellipsized.
+This behvaior may be changed in the future to act per layout instead of per
+paragraph.  File a bug against pango at <a class="ulink" href="http://bugzilla.gnome.org/" target="_top">http://bugzilla.gnome.org/</a> if your
+code relies on this behavior.
+</p>
+<p>
+Height setting only has effect if a positive width is set on
+<em class="parameter"><code>layout</code></em> and ellipsization mode of <em class="parameter"><code>layout</code></em> is not <a class="link" href="pango-Layout-Objects.html#PANGO-ELLIPSIZE-NONE--CAPS"><code class="literal">PANGO_ELLIPSIZE_NONE</code></a>.
+The behavior is undefined if a height other than -1 is set and
+ellipsization mode is set to <a class="link" href="pango-Layout-Objects.html#PANGO-ELLIPSIZE-NONE--CAPS"><code class="literal">PANGO_ELLIPSIZE_NONE</code></a>, and may change in the
+future.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> the desired height of the layout in Pango units if positive,
+         or desired number of lines if negative.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-height"></a><h3>pango_layout_get_height ()</h3>
+<pre class="programlisting">int                 pango_layout_get_height             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the height of layout used for ellipsization.  See
+<a class="link" href="pango-Layout-Objects.html#pango-layout-set-height" title="pango_layout_set_height ()"><code class="function">pango_layout_set_height()</code></a> for details.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the height, in Pango units if positive, or
+number of lines if negative.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-wrap"></a><h3>pango_layout_set_wrap ()</h3>
+<pre class="programlisting">void                pango_layout_set_wrap               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode">PangoWrapMode</a> wrap);</pre>
+<p>
+Sets the wrap mode; the wrap mode only has effect if a width
+is set on the layout with <a class="link" href="pango-Layout-Objects.html#pango-layout-set-width" title="pango_layout_set_width ()"><code class="function">pango_layout_set_width()</code></a>.
+To turn off wrapping, set the width to -1.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wrap</code></em> :</span></p></td>
+<td> the wrap mode
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-wrap"></a><h3>pango_layout_get_wrap ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode">PangoWrapMode</a>       pango_layout_get_wrap               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the wrap mode for the layout.
+</p>
+<p>
+Use <a class="link" href="pango-Layout-Objects.html#pango-layout-is-wrapped" title="pango_layout_is_wrapped ()"><code class="function">pango_layout_is_wrapped()</code></a> to query whether any paragraphs
+were actually wrapped.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> active wrap mode.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-is-wrapped"></a><h3>pango_layout_is_wrapped ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_is_wrapped             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Queries whether the layout had to wrap any paragraphs.
+</p>
+<p>
+This returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if a positive width is set on <em class="parameter"><code>layout</code></em>,
+ellipsization mode of <em class="parameter"><code>layout</code></em> is set to <a class="link" href="pango-Layout-Objects.html#PANGO-ELLIPSIZE-NONE--CAPS"><code class="literal">PANGO_ELLIPSIZE_NONE</code></a>,
+and there are paragraphs exceeding the layout width that have
+to be wrapped.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if any paragraphs had to be wrapped, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>
+otherwise.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoWrapMode"></a><h3>enum PangoWrapMode</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_WRAP_WORD,
+  PANGO_WRAP_CHAR,
+  PANGO_WRAP_WORD_CHAR
+} PangoWrapMode;
+</pre>
+<p>
+A <a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode"><span class="type">PangoWrapMode</span></a> describes how to wrap the lines of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> to the desired width.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-WRAP-WORD--CAPS"></a><span class="term"><code class="literal">PANGO_WRAP_WORD</code></span></p></td>
+<td>wrap lines at word boundaries.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WRAP-CHAR--CAPS"></a><span class="term"><code class="literal">PANGO_WRAP_CHAR</code></span></p></td>
+<td>wrap lines at character boundaries.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-WRAP-WORD-CHAR--CAPS"></a><span class="term"><code class="literal">PANGO_WRAP_WORD_CHAR</code></span></p></td>
+<td>wrap lines at word boundaries, but fall back to character boundaries if there is not 
+enough space for a full word.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-WRAP-MODE--CAPS"></a><h3>PANGO_TYPE_WRAP_MODE</h3>
+<pre class="programlisting">#define PANGO_TYPE_WRAP_MODE (pango_wrap_mode_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Layout-Objects.html#PangoWrapMode" title="enum PangoWrapMode"><span class="type">PangoWrapMode</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-ellipsize"></a><h3>pango_layout_set_ellipsize ()</h3>
+<pre class="programlisting">void                pango_layout_set_ellipsize          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode">PangoEllipsizeMode</a> ellipsize);</pre>
+<p>
+Sets the type of ellipsization being performed for <em class="parameter"><code>layout</code></em>.
+Depending on the ellipsization mode <em class="parameter"><code>ellipsize</code></em> text is
+removed from the start, middle, or end of text so they
+fit within the width and height of layout set with
+<a class="link" href="pango-Layout-Objects.html#pango-layout-set-width" title="pango_layout_set_width ()"><code class="function">pango_layout_set_width()</code></a> and <a class="link" href="pango-Layout-Objects.html#pango-layout-set-height" title="pango_layout_set_height ()"><code class="function">pango_layout_set_height()</code></a>.
+</p>
+<p>
+If the layout contains characters such as newlines that
+force it to be layed out in multiple paragraphs, then whether
+each paragraph is ellipsized separately or the entire layout
+is ellipsized as a whole depends on the set height of the layout.
+See <a class="link" href="pango-Layout-Objects.html#pango-layout-set-height" title="pango_layout_set_height ()"><code class="function">pango_layout_set_height()</code></a> for details.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ellipsize</code></em> :</span></p></td>
+<td> the new ellipsization mode for <em class="parameter"><code>layout</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-ellipsize"></a><h3>pango_layout_get_ellipsize ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode">PangoEllipsizeMode</a>  pango_layout_get_ellipsize          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the type of ellipsization being performed for <em class="parameter"><code>layout</code></em>.
+See <a class="link" href="pango-Layout-Objects.html#pango-layout-set-ellipsize" title="pango_layout_set_ellipsize ()"><code class="function">pango_layout_set_ellipsize()</code></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the current ellipsization mode for <em class="parameter"><code>layout</code></em>.
+
+Use <a class="link" href="pango-Layout-Objects.html#pango-layout-is-ellipsized" title="pango_layout_is_ellipsized ()"><code class="function">pango_layout_is_ellipsized()</code></a> to query whether any paragraphs
+were actually ellipsized.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-is-ellipsized"></a><h3>pango_layout_is_ellipsized ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_is_ellipsized          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Queries whether the layout had to ellipsize any paragraphs.
+</p>
+<p>
+This returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the ellipsization mode for <em class="parameter"><code>layout</code></em>
+is not <a class="link" href="pango-Layout-Objects.html#PANGO-ELLIPSIZE-NONE--CAPS"><code class="literal">PANGO_ELLIPSIZE_NONE</code></a>, a positive width is set on <em class="parameter"><code>layout</code></em>,
+and there are paragraphs exceeding that width that have to be
+ellipsized.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if any paragraphs had to be ellipsized, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>
+otherwise.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoEllipsizeMode"></a><h3>enum PangoEllipsizeMode</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_ELLIPSIZE_NONE,
+  PANGO_ELLIPSIZE_START,
+  PANGO_ELLIPSIZE_MIDDLE,
+  PANGO_ELLIPSIZE_END
+} PangoEllipsizeMode;
+</pre>
+<p>
+The <a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode"><span class="type">PangoEllipsizeMode</span></a> type describes what sort of (if any)
+ellipsization should be applied to a line of text. In
+the ellipsization process characters are removed from the
+text in order to make it fit to a given width and replaced
+with an ellipsis.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-ELLIPSIZE-NONE--CAPS"></a><span class="term"><code class="literal">PANGO_ELLIPSIZE_NONE</code></span></p></td>
+<td> No ellipsization
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ELLIPSIZE-START--CAPS"></a><span class="term"><code class="literal">PANGO_ELLIPSIZE_START</code></span></p></td>
+<td> Omit characters at the start of the text
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ELLIPSIZE-MIDDLE--CAPS"></a><span class="term"><code class="literal">PANGO_ELLIPSIZE_MIDDLE</code></span></p></td>
+<td> Omit characters in the middle of the text
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ELLIPSIZE-END--CAPS"></a><span class="term"><code class="literal">PANGO_ELLIPSIZE_END</code></span></p></td>
+<td> Omit characters at the end of the text
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-ELLIPSIZE-MODE--CAPS"></a><h3>PANGO_TYPE_ELLIPSIZE_MODE</h3>
+<pre class="programlisting">#define PANGO_TYPE_ELLIPSIZE_MODE (pango_ellipsize_mode_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Layout-Objects.html#PangoEllipsizeMode" title="enum PangoEllipsizeMode"><span class="type">PangoEllipsizeMode</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-indent"></a><h3>pango_layout_set_indent ()</h3>
+<pre class="programlisting">void                pango_layout_set_indent             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int indent);</pre>
+<p>
+Sets the width in Pango units to indent each paragraph. A negative value
+of <em class="parameter"><code>indent</code></em> will produce a hanging indentation. That is, the first line will
+have the full width, and subsequent lines will be indented by the
+absolute value of <em class="parameter"><code>indent</code></em>.
+</p>
+<p>
+The indent setting is ignored if layout alignment is set to
+<a class="link" href="pango-Layout-Objects.html#PANGO-ALIGN-CENTER--CAPS"><code class="literal">PANGO_ALIGN_CENTER</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>indent</code></em> :</span></p></td>
+<td> the amount by which to indent.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-indent"></a><h3>pango_layout_get_indent ()</h3>
+<pre class="programlisting">int                 pango_layout_get_indent             (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the paragraph indent width in Pango units. A negative value
+indicates a hanging indentation.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the indent in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-spacing"></a><h3>pango_layout_get_spacing ()</h3>
+<pre class="programlisting">int                 pango_layout_get_spacing            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the amount of spacing between the lines of the layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the spacing in Pango units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-spacing"></a><h3>pango_layout_set_spacing ()</h3>
+<pre class="programlisting">void                pango_layout_set_spacing            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int spacing);</pre>
+<p>
+Sets the amount of spacing in Pango unit between the lines of the
+layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spacing</code></em> :</span></p></td>
+<td> the amount of spacing
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-justify"></a><h3>pango_layout_set_justify ()</h3>
+<pre class="programlisting">void                pango_layout_set_justify            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> justify);</pre>
+<p>
+Sets whether each complete line should be stretched to
+fill the entire width of the layout. This stretching is typically
+done by adding whitespace, but for some scripts (such as Arabic),
+the justification may be done in more complex ways, like extending
+the characters.
+</p>
+<p>
+Note that this setting is not implemented and so is ignored in Pango
+older than 1.18.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>justify</code></em> :</span></p></td>
+<td> whether the lines in the layout should be justified.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-justify"></a><h3>pango_layout_get_justify ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_get_justify            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets whether each complete line should be stretched to fill the entire
+width of the layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the justify.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-auto-dir"></a><h3>pango_layout_set_auto_dir ()</h3>
+<pre class="programlisting">void                pango_layout_set_auto_dir           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> auto_dir);</pre>
+<p>
+Sets whether to calculate the bidirectional base direction
+for the layout according to the contents of the layout;
+when this flag is on (the default), then paragraphs in
+   <em class="parameter"><code>layout</code></em> that begin with strong right-to-left characters
+(Arabic and Hebrew principally), will have right-to-left
+layout, paragraphs with letters from other scripts will
+have left-to-right layout. Paragraphs with only neutral
+characters get their direction from the surrounding paragraphs.
+</p>
+<p>
+When <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>, the choice between left-to-right and
+right-to-left layout is done according to the base direction
+of the layout's <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>. (See <a class="link" href="pango-Text-Processing.html#pango-context-set-base-dir" title="pango_context_set_base_dir ()"><code class="function">pango_context_set_base_dir()</code></a>).
+</p>
+<p>
+When the auto-computed direction of a paragraph differs from the
+base direction of the context, the interpretation of
+<a class="link" href="pango-Layout-Objects.html#PANGO-ALIGN-LEFT--CAPS"><code class="literal">PANGO_ALIGN_LEFT</code></a> and <a class="link" href="pango-Layout-Objects.html#PANGO-ALIGN-RIGHT--CAPS"><code class="literal">PANGO_ALIGN_RIGHT</code></a> are swapped.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>auto_dir</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, compute the bidirectional base direction
+  from the layout's contents.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-auto-dir"></a><h3>pango_layout_get_auto_dir ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_get_auto_dir           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets whether to calculate the bidirectional base direction
+for the layout according to the contents of the layout.
+See <a class="link" href="pango-Layout-Objects.html#pango-layout-set-auto-dir" title="pango_layout_set_auto_dir ()"><code class="function">pango_layout_set_auto_dir()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the bidirectional base direction
+  is computed from the layout's contents, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-alignment"></a><h3>pango_layout_set_alignment ()</h3>
+<pre class="programlisting">void                pango_layout_set_alignment          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment">PangoAlignment</a> alignment);</pre>
+<p>
+Sets the alignment for the layout: how partial lines are
+positioned within the horizontal space available.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>alignment</code></em> :</span></p></td>
+<td> the alignment
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-alignment"></a><h3>pango_layout_get_alignment ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment">PangoAlignment</a>      pango_layout_get_alignment          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the alignment for the layout: how partial lines are
+positioned within the horizontal space available.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the alignment.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-tabs"></a><h3>pango_layout_set_tabs ()</h3>
+<pre class="programlisting">void                pango_layout_set_tabs               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tabs);</pre>
+<p>
+Sets the tabs to use for <em class="parameter"><code>layout</code></em>, overriding the default tabs
+(by default, tabs are every 8 spaces). If <em class="parameter"><code>tabs</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, the default
+tabs are reinstated. <em class="parameter"><code>tabs</code></em> is copied into the layout; you must
+free your copy of <em class="parameter"><code>tabs</code></em> yourself.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tabs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-tabs"></a><h3>pango_layout_get_tabs ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a>*      pango_layout_get_tabs               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the current <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a> used by this layout. If no
+<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a> has been set, then the default tabs are in use
+and <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> is returned. Default tabs are every 8 spaces.
+The return value should be freed with <a class="link" href="pango-Tab-Stops.html#pango-tab-array-free" title="pango_tab_array_free ()"><code class="function">pango_tab_array_free()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a copy of the tabs for this layout, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-set-single-paragraph-mode"></a><h3>pango_layout_set_single_paragraph_mode ()</h3>
+<pre class="programlisting">void                pango_layout_set_single_paragraph_mode
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> setting);</pre>
+<p>
+If <em class="parameter"><code>setting</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, do not treat newlines and similar characters
+as paragraph separators; instead, keep all text in a single paragraph,
+and display a glyph for paragraph separator characters. Used when
+you want to allow editing of newlines on a single text line.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>setting</code></em> :</span></p></td>
+<td> new setting
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-single-paragraph-mode"></a><h3>pango_layout_get_single_paragraph_mode ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_get_single_paragraph_mode
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Obtains the value set by <a class="link" href="pango-Layout-Objects.html#pango-layout-set-single-paragraph-mode" title="pango_layout_set_single_paragraph_mode ()"><code class="function">pango_layout_set_single_paragraph_mode()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the layout does not break paragraphs at
+paragraph separator characters, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAlignment"></a><h3>enum PangoAlignment</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_ALIGN_LEFT,
+  PANGO_ALIGN_CENTER,
+  PANGO_ALIGN_RIGHT
+} PangoAlignment;
+</pre>
+<p>
+A <a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment"><span class="type">PangoAlignment</span></a> describes how to align the lines of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> within the
+available space. If the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> is set to justify
+using <a class="link" href="pango-Layout-Objects.html#pango-layout-set-justify" title="pango_layout_set_justify ()"><code class="function">pango_layout_set_justify()</code></a>, this only has effect for partial lines.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-ALIGN-LEFT--CAPS"></a><span class="term"><code class="literal">PANGO_ALIGN_LEFT</code></span></p></td>
+<td>Put all available space on the right
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ALIGN-CENTER--CAPS"></a><span class="term"><code class="literal">PANGO_ALIGN_CENTER</code></span></p></td>
+<td>Center the line within the available space
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ALIGN-RIGHT--CAPS"></a><span class="term"><code class="literal">PANGO_ALIGN_RIGHT</code></span></p></td>
+<td>Put all available space on the left
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-ALIGNMENT--CAPS"></a><h3>PANGO_TYPE_ALIGNMENT</h3>
+<pre class="programlisting">#define PANGO_TYPE_ALIGNMENT (pango_alignment_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Layout-Objects.html#PangoAlignment" title="enum PangoAlignment"><span class="type">PangoAlignment</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-unknown-glyphs-count"></a><h3>pango_layout_get_unknown_glyphs_count ()</h3>
+<pre class="programlisting">int                 pango_layout_get_unknown_glyphs_count
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Counts the number unknown glyphs in <em class="parameter"><code>layout</code></em>.  That is, zero if
+glyphs for all characters in the layout text were found, or more
+than zero otherwise.
+</p>
+<p>
+This function can be used to determine if there are any fonts
+available to render all characters in a certain string, or when
+used in combination with <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-FALLBACK--CAPS"><code class="literal">PANGO_ATTR_FALLBACK</code></a>, to check if a
+certain font supports all the characters in the string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The number of unknown glyphs in <em class="parameter"><code>layout</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-log-attrs"></a><h3>pango_layout_get_log_attrs ()</h3>
+<pre class="programlisting">void                pango_layout_get_log_attrs          (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> **attrs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *n_attrs);</pre>
+<p>
+Retrieves an array of logical attributes for each character in
+the <em class="parameter"><code>layout</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs</code></em> :</span></p></td>
+<td> location to store a pointer to an array of logical attributes
+        This value must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_attrs</code></em> :</span></p></td>
+<td> location to store the number of the attributes in the
+          array. (The stored value will be one more than the total number
+          of characters in the layout, since there need to be attributes
+          corresponding to both the position before the first character
+          and the position after the last character.)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-index-to-pos"></a><h3>pango_layout_index_to_pos ()</h3>
+<pre class="programlisting">void                pango_layout_index_to_pos           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int index_,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *pos);</pre>
+<p>
+Converts from an index within a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> to the onscreen position
+corresponding to the grapheme at that index, which is represented
+as rectangle.  Note that <code class="literal">pos-&gt;x</code> is always the leading
+edge of the grapheme and <code class="literal">pos-&gt;x + pos-&gt;width</code> the trailing
+edge of the grapheme. If the directionality of the grapheme is right-to-left,
+then <code class="literal">pos-&gt;width</code> will be negative.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td> byte index within <em class="parameter"><code>layout</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td> rectangle in which to store the position of the grapheme
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-index-to-line-x"></a><h3>pango_layout_index_to_line_x ()</h3>
+<pre class="programlisting">void                pango_layout_index_to_line_x        (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int index_,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> trailing,
+                                                         int *line,
+                                                         int *x_pos);</pre>
+<p>
+Converts from byte <em class="parameter"><code>index_</code></em> within the <em class="parameter"><code>layout</code></em> to line and X position.
+(X position is measured from the left edge of the line)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>    the byte index of a grapheme within the layout.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trailing</code></em> :</span></p></td>
+<td>  an integer indicating the edge of the grapheme to retrieve the
+            position of. If 0, the trailing edge of the grapheme, if &gt; 0,
+            the leading of the grapheme.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      location to store resulting line index. (which will
+            between 0 and pango_layout_get_line_count(layout) - 1)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x_pos</code></em> :</span></p></td>
+<td>     location to store resulting position within line
+            (<a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> units per device unit)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-xy-to-index"></a><h3>pango_layout_xy_to_index ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_xy_to_index            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y,
+                                                         int *index_,
+                                                         int *trailing);</pre>
+<p>
+Converts from X and Y position within a layout to the byte
+index to the character at that logical position. If the
+Y position is not inside the layout, the closest position is chosen
+(the position will be clamped inside the layout). If the
+X position is not within the layout, then the start or the
+end of the line is chosen as  described for <code class="function">pango_layout_x_to_index()</code>.
+If either the X or Y positions were not inside the layout, then the
+function returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>; on an exact hit, it returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the X offset (in Pango units)
+            from the left edge of the layout.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the Y offset (in Pango units)
+            from the top edge of the layout
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>    location to store calculated byte index
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trailing</code></em> :</span></p></td>
+<td>  location to store a integer indicating where
+            in the grapheme the user clicked. It will either
+            be zero, or the number of characters in the
+            grapheme. 0 represents the trailing edge of the grapheme.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the coordinates were inside text, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-cursor-pos"></a><h3>pango_layout_get_cursor_pos ()</h3>
+<pre class="programlisting">void                pango_layout_get_cursor_pos         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int index_,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *strong_pos,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *weak_pos);</pre>
+<p>
+Given an index within a layout, determines the positions that of the
+strong and weak cursors if the insertion point is at that
+index. The position of each cursor is stored as a zero-width
+rectangle. The strong cursor location is the location where
+characters of the directionality equal to the base direction of the
+layout are inserted.  The weak cursor location is the location
+where characters of the directionality opposite to the base
+direction of the layout are inserted.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td> the byte index of the cursor
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strong_pos</code></em> :</span></p></td>
+<td> location to store the strong cursor position (may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>weak_pos</code></em> :</span></p></td>
+<td> location to store the weak cursor position (may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-move-cursor-visually"></a><h3>pango_layout_move_cursor_visually ()</h3>
+<pre class="programlisting">void                pango_layout_move_cursor_visually   (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> strong,
+                                                         int old_index,
+                                                         int old_trailing,
+                                                         int direction,
+                                                         int *new_index,
+                                                         int *new_trailing);</pre>
+<p>
+Computes a new cursor position from an old position and
+a count of positions to move visually. If <em class="parameter"><code>direction</code></em> is positive,
+then the new strong cursor position will be one position
+to the right of the old cursor position. If <em class="parameter"><code>direction</code></em> is negative,
+then the new strong cursor position will be one position
+to the left of the old cursor position.
+</p>
+<p>
+In the presence of bidirectional text, the correspondence
+between logical and visual order will depend on the direction
+of the current run, and there may be jumps when the cursor
+is moved off of the end of a run.
+</p>
+<p>
+Motion here is in cursor positions, not in characters, so a
+single call to <a class="link" href="pango-Layout-Objects.html#pango-layout-move-cursor-visually" title="pango_layout_move_cursor_visually ()"><code class="function">pango_layout_move_cursor_visually()</code></a> may move the
+cursor over multiple characters when multiple characters combine
+to form a single grapheme.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>       a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strong</code></em> :</span></p></td>
+<td>       whether the moving cursor is the strong cursor or the
+               weak cursor. The strong cursor is the cursor corresponding
+               to text insertion in the base direction for the layout.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>old_index</code></em> :</span></p></td>
+<td>    the byte index of the grapheme for the old index
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>old_trailing</code></em> :</span></p></td>
+<td> if 0, the cursor was at the trailing edge of the
+               grapheme indicated by <em class="parameter"><code>old_index</code></em>, if &gt; 0, the cursor
+               was at the leading edge.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>direction</code></em> :</span></p></td>
+<td>    direction to move cursor. A negative
+               value indicates motion to the left.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_index</code></em> :</span></p></td>
+<td>    location to store the new cursor byte index. A value of -1
+               indicates that the cursor has been moved off the beginning
+               of the layout. A value of <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Limits-of-Basic-Types.html#G-MAXINT--CAPS"
+><code class="literal">G_MAXINT</code></a> indicates that
+               the cursor has been moved off the end of the layout.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_trailing</code></em> :</span></p></td>
+<td> number of characters to move forward from the location returned
+               for <em class="parameter"><code>new_index</code></em> to get the position where the cursor should
+               be displayed. This allows distinguishing the position at
+               the beginning of one line from the position at the end
+               of the preceding line. <em class="parameter"><code>new_index</code></em> is always on the line
+               where the cursor should be displayed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-extents"></a><h3>pango_layout_get_extents ()</h3>
+<pre class="programlisting">void                pango_layout_get_extents            (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Computes the logical and ink extents of <em class="parameter"><code>layout</code></em>. Logical extents
+are usually what you want for positioning things.  Note that both extents
+may have non-zero x and y.  You may want to use those to offset where you
+render the layout.  Not doing that is a very typical bug that shows up as
+right-to-left layouts not being correctly positioned in a layout with
+a set width.
+</p>
+<p>
+The extents are given in layout coordinates and in Pango units; layout
+coordinates begin at the top left corner of the layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>   a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle used to store the extents of the layout as drawn
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the layout
+                or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-pixel-extents"></a><h3>pango_layout_get_pixel_extents ()</h3>
+<pre class="programlisting">void                pango_layout_get_pixel_extents      (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Computes the logical and ink extents of <em class="parameter"><code>layout</code></em> in device units.
+This function just calls <a class="link" href="pango-Layout-Objects.html#pango-layout-get-extents" title="pango_layout_get_extents ()"><code class="function">pango_layout_get_extents()</code></a> followed by
+two <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()"><code class="function">pango_extents_to_pixels()</code></a> calls, rounding <em class="parameter"><code>ink_rect</code></em> and <em class="parameter"><code>logical_rect</code></em>
+such that the rounded rectangles fully contain the unrounded one (that is,
+passes them as first argument to <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()"><code class="function">pango_extents_to_pixels()</code></a>).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>   a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle used to store the extents of the layout as drawn
+           or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the
+             layout or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to indicate that the result is not needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-size"></a><h3>pango_layout_get_size ()</h3>
+<pre class="programlisting">void                pango_layout_get_size               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int *width,
+                                                         int *height);</pre>
+<p>
+Determines the logical width and height of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+in Pango units (device units scaled by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>). This
+is simply a convenience function around <a class="link" href="pango-Layout-Objects.html#pango-layout-get-extents" title="pango_layout_get_extents ()"><code class="function">pango_layout_get_extents()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> location to store the logical width, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> location to store the logical height, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-pixel-size"></a><h3>pango_layout_get_pixel_size ()</h3>
+<pre class="programlisting">void                pango_layout_get_pixel_size         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int *width,
+                                                         int *height);</pre>
+<p>
+Determines the logical width and height of a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+in device units. (<a class="link" href="pango-Layout-Objects.html#pango-layout-get-size" title="pango_layout_get_size ()"><code class="function">pango_layout_get_size()</code></a> returns the width
+and height scaled by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>.) This
+is simply a convenience function around
+<a class="link" href="pango-Layout-Objects.html#pango-layout-get-pixel-extents" title="pango_layout_get_pixel_extents ()"><code class="function">pango_layout_get_pixel_extents()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>width</code></em> :</span></p></td>
+<td> location to store the logical width, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>height</code></em> :</span></p></td>
+<td> location to store the logical height, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-baseline"></a><h3>pango_layout_get_baseline ()</h3>
+<pre class="programlisting">int                 pango_layout_get_baseline           (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Gets the Y position of baseline of the first line in <em class="parameter"><code>layout</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> baseline of first line, from top of <em class="parameter"><code>layout</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-line-count"></a><h3>pango_layout_get_line_count ()</h3>
+<pre class="programlisting">int                 pango_layout_get_line_count         (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Retrieves the count of lines for the <em class="parameter"><code>layout</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the line count.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-line"></a><h3>pango_layout_get_line ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   pango_layout_get_line               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int line);</pre>
+<p>
+Retrieves a particular line from a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</p>
+<p>
+Use the faster <a class="link" href="pango-Layout-Objects.html#pango-layout-get-line-readonly" title="pango_layout_get_line_readonly ()"><code class="function">pango_layout_get_line_readonly()</code></a> if you do not plan
+to modify the contents of the line (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> the index of a line, which must be between 0 and
+       <code class="literal">pango_layout_get_line_count(layout) - 1</code>, inclusive.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the requested <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the
+              index is out of range. This layout line can
+              be ref'ed and retained, but will become invalid
+              if changes are made to the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-line-readonly"></a><h3>pango_layout_get_line_readonly ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   pango_layout_get_line_readonly      (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int line);</pre>
+<p>
+Retrieves a particular line from a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</p>
+<p>
+This is a faster alternative to <a class="link" href="pango-Layout-Objects.html#pango-layout-get-line" title="pango_layout_get_line ()"><code class="function">pango_layout_get_line()</code></a>,
+but the user is not expected
+to modify the contents of the line (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> the index of a line, which must be between 0 and
+       <code class="literal">pango_layout_get_line_count(layout) - 1</code>, inclusive.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the requested <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the
+              index is out of range. This layout line can
+              be ref'ed and retained, but will become invalid
+              if changes are made to the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+              No changes should be made to the line.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-lines"></a><h3>pango_layout_get_lines ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            pango_layout_get_lines              (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Returns the lines of the <em class="parameter"><code>layout</code></em> as a list.
+</p>
+<p>
+Use the faster <a class="link" href="pango-Layout-Objects.html#pango-layout-get-lines-readonly" title="pango_layout_get_lines_readonly ()"><code class="function">pango_layout_get_lines_readonly()</code></a> if you do not plan
+to modify the contents of the lines (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>element-type Pango.LayoutLine): (transfer none. <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=element-type%20Pango.LayoutLine):%20(transfer"><span class="acronym">element-type Pango.LayoutLine): (transfer</span></a> none. </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-lines-readonly"></a><h3>pango_layout_get_lines_readonly ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            pango_layout_get_lines_readonly     (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Returns the lines of the <em class="parameter"><code>layout</code></em> as a list.
+</p>
+<p>
+This is a faster alternative to <a class="link" href="pango-Layout-Objects.html#pango-layout-get-lines" title="pango_layout_get_lines ()"><code class="function">pango_layout_get_lines()</code></a>,
+but the user is not expected
+to modify the contents of the lines (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>element-type Pango.LayoutLine): (transfer none. <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=element-type%20Pango.LayoutLine):%20(transfer"><span class="acronym">element-type Pango.LayoutLine): (transfer</span></a> none. </td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-get-iter"></a><h3>pango_layout_get_iter ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *   pango_layout_get_iter               (<a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout);</pre>
+<p>
+Returns an iterator to iterate over the visual extents of the layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a> that should be freed using
+              <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-free" title="pango_layout_iter_free ()"><code class="function">pango_layout_iter_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-copy"></a><h3>pango_layout_iter_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *   pango_layout_iter_copy              (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Copies a <span class="type">PangLayoutIter</span>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>, which should
+              be freed with <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-free" title="pango_layout_iter_free ()"><code class="function">pango_layout_iter_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if
+              <em class="parameter"><code>iter</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-free"></a><h3>pango_layout_iter_free ()</h3>
+<pre class="programlisting">void                pango_layout_iter_free              (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Frees an iterator that's no longer in use.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-next-run"></a><h3>pango_layout_iter_next_run ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_iter_next_run          (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Moves <em class="parameter"><code>iter</code></em> forward to the next run in visual order. If <em class="parameter"><code>iter</code></em> was
+already at the end of the layout, returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether motion was possible.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-next-char"></a><h3>pango_layout_iter_next_char ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_iter_next_char         (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Moves <em class="parameter"><code>iter</code></em> forward to the next character in visual order. If <em class="parameter"><code>iter</code></em> was already at
+the end of the layout, returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether motion was possible.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-next-cluster"></a><h3>pango_layout_iter_next_cluster ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_iter_next_cluster      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Moves <em class="parameter"><code>iter</code></em> forward to the next cluster in visual order. If <em class="parameter"><code>iter</code></em>
+was already at the end of the layout, returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether motion was possible.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-next-line"></a><h3>pango_layout_iter_next_line ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_iter_next_line         (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Moves <em class="parameter"><code>iter</code></em> forward to the start of the next line. If <em class="parameter"><code>iter</code></em> is
+already on the last line, returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether motion was possible.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-at-last-line"></a><h3>pango_layout_iter_at_last_line ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_iter_at_last_line      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Determines whether <em class="parameter"><code>iter</code></em> is on the last line of the layout.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>iter</code></em> is on the last line.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-index"></a><h3>pango_layout_iter_get_index ()</h3>
+<pre class="programlisting">int                 pango_layout_iter_get_index         (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the current byte index. Note that iterating forward by char
+moves in visual order, not logical order, so indexes may not be
+sequential. Also, the index may be equal to the length of the text
+in the layout, if on the <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> run (see <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-run" title="pango_layout_iter_get_run ()"><code class="function">pango_layout_iter_get_run()</code></a>).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> current byte index.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-baseline"></a><h3>pango_layout_iter_get_baseline ()</h3>
+<pre class="programlisting">int                 pango_layout_iter_get_baseline      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the Y position of the current line's baseline, in layout
+coordinates (origin at top left of the entire layout).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> baseline of current line.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-run"></a><h3>pango_layout_iter_get_run ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutRun" title="PangoLayoutRun">PangoLayoutRun</a> *    pango_layout_iter_get_run           (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the current run. When iterating by run, at the end of each
+line, there's a position with a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> run, so this function can return
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>. The <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> run at the end of each line ensures that all lines have
+at least one run, even lines consisting of only a newline.
+</p>
+<p>
+Use the faster <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-run-readonly" title="pango_layout_iter_get_run_readonly ()"><code class="function">pango_layout_iter_get_run_readonly()</code></a> if you do not plan
+to modify the contents of the run (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the current run.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-run-readonly"></a><h3>pango_layout_iter_get_run_readonly ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutRun" title="PangoLayoutRun">PangoLayoutRun</a> *    pango_layout_iter_get_run_readonly  (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the current run. When iterating by run, at the end of each
+line, there's a position with a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> run, so this function can return
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>. The <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> run at the end of each line ensures that all lines have
+at least one run, even lines consisting of only a newline.
+</p>
+<p>
+This is a faster alternative to <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-run" title="pango_layout_iter_get_run ()"><code class="function">pango_layout_iter_get_run()</code></a>,
+but the user is not expected
+to modify the contents of the run (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the current run, that should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-line"></a><h3>pango_layout_iter_get_line ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   pango_layout_iter_get_line          (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the current line.
+</p>
+<p>
+Use the faster <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-line-readonly" title="pango_layout_iter_get_line_readonly ()"><code class="function">pango_layout_iter_get_line_readonly()</code></a> if you do not plan
+to modify the contents of the line (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the current line.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-line-readonly"></a><h3>pango_layout_iter_get_line_readonly ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   pango_layout_iter_get_line_readonly (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the current line for read-only access.
+</p>
+<p>
+This is a faster alternative to <a class="link" href="pango-Layout-Objects.html#pango-layout-iter-get-line" title="pango_layout_iter_get_line ()"><code class="function">pango_layout_iter_get_line()</code></a>,
+but the user is not expected
+to modify the contents of the line (glyphs, glyph widths, etc.).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the current line, that should not be modified.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-layout"></a><h3>pango_layout_iter_get_layout ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *       pango_layout_iter_get_layout        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter);</pre>
+<p>
+Gets the layout associated with a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the layout associated with <em class="parameter"><code>iter</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-char-extents"></a><h3>pango_layout_iter_get_char_extents ()</h3>
+<pre class="programlisting">void                pango_layout_iter_get_char_extents  (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Gets the extents of the current character, in layout coordinates
+(origin is the top left of the entire layout). Only logical extents
+can sensibly be obtained for characters; ink extents make sense only
+down to the level of clusters.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle to fill with logical extents
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-cluster-extents"></a><h3>pango_layout_iter_get_cluster_extents ()</h3>
+<pre class="programlisting">void                pango_layout_iter_get_cluster_extents
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Gets the extents of the current cluster, in layout coordinates
+(origin is the top left of the entire layout).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle to fill with ink extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle to fill with logical extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-run-extents"></a><h3>pango_layout_iter_get_run_extents ()</h3>
+<pre class="programlisting">void                pango_layout_iter_get_run_extents   (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Gets the extents of the current run in layout coordinates
+(origin is the top left of the entire layout).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle to fill with ink extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle to fill with logical extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-line-yrange"></a><h3>pango_layout_iter_get_line_yrange ()</h3>
+<pre class="programlisting">void                pango_layout_iter_get_line_yrange   (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         int *y0_,
+                                                         int *y1_);</pre>
+<p>
+Divides the vertical space in the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> being iterated over
+between the lines in the layout, and returns the space belonging to
+the current line.  A line's range includes the line's logical
+extents, plus half of the spacing above and below the line, if
+<a class="link" href="pango-Layout-Objects.html#pango-layout-set-spacing" title="pango_layout_set_spacing ()"><code class="function">pango_layout_set_spacing()</code></a> has been called to set layout spacing.
+The Y positions are in layout coordinates (origin at top left of the
+entire layout).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y0_</code></em> :</span></p></td>
+<td> start of line
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y1_</code></em> :</span></p></td>
+<td> end of line
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-line-extents"></a><h3>pango_layout_iter_get_line_extents ()</h3>
+<pre class="programlisting">void                pango_layout_iter_get_line_extents  (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Obtains the extents of the current line. <em class="parameter"><code>ink_rect</code></em> or <em class="parameter"><code>logical_rect</code></em>
+can be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if you aren't interested in them. Extents are in layout
+coordinates (origin is the top-left corner of the entire
+<a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>).  Thus the extents returned by this function will be
+the same width/height but not at the same x/y as the extents
+returned from <a class="link" href="pango-Layout-Objects.html#pango-layout-line-get-extents" title="pango_layout_line_get_extents ()"><code class="function">pango_layout_line_get_extents()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle to fill with ink extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle to fill with logical extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-iter-get-layout-extents"></a><h3>pango_layout_iter_get_layout_extents ()</h3>
+<pre class="programlisting">void                pango_layout_iter_get_layout_extents
+                                                        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter">PangoLayoutIter</a> *iter,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Obtains the extents of the <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> being iterated
+over. <em class="parameter"><code>ink_rect</code></em> or <em class="parameter"><code>logical_rect</code></em> can be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if you
+aren't interested in them.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutIter" title="PangoLayoutIter"><span class="type">PangoLayoutIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle to fill with ink extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle to fill with logical extents, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoLayoutLine"></a><h3>PangoLayoutLine</h3>
+<pre class="programlisting">typedef struct {
+  PangoLayout *layout;
+  gint         start_index;     /* start of line as byte index into layout-&gt;text */
+  gint         length;         /* length of line in bytes */
+  GSList      *runs;
+  guint        is_paragraph_start : 1;  /* TRUE if this is the first line of the paragraph */
+  guint        resolved_dir : 3;  /* Resolved PangoDirection of line */
+} PangoLayoutLine;
+</pre>
+<p>
+The <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> structure represents one of the lines resulting
+from laying out a paragraph via <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>. <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+structures are obtained by calling <a class="link" href="pango-Layout-Objects.html#pango-layout-get-line" title="pango_layout_get_line ()"><code class="function">pango_layout_get_line()</code></a> and
+are only valid until the text, attributes, or settings of the
+parent <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> are modified.
+</p>
+<p>
+Routines for rendering PangoLayout objects are provided in
+code specific to each rendering system.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *<em class="structfield"><code>layout</code></em>;</span></p></td>
+<td>the parent layout for this line
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>start_index</code></em>;</span></p></td>
+<td>the start of the line as byte index into <em class="parameter"><code>layout-&gt;text</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>length</code></em>;</span></p></td>
+<td>the length of the line in bytes
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *<em class="structfield"><code>runs</code></em>;</span></p></td>
+<td>a list containing the runs of the line in visual order
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_paragraph_start</code></em> : 1;</span></p></td>
+<td>%TRUE if this is the first line of the paragraph
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>resolved_dir</code></em> : 3;</span></p></td>
+<td>the resolved <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection"><span class="type">PangoDirection</span></a> of the line
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoLayoutRun"></a><h3>PangoLayoutRun</h3>
+<pre class="programlisting">typedef PangoGlyphItem PangoLayoutRun;
+</pre>
+<p>
+The <a class="link" href="pango-Layout-Objects.html#PangoLayoutRun" title="PangoLayoutRun"><span class="type">PangoLayoutRun</span></a> structure represents a single run within
+a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>; it is simply an alternate name for
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a>.
+See the <a class="link" href="pango-Glyph-Storage.html#PangoGlyphItem" title="PangoGlyphItem"><span class="type">PangoGlyphItem</span></a> docs for details on the fields.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-ref"></a><h3>pango_layout_line_ref ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *   pango_layout_line_ref               (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);</pre>
+<p>
+Increase the reference count of a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> by one.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the line passed in.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-unref"></a><h3>pango_layout_line_unref ()</h3>
+<pre class="programlisting">void                pango_layout_line_unref             (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line);</pre>
+<p>
+Decrease the reference count of a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> by one.
+If the result is zero, the line and all associated memory
+will be freed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-get-extents"></a><h3>pango_layout_line_get_extents ()</h3>
+<pre class="programlisting">void                pango_layout_line_get_extents       (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Computes the logical and ink extents of a layout line. See
+<a class="link" href="pango-Fonts.html#pango-font-get-glyph-extents" title="pango_font_get_glyph_extents ()"><code class="function">pango_font_get_glyph_extents()</code></a> for details about the interpretation
+of the rectangles.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>     a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td> rectangle used to store the extents of the glyph string
+           as drawn, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the glyph
+           string, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-get-pixel-extents"></a><h3>pango_layout_line_get_pixel_extents ()</h3>
+<pre class="programlisting">void                pango_layout_line_get_pixel_extents (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *layout_line,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Computes the logical and ink extents of <em class="parameter"><code>layout_line</code></em> in device units.
+This function just calls <a class="link" href="pango-Layout-Objects.html#pango-layout-line-get-extents" title="pango_layout_line_get_extents ()"><code class="function">pango_layout_line_get_extents()</code></a> followed by
+two <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()"><code class="function">pango_extents_to_pixels()</code></a> calls, rounding <em class="parameter"><code>ink_rect</code></em> and <em class="parameter"><code>logical_rect</code></em>
+such that the rounded rectangles fully contain the unrounded one (that is,
+passes them as first argument to <a class="link" href="pango-Glyph-Storage.html#pango-extents-to-pixels" title="pango_extents_to_pixels ()"><code class="function">pango_extents_to_pixels()</code></a>).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout_line</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td>    rectangle used to store the extents of the glyph string
+              as drawn, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> rectangle used to store the logical extents of the glyph
+              string, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-index-to-x"></a><h3>pango_layout_line_index_to_x ()</h3>
+<pre class="programlisting">void                pango_layout_line_index_to_x        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int index_,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> trailing,
+                                                         int *x_pos);</pre>
+<p>
+Converts an index within a line to a X position.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>     a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>   byte offset of a grapheme within the layout
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trailing</code></em> :</span></p></td>
+<td> an integer indicating the edge of the grapheme to retrieve
+           the position of. If &gt; 0, the trailing edge of the grapheme,
+           if 0, the leading of the grapheme.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x_pos</code></em> :</span></p></td>
+<td> location to store the x_offset (in Pango unit)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-x-to-index"></a><h3>pango_layout_line_x_to_index ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_layout_line_x_to_index        (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x_pos,
+                                                         int *index_,
+                                                         int *trailing);</pre>
+<p>
+Converts from x offset to the byte index of the corresponding
+character within the text of the layout. If <em class="parameter"><code>x_pos</code></em> is outside the line,
+<em class="parameter"><code>index_</code></em> and <em class="parameter"><code>trailing</code></em> will point to the very first or very last position
+in the line. This determination is based on the resolved direction
+of the paragraph; for example, if the resolved direction is
+right-to-left, then an X position to the right of the line (after it)
+results in 0 being stored in <em class="parameter"><code>index_</code></em> and <em class="parameter"><code>trailing</code></em>. An X position to the
+left of the line results in <em class="parameter"><code>index_</code></em> pointing to the (logical) last
+grapheme in the line and <em class="parameter"><code>trailing</code></em> being set to the number of characters
+in that grapheme. The reverse is true for a left-to-right line.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x_pos</code></em> :</span></p></td>
+<td>     the X offset (in Pango units)
+            from the left edge of the line.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>    location to store calculated byte index for
+            the grapheme in which the user clicked.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>trailing</code></em> :</span></p></td>
+<td>  location to store an integer indicating where
+            in the grapheme the user clicked. It will either
+            be zero, or the number of characters in the
+            grapheme. 0 represents the leading edge of the grapheme.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if <em class="parameter"><code>x_pos</code></em> was outside the line, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if inside
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-layout-line-get-x-ranges"></a><h3>pango_layout_line_get_x_ranges ()</h3>
+<pre class="programlisting">void                pango_layout_line_get_x_ranges      (<a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int start_index,
+                                                         int end_index,
+                                                         int **ranges,
+                                                         int *n_ranges);</pre>
+<p>
+Gets a list of visual ranges corresponding to a given logical range.
+This list is not necessarily minimal - there may be consecutive
+ranges which are adjacent. The ranges will be sorted from left to
+right. The ranges are with respect to the left edge of the entire
+layout, not with respect to the line.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>        a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start_index</code></em> :</span></p></td>
+<td> Start byte index of the logical range. If this value
+              is less than the start index for the line, then
+              the first range will extend all the way to the leading
+              edge of the layout. Otherwise it will start at the
+              leading edge of the first character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>end_index</code></em> :</span></p></td>
+<td>   Ending byte index of the logical range. If this value
+              is greater than the end index for the line, then
+              the last range will extend all the way to the trailing
+              edge of the layout. Otherwise, it will end at the
+              trailing edge of the last character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ranges</code></em> :</span></p></td>
+<td>out): (array length=n_ranges): (transfer=full. <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=out):%20(array%20length=n_ranges):"><span class="acronym">out): (array length=n_ranges):</span></a> (transfer=full. </td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_ranges</code></em> :</span></p></td>
+<td> The number of ranges stored in <em class="parameter"><code>ranges</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Miscellaneous-Utilities.html b/docs/html/pango-Miscellaneous-Utilities.html
new file mode 100755 (executable)
index 0000000..3ff947e
--- /dev/null
@@ -0,0 +1,925 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Miscellaneous Utilities</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="pango-Modules.html" title="Modules">
+<link rel="next" href="pango-Version-Checking.html" title="Version Checking">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Modules.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Version-Checking.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Miscellaneous-Utilities.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Miscellaneous-Utilities.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Miscellaneous-Utilities"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Miscellaneous-Utilities.top_of_page"></a>Miscellaneous Utilities</span></h2>
+<p>Miscellaneous Utilities — Various convenience and utility functions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Miscellaneous-Utilities.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+char **             <a class="link" href="pango-Miscellaneous-Utilities.html#pango-split-file-list" title="pango_split_file_list ()">pango_split_file_list</a>               (const char *str);
+char *              <a class="link" href="pango-Miscellaneous-Utilities.html#pango-trim-string" title="pango_trim_string ()">pango_trim_string</a>                   (const char *str);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="pango-Miscellaneous-Utilities.html#pango-read-line" title="pango_read_line ()">pango_read_line</a>                     (FILE *stream,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+>GString</a> *str);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-skip-space" title="pango_skip_space ()">pango_skip_space</a>                    (const char **pos);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-scan-word" title="pango_scan_word ()">pango_scan_word</a>                     (const char **pos,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+>GString</a> *out);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-scan-string" title="pango_scan_string ()">pango_scan_string</a>                   (const char **pos,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+>GString</a> *out);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-scan-int" title="pango_scan_int ()">pango_scan_int</a>                      (const char **pos,
+                                                         int *out);
+char *              <a class="link" href="pango-Miscellaneous-Utilities.html#pango-config-key-get" title="pango_config_key_get ()">pango_config_key_get</a>                (const char *key);
+void                <a class="link" href="pango-Miscellaneous-Utilities.html#pango-lookup-aliases" title="pango_lookup_aliases ()">pango_lookup_aliases</a>                (const char *fontname,
+                                                         char ***families,
+                                                         int *n_families);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-parse-enum" title="pango_parse_enum ()">pango_parse_enum</a>                    (<a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"
+>GType</a> type,
+                                                         const char *str,
+                                                         int *value,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn,
+                                                         char **possible_values);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-parse-style" title="pango_parse_style ()">pango_parse_style</a>                   (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a> *style,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-parse-variant" title="pango_parse_variant ()">pango_parse_variant</a>                 (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a> *variant,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-parse-weight" title="pango_parse_weight ()">pango_parse_weight</a>                  (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a> *weight,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-parse-stretch" title="pango_parse_stretch ()">pango_parse_stretch</a>                 (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a> *stretch,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);
+const char *        <a class="link" href="pango-Miscellaneous-Utilities.html#pango-get-sysconf-subdirectory" title="pango_get_sysconf_subdirectory ()">pango_get_sysconf_subdirectory</a>      (void);
+const char *        <a class="link" href="pango-Miscellaneous-Utilities.html#pango-get-lib-subdirectory" title="pango_get_lib_subdirectory ()">pango_get_lib_subdirectory</a>          (void);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"
+>guint8</a> *            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-log2vis-get-embedding-levels" title="pango_log2vis_get_embedding_levels ()">pango_log2vis_get_embedding_levels</a>  (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a> *pbase_dir);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Miscellaneous-Utilities.html#pango-is-zero-width" title="pango_is_zero_width ()">pango_is_zero_width</a>                 (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);
+void                <a class="link" href="pango-Miscellaneous-Utilities.html#pango-quantize-line-geometry" title="pango_quantize_line_geometry ()">pango_quantize_line_geometry</a>        (int *thickness,
+                                                         int *position);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Miscellaneous-Utilities.description"></a><h2>Description</h2>
+<p>
+The functions and utilities in this section are mostly used from Pango
+backends and modules, but may be useful for other purposes too.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Miscellaneous-Utilities.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="pango-split-file-list"></a><h3>pango_split_file_list ()</h3>
+<pre class="programlisting">char **             pango_split_file_list               (const char *str);</pre>
+<p>
+Splits a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#G-SEARCHPATH-SEPARATOR--CAPS"
+><code class="literal">G_SEARCHPATH_SEPARATOR</code></a>-separated list of files, stripping
+white space and substituting ~/ with $HOME/.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#G-SEARCHPATH-SEPARATOR--CAPS"
+><code class="literal">G_SEARCHPATH_SEPARATOR</code></a> separated list of filenames
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a list of strings to be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"
+><code class="function">g_strfreev()</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-trim-string"></a><h3>pango_trim_string ()</h3>
+<pre class="programlisting">char *              pango_trim_string                   (const char *str);</pre>
+<p>
+Trims leading and trailing whitespace from a string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> a string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A newly-allocated string that must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-read-line"></a><h3>pango_read_line ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                pango_read_line                     (FILE *stream,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+>GString</a> *str);</pre>
+<p>
+Reads an entire line from a file into a buffer. Lines may
+be delimited with '\n', '\r', '\n\r', or '\r\n'. The delimiter
+is not written into the buffer. Text after a '#' character is treated as
+a comment and skipped. '\' can be used to escape a # character.
+'\' proceeding a line delimiter combines adjacent lines. A '\' proceeding
+any other character is ignored and written into the output buffer
+unmodified.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>stream</code></em> :</span></p></td>
+<td> a stdio stream
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+><span class="type">GString</span></a> buffer into which to write the result
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> 0 if the stream was already at an <code class="literal">EOF</code> character, otherwise
+              the number of lines read (this is useful for maintaining
+              a line number counter which doesn't combine lines with '\')
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-skip-space"></a><h3>pango_skip_space ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_skip_space                    (const char **pos);</pre>
+<p>
+Skips 0 or more characters of white space.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td> in/out string position
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if skipping the white space leaves
+the position at a '\0' character.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-scan-word"></a><h3>pango_scan_word ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_scan_word                     (const char **pos,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+>GString</a> *out);</pre>
+<p>
+Scans a word into a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+><span class="type">GString</span></a> buffer. A word consists
+of [A-Za-z_] followed by zero or more [A-Za-z_0-9]
+Leading white space is skipped.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td> in/out string position
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+><span class="type">GString</span></a> into which to write the result
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if a parse error occurred.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-scan-string"></a><h3>pango_scan_string ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_scan_string                   (const char **pos,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+>GString</a> *out);</pre>
+<p>
+Scans a string into a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+><span class="type">GString</span></a> buffer. The string may either
+be a sequence of non-white-space characters, or a quoted
+string with '"'. Instead a quoted string, '\"' represents
+a literal quote. Leading white space outside of quotes is skipped.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td> in/out string position
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Strings.html#GString"
+><span class="type">GString</span></a> into which to write the result
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if a parse error occurred.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-scan-int"></a><h3>pango_scan_int ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_scan_int                      (const char **pos,
+                                                         int *out);</pre>
+<p>
+Scans an integer.
+Leading white space is skipped.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td> in/out string position
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
+<td> an int into which to write the result
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if a parse error occurred.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-config-key-get"></a><h3>pango_config_key_get ()</h3>
+<pre class="programlisting">char *              pango_config_key_get                (const char *key);</pre>
+<p>
+Looks up a key in the Pango config database
+(pseudo-win.ini style, read from $sysconfdir/pango/pangorc,
+ ~/.pangorc, and getenv (PANGO_RC_FILE).)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>key</code></em> :</span></p></td>
+<td> Key to look up, in the form "SECTION/KEY".
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the value, if found, otherwise <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>. The value is a
+newly-allocated string and must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-lookup-aliases"></a><h3>pango_lookup_aliases ()</h3>
+<pre class="programlisting">void                pango_lookup_aliases                (const char *fontname,
+                                                         char ***families,
+                                                         int *n_families);</pre>
+<p>
+Look up all user defined aliases for the alias <em class="parameter"><code>fontname</code></em>.
+The resulting font family names will be stored in <em class="parameter"><code>families</code></em>,
+and the number of families in <em class="parameter"><code>n_families</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fontname</code></em> :</span></p></td>
+<td> an ascii string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>families</code></em> :</span></p></td>
+<td> will be set to an array of font family names.
+   this array is owned by pango and should not be freed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_families</code></em> :</span></p></td>
+<td> will be set to the length of the <em class="parameter"><code>families</code></em> array.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-parse-enum"></a><h3>pango_parse_enum ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_parse_enum                    (<a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"
+>GType</a> type,
+                                                         const char *str,
+                                                         int *value,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn,
+                                                         char **possible_values);</pre>
+<p>
+Parses an enum type and stores the result in <em class="parameter"><code>value</code></em>.
+</p>
+<p>
+If <em class="parameter"><code>str</code></em> does not match the nick name of any of the possible values for the
+enum and is not an integer, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> is returned, a warning is issued
+if <em class="parameter"><code>warn</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, and a
+string representing the list of possible values is stored in
+<em class="parameter"><code>possible_values</code></em>.  The list is slash-separated, eg.
+"none/start/middle/end".  If failed and <em class="parameter"><code>possible_values</code></em> is not <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>,
+returned string should be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td> enum type to parse, eg. <a class="link" href="pango-Layout-Objects.html#PANGO-TYPE-ELLIPSIZE-MODE--CAPS" title="PANGO_TYPE_ELLIPSIZE_MODE"><code class="literal">PANGO_TYPE_ELLIPSIZE_MODE</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> string to parse.  May be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
+<td> integer to store the result in, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>warn</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, issue a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning"
+><code class="function">g_warning()</code></a> on bad input.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>possible_values</code></em> :</span></p></td>
+<td> place to store list of possible values on failure, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em> was successfully parsed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-parse-style"></a><h3>pango_parse_style ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_parse_style                   (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a> *style,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);</pre>
+<p>
+Parses a font style. The allowed values are "normal",
+"italic" and "oblique", case variations being
+ignored.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> a string to parse.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>style</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle"><span class="type">PangoStyle</span></a> to store the result in.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>warn</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, issue a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning"
+><code class="function">g_warning()</code></a> on bad input.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em> was successfully parsed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-parse-variant"></a><h3>pango_parse_variant ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_parse_variant                 (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a> *variant,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);</pre>
+<p>
+Parses a font variant. The allowed values are "normal"
+and "smallcaps" or "small_caps", case variations being
+ignored.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> a string to parse.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>variant</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant"><span class="type">PangoVariant</span></a> to store the result in.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>warn</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, issue a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning"
+><code class="function">g_warning()</code></a> on bad input.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em> was successfully parsed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-parse-weight"></a><h3>pango_parse_weight ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_parse_weight                  (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a> *weight,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);</pre>
+<p>
+Parses a font weight. The allowed values are "heavy",
+"ultrabold", "bold", "normal", "light", "ultraleight"
+and integers. Case variations are ignored.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> a string to parse.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>weight</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight"><span class="type">PangoWeight</span></a> to store the result in.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>warn</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, issue a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning"
+><code class="function">g_warning()</code></a> on bad input.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em> was successfully parsed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-parse-stretch"></a><h3>pango_parse_stretch ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_parse_stretch                 (const char *str,
+                                                         <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a> *stretch,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> warn);</pre>
+<p>
+Parses a font stretch. The allowed values are
+"ultra_condensed", "extra_condensed", "condensed",
+"semi_condensed", "normal", "semi_expanded", "expanded",
+"extra_expanded" and "ultra_expanded". Case variations are
+ignored and the '_' characters may be omitted.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td> a string to parse.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>stretch</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch"><span class="type">PangoStretch</span></a> to store the result in.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>warn</code></em> :</span></p></td>
+<td> if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, issue a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Message-Logging.html#g-warning"
+><code class="function">g_warning()</code></a> on bad input.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>str</code></em> was successfully parsed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-get-sysconf-subdirectory"></a><h3>pango_get_sysconf_subdirectory ()</h3>
+<pre class="programlisting">const char *        pango_get_sysconf_subdirectory      (void);</pre>
+<p>
+On Unix, returns the name of the "pango" subdirectory of SYSCONFDIR
+(which is set at compile time). On Windows, returns the etc\pango
+subdirectory of the Pango installation directory (which is deduced
+at run time from the DLL's location).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the Pango sysconf directory. The returned string should
+not be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-get-lib-subdirectory"></a><h3>pango_get_lib_subdirectory ()</h3>
+<pre class="programlisting">const char *        pango_get_lib_subdirectory          (void);</pre>
+<p>
+On Unix, returns the name of the "pango" subdirectory of LIBDIR
+(which is set at compile time). On Windows, returns the lib\pango
+subdirectory of the Pango installation directory (which is deduced
+at run time from the DLL's location).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the Pango lib directory. The returned string should
+not be freed.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-log2vis-get-embedding-levels"></a><h3>pango_log2vis_get_embedding_levels ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"
+>guint8</a> *            pango_log2vis_get_embedding_levels  (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a> *pbase_dir);</pre>
+<p>
+This will return the bidirectional embedding levels of the input paragraph
+as defined by the Unicode Bidirectional Algorithm available at:
+</p>
+<p>
+  http://www.unicode.org/reports/tr9/
+</p>
+<p>
+If the input base direction is a weak direction, the direction of the
+characters in the text will determine the final resolved direction.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text to itemize.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    the number of bytes (not characters) to process, or -1
+            if <em class="parameter"><code>text</code></em> is nul-terminated and the length should be calculated.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pbase_dir</code></em> :</span></p></td>
+<td> input base direction, and output resolved direction.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly allocated array of embedding levels, one item per
+              character (not byte), that should be freed using g_free.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-is-zero-width"></a><h3>pango_is_zero_width ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_is_zero_width                 (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);</pre>
+<p>
+Checks <em class="parameter"><code>ch</code></em> to see if it is a character that should not be
+normally rendered on the screen.  This includes all Unicode characters
+with "ZERO WIDTH" in their name, as well as <em class="firstterm">bidi</em> formatting characters, and
+a few other ones.  This is totally different from <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#g-unichar-iszerowidth"
+><code class="function">g_unichar_iszerowidth()</code></a>
+and is at best misnamed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ch</code></em> :</span></p></td>
+<td> a Unicode character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>ch</code></em> is a zero-width character, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-quantize-line-geometry"></a><h3>pango_quantize_line_geometry ()</h3>
+<pre class="programlisting">void                pango_quantize_line_geometry        (int *thickness,
+                                                         int *position);</pre>
+<p>
+Quantizes the thickness and position of a line, typically an
+underline or strikethrough, to whole device pixels, that is integer
+multiples of <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>. The purpose of this function is to avoid
+such lines looking blurry.
+</p>
+<p>
+Care is taken to make sure <em class="parameter"><code>thickness</code></em> is at least one pixel when this
+function returns, but returned <em class="parameter"><code>position</code></em> may become zero as a result
+of rounding.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>thickness</code></em> :</span></p></td>
+<td> pointer to the thickness of a line, in Pango units
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>position</code></em> :</span></p></td>
+<td> corresponding position
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.12</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Modules.html b/docs/html/pango-Modules.html
new file mode 100755 (executable)
index 0000000..9aadaec
--- /dev/null
@@ -0,0 +1,304 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Modules</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="PangoEngineShape.html" title="PangoEngineShape">
+<link rel="next" href="pango-Miscellaneous-Utilities.html" title="Miscellaneous Utilities">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoEngineShape.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Miscellaneous-Utilities.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Modules.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Modules.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Modules"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Modules.top_of_page"></a>Modules</span></h2>
+<p>Modules — Support for loadable modules</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Modules.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="pango-Modules.html#PangoIncludedModule" title="PangoIncludedModule">PangoIncludedModule</a>;
+                    <a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a>;
+                    <a class="link" href="pango-Modules.html#PangoMapEntry" title="PangoMapEntry">PangoMapEntry</a>;
+<a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a> *          <a class="link" href="pango-Modules.html#pango-find-map" title="pango_find_map ()">pango_find_map</a>                      (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> engine_type_id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> render_type_id);
+<a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a> *       <a class="link" href="pango-Modules.html#pango-map-get-engine" title="pango_map_get_engine ()">pango_map_get_engine</a>                (<a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a> *map,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);
+void                <a class="link" href="pango-Modules.html#pango-map-get-engines" title="pango_map_get_engines ()">pango_map_get_engines</a>               (<a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a> *map,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> **exact_engines,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> **fallback_engines);
+void                <a class="link" href="pango-Modules.html#pango-module-register" title="pango_module_register ()">pango_module_register</a>               (<a class="link" href="pango-Modules.html#PangoIncludedModule" title="PangoIncludedModule">PangoIncludedModule</a> *module);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Modules.description"></a><h2>Description</h2>
+<p>
+Functions and macros in this section are used to support loading dynamic
+modules that add engines to Pango at run time.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Modules.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoIncludedModule"></a><h3>PangoIncludedModule</h3>
+<pre class="programlisting">typedef struct {
+  void (*list) (PangoEngineInfo **engines,
+               int              *n_engines);
+  void (*init) (GTypeModule      *module);
+  void (*exit) (void);
+  PangoEngine *(*create) (const char       *id);
+} PangoIncludedModule;
+</pre>
+<p>
+The <a class="link" href="pango-Modules.html#PangoIncludedModule" title="PangoIncludedModule"><span class="type">PangoIncludedModule</span></a> structure for a statically linked module
+contains the functions that would otherwise be loaded from a dynamically
+loaded module.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>list</code></em> ()</span></p></td>
+<td>a function that lists the engines defined in this module.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>init</code></em> ()</span></p></td>
+<td>a function to initialize the module.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>exit</code></em> ()</span></p></td>
+<td>a function to finalize the module.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>create</code></em> ()</span></p></td>
+<td>a function to create an engine, given the engine name.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoMap"></a><h3>PangoMap</h3>
+<pre class="programlisting">typedef struct _PangoMap PangoMap;</pre>
+<p>
+A <a class="link" href="pango-Modules.html#PangoMap" title="PangoMap"><span class="type">PangoMap</span></a> structure can be used to determine the engine to
+use for each character.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoMapEntry"></a><h3>PangoMapEntry</h3>
+<pre class="programlisting">typedef struct _PangoMapEntry PangoMapEntry;</pre>
+<p>
+A <a class="link" href="pango-Modules.html#PangoMapEntry" title="PangoMapEntry"><span class="type">PangoMapEntry</span></a> contains information about the engine that should be used
+for the codepoint to which this entry belongs and also whether the engine
+matches the language tag for this entry's map exactly or just approximately.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-find-map"></a><h3>pango_find_map ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a> *          pango_find_map                      (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> engine_type_id,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> render_type_id);</pre>
+<p>
+Locate a <a class="link" href="pango-Modules.html#PangoMap" title="PangoMap"><span class="type">PangoMap</span></a> for a particular engine type and render
+type. The resulting map can be used to determine the engine
+for each character.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> the language tag for which to find the map
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>engine_type_id</code></em> :</span></p></td>
+<td> the engine type for the map to find
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>render_type_id</code></em> :</span></p></td>
+<td> the render type for the map to find
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the suitable <a class="link" href="pango-Modules.html#PangoMap" title="PangoMap"><span class="type">PangoMap</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-map-get-engine"></a><h3>pango_map_get_engine ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a> *       pango_map_get_engine                (<a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a> *map,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);</pre>
+<p>
+Returns the best engine listed in the map for a given script</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Modules.html#PangoMap" title="PangoMap"><span class="type">PangoMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the best engine, if one is listed for the script,
+   or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>. The lookup may cause the engine to be loaded;
+   once an engine is loaded, it won't be unloaded. If multiple
+   engines are exact for the script, the choice of which is
+   returned is arbitrary.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-map-get-engines"></a><h3>pango_map_get_engines ()</h3>
+<pre class="programlisting">void                pango_map_get_engines               (<a class="link" href="pango-Modules.html#PangoMap" title="PangoMap">PangoMap</a> *map,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> **exact_engines,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> **fallback_engines);</pre>
+<p>
+Finds engines in the map that handle the given script. The returned
+lists should be freed with g_slist_free, but the engines in the
+lists are owned by GLib and will be kept around permanently, so
+they should not be unref'ed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>map</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Modules.html#PangoMap" title="PangoMap"><span class="type">PangoMap</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>exact_engines</code></em> :</span></p></td>
+<td> location to store list of engines that exactly
+ handle this script.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fallback_engines</code></em> :</span></p></td>
+<td> location to store list of engines that approximately
+ handle this script.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-module-register"></a><h3>pango_module_register ()</h3>
+<pre class="programlisting">void                pango_module_register               (<a class="link" href="pango-Modules.html#PangoIncludedModule" title="PangoIncludedModule">PangoIncludedModule</a> *module);</pre>
+<p>
+Registers a statically linked module with Pango. The
+<a class="link" href="pango-Modules.html#PangoIncludedModule" title="PangoIncludedModule"><span class="type">PangoIncludedModule</span></a> structure that is passed in contains the
+functions that would otherwise be loaded from a dynamically loaded
+module.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>module</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Modules.html#PangoIncludedModule" title="PangoIncludedModule"><span class="type">PangoIncludedModule</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-OpenType-Font-Handling.html b/docs/html/pango-OpenType-Font-Handling.html
new file mode 100755 (executable)
index 0000000..a2ce6d5
--- /dev/null
@@ -0,0 +1,1997 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>OpenType Font Handling</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="PangoFcDecoder.html" title="PangoFcDecoder">
+<link rel="next" href="pango-Coverage-Maps.html" title="Coverage Maps">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="PangoFcDecoder.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Coverage-Maps.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-OpenType-Font-Handling.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-OpenType-Font-Handling.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-OpenType-Font-Handling.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-OpenType-Font-Handling"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-OpenType-Font-Handling.top_of_page"></a>OpenType Font Handling</span></h2>
+<p>OpenType Font Handling — Obtaining information from OpenType tables</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1" lang="en">
+<a name="pango-OpenType-Font-Handling.stability-level"></a><h2>Stability Level</h2>
+Unstable, unless otherwise indicated
+</div>
+<div class="refsynopsisdiv">
+<a name="pango-OpenType-Font-Handling.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoOTInfo"></a><a name="PangoOTRuleset"></a><pre class="synopsis">
+typedef             <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a>;
+                    <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo-struct" title="PangoOTInfo">PangoOTInfo</a>;
+                    <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a>;
+                    <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTGlyph" title="PangoOTGlyph">PangoOTGlyph</a>;
+                    <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset-struct" title="PangoOTRuleset">PangoOTRuleset</a>;
+                    <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a>;
+enum                <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a>;
+                    <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" title="PangoOTFeatureMap">PangoOTFeatureMap</a>;
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS" title="PANGO_OT_TAG_MAKE()">PANGO_OT_TAG_MAKE</a>                   (c1,c2,c3,c4)
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE-FROM-STRING--CAPS" title="PANGO_OT_TAG_MAKE_FROM_STRING()">PANGO_OT_TAG_MAKE_FROM_STRING</a>       (s)
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS" title="PANGO_OT_ALL_GLYPHS">PANGO_OT_ALL_GLYPHS</a>
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-FEATURE--CAPS" title="PANGO_OT_NO_FEATURE">PANGO_OT_NO_FEATURE</a>
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS" title="PANGO_OT_NO_SCRIPT">PANGO_OT_NO_SCRIPT</a>
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS" title="PANGO_OT_DEFAULT_LANGUAGE">PANGO_OT_DEFAULT_LANGUAGE</a>
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS" title="PANGO_OT_TAG_DEFAULT_LANGUAGE">PANGO_OT_TAG_DEFAULT_LANGUAGE</a>
+#define             <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" title="PANGO_OT_TAG_DEFAULT_SCRIPT">PANGO_OT_TAG_DEFAULT_SCRIPT</a>
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *       <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-get" title="pango_ot_info_get ()">pango_ot_info_get</a>                   (FT_Face face);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-script" title="pango_ot_info_find_script ()">pango_ot_info_find_script</a>           (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> script_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *script_index);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language" title="pango_ot_info_find_language ()">pango_ot_info_find_language</a>         (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> language_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *language_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *required_feature_index);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature" title="pango_ot_info_find_feature ()">pango_ot_info_find_feature</a>          (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> feature_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> language_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *feature_index);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> *        <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-list-scripts" title="pango_ot_info_list_scripts ()">pango_ot_info_list_scripts</a>          (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> *        <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-list-languages" title="pango_ot_info_list_languages ()">pango_ot_info_list_languages</a>        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> language_tag);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> *        <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-list-features" title="pango_ot_info_list_features ()">pango_ot_info_list_features</a>         (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> language_index);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *     <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-new" title="pango_ot_buffer_new ()">pango_ot_buffer_new</a>                 (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy" title="pango_ot_buffer_destroy ()">pango_ot_buffer_destroy</a>             (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-clear" title="pango_ot_buffer_clear ()">pango_ot_buffer_clear</a>               (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-add-glyph" title="pango_ot_buffer_add_glyph ()">pango_ot_buffer_add_glyph</a>           (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> glyph,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> properties,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> cluster);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-rtl" title="pango_ot_buffer_set_rtl ()">pango_ot_buffer_set_rtl</a>             (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> rtl);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-zero-width-marks" title="pango_ot_buffer_set_zero_width_marks ()">pango_ot_buffer_set_zero_width_marks</a>
+                                                        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> zero_width_marks);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-get-glyphs" title="pango_ot_buffer_get_glyphs ()">pango_ot_buffer_get_glyphs</a>          (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTGlyph" title="PangoOTGlyph">PangoOTGlyph</a> **glyphs,
+                                                         int *n_glyphs);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-output" title="pango_ot_buffer_output ()">pango_ot_buffer_output</a>              (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);
+const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> * <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description" title="pango_ot_ruleset_get_for_description ()">pango_ot_ruleset_get_for_description</a>
+                                                        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *    <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new" title="pango_ot_ruleset_new ()">pango_ot_ruleset_new</a>                (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *    <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for" title="pango_ot_ruleset_new_for ()">pango_ot_ruleset_new_for</a>            (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *    <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description" title="pango_ot_ruleset_new_from_description ()">pango_ot_ruleset_new_from_description</a>
+                                                        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()">pango_ot_ruleset_add_feature</a>        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> feature_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"
+>gulong</a> property_bit);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature" title="pango_ot_ruleset_maybe_add_feature ()">pango_ot_ruleset_maybe_add_feature</a>  (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> feature_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"
+>gulong</a> property_bit);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features" title="pango_ot_ruleset_maybe_add_features ()">pango_ot_ruleset_maybe_add_features</a> (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" title="PangoOTFeatureMap">PangoOTFeatureMap</a> *features,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> n_features);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-feature-count" title="pango_ot_ruleset_get_feature_count ()">pango_ot_ruleset_get_feature_count</a>  (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *n_gsub_features,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *n_gpos_features);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-substitute" title="pango_ot_ruleset_substitute ()">pango_ot_ruleset_substitute</a>         (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-position" title="pango_ot_ruleset_position ()">pango_ot_ruleset_position</a>           (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> * <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy" title="pango_ot_ruleset_description_copy ()">pango_ot_ruleset_description_copy</a>
+                                                        (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-equal" title="pango_ot_ruleset_description_equal ()">pango_ot_ruleset_description_equal</a>  (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc1,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc2);
+void                <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free" title="pango_ot_ruleset_description_free ()">pango_ot_ruleset_description_free</a>   (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-hash" title="pango_ot_ruleset_description_hash ()">pango_ot_ruleset_description_hash</a>   (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a>          <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language" title="pango_ot_tag_from_language ()">pango_ot_tag_from_language</a>          (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a>          <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script" title="pango_ot_tag_from_script ()">pango_ot_tag_from_script</a>            (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-to-language" title="pango_ot_tag_to_language ()">pango_ot_tag_to_language</a>            (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> language_tag);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a>         <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-to-script" title="pango_ot_tag_to_script ()">pango_ot_tag_to_script</a>              (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> script_tag);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-OpenType-Font-Handling.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoOTInfo
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoOTRuleset
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-OpenType-Font-Handling.description"></a><h2>Description</h2>
+<p>
+Functions and macros in this section are used to implement the OpenType Layout
+features and algorithms.  These are mostly useful when writing Fontconfig-based
+shaping engines
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-OpenType-Font-Handling.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoOTTag"></a><h3>PangoOTTag</h3>
+<pre class="programlisting">typedef guint32 PangoOTTag;
+</pre>
+<p>
+The <span class="type">PangoOTTag</span> typedef is used to represent TrueType and OpenType
+four letter tags inside Pango. Use <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS" title="PANGO_OT_TAG_MAKE()"><code class="function">PANGO_OT_TAG_MAKE()</code></a>
+or <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE-FROM-STRING--CAPS" title="PANGO_OT_TAG_MAKE_FROM_STRING()"><code class="function">PANGO_OT_TAG_MAKE_FROM_STRING()</code></a> macros to create <span class="type">PangoOTTag</span>s manually.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTInfo-struct"></a><h3>PangoOTInfo</h3>
+<pre class="programlisting">typedef struct _PangoOTInfo PangoOTInfo;</pre>
+<p>
+The <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a> struct contains the various
+tables associated with an OpenType font. It contains only private fields and
+should only be accessed via the <code class="function">pango_ot_info_*</code> functions
+which are documented below. To obtain a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>,
+use <code class="function">pango_ot_info_new()</code>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTBuffer"></a><h3>PangoOTBuffer</h3>
+<pre class="programlisting">typedef struct _PangoOTBuffer PangoOTBuffer;</pre>
+<p>
+The <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a> structure is used to store strings of glyphs associated
+with a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>, suitable for OpenType layout processing.  It contains
+only private fields and should only be accessed via the
+<code class="function">pango_ot_buffer_*</code> functions which are documented below.
+To obtain a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>, use <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-new" title="pango_ot_buffer_new ()"><code class="function">pango_ot_buffer_new()</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTGlyph"></a><h3>PangoOTGlyph</h3>
+<pre class="programlisting">typedef struct {
+  guint32  glyph;
+  guint    properties;
+  guint    cluster;
+  gushort  component;
+  gushort  ligID;
+
+  guint    internal;
+} PangoOTGlyph;
+</pre>
+<p>
+The <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTGlyph" title="PangoOTGlyph"><span class="type">PangoOTGlyph</span></a> structure represents a single glyph together with
+information used for OpenType layout processing of the glyph.
+It contains the following fields.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint32"
+>guint32</a> <em class="structfield"><code>glyph</code></em>;</span></p></td>
+<td>the glyph itself.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>properties</code></em>;</span></p></td>
+<td>the properties value, identifying which features should be
+            applied on this glyph.  See <code class="function">pango_ruleset_add_feature()</code>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>cluster</code></em>;</span></p></td>
+<td>the cluster that this glyph belongs to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gushort"
+>gushort</a> <em class="structfield"><code>component</code></em>;</span></p></td>
+<td>a component value, set by the OpenType layout engine.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gushort"
+>gushort</a> <em class="structfield"><code>ligID</code></em>;</span></p></td>
+<td>a ligature index value, set by the OpenType layout engine.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>internal</code></em>;</span></p></td>
+<td>for Pango internal use
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTRuleset-struct"></a><h3>PangoOTRuleset</h3>
+<pre class="programlisting">typedef struct _PangoOTRuleset PangoOTRuleset;</pre>
+<p>
+The <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> structure holds a
+set of features selected from the tables in an OpenType font.
+(A feature is an operation such as adjusting glyph positioning
+that should be applied to a text feature such as a certain
+type of accent.) A <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>
+is created with <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new" title="pango_ot_ruleset_new ()"><code class="function">pango_ot_ruleset_new()</code></a>, features are added
+to it with <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()"><code class="function">pango_ot_ruleset_add_feature()</code></a>, then it is
+applied to a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> with <code class="function">pango_ot_ruleset_shape()</code>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTRulesetDescription"></a><h3>PangoOTRulesetDescription</h3>
+<pre class="programlisting">typedef struct {
+  PangoScript               script;
+  PangoLanguage            *language;
+  const PangoOTFeatureMap  *static_gsub_features;
+  guint                   n_static_gsub_features;
+  const PangoOTFeatureMap  *static_gpos_features;
+  guint                   n_static_gpos_features;
+  const PangoOTFeatureMap  *other_features;
+  guint                   n_other_features;
+} PangoOTRulesetDescription;
+</pre>
+<p>
+The <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> structure holds all the information needed
+to build a complete <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> from an OpenType font.
+The main use of this struct is to act as the key for a per-font
+hash of rulesets.  The user populates a ruleset description and
+gets the ruleset using <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description" title="pango_ot_ruleset_get_for_description ()"><code class="function">pango_ot_ruleset_get_for_description()</code></a>
+or create a new one using <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description" title="pango_ot_ruleset_new_from_description ()"><code class="function">pango_ot_ruleset_new_from_description()</code></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> <em class="structfield"><code>script</code></em>;</span></p></td>
+<td>a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *<em class="structfield"><code>language</code></em>;</span></p></td>
+<td>a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" title="PangoOTFeatureMap">PangoOTFeatureMap</a> *<em class="structfield"><code>static_gsub_features</code></em>;</span></p></td>
+<td>static map of GSUB features, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>n_static_gsub_features</code></em>;</span></p></td>
+<td>length of <em class="parameter"><code>static_gsub_features</code></em>, or 0.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" title="PangoOTFeatureMap">PangoOTFeatureMap</a> *<em class="structfield"><code>static_gpos_features</code></em>;</span></p></td>
+<td>static map of GPOS features, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>n_static_gpos_features</code></em>;</span></p></td>
+<td>length of <em class="parameter"><code>static_gpos_features</code></em>, or 0.
+</td>
+</tr>
+<tr>
+<td><p><span class="term">const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" title="PangoOTFeatureMap">PangoOTFeatureMap</a> *<em class="structfield"><code>other_features</code></em>;</span></p></td>
+<td>map of extra features to add to both GSUB and GPOS, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+                 Unlike the static maps, this pointer need not live beyond
+                the life of function calls taking this struct.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>n_other_features</code></em>;</span></p></td>
+<td>length of <em class="parameter"><code>other_features</code></em>, or 0.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTTableType"></a><h3>enum PangoOTTableType</h3>
+<pre class="programlisting">typedef enum
+{
+  PANGO_OT_TABLE_GSUB,
+  PANGO_OT_TABLE_GPOS
+} PangoOTTableType;
+</pre>
+<p>
+The <span class="type">PangoOTTableType</span> enumeration values are used to
+identify the various OpenType tables in the
+<code class="function">pango_ot_info_*</code> functions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-OT-TABLE-GSUB--CAPS"></a><span class="term"><code class="literal">PANGO_OT_TABLE_GSUB</code></span></p></td>
+<td>The GSUB table.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-OT-TABLE-GPOS--CAPS"></a><span class="term"><code class="literal">PANGO_OT_TABLE_GPOS</code></span></p></td>
+<td>The GPOS table.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoOTFeatureMap"></a><h3>PangoOTFeatureMap</h3>
+<pre class="programlisting">typedef struct {
+  char     feature_name[5];
+  gulong   property_bit;
+} PangoOTFeatureMap;
+</pre>
+<p>
+The <span class="type">PangoOTFeatureMap</span> typedef is used to represent an OpenType
+feature with the property bit associated with it.  The feature tag is
+represented as a char array instead of a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> for convenience.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">char <em class="structfield"><code>feature_name</code></em>[5];</span></p></td>
+<td>feature tag in represented as four-letter ASCII string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"
+>gulong</a> <em class="structfield"><code>property_bit</code></em>;</span></p></td>
+<td>the property bit to use for this feature.  See
+              <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()"><code class="function">pango_ot_ruleset_add_feature()</code></a> for details.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-TAG-MAKE--CAPS"></a><h3>PANGO_OT_TAG_MAKE()</h3>
+<pre class="programlisting">#define PANGO_OT_TAG_MAKE(c1,c2,c3,c4)             ((PangoOTTag) FT_MAKE_TAG (c1, c2, c3, c4))
+</pre>
+<p>
+Creates a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> from four characters.  This is similar and
+compatible with the <code class="function"><code class="function">FT_MAKE_TAG()</code></code> macro from
+FreeType.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>c1</code></em> :</span></p></td>
+<td>First character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>c2</code></em> :</span></p></td>
+<td>Second character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>c3</code></em> :</span></p></td>
+<td>Third character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>c4</code></em> :</span></p></td>
+<td>Fourth character.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS"></a><h3>PANGO_OT_TAG_MAKE_FROM_STRING()</h3>
+<pre class="programlisting">#define             PANGO_OT_TAG_MAKE_FROM_STRING(s)</pre>
+<p>
+Creates a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> from a string. The string should be at least
+four characters long (pad with space characters if needed), and need
+not be nul-terminated.  This is a convenience wrapper around
+<a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS" title="PANGO_OT_TAG_MAKE()"><code class="function">PANGO_OT_TAG_MAKE()</code></a>, but cannot be used in certain situations, for
+example, as a switch expression, as it dereferences pointers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>s</code></em> :</span></p></td>
+<td>The string representation of the tag.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-ALL-GLYPHS--CAPS"></a><h3>PANGO_OT_ALL_GLYPHS</h3>
+<pre class="programlisting">#define PANGO_OT_ALL_GLYPHS                        ((guint) 0xFFFF)
+</pre>
+<p>
+This is used as the property bit in <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()"><code class="function">pango_ot_ruleset_add_feature()</code></a> when a
+feature should be applied to all glyphs.
+</p>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-NO-FEATURE--CAPS"></a><h3>PANGO_OT_NO_FEATURE</h3>
+<pre class="programlisting">#define PANGO_OT_NO_FEATURE                        ((guint) 0xFFFF)
+</pre>
+<p>
+This is used as a feature index that represent no feature, that is, should be
+skipped.  It may be returned as feature index by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature" title="pango_ot_info_find_feature ()"><code class="function">pango_ot_info_find_feature()</code></a>
+if the feature is not found, and <code class="function">pango_ot_rulset_add_feature()</code> function
+automatically skips this value, so no special handling is required by the
+user.
+</p>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-NO-SCRIPT--CAPS"></a><h3>PANGO_OT_NO_SCRIPT</h3>
+<pre class="programlisting">#define PANGO_OT_NO_SCRIPT                 ((guint) 0xFFFF)
+</pre>
+<p>
+This is used as a script index that represent no script, that is, when the
+requested script was not found, and a default ('DFLT') script was not found
+either.  It may be returned as script index by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-script" title="pango_ot_info_find_script ()"><code class="function">pango_ot_info_find_script()</code></a>
+if the script or a default script are not found, all other functions
+taking a script index essentially return if the input script index is
+this value, so no special handling is required by the user.
+</p>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-DEFAULT-LANGUAGE--CAPS"></a><h3>PANGO_OT_DEFAULT_LANGUAGE</h3>
+<pre class="programlisting">#define PANGO_OT_DEFAULT_LANGUAGE          ((guint) 0xFFFF)
+</pre>
+<p>
+This is used as the language index in <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature" title="pango_ot_info_find_feature ()"><code class="function">pango_ot_info_find_feature()</code></a> when
+the default language system of the script is desired.
+It is also returned by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language" title="pango_ot_info_find_language ()"><code class="function">pango_ot_info_find_language()</code></a> if the requested language
+is not found, or the requested language tag was PANGO_OT_TAG_DEFAULT_LANGUAGE.
+The end result is that one can always call <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language" title="pango_ot_tag_from_language ()"><code class="function">pango_ot_tag_from_language()</code></a>
+followed by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language" title="pango_ot_info_find_language ()"><code class="function">pango_ot_info_find_language()</code></a> and pass the result to
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature" title="pango_ot_info_find_feature ()"><code class="function">pango_ot_info_find_feature()</code></a> without having to worry about falling back to
+default language system explicitly.
+</p>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS"></a><h3>PANGO_OT_TAG_DEFAULT_LANGUAGE</h3>
+<pre class="programlisting">#define PANGO_OT_TAG_DEFAULT_LANGUAGE              PANGO_OT_TAG_MAKE ('d', 'f', 'l', 't')
+</pre>
+<p>
+This is a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> representing a special language tag 'dflt'.  It is
+returned as language tag by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language" title="pango_ot_tag_from_language ()"><code class="function">pango_ot_tag_from_language()</code></a> if the requested
+language is not found.  It is safe to pass this value to
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language" title="pango_ot_info_find_language ()"><code class="function">pango_ot_info_find_language()</code></a> as that function falls back to returning default
+language-system if the requested language tag is not found.
+</p>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS"></a><h3>PANGO_OT_TAG_DEFAULT_SCRIPT</h3>
+<pre class="programlisting">#define PANGO_OT_TAG_DEFAULT_SCRIPT                PANGO_OT_TAG_MAKE ('D', 'F', 'L', 'T')
+</pre>
+<p>
+This is a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> representing the special script tag 'DFLT'.  It is
+returned as script tag by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script" title="pango_ot_tag_from_script ()"><code class="function">pango_ot_tag_from_script()</code></a> if the requested script
+is not found.
+</p>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-get"></a><h3>pango_ot_info_get ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *       pango_ot_info_get                   (FT_Face face);</pre>
+<p>
+Returns the <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a> structure for the given FreeType font face.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>face</code></em> :</span></p></td>
+<td> a <span class="type">FT_Face</span>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a> for <em class="parameter"><code>face</code></em>. This object will have
+the same lifetime as <em class="parameter"><code>face</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-find-script"></a><h3>pango_ot_info_find_script ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_ot_info_find_script           (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> script_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *script_index);</pre>
+<p>
+Finds the index of a script.  If not found, tries to find the 'DFLT'
+and then 'dflt' scripts and return the index of that in <em class="parameter"><code>script_index</code></em>.
+If none of those is found either, <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS" title="PANGO_OT_NO_SCRIPT"><code class="literal">PANGO_OT_NO_SCRIPT</code></a> is placed in
+<em class="parameter"><code>script_index</code></em>.
+</p>
+<p>
+All other functions taking an input script_index parameter know
+how to handle <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS" title="PANGO_OT_NO_SCRIPT"><code class="literal">PANGO_OT_NO_SCRIPT</code></a>, so one can ignore the return
+value of this function completely and proceed, to enjoy the automatic
+fallback to the 'DFLT'/'dflt' script.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_tag</code></em> :</span></p></td>
+<td> the tag of the script to find.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_index</code></em> :</span></p></td>
+<td> location to store the index of the script, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the script was found.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-find-language"></a><h3>pango_ot_info_find_language ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_ot_info_find_language         (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> language_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *language_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *required_feature_index);</pre>
+<p>
+Finds the index of a language and its required feature index.
+If the language is not found, sets <em class="parameter"><code>language_index</code></em> to
+PANGO_OT_DEFAULT_LANGUAGE and the required feature of the default language
+system is returned in required_feature_index.  For best compatibility with
+some fonts, also searches the language system tag 'dflt' before falling
+back to the default language system, but that is transparent to the user.
+The user can simply ignore the return value of this function to
+automatically fall back to the default language system.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_index</code></em> :</span></p></td>
+<td> the index of the script whose languages are searched.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_tag</code></em> :</span></p></td>
+<td> the tag of the language to find.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_index</code></em> :</span></p></td>
+<td> location to store the index of the language, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>required_feature_index</code></em> :</span></p></td>
+<td> location to store the required feature index of
+   the language, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the language was found.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-find-feature"></a><h3>pango_ot_info_find_feature ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_ot_info_find_feature          (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> feature_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> language_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *feature_index);</pre>
+<p>
+Finds the index of a feature.  If the feature is not found, sets
+<em class="parameter"><code>feature_index</code></em> to PANGO_OT_NO_FEATURE, which is safe to pass to
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()"><code class="function">pango_ot_ruleset_add_feature()</code></a> and similar functions.
+</p>
+<p>
+In the future, this may set <em class="parameter"><code>feature_index</code></em> to an special value that if used
+in <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()"><code class="function">pango_ot_ruleset_add_feature()</code></a> will ask Pango to synthesize the
+requested feature based on Unicode properties and data.  However, this
+function will still return <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> in those cases.  So, users may want to
+ignore the return value of this function in certain cases.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>feature_tag</code></em> :</span></p></td>
+<td> the tag of the feature to find.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_index</code></em> :</span></p></td>
+<td> the index of the script.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_index</code></em> :</span></p></td>
+<td> the index of the language whose features are searched,
+    or <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS" title="PANGO_OT_DEFAULT_LANGUAGE"><code class="literal">PANGO_OT_DEFAULT_LANGUAGE</code></a> to use the default language of the script.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>feature_index</code></em> :</span></p></td>
+<td> location to store the index of the feature, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the feature was found.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-list-scripts"></a><h3>pango_ot_info_list_scripts ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> *        pango_ot_info_list_scripts          (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type);</pre>
+<p>
+Obtains the list of available scripts.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated zero-terminated array containing the tags of the
+  available scripts.  Should be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-list-languages"></a><h3>pango_ot_info_list_languages ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> *        pango_ot_info_list_languages        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> language_tag);</pre>
+<p>
+Obtains the list of available languages for a given script.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_index</code></em> :</span></p></td>
+<td> the index of the script to list languages for.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_tag</code></em> :</span></p></td>
+<td> unused parameter.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated zero-terminated array containing the tags of the
+  available languages.  Should be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-info-list-features"></a><h3>pango_ot_info_list_features ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> *        pango_ot_info_list_features         (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> script_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> language_index);</pre>
+<p>
+Obtains the list of features for the given language of the given script.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tag</code></em> :</span></p></td>
+<td> unused parameter.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_index</code></em> :</span></p></td>
+<td> the index of the script to obtain information about.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_index</code></em> :</span></p></td>
+<td> the index of the language to list features for, or
+    <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS" title="PANGO_OT_DEFAULT_LANGUAGE"><code class="literal">PANGO_OT_DEFAULT_LANGUAGE</code></a>, to list features for the default
+    language of the script.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated zero-terminated array containing the tags of the
+available features.  Should be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-new"></a><h3>pango_ot_buffer_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *     pango_ot_buffer_new                 (<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a> *font);</pre>
+<p>
+Creates a new <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a> for the given OpenType font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>, which should
+              be freed with <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy" title="pango_ot_buffer_destroy ()"><code class="function">pango_ot_buffer_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-destroy"></a><h3>pango_ot_buffer_destroy ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_destroy             (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);</pre>
+<p>
+Destroys a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a> and free all associated memory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-clear"></a><h3>pango_ot_buffer_clear ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_clear               (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);</pre>
+<p>
+Empties a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>, make it ready to add glyphs to.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-add-glyph"></a><h3>pango_ot_buffer_add_glyph ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_add_glyph           (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> glyph,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> properties,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> cluster);</pre>
+<p>
+Appends a glyph to a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>, with <em class="parameter"><code>properties</code></em> identifying which
+features should be applied on this glyph.  See <code class="function">pango_ruleset_add_feature()</code>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph</code></em> :</span></p></td>
+<td> the glyph index to add, like a <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph"><span class="type">PangoGlyph</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>properties</code></em> :</span></p></td>
+<td> the glyph properties
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cluster</code></em> :</span></p></td>
+<td> the cluster that this glyph belongs to
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-set-rtl"></a><h3>pango_ot_buffer_set_rtl ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_set_rtl             (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> rtl);</pre>
+<p>
+Sets whether glyphs will be rendered right-to-left.  This setting
+is needed for proper horizontal positioning of right-to-left scripts.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rtl</code></em> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> for right-to-left text
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-set-zero-width-marks"></a><h3>pango_ot_buffer_set_zero_width_marks ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_set_zero_width_marks
+                                                        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> zero_width_marks);</pre>
+<p>
+Sets whether characters with a mark class should be forced to zero width.
+This setting is needed for proper positioning of Arabic accents,
+but will produce incorrect results with standard OpenType Indic
+fonts.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>zero_width_marks</code></em> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if characters with a mark class should
+ be forced to zero width.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-get-glyphs"></a><h3>pango_ot_buffer_get_glyphs ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_get_glyphs          (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTGlyph" title="PangoOTGlyph">PangoOTGlyph</a> **glyphs,
+                                                         int *n_glyphs);</pre>
+<p>
+Gets the glyph array contained in a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>.  The glyphs are
+owned by the buffer and should not be freed, and are only valid as long
+as buffer is not modified.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> location to store the array of glyphs, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_glyphs</code></em> :</span></p></td>
+<td> location to store the number of glyphs, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-buffer-output"></a><h3>pango_ot_buffer_output ()</h3>
+<pre class="programlisting">void                pango_ot_buffer_output              (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);</pre>
+<p>
+Exports the glyphs in a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a> into a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>.  This is
+typically used after the OpenType layout processing is over, to convert the
+resulting glyphs into a generic Pango glyph string.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-get-for-description"></a><h3>pango_ot_ruleset_get_for_description ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> * pango_ot_ruleset_get_for_description
+                                                        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);</pre>
+<p>
+Returns a ruleset for the given OpenType info and ruleset
+description.  Rulesets are created on demand using
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description" title="pango_ot_ruleset_new_from_description ()"><code class="function">pango_ot_ruleset_new_from_description()</code></a>.
+The returned ruleset should not be modified or destroyed.
+</p>
+<p>
+The static feature map members of <em class="parameter"><code>desc</code></em> should be alive as
+long as <em class="parameter"><code>info</code></em> is.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription"><span class="type">PangoOTRulesetDescription</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> for <em class="parameter"><code>desc</code></em>. This object will have
+the same lifetime as <em class="parameter"><code>info</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-new"></a><h3>pango_ot_ruleset_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *    pango_ot_ruleset_new                (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info);</pre>
+<p>
+Creates a new <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> for the given OpenType info.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>, which
+              should be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-new-for"></a><h3>pango_ot_ruleset_new_for ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *    pango_ot_ruleset_new_for            (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Creates a new <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> for the given OpenType info, script, and
+language.
+</p>
+<p>
+This function is part of a convenience scheme that highly simplifies
+using a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> to represent features for a specific pair of script
+and language.  So one can use this function passing in the script and
+language of interest, and later try to add features to the ruleset by just
+specifying the feature name or tag, without having to deal with finding
+script, language, or feature indices manually.
+</p>
+<p>
+In excess to what <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new" title="pango_ot_ruleset_new ()"><code class="function">pango_ot_ruleset_new()</code></a> does, this function will:
+</p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+  Find the <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> script and language tags associated with
+  <em class="parameter"><code>script</code></em> and <em class="parameter"><code>language</code></em> using <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script" title="pango_ot_tag_from_script ()"><code class="function">pango_ot_tag_from_script()</code></a> and
+  <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language" title="pango_ot_tag_from_language ()"><code class="function">pango_ot_tag_from_language()</code></a>,
+  </li>
+<li>
+  For each of table types <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TABLE-GSUB--CAPS"><code class="literal">PANGO_OT_TABLE_GSUB</code></a> and <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TABLE-GPOS--CAPS"><code class="literal">PANGO_OT_TABLE_GPOS</code></a>,
+  find the script index of the script tag found and the language
+  system index of the language tag found in that script system, using
+  <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-script" title="pango_ot_info_find_script ()"><code class="function">pango_ot_info_find_script()</code></a> and <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language" title="pango_ot_info_find_language ()"><code class="function">pango_ot_info_find_language()</code></a>,
+  </li>
+<li>
+  For found language-systems, if they have required feature
+  index, add that feature to the ruleset using
+  <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature" title="pango_ot_ruleset_add_feature ()"><code class="function">pango_ot_ruleset_add_feature()</code></a>,
+  </li>
+<li>
+  Remember found script and language indices for both table types,
+  and use them in future <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature" title="pango_ot_ruleset_maybe_add_feature ()"><code class="function">pango_ot_ruleset_maybe_add_feature()</code></a> and
+  <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features" title="pango_ot_ruleset_maybe_add_features ()"><code class="function">pango_ot_ruleset_maybe_add_features()</code></a>.
+  </li>
+</ul></div>
+<p>
+</p>
+<p>
+Because of the way return values of <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-script" title="pango_ot_info_find_script ()"><code class="function">pango_ot_info_find_script()</code></a> and
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-language" title="pango_ot_info_find_language ()"><code class="function">pango_ot_info_find_language()</code></a> are ignored, this function automatically
+finds and uses the 'DFLT' script and the default language-system.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>, which
+              should be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-new-from-description"></a><h3>pango_ot_ruleset_new_from_description ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *    pango_ot_ruleset_new_from_description
+                                                        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a> *info,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);</pre>
+<p>
+Creates a new <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a> for the given OpenType infor and
+matching the given ruleset description.
+</p>
+<p>
+This is a convenience function that calls <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for" title="pango_ot_ruleset_new_for ()"><code class="function">pango_ot_ruleset_new_for()</code></a> and
+adds the static GSUB/GPOS features to the resulting ruleset, followed by
+adding other features to both GSUB and GPOS.
+</p>
+<p>
+The static feature map members of <em class="parameter"><code>desc</code></em> should be alive as
+long as <em class="parameter"><code>info</code></em> is.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo"><span class="type">PangoOTInfo</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription"><span class="type">PangoOTRulesetDescription</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>, which
+              should be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-add-feature"></a><h3>pango_ot_ruleset_add_feature ()</h3>
+<pre class="programlisting">void                pango_ot_ruleset_add_feature        (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> feature_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"
+>gulong</a> property_bit);</pre>
+<p>
+Adds a feature to the ruleset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ruleset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to add a feature to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>feature_index</code></em> :</span></p></td>
+<td> the index of the feature to add.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property_bit</code></em> :</span></p></td>
+<td> the property bit to use for this feature. Used to identify
+               the glyphs that this feature should be applied to, or
+               <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS" title="PANGO_OT_ALL_GLYPHS"><code class="literal">PANGO_OT_ALL_GLYPHS</code></a> if it should be applied to all glyphs.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-maybe-add-feature"></a><h3>pango_ot_ruleset_maybe_add_feature ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_ot_ruleset_maybe_add_feature  (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> feature_tag,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gulong"
+>gulong</a> property_bit);</pre>
+<p>
+This is a convenience function that first tries to find the feature
+using <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature" title="pango_ot_info_find_feature ()"><code class="function">pango_ot_info_find_feature()</code></a> and the ruleset script and language
+passed to <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for" title="pango_ot_ruleset_new_for ()"><code class="function">pango_ot_ruleset_new_for()</code></a>,
+and if the feature is found, adds it to the ruleset.
+</p>
+<p>
+If <em class="parameter"><code>ruleset</code></em> was not created using <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for" title="pango_ot_ruleset_new_for ()"><code class="function">pango_ot_ruleset_new_for()</code></a>, this function
+does nothing.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ruleset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to add a feature to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>feature_tag</code></em> :</span></p></td>
+<td> the tag of the feature to add.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>property_bit</code></em> :</span></p></td>
+<td> the property bit to use for this feature. Used to identify
+               the glyphs that this feature should be applied to, or
+               <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS" title="PANGO_OT_ALL_GLYPHS"><code class="literal">PANGO_OT_ALL_GLYPHS</code></a> if it should be applied to all glyphs.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the feature was found and added to ruleset,
+              <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-maybe-add-features"></a><h3>pango_ot_ruleset_maybe_add_features ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               pango_ot_ruleset_maybe_add_features (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTableType" title="enum PangoOTTableType">PangoOTTableType</a> table_type,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" title="PangoOTFeatureMap">PangoOTFeatureMap</a> *features,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> n_features);</pre>
+<p>
+This is a convenience function that 
+for each feature in the feature map array <em class="parameter"><code>features</code></em>
+converts the feature name to a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> feature tag using <a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS" title="PANGO_OT_TAG_MAKE()"><code class="function">PANGO_OT_TAG_MAKE()</code></a>
+and calls <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature" title="pango_ot_ruleset_maybe_add_feature ()"><code class="function">pango_ot_ruleset_maybe_add_feature()</code></a> on it.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ruleset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>table_type</code></em> :</span></p></td>
+<td> the table type to add features to.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>features</code></em> :</span></p></td>
+<td> array of feature name and property bits to add.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_features</code></em> :</span></p></td>
+<td> number of feature records in <em class="parameter"><code>features</code></em> array.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The number of features in <em class="parameter"><code>features</code></em> that were found
+              and added to <em class="parameter"><code>ruleset</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-get-feature-count"></a><h3>pango_ot_ruleset_get_feature_count ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               pango_ot_ruleset_get_feature_count  (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *n_gsub_features,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> *n_gpos_features);</pre>
+<p>
+Gets the number of GSUB and GPOS features in the ruleset.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ruleset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_gsub_features</code></em> :</span></p></td>
+<td> location to store number of GSUB features, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_gpos_features</code></em> :</span></p></td>
+<td> location to store number of GPOS features, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Total number of features in the <em class="parameter"><code>ruleset</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-substitute"></a><h3>pango_ot_ruleset_substitute ()</h3>
+<pre class="programlisting">void                pango_ot_ruleset_substitute         (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);</pre>
+<p>
+Performs the OpenType GSUB substitution on <em class="parameter"><code>buffer</code></em> using the features
+in <em class="parameter"><code>ruleset</code></em></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ruleset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-position"></a><h3>pango_ot_ruleset_position ()</h3>
+<pre class="programlisting">void                pango_ot_ruleset_position           (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a> *ruleset,
+                                                         <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer">PangoOTBuffer</a> *buffer);</pre>
+<p>
+Performs the OpenType GPOS positioning on <em class="parameter"><code>buffer</code></em> using the features
+in <em class="parameter"><code>ruleset</code></em></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ruleset</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset"><span class="type">PangoOTRuleset</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTBuffer" title="PangoOTBuffer"><span class="type">PangoOTBuffer</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-description-copy"></a><h3>pango_ot_ruleset_description_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> * pango_ot_ruleset_description_copy
+                                                        (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);</pre>
+<p>
+Creates a copy of <em class="parameter"><code>desc</code></em>, which should be freed with
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free" title="pango_ot_ruleset_description_free ()"><code class="function">pango_ot_ruleset_description_free()</code></a>. Primarily used internally
+by <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description" title="pango_ot_ruleset_get_for_description ()"><code class="function">pango_ot_ruleset_get_for_description()</code></a> to cache rulesets for
+ruleset descriptions.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> ruleset description to copy
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription"><span class="type">PangoOTRulesetDescription</span></a>, which
+              should be freed with <a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free" title="pango_ot_ruleset_description_free ()"><code class="function">pango_ot_ruleset_description_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-description-equal"></a><h3>pango_ot_ruleset_description_equal ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_ot_ruleset_description_equal  (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc1,
+                                                         const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc2);</pre>
+<p>
+Compares two ruleset descriptions for equality.
+Two ruleset descriptions are considered equal if the rulesets
+they describe are provably identical.  This means that their
+script, language, and all feature sets should be equal.  For static feature
+sets, the array addresses are compared directly, while for other
+features, the list of features is compared one by one.
+(Two ruleset descriptions may result in identical rulesets
+being created, but still compare <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc1</code></em> :</span></p></td>
+<td> a ruleset description
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc2</code></em> :</span></p></td>
+<td> a ruleset description
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if two ruleset descriptions are identical,
+              <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-description-free"></a><h3>pango_ot_ruleset_description_free ()</h3>
+<pre class="programlisting">void                pango_ot_ruleset_description_free   (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);</pre>
+<p>
+Frees a ruleset description allocated by 
+<a class="link" href="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy" title="pango_ot_ruleset_description_copy ()"><code class="function">pango_ot_ruleset_description_copy()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> an allocated <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription"><span class="type">PangoOTRulesetDescription</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-ruleset-description-hash"></a><h3>pango_ot_ruleset_description_hash ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               pango_ot_ruleset_description_hash   (const <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription">PangoOTRulesetDescription</a> *desc);</pre>
+<p>
+Computes a hash of a <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" title="PangoOTRulesetDescription"><span class="type">PangoOTRulesetDescription</span></a> structure suitable
+to be used, for example, as an argument to <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Hash-Tables.html#g-hash-table-new"
+><code class="function">g_hash_table_new()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a ruleset description
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the hash value.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-tag-from-language"></a><h3>pango_ot_tag_from_language ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a>          pango_ot_tag_from_language          (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Finds the OpenType language-system tag best describing <em class="parameter"><code>language</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> A <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> best matching <em class="parameter"><code>language</code></em> or
+<a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS" title="PANGO_OT_TAG_DEFAULT_LANGUAGE"><code class="literal">PANGO_OT_TAG_DEFAULT_LANGUAGE</code></a> if none found or if <em class="parameter"><code>language</code></em>
+is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-tag-from-script"></a><h3>pango_ot_tag_from_script ()</h3>
+<pre class="programlisting"><a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a>          pango_ot_tag_from_script            (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);</pre>
+<p>
+Finds the OpenType script tag corresponding to <em class="parameter"><code>script</code></em>.
+</p>
+<p>
+The <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-COMMON--CAPS"><code class="literal">PANGO_SCRIPT_COMMON</code></a>, <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-INHERITED--CAPS"><code class="literal">PANGO_SCRIPT_INHERITED</code></a>, and
+<a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-UNKNOWN--CAPS"><code class="literal">PANGO_SCRIPT_UNKNOWN</code></a> scripts are mapped to the OpenType
+'DFLT' script tag that is also defined as
+<a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" title="PANGO_OT_TAG_DEFAULT_SCRIPT"><code class="literal">PANGO_OT_TAG_DEFAULT_SCRIPT</code></a>.
+</p>
+<p>
+Note that multiple <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> values may map to the same
+OpenType script tag.  In particular, <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HIRAGANA--CAPS"><code class="literal">PANGO_SCRIPT_HIRAGANA</code></a>
+and <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KATAKANA--CAPS"><code class="literal">PANGO_SCRIPT_KATAKANA</code></a> both map to the OT tag 'kana'.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> A <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> corresponding to <em class="parameter"><code>script</code></em> or
+<a class="link" href="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" title="PANGO_OT_TAG_DEFAULT_SCRIPT"><code class="literal">PANGO_OT_TAG_DEFAULT_SCRIPT</code></a> if none found.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-tag-to-language"></a><h3>pango_ot_tag_to_language ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     pango_ot_tag_to_language            (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> language_tag);</pre>
+<p>
+Finds a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> corresponding to <em class="parameter"><code>language_tag</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language_tag</code></em> :</span></p></td>
+<td> A <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> OpenType language-system tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> best matching <em class="parameter"><code>language_tag</code></em> or
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> corresponding to the string "xx" if none found.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-ot-tag-to-script"></a><h3>pango_ot_tag_to_script ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a>         pango_ot_tag_to_script              (<a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag">PangoOTTag</a> script_tag);</pre>
+<p>
+Finds the <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> corresponding to <em class="parameter"><code>script_tag</code></em>.
+</p>
+<p>
+The 'DFLT' script tag is mapped to <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-COMMON--CAPS"><code class="literal">PANGO_SCRIPT_COMMON</code></a>.
+</p>
+<p>
+Note that an OpenType script tag may correspond to multiple
+<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> values.  In such cases, the <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> value
+with the smallest value is returned.
+In particular, <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HIRAGANA--CAPS"><code class="literal">PANGO_SCRIPT_HIRAGANA</code></a>
+and <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KATAKANA--CAPS"><code class="literal">PANGO_SCRIPT_KATAKANA</code></a> both map to the OT tag 'kana'.
+This function will return <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HIRAGANA--CAPS"><code class="literal">PANGO_SCRIPT_HIRAGANA</code></a> for
+'kana'.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script_tag</code></em> :</span></p></td>
+<td> A <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTTag" title="PangoOTTag"><span class="type">PangoOTTag</span></a> OpenType script tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> corresponding to <em class="parameter"><code>script_tag</code></em> or
+<a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-UNKNOWN--CAPS"><code class="literal">PANGO_SCRIPT_UNKNOWN</code></a> if none found.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.18</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Scripts-and-Languages.html b/docs/html/pango-Scripts-and-Languages.html
new file mode 100755 (executable)
index 0000000..b4e9b5b
--- /dev/null
@@ -0,0 +1,1243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Scripts and Languages</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Layout-Objects.html" title="Layout Objects">
+<link rel="next" href="pango-Bidirectional-Text.html" title="Bidirectional Text">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Layout-Objects.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Bidirectional-Text.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Scripts-and-Languages.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Scripts-and-Languages.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Scripts-and-Languages"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Scripts-and-Languages.top_of_page"></a>Scripts and Languages</span></h2>
+<p>Scripts and Languages — Identifying writing systems and languages</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Scripts-and-Languages.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+enum                <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a>;
+#define             <a class="link" href="pango-Scripts-and-Languages.html#PANGO-TYPE-SCRIPT--CAPS" title="PANGO_TYPE_SCRIPT">PANGO_TYPE_SCRIPT</a>
+                    <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a>;
+<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a>         <a class="link" href="pango-Scripts-and-Languages.html#pango-script-for-unichar" title="pango_script_for_unichar ()">pango_script_for_unichar</a>            (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     <a class="link" href="pango-Scripts-and-Languages.html#pango-script-get-sample-language" title="pango_script_get_sample_language ()">pango_script_get_sample_language</a>    (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *   <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-new" title="pango_script_iter_new ()">pango_script_iter_new</a>               (const char *text,
+                                                         int length);
+void                <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-get-range" title="pango_script_iter_get_range ()">pango_script_iter_get_range</a>         (<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *iter,
+                                                         G_CONST_RETURN char **start,
+                                                         G_CONST_RETURN char **end,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> *script);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-next" title="pango_script_iter_next ()">pango_script_iter_next</a>              (<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *iter);
+void                <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-free" title="pango_script_iter_free ()">pango_script_iter_free</a>              (<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *iter);
+                    <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a>;
+#define             <a class="link" href="pango-Scripts-and-Languages.html#PANGO-TYPE-LANGUAGE--CAPS" title="PANGO_TYPE_LANGUAGE">PANGO_TYPE_LANGUAGE</a>
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     <a class="link" href="pango-Scripts-and-Languages.html#pango-language-from-string" title="pango_language_from_string ()">pango_language_from_string</a>          (const char *language);
+const char *        <a class="link" href="pango-Scripts-and-Languages.html#pango-language-to-string" title="pango_language_to_string ()">pango_language_to_string</a>            (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Scripts-and-Languages.html#pango-language-matches" title="pango_language_matches ()">pango_language_matches</a>              (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         const char *range_list);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Scripts-and-Languages.html#pango-language-includes-script" title="pango_language_includes_script ()">pango_language_includes_script</a>      (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);
+const <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> * <a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-scripts" title="pango_language_get_scripts ()">pango_language_get_scripts</a>          (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         int *num_scripts);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     <a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-default" title="pango_language_get_default ()">pango_language_get_default</a>          (void);
+const char *        <a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-sample-string" title="pango_language_get_sample_string ()">pango_language_get_sample_string</a>    (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Scripts-and-Languages.description"></a><h2>Description</h2>
+<p>
+The functions in this section are used to identify the writing
+system, or <em class="firstterm">script</em> of individual characters
+and of ranges within a larger text string.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Scripts-and-Languages.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoScript"></a><h3>enum PangoScript</h3>
+<pre class="programlisting">typedef enum {                         /* ISO 15924 code */
+      PANGO_SCRIPT_INVALID_CODE = -1,
+      PANGO_SCRIPT_COMMON       = 0,   /* Zyyy */
+      PANGO_SCRIPT_INHERITED,          /* Qaai */
+      PANGO_SCRIPT_ARABIC,             /* Arab */
+      PANGO_SCRIPT_ARMENIAN,           /* Armn */
+      PANGO_SCRIPT_BENGALI,            /* Beng */
+      PANGO_SCRIPT_BOPOMOFO,           /* Bopo */
+      PANGO_SCRIPT_CHEROKEE,           /* Cher */
+      PANGO_SCRIPT_COPTIC,             /* Qaac */
+      PANGO_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
+      PANGO_SCRIPT_DESERET,            /* Dsrt */
+      PANGO_SCRIPT_DEVANAGARI,         /* Deva */
+      PANGO_SCRIPT_ETHIOPIC,           /* Ethi */
+      PANGO_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
+      PANGO_SCRIPT_GOTHIC,             /* Goth */
+      PANGO_SCRIPT_GREEK,              /* Grek */
+      PANGO_SCRIPT_GUJARATI,           /* Gujr */
+      PANGO_SCRIPT_GURMUKHI,           /* Guru */
+      PANGO_SCRIPT_HAN,                /* Hani */
+      PANGO_SCRIPT_HANGUL,             /* Hang */
+      PANGO_SCRIPT_HEBREW,             /* Hebr */
+      PANGO_SCRIPT_HIRAGANA,           /* Hira */
+      PANGO_SCRIPT_KANNADA,            /* Knda */
+      PANGO_SCRIPT_KATAKANA,           /* Kana */
+      PANGO_SCRIPT_KHMER,              /* Khmr */
+      PANGO_SCRIPT_LAO,                /* Laoo */
+      PANGO_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
+      PANGO_SCRIPT_MALAYALAM,          /* Mlym */
+      PANGO_SCRIPT_MONGOLIAN,          /* Mong */
+      PANGO_SCRIPT_MYANMAR,            /* Mymr */
+      PANGO_SCRIPT_OGHAM,              /* Ogam */
+      PANGO_SCRIPT_OLD_ITALIC,         /* Ital */
+      PANGO_SCRIPT_ORIYA,              /* Orya */
+      PANGO_SCRIPT_RUNIC,              /* Runr */
+      PANGO_SCRIPT_SINHALA,            /* Sinh */
+      PANGO_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
+      PANGO_SCRIPT_TAMIL,              /* Taml */
+      PANGO_SCRIPT_TELUGU,             /* Telu */
+      PANGO_SCRIPT_THAANA,             /* Thaa */
+      PANGO_SCRIPT_THAI,               /* Thai */
+      PANGO_SCRIPT_TIBETAN,            /* Tibt */
+      PANGO_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
+      PANGO_SCRIPT_YI,                 /* Yiii */
+      PANGO_SCRIPT_TAGALOG,            /* Tglg */
+      PANGO_SCRIPT_HANUNOO,            /* Hano */
+      PANGO_SCRIPT_BUHID,              /* Buhd */
+      PANGO_SCRIPT_TAGBANWA,           /* Tagb */
+
+      /* Unicode-4.0 additions */
+      PANGO_SCRIPT_BRAILLE,            /* Brai */
+      PANGO_SCRIPT_CYPRIOT,            /* Cprt */
+      PANGO_SCRIPT_LIMBU,              /* Limb */
+      PANGO_SCRIPT_OSMANYA,            /* Osma */
+      PANGO_SCRIPT_SHAVIAN,            /* Shaw */
+      PANGO_SCRIPT_LINEAR_B,           /* Linb */
+      PANGO_SCRIPT_TAI_LE,             /* Tale */
+      PANGO_SCRIPT_UGARITIC,           /* Ugar */
+
+      /* Unicode-4.1 additions */
+      PANGO_SCRIPT_NEW_TAI_LUE,        /* Talu */
+      PANGO_SCRIPT_BUGINESE,           /* Bugi */
+      PANGO_SCRIPT_GLAGOLITIC,         /* Glag */
+      PANGO_SCRIPT_TIFINAGH,           /* Tfng */
+      PANGO_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
+      PANGO_SCRIPT_OLD_PERSIAN,        /* Xpeo */
+      PANGO_SCRIPT_KHAROSHTHI,         /* Khar */
+
+      /* Unicode-5.0 additions */
+      PANGO_SCRIPT_UNKNOWN,            /* Zzzz */
+      PANGO_SCRIPT_BALINESE,           /* Bali */
+      PANGO_SCRIPT_CUNEIFORM,          /* Xsux */
+      PANGO_SCRIPT_PHOENICIAN,         /* Phnx */
+      PANGO_SCRIPT_PHAGS_PA,           /* Phag */
+      PANGO_SCRIPT_NKO,                /* Nkoo */
+
+      /* Unicode-5.1 additions */
+      PANGO_SCRIPT_KAYAH_LI,           /* Kali */
+      PANGO_SCRIPT_LEPCHA,             /* Lepc */
+      PANGO_SCRIPT_REJANG,             /* Rjng */
+      PANGO_SCRIPT_SUNDANESE,          /* Sund */
+      PANGO_SCRIPT_SAURASHTRA,         /* Saur */
+      PANGO_SCRIPT_CHAM,               /* Cham */
+      PANGO_SCRIPT_OL_CHIKI,           /* Olck */
+      PANGO_SCRIPT_VAI,                /* Vaii */
+      PANGO_SCRIPT_CARIAN,             /* Cari */
+      PANGO_SCRIPT_LYCIAN,             /* Lyci */
+      PANGO_SCRIPT_LYDIAN              /* Lydi */
+} PangoScript;
+</pre>
+<p>
+The <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> enumeration identifies different writing
+systems. The values correspond to the names as defined in the
+Unicode standard.
+Note that new types may be added in the future. Applications should be ready
+to handle unknown values.  This enumeration is interchangeable with
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#GUnicodeScript"
+><span class="type">GUnicodeScript</span></a>.  See <a class="ulink" href="http://www.unicode.org/reports/tr24/" target="_top">Unicode Standard Annex
+#24: Script names</a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-SCRIPT-INVALID-CODE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_INVALID_CODE</code></span></p></td>
+<td>a value never returned from <a class="link" href="pango-Scripts-and-Languages.html#pango-script-for-unichar" title="pango_script_for_unichar ()"><code class="function">pango_script_for_unichar()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-COMMON--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_COMMON</code></span></p></td>
+<td>a character used by multiple different scripts
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-INHERITED--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_INHERITED</code></span></p></td>
+<td>a mark glyph that takes its script from the
+  base glyph to which it is attached
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-ARABIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_ARABIC</code></span></p></td>
+<td>   Arabic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-ARMENIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_ARMENIAN</code></span></p></td>
+<td>Armenian
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-BENGALI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_BENGALI</code></span></p></td>
+<td>   Bengali
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-BOPOMOFO--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_BOPOMOFO</code></span></p></td>
+<td>Bopomofo
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CHEROKEE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CHEROKEE</code></span></p></td>
+<td>   Cherokee
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-COPTIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_COPTIC</code></span></p></td>
+<td>   Coptic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CYRILLIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CYRILLIC</code></span></p></td>
+<td>   Cyrillic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-DESERET--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_DESERET</code></span></p></td>
+<td>   Deseret
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-DEVANAGARI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_DEVANAGARI</code></span></p></td>
+<td>   Devanagari
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-ETHIOPIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_ETHIOPIC</code></span></p></td>
+<td>   Ethiopic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-GEORGIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_GEORGIAN</code></span></p></td>
+<td>   Georgian
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-GOTHIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_GOTHIC</code></span></p></td>
+<td>   Gothic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-GREEK--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_GREEK</code></span></p></td>
+<td>   Greek
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-GUJARATI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_GUJARATI</code></span></p></td>
+<td>   Gujarati
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-GURMUKHI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_GURMUKHI</code></span></p></td>
+<td>   Gurmukhi
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-HAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_HAN</code></span></p></td>
+<td>   Han
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-HANGUL--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_HANGUL</code></span></p></td>
+<td>   Hangul
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-HEBREW--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_HEBREW</code></span></p></td>
+<td>   Hebrew
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-HIRAGANA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_HIRAGANA</code></span></p></td>
+<td>   Hiragana
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-KANNADA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_KANNADA</code></span></p></td>
+<td>   Kannada
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-KATAKANA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_KATAKANA</code></span></p></td>
+<td>   Katakana
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-KHMER--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_KHMER</code></span></p></td>
+<td>   Khmer
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LAO--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LAO</code></span></p></td>
+<td>   Lao
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LATIN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LATIN</code></span></p></td>
+<td>   Latin
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-MALAYALAM--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_MALAYALAM</code></span></p></td>
+<td>   Malayalam
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-MONGOLIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_MONGOLIAN</code></span></p></td>
+<td>   Mongolian
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-MYANMAR--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_MYANMAR</code></span></p></td>
+<td>   Myanmar
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-OGHAM--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_OGHAM</code></span></p></td>
+<td>   Ogham
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-OLD-ITALIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_OLD_ITALIC</code></span></p></td>
+<td>   Old Italic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-ORIYA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_ORIYA</code></span></p></td>
+<td>   Oriya
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-RUNIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_RUNIC</code></span></p></td>
+<td>   Runic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-SINHALA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_SINHALA</code></span></p></td>
+<td>   Sinhala
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-SYRIAC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_SYRIAC</code></span></p></td>
+<td>   Syriac
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TAMIL--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TAMIL</code></span></p></td>
+<td>   Tamil
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TELUGU--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TELUGU</code></span></p></td>
+<td>   Telugu
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-THAANA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_THAANA</code></span></p></td>
+<td>   Thaana
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-THAI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_THAI</code></span></p></td>
+<td>   Thai
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TIBETAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TIBETAN</code></span></p></td>
+<td>   Tibetan
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CANADIAN-ABORIGINAL--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CANADIAN_ABORIGINAL</code></span></p></td>
+<td>   Canadian Aboriginal
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-YI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_YI</code></span></p></td>
+<td>   Yi
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TAGALOG--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TAGALOG</code></span></p></td>
+<td>   Tagalog
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-HANUNOO--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_HANUNOO</code></span></p></td>
+<td>   Hanunoo
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-BUHID--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_BUHID</code></span></p></td>
+<td>   Buhid
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TAGBANWA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TAGBANWA</code></span></p></td>
+<td>   Tagbanwa
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-BRAILLE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_BRAILLE</code></span></p></td>
+<td>   Braille
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CYPRIOT--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CYPRIOT</code></span></p></td>
+<td>   Cypriot
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LIMBU--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LIMBU</code></span></p></td>
+<td>   Limbu
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-OSMANYA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_OSMANYA</code></span></p></td>
+<td>   Osmanya
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-SHAVIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_SHAVIAN</code></span></p></td>
+<td>   Shavian
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LINEAR-B--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LINEAR_B</code></span></p></td>
+<td>   Linear B
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TAI-LE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TAI_LE</code></span></p></td>
+<td>   Tai Le
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-UGARITIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_UGARITIC</code></span></p></td>
+<td>   Ugaritic
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-NEW-TAI-LUE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_NEW_TAI_LUE</code></span></p></td>
+<td>   New Tai Lue. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-BUGINESE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_BUGINESE</code></span></p></td>
+<td>   Buginese. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-GLAGOLITIC--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_GLAGOLITIC</code></span></p></td>
+<td>   Glagolitic. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-TIFINAGH--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_TIFINAGH</code></span></p></td>
+<td>   Tifinagh. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-SYLOTI-NAGRI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_SYLOTI_NAGRI</code></span></p></td>
+<td>   Syloti Nagri. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-OLD-PERSIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_OLD_PERSIAN</code></span></p></td>
+<td>   Old Persian. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-KHAROSHTHI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_KHAROSHTHI</code></span></p></td>
+<td>   Kharoshthi. Since 1.10
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-UNKNOWN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_UNKNOWN</code></span></p></td>
+<td>           an unassigned code point. Since 1.14
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-BALINESE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_BALINESE</code></span></p></td>
+<td>           Balinese. Since 1.14
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CUNEIFORM--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CUNEIFORM</code></span></p></td>
+<td>   Cuneiform. Since 1.14
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-PHOENICIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_PHOENICIAN</code></span></p></td>
+<td>   Phoenician. Since 1.14
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-PHAGS-PA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_PHAGS_PA</code></span></p></td>
+<td>           Phags-pa. Since 1.14
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-NKO--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_NKO</code></span></p></td>
+<td>           N'Ko. Since 1.14
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-KAYAH-LI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_KAYAH_LI</code></span></p></td>
+<td>  Kayah Li. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LEPCHA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LEPCHA</code></span></p></td>
+<td>    Lepcha. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-REJANG--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_REJANG</code></span></p></td>
+<td>    Rejang. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-SUNDANESE--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_SUNDANESE</code></span></p></td>
+<td> Sundanese. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-SAURASHTRA--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_SAURASHTRA</code></span></p></td>
+<td>Saurashtra. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CHAM--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CHAM</code></span></p></td>
+<td>      Cham. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-OL-CHIKI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_OL_CHIKI</code></span></p></td>
+<td>  Ol Chiki. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-VAI--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_VAI</code></span></p></td>
+<td>       Vai. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-CARIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_CARIAN</code></span></p></td>
+<td>    Carian. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LYCIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LYCIAN</code></span></p></td>
+<td>    Lycian. Since 1.20.1
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-SCRIPT-LYDIAN--CAPS"></a><span class="term"><code class="literal">PANGO_SCRIPT_LYDIAN</code></span></p></td>
+<td>    Lydian. Since 1.20.1
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-SCRIPT--CAPS"></a><h3>PANGO_TYPE_SCRIPT</h3>
+<pre class="programlisting">#define PANGO_TYPE_SCRIPT (pango_script_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoScriptIter"></a><h3>PangoScriptIter</h3>
+<pre class="programlisting">typedef struct _PangoScriptIter PangoScriptIter;</pre>
+<p>
+A <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a> is used to iterate through a string
+and identify ranges in different scripts.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-script-for-unichar"></a><h3>pango_script_for_unichar ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a>         pango_script_for_unichar            (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> ch);</pre>
+<p>
+Looks up the <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> for a particular character (as defined by
+Unicode Standard Annex <span class="type">24</span>). No check is made for <em class="parameter"><code>ch</code></em> being a
+valid Unicode character; if you pass in invalid character, the
+result is undefined.
+</p>
+<p>
+As of Pango 1.18, this function simply returns the return value of
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#g-unichar-get-script"
+><code class="function">g_unichar_get_script()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ch</code></em> :</span></p></td>
+<td> a Unicode character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> for the character.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-script-get-sample-language"></a><h3>pango_script_get_sample_language ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     pango_script_get_sample_language    (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);</pre>
+<p>
+Given a script, finds a language tag that is reasonably
+representative of that script. This will usually be the
+most widely spoken or used language written in that script:
+for instance, the sample language for <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CYRILLIC--CAPS"><code class="literal">PANGO_SCRIPT_CYRILLIC</code></a>
+is <code class="literal">ru</code> (Russian), the sample language
+for <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-ARABIC--CAPS"><code class="literal">PANGO_SCRIPT_ARABIC</code></a> is <code class="literal">ar</code>.
+</p>
+<p>
+For some
+scripts, no sample language will be returned because there
+is no language that is sufficiently representative. The best
+example of this is <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HAN--CAPS"><code class="literal">PANGO_SCRIPT_HAN</code></a>, where various different
+variants of written Chinese, Japanese, and Korean all use
+significantly different sets of Han characters and forms
+of shared characters. No sample language can be provided
+for many historical scripts as well.
+</p>
+<p>
+As of 1.18, this function checks the environment variables
+PANGO_LANGUAGE and LANGUAGE (checked in that order) first.
+If one of them is set, it is parsed as a list of language tags
+separated by colons or other separators.  This function
+will return the first language in the parsed list that Pango
+believes may use <em class="parameter"><code>script</code></em> for writing.  This last predicate
+is tested using <a class="link" href="pango-Scripts-and-Languages.html#pango-language-includes-script" title="pango_language_includes_script ()"><code class="function">pango_language_includes_script()</code></a>.  This can
+be used to control Pango's font selection for non-primary
+languages.  For example, a PANGO_LANGUAGE enviroment variable
+set to "en:fa" makes Pango choose fonts suitable for Persian (fa) 
+instead of Arabic (ar) when a segment of Arabic text is found
+in an otherwise non-Arabic text.  The same trick can be used to
+choose a default language for <a class="link" href="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HAN--CAPS"><code class="literal">PANGO_SCRIPT_HAN</code></a> when setting
+context language is not feasible.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> that is representative
+of the script, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no such language exists.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-script-iter-new"></a><h3>pango_script_iter_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *   pango_script_iter_new               (const char *text,
+                                                         int length);</pre>
+<p>
+Create a new <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a>, used to break a string of
+Unicode into runs by text. No copy is made of <em class="parameter"><code>text</code></em>, so
+the caller needs to make sure it remains valid until
+the iterator is freed with <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-free" title="pango_script_iter_free ()"><code class="function">pango_script_iter_free()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> a UTF-8 string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of <em class="parameter"><code>text</code></em>, or -1 if <em class="parameter"><code>text</code></em> is nul-terminated.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new script iterator, initialized
+ to point at the first range in the text, which should be
+ freed with <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-free" title="pango_script_iter_free ()"><code class="function">pango_script_iter_free()</code></a>. If the string is
+ empty, it will point at an empty range.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-script-iter-get-range"></a><h3>pango_script_iter_get_range ()</h3>
+<pre class="programlisting">void                pango_script_iter_get_range         (<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *iter,
+                                                         G_CONST_RETURN char **start,
+                                                         G_CONST_RETURN char **end,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> *script);</pre>
+<p>
+Gets information about the range to which <em class="parameter"><code>iter</code></em> currently points.
+The range is the set of locations p where *start &lt;= p &lt; *end.
+(That is, it doesn't include the character stored at *end)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start</code></em> :</span></p></td>
+<td> location to store start position of the range, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>end</code></em> :</span></p></td>
+<td> location to store end position of the range, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> location to store script for range, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-script-iter-next"></a><h3>pango_script_iter_next ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_script_iter_next              (<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *iter);</pre>
+<p>
+Advances a <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a> to the next range. If <em class="parameter"><code>iter</code></em>
+is already at the end, it is left unchanged and <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>
+is returned.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>iter</code></em> was successfully advanced.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-script-iter-free"></a><h3>pango_script_iter_free ()</h3>
+<pre class="programlisting">void                pango_script_iter_free              (<a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter">PangoScriptIter</a> *iter);</pre>
+<p>
+Frees a <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a> created with <a class="link" href="pango-Scripts-and-Languages.html#pango-script-iter-new" title="pango_script_iter_new ()"><code class="function">pango_script_iter_new()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScriptIter" title="PangoScriptIter"><span class="type">PangoScriptIter</span></a>
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoLanguage"></a><h3>PangoLanguage</h3>
+<pre class="programlisting">typedef struct _PangoLanguage PangoLanguage;</pre>
+<p>
+The <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> structure is used to
+represent a language.
+</p>
+<p>
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> pointers can be efficiently
+copied and compared with each other.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-LANGUAGE--CAPS"></a><h3>PANGO_TYPE_LANGUAGE</h3>
+<pre class="programlisting">#define PANGO_TYPE_LANGUAGE (pango_language_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-from-string"></a><h3>pango_language_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     pango_language_from_string          (const char *language);</pre>
+<p>
+Take a RFC-3066 format language tag as a string and convert it to a
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> pointer that can be efficiently copied (copy the
+pointer) and compared with other language tags (compare the
+pointer.)
+</p>
+<p>
+This function first canonicalizes the string by converting it to
+lowercase, mapping '_' to '-', and stripping all characters other
+than letters and '-'.
+</p>
+<p>
+Use <a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-default" title="pango_language_get_default ()"><code class="function">pango_language_get_default()</code></a> if you want to get the <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> for
+the current locale of the process.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a string representing a language tag, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> an opaque pointer to a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> structure, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if <em class="parameter"><code>language</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.  The returned pointer will be valid
+              forever after, and should not be freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-to-string"></a><h3>pango_language_to_string ()</h3>
+<pre class="programlisting">const char *        pango_language_to_string            (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Gets the RFC-3066 format string representing the given language tag.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a language tag.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a string representing the language tag.  This is owned by
+         Pango and should not be freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-matches"></a><h3>pango_language_matches ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_language_matches              (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         const char *range_list);</pre>
+<p>
+Checks if a language tag matches one of the elements in a list of
+language ranges. A language tag is considered to match a range
+in the list if the range is '*', the range is exactly the tag,
+or the range is a prefix of the tag, and the character after it
+in the tag is '-'.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a language tag (see <a class="link" href="pango-Scripts-and-Languages.html#pango-language-from-string" title="pango_language_from_string ()"><code class="function">pango_language_from_string()</code></a>),
+           <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> is allowed and matches nothing but '*'
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>range_list</code></em> :</span></p></td>
+<td> a list of language ranges, separated by ';', ':',
+  ',', or space characters.
+  Each element must either be '*', or a RFC 3066 language range
+  canonicalized as by <a class="link" href="pango-Scripts-and-Languages.html#pango-language-from-string" title="pango_language_from_string ()"><code class="function">pango_language_from_string()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if a match was found.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-includes-script"></a><h3>pango_language_includes_script ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_language_includes_script      (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script);</pre>
+<p>
+Determines if <em class="parameter"><code>script</code></em> is one of the scripts used to
+write <em class="parameter"><code>language</code></em>. The returned value is conservative;
+if nothing is known about the language tag <em class="parameter"><code>language</code></em>,
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> will be returned, since, as far as Pango knows,
+<em class="parameter"><code>script</code></em> might be used to write <em class="parameter"><code>language</code></em>.
+</p>
+<p>
+This routine is used in Pango's itemization process when
+determining if a supplied language tag is relevant to
+a particular section of text. It probably is not useful for
+applications in most circumstances.
+</p>
+<p>
+This function uses <a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-scripts" title="pango_language_get_scripts ()"><code class="function">pango_language_get_scripts()</code></a> internally.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>script</code></em> is one of the scripts used
+to write <em class="parameter"><code>language</code></em> or if nothing is known about <em class="parameter"><code>language</code></em>
+(including the case that <em class="parameter"><code>language</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>),
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> otherwise.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-get-scripts"></a><h3>pango_language_get_scripts ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> * pango_language_get_scripts          (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         int *num_scripts);</pre>
+<p>
+Determines the scripts used to to write <em class="parameter"><code>language</code></em>.
+If nothing is known about the language tag <em class="parameter"><code>language</code></em>,
+or if <em class="parameter"><code>language</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, then <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> is returned.
+The list of scripts returned starts with the script that the
+language uses most and continues to the one it uses least.
+</p>
+<p>
+The value <em class="parameter"><code>num_script</code></em> points at will be set to the number
+of scripts in the returned array (or zero if <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> is returned).
+</p>
+<p>
+Most languages use only one script for writing, but there are
+some that use two (Latin and Cyrillic for example), and a few
+use three (Japanese for example).  Applications should not make
+any assumptions on the maximum number of scripts returned
+though, except that it is positive if the return value is not
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, and it is a small number.
+</p>
+<p>
+The <a class="link" href="pango-Scripts-and-Languages.html#pango-language-includes-script" title="pango_language_includes_script ()"><code class="function">pango_language_includes_script()</code></a> function uses this function
+internally.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num_scripts</code></em> :</span></p></td>
+<td> location to return number of scripts, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> An array of <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> values, with the
+number of entries in the array stored in <em class="parameter"><code>num_scripts</code></em>, or
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if Pango does not have any information about this
+particular language tag (also the case if <em class="parameter"><code>language</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>).
+The returned array is owned by Pango and should not be modified
+or freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-get-default"></a><h3>pango_language_get_default ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     pango_language_get_default          (void);</pre>
+<p>
+Returns the <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> for the current locale of the process.
+Note that this can change over the life of an application.
+</p>
+<p>
+On Unix systems, this is the return value is derived from
+<code class="literal">setlocale(LC_CTYPE, NULL)</code>, and the user can
+affect this through the environment variables LC_ALL, LC_CTYPE or
+LANG (checked in that order). The locale string typically is in
+the form lang_COUNTRY, where lang is an ISO-639 language code, and
+COUNTRY is an ISO-3166 country code. For instance, sv_FI for
+Swedish as written in Finland or pt_BR for Portuguese as written in
+Brazil.
+</p>
+<p>
+On Windows, the C library does not use any such environment
+variables, and setting them won't affect the behavior of functions
+like <code class="function">ctime()</code>. The user sets the locale through the Regional Options
+in the Control Panel. The C library (in the <a
+href="http://library.gnome.org/devel/glib/unstable/glib-running.html#setlocale"
+><code class="function">setlocale()</code></a> function)
+does not use country and language codes, but country and language
+names spelled out in English.
+However, this function does check the above environment
+variables, and does return a Unix-style locale string based on
+either said environment variables or the thread's current locale.
+</p>
+<p>
+Your application should call <code class="literal">setlocale(LC_ALL, "");</code>
+for the user settings to take effect.  Gtk+ does this in its initialization
+functions automatically (by calling <a
+href="http://library.gnome.org/devel/gtk/unstable/gtk-General.html#gtk-set-locale"
+><code class="function">gtk_set_locale()</code></a>).
+See <code class="literal">man setlocale</code> for more details.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the default language as a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>, must not be
+              freed.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-language-get-sample-string"></a><h3>pango_language_get_sample_string ()</h3>
+<pre class="programlisting">const char *        pango_language_get_sample_string    (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Get a string that is representative of the characters needed to
+render a particular language.
+</p>
+<p>
+The sample text may be a pangram, but is not necessarily.  It is chosen to
+be demonstrative of normal text in the language, as well as exposing font
+feature requirements unique to the language.  It is suitable for use
+as sample text in a font selection dialog.
+</p>
+<p>
+If <em class="parameter"><code>language</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, the default language as found by
+<a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-default" title="pango_language_get_default ()"><code class="function">pango_language_get_default()</code></a> is used.
+</p>
+<p>
+If Pango does not have a sample string for <em class="parameter"><code>language</code></em>, the classic
+"The quick brown fox..." is returned.  This can be detected by
+comparing the returned pointer value to that returned for (non-existent)
+language code "xx".  That is, compare to:
+</p>
+<div class="informalexample"><pre class="programlisting">
+pango_language_get_sample_string (pango_language_from_string ("xx"))
+</pre></div>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the sample string. This value is owned by Pango
+  and should not be freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Tab-Stops.html b/docs/html/pango-Tab-Stops.html
new file mode 100755 (executable)
index 0000000..cfca63b
--- /dev/null
@@ -0,0 +1,545 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Tab Stops</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Text-Attributes.html" title="Text Attributes">
+<link rel="next" href="PangoMarkupFormat.html" title="Text Attribute Markup">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Text-Attributes.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="PangoMarkupFormat.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Tab-Stops.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Tab-Stops.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Tab-Stops"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Tab-Stops.top_of_page"></a>Tab Stops</span></h2>
+<p>Tab Stops — Structures for storing tab stops</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Tab-Stops.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+                    <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a>;
+#define             <a class="link" href="pango-Tab-Stops.html#PANGO-TYPE-TAB-ARRAY--CAPS" title="PANGO_TYPE_TAB_ARRAY">PANGO_TYPE_TAB_ARRAY</a>
+enum                <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a>;
+#define             <a class="link" href="pango-Tab-Stops.html#PANGO-TYPE-TAB-ALIGN--CAPS" title="PANGO_TYPE_TAB_ALIGN">PANGO_TYPE_TAB_ALIGN</a>
+<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *     <a class="link" href="pango-Tab-Stops.html#pango-tab-array-new" title="pango_tab_array_new ()">pango_tab_array_new</a>                 (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> initial_size,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> positions_in_pixels);
+<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *     <a class="link" href="pango-Tab-Stops.html#pango-tab-array-new-with-positions" title="pango_tab_array_new_with_positions ()">pango_tab_array_new_with_positions</a>  (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> size,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> positions_in_pixels,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> first_alignment,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> first_position,
+                                                         ...);
+<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *     <a class="link" href="pango-Tab-Stops.html#pango-tab-array-copy" title="pango_tab_array_copy ()">pango_tab_array_copy</a>                (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *src);
+void                <a class="link" href="pango-Tab-Stops.html#pango-tab-array-free" title="pango_tab_array_free ()">pango_tab_array_free</a>                (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="pango-Tab-Stops.html#pango-tab-array-get-size" title="pango_tab_array_get_size ()">pango_tab_array_get_size</a>            (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array);
+void                <a class="link" href="pango-Tab-Stops.html#pango-tab-array-resize" title="pango_tab_array_resize ()">pango_tab_array_resize</a>              (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> new_size);
+void                <a class="link" href="pango-Tab-Stops.html#pango-tab-array-set-tab" title="pango_tab_array_set_tab ()">pango_tab_array_set_tab</a>             (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> tab_index,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> alignment,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> location);
+void                <a class="link" href="pango-Tab-Stops.html#pango-tab-array-get-tab" title="pango_tab_array_get_tab ()">pango_tab_array_get_tab</a>             (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> tab_index,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> *alignment,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *location);
+void                <a class="link" href="pango-Tab-Stops.html#pango-tab-array-get-tabs" title="pango_tab_array_get_tabs ()">pango_tab_array_get_tabs</a>            (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> **alignments,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> **locations);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Tab-Stops.html#pango-tab-array-get-positions-in-pixels" title="pango_tab_array_get_positions_in_pixels ()">pango_tab_array_get_positions_in_pixels</a>
+                                                        (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Tab-Stops.description"></a><h2>Description</h2>
+<p>
+Functions in this section are used to deal with <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a> objects
+that can be used to set tab stop positions in a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Tab-Stops.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoTabArray"></a><h3>PangoTabArray</h3>
+<pre class="programlisting">typedef struct _PangoTabArray PangoTabArray;</pre>
+<p>
+A <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a> struct contains an array
+of tab stops. Each tab stop has an alignment and a position.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-TAB-ARRAY--CAPS"></a><h3>PANGO_TYPE_TAB_ARRAY</h3>
+<pre class="programlisting">#define PANGO_TYPE_TAB_ARRAY (pango_tab_array_get_type ())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoTabAlign"></a><h3>enum PangoTabAlign</h3>
+<pre class="programlisting">typedef enum
+{
+  PANGO_TAB_LEFT
+
+  /* These are not supported now, but may be in the
+   * future.
+   *
+   *  PANGO_TAB_RIGHT,
+   *  PANGO_TAB_CENTER,
+   *  PANGO_TAB_NUMERIC
+   */
+} PangoTabAlign;
+</pre>
+<p>
+A <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign"><span class="type">PangoTabAlign</span></a> specifies where a tab stop appears relative to the text.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><a name="PANGO-TAB-LEFT--CAPS"></a><span class="term"><code class="literal">PANGO_TAB_LEFT</code></span></p></td>
+<td>the tab stop appears to the left of the text.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-TAB-ALIGN--CAPS"></a><h3>PANGO_TYPE_TAB_ALIGN</h3>
+<pre class="programlisting">#define PANGO_TYPE_TAB_ALIGN (pango_tab_align_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign"><span class="type">PangoTabAlign</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-new"></a><h3>pango_tab_array_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *     pango_tab_array_new                 (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> initial_size,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> positions_in_pixels);</pre>
+<p>
+Creates an array of <em class="parameter"><code>initial_size</code></em> tab stops. Tab stops are specified in
+pixel units if <em class="parameter"><code>positions_in_pixels</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>, otherwise in Pango
+units. All stops are initially at position 0.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>initial_size</code></em> :</span></p></td>
+<td> Initial number of tab stops to allocate, can be 0
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>positions_in_pixels</code></em> :</span></p></td>
+<td> whether positions are in pixel units
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>, which should
+              be freed with <a class="link" href="pango-Tab-Stops.html#pango-tab-array-free" title="pango_tab_array_free ()"><code class="function">pango_tab_array_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-new-with-positions"></a><h3>pango_tab_array_new_with_positions ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *     pango_tab_array_new_with_positions  (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> size,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> positions_in_pixels,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> first_alignment,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> first_position,
+                                                         ...);</pre>
+<p>
+This is a convenience function that creates a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+and allows you to specify the alignment and position of each
+tab stop. You <span class="emphasis"><em>must</em></span> provide an alignment
+and position for <em class="parameter"><code>size</code></em> tab stops.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td> number of tab stops in the array
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>positions_in_pixels</code></em> :</span></p></td>
+<td> whether positions are in pixel units
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>first_alignment</code></em> :</span></p></td>
+<td> alignment of first tab stop
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>first_position</code></em> :</span></p></td>
+<td> position of first tab stop
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
+<td> additional alignment/position pairs
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>, which should
+              be freed with <a class="link" href="pango-Tab-Stops.html#pango-tab-array-free" title="pango_tab_array_free ()"><code class="function">pango_tab_array_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-copy"></a><h3>pango_tab_array_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *     pango_tab_array_copy                (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *src);</pre>
+<p>
+Copies a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td> <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a> to copy
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>, which should
+              be freed with <a class="link" href="pango-Tab-Stops.html#pango-tab-array-free" title="pango_tab_array_free ()"><code class="function">pango_tab_array_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-free"></a><h3>pango_tab_array_free ()</h3>
+<pre class="programlisting">void                pango_tab_array_free                (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array);</pre>
+<p>
+Frees a tab array and associated resources.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-get-size"></a><h3>pango_tab_array_get_size ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                pango_tab_array_get_size            (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array);</pre>
+<p>
+Gets the number of tab stops in <em class="parameter"><code>tab_array</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the number of tab stops in the array.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-resize"></a><h3>pango_tab_array_resize ()</h3>
+<pre class="programlisting">void                pango_tab_array_resize              (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> new_size);</pre>
+<p>
+Resizes a tab array. You must subsequently initialize any tabs that
+were added as a result of growing the array.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>new_size</code></em> :</span></p></td>
+<td> new size of the array
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-set-tab"></a><h3>pango_tab_array_set_tab ()</h3>
+<pre class="programlisting">void                pango_tab_array_set_tab             (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> tab_index,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> alignment,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> location);</pre>
+<p>
+Sets the alignment and location of a tab stop.
+<em class="parameter"><code>alignment</code></em> must always be <a class="link" href="pango-Tab-Stops.html#PANGO-TAB-LEFT--CAPS"><span class="type">PANGO_TAB_LEFT</span></a> in the current
+implementation.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_index</code></em> :</span></p></td>
+<td> the index of a tab stop
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>alignment</code></em> :</span></p></td>
+<td> tab alignment
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>location</code></em> :</span></p></td>
+<td> tab location in Pango units
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-get-tab"></a><h3>pango_tab_array_get_tab ()</h3>
+<pre class="programlisting">void                pango_tab_array_get_tab             (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> tab_index,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> *alignment,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *location);</pre>
+<p>
+Gets the alignment and position of a tab stop.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_index</code></em> :</span></p></td>
+<td> tab stop index
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>alignment</code></em> :</span></p></td>
+<td> location to store alignment, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>location</code></em> :</span></p></td>
+<td> location to store tab position, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-get-tabs"></a><h3>pango_tab_array_get_tabs ()</h3>
+<pre class="programlisting">void                pango_tab_array_get_tabs            (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array,
+                                                         <a class="link" href="pango-Tab-Stops.html#PangoTabAlign" title="enum PangoTabAlign">PangoTabAlign</a> **alignments,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> **locations);</pre>
+<p>
+If non-<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, <em class="parameter"><code>alignments</code></em> and <em class="parameter"><code>locations</code></em> are filled with allocated
+arrays of length <a class="link" href="pango-Tab-Stops.html#pango-tab-array-get-size" title="pango_tab_array_get_size ()"><code class="function">pango_tab_array_get_size()</code></a>. You must free the
+returned array.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>alignments</code></em> :</span></p></td>
+<td> location to store an array of tab stop alignments, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>locations</code></em> :</span></p></td>
+<td> location to store an array of tab positions, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-tab-array-get-positions-in-pixels"></a><h3>pango_tab_array_get_positions_in_pixels ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_tab_array_get_positions_in_pixels
+                                                        (<a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray">PangoTabArray</a> *tab_array);</pre>
+<p>
+Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the tab positions are in pixels, <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if they are
+in Pango units.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tab_array</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Tab-Stops.html#PangoTabArray" title="PangoTabArray"><span class="type">PangoTabArray</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> whether positions are in pixels.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Text-Attributes.html b/docs/html/pango-Text-Attributes.html
new file mode 100755 (executable)
index 0000000..95f2fcb
--- /dev/null
@@ -0,0 +1,2785 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Text Attributes</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Fonts.html" title="Fonts">
+<link rel="next" href="pango-Tab-Stops.html" title="Tab Stops">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Fonts.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Tab-Stops.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Text-Attributes.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Text-Attributes.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Text-Attributes"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Text-Attributes.top_of_page"></a>Text Attributes</span></h2>
+<p>Text Attributes — Font and other attributes for annotating text</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Text-Attributes.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+enum                <a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a>;
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-TYPE-ATTR-TYPE--CAPS" title="PANGO_TYPE_ATTR_TYPE">PANGO_TYPE_ATTR_TYPE</a>
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrClass" title="PangoAttrClass">PangoAttrClass</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a>;
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS" title="PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING">PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-INDEX-TO-TEXT-END--CAPS" title="PANGO_ATTR_INDEX_TO_TEXT_END">PANGO_ATTR_INDEX_TO_TEXT_END</a>
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrString" title="PangoAttrString">PangoAttrString</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrLanguage" title="PangoAttrLanguage">PangoAttrLanguage</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrColor" title="PangoAttrColor">PangoAttrColor</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt">PangoAttrInt</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrFloat" title="PangoAttrFloat">PangoAttrFloat</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrFontDesc" title="PangoAttrFontDesc">PangoAttrFontDesc</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape">PangoAttrShape</a>;
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrSize" title="PangoAttrSize">PangoAttrSize</a>;
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Text-Attributes.html#pango-parse-markup" title="pango_parse_markup ()">pango_parse_markup</a>                  (const char *markup_text,
+                                                         int length,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> accel_marker,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> **attr_list,
+                                                         char **text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> *accel_char,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"
+>GError</a> **error);
+<a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a>       <a class="link" href="pango-Text-Attributes.html#pango-attr-type-register" title="pango_attr_type_register ()">pango_attr_type_register</a>            (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);
+const char *        <a class="link" href="pango-Text-Attributes.html#pango-attr-type-get-name" title="pango_attr_type_get_name ()">pango_attr_type_get_name</a>            (<a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a> type);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attribute-init" title="pango_attribute_init ()">pango_attribute_init</a>                (<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr,
+                                                         const <a class="link" href="pango-Text-Attributes.html#PangoAttrClass" title="PangoAttrClass">PangoAttrClass</a> *klass);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attribute-copy" title="pango_attribute_copy ()">pango_attribute_copy</a>                (const <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Text-Attributes.html#pango-attribute-equal" title="pango_attribute_equal ()">pango_attribute_equal</a>               (const <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr1,
+                                                         const <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr2);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()">pango_attribute_destroy</a>             (<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);
+
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-language-new" title="pango_attr_language_new ()">pango_attr_language_new</a>             (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-family-new" title="pango_attr_family_new ()">pango_attr_family_new</a>               (const char *family);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-style-new" title="pango_attr_style_new ()">pango_attr_style_new</a>                (<a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a> style);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-variant-new" title="pango_attr_variant_new ()">pango_attr_variant_new</a>              (<a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a> variant);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-stretch-new" title="pango_attr_stretch_new ()">pango_attr_stretch_new</a>              (<a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a> stretch);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-weight-new" title="pango_attr_weight_new ()">pango_attr_weight_new</a>               (<a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a> weight);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-size-new" title="pango_attr_size_new ()">pango_attr_size_new</a>                 (int size);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-size-new-absolute" title="pango_attr_size_new_absolute ()">pango_attr_size_new_absolute</a>        (int size);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-font-desc-new" title="pango_attr_font_desc_new ()">pango_attr_font_desc_new</a>            (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-foreground-new" title="pango_attr_foreground_new ()">pango_attr_foreground_new</a>           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-background-new" title="pango_attr_background_new ()">pango_attr_background_new</a>           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-strikethrough-new" title="pango_attr_strikethrough_new ()">pango_attr_strikethrough_new</a>        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> strikethrough);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-strikethrough-color-new" title="pango_attr_strikethrough_color_new ()">pango_attr_strikethrough_color_new</a>  (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-underline-new" title="pango_attr_underline_new ()">pango_attr_underline_new</a>            (<a class="link" href="pango-Text-Attributes.html#PangoUnderline" title="enum PangoUnderline">PangoUnderline</a> underline);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-underline-color-new" title="pango_attr_underline_color_new ()">pango_attr_underline_color_new</a>      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);
+enum                <a class="link" href="pango-Text-Attributes.html#PangoUnderline" title="enum PangoUnderline">PangoUnderline</a>;
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-TYPE-UNDERLINE--CAPS" title="PANGO_TYPE_UNDERLINE">PANGO_TYPE_UNDERLINE</a>
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-shape-new" title="pango_attr_shape_new ()">pango_attr_shape_new</a>                (const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-shape-new-with-data" title="pango_attr_shape_new_with_data ()">pango_attr_shape_new_with_data</a>      (const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrDataCopyFunc" title="PangoAttrDataCopyFunc ()">PangoAttrDataCopyFunc</a> copy_func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> destroy_func);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>            (<a class="link" href="pango-Text-Attributes.html#PangoAttrDataCopyFunc" title="PangoAttrDataCopyFunc ()">*PangoAttrDataCopyFunc</a>)            (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"
+>gconstpointer</a> data);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-scale-new" title="pango_attr_scale_new ()">pango_attr_scale_new</a>                (double scale_factor);
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-XX-SMALL--CAPS" title="PANGO_SCALE_XX_SMALL">PANGO_SCALE_XX_SMALL</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-X-SMALL--CAPS" title="PANGO_SCALE_X_SMALL">PANGO_SCALE_X_SMALL</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-SMALL--CAPS" title="PANGO_SCALE_SMALL">PANGO_SCALE_SMALL</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-MEDIUM--CAPS" title="PANGO_SCALE_MEDIUM">PANGO_SCALE_MEDIUM</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-LARGE--CAPS" title="PANGO_SCALE_LARGE">PANGO_SCALE_LARGE</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-X-LARGE--CAPS" title="PANGO_SCALE_X_LARGE">PANGO_SCALE_X_LARGE</a>
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-SCALE-XX-LARGE--CAPS" title="PANGO_SCALE_XX_LARGE">PANGO_SCALE_XX_LARGE</a>
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-rise-new" title="pango_attr_rise_new ()">pango_attr_rise_new</a>                 (int rise);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-letter-spacing-new" title="pango_attr_letter_spacing_new ()">pango_attr_letter_spacing_new</a>       (int letter_spacing);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-fallback-new" title="pango_attr_fallback_new ()">pango_attr_fallback_new</a>             (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> enable_fallback);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-gravity-new" title="pango_attr_gravity_new ()">pango_attr_gravity_new</a>              (<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-gravity-hint-new" title="pango_attr_gravity_hint_new ()">pango_attr_gravity_hint_new</a>         (<a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);
+                    <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a>;
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-TYPE-COLOR--CAPS" title="PANGO_TYPE_COLOR">PANGO_TYPE_COLOR</a>
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Text-Attributes.html#pango-color-parse" title="pango_color_parse ()">pango_color_parse</a>                   (<a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color,
+                                                         const char *spec);
+<a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *        <a class="link" href="pango-Text-Attributes.html#pango-color-copy" title="pango_color_copy ()">pango_color_copy</a>                    (const <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *src);
+void                <a class="link" href="pango-Text-Attributes.html#pango-color-free" title="pango_color_free ()">pango_color_free</a>                    (<a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             <a class="link" href="pango-Text-Attributes.html#pango-color-to-string" title="pango_color_to_string ()">pango_color_to_string</a>               (const <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color);
+
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a>;
+#define             <a class="link" href="pango-Text-Attributes.html#PANGO-TYPE-ATTR-LIST--CAPS" title="PANGO_TYPE_ATTR_LIST">PANGO_TYPE_ATTR_LIST</a>
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     <a class="link" href="pango-Text-Attributes.html#pango-attr-list-new" title="pango_attr_list_new ()">pango_attr_list_new</a>                 (void);
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     <a class="link" href="pango-Text-Attributes.html#pango-attr-list-ref" title="pango_attr_list_ref ()">pango_attr_list_ref</a>                 (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-list-unref" title="pango_attr_list_unref ()">pango_attr_list_unref</a>               (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     <a class="link" href="pango-Text-Attributes.html#pango-attr-list-copy" title="pango_attr_list_copy ()">pango_attr_list_copy</a>                (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-list-insert" title="pango_attr_list_insert ()">pango_attr_list_insert</a>              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-list-insert-before" title="pango_attr_list_insert_before ()">pango_attr_list_insert_before</a>       (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-list-change" title="pango_attr_list_change ()">pango_attr_list_change</a>              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-list-splice" title="pango_attr_list_splice ()">pango_attr_list_splice</a>              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *other,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> pos,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> len);
+<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     <a class="link" href="pango-Text-Attributes.html#pango-attr-list-filter" title="pango_attr_list_filter ()">pango_attr_list_filter</a>              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrFilterFunc" title="PangoAttrFilterFunc ()">PangoAttrFilterFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            (<a class="link" href="pango-Text-Attributes.html#PangoAttrFilterFunc" title="PangoAttrFilterFunc ()">*PangoAttrFilterFunc</a>)              (<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attribute,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> * <a class="link" href="pango-Text-Attributes.html#pango-attr-list-get-iterator" title="pango_attr_list_get_iterator ()">pango_attr_list_get_iterator</a>        (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);
+                    <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a>;
+<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> * <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-copy" title="pango_attr_iterator_copy ()">pango_attr_iterator_copy</a>            (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-next" title="pango_attr_iterator_next ()">pango_attr_iterator_next</a>            (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-range" title="pango_attr_iterator_range ()">pango_attr_iterator_range</a>           (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *start,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *end);
+<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-get" title="pango_attr_iterator_get ()">pango_attr_iterator_get</a>             (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a> type);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-get-font" title="pango_attr_iterator_get_font ()">pango_attr_iterator_get_font</a>        (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> **language,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> **extra_attrs);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-get-attrs" title="pango_attr_iterator_get_attrs ()">pango_attr_iterator_get_attrs</a>       (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);
+void                <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-destroy" title="pango_attr_iterator_destroy ()">pango_attr_iterator_destroy</a>         (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Text-Attributes.description"></a><h2>Description</h2>
+<p>
+Attributed text is used in a number of places in Pango. It
+is used as the input to the itemization process and also when
+creating a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>. The data types and functions in
+this section are used to represent and manipulate sets
+of attributes applied to a portion of text.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Text-Attributes.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoAttrType"></a><h3>enum PangoAttrType</h3>
+<pre class="programlisting">typedef enum
+{
+  PANGO_ATTR_INVALID,           /* 0 is an invalid attribute type */
+  PANGO_ATTR_LANGUAGE,         /* PangoAttrLanguage */
+  PANGO_ATTR_FAMILY,           /* PangoAttrString */
+  PANGO_ATTR_STYLE,            /* PangoAttrInt */
+  PANGO_ATTR_WEIGHT,           /* PangoAttrInt */
+  PANGO_ATTR_VARIANT,          /* PangoAttrInt */
+  PANGO_ATTR_STRETCH,          /* PangoAttrInt */
+  PANGO_ATTR_SIZE,             /* PangoAttrSize */
+  PANGO_ATTR_FONT_DESC,                /* PangoAttrFontDesc */
+  PANGO_ATTR_FOREGROUND,       /* PangoAttrColor */
+  PANGO_ATTR_BACKGROUND,       /* PangoAttrColor */
+  PANGO_ATTR_UNDERLINE,                /* PangoAttrInt */
+  PANGO_ATTR_STRIKETHROUGH,    /* PangoAttrInt */
+  PANGO_ATTR_RISE,             /* PangoAttrInt */
+  PANGO_ATTR_SHAPE,            /* PangoAttrShape */
+  PANGO_ATTR_SCALE,             /* PangoAttrFloat */
+  PANGO_ATTR_FALLBACK,          /* PangoAttrInt */
+  PANGO_ATTR_LETTER_SPACING,    /* PangoAttrInt */
+  PANGO_ATTR_UNDERLINE_COLOR,  /* PangoAttrColor */
+  PANGO_ATTR_STRIKETHROUGH_COLOR,/* PangoAttrColor */
+  PANGO_ATTR_ABSOLUTE_SIZE,    /* PangoAttrSize */
+  PANGO_ATTR_GRAVITY,          /* PangoAttrInt */
+  PANGO_ATTR_GRAVITY_HINT      /* PangoAttrInt */
+} PangoAttrType;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType"><span class="type">PangoAttrType</span></a>
+distinguishes between different types of attributes. Along with the
+predefined values, it is possible to allocate additional values
+for custom attributes using <a class="link" href="pango-Text-Attributes.html#pango-attr-type-register" title="pango_attr_type_register ()"><code class="function">pango_attr_type_register()</code></a>. The predefined
+values are given below. The type of structure used to store the
+attribute is listed in parentheses after the description.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-ATTR-INVALID--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_INVALID</code></span></p></td>
+<td>does not happen
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-LANGUAGE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_LANGUAGE</code></span></p></td>
+<td>language (<a class="link" href="pango-Text-Attributes.html#PangoAttrLanguage" title="PangoAttrLanguage"><span class="type">PangoAttrLanguage</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-FAMILY--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_FAMILY</code></span></p></td>
+<td>font family name list (<a class="link" href="pango-Text-Attributes.html#PangoAttrString" title="PangoAttrString"><span class="type">PangoAttrString</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-STYLE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_STYLE</code></span></p></td>
+<td>font slant style (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-WEIGHT--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_WEIGHT</code></span></p></td>
+<td>font weight (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-VARIANT--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_VARIANT</code></span></p></td>
+<td>font variant (normal or small caps) (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-STRETCH--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_STRETCH</code></span></p></td>
+<td>font stretch (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-SIZE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_SIZE</code></span></p></td>
+<td>font size in points scaled by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-FONT-DESC--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_FONT_DESC</code></span></p></td>
+<td>font description (<a class="link" href="pango-Text-Attributes.html#PangoAttrFontDesc" title="PangoAttrFontDesc"><span class="type">PangoAttrFontDesc</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-FOREGROUND--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_FOREGROUND</code></span></p></td>
+<td>foreground color (<a class="link" href="pango-Text-Attributes.html#PangoAttrColor" title="PangoAttrColor"><span class="type">PangoAttrColor</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-BACKGROUND--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_BACKGROUND</code></span></p></td>
+<td>background color (<a class="link" href="pango-Text-Attributes.html#PangoAttrColor" title="PangoAttrColor"><span class="type">PangoAttrColor</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-UNDERLINE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_UNDERLINE</code></span></p></td>
+<td>whether the text has an underline (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-STRIKETHROUGH--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_STRIKETHROUGH</code></span></p></td>
+<td>whether the text is struck-through (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-RISE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_RISE</code></span></p></td>
+<td>baseline displacement (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-SHAPE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_SHAPE</code></span></p></td>
+<td>shape (<a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape"><span class="type">PangoAttrShape</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-SCALE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_SCALE</code></span></p></td>
+<td>font size scale factor (<a class="link" href="pango-Text-Attributes.html#PangoAttrFloat" title="PangoAttrFloat"><span class="type">PangoAttrFloat</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-FALLBACK--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_FALLBACK</code></span></p></td>
+<td>whether fallback is enabled (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-LETTER-SPACING--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_LETTER_SPACING</code></span></p></td>
+<td>letter spacing (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-UNDERLINE-COLOR--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_UNDERLINE_COLOR</code></span></p></td>
+<td>underline color (<a class="link" href="pango-Text-Attributes.html#PangoAttrColor" title="PangoAttrColor"><span class="type">PangoAttrColor</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-STRIKETHROUGH-COLOR--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_STRIKETHROUGH_COLOR</code></span></p></td>
+<td>strikethrough color (<a class="link" href="pango-Text-Attributes.html#PangoAttrColor" title="PangoAttrColor"><span class="type">PangoAttrColor</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-ABSOLUTE-SIZE--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_ABSOLUTE_SIZE</code></span></p></td>
+<td>font size in pixels scaled by <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-GRAVITY--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_GRAVITY</code></span></p></td>
+<td>base text gravity (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-ATTR-GRAVITY-HINT--CAPS"></a><span class="term"><code class="literal">PANGO_ATTR_GRAVITY_HINT</code></span></p></td>
+<td>gravity hint (<a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a>)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-ATTR-TYPE--CAPS"></a><h3>PANGO_TYPE_ATTR_TYPE</h3>
+<pre class="programlisting">#define PANGO_TYPE_ATTR_TYPE (pango_attr_type_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType"><span class="type">PangoAttrType</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrClass"></a><h3>PangoAttrClass</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttrType type;
+  PangoAttribute * (*copy) (const PangoAttribute *attr);
+  void             (*destroy) (PangoAttribute *attr);
+  gboolean         (*equal) (const PangoAttribute *attr1, const PangoAttribute *attr2);
+} PangoAttrClass;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrClass" title="PangoAttrClass"><span class="type">PangoAttrClass</span></a> structure stores the type and operations for
+a particular type of attribute. The functions in this structure should
+not be called directly. Instead, one should use the wrapper functions
+provided for <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a> <em class="structfield"><code>type</code></em>;</span></p></td>
+<td>the type ID for this attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>copy</code></em> ()</span></p></td>
+<td>function to duplicate an attribute of this type (see <a class="link" href="pango-Text-Attributes.html#pango-attribute-copy" title="pango_attribute_copy ()"><code class="function">pango_attribute_copy()</code></a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>destroy</code></em> ()</span></p></td>
+<td>function to free an attribute of this type (see <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>equal</code></em> ()</span></p></td>
+<td>function to check two attributes of this type for equality (see <a class="link" href="pango-Text-Attributes.html#pango-attribute-equal" title="pango_attribute_equal ()"><code class="function">pango_attribute_equal()</code></a>)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttribute"></a><h3>PangoAttribute</h3>
+<pre class="programlisting">typedef struct {
+  const PangoAttrClass *klass;
+  guint start_index;   /* in bytes */
+  guint end_index;     /* in bytes. The character at this index is not included */
+} PangoAttribute;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a> structure represents the common portions of all
+attributes. Particular types of attributes include this structure
+as their initial portion. The common portion of the attribute holds
+the range to which the value in the type-specific part of the attribute
+applies and should be initialized using <a class="link" href="pango-Text-Attributes.html#pango-attribute-init" title="pango_attribute_init ()"><code class="function">pango_attribute_init()</code></a>.
+By default an attribute will have an all-inclusive range of [0,<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Limits-of-Basic-Types.html#G-MAXUINT--CAPS"
+><code class="literal">G_MAXUINT</code></a>].
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">const <a class="link" href="pango-Text-Attributes.html#PangoAttrClass" title="PangoAttrClass">PangoAttrClass</a> *<em class="structfield"><code>klass</code></em>;</span></p></td>
+<td>the class structure holding information about the type of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>start_index</code></em>;</span></p></td>
+<td>the start index of the range (in bytes).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>end_index</code></em>;</span></p></td>
+<td>end index of the range (in bytes). The character at this index
+       is not included in the range.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS"></a><h3>PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</h3>
+<pre class="programlisting">#define PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING       0
+</pre>
+<p>
+This value can be used to set the start_index member of a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+such that the attribute covers from the beginning of the text.
+</p>
+Since: 1.24</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS"></a><h3>PANGO_ATTR_INDEX_TO_TEXT_END</h3>
+<pre class="programlisting">#define PANGO_ATTR_INDEX_TO_TEXT_END               G_MAXUINT
+</pre>
+<p>
+This value can be used to set the end_index member of a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+such that the attribute covers to the end of the text.
+</p>
+Since: 1.24</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrString"></a><h3>PangoAttrString</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  char *value;
+} PangoAttrString;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrString" title="PangoAttrString"><span class="type">PangoAttrString</span></a> structure is used to represent attributes with
+a string value.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term">char *<em class="structfield"><code>value</code></em>;</span></p></td>
+<td>the string which is the value of the attribute
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrLanguage"></a><h3>PangoAttrLanguage</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  PangoLanguage *value;
+} PangoAttrLanguage;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrLanguage" title="PangoAttrLanguage"><span class="type">PangoAttrLanguage</span></a> structure is used to represent attributes that
+are languages.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *<em class="structfield"><code>value</code></em>;</span></p></td>
+<td>the <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> which is the value of the attribute
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrColor"></a><h3>PangoAttrColor</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  PangoColor color;
+} PangoAttrColor;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrColor" title="PangoAttrColor"><span class="type">PangoAttrColor</span></a> structure is used to represent attributes that
+are colors.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> <em class="structfield"><code>color</code></em>;</span></p></td>
+<td>the <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a> which is the value of the attribute
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrInt"></a><h3>PangoAttrInt</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  int value;
+} PangoAttrInt;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrInt" title="PangoAttrInt"><span class="type">PangoAttrInt</span></a> structure is used to represent attributes with
+an integer or enumeration value.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>value</code></em>;</span></p></td>
+<td>the value of the attribute
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrFloat"></a><h3>PangoAttrFloat</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  double value;
+} PangoAttrFloat;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrFloat" title="PangoAttrFloat"><span class="type">PangoAttrFloat</span></a> structure is used to represent attributes with
+a float or double value.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term">double <em class="structfield"><code>value</code></em>;</span></p></td>
+<td>the value of the attribute
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrFontDesc"></a><h3>PangoAttrFontDesc</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  PangoFontDescription *desc;
+} PangoAttrFontDesc;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrFontDesc" title="PangoAttrFontDesc"><span class="type">PangoAttrFontDesc</span></a> structure is used to store an attribute that
+sets all aspects of the font description at once.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *<em class="structfield"><code>desc</code></em>;</span></p></td>
+<td>the font description which is the value of this attribute
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrShape"></a><h3>PangoAttrShape</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  PangoRectangle ink_rect;
+  PangoRectangle logical_rect;
+
+  gpointer              data;
+  PangoAttrDataCopyFunc copy_func;
+  GDestroyNotify        destroy_func;
+} PangoAttrShape;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape"><span class="type">PangoAttrShape</span></a> structure is used to represent attributes which
+impose shape restrictions.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> <em class="structfield"><code>ink_rect</code></em>;</span></p></td>
+<td>the ink rectangle to restrict to
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> <em class="structfield"><code>logical_rect</code></em>;</span></p></td>
+<td>the logical rectangle to restrict to
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> <em class="structfield"><code>data</code></em>;</span></p></td>
+<td>user data set (see <a class="link" href="pango-Text-Attributes.html#pango-attr-shape-new-with-data" title="pango_attr_shape_new_with_data ()"><code class="function">pango_attr_shape_new_with_data()</code></a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttrDataCopyFunc" title="PangoAttrDataCopyFunc ()">PangoAttrDataCopyFunc</a> <em class="structfield"><code>copy_func</code></em>;</span></p></td>
+<td>copy function for the user data
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> <em class="structfield"><code>destroy_func</code></em>;</span></p></td>
+<td>destroy function for the user data
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrSize"></a><h3>PangoAttrSize</h3>
+<pre class="programlisting">typedef struct {
+  PangoAttribute attr;
+  int size;
+  guint absolute : 1;
+} PangoAttrSize;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrShape" title="PangoAttrShape"><span class="type">PangoAttrShape</span></a> structure is used to represent attributes which
+set font size.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> <em class="structfield"><code>attr</code></em>;</span></p></td>
+<td>the common portion of the attribute
+</td>
+</tr>
+<tr>
+<td><p><span class="term">int <em class="structfield"><code>size</code></em>;</span></p></td>
+<td>size of font, in units of 1/<a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a> of a point (for
+  <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SIZE--CAPS"><code class="literal">PANGO_ATTR_SIZE</code></a>) or of a device uni (for <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-ABSOLUTE-SIZE--CAPS"><code class="literal">PANGO_ATTR_ABSOLUTE_SIZE</code></a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>absolute</code></em> : 1;</span></p></td>
+<td>whether the font size is in device units or points.
+   This field is only present for compatibility with Pango-1.8.0
+   (<a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-ABSOLUTE-SIZE--CAPS"><code class="literal">PANGO_ATTR_ABSOLUTE_SIZE</code></a> was added in 1.8.1); and always will
+   be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> for <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-SIZE--CAPS"><code class="literal">PANGO_ATTR_SIZE</code></a> and <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> for <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-ABSOLUTE-SIZE--CAPS"><code class="literal">PANGO_ATTR_ABSOLUTE_SIZE</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-parse-markup"></a><h3>pango_parse_markup ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_parse_markup                  (const char *markup_text,
+                                                         int length,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> accel_marker,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> **attr_list,
+                                                         char **text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> *accel_char,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"
+>GError</a> **error);</pre>
+<p>
+Parses marked-up text (see
+<a class="link" href="PangoMarkupFormat.html" title="Text Attribute Markup">markup format</a>) to create
+a plain-text string and an attribute list.
+</p>
+<p>
+If <em class="parameter"><code>accel_marker</code></em> is nonzero, the given character will mark the
+character following it as an accelerator. For example, <em class="parameter"><code>accel_marker</code></em>
+might be an ampersand or underscore. All characters marked
+as an accelerator will receive a <a class="link" href="pango-Text-Attributes.html#PANGO-UNDERLINE-LOW--CAPS"><code class="literal">PANGO_UNDERLINE_LOW</code></a> attribute,
+and the first character so marked will be returned in <em class="parameter"><code>accel_char</code></em>.
+Two <em class="parameter"><code>accel_marker</code></em> characters following each other produce a single
+literal <em class="parameter"><code>accel_marker</code></em> character.
+</p>
+<p>
+If any error happens, none of the output arguments are touched except
+for <em class="parameter"><code>error</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>markup_text</code></em> :</span></p></td>
+<td> markup to parse (see <a class="link" href="PangoMarkupFormat.html" title="Text Attribute Markup">markup format</a>)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of <em class="parameter"><code>markup_text</code></em>, or -1 if nul-terminated
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>accel_marker</code></em> :</span></p></td>
+<td> character that precedes an accelerator, or 0 for none
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr_list</code></em> :</span></p></td>
+<td> address of return location for a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> address of return location for text with tags stripped, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>accel_char</code></em> :</span></p></td>
+<td> address of return location for accelerator char, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td> address of return location for errors, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if <em class="parameter"><code>error</code></em> is set, otherwise <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-type-register"></a><h3>pango_attr_type_register ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a>       pango_attr_type_register            (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *name);</pre>
+<p>
+Allocate a new attribute type ID.  The attribute type name can be accessed
+later by using <a class="link" href="pango-Text-Attributes.html#pango-attr-type-get-name" title="pango_attr_type_get_name ()"><code class="function">pango_attr_type_get_name()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td> an identifier for the type
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new type ID.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-type-get-name"></a><h3>pango_attr_type_get_name ()</h3>
+<pre class="programlisting">const char *        pango_attr_type_get_name            (<a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a> type);</pre>
+<p>
+Fetches the attribute type name passed in when registering the type using
+<a class="link" href="pango-Text-Attributes.html#pango-attr-type-register" title="pango_attr_type_register ()"><code class="function">pango_attr_type_register()</code></a>.
+</p>
+<p>
+The returned value is an interned string (see <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#g-intern-string"
+><code class="function">g_intern_string()</code></a> for what
+that means) that should not be modified or freed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td> an attribute type ID to fetch the name for
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the type ID name (which may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>), or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>type</code></em> is
+a built-in Pango attribute type or invalid. 
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.22</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attribute-init"></a><h3>pango_attribute_init ()</h3>
+<pre class="programlisting">void                pango_attribute_init                (<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr,
+                                                         const <a class="link" href="pango-Text-Attributes.html#PangoAttrClass" title="PangoAttrClass">PangoAttrClass</a> *klass);</pre>
+<p>
+Initializes <em class="parameter"><code>attr</code></em>'s klass to <em class="parameter"><code>klass</code></em>,
+it's start_index to <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS" title="PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING"><code class="literal">PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</code></a>
+and end_index to <a class="link" href="pango-Text-Attributes.html#PANGO-ATTR-INDEX-TO-TEXT-END--CAPS" title="PANGO_ATTR_INDEX_TO_TEXT_END"><code class="literal">PANGO_ATTR_INDEX_TO_TEXT_END</code></a>
+such that the attribute applies
+to the entire text by default.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td>
+<td> a <span class="type">PangoAttributeClass</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.20</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attribute-copy"></a><h3>pango_attribute_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attribute_copy                (const <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);</pre>
+<p>
+Make a copy of an attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attribute-equal"></a><h3>pango_attribute_equal ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_attribute_equal               (const <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr1,
+                                                         const <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr2);</pre>
+<p>
+Compare two attributes for equality. This compares only the
+actual value of the two attributes and not the ranges that the
+attributes apply to.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr1</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr2</code></em> :</span></p></td>
+<td> another <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the two attributes have the same value.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attribute-destroy"></a><h3>pango_attribute_destroy ()</h3>
+<pre class="programlisting">void                pango_attribute_destroy             (<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);</pre>
+<p>
+Destroy a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a> and free all associated memory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-language-new"></a><h3>pango_attr_language_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_language_new             (<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Create a new language tag attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> language tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-family-new"></a><h3>pango_attr_family_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_family_new               (const char *family);</pre>
+<p>
+Create a new font family attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>family</code></em> :</span></p></td>
+<td> the family or comma separated list of families
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-style-new"></a><h3>pango_attr_style_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_style_new                (<a class="link" href="pango-Fonts.html#PangoStyle" title="enum PangoStyle">PangoStyle</a> style);</pre>
+<p>
+Create a new font slant style attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>style</code></em> :</span></p></td>
+<td> the slant style
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-variant-new"></a><h3>pango_attr_variant_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_variant_new              (<a class="link" href="pango-Fonts.html#PangoVariant" title="enum PangoVariant">PangoVariant</a> variant);</pre>
+<p>
+Create a new font variant attribute (normal or small caps)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>variant</code></em> :</span></p></td>
+<td> the variant
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-stretch-new"></a><h3>pango_attr_stretch_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_stretch_new              (<a class="link" href="pango-Fonts.html#PangoStretch" title="enum PangoStretch">PangoStretch</a> stretch);</pre>
+<p>
+Create a new font stretch attribute</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>stretch</code></em> :</span></p></td>
+<td> the stretch
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-weight-new"></a><h3>pango_attr_weight_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_weight_new               (<a class="link" href="pango-Fonts.html#PangoWeight" title="enum PangoWeight">PangoWeight</a> weight);</pre>
+<p>
+Create a new font weight attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>weight</code></em> :</span></p></td>
+<td> the weight
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-size-new"></a><h3>pango_attr_size_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_size_new                 (int size);</pre>
+<p>
+Create a new font-size attribute in fractional points.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td> the font size, in <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>ths of a point.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-size-new-absolute"></a><h3>pango_attr_size_new_absolute ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_size_new_absolute        (int size);</pre>
+<p>
+Create a new font-size attribute in device units.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>size</code></em> :</span></p></td>
+<td> the font size, in <a class="link" href="pango-Glyph-Storage.html#PANGO-SCALE--CAPS" title="PANGO_SCALE"><code class="literal">PANGO_SCALE</code></a>ths of a device unit.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-font-desc-new"></a><h3>pango_attr_font_desc_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_font_desc_new            (const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Create a new font description attribute. This attribute
+allows setting family, style, weight, variant, stretch,
+and size simultaneously.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> the font description
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>  the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-foreground-new"></a><h3>pango_attr_foreground_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_foreground_new           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);</pre>
+<p>
+Create a new foreground color attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>red</code></em> :</span></p></td>
+<td> the red value (ranging from 0 to 65535)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>green</code></em> :</span></p></td>
+<td> the green value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>blue</code></em> :</span></p></td>
+<td> the blue value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-background-new"></a><h3>pango_attr_background_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_background_new           (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);</pre>
+<p>
+Create a new background color attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>red</code></em> :</span></p></td>
+<td> the red value (ranging from 0 to 65535)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>green</code></em> :</span></p></td>
+<td> the green value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>blue</code></em> :</span></p></td>
+<td> the blue value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-strikethrough-new"></a><h3>pango_attr_strikethrough_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_strikethrough_new        (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> strikethrough);</pre>
+<p>
+Create a new strike-through attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>strikethrough</code></em> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the text should be struck-through.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-strikethrough-color-new"></a><h3>pango_attr_strikethrough_color_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_strikethrough_color_new  (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);</pre>
+<p>
+Create a new strikethrough color attribute. This attribute
+modifies the color of strikethrough lines. If not set, strikethrough
+lines will use the foreground color.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>red</code></em> :</span></p></td>
+<td> the red value (ranging from 0 to 65535)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>green</code></em> :</span></p></td>
+<td> the green value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>blue</code></em> :</span></p></td>
+<td> the blue value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-underline-new"></a><h3>pango_attr_underline_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_underline_new            (<a class="link" href="pango-Text-Attributes.html#PangoUnderline" title="enum PangoUnderline">PangoUnderline</a> underline);</pre>
+<p>
+Create a new underline-style attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>underline</code></em> :</span></p></td>
+<td> the underline style.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-underline-color-new"></a><h3>pango_attr_underline_color_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_underline_color_new      (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> red,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> green,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> blue);</pre>
+<p>
+Create a new underline color attribute. This attribute
+modifies the color of underlines. If not set, underlines
+will use the foreground color.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>red</code></em> :</span></p></td>
+<td> the red value (ranging from 0 to 65535)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>green</code></em> :</span></p></td>
+<td> the green value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>blue</code></em> :</span></p></td>
+<td> the blue value
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoUnderline"></a><h3>enum PangoUnderline</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_UNDERLINE_NONE,
+  PANGO_UNDERLINE_SINGLE,
+  PANGO_UNDERLINE_DOUBLE,
+  PANGO_UNDERLINE_LOW,
+  PANGO_UNDERLINE_ERROR
+} PangoUnderline;
+</pre>
+<p>
+the <a class="link" href="pango-Text-Attributes.html#PangoUnderline" title="enum PangoUnderline"><span class="type">PangoUnderline</span></a> enumeration is used to specify
+whether text should be underlined, and if so, the type
+of underlining.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-UNDERLINE-NONE--CAPS"></a><span class="term"><code class="literal">PANGO_UNDERLINE_NONE</code></span></p></td>
+<td>no underline should be drawn
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-UNDERLINE-SINGLE--CAPS"></a><span class="term"><code class="literal">PANGO_UNDERLINE_SINGLE</code></span></p></td>
+<td>a single underline should be drawn
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-UNDERLINE-DOUBLE--CAPS"></a><span class="term"><code class="literal">PANGO_UNDERLINE_DOUBLE</code></span></p></td>
+<td>a double underline should be drawn
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-UNDERLINE-LOW--CAPS"></a><span class="term"><code class="literal">PANGO_UNDERLINE_LOW</code></span></p></td>
+<td>a single underline should be drawn at a position
+                      beneath the ink extents of the text being
+                      underlined. This should be used only for underlining
+                      single characters, such as for keyboard
+                      accelerators. <a class="link" href="pango-Text-Attributes.html#PANGO-UNDERLINE-SINGLE--CAPS"><code class="literal">PANGO_UNDERLINE_SINGLE</code></a> should
+                      be used for extended portions of text.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-UNDERLINE-ERROR--CAPS"></a><span class="term"><code class="literal">PANGO_UNDERLINE_ERROR</code></span></p></td>
+<td>a wavy underline should be drawn below.
+                      This underline is typically used to indicate
+                      an error such as a possilble mispelling; in some
+                      cases a contrasting color may automatically
+                      be used. This type of underlining is available
+                      since Pango 1.4.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-UNDERLINE--CAPS"></a><h3>PANGO_TYPE_UNDERLINE</h3>
+<pre class="programlisting">#define PANGO_TYPE_UNDERLINE (pango_underline_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Text-Attributes.html#PangoUnderline" title="enum PangoUnderline"><span class="type">PangoUnderline</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-shape-new"></a><h3>pango_attr_shape_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_shape_new                (const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect);</pre>
+<p>
+Create a new shape attribute. A shape is used to impose a
+particular ink and logical rectangle on the result of shaping a
+particular glyph. This might be used, for instance, for
+embedding a picture or a widget inside a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td>     ink rectangle to assign to each character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> logical rectangle to assign to each character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-shape-new-with-data"></a><h3>pango_attr_shape_new_with_data ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_shape_new_with_data      (const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *ink_rect,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoRectangle" title="PangoRectangle">PangoRectangle</a> *logical_rect,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrDataCopyFunc" title="PangoAttrDataCopyFunc ()">PangoAttrDataCopyFunc</a> copy_func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> destroy_func);</pre>
+<p>
+Like <a class="link" href="pango-Text-Attributes.html#pango-attr-shape-new" title="pango_attr_shape_new ()"><code class="function">pango_attr_shape_new()</code></a>, but a user data pointer is also
+provided; this pointer can be accessed when later
+rendering the glyph.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ink_rect</code></em> :</span></p></td>
+<td>     ink rectangle to assign to each character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_rect</code></em> :</span></p></td>
+<td> logical rectangle to assign to each character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>         user data pointer
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>copy_func</code></em> :</span></p></td>
+<td>    function to copy <em class="parameter"><code>data</code></em> when the attribute
+               is copied. If <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, <em class="parameter"><code>data</code></em> is simply copied
+               as a pointer.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>destroy_func</code></em> :</span></p></td>
+<td> function to free <em class="parameter"><code>data</code></em> when the attribute
+               is freed, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrDataCopyFunc"></a><h3>PangoAttrDataCopyFunc ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>            (*PangoAttrDataCopyFunc)            (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gconstpointer"
+>gconstpointer</a> data);</pre>
+<p>
+A copy function passed to attribute new functions that take
+user data.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>the user data
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new copy of <em class="parameter"><code>data</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-scale-new"></a><h3>pango_attr_scale_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_scale_new                (double scale_factor);</pre>
+<p>
+Create a new font size scale attribute. The base font for the
+affected text will have its size multiplied by <em class="parameter"><code>scale_factor</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>scale_factor</code></em> :</span></p></td>
+<td> factor to scale the font
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-XX-SMALL--CAPS"></a><h3>PANGO_SCALE_XX_SMALL</h3>
+<pre class="programlisting">#define PANGO_SCALE_XX_SMALL ((double)0.5787037037037)
+</pre>
+<p>
+The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-X-SMALL--CAPS"></a><h3>PANGO_SCALE_X_SMALL</h3>
+<pre class="programlisting">#define PANGO_SCALE_X_SMALL  ((double)0.6444444444444)
+</pre>
+<p>
+The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-SMALL--CAPS"></a><h3>PANGO_SCALE_SMALL</h3>
+<pre class="programlisting">#define PANGO_SCALE_SMALL    ((double)0.8333333333333)
+</pre>
+<p>
+The scale factor for one shrinking step (1 / 1.2).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-MEDIUM--CAPS"></a><h3>PANGO_SCALE_MEDIUM</h3>
+<pre class="programlisting">#define PANGO_SCALE_MEDIUM   ((double)1.0)
+</pre>
+<p>
+The scale factor for normal size (1.0).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-LARGE--CAPS"></a><h3>PANGO_SCALE_LARGE</h3>
+<pre class="programlisting">#define PANGO_SCALE_LARGE    ((double)1.2)
+</pre>
+<p>
+The scale factor for one magnification step (1.2).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-X-LARGE--CAPS"></a><h3>PANGO_SCALE_X_LARGE</h3>
+<pre class="programlisting">#define PANGO_SCALE_X_LARGE  ((double)1.4399999999999)
+</pre>
+<p>
+The scale factor for two magnification steps (1.2 * 1.2).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-SCALE-XX-LARGE--CAPS"></a><h3>PANGO_SCALE_XX_LARGE</h3>
+<pre class="programlisting">#define PANGO_SCALE_XX_LARGE ((double)1.728)
+</pre>
+<p>
+The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-rise-new"></a><h3>pango_attr_rise_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_rise_new                 (int rise);</pre>
+<p>
+Create a new baseline displacement attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rise</code></em> :</span></p></td>
+<td> the amount that the text should be displaced vertically,
+       in Pango units. Positive values displace the text upwards.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-letter-spacing-new"></a><h3>pango_attr_letter_spacing_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_letter_spacing_new       (int letter_spacing);</pre>
+<p>
+Create a new letter-spacing attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>letter_spacing</code></em> :</span></p></td>
+<td> amount of extra space to add between graphemes
+  of the text, in Pango units.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-fallback-new"></a><h3>pango_attr_fallback_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_fallback_new             (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> enable_fallback);</pre>
+<p>
+Create a new font fallback attribute.
+</p>
+<p>
+If fallback is disabled, characters will only be used from the
+closest matching font on the system. No fallback will be done to
+other fonts on the system that might contain the characters in the
+text.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>enable_fallback</code></em> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if we should fall back on other fonts
+                  for characters the active font is missing.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-gravity-new"></a><h3>pango_attr_gravity_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_gravity_new              (<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);</pre>
+<p>
+Create a new gravity attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gravity</code></em> :</span></p></td>
+<td> the gravity value; should not be <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-gravity-hint-new"></a><h3>pango_attr_gravity_hint_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_gravity_hint_new         (<a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);</pre>
+<p>
+Create a new gravity hint attribute.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hint</code></em> :</span></p></td>
+<td> the gravity hint value.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>, which should be
+              freed with <a class="link" href="pango-Text-Attributes.html#pango-attribute-destroy" title="pango_attribute_destroy ()"><code class="function">pango_attribute_destroy()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoColor"></a><h3>PangoColor</h3>
+<pre class="programlisting">typedef struct {
+  guint16 red;
+  guint16 green;
+  guint16 blue;
+} PangoColor;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a> structure is used to
+represent a color in an uncalibrated RGB color-space.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> <em class="structfield"><code>red</code></em>;</span></p></td>
+<td>The red component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> <em class="structfield"><code>green</code></em>;</span></p></td>
+<td>The green component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint16"
+>guint16</a> <em class="structfield"><code>blue</code></em>;</span></p></td>
+<td>The blue component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-COLOR--CAPS"></a><h3>PANGO_TYPE_COLOR</h3>
+<pre class="programlisting">#define PANGO_TYPE_COLOR pango_color_get_type ()
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-color-parse"></a><h3>pango_color_parse ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_color_parse                   (<a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color,
+                                                         const char *spec);</pre>
+<p>
+Fill in the fields of a color from a string specification. The
+string can either one of a large set of standard names. (Taken
+from the X11 <code class="filename">rgb.txt</code> file), or it can be a hex value in the
+form '#rgb' '#rrggbb' '#rrrgggbbb' or '#rrrrggggbbbb' where
+'r', 'g' and 'b' are hex digits of the red, green, and blue
+components of the color, respectively. (White in the four
+forms is '#fff' '#ffffff' '#fffffffff' and '#ffffffffffff')</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a> structure in which to store the result, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spec</code></em> :</span></p></td>
+<td> a string specifying the new color
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if parsing of the specifier succeeded,
+  otherwise false.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-color-copy"></a><h3>pango_color_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *        pango_color_copy                    (const <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *src);</pre>
+<p>
+Creates a copy of <em class="parameter"><code>src</code></em>, which should be freed with
+<a class="link" href="pango-Text-Attributes.html#pango-color-free" title="pango_color_free ()"><code class="function">pango_color_free()</code></a>. Primarily used by language bindings,
+not that useful otherwise (since colors can just be copied
+by assignment in C).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td> color to copy, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a>, which should
+              be freed with <a class="link" href="pango-Text-Attributes.html#pango-color-free" title="pango_color_free ()"><code class="function">pango_color_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if <em class="parameter"><code>src</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-color-free"></a><h3>pango_color_free ()</h3>
+<pre class="programlisting">void                pango_color_free                    (<a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color);</pre>
+<p>
+Frees a color allocated by <a class="link" href="pango-Text-Attributes.html#pango-color-copy" title="pango_color_copy ()"><code class="function">pango_color_copy()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td> an allocated <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-color-to-string"></a><h3>pango_color_to_string ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *             pango_color_to_string               (const <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color);</pre>
+<p>
+Returns a textual specification of <em class="parameter"><code>color</code></em> in the hexadecimal form
+<code class="literal">#rrrrggggbbbb</code>, where <code class="literal">r</code>,
+<code class="literal">g</code> and <code class="literal">b</code> are hex digits representing
+the red, green, and blue components respectively.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor"><span class="type">PangoColor</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a newly-allocated text string that must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrList"></a><h3>PangoAttrList</h3>
+<pre class="programlisting">typedef struct _PangoAttrList PangoAttrList;</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a> structure represents a list of attributes
+that apply to a section of text. The attributes are, in general,
+allowed to overlap in an arbitrary fashion, however, if the
+attributes are manipulated only through <a class="link" href="pango-Text-Attributes.html#pango-attr-list-change" title="pango_attr_list_change ()"><code class="function">pango_attr_list_change()</code></a>,
+the overlap between properties will meet stricter criteria.
+</p>
+<p>
+Since the <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a> structure is stored as a linear list,
+it is not suitable for storing attributes for large amounts
+of text. In general, you should not use a single <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+for more than one paragraph of text.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-ATTR-LIST--CAPS"></a><h3>PANGO_TYPE_ATTR_LIST</h3>
+<pre class="programlisting">#define PANGO_TYPE_ATTR_LIST pango_attr_list_get_type ()
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-new"></a><h3>pango_attr_list_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     pango_attr_list_new                 (void);</pre>
+<p>
+Create a new empty attribute list with a reference count of one.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, which should
+              be freed with <a class="link" href="pango-Text-Attributes.html#pango-attr-list-unref" title="pango_attr_list_unref ()"><code class="function">pango_attr_list_unref()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-ref"></a><h3>pango_attr_list_ref ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     pango_attr_list_ref                 (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);</pre>
+<p>
+Increase the reference count of the given attribute list by one.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The attribute list passed in
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.10</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-unref"></a><h3>pango_attr_list_unref ()</h3>
+<pre class="programlisting">void                pango_attr_list_unref               (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);</pre>
+<p>
+Decrease the reference count of the given attribute list by one.
+If the result is zero, free the attribute list and the attributes
+it contains.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-copy"></a><h3>pango_attr_list_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     pango_attr_list_copy                (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);</pre>
+<p>
+Copy <em class="parameter"><code>list</code></em> and return an identical new list.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>, with a
+              reference count of one, which should
+              be freed with <a class="link" href="pango-Text-Attributes.html#pango-attr-list-unref" title="pango_attr_list_unref ()"><code class="function">pango_attr_list_unref()</code></a>.
+              Returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>list</code></em> was <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-insert"></a><h3>pango_attr_list_insert ()</h3>
+<pre class="programlisting">void                pango_attr_list_insert              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);</pre>
+<p>
+Insert the given attribute into the <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>. It will
+be inserted after all other attributes with a matching
+<em class="parameter"><code>start_index</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td> the attribute to insert. Ownership of this value is
+       assumed by the list.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-insert-before"></a><h3>pango_attr_list_insert_before ()</h3>
+<pre class="programlisting">void                pango_attr_list_insert_before       (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);</pre>
+<p>
+Insert the given attribute into the <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>. It will
+be inserted before all other attributes with a matching
+<em class="parameter"><code>start_index</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td> the attribute to insert. Ownership of this value is
+       assumed by the list.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-change"></a><h3>pango_attr_list_change ()</h3>
+<pre class="programlisting">void                pango_attr_list_change              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attr);</pre>
+<p>
+Insert the given attribute into the <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>. It will
+replace any attributes of the same type on that segment
+and be merged with any adjoining attributes that are identical.
+</p>
+<p>
+This function is slower than <a class="link" href="pango-Text-Attributes.html#pango-attr-list-insert" title="pango_attr_list_insert ()"><code class="function">pango_attr_list_insert()</code></a> for
+creating a attribute list in order (potentially much slower
+for large lists). However, <a class="link" href="pango-Text-Attributes.html#pango-attr-list-insert" title="pango_attr_list_insert ()"><code class="function">pango_attr_list_insert()</code></a> is not
+suitable for continually changing a set of attributes
+since it never removes or combines existing attributes.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attr</code></em> :</span></p></td>
+<td> the attribute to insert. Ownership of this value is
+       assumed by the list.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-splice"></a><h3>pango_attr_list_splice ()</h3>
+<pre class="programlisting">void                pango_attr_list_splice              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *other,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> pos,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> len);</pre>
+<p>
+This function opens up a hole in <em class="parameter"><code>list</code></em>, fills it in with attributes from
+the left, and then merges <em class="parameter"><code>other</code></em> on top of the hole.
+</p>
+<p>
+This operation is equivalent to stretching every attribute
+that applies at position <em class="parameter"><code>pos</code></em> in <em class="parameter"><code>list</code></em> by an amount <em class="parameter"><code>len</code></em>,
+and then calling <a class="link" href="pango-Text-Attributes.html#pango-attr-list-change" title="pango_attr_list_change ()"><code class="function">pango_attr_list_change()</code></a> with a copy
+of each attribute in <em class="parameter"><code>other</code></em> in sequence (offset in position by <em class="parameter"><code>pos</code></em>).
+</p>
+<p>
+This operation proves useful for, for instance, inserting
+a pre-edit string in the middle of an edit buffer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>other</code></em> :</span></p></td>
+<td> another <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pos</code></em> :</span></p></td>
+<td> the position in <em class="parameter"><code>list</code></em> at which to insert <em class="parameter"><code>other</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td> the length of the spliced segment. (Note that this
+      must be specified since the attributes in <em class="parameter"><code>other</code></em>
+      may only be present at some subsection of this range)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-filter"></a><h3>pango_attr_list_filter ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *     pango_attr_list_filter              (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrFilterFunc" title="PangoAttrFilterFunc ()">PangoAttrFilterFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+Given a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a> and callback function, removes any elements
+of <em class="parameter"><code>list</code></em> for which <em class="parameter"><code>func</code></em> returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> and inserts them into
+a new list.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td> callback function; returns <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if an attribute
+       should be filtered out.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> Data to be passed to <em class="parameter"><code>func</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a> or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if
+ no attributes of the given types were found.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrFilterFunc"></a><h3>PangoAttrFilterFunc ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            (*PangoAttrFilterFunc)              (<a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *attribute,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+A predicate function used by <a class="link" href="pango-Text-Attributes.html#pango-attr-list-filter" title="pango_attr_list_filter ()"><code class="function">pango_attr_list_filter()</code></a>
+to filter out a subset of attributes for a list.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attribute</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>callback data passed to <a class="link" href="pango-Text-Attributes.html#pango-attr-list-filter" title="pango_attr_list_filter ()"><code class="function">pango_attr_list_filter()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>%TRUE if the attribute should be filtered out
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-list-get-iterator"></a><h3>pango_attr_list_get_iterator ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> * pango_attr_list_get_iterator        (<a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *list);</pre>
+<p>
+Create a iterator initialized to the beginning of the list.
+<em class="parameter"><code>list</code></em> must not be modified until this iterator is freed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>, which should
+              be freed with <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-destroy" title="pango_attr_iterator_destroy ()"><code class="function">pango_attr_iterator_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAttrIterator"></a><h3>PangoAttrIterator</h3>
+<pre class="programlisting">typedef struct _PangoAttrIterator PangoAttrIterator;</pre>
+<p>
+The <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a> structure is used to represent an
+iterator through a <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a>. A new iterator is created
+with <a class="link" href="pango-Text-Attributes.html#pango-attr-list-get-iterator" title="pango_attr_list_get_iterator ()"><code class="function">pango_attr_list_get_iterator()</code></a>. Once the iterator
+is created, it can be advanced through the style changes
+in the text using <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-next" title="pango_attr_iterator_next ()"><code class="function">pango_attr_iterator_next()</code></a>. At each
+style change, the range of the current style segment and the
+attributes currently in effect can be queried.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-copy"></a><h3>pango_attr_iterator_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> * pango_attr_iterator_copy            (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);</pre>
+<p>
+Copy a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>, which should
+              be freed with <a class="link" href="pango-Text-Attributes.html#pango-attr-iterator-destroy" title="pango_attr_iterator_destroy ()"><code class="function">pango_attr_iterator_destroy()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-next"></a><h3>pango_attr_iterator_next ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_attr_iterator_next            (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);</pre>
+<p>
+Advance the iterator until the next change of style.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a> if the iterator is at the end of the list, otherwise <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-range"></a><h3>pango_attr_iterator_range ()</h3>
+<pre class="programlisting">void                pango_attr_iterator_range           (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *start,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *end);</pre>
+<p>
+Get the range of the current segment. Note that the
+stored return values are signed, not unsigned like
+the values in <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>. To deal with this API
+oversight, stored return values that wouldn't fit into
+a signed integer are clamped to <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Limits-of-Basic-Types.html#G-MAXINT--CAPS"
+><code class="literal">G_MAXINT</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start</code></em> :</span></p></td>
+<td> location to store the start of the range
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>end</code></em> :</span></p></td>
+<td> location to store the end of the range
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-get"></a><h3>pango_attr_iterator_get ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute">PangoAttribute</a> *    pango_attr_iterator_get             (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrType" title="enum PangoAttrType">PangoAttrType</a> type);</pre>
+<p>
+Find the current attribute of a particular type at the iterator
+location. When multiple attributes of the same type overlap,
+the attribute whose range starts closest to the current location
+is used.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td> the type of attribute to find.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the current attribute of the given type, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+              if no attribute of that type applies to the current
+              location.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-get-font"></a><h3>pango_attr_iterator_get_font ()</h3>
+<pre class="programlisting">void                pango_attr_iterator_get_font        (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> **language,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> **extra_attrs);</pre>
+<p>
+Get the font and other attributes at the current iterator position.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> to fill in with the current values.
+       The family name in this structure will be set using
+       <a class="link" href="pango-Fonts.html#pango-font-description-set-family-static" title="pango_font_description_set_family_static ()"><code class="function">pango_font_description_set_family_static()</code></a> using values from
+       an attribute in the <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList"><span class="type">PangoAttrList</span></a> associated with the iterator,
+       so if you plan to keep it around, you must call:
+       <code class="literal">pango_font_description_set_family (desc, pango_font_description_get_family (desc))</code>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> if non-<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, location to store language tag for item, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+           if none is found.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extra_attrs</code></em> :</span></p></td>
+<td>element type Pango.Attribute): (transfer full. <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=element%20type%20Pango.Attribute):%20(transfer"><span class="acronym">element type Pango.Attribute): (transfer</span></a> full. </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-get-attrs"></a><h3>pango_attr_iterator_get_attrs ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *            pango_attr_iterator_get_attrs       (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);</pre>
+<p>
+Gets a list of all attributes at the current position of the
+iterator.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>element-type Pango.Attribute): (transfer full. <a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=element-type%20Pango.Attribute):%20(transfer"><span class="acronym">element-type Pango.Attribute): (transfer</span></a> full. </td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-attr-iterator-destroy"></a><h3>pango_attr_iterator_destroy ()</h3>
+<pre class="programlisting">void                pango_attr_iterator_destroy         (<a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *iterator);</pre>
+<p>
+Destroy a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a> and free all associated memory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>iterator</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator"><span class="type">PangoAttrIterator</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Text-Processing.html b/docs/html/pango-Text-Processing.html
new file mode 100755 (executable)
index 0000000..6065f85
--- /dev/null
@@ -0,0 +1,1736 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Rendering</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango.html" title="Basic Pango Interfaces">
+<link rel="next" href="pango-Glyph-Storage.html" title="Glyph Storage">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Glyph-Storage.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Text-Processing.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Text-Processing.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-Text-Processing.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Text-Processing"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Text-Processing.top_of_page"></a>Rendering</span></h2>
+<p>Rendering — Functions to run the rendering pipeline</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Text-Processing.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoContext"></a><pre class="synopsis">
+                    <a class="link" href="pango-Text-Processing.html#PangoContext-struct" title="PangoContext">PangoContext</a>;
+                    <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a>;
+                    <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a>;
+#define             <a class="link" href="pango-Text-Processing.html#PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS" title="PANGO_ANALYSIS_FLAG_CENTERED_BASELINE">PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</a>
+#define             <a class="link" href="pango-Text-Processing.html#PANGO-TYPE-DIRECTION--CAPS" title="PANGO_TYPE_DIRECTION">PANGO_TYPE_DIRECTION</a>
+
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()">pango_itemize</a>                       (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const char *text,
+                                                         int start_index,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *attrs,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *cached_iter);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="pango-Text-Processing.html#pango-itemize-with-base-dir" title="pango_itemize_with_base_dir ()">pango_itemize_with_base_dir</a>         (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a> base_dir,
+                                                         const char *text,
+                                                         int start_index,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *attrs,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *cached_iter);
+void                <a class="link" href="pango-Text-Processing.html#pango-item-free" title="pango_item_free ()">pango_item_free</a>                     (<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *item);
+<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *         <a class="link" href="pango-Text-Processing.html#pango-item-copy" title="pango_item_copy ()">pango_item_copy</a>                     (<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *item);
+<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *         <a class="link" href="pango-Text-Processing.html#pango-item-new" title="pango_item_new ()">pango_item_new</a>                      (void);
+<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *         <a class="link" href="pango-Text-Processing.html#pango-item-split" title="pango_item_split ()">pango_item_split</a>                    (<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *orig,
+                                                         int split_index,
+                                                         int split_offset);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             <a class="link" href="pango-Text-Processing.html#pango-reorder-items" title="pango_reorder_items ()">pango_reorder_items</a>                 (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *logical_items);
+
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Text-Processing.html#pango-context-new" title="pango_context_new ()">pango_context_new</a>                   (void);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-font-map" title="pango_context_set_font_map ()">pango_context_set_font_map</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *font_map);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Text-Processing.html#pango-context-get-font-map" title="pango_context_get_font_map ()">pango_context_get_font_map</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Text-Processing.html#pango-context-get-font-description" title="pango_context_get_font_description ()">pango_context_get_font_description</a>
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-font-description" title="pango_context_set_font_description ()">pango_context_set_font_description</a>  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     <a class="link" href="pango-Text-Processing.html#pango-context-get-language" title="pango_context_get_language ()">pango_context_get_language</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-language" title="pango_context_set_language ()">pango_context_set_language</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>      <a class="link" href="pango-Text-Processing.html#pango-context-get-base-dir" title="pango_context_get_base_dir ()">pango_context_get_base_dir</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-base-dir" title="pango_context_set_base_dir ()">pango_context_set_base_dir</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a> direction);
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        <a class="link" href="pango-Text-Processing.html#pango-context-get-base-gravity" title="pango_context_get_base_gravity ()">pango_context_get_base_gravity</a>      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-base-gravity" title="pango_context_set_base_gravity ()">pango_context_set_base_gravity</a>      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        <a class="link" href="pango-Text-Processing.html#pango-context-get-gravity" title="pango_context_get_gravity ()">pango_context_get_gravity</a>           (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+<a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a>    <a class="link" href="pango-Text-Processing.html#pango-context-get-gravity-hint" title="pango_context_get_gravity_hint ()">pango_context_get_gravity_hint</a>      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-gravity-hint" title="pango_context_set_gravity_hint ()">pango_context_set_gravity_hint</a>      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);
+const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * <a class="link" href="pango-Text-Processing.html#pango-context-get-matrix" title="pango_context_get_matrix ()">pango_context_get_matrix</a>            (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-set-matrix" title="pango_context_set_matrix ()">pango_context_set_matrix</a>            (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);
+<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         <a class="link" href="pango-Text-Processing.html#pango-context-load-font" title="pango_context_load_font ()">pango_context_load_font</a>             (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);
+<a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *      <a class="link" href="pango-Text-Processing.html#pango-context-load-fontset" title="pango_context_load_fontset ()">pango_context_load_fontset</a>          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+<a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  <a class="link" href="pango-Text-Processing.html#pango-context-get-metrics" title="pango_context_get_metrics ()">pango_context_get_metrics</a>           (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);
+void                <a class="link" href="pango-Text-Processing.html#pango-context-list-families" title="pango_context_list_families ()">pango_context_list_families</a>         (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> ***families,
+                                                         int *n_families);
+
+
+void                <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()">pango_break</a>                         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *attrs,
+                                                         int attrs_len);
+void                <a class="link" href="pango-Text-Processing.html#pango-get-log-attrs" title="pango_get_log_attrs ()">pango_get_log_attrs</a>                 (const char *text,
+                                                         int length,
+                                                         int level,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *log_attrs,
+                                                         int attrs_len);
+void                <a class="link" href="pango-Text-Processing.html#pango-find-paragraph-boundary" title="pango_find_paragraph_boundary ()">pango_find_paragraph_boundary</a>       (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> length,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *paragraph_delimiter_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *next_paragraph_start);
+void                <a class="link" href="pango-Text-Processing.html#pango-default-break" title="pango_default_break ()">pango_default_break</a>                 (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *attrs,
+                                                         int attrs_len);
+                    <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a>;
+
+void                <a class="link" href="pango-Text-Processing.html#pango-shape" title="pango_shape ()">pango_shape</a>                         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> length,
+                                                         const <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Text-Processing.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----PangoContext
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Text-Processing.description"></a><h2>Description</h2>
+<p>
+The Pango rendering pipeline takes a string of
+Unicode characters and converts it into glyphs.
+The functions described in this section accomplish
+various steps of this process.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Text-Processing.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoContext-struct"></a><h3>PangoContext</h3>
+<pre class="programlisting">typedef struct _PangoContext PangoContext;</pre>
+<p>
+The <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> structure stores global information
+used to control the itemization process.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoItem"></a><h3>PangoItem</h3>
+<pre class="programlisting">typedef struct {
+  gint offset;
+  gint length;
+  gint num_chars;
+  PangoAnalysis analysis;
+} PangoItem;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structure stores information about
+a segment of text. It contains the following fields:
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>offset</code></em>;</span></p></td>
+<td>the offset of the segment from the beginning of the
+         string in bytes.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>length</code></em>;</span></p></td>
+<td>the length of the segment in bytes.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> <em class="structfield"><code>num_chars</code></em>;</span></p></td>
+<td>the length of the segment in characters.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> <em class="structfield"><code>analysis</code></em>;</span></p></td>
+<td>the properties of the segment.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoAnalysis"></a><h3>PangoAnalysis</h3>
+<pre class="programlisting">typedef struct {
+  PangoEngineShape *shape_engine;
+  PangoEngineLang  *lang_engine;
+  PangoFont *font;
+
+  guint8 level;
+  guint8 gravity; /* PangoGravity */
+  guint8 flags;
+
+  guint8 script; /* PangoScript */
+  PangoLanguage *language;
+
+  GSList *extra_attrs;
+} PangoAnalysis;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis"><span class="type">PangoAnalysis</span></a> structure stores information about
+the properties of a segment of text. It has the following
+fields:
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a class="link" href="PangoEngineShape.html" title="PangoEngineShape">PangoEngineShape</a> *<em class="structfield"><code>shape_engine</code></em>;</span></p></td>
+<td>the engine for doing rendering-system-dependent processing.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="PangoEngineLang.html" title="PangoEngineLang">PangoEngineLang</a> *<em class="structfield"><code>lang_engine</code></em>;</span></p></td>
+<td>the engine for doing rendering-system-independent processing.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *<em class="structfield"><code>font</code></em>;</span></p></td>
+<td>the font for this segment.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"
+>guint8</a> <em class="structfield"><code>level</code></em>;</span></p></td>
+<td>the bidirectional level for this segment.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"
+>guint8</a> <em class="structfield"><code>gravity</code></em>;</span></p></td>
+<td>the glyph orientation for this segment (A <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a>).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"
+>guint8</a> <em class="structfield"><code>flags</code></em>;</span></p></td>
+<td>boolean flags for this segment (currently only one) (Since: 1.16).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint8"
+>guint8</a> <em class="structfield"><code>script</code></em>;</span></p></td>
+<td>the detected script for this segment (A <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a>) (Since: 1.18).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *<em class="structfield"><code>language</code></em>;</span></p></td>
+<td>the detected language for this segment.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Singly-Linked-Lists.html#GSList"
+>GSList</a> *<em class="structfield"><code>extra_attrs</code></em>;</span></p></td>
+<td>extra attributes for this segment.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS"></a><h3>PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</h3>
+<pre class="programlisting">#define PANGO_ANALYSIS_FLAG_CENTERED_BASELINE (1 &lt;&lt; 0)
+</pre>
+<p>
+Whether the segment should be shifted to center around the baseline.
+Used in vertical writing directions mostly.
+Since: 1.16
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-TYPE-DIRECTION--CAPS"></a><h3>PANGO_TYPE_DIRECTION</h3>
+<pre class="programlisting">#define PANGO_TYPE_DIRECTION (pango_direction_get_type())
+</pre>
+<p>
+The <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+><span class="type">GObject</span></a> type for <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection"><span class="type">PangoDirection</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-itemize"></a><h3>pango_itemize ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             pango_itemize                       (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const char *text,
+                                                         int start_index,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *attrs,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *cached_iter);</pre>
+<p>
+Breaks a piece of text into segments with consistent
+directional level and shaping engine. Each byte of <em class="parameter"><code>text</code></em> will
+be contained in exactly one of the items in the returned list;
+the generated list of items will be in logical order (the start
+offsets of the items are ascending).
+</p>
+<p>
+<em class="parameter"><code>cached_iter</code></em> should be an iterator over <em class="parameter"><code>attrs</code></em> currently positioned at a
+range before or containing <em class="parameter"><code>start_index</code></em>; <em class="parameter"><code>cached_iter</code></em> will be advanced to
+the range covering the position just after <em class="parameter"><code>start_index</code></em> + <em class="parameter"><code>length</code></em>.
+(i.e. if itemizing in a loop, just keep passing in the same <em class="parameter"><code>cached_iter</code></em>).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td>   a structure holding information that affects
+              the itemization process.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text to itemize.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start_index</code></em> :</span></p></td>
+<td> first byte in <em class="parameter"><code>text</code></em> to process
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    the number of bytes (not characters) to process
+            after <em class="parameter"><code>start_index</code></em>.
+            This must be &gt;= 0.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs</code></em> :</span></p></td>
+<td>     the set of attributes that apply to <em class="parameter"><code>text</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cached_iter</code></em> :</span></p></td>
+<td>      Cached attribute iterator, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+><span class="type">GList</span></a> of <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structures.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-itemize-with-base-dir"></a><h3>pango_itemize_with_base_dir ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             pango_itemize_with_base_dir         (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a> base_dir,
+                                                         const char *text,
+                                                         int start_index,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrList" title="PangoAttrList">PangoAttrList</a> *attrs,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoAttrIterator" title="PangoAttrIterator">PangoAttrIterator</a> *cached_iter);</pre>
+<p>
+Like <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>, but the base direction to use when
+computing bidirectional levels (see <a class="link" href="pango-Text-Processing.html#pango-context-set-base-dir" title="pango_context_set_base_dir ()"><code class="function">pango_context_set_base_dir()</code></a>),
+is specified explicitly rather than gotten from the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td>   a structure holding information that affects
+              the itemization process.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>base_dir</code></em> :</span></p></td>
+<td>  base direction to use for bidirectional processing
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text to itemize.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start_index</code></em> :</span></p></td>
+<td> first byte in <em class="parameter"><code>text</code></em> to process
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    the number of bytes (not characters) to process
+            after <em class="parameter"><code>start_index</code></em>.
+            This must be &gt;= 0.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs</code></em> :</span></p></td>
+<td>     the set of attributes that apply to <em class="parameter"><code>text</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cached_iter</code></em> :</span></p></td>
+<td>      Cached attribute iterator, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+><span class="type">GList</span></a> of <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structures.  The items should be
+freed using <a class="link" href="pango-Text-Processing.html#pango-item-free" title="pango_item_free ()"><code class="function">pango_item_free()</code></a> probably in combination with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-foreach"
+><code class="function">g_list_foreach()</code></a>,
+and the list itself using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#g-list-free"
+><code class="function">g_list_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-item-free"></a><h3>pango_item_free ()</h3>
+<pre class="programlisting">void                pango_item_free                     (<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *item);</pre>
+<p>
+Free a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> and all associated memory.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-item-copy"></a><h3>pango_item_copy ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *         pango_item_copy                     (<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *item);</pre>
+<p>
+Copy an existing <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>item</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>, may be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>, which should
+              be freed with <a class="link" href="pango-Text-Processing.html#pango-item-free" title="pango_item_free ()"><code class="function">pango_item_free()</code></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if
+              <em class="parameter"><code>item</code></em> was NULL.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-item-new"></a><h3>pango_item_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *         pango_item_new                      (void);</pre>
+<p>
+Creates a new <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structure initialized to default values.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>, which should
+              be freed with <a class="link" href="pango-Text-Processing.html#pango-item-free" title="pango_item_free ()"><code class="function">pango_item_free()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-item-split"></a><h3>pango_item_split ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *         pango_item_split                    (<a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem">PangoItem</a> *orig,
+                                                         int split_index,
+                                                         int split_offset);</pre>
+<p>
+Modifies <em class="parameter"><code>orig</code></em> to cover only the text after <em class="parameter"><code>split_index</code></em>, and
+returns a new item that covers the text before <em class="parameter"><code>split_index</code></em> that
+used to be in <em class="parameter"><code>orig</code></em>. You can think of <em class="parameter"><code>split_index</code></em> as the length of
+the returned item. <em class="parameter"><code>split_index</code></em> may not be 0, and it may not be
+greater than or equal to the length of <em class="parameter"><code>orig</code></em> (that is, there must
+be at least one byte assigned to each item, you can't create a
+zero-length item). <em class="parameter"><code>split_offset</code></em> is the length of the first item in
+chars, and must be provided because the text used to generate the
+item isn't available, so <a class="link" href="pango-Text-Processing.html#pango-item-split" title="pango_item_split ()"><code class="function">pango_item_split()</code></a> can't count the char
+length of the split items itself.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>orig</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>split_index</code></em> :</span></p></td>
+<td> byte index of position to split item, relative to the start of the item
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>split_offset</code></em> :</span></p></td>
+<td> number of chars between start of <em class="parameter"><code>orig</code></em> and <em class="parameter"><code>split_index</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> new item representing text before <em class="parameter"><code>split_index</code></em>, which
+              should be freed with <a class="link" href="pango-Text-Processing.html#pango-item-free" title="pango_item_free ()"><code class="function">pango_item_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-reorder-items"></a><h3>pango_reorder_items ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *             pango_reorder_items                 (<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+>GList</a> *logical_items);</pre>
+<p>
+From a list of items in logical order and the associated
+directional levels, produce a list in visual order.
+The original list is unmodified.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logical_items</code></em> :</span></p></td>
+<td>  a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+><span class="type">GList</span></a> of <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> in logical order.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"
+><span class="type">GList</span></a> of <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a> structures in visual order.
+
+(Please open a bug if you use this function.
+ It is not a particularly convenient interface, and the code
+ is duplicated elsewhere in Pango for that reason.)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-new"></a><h3>pango_context_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_context_new                   (void);</pre>
+<p>
+Creates a new <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> initialized to default values.
+</p>
+<p>
+This function is not particularly useful as it should always
+be followed by a <a class="link" href="pango-Text-Processing.html#pango-context-set-font-map" title="pango_context_set_font_map ()"><code class="function">pango_context_set_font_map()</code></a> call, and the
+function <a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> does these two steps
+together and hence users are recommended to use that.
+</p>
+<p>
+If you are using Pango as part of a higher-level system,
+that system may have it's own way of create a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+For instance, the GTK+ toolkit has, among others,
+<a
+href="http://library.gnome.org/devel/gdk/unstable/gdk-Pango-Interaction.html#gdk-pango-context-get-for-screen"
+><code class="function">gdk_pango_context_get_for_screen()</code></a>, and
+<a
+href="http://library.gnome.org/devel/gtk/unstable/GtkWidget.html#gtk-widget-get-pango-context"
+><code class="function">gtk_widget_get_pango_context()</code></a>.  Use those instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>, which should
+              be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-font-map"></a><h3>pango_context_set_font_map ()</h3>
+<pre class="programlisting">void                pango_context_set_font_map          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *font_map);</pre>
+<p>
+Sets the font map to be searched when fonts are looked-up in this context.
+This is only for internal use by Pango backends, a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> obtained
+via one of the recommended methods should already have a suitable font map.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font_map</code></em> :</span></p></td>
+<td> the <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> to set.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-font-map"></a><h3>pango_context_get_font_map ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_context_get_font_map          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Gets the <span class="type">PangoFontmap</span> used to look up fonts for this context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the font map for the <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>. This value
+ is owned by Pango and should not be unreferenced.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-font-description"></a><h3>pango_context_get_font_description ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_context_get_font_description
+                                                        (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieve the default font description for the context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a pointer to the context's default font description.
+              This value must not be modified or freed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-font-description"></a><h3>pango_context_set_font_description ()</h3>
+<pre class="programlisting">void                pango_context_set_font_description  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Set the default font description for the context</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> the new pango font description
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-language"></a><h3>pango_context_get_language ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *     pango_context_get_language          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieves the global language tag for the context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the global language tag.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-language"></a><h3>pango_context_set_language ()</h3>
+<pre class="programlisting">void                pango_context_set_language          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Sets the global language tag for the context.  The default language
+for the locale of the running process can be found using
+<a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-default" title="pango_language_get_default ()"><code class="function">pango_language_get_default()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> the new language tag.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-base-dir"></a><h3>pango_context_get_base_dir ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a>      pango_context_get_base_dir          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieves the base direction for the context. See
+<a class="link" href="pango-Text-Processing.html#pango-context-set-base-dir" title="pango_context_set_base_dir ()"><code class="function">pango_context_set_base_dir()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the base direction for the context.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-base-dir"></a><h3>pango_context_set_base_dir ()</h3>
+<pre class="programlisting">void                pango_context_set_base_dir          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Bidirectional-Text.html#PangoDirection" title="enum PangoDirection">PangoDirection</a> direction);</pre>
+<p>
+Sets the base direction for the context.
+</p>
+<p>
+The base direction is used in applying the Unicode bidirectional
+algorithm; if the <em class="parameter"><code>direction</code></em> is <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-LTR--CAPS"><code class="literal">PANGO_DIRECTION_LTR</code></a> or
+<a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-RTL--CAPS"><code class="literal">PANGO_DIRECTION_RTL</code></a>, then the value will be used as the paragraph
+direction in the Unicode bidirectional algorithm.  A value of
+<a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-WEAK-LTR--CAPS"><code class="literal">PANGO_DIRECTION_WEAK_LTR</code></a> or <a class="link" href="pango-Bidirectional-Text.html#PANGO-DIRECTION-WEAK-RTL--CAPS"><code class="literal">PANGO_DIRECTION_WEAK_RTL</code></a> is used only
+for paragraphs that do not contain any strong characters themselves.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>direction</code></em> :</span></p></td>
+<td> the new base direction
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-base-gravity"></a><h3>pango_context_get_base_gravity ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        pango_context_get_base_gravity      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieves the base gravity for the context. See
+<a class="link" href="pango-Text-Processing.html#pango-context-set-base-gravity" title="pango_context_set_base_gravity ()"><code class="function">pango_context_set_base_gravity()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the base gravity for the context.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-base-gravity"></a><h3>pango_context_set_base_gravity ()</h3>
+<pre class="programlisting">void                pango_context_set_base_gravity      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);</pre>
+<p>
+Sets the base gravity for the context.
+</p>
+<p>
+The base gravity is used in laying vertical text out.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gravity</code></em> :</span></p></td>
+<td> the new base gravity
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-gravity"></a><h3>pango_context_get_gravity ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        pango_context_get_gravity           (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieves the gravity for the context. This is similar to
+<a class="link" href="pango-Text-Processing.html#pango-context-get-base-gravity" title="pango_context_get_base_gravity ()"><code class="function">pango_context_get_base_gravity()</code></a>, except for when the base gravity
+is <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a> for which <a class="link" href="pango-Vertical-Text.html#pango-gravity-get-for-matrix" title="pango_gravity_get_for_matrix ()"><code class="function">pango_gravity_get_for_matrix()</code></a> is used
+to return the gravity from the current context matrix.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the resolved gravity for the context.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-gravity-hint"></a><h3>pango_context_get_gravity_hint ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a>    pango_context_get_gravity_hint      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Retrieves the gravity hint for the context. See
+<a class="link" href="pango-Text-Processing.html#pango-context-set-gravity-hint" title="pango_context_set_gravity_hint ()"><code class="function">pango_context_set_gravity_hint()</code></a> for details.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the gravity hint for the context.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-gravity-hint"></a><h3>pango_context_set_gravity_hint ()</h3>
+<pre class="programlisting">void                pango_context_set_gravity_hint      (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);</pre>
+<p>
+Sets the gravity hint for the context.
+</p>
+<p>
+The gravity hint is used in laying vertical text out, and is only relevant
+if gravity of the context as returned by <a class="link" href="pango-Text-Processing.html#pango-context-get-gravity" title="pango_context_get_gravity ()"><code class="function">pango_context_get_gravity()</code></a>
+is set <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-EAST--CAPS"><code class="literal">PANGO_GRAVITY_EAST</code></a> or <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-WEST--CAPS"><code class="literal">PANGO_GRAVITY_WEST</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hint</code></em> :</span></p></td>
+<td> the new gravity hint
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-matrix"></a><h3>pango_context_get_matrix ()</h3>
+<pre class="programlisting">const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> * pango_context_get_matrix            (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context);</pre>
+<p>
+Gets the transformation matrix that will be applied when
+rendering with this context. See <a class="link" href="pango-Text-Processing.html#pango-context-set-matrix" title="pango_context_set_matrix ()"><code class="function">pango_context_set_matrix()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the matrix, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no matrix has been set
+ (which is the same as the identity matrix). The returned
+ matrix is owned by Pango and must not be modified or
+ freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-set-matrix"></a><h3>pango_context_set_matrix ()</h3>
+<pre class="programlisting">void                pango_context_set_matrix            (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);</pre>
+<p>
+Sets the transformation matrix that will be applied when rendering
+with this context. Note that reported metrics are in the user space
+coordinates before the application of the matrix, not device-space
+coordinates after the application of the matrix. So, they don't scale
+with the matrix, though they may change slightly for different
+matrices, depending on how the text is fit to the pixel grid.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to unset any existing matrix.
+ (No matrix set is the same as setting the identity matrix.)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-load-font"></a><h3>pango_context_load_font ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         pango_context_load_font             (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc);</pre>
+<p>
+Loads the font in one of the fontmaps in the context
+that is the closest match for <em class="parameter"><code>desc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> describing the font to load
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the font loaded, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no font matched.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-load-fontset"></a><h3>pango_context_load_fontset ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a> *      pango_context_load_fontset          (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Load a set of fonts in the context that can be used to render
+a font matching <em class="parameter"><code>desc</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> describing the fonts to load
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage"><span class="type">PangoLanguage</span></a> the fonts will be used for
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the fontset, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if no font matched.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-get-metrics"></a><h3>pango_context_get_metrics ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics">PangoFontMetrics</a> *  pango_context_get_metrics           (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         const <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> *desc,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language);</pre>
+<p>
+Get overall metric information for a particular font
+description.  Since the metrics may be substantially different for
+different scripts, a language tag can be provided to indicate that
+the metrics should be retrieved that correspond to the script(s)
+used by that language.
+</p>
+<p>
+The <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> is interpreted in the same way as
+by <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>, and the family name may be a comma separated
+list of figures. If characters from multiple of these families
+would be used to render the string, then the returned fonts would
+be a composite of the metrics for the fonts loaded for the
+individual families.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>desc</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> structure.  <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> means that the font
+             description from the context will be used.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> language tag used to determine which script to get the metrics
+           for. <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> means that the language tag from the context will
+           be used. If no language tag is set on the context, metrics
+           for the default language (as determined by
+           <a class="link" href="pango-Scripts-and-Languages.html#pango-language-get-default" title="pango_language_get_default ()"><code class="function">pango_language_get_default()</code></a>) will be returned.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMetrics" title="PangoFontMetrics"><span class="type">PangoFontMetrics</span></a> object. The caller must call <a class="link" href="pango-Fonts.html#pango-font-metrics-unref" title="pango_font_metrics_unref ()"><code class="function">pango_font_metrics_unref()</code></a>
+  when finished using the object.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-context-list-families"></a><h3>pango_context_list_families ()</h3>
+<pre class="programlisting">void                pango_context_list_families         (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a> ***families,
+                                                         int *n_families);</pre>
+<p>
+List all families for a context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>families</code></em> :</span></p></td>
+<td> location to store a pointer to an array of <a class="link" href="pango-Fonts.html#PangoFontFamily"><span class="type">PangoFontFamily</span></a> *.
+           This array should be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_families</code></em> :</span></p></td>
+<td> location to store the number of elements in <em class="parameter"><code>descs</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-break"></a><h3>pango_break ()</h3>
+<pre class="programlisting">void                pango_break                         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *attrs,
+                                                         int attrs_len);</pre>
+<p>
+Determines possible line, word, and character breaks
+for a string of Unicode text with a single analysis.  For most
+purposes you may want to use <a class="link" href="pango-Text-Processing.html#pango-get-log-attrs" title="pango_get_log_attrs ()"><code class="function">pango_get_log_attrs()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text to process
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    length of <em class="parameter"><code>text</code></em> in bytes (may be -1 if <em class="parameter"><code>text</code></em> is nul-terminated)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>analysis</code></em> :</span></p></td>
+<td>  <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis"><span class="type">PangoAnalysis</span></a> structure from <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs</code></em> :</span></p></td>
+<td>     an array to store character information in
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs_len</code></em> :</span></p></td>
+<td> size of the array passed as <em class="parameter"><code>attrs</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-get-log-attrs"></a><h3>pango_get_log_attrs ()</h3>
+<pre class="programlisting">void                pango_get_log_attrs                 (const char *text,
+                                                         int length,
+                                                         int level,
+                                                         <a class="link" href="pango-Scripts-and-Languages.html#PangoLanguage" title="PangoLanguage">PangoLanguage</a> *language,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *log_attrs,
+                                                         int attrs_len);</pre>
+<p>
+Computes a <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr"><span class="type">PangoLogAttr</span></a> for each character in <em class="parameter"><code>text</code></em>. The <em class="parameter"><code>log_attrs</code></em>
+array must have one <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr"><span class="type">PangoLogAttr</span></a> for each position in <em class="parameter"><code>text</code></em>; if
+<em class="parameter"><code>text</code></em> contains N characters, it has N+1 positions, including the
+last position at the end of the text. <em class="parameter"><code>text</code></em> should be an entire
+paragraph; logical attributes can't be computed without context
+(for example you need to see spaces on either side of a word to know
+the word is a word).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text to process
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length in bytes of <em class="parameter"><code>text</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>level</code></em> :</span></p></td>
+<td> embedding level, or -1 if unknown
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>language</code></em> :</span></p></td>
+<td> language tag
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>log_attrs</code></em> :</span></p></td>
+<td> array with one <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr"><span class="type">PangoLogAttr</span></a> per character in <em class="parameter"><code>text</code></em>, plus one extra, to be filled in
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs_len</code></em> :</span></p></td>
+<td> length of <em class="parameter"><code>log_attrs</code></em> array
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-find-paragraph-boundary"></a><h3>pango_find_paragraph_boundary ()</h3>
+<pre class="programlisting">void                pango_find_paragraph_boundary       (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> length,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *paragraph_delimiter_index,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> *next_paragraph_start);</pre>
+<p>
+Locates a paragraph boundary in <em class="parameter"><code>text</code></em>. A boundary is caused by
+delimiter characters, such as a newline, carriage return, carriage
+return-newline pair, or Unicode paragraph separator character.  The
+index of the run of delimiters is returned in
+<em class="parameter"><code>paragraph_delimiter_index</code></em>. The index of the start of the paragraph
+(index after all delimiters) is stored in <em class="parameter"><code>next_paragraph_start</code></em>.
+</p>
+<p>
+If no delimiters are found, both <em class="parameter"><code>paragraph_delimiter_index</code></em> and
+<em class="parameter"><code>next_paragraph_start</code></em> are filled with the length of <em class="parameter"><code>text</code></em> (an index one
+off the end).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> UTF-8 text
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of <em class="parameter"><code>text</code></em> in bytes, or -1 if nul-terminated
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>paragraph_delimiter_index</code></em> :</span></p></td>
+<td> return location for index of delimiter
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>next_paragraph_start</code></em> :</span></p></td>
+<td> return location for start of next paragraph
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-default-break"></a><h3>pango_default_break ()</h3>
+<pre class="programlisting">void                pango_default_break                 (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         int length,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr">PangoLogAttr</a> *attrs,
+                                                         int attrs_len);</pre>
+<p>
+This is the default break algorithm, used if no language
+engine overrides it. Normally you should use <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()"><code class="function">pango_break()</code></a>
+instead. Unlike <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()"><code class="function">pango_break()</code></a>,
+<em class="parameter"><code>analysis</code></em> can be <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>, but only do that if you know what
+you're doing. If you need an analysis to pass to <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()"><code class="function">pango_break()</code></a>,
+you need to <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>.  In most cases however you should
+simply use <a class="link" href="pango-Text-Processing.html#pango-get-log-attrs" title="pango_get_log_attrs ()"><code class="function">pango_get_log_attrs()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> text to break
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td> length of text in bytes (may be -1 if <em class="parameter"><code>text</code></em> is nul-terminated)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>analysis</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis"><span class="type">PangoAnalysis</span></a> for the <em class="parameter"><code>text</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs</code></em> :</span></p></td>
+<td> logical attributes to fill in
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>attrs_len</code></em> :</span></p></td>
+<td> size of the array passed as <em class="parameter"><code>attrs</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoLogAttr"></a><h3>PangoLogAttr</h3>
+<pre class="programlisting">typedef struct {
+  guint is_line_break : 1;      /* Can break line in front of character */
+
+  guint is_mandatory_break : 1; /* Must break line in front of character */
+
+  guint is_char_break : 1;      /* Can break here when doing char wrap */
+
+  guint is_white : 1;           /* Whitespace character */
+
+  /* Cursor can appear in front of character (i.e. this is a grapheme
+   * boundary, or the first character in the text).
+   */
+  guint is_cursor_position : 1;
+
+  /* Note that in degenerate cases, you could have both start/end set on
+   * some text, most likely for sentences (e.g. no space after a period, so
+   * the next sentence starts right away).
+   */
+
+  guint is_word_start : 1;      /* first character in a word */
+  guint is_word_end   : 1;      /* is first non-word char after a word */
+
+  /* There are two ways to divide sentences. The first assigns all
+   * intersentence whitespace/control/format chars to some sentence,
+   * so all chars are in some sentence; is_sentence_boundary denotes
+   * the boundaries there. The second way doesn't assign
+   * between-sentence spaces, etc. to any sentence, so
+   * is_sentence_start/is_sentence_end mark the boundaries of those
+   * sentences.
+   */
+  guint is_sentence_boundary : 1;
+  guint is_sentence_start : 1;  /* first character in a sentence */
+  guint is_sentence_end : 1;    /* first non-sentence char after a sentence */
+
+  /* If set, backspace deletes one character rather than
+   * the entire grapheme cluster.
+   */
+  guint backspace_deletes_character : 1;
+
+  /* Only few space variants (U+0020 and U+00A0) have variable
+   * width during justification.
+   */
+  guint is_expandable_space : 1;
+
+  /* Word boundary as defined by UAX#29 */
+  guint is_word_boundary : 1;  /* is NOT in the middle of a word */
+} PangoLogAttr;
+</pre>
+<p>
+The <a class="link" href="pango-Text-Processing.html#PangoLogAttr" title="PangoLogAttr"><span class="type">PangoLogAttr</span></a> structure stores information
+about the attributes of a single character.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_line_break</code></em> : 1;</span></p></td>
+<td>if set, can break line in front of character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_mandatory_break</code></em> : 1;</span></p></td>
+<td>if set, must break line in front of character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_char_break</code></em> : 1;</span></p></td>
+<td>if set, can break here when doing character wrapping
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_white</code></em> : 1;</span></p></td>
+<td>is whitespace character
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_cursor_position</code></em> : 1;</span></p></td>
+<td>if set, cursor can appear in front of character.
+       i.e. this is a grapheme boundary, or the first character
+        in the text.
+       This flag implements Unicode's
+       <a class="ulink" href="http://www.unicode.org/reports/tr29/" target="_top">Grapheme
+       Cluster Boundaries</a> semantics.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_word_start</code></em> : 1;</span></p></td>
+<td>is first character in a word
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_word_end</code></em> : 1;</span></p></td>
+<td>is first non-word char after a word
+       Note that in degenerate cases, you could have both <em class="parameter"><code>is_word_start</code></em>
+       and <em class="parameter"><code>is_word_end</code></em> set for some character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_sentence_boundary</code></em> : 1;</span></p></td>
+<td>is a sentence boundary.
+        There are two ways to divide sentences. The first assigns all
+       inter-sentence whitespace/control/format chars to some sentence,
+       so all chars are in some sentence; <em class="parameter"><code>is_sentence_boundary</code></em> denotes
+       the boundaries there. The second way doesn't assign
+       between-sentence spaces, etc. to any sentence, so
+       <em class="parameter"><code>is_sentence_start</code></em>/<em class="parameter"><code>is_sentence_end</code></em> mark the boundaries
+       of those sentences.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_sentence_start</code></em> : 1;</span></p></td>
+<td>is first character in a sentence
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_sentence_end</code></em> : 1;</span></p></td>
+<td>is first char after a sentence.
+       Note that in degenerate cases, you could have both <em class="parameter"><code>is_sentence_start</code></em>
+       and <em class="parameter"><code>is_sentence_end</code></em> set for some character. (e.g. no space after a
+       period, so the next sentence starts right away)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>backspace_deletes_character</code></em> : 1;</span></p></td>
+<td>if set, backspace deletes one character
+                              rather than the entire grapheme cluster. This
+                              field is only meaningful on grapheme
+                              boundaries (where <em class="parameter"><code>is_cursor_position</code></em> is
+                              set).  In some languages, the full grapheme
+                              (e.g.  letter + diacritics) is considered a
+                              unit, while in others, each decomposed
+                              character in the grapheme is a unit. In the
+                              default implementation of <a class="link" href="pango-Text-Processing.html#pango-break" title="pango_break ()"><code class="function">pango_break()</code></a>, this
+                              bit is set on all grapheme boundaries except
+                              those following Latin, Cyrillic or Greek base
+                              characters.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_expandable_space</code></em> : 1;</span></p></td>
+<td>is a whitespace character that can possibly be
+                      expanded for justification purposes. (Since: 1.18)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a> <em class="structfield"><code>is_word_boundary</code></em> : 1;</span></p></td>
+<td>is a word boundary.
+       More specifically, means that this is not a position in the middle
+       of a word.  For example, both sides of a punctuation mark are
+       considered word boundaries.  This flag is particularly useful when
+       selecting text word-by-word.
+       This flag implements Unicode's
+       <a class="ulink" href="http://www.unicode.org/reports/tr29/" target="_top">Word
+       Boundaries</a> semantics.
+       (Since: 1.22)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-shape"></a><h3>pango_shape ()</h3>
+<pre class="programlisting">void                pango_shape                         (const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *text,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> length,
+                                                         const <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis">PangoAnalysis</a> *analysis,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs);</pre>
+<p>
+Given a segment of text and the corresponding
+<a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis"><span class="type">PangoAnalysis</span></a> structure returned from <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>,
+convert the characters into glyphs. You may also pass
+in only a substring of the item from <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td>      the text to process
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
+<td>    the length (in bytes) of <em class="parameter"><code>text</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>analysis</code></em> :</span></p></td>
+<td>  <a class="link" href="pango-Text-Processing.html#PangoAnalysis" title="PangoAnalysis"><span class="type">PangoAnalysis</span></a> structure from <a class="link" href="pango-Text-Processing.html#pango-itemize" title="pango_itemize ()"><code class="function">pango_itemize()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>    glyph string in which to store results
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Version-Checking.html b/docs/html/pango-Version-Checking.html
new file mode 100755 (executable)
index 0000000..70ecaee
--- /dev/null
@@ -0,0 +1,305 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Version Checking</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="lowlevel.html" title="Low Level Functionality">
+<link rel="prev" href="pango-Miscellaneous-Utilities.html" title="Miscellaneous Utilities">
+<link rel="next" href="tools.html" title="Pango Tools">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Miscellaneous-Utilities.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="lowlevel.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="tools.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Version-Checking.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Version-Checking.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Version-Checking"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Version-Checking.top_of_page"></a>Version Checking</span></h2>
+<p>Version Checking — Tools for checking Pango version at compile- and run-time.</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Version-Checking.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS" title="PANGO_VERSION_ENCODE()">PANGO_VERSION_ENCODE</a>                (major, minor, micro)
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION--CAPS" title="PANGO_VERSION">PANGO_VERSION</a>
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-MAJOR--CAPS" title="PANGO_VERSION_MAJOR">PANGO_VERSION_MAJOR</a>
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-MINOR--CAPS" title="PANGO_VERSION_MINOR">PANGO_VERSION_MINOR</a>
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-MICRO--CAPS" title="PANGO_VERSION_MICRO">PANGO_VERSION_MICRO</a>
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-STRING--CAPS" title="PANGO_VERSION_STRING">PANGO_VERSION_STRING</a>
+#define             <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-CHECK--CAPS" title="PANGO_VERSION_CHECK()">PANGO_VERSION_CHECK</a>                 (major,minor,micro)
+int                 <a class="link" href="pango-Version-Checking.html#pango-version" title="pango_version ()">pango_version</a>                       (void);
+const char *        <a class="link" href="pango-Version-Checking.html#pango-version-string" title="pango_version_string ()">pango_version_string</a>                (void);
+const char *        <a class="link" href="pango-Version-Checking.html#pango-version-check" title="pango_version_check ()">pango_version_check</a>                 (int required_major,
+                                                         int required_minor,
+                                                         int required_micro);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Version-Checking.description"></a><h2>Description</h2>
+<p>
+The capital-letter macros defined here can be used to check the version of
+Pango at compile-time, and to <em class="firstterm">encode</em> Pango versions into
+integers.
+The functions can be used to check the version of the linked Pango library
+at run-time.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Version-Checking.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION-ENCODE--CAPS"></a><h3>PANGO_VERSION_ENCODE()</h3>
+<pre class="programlisting">#define             PANGO_VERSION_ENCODE(major, minor, micro)</pre>
+<p>
+This macro encodes the given Pango version into an integer.  The numbers
+returned by <a class="link" href="pango-Version-Checking.html#PANGO-VERSION--CAPS" title="PANGO_VERSION"><code class="literal">PANGO_VERSION</code></a> and <a class="link" href="pango-Version-Checking.html#pango-version" title="pango_version ()"><code class="function">pango_version()</code></a> are encoded using this macro.
+Two encoded version numbers can be compared as integers.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>major</code></em> :</span></p></td>
+<td>the major component of the version number
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>minor</code></em> :</span></p></td>
+<td>the minor component of the version number
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>micro</code></em> :</span></p></td>
+<td>the micro component of the version number
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION--CAPS"></a><h3>PANGO_VERSION</h3>
+<pre class="programlisting">#define             PANGO_VERSION</pre>
+<p>
+The version of Pango available at compile-time, encoded using
+<a class="link" href="pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS" title="PANGO_VERSION_ENCODE()"><code class="function">PANGO_VERSION_ENCODE()</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION-MAJOR--CAPS"></a><h3>PANGO_VERSION_MAJOR</h3>
+<pre class="programlisting">#define PANGO_VERSION_MAJOR 1
+</pre>
+<p>
+The major component of the version of Pango available at compile-time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION-MINOR--CAPS"></a><h3>PANGO_VERSION_MINOR</h3>
+<pre class="programlisting">#define PANGO_VERSION_MINOR 26
+</pre>
+<p>
+The minor component of the version of Pango available at compile-time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION-MICRO--CAPS"></a><h3>PANGO_VERSION_MICRO</h3>
+<pre class="programlisting">#define PANGO_VERSION_MICRO 1
+</pre>
+<p>
+The micro component of the version of Pango available at compile-time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION-STRING--CAPS"></a><h3>PANGO_VERSION_STRING</h3>
+<pre class="programlisting">#define PANGO_VERSION_STRING "1.26.1"
+</pre>
+<p>
+A string literal containing the version of Pango available at compile-time.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-VERSION-CHECK--CAPS"></a><h3>PANGO_VERSION_CHECK()</h3>
+<pre class="programlisting">#define             PANGO_VERSION_CHECK(major,minor,micro)</pre>
+<p>
+Checks that the version of Pango available at compile-time is not older than
+the provided version number.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>major</code></em> :</span></p></td>
+<td>the major component of the version number
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>minor</code></em> :</span></p></td>
+<td>the minor component of the version number
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>micro</code></em> :</span></p></td>
+<td>the micro component of the version number
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-version"></a><h3>pango_version ()</h3>
+<pre class="programlisting">int                 pango_version                       (void);</pre>
+<p>
+This is similar to the macro <a class="link" href="pango-Version-Checking.html#PANGO-VERSION--CAPS" title="PANGO_VERSION"><code class="literal">PANGO_VERSION</code></a> except that
+it returns the encoded version of Pango available at run-time,
+as opposed to the version available at compile-time.
+</p>
+<p>
+A version number can be encoded into an integer using
+<a class="link" href="pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS" title="PANGO_VERSION_ENCODE()"><code class="function">PANGO_VERSION_ENCODE()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The encoded version of Pango library
+  available at run time.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-version-string"></a><h3>pango_version_string ()</h3>
+<pre class="programlisting">const char *        pango_version_string                (void);</pre>
+<p>
+This is similar to the macro <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-STRING--CAPS" title="PANGO_VERSION_STRING"><code class="literal">PANGO_VERSION_STRING</code></a> except that
+it returns the version of Pango available at run-time, as opposed to
+the version available at compile-time.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A string containing the version of Pango library
+  available at run time.
+  The returned string is owned by Pango and should not be modified
+  or freed.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-version-check"></a><h3>pango_version_check ()</h3>
+<pre class="programlisting">const char *        pango_version_check                 (int required_major,
+                                                         int required_minor,
+                                                         int required_micro);</pre>
+<p>
+Checks that the Pango library in use is compatible with the
+given version. Generally you would pass in the constants
+<a class="link" href="pango-Version-Checking.html#PANGO-VERSION-MAJOR--CAPS" title="PANGO_VERSION_MAJOR"><code class="literal">PANGO_VERSION_MAJOR</code></a>, <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-MINOR--CAPS" title="PANGO_VERSION_MINOR"><code class="literal">PANGO_VERSION_MINOR</code></a>, <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-MICRO--CAPS" title="PANGO_VERSION_MICRO"><code class="literal">PANGO_VERSION_MICRO</code></a>
+as the three arguments to this function; that produces
+a check that the library in use at run-time is compatible with
+the version of Pango the application or module was compiled against.
+</p>
+<p>
+Compatibility is defined by two things: first the version
+of the running library is newer than the version
+<em class="parameter"><code>required_major.required_minor</code></em>.<em class="parameter"><code>required_micro</code></em>. Second
+the running library must be binary compatible with the
+version <em class="parameter"><code>required_major.required_minor</code></em>.<em class="parameter"><code>required_micro</code></em>
+(same major version.)
+</p>
+<p>
+For compile-time version checking use <a class="link" href="pango-Version-Checking.html#PANGO-VERSION-CHECK--CAPS" title="PANGO_VERSION_CHECK()"><code class="function">PANGO_VERSION_CHECK()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>required_major</code></em> :</span></p></td>
+<td> the required major version.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>required_minor</code></em> :</span></p></td>
+<td> the required minor version.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>required_micro</code></em> :</span></p></td>
+<td> the required major version.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the Pango library is compatible with the
+  given version, or a string describing the version mismatch.
+  The returned string is owned by Pango and should not be modified
+  or freed.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Vertical-Text.html b/docs/html/pango-Vertical-Text.html
new file mode 100755 (executable)
index 0000000..eab1b2b
--- /dev/null
@@ -0,0 +1,446 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Vertical Text</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="pango.html" title="Basic Pango Interfaces">
+<link rel="prev" href="pango-Bidirectional-Text.html" title="Bidirectional Text">
+<link rel="next" href="rendering.html" title="Rendering with Pango">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-Bidirectional-Text.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="pango.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="rendering.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Vertical-Text.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Vertical-Text.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Vertical-Text"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Vertical-Text.top_of_page"></a>Vertical Text</span></h2>
+<p>Vertical Text — Laying text out in vertical directions</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Vertical-Text.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+enum                <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>;
+enum                <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a>;
+#define             <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-IS-VERTICAL--CAPS" title="PANGO_GRAVITY_IS_VERTICAL()">PANGO_GRAVITY_IS_VERTICAL</a>           (gravity)
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        <a class="link" href="pango-Vertical-Text.html#pango-gravity-get-for-matrix" title="pango_gravity_get_for_matrix ()">pango_gravity_get_for_matrix</a>        (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        <a class="link" href="pango-Vertical-Text.html#pango-gravity-get-for-script" title="pango_gravity_get_for_script ()">pango_gravity_get_for_script</a>        (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> base_gravity,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        <a class="link" href="pango-Vertical-Text.html#pango-gravity-get-for-script-and-width" title="pango_gravity_get_for_script_and_width ()">pango_gravity_get_for_script_and_width</a>
+                                                        (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> wide,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> base_gravity,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);
+double              <a class="link" href="pango-Vertical-Text.html#pango-gravity-to-rotation" title="pango_gravity_to_rotation ()">pango_gravity_to_rotation</a>           (<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Vertical-Text.description"></a><h2>Description</h2>
+<p>
+Since 1.16, Pango is able to correctly lay vertical text out.  In fact, it can
+set layouts of mixed vertical and non-vertical text.  This section describes
+the types used for setting vertical text parameters.
+</p>
+<p>
+The way this is implemented is through the concept of
+<em class="firstterm">gravity</em>.  Gravity of normal Latin text is south.  A
+gravity value of east means that glyphs will be rotated ninety degrees
+counterclockwise.  So, to render vertical text one needs to set the gravity
+and rotate the layout using the matrix machinery already in place.  This has
+the huge advantage that most algorithms working on a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> do not need
+any change as the assumption that lines run in the X direction and stack in
+the Y direction holds even for vertical text layouts.
+</p>
+<p>
+Applications should only need to set base gravity on <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> in use, and
+let Pango decide the gravity assigned to each run of text.  This automatically
+handles text with mixed scripts.  A very common use is to set the context base
+gravity to auto using <a class="link" href="pango-Text-Processing.html#pango-context-set-base-gravity" title="pango_context_set_base_gravity ()"><code class="function">pango_context_set_base_gravity()</code></a>
+and rotate the layout normally.  Pango will make sure that
+Asian languages take the right form, while other scripts are rotated normally.
+</p>
+<p>
+The correct way to set gravity on a layout is to set it on the context
+associated with it using <a class="link" href="pango-Text-Processing.html#pango-context-set-base-gravity" title="pango_context_set_base_gravity ()"><code class="function">pango_context_set_base_gravity()</code></a>.  The context
+of a layout can be accessed using <a class="link" href="pango-Layout-Objects.html#pango-layout-get-context" title="pango_layout_get_context ()"><code class="function">pango_layout_get_context()</code></a>.  The currently
+set base gravity of the context can be accessed using
+<a class="link" href="pango-Text-Processing.html#pango-context-get-base-gravity" title="pango_context_get_base_gravity ()"><code class="function">pango_context_get_base_gravity()</code></a> and the <em class="firstterm">resolved</em>
+gravity of it using <a class="link" href="pango-Text-Processing.html#pango-context-get-gravity" title="pango_context_get_gravity ()"><code class="function">pango_context_get_gravity()</code></a>.  The resolved gravity is
+the same as the base gravity for the most part, except that if the base
+gravity is set to <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>, the resolved gravity will depend
+on the current matrix set on context, and is derived using
+<a class="link" href="pango-Vertical-Text.html#pango-gravity-get-for-matrix" title="pango_gravity_get_for_matrix ()"><code class="function">pango_gravity_get_for_matrix()</code></a>.
+</p>
+<p>
+The next thing an application may want to set on the context is the
+<em class="firstterm">gravity hint</em>.  A <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint"><span class="type">PangoGravityHint</span></a> instructs how
+different scripts should react to the set base gravity.
+</p>
+<p>
+Font descriptions have a gravity property too, that can be set using
+<a class="link" href="pango-Fonts.html#pango-font-description-set-gravity" title="pango_font_description_set_gravity ()"><code class="function">pango_font_description_set_gravity()</code></a> and accessed using
+<a class="link" href="pango-Fonts.html#pango-font-description-get-gravity" title="pango_font_description_get_gravity ()"><code class="function">pango_font_description_get_gravity()</code></a>.  However, those are rarely useful
+from application code and are mainly used by <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> internally.
+</p>
+<p>
+Last but not least, one can create <a class="link" href="pango-Text-Attributes.html#PangoAttribute" title="PangoAttribute"><span class="type">PangoAttribute</span></a>s for gravity
+and gravity hint using <a class="link" href="pango-Text-Attributes.html#pango-attr-gravity-new" title="pango_attr_gravity_new ()"><code class="function">pango_attr_gravity_new()</code></a> and
+<a class="link" href="pango-Text-Attributes.html#pango-attr-gravity-hint-new" title="pango_attr_gravity_hint_new ()"><code class="function">pango_attr_gravity_hint_new()</code></a>.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Vertical-Text.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoGravity"></a><h3>enum PangoGravity</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_GRAVITY_SOUTH,
+  PANGO_GRAVITY_EAST,
+  PANGO_GRAVITY_NORTH,
+  PANGO_GRAVITY_WEST,
+  PANGO_GRAVITY_AUTO
+} PangoGravity;
+</pre>
+<p>
+The <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> type represents the orientation of glyphs in a segment
+of text.  This is useful when rendering vertical text layouts.  In
+those situations, the layout is rotated using a non-identity PangoMatrix,
+and then glyph orientation is controlled using <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a>.
+Not every value in this enumeration makes sense for every usage of
+<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a>; for example, <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a> only can be passed to
+<a class="link" href="pango-Text-Processing.html#pango-context-set-base-gravity" title="pango_context_set_base_gravity ()"><code class="function">pango_context_set_base_gravity()</code></a> and can only be returned by
+<a class="link" href="pango-Text-Processing.html#pango-context-get-base-gravity" title="pango_context_get_base_gravity ()"><code class="function">pango_context_get_base_gravity()</code></a>.
+</p>
+<p>
+See also: <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint"><span class="type">PangoGravityHint</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-GRAVITY-SOUTH--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_SOUTH</code></span></p></td>
+<td> Glyphs stand upright (default)
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-GRAVITY-EAST--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_EAST</code></span></p></td>
+<td> Glyphs are rotated 90 degrees clockwise
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-GRAVITY-NORTH--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_NORTH</code></span></p></td>
+<td> Glyphs are upside-down
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-GRAVITY-WEST--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_WEST</code></span></p></td>
+<td> Glyphs are rotated 90 degrees counter-clockwise
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-GRAVITY-AUTO--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_AUTO</code></span></p></td>
+<td> Gravity is resolved from the context matrix
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGravityHint"></a><h3>enum PangoGravityHint</h3>
+<pre class="programlisting">typedef enum {
+  PANGO_GRAVITY_HINT_NATURAL,
+  PANGO_GRAVITY_HINT_STRONG,
+  PANGO_GRAVITY_HINT_LINE
+} PangoGravityHint;
+</pre>
+<p>
+The <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint"><span class="type">PangoGravityHint</span></a> defines how horizontal scripts should behave in a
+vertical context.  That is, English excerpt in a vertical paragraph for
+example.
+</p>
+<p>
+See <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><a name="PANGO-GRAVITY-HINT-NATURAL--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_HINT_NATURAL</code></span></p></td>
+<td> scripts will take their natural gravity based
+on the base gravity and the script.  This is the default.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-GRAVITY-HINT-STRONG--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_HINT_STRONG</code></span></p></td>
+<td> always use the base gravity set, regardless of
+the script.
+</td>
+</tr>
+<tr>
+<td><p><a name="PANGO-GRAVITY-HINT-LINE--CAPS"></a><span class="term"><code class="literal">PANGO_GRAVITY_HINT_LINE</code></span></p></td>
+<td> for scripts not in their natural direction (eg.
+Latin in East gravity), choose per-script gravity such that every script
+respects the line progression.  This means, Latin and Arabic will take
+opposite gravities and both flow top-to-bottom for example.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-GRAVITY-IS-VERTICAL--CAPS"></a><h3>PANGO_GRAVITY_IS_VERTICAL()</h3>
+<pre class="programlisting">#define             PANGO_GRAVITY_IS_VERTICAL(gravity)</pre>
+<p>
+Whether a <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> represents vertical writing directions.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>gravity</code></em> :</span></p></td>
+<td> the <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> to check
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-gravity-get-for-matrix"></a><h3>pango_gravity_get_for_matrix ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        pango_gravity_get_for_matrix        (const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix);</pre>
+<p>
+Finds the gravity that best matches the rotation component
+in a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the gravity of <em class="parameter"><code>matrix</code></em>, which will never be
+<a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>, or <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-SOUTH--CAPS"><code class="literal">PANGO_GRAVITY_SOUTH</code></a> if <em class="parameter"><code>matrix</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-gravity-get-for-script"></a><h3>pango_gravity_get_for_script ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        pango_gravity_get_for_script        (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> base_gravity,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);</pre>
+<p>
+Based on the script, base gravity, and hint, returns actual gravity
+to use in laying out a single <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>.
+</p>
+<p>
+If <em class="parameter"><code>base_gravity</code></em> is <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>, it is first replaced with the
+preferred gravity of <em class="parameter"><code>script</code></em>.  To get the preferred gravity of a script,
+pass <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a> and <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-HINT-STRONG--CAPS"><code class="literal">PANGO_GRAVITY_HINT_STRONG</code></a> in.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> to query
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>base_gravity</code></em> :</span></p></td>
+<td> base gravity of the paragraph
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hint</code></em> :</span></p></td>
+<td> orientation hint
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> resolved gravity suitable to use for a run of text
+with <em class="parameter"><code>script</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-gravity-get-for-script-and-width"></a><h3>pango_gravity_get_for_script_and_width ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a>        pango_gravity_get_for_script_and_width
+                                                        (<a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript">PangoScript</a> script,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a> wide,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> base_gravity,
+                                                         <a class="link" href="pango-Vertical-Text.html#PangoGravityHint" title="enum PangoGravityHint">PangoGravityHint</a> hint);</pre>
+<p>
+Based on the script, East Asian width, base gravity, and hint,
+returns actual gravity to use in laying out a single character
+or <a class="link" href="pango-Text-Processing.html#PangoItem" title="PangoItem"><span class="type">PangoItem</span></a>.
+</p>
+<p>
+This function is similar to <a class="link" href="pango-Vertical-Text.html#pango-gravity-get-for-script" title="pango_gravity_get_for_script ()"><code class="function">pango_gravity_get_for_script()</code></a> except
+that this function makes a distinction between narrow/half-width and
+wide/full-width characters also.  Wide/full-width characters always
+stand <span style="color: red">&lt;emph&gt;upright&lt;/emph&gt;</span>, that is, they always take the base gravity,
+whereas narrow/full-width characters are always rotated in vertical
+context.
+</p>
+<p>
+If <em class="parameter"><code>base_gravity</code></em> is <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>, it is first replaced with the
+preferred gravity of <em class="parameter"><code>script</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>script</code></em> :</span></p></td>
+<td> <a class="link" href="pango-Scripts-and-Languages.html#PangoScript" title="enum PangoScript"><span class="type">PangoScript</span></a> to query
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wide</code></em> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> for wide characters as returned by <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#g-unichar-iswide"
+><code class="function">g_unichar_iswide()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>base_gravity</code></em> :</span></p></td>
+<td> base gravity of the paragraph
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hint</code></em> :</span></p></td>
+<td> orientation hint
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> resolved gravity suitable to use for a run of text
+with <em class="parameter"><code>script</code></em> and <em class="parameter"><code>wide</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.26</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-gravity-to-rotation"></a><h3>pango_gravity_to_rotation ()</h3>
+<pre class="programlisting">double              pango_gravity_to_rotation           (<a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity">PangoGravity</a> gravity);</pre>
+<p>
+Converts a <a class="link" href="pango-Vertical-Text.html#PangoGravity" title="enum PangoGravity"><span class="type">PangoGravity</span></a> value to its natural rotation in radians.
+<em class="parameter"><code>gravity</code></em> should not be <a class="link" href="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"><code class="literal">PANGO_GRAVITY_AUTO</code></a>.
+</p>
+<p>
+Note that <a class="link" href="pango-Glyph-Storage.html#pango-matrix-rotate" title="pango_matrix_rotate ()"><code class="function">pango_matrix_rotate()</code></a> takes angle in degrees, not radians.
+So, to call <a class="link" href="pango-Glyph-Storage.html#pango-matrix-rotate" title="pango_matrix_rotate ()"><code class="function">pango_matrix_rotate()</code></a> with the output of this function
+you should multiply it by (180. / G_PI).</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gravity</code></em> :</span></p></td>
+<td> gravity to query
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the rotation value corresponding to <em class="parameter"><code>gravity</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Vertical-Text.see-also"></a><h2>See Also</h2>
+<p>
+<a class="link" href="pango-Text-Processing.html#pango-context-get-base-gravity" title="pango_context_get_base_gravity ()"><code class="function">pango_context_get_base_gravity()</code></a>,
+<a class="link" href="pango-Text-Processing.html#pango-context-set-base-gravity" title="pango_context_set_base_gravity ()"><code class="function">pango_context_set_base_gravity()</code></a>,
+<a class="link" href="pango-Text-Processing.html#pango-context-get-gravity" title="pango_context_get_gravity ()"><code class="function">pango_context_get_gravity()</code></a>,
+<a class="link" href="pango-Text-Processing.html#pango-context-get-gravity-hint" title="pango_context_get_gravity_hint ()"><code class="function">pango_context_get_gravity_hint()</code></a>,
+<a class="link" href="pango-Text-Processing.html#pango-context-set-gravity-hint" title="pango_context_set_gravity_hint ()"><code class="function">pango_context_set_gravity_hint()</code></a>,
+<a class="link" href="pango-Fonts.html#pango-font-description-set-gravity" title="pango_font_description_set_gravity ()"><code class="function">pango_font_description_set_gravity()</code></a>,
+<a class="link" href="pango-Fonts.html#pango-font-description-get-gravity" title="pango_font_description_get_gravity ()"><code class="function">pango_font_description_get_gravity()</code></a>,
+<a class="link" href="pango-Text-Attributes.html#pango-attr-gravity-new" title="pango_attr_gravity_new ()"><code class="function">pango_attr_gravity_new()</code></a>,
+<a class="link" href="pango-Text-Attributes.html#pango-attr-gravity-hint-new" title="pango_attr_gravity_hint_new ()"><code class="function">pango_attr_gravity_hint_new()</code></a>
+</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Win32-Fonts-and-Rendering.html b/docs/html/pango-Win32-Fonts-and-Rendering.html
new file mode 100755 (executable)
index 0000000..57453ee
--- /dev/null
@@ -0,0 +1,892 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Win32 Fonts and Rendering</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="rendering.html" title="Rendering with Pango">
+<link rel="prev" href="rendering.html" title="Rendering with Pango">
+<link rel="next" href="pango-FreeType-Fonts-and-Rendering.html" title="FreeType Fonts and Rendering">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="rendering.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="rendering.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-FreeType-Fonts-and-Rendering.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Win32-Fonts-and-Rendering.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Win32-Fonts-and-Rendering.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Win32-Fonts-and-Rendering"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Win32-Fonts-and-Rendering.top_of_page"></a>Win32 Fonts and Rendering</span></h2>
+<p>Win32 Fonts and Rendering — Functions for shape engines to manipulate Win32 fonts</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Win32-Fonts-and-Rendering.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#define             <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-WIN32--CAPS" title="PANGO_RENDER_TYPE_WIN32">PANGO_RENDER_TYPE_WIN32</a>
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-context" title="pango_win32_get_context ()">pango_win32_get_context</a>             (void);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render" title="pango_win32_render ()">pango_win32_render</a>                  (HDC hdc,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-transformed" title="pango_win32_render_transformed ()">pango_win32_render_transformed</a>      (HDC hdc,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout-line" title="pango_win32_render_layout_line ()">pango_win32_render_layout_line</a>      (HDC hdc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout" title="pango_win32_render_layout ()">pango_win32_render_layout</a>           (HDC hdc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-unknown-glyph" title="pango_win32_get_unknown_glyph ()">pango_win32_get_unknown_glyph</a>       (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-glyph-index" title="pango_win32_font_get_glyph_index ()">pango_win32_font_get_glyph_index</a>    (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-select-font" title="pango_win32_font_select_font ()">pango_win32_font_select_font</a>        (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         HDC hdc);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font" title="pango_win32_font_done_font ()">pango_win32_font_done_font</a>          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+double              <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-metrics-factor" title="pango_win32_font_get_metrics_factor ()">pango_win32_font_get_metrics_factor</a> (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-debug-flag" title="pango_win32_get_debug_flag ()">pango_win32_get_debug_flag</a>          (void);
+HDC                 <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-dc" title="pango_win32_get_dc ()">pango_win32_get_dc</a>                  (void);
+                    <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a>;
+<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> * <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-new" title="pango_win32_font_cache_new ()">pango_win32_font_cache_new</a>        (void);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-free" title="pango_win32_font_cache_free ()">pango_win32_font_cache_free</a>         (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache);
+HFONT               <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-load" title="pango_win32_font_cache_load ()">pango_win32_font_cache_load</a>         (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache,
+                                                         const LOGFONTA *logfont);
+HFONT               <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-loadw" title="pango_win32_font_cache_loadw ()">pango_win32_font_cache_loadw</a>        (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache,
+                                                         const LOGFONTW *logfont);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload" title="pango_win32_font_cache_unload ()">pango_win32_font_cache_unload</a>       (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache,
+                                                         HFONT hfont);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-for-display" title="pango_win32_font_map_for_display ()">pango_win32_font_map_for_display</a>    (void);
+void                <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-shutdown-display" title="pango_win32_shutdown_display ()">pango_win32_shutdown_display</a>        (void);
+<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> * <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-get-font-cache" title="pango_win32_font_map_get_font_cache ()">pango_win32_font_map_get_font_cache</a>
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *font_map);
+LOGFONTA *          <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfont" title="pango_win32_font_logfont ()">pango_win32_font_logfont</a>            (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+LOGFONTW *          <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw" title="pango_win32_font_logfontw ()">pango_win32_font_logfontw</a>           (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfont" title="pango_win32_font_description_from_logfont ()">pango_win32_font_description_from_logfont</a>
+                                                        (const LOGFONTA *lfp);
+<a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfontw" title="pango_win32_font_description_from_logfontw ()">pango_win32_font_description_from_logfontw</a>
+                                                        (const LOGFONTW *lfp);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Win32-Fonts-and-Rendering.description"></a><h2>Description</h2>
+<p>
+The macros and functions in this section are used to access fonts natively on
+Win32 systems and to render text in conjunction with Win32 APIs.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Win32-Fonts-and-Rendering.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-WIN32--CAPS"></a><h3>PANGO_RENDER_TYPE_WIN32</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_WIN32 "PangoRenderWin32"
+</pre>
+<p>
+A string constant identifying the Win32 renderer. The associated quark (see
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#g-quark-from-string"
+><code class="function">g_quark_from_string()</code></a>) is used to identify the renderer in <a class="link" href="pango-Modules.html#pango-find-map" title="pango_find_map ()"><code class="function">pango_find_map()</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-get-context"></a><h3>pango_win32_get_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_win32_get_context             (void);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_win32_get_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-for-display" title="pango_win32_font_map_for_display ()"><code class="function">pango_win32_font_map_for_display()</code></a> followed by
+<a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Retrieves a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> appropriate for rendering with Windows fonts.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>
+
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-render"></a><h3>pango_win32_render ()</h3>
+<pre class="programlisting">void                pango_win32_render                  (HDC hdc,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);</pre>
+<p>
+Render a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto a Windows DC</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hdc</code></em> :</span></p></td>
+<td>     the device context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of start of string (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of baseline (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-render-transformed"></a><h3>pango_win32_render_transformed ()</h3>
+<pre class="programlisting">void                pango_win32_render_transformed      (HDC hdc,
+                                                         const <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto a windows DC, possibly
+transforming the layed-out coordinates through a transformation
+matrix. Note that the transformation matrix for <em class="parameter"><code>font</code></em> is not
+changed, so to produce correct rendering results, the <em class="parameter"><code>font</code></em>
+must have been loaded using a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> with an identical
+transformation matrix to that passed in to this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hdc</code></em> :</span></p></td>
+<td>     a windows device context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td>  a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to use an identity transformation
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of the start of the string (in Pango
+          units in user space coordinates)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of the baseline (in Pango units
+          in user space coordinates)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-render-layout-line"></a><h3>pango_win32_render_layout_line ()</h3>
+<pre class="programlisting">void                pango_win32_render_layout_line      (HDC hdc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> onto a device context. For underlining to
+work property the text alignment of the DC should have TA_BASELINE
+and TA_LEFT.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hdc</code></em> :</span></p></td>
+<td>       DC to use for uncolored drawing
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the x position of start of string (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the y position of baseline (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-render-layout"></a><h3>pango_win32_render_layout ()</h3>
+<pre class="programlisting">void                pango_win32_render_layout           (HDC hdc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> onto an X drawable</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hdc</code></em> :</span></p></td>
+<td>       HDC to use for uncolored drawing
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the X position of the left of the layout (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the Y position of the top of the layout (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-get-unknown-glyph"></a><h3>pango_win32_get_unknown_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_win32_get_unknown_glyph       (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_win32_get_unknown_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns the index of a glyph suitable for drawing <em class="parameter"><code>wc</code></em> as an
+unknown character.
+</p>
+<p>
+Use <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()"><code class="function">PANGO_GET_UNKNOWN_GLYPH()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> the Unicode character for which a glyph is needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a glyph index into <em class="parameter"><code>font</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-get-glyph-index"></a><h3>pango_win32_font_get_glyph_index ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                pango_win32_font_get_glyph_index    (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<p>
+Obtains the index of the glyph for <em class="parameter"><code>wc</code></em> in <em class="parameter"><code>font</code></em>, or 0, if not
+covered.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> a Unicode character.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the glyph index for <em class="parameter"><code>wc</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-select-font"></a><h3>pango_win32_font_select_font ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_win32_font_select_font        (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         HDC hdc);</pre>
+<p>
+Selects the font into the specified DC and changes the mapping mode
+and world transformation of the DC appropriately for the font.
+You may want to surround the use of this function with calls
+to <code class="function">SaveDC()</code> and <code class="function">RestoreDC()</code>. Call <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font" title="pango_win32_font_done_font ()"><code class="function">pango_win32_font_done_font()</code></a> when
+you are done using the DC to release allocated resources.
+</p>
+<p>
+See <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-metrics-factor" title="pango_win32_font_get_metrics_factor ()"><code class="function">pango_win32_font_get_metrics_factor()</code></a> for information about
+converting from the coordinate space used by this function
+into Pango units.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> from the Win32 backend
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hdc</code></em> :</span></p></td>
+<td> a windows device context
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the operation succeeded.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-done-font"></a><h3>pango_win32_font_done_font ()</h3>
+<pre class="programlisting">void                pango_win32_font_done_font          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Releases any resources allocated by <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font" title="pango_win32_font_done_font ()"><code class="function">pango_win32_font_done_font()</code></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> from the win32 backend
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-get-metrics-factor"></a><h3>pango_win32_font_get_metrics_factor ()</h3>
+<pre class="programlisting">double              pango_win32_font_get_metrics_factor (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Returns the scale factor from logical units in the coordinate
+space used by <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-select-font" title="pango_win32_font_select_font ()"><code class="function">pango_win32_font_select_font()</code></a> to Pango units
+in user space.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> from the win32 backend
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> factor to multiply logical units by to get Pango
+              units.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-get-debug-flag"></a><h3>pango_win32_get_debug_flag ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_win32_get_debug_flag          (void);</pre>
+<p>
+Returns whether debugging is turned on.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if debugging is turned on.
+
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-get-dc"></a><h3>pango_win32_get_dc ()</h3>
+<pre class="programlisting">HDC                 pango_win32_get_dc                  (void);</pre>
+<p>
+Obtains a handle to the Windows device context that is used by Pango.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A handle to the Windows device context that is used by Pango.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoWin32FontCache"></a><h3>PangoWin32FontCache</h3>
+<pre class="programlisting">typedef struct _PangoWin32FontCache PangoWin32FontCache;</pre>
+<p>
+A <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a> caches
+HFONTs by their LOGFONT descriptions.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-cache-new"></a><h3>pango_win32_font_cache_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> * pango_win32_font_cache_new        (void);</pre>
+<p>
+Creates a font cache.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The new font cache. This must be freed with
+<a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-free" title="pango_win32_font_cache_free ()"><code class="function">pango_win32_font_cache_free()</code></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-cache-free"></a><h3>pango_win32_font_cache_free ()</h3>
+<pre class="programlisting">void                pango_win32_font_cache_free         (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache);</pre>
+<p>
+Frees a <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a> and all associated memory. All fonts loaded
+through this font cache will be freed along with the cache.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-cache-load"></a><h3>pango_win32_font_cache_load ()</h3>
+<pre class="programlisting">HFONT               pango_win32_font_cache_load         (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache,
+                                                         const LOGFONTA *logfont);</pre>
+<p>
+Creates a HFONT from a LOGFONTA. The
+result may be newly loaded, or it may have been previously
+stored</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logfont</code></em> :</span></p></td>
+<td> a pointer to a LOGFONTA structure describing the font to load.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The font structure, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the font could
+not be loaded. In order to free this structure, you must call
+<a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload" title="pango_win32_font_cache_unload ()"><code class="function">pango_win32_font_cache_unload()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-cache-loadw"></a><h3>pango_win32_font_cache_loadw ()</h3>
+<pre class="programlisting">HFONT               pango_win32_font_cache_loadw        (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache,
+                                                         const LOGFONTW *logfont);</pre>
+<p>
+Creates a HFONT from a LOGFONTW. The
+result may be newly loaded, or it may have been previously
+stored</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>logfont</code></em> :</span></p></td>
+<td> a pointer to a LOGFONTW structure describing the font to load.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The font structure, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the font could
+not be loaded. In order to free this structure, you must call
+<a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload" title="pango_win32_font_cache_unload ()"><code class="function">pango_win32_font_cache_unload()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-cache-unload"></a><h3>pango_win32_font_cache_unload ()</h3>
+<pre class="programlisting">void                pango_win32_font_cache_unload       (<a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> *cache,
+                                                         HFONT hfont);</pre>
+<p>
+Frees a font structure previously loaded with <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-load" title="pango_win32_font_cache_load ()"><code class="function">pango_win32_font_cache_load()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>hfont</code></em> :</span></p></td>
+<td> the HFONT to unload
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-map-for-display"></a><h3>pango_win32_font_map_for_display ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_win32_font_map_for_display    (void);</pre>
+<p>
+Returns a <span class="type">PangoWin32FontMap</span>. Font maps are cached and should
+not be freed. If the font map is no longer needed, it can
+be released with <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-shutdown-display" title="pango_win32_shutdown_display ()"><code class="function">pango_win32_shutdown_display()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-shutdown-display"></a><h3>pango_win32_shutdown_display ()</h3>
+<pre class="programlisting">void                pango_win32_shutdown_display        (void);</pre>
+<p>
+Free cached resources.</p>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-map-get-font-cache"></a><h3>pango_win32_font_map_get_font_cache ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache">PangoWin32FontCache</a> * pango_win32_font_map_get_font_cache
+                                                        (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *font_map);</pre>
+<p>
+Obtains the font cache associated with the given font map.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font_map</code></em> :</span></p></td>
+<td> a <span class="type">PangoWin32FontMap</span>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache" title="PangoWin32FontCache"><span class="type">PangoWin32FontCache</span></a> of <em class="parameter"><code>font_map</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-logfont"></a><h3>pango_win32_font_logfont ()</h3>
+<pre class="programlisting">LOGFONTA *          pango_win32_font_logfont            (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Determine the LOGFONTA struct for the specified font. Note that
+Pango internally uses LOGFONTW structs, so if converting the UTF-16
+face name in the LOGFONTW struct to system codepage fails, the
+returned LOGFONTA will have an emppty face name. To get the
+LOGFONTW of a PangoFont, use <a class="link" href="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw" title="pango_win32_font_logfontw ()"><code class="function">pango_win32_font_logfontw()</code></a>. It
+is recommended to do that always even if you don't expect
+to come across fonts with odd names.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> which must be from the Win32 backend
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A newly allocated LOGFONTA struct. It must be
+freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-logfontw"></a><h3>pango_win32_font_logfontw ()</h3>
+<pre class="programlisting">LOGFONTW *          pango_win32_font_logfontw           (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Determine the LOGFONTW struct for the specified font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> which must be from the Win32 backend
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A newly allocated LOGFONTW struct. It must be
+freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-description-from-logfont"></a><h3>pango_win32_font_description_from_logfont ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_win32_font_description_from_logfont
+                                                        (const LOGFONTA *lfp);</pre>
+<p>
+Creates a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> that matches the specified LOGFONTA.
+</p>
+<p>
+The face name, italicness and weight fields in the LOGFONTA are used
+to set up the resulting <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>. If the face name in
+the LOGFONTA contains non-ASCII characters the font is temporarily
+loaded (using <code class="function">CreateFontIndirect()</code>) and an ASCII (usually English)
+name for it is looked up from the font name tables in the font
+data. If that doesn't work, the face name is converted from the
+system codepage to UTF-8 and that is used.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lfp</code></em> :</span></p></td>
+<td> a LOGFONTA
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, which
+ should be freed using <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.12</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-win32-font-description-from-logfontw"></a><h3>pango_win32_font_description_from_logfontw ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription">PangoFontDescription</a> * pango_win32_font_description_from_logfontw
+                                                        (const LOGFONTW *lfp);</pre>
+<p>
+Creates a <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a> that matches the specified LOGFONTW.
+</p>
+<p>
+The face name, italicness and weight fields in the LOGFONTW are used
+to set up the resulting <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>. If the face name in
+the LOGFONTW contains non-ASCII characters the font is temporarily
+loaded (using <code class="function">CreateFontIndirect()</code>) and an ASCII (usually English)
+name for it is looked up from the font name tables in the font
+data. If that doesn't work, the face name is converted from UTF-16
+to UTF-8 and that is used.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>lfp</code></em> :</span></p></td>
+<td> a LOGFONTW
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly allocated <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>, which
+ should be freed using <a class="link" href="pango-Fonts.html#pango-font-description-free" title="pango_font_description_free ()"><code class="function">pango_font_description_free()</code></a>
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.16</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-X-Fonts-and-Rendering.html b/docs/html/pango-X-Fonts-and-Rendering.html
new file mode 100755 (executable)
index 0000000..90d3929
--- /dev/null
@@ -0,0 +1,1186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Deprecated X font backend</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="rendering.html" title="Rendering with Pango">
+<link rel="prev" href="pango-ATSUI-Fonts.html" title="ATSUI Fonts">
+<link rel="next" href="lowlevel.html" title="Low Level Functionality">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-ATSUI-Fonts.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="rendering.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="lowlevel.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-X-Fonts-and-Rendering.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-X-Fonts-and-Rendering.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-X-Fonts-and-Rendering"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-X-Fonts-and-Rendering.top_of_page"></a>Deprecated X font backend</span></h2>
+<p>Deprecated X font backend — Font handling and rendering with the deprecated X font backend</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-X-Fonts-and-Rendering.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">
+#define             <a class="link" href="pango-X-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-X--CAPS" title="PANGO_RENDER_TYPE_X">PANGO_RENDER_TYPE_X</a>
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-get-context" title="pango_x_get_context ()">pango_x_get_context</a>                 (Display *display);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-context-set-funcs" title="pango_x_context_set_funcs ()">pango_x_context_set_funcs</a>           (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc" title="PangoGetGCFunc ()">PangoGetGCFunc</a> get_gc_func,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc" title="PangoFreeGCFunc ()">PangoFreeGCFunc</a> free_gc_func);
+GC                  (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc" title="PangoGetGCFunc ()">*PangoGetGCFunc</a>)                   (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color,
+                                                         GC base_gc);
+void                (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc" title="PangoFreeGCFunc ()">*PangoFreeGCFunc</a>)                  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         GC gc);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-render" title="pango_x_render ()">pango_x_render</a>                      (Display *display,
+                                                         Drawable d,
+                                                         GC gc,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-render-layout-line" title="pango_x_render_layout_line ()">pango_x_render_layout_line</a>          (Display *display,
+                                                         Drawable drawable,
+                                                         GC gc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-render-layout" title="pango_x_render_layout ()">pango_x_render_layout</a>               (Display *display,
+                                                         Drawable drawable,
+                                                         GC gc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);
+typedef             <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a>;
+#define             <a class="link" href="pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS" title="PANGO_X_MAKE_GLYPH()">PANGO_X_MAKE_GLYPH</a>                  (subfont,index_)
+#define             <a class="link" href="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-SUBFONT--CAPS" title="PANGO_X_GLYPH_SUBFONT()">PANGO_X_GLYPH_SUBFONT</a>               (glyph)
+#define             <a class="link" href="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-INDEX--CAPS" title="PANGO_X_GLYPH_INDEX()">PANGO_X_GLYPH_INDEX</a>                 (glyph)
+<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-load-font" title="pango_x_load_font ()">pango_x_load_font</a>                   (Display *display,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *spec);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-get-unknown-glyph" title="pango_x_get_unknown_glyph ()">pango_x_get_unknown_glyph</a>           (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-has-glyph" title="pango_x_has_glyph ()">pango_x_has_glyph</a>                   (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> glyph);
+int                 <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-list-subfonts" title="pango_x_list_subfonts ()">pango_x_list_subfonts</a>               (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         char **charsets,
+                                                         int n_charsets,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> **subfont_ids,
+                                                         int **subfont_charsets);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display" title="pango_x_font_map_for_display ()">pango_x_font_map_for_display</a>        (Display *display);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display" title="pango_x_shutdown_display ()">pango_x_shutdown_display</a>            (Display *display);
+<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *   <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-get-font-cache" title="pango_x_font_map_get_font_cache ()">pango_x_font_map_get_font_cache</a>     (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *font_map);
+char *              <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-subfont-xlfd" title="pango_x_font_subfont_xlfd ()">pango_x_font_subfont_xlfd</a>           (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> subfont_id);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-find-first-subfont" title="pango_x_find_first_subfont ()">pango_x_find_first_subfont</a>          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         char **charsets,
+                                                         int n_charsets,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> *rfont);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-get-unknown-glyph" title="pango_x_font_get_unknown_glyph ()">pango_x_font_get_unknown_glyph</a>      (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-apply-ligatures" title="pango_x_apply_ligatures ()">pango_x_apply_ligatures</a>             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> subfont,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> **glyphs,
+                                                         int *n_glyphs,
+                                                         int **clusters);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-fallback-shape" title="pango_x_fallback_shape ()">pango_x_fallback_shape</a>              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         const char *text,
+                                                         int n_chars);
+                    <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a>;
+<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *   <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-new" title="pango_x_font_cache_new ()">pango_x_font_cache_new</a>              (Display *display);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free" title="pango_x_font_cache_free ()">pango_x_font_cache_free</a>             (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *cache);
+XFontStruct *       <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load" title="pango_x_font_cache_load ()">pango_x_font_cache_load</a>             (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *cache,
+                                                         const char *xlfd);
+void                <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload" title="pango_x_font_cache_unload ()">pango_x_font_cache_unload</a>           (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *cache,
+                                                         XFontStruct *fs);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-X-Fonts-and-Rendering.description"></a><h2>Description</h2>
+<p>
+The functions and macros in this section are for use with the old
+X font backend which used server-side bitmap fonts. This font backend
+is no longer supported, and attempts to use it will produce
+unpredictable results. Use the <a class="link" href="pango-Xft-Fonts-and-Rendering.html" title="Xft Fonts and Rendering">Xft</a>
+or <a class="link" href="pango-Cairo-Rendering.html" title="Cairo Rendering">Cairo</a> backend instead.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-X-Fonts-and-Rendering.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-X--CAPS"></a><h3>PANGO_RENDER_TYPE_X</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_X "PangoRenderX"
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PANGO_RENDER_TYPE_X</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+A string constant identifying the X renderer. The associated quark (see
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Quarks.html#g-quark-from-string"
+><code class="function">g_quark_from_string()</code></a>) is used to identify the renderer in <a class="link" href="pango-Modules.html#pango-find-map" title="pango_find_map ()"><code class="function">pango_find_map()</code></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-get-context"></a><h3>pango_x_get_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_x_get_context                 (Display *display);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_get_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display" title="pango_x_font_map_for_display ()"><code class="function">pango_x_font_map_for_display()</code></a> followed by
+<a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Retrieves a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> appropriate for rendering with X fonts on the
+given display.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X display (As returned by <code class="function">XOpenDisplay()</code>.)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-context-set-funcs"></a><h3>pango_x_context_set_funcs ()</h3>
+<pre class="programlisting">void                pango_x_context_set_funcs           (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc" title="PangoGetGCFunc ()">PangoGetGCFunc</a> get_gc_func,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc" title="PangoFreeGCFunc ()">PangoFreeGCFunc</a> free_gc_func);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_context_set_funcs</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Sets the functions that will be used to get GC's in various colors when
+rendering layouts with this context.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>get_gc_func</code></em> :</span></p></td>
+<td> function called to create a new GC for a given color.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>free_gc_func</code></em> :</span></p></td>
+<td> function called to free a GC created with <em class="parameter"><code>get_gc_func</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoGetGCFunc"></a><h3>PangoGetGCFunc ()</h3>
+<pre class="programlisting">GC                  (*PangoGetGCFunc)                   (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *color,
+                                                         GC base_gc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PangoGetGCFunc</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Specifies the type of the function used to create a new GC for a given
+color.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td>the color to create a new GC for.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>base_gc</code></em> :</span></p></td>
+<td>the GC to base the new GC on.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the new GC.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoFreeGCFunc"></a><h3>PangoFreeGCFunc ()</h3>
+<pre class="programlisting">void                (*PangoFreeGCFunc)                  (<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *context,
+                                                         GC gc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PangoFreeGCFunc</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Specifies the type of the function used to free a GC created with
+the corresponding <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc" title="PangoGetGCFunc ()"><span class="type">PangoGetGCFunc</span></a> function.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>context</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gc</code></em> :</span></p></td>
+<td>the GC to free.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-render"></a><h3>pango_x_render ()</h3>
+<pre class="programlisting">void                pango_x_render                      (Display *display,
+                                                         Drawable d,
+                                                         GC gc,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_render</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto an X drawable.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> the X display.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>d</code></em> :</span></p></td>
+<td>       the drawable on which to draw string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gc</code></em> :</span></p></td>
+<td>      the graphics context.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of start of string (in pixels).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of baseline (in pixels).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-render-layout-line"></a><h3>pango_x_render_layout_line ()</h3>
+<pre class="programlisting">void                pango_x_render_layout_line          (Display *display,
+                                                         Drawable drawable,
+                                                         GC gc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_render_layout_line</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Renders a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> onto an X drawable.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td>   the X display.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>drawable</code></em> :</span></p></td>
+<td>  the drawable on which to draw.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gc</code></em> :</span></p></td>
+<td>        GC to use for uncolored drawing.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the x position of start of string (in pixels).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the y position of baseline (in pixels).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-render-layout"></a><h3>pango_x_render_layout ()</h3>
+<pre class="programlisting">void                pango_x_render_layout               (Display *display,
+                                                         Drawable drawable,
+                                                         GC gc,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_render_layout</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Renders a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> onto an X drawable.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td>   the X display.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>drawable</code></em> :</span></p></td>
+<td>  the drawable on which to draw.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>gc</code></em> :</span></p></td>
+<td>        GC to use for uncolored drawing.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the x position of the left of the layout (in pixels).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the y position of the top of the layout (in pixels).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXSubfont"></a><h3>PangoXSubfont</h3>
+<pre class="programlisting">typedef guint16 PangoXSubfont;
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PangoXSubfont</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+The <span class="type">PangoXSubFont</span> type is an integer ID that identifies one
+particular X font within the fonts referenced in a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-X-MAKE-GLYPH--CAPS"></a><h3>PANGO_X_MAKE_GLYPH()</h3>
+<pre class="programlisting">#define PANGO_X_MAKE_GLYPH(subfont,index_) ((subfont)&lt;&lt;16 | (index_))
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PANGO_X_MAKE_GLYPH</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Make a glyph index from a <span class="type">PangoXSubFont</span> index and a index
+of a character with the corresponding X font.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>subfont</code></em> :</span></p></td>
+<td>a <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont"><span class="type">PangoXSubfont</span></a> index
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>index_</code></em> :</span></p></td>
+<td>the index of a character within an X font.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-X-GLYPH-SUBFONT--CAPS"></a><h3>PANGO_X_GLYPH_SUBFONT()</h3>
+<pre class="programlisting">#define PANGO_X_GLYPH_SUBFONT(glyph) ((glyph)&gt;&gt;16)
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PANGO_X_GLYPH_SUBFONT</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Extract the subfont index from a glyph index.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>glyph</code></em> :</span></p></td>
+<td>a <span class="type">PangoGlyphIndex</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-X-GLYPH-INDEX--CAPS"></a><h3>PANGO_X_GLYPH_INDEX()</h3>
+<pre class="programlisting">#define PANGO_X_GLYPH_INDEX(glyph) ((glyph) &amp; 0xffff)
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PANGO_X_GLYPH_INDEX</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Extract the character index within the X font from a
+glyph index.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>glyph</code></em> :</span></p></td>
+<td>a <span class="type">PangoGlyphIndex</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-load-font"></a><h3>pango_x_load_font ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *         pango_x_load_font                   (Display *display,
+                                                         const <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"
+>gchar</a> *spec);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_load_font</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Loads up a logical font based on a "fontset" style text
+specification. This is not remotely useful (Pango API's generally
+work in terms of <a class="link" href="pango-Fonts.html#PangoFontDescription" title="PangoFontDescription"><span class="type">PangoFontDescription</span></a>) and the result may not
+work correctly in all circumstances. Use of this function should
+be avoided.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> the X display.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>spec</code></em> :</span></p></td>
+<td>    a comma-separated list of XLFD's.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a new <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-get-unknown-glyph"></a><h3>pango_x_get_unknown_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_x_get_unknown_glyph           (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_get_unknown_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns the index of a glyph suitable for drawing unknown characters;
+you should generally use <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()"><code class="function">PANGO_GET_UNKNOWN_GLYPH()</code></a> instead,
+since that may return a glyph that provides a better representation
+of a particular char. (E.g., by showing hex digits, or a glyph
+representative of a certain Unicode range.)</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a glyph index into <em class="parameter"><code>font</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-has-glyph"></a><h3>pango_x_has_glyph ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_x_has_glyph                   (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a> glyph);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_has_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Checks if the given glyph is present in a X font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> which must be from the X backend.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyph</code></em> :</span></p></td>
+<td> the index of a glyph in the font. (Formed
+        using the <a class="link" href="pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS" title="PANGO_X_MAKE_GLYPH()"><span class="type">PANGO_X_MAKE_GLYPH</span></a> macro)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if the glyph is present.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-list-subfonts"></a><h3>pango_x_list_subfonts ()</h3>
+<pre class="programlisting">int                 pango_x_list_subfonts               (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         char **charsets,
+                                                         int n_charsets,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> **subfont_ids,
+                                                         int **subfont_charsets);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_list_subfonts</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Lists the subfonts of a given font. The result is ordered first by charset,
+and then within each charset, by the order of fonts in the font specification.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>charsets</code></em> :</span></p></td>
+<td> the charsets to list subfonts for.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_charsets</code></em> :</span></p></td>
+<td> the number of charsets in <em class="parameter"><code>charsets</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>subfont_ids</code></em> :</span></p></td>
+<td> location to store a pointer to an array of subfont IDs for each found subfont;
+              the result must be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>subfont_charsets</code></em> :</span></p></td>
+<td> location to store a pointer to an array of subfont IDs for each found subfont;
+              the result must be freed using <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> length of the arrays stored in <em class="parameter"><code>subfont_ids</code></em> and
+<em class="parameter"><code>subfont_charsets</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-map-for-display"></a><h3>pango_x_font_map_for_display ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_x_font_map_for_display        (Display *display);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_map_for_display</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns a <span class="type">PangoXFontMap</span> for <em class="parameter"><code>display</code></em>. Font maps are cached and should
+not be freed. If the font map for a display is no longer needed, it can
+be released with <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display" title="pango_x_shutdown_display ()"><code class="function">pango_x_shutdown_display()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X <span class="type">Display</span>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <span class="type">PangoXFontMap</span> for <em class="parameter"><code>display</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-shutdown-display"></a><h3>pango_x_shutdown_display ()</h3>
+<pre class="programlisting">void                pango_x_shutdown_display            (Display *display);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_shutdown_display</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Free cached resources for the given X display structure.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X <span class="type">Display</span>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-map-get-font-cache"></a><h3>pango_x_font_map_get_font_cache ()</h3>
+<pre class="programlisting"><a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *   pango_x_font_map_get_font_cache     (<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *font_map);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_map_get_font_cache</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Obtains the font cache associated with the given font map.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font_map</code></em> :</span></p></td>
+<td> a <span class="type">PangoXFontMap</span>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a> of <em class="parameter"><code>font_map</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-subfont-xlfd"></a><h3>pango_x_font_subfont_xlfd ()</h3>
+<pre class="programlisting">char *              pango_x_font_subfont_xlfd           (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> subfont_id);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_subfont_xlfd</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Determines the X Logical Font Description for the specified
+subfont.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> which must be from the X backend.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>subfont_id</code></em> :</span></p></td>
+<td> the id of a subfont within the font.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> A newly-allocated string containing the XLFD for the
+subfont. This string must be freed with <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"
+><code class="function">g_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-find-first-subfont"></a><h3>pango_x_find_first_subfont ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_x_find_first_subfont          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         char **charsets,
+                                                         int n_charsets,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> *rfont);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_find_first_subfont</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Looks for subfonts with the <em class="parameter"><code>charset</code></em> charset,
+in <em class="parameter"><code>font</code></em>, and puts the first one in *<em class="parameter"><code>rfont</code></em>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> A <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>charsets</code></em> :</span></p></td>
+<td> An array of charsets.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_charsets</code></em> :</span></p></td>
+<td> The number of charsets in <em class="parameter"><code>charsets</code></em>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>rfont</code></em> :</span></p></td>
+<td> A pointer to a <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont"><span class="type">PangoXSubfont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if *<em class="parameter"><code>rfont</code></em> now contains a font.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-get-unknown-glyph"></a><h3>pango_x_font_get_unknown_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_x_font_get_unknown_glyph      (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_get_unknown_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns the index of a glyph suitable for drawing <em class="parameter"><code>wc</code></em> as an
+unknown character.
+</p>
+<p>
+Use <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()"><code class="function">PANGO_GET_UNKNOWN_GLYPH()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> the Unicode character for which a glyph is needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a glyph index into <em class="parameter"><code>font</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-apply-ligatures"></a><h3>pango_x_apply_ligatures ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_x_apply_ligatures             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXSubfont" title="PangoXSubfont">PangoXSubfont</a> subfont,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> **glyphs,
+                                                         int *n_glyphs,
+                                                         int **clusters);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_apply_ligatures</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Previously did subfont-specific ligation. Now a no-op.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> unused
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>subfont</code></em> :</span></p></td>
+<td> unused
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> unused
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_glyphs</code></em> :</span></p></td>
+<td> unused
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>clusters</code></em> :</span></p></td>
+<td> unused
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE--CAPS"
+><code class="literal">FALSE</code></a>, always.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-fallback-shape"></a><h3>pango_x_fallback_shape ()</h3>
+<pre class="programlisting">void                pango_x_fallback_shape              (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         const char *text,
+                                                         int n_chars);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_fallback_shape</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+This is a simple fallback shaper, that can be used
+if no subfont that supports a given script is found.
+For every character in <em class="parameter"><code>text</code></em>, it puts the unknown glyph.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> A <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td> A pointer to a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>text</code></em> :</span></p></td>
+<td> UTF-8 string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>n_chars</code></em> :</span></p></td>
+<td> Number of UTF-8 seqs in <em class="parameter"><code>text</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXFontCache"></a><h3>PangoXFontCache</h3>
+<pre class="programlisting">typedef struct _PangoXFontCache PangoXFontCache;</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PangoXFontCache</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+A <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a> caches
+<span class="type">XFontStructs</span> for a single display by their XLFD name.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-cache-new"></a><h3>pango_x_font_cache_new ()</h3>
+<pre class="programlisting"><a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *   pango_x_font_cache_new              (Display *display);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_cache_new</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Creates a font cache for the specified display.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X display.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The newly allocated <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a>, which should be
+              freed with <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free" title="pango_x_font_cache_free ()"><code class="function">pango_x_font_cache_free()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-cache-free"></a><h3>pango_x_font_cache_free ()</h3>
+<pre class="programlisting">void                pango_x_font_cache_free             (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *cache);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_cache_free</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Frees a <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a> and all associated memory. All fonts loaded
+through this font cache will be freed along with the cache.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a>
+</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-cache-load"></a><h3>pango_x_font_cache_load ()</h3>
+<pre class="programlisting">XFontStruct *       pango_x_font_cache_load             (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *cache,
+                                                         const char *xlfd);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_cache_load</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Loads a <span class="type">XFontStruct</span> from a X Logical Font Description. The
+result may be newly loaded, or it may have been previously
+stored.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>xlfd</code></em> :</span></p></td>
+<td> the X Logical Font Description to load.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> The font structure, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if the font could
+not be loaded. In order to free this structure, you must call
+<a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload" title="pango_x_font_cache_unload ()"><code class="function">pango_x_font_cache_unload()</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-x-font-cache-unload"></a><h3>pango_x_font_cache_unload ()</h3>
+<pre class="programlisting">void                pango_x_font_cache_unload           (<a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache">PangoXFontCache</a> *cache,
+                                                         XFontStruct *fs);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_x_font_cache_unload</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Frees a font structure previously loaded with <a class="link" href="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load" title="pango_x_font_cache_load ()"><code class="function">pango_x_font_cache_load()</code></a>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cache</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-X-Fonts-and-Rendering.html#PangoXFontCache" title="PangoXFontCache"><span class="type">PangoXFontCache</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fs</code></em> :</span></p></td>
+<td> the font structure to unload
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-Xft-Fonts-and-Rendering.html b/docs/html/pango-Xft-Fonts-and-Rendering.html
new file mode 100755 (executable)
index 0000000..15532d3
--- /dev/null
@@ -0,0 +1,1147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Xft Fonts and Rendering</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="rendering.html" title="Rendering with Pango">
+<link rel="prev" href="pango-FreeType-Fonts-and-Rendering.html" title="FreeType Fonts and Rendering">
+<link rel="next" href="pango-Cairo-Rendering.html" title="Cairo Rendering">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="pango-FreeType-Fonts-and-Rendering.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="rendering.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Cairo-Rendering.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#pango-Xft-Fonts-and-Rendering.synopsis" class="shortcut">Top</a>
+                 | 
+                <a href="#pango-Xft-Fonts-and-Rendering.description" class="shortcut">Description</a>
+                 | 
+                <a href="#pango-Xft-Fonts-and-Rendering.object-hierarchy" class="shortcut">Object Hierarchy</a>
+                 | 
+                <a href="#pango-Xft-Fonts-and-Rendering.properties" class="shortcut">Properties</a>
+</td></tr>
+</table>
+<div class="refentry" lang="en">
+<a name="pango-Xft-Fonts-and-Rendering"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="pango-Xft-Fonts-and-Rendering.top_of_page"></a>Xft Fonts and Rendering</span></h2>
+<p>Xft Fonts and Rendering — Font handling and rendering with the Xft backend</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="pango-Xft-Fonts-and-Rendering.synopsis"></a><h2>Synopsis</h2>
+<a name="PangoXftFont"></a><a name="PangoXftFontMap"></a><a name="PangoXftRenderer"></a><pre class="synopsis">
+                    <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFont-struct" title="PangoXftFont">PangoXftFont</a>;
+                    <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap-struct" title="PangoXftFontMap">PangoXftFontMap</a>;
+#define             <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-XFT--CAPS" title="PANGO_RENDER_TYPE_XFT">PANGO_RENDER_TYPE_XFT</a>
+<a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context" title="pango_xft_get_context ()">pango_xft_get_context</a>               (Display *display,
+                                                         int screen);
+<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map" title="pango_xft_get_font_map ()">pango_xft_get_font_map</a>              (Display *display,
+                                                         int screen);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute" title="pango_xft_set_default_substitute ()">pango_xft_set_default_substitute</a>    (Display *display,
+                                                         int screen,
+                                                         <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc" title="PangoXftSubstituteFunc ()">PangoXftSubstituteFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> notify);
+void                (<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc" title="PangoXftSubstituteFunc ()">*PangoXftSubstituteFunc</a>)           (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed" title="pango_xft_substitute_changed ()">pango_xft_substitute_changed</a>        (Display *display,
+                                                         int screen);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-shutdown-display" title="pango_xft_shutdown_display ()">pango_xft_shutdown_display</a>          (Display *display,
+                                                         int screen);
+XftFont *           <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-font" title="pango_xft_font_get_font ()">pango_xft_font_get_font</a>             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+Display *           <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-display" title="pango_xft_font_get_display ()">pango_xft_font_get_display</a>          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char" title="pango_xft_font_has_char ()">pango_xft_font_has_char</a>             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+FT_Face             <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face" title="pango_xft_font_lock_face ()">pango_xft_font_lock_face</a>            (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face" title="pango_xft_font_unlock_face ()">pango_xft_font_unlock_face</a>          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);
+<a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph" title="pango_xft_font_get_glyph ()">pango_xft_font_get_glyph</a>            (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+<a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-unknown-glyph" title="pango_xft_font_get_unknown_glyph ()">pango_xft_font_get_unknown_glyph</a>    (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);
+                    <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer-struct" title="PangoXftRenderer">PangoXftRenderer</a>;
+                    <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass" title="PangoXftRendererClass">PangoXftRendererClass</a>;
+<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *     <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-new" title="pango_xft_renderer_new ()">pango_xft_renderer_new</a>              (Display *display,
+                                                         int screen);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw" title="pango_xft_renderer_set_draw ()">pango_xft_renderer_set_draw</a>         (<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">PangoXftRenderer</a> *xftrenderer,
+                                                         XftDraw *draw);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-default-color" title="pango_xft_renderer_set_default_color ()">pango_xft_renderer_set_default_color</a>
+                                                        (<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">PangoXftRenderer</a> *xftrenderer,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *default_color);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render" title="pango_xft_render ()">pango_xft_render</a>                    (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-picture-render" title="pango_xft_picture_render ()">pango_xft_picture_render</a>            (Display *display,
+                                                         Picture src_picture,
+                                                         Picture dest_picture,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-transformed" title="pango_xft_render_transformed ()">pango_xft_render_transformed</a>        (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout-line" title="pango_xft_render_layout_line ()">pango_xft_render_layout_line</a>        (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);
+void                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout" title="pango_xft_render_layout ()">pango_xft_render_layout</a>             (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Xft-Fonts-and-Rendering.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a>
+         +----<a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a>
+               +----PangoXftFont
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a>
+         +----<a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a>
+               +----PangoXftFontMap
+</pre>
+<pre class="synopsis">
+  <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+   +----<a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a>
+         +----PangoXftRenderer
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Xft-Fonts-and-Rendering.properties"></a><h2>Properties</h2>
+<pre class="synopsis">
+  "<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--display" title='The "display" property'>display</a>"                  <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>              : Write / Construct Only
+  "<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--screen" title='The "screen" property'>screen</a>"                   <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                  : Write / Construct Only
+</pre>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Xft-Fonts-and-Rendering.description"></a><h2>Description</h2>
+<p>
+The Xft library is a library for displaying fonts on the X window
+system; internally it uses the fontconfig library to locate font
+files, and the FreeType library to load and render fonts. The
+Xft backend is the recommended Pango font backend for screen
+display with X. (The <a class="link" href="pango-Cairo-Rendering.html" title="Cairo Rendering">Cairo back end</a> is another possibility.)
+</p>
+<p>
+Using the Xft backend is generally straightforward;
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context" title="pango_xft_get_context ()"><code class="function">pango_xft_get_context()</code></a> creates a context for a specified display
+and screen. You can then create a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> with that context
+and render it with <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout" title="pango_xft_render_layout ()"><code class="function">pango_xft_render_layout()</code></a>. At a more advanced
+level, the low-level fontconfig options used for rendering fonts
+can be affected using <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute" title="pango_xft_set_default_substitute ()"><code class="function">pango_xft_set_default_substitute()</code></a>, and
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed" title="pango_xft_substitute_changed ()"><code class="function">pango_xft_substitute_changed()</code></a>.
+</p>
+<p>
+A range of functions for drawing pieces of a layout, such as
+individual layout lines and glyphs strings are provided.  You can also
+directly create a <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a>. Finally, in some advanced cases, it
+is useful to derive from <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a>. Deriving from
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a> is useful for two reasons. One reason is be to
+support custom attributes by overriding <a class="link" href="PangoRenderer.html#PangoRendererClass" title="PangoRendererClass"><span class="type">PangoRendererClass</span></a> virtual
+functions like 'prepare_run' or 'draw_shape'. The reason is to
+customize exactly how the final bits are drawn to the destination by
+overriding the <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass" title="PangoXftRendererClass"><span class="type">PangoXftRendererClass</span></a> virtual functions
+'composite_glyphs' and 'composite_trapezoids'.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Xft-Fonts-and-Rendering.details"></a><h2>Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoXftFont-struct"></a><h3>PangoXftFont</h3>
+<pre class="programlisting">typedef struct _PangoXftFont PangoXftFont;</pre>
+<p>
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFont"><span class="type">PangoXftFont</span></a> is an implementation of <a class="link" href="PangoFcFont.html" title="PangoFcFont"><span class="type">PangoFcFont</span></a> using the Xft
+library for rendering.  It is used in conjunction with <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap"><span class="type">PangoXftFontMap</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXftFontMap-struct"></a><h3>PangoXftFontMap</h3>
+<pre class="programlisting">typedef struct _PangoXftFontMap PangoXftFontMap;</pre>
+<p>
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap"><span class="type">PangoXftFontMap</span></a> is an implementation of <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap"><span class="type">PangoFcFontMap</span></a> suitable for
+the Xft library as the renderer.  It is used in to create fonts of
+type <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFont"><span class="type">PangoXftFont</span></a>.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PANGO-RENDER-TYPE-XFT--CAPS"></a><h3>PANGO_RENDER_TYPE_XFT</h3>
+<pre class="programlisting">#define PANGO_RENDER_TYPE_XFT "PangoRenderXft"
+</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">PANGO_RENDER_TYPE_XFT</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+A string constant that was used to identify shape engines that work
+with the Xft backend. See <a class="link" href="PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS" title="PANGO_RENDER_TYPE_FC"><code class="literal">PANGO_RENDER_TYPE_FC</code></a> for the replacement.
+</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-get-context"></a><h3>pango_xft_get_context ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a> *      pango_xft_get_context               (Display *display,
+                                                         int screen);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_xft_get_context</code> has been deprecated since version 1.22 and should not be used in newly-written code. Use <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map" title="pango_xft_get_font_map ()"><code class="function">pango_xft_get_font_map()</code></a> followed by
+<a class="link" href="pango-Fonts.html#pango-font-map-create-context" title="pango_font_map_create_context ()"><code class="function">pango_font_map_create_context()</code></a> instead.</p>
+</div>
+<p>
+Retrieves a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> appropriate for rendering with
+Xft fonts on the given screen of the given display.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X display.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>screen</code></em> :</span></p></td>
+<td> an X screen.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the new <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-get-font-map"></a><h3>pango_xft_get_font_map ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a> *      pango_xft_get_font_map              (Display *display,
+                                                         int screen);</pre>
+<p>
+Returns the <span class="type">PangoXftFontmap</span> for the given display and screen.
+The fontmap is owned by Pango and will be valid until
+the display is closed.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X display
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>screen</code></em> :</span></p></td>
+<td> the screen number of a screen within <em class="parameter"><code>display</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFontMap"><span class="type">PangoFontMap</span></a> object, owned by Pango.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-set-default-substitute"></a><h3>pango_xft_set_default_substitute ()</h3>
+<pre class="programlisting">void                pango_xft_set_default_substitute    (Display *display,
+                                                         int screen,
+                                                         <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc" title="PangoXftSubstituteFunc ()">PangoXftSubstituteFunc</a> func,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Datasets.html#GDestroyNotify"
+>GDestroyNotify</a> notify);</pre>
+<p>
+Sets a function that will be called to do final configuration
+substitution on a <span class="type">FcPattern</span> before it is used to load
+the font. This function can be used to do things like set
+hinting and antialiasing options.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X Display
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>screen</code></em> :</span></p></td>
+<td> the screen number of a screen within <em class="parameter"><code>display</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>func</code></em> :</span></p></td>
+<td> function to call to to do final config tweaking
+       on <span class="type">FcPattern</span> objects.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td> data to pass to <em class="parameter"><code>func</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>notify</code></em> :</span></p></td>
+<td> function to call when <em class="parameter"><code>data</code></em> is no longer used.
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXftSubstituteFunc"></a><h3>PangoXftSubstituteFunc ()</h3>
+<pre class="programlisting">void                (*PangoXftSubstituteFunc)           (FcPattern *pattern,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a> data);</pre>
+<p>
+Function type for doing final config tweaking on prepared FcPatterns.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pattern</code></em> :</span></p></td>
+<td>the FcPattern to tweak.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>user data.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-substitute-changed"></a><h3>pango_xft_substitute_changed ()</h3>
+<pre class="programlisting">void                pango_xft_substitute_changed        (Display *display,
+                                                         int screen);</pre>
+<p>
+Call this function any time the results of the
+default substitution function set with
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute" title="pango_xft_set_default_substitute ()"><code class="function">pango_xft_set_default_substitute()</code></a> change.
+That is, if your substitution function will return different
+results for the same input pattern, you must call this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X Display
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>screen</code></em> :</span></p></td>
+<td> the screen number of a screen within <em class="parameter"><code>display</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-shutdown-display"></a><h3>pango_xft_shutdown_display ()</h3>
+<pre class="programlisting">void                pango_xft_shutdown_display          (Display *display,
+                                                         int screen);</pre>
+<p>
+Release any resources that have been cached for the
+combination of <em class="parameter"><code>display</code></em> and <em class="parameter"><code>screen</code></em>. Note that when the
+X display is closed, resources are released automatically,
+without needing to call this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X display
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>screen</code></em> :</span></p></td>
+<td> the screen number of a screen within <em class="parameter"><code>display</code></em>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-get-font"></a><h3>pango_xft_font_get_font ()</h3>
+<pre class="programlisting">XftFont *           pango_xft_font_get_font             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Returns the XftFont of a font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the XftFont associated to <em class="parameter"><code>font</code></em>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> if <em class="parameter"><code>font</code></em> is <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-get-display"></a><h3>pango_xft_font_get_display ()</h3>
+<pre class="programlisting">Display *           pango_xft_font_get_display          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<p>
+Returns the X display of the XftFont of a font.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the X display of the XftFont associated to <em class="parameter"><code>font</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-has-char"></a><h3>pango_xft_font_has_char ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
+>gboolean</a>            pango_xft_font_has_char             (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_xft_font_has_char</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Determines whether <em class="parameter"><code>font</code></em> has a glyph for the codepoint <em class="parameter"><code>wc</code></em>.
+</p>
+<p>
+Use <a class="link" href="PangoFcFont.html#pango-fc-font-has-char" title="pango_fc_font_has_char ()"><code class="function">pango_fc_font_has_char()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> for the Xft backend
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> Unicode codepoint to look up
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE--CAPS"
+><code class="literal">TRUE</code></a> if <em class="parameter"><code>font</code></em> has the requested codepoint.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-lock-face"></a><h3>pango_xft_font_lock_face ()</h3>
+<pre class="programlisting">FT_Face             pango_xft_font_lock_face            (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_xft_font_lock_face</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Gets the FreeType <span class="type">FT_Face</span> associated with a font,
+This face will be kept around until you call
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face" title="pango_xft_font_unlock_face ()"><code class="function">pango_xft_font_unlock_face()</code></a>.
+</p>
+<p>
+Use <a class="link" href="PangoFcFont.html#pango-fc-font-lock-face" title="pango_fc_font_lock_face ()"><code class="function">pango_fc_font_lock_face()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the FreeType <span class="type">FT_Face</span> associated with <em class="parameter"><code>font</code></em>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-unlock-face"></a><h3>pango_xft_font_unlock_face ()</h3>
+<pre class="programlisting">void                pango_xft_font_unlock_face          (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_xft_font_unlock_face</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Releases a font previously obtained with
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face" title="pango_xft_font_lock_face ()"><code class="function">pango_xft_font_lock_face()</code></a>.
+</p>
+<p>
+Use <a class="link" href="PangoFcFont.html#pango-fc-font-unlock-face" title="pango_fc_font_unlock_face ()"><code class="function">pango_fc_font_unlock_face()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-get-glyph"></a><h3>pango_xft_font_get_glyph ()</h3>
+<pre class="programlisting"><a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"
+>guint</a>               pango_xft_font_get_glyph            (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_xft_font_get_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Gets the glyph index for a given Unicode character
+for <em class="parameter"><code>font</code></em>. If you only want to determine
+whether the font has the glyph, use <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char" title="pango_xft_font_has_char ()"><code class="function">pango_xft_font_has_char()</code></a>.
+</p>
+<p>
+Use <a class="link" href="PangoFcFont.html#pango-fc-font-get-glyph" title="pango_fc_font_get_glyph ()"><code class="function">pango_fc_font_get_glyph()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a> for the Xft backend
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> Unicode codepoint to look up
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the glyph index, or 0, if the Unicode
+ character does not exist in the font.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.2</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-font-get-unknown-glyph"></a><h3>pango_xft_font_get_unknown_glyph ()</h3>
+<pre class="programlisting"><a class="link" href="pango-Glyph-Storage.html#PangoGlyph" title="PangoGlyph">PangoGlyph</a>          pango_xft_font_get_unknown_glyph    (<a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Unicode-Manipulation.html#gunichar"
+>gunichar</a> wc);</pre>
+<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">pango_xft_font_get_unknown_glyph</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+Returns the index of a glyph suitable for drawing <em class="parameter"><code>wc</code></em> as an
+unknown character.
+</p>
+<p>
+Use <a class="link" href="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS" title="PANGO_GET_UNKNOWN_GLYPH()"><code class="function">PANGO_GET_UNKNOWN_GLYPH()</code></a> instead.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Fonts.html#PangoFont"><span class="type">PangoFont</span></a>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>wc</code></em> :</span></p></td>
+<td> the Unicode character for which a glyph is needed.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> a glyph index into <em class="parameter"><code>font</code></em>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXftRenderer-struct"></a><h3>PangoXftRenderer</h3>
+<pre class="programlisting">typedef struct _PangoXftRenderer PangoXftRenderer;</pre>
+<p>
+<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a> is a subclass of <a class="link" href="PangoRenderer.html" title="PangoRenderer"><span class="type">PangoRenderer</span></a> used for rendering
+with Pango's Xft backend. It can be used directly, or it can be
+further subclassed to modify exactly how drawing of individual
+elements occurs.</p>
+<p>
+</p>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXftRendererClass"></a><h3>PangoXftRendererClass</h3>
+<pre class="programlisting">typedef struct {
+  void (*composite_trapezoids) (PangoXftRenderer *xftrenderer,
+                               PangoRenderPart   part,
+                               XTrapezoid       *trapezoids,
+                               int               n_trapezoids);
+  void (*composite_glyphs)     (PangoXftRenderer *xftrenderer,
+                               XftFont          *xft_font,
+                               XftGlyphSpec     *glyphs,
+                               int               n_glyphs);
+} PangoXftRendererClass;
+</pre>
+<p>
+The class structure for <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>composite_trapezoids</code></em> ()</span></p></td>
+<td> draw the specified trapezoids using
+  the current color and other attributes for <em class="parameter"><code>part</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="structfield"><code>composite_glyphs</code></em> ()</span></p></td>
+<td> draw the specified glyphs using
+  the current foreground color and other foreground
+  attributes
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-renderer-new"></a><h3>pango_xft_renderer_new ()</h3>
+<pre class="programlisting"><a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a> *     pango_xft_renderer_new              (Display *display,
+                                                         int screen);</pre>
+<p>
+Create a new <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a> to allow rendering Pango objects
+with the Xft library. You must call <a class="link" href="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw" title="pango_xft_renderer_set_draw ()"><code class="function">pango_xft_renderer_set_draw()</code></a> before
+using the renderer.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td> an X display
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>screen</code></em> :</span></p></td>
+<td>   the index of the screen for <em class="parameter"><code>display</code></em> to which rendering will be done
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the newly created <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a>, which should
+              be freed with <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"
+><code class="function">g_object_unref()</code></a>.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-renderer-set-draw"></a><h3>pango_xft_renderer_set_draw ()</h3>
+<pre class="programlisting">void                pango_xft_renderer_set_draw         (<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">PangoXftRenderer</a> *xftrenderer,
+                                                         XftDraw *draw);</pre>
+<p>
+Sets the <span class="type">XftDraw</span> object that the renderer is drawing to.
+The renderer must not be currently active.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>xftrenderer</code></em> :</span></p></td>
+<td> a <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer"><span class="type">PangoXftRenderer</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>draw</code></em> :</span></p></td>
+<td> a <span class="type">XftDraw</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-renderer-set-default-color"></a><h3>pango_xft_renderer_set_default_color ()</h3>
+<pre class="programlisting">void                pango_xft_renderer_set_default_color
+                                                        (<a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">PangoXftRenderer</a> *xftrenderer,
+                                                         <a class="link" href="pango-Text-Attributes.html#PangoColor" title="PangoColor">PangoColor</a> *default_color);</pre>
+<p>
+Sets the default foreground color for a <span class="type">XftRenderer</span>.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>xftrenderer</code></em> :</span></p></td>
+<td> a <span class="type">XftRenderer</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>default_color</code></em> :</span></p></td>
+<td> the default foreground color
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-render"></a><h3>pango_xft_render ()</h3>
+<pre class="programlisting">void                pango_xft_render                    (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);</pre>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto an <span class="type">XftDraw</span> object wrapping an X drawable.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>draw</code></em> :</span></p></td>
+<td>    the <span class="type">XftDraw</span> object.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td>   the color in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of start of string (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of baseline (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-picture-render"></a><h3>pango_xft_picture_render ()</h3>
+<pre class="programlisting">void                pango_xft_picture_render            (Display *display,
+                                                         Picture src_picture,
+                                                         Picture dest_picture,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> x,
+                                                         <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a> y);</pre>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto an Xrender <span class="type">Picture</span> object.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>display</code></em> :</span></p></td>
+<td>      an X display
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src_picture</code></em> :</span></p></td>
+<td>  the source picture to draw the string with
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dest_picture</code></em> :</span></p></td>
+<td> the destination picture to draw the string onto
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>         the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>       the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>            the x position of start of string (in pixels)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>            the y position of baseline (in pixels)
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-render-transformed"></a><h3>pango_xft_render_transformed ()</h3>
+<pre class="programlisting">void                pango_xft_render_transformed        (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix">PangoMatrix</a> *matrix,
+                                                         <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a> *font,
+                                                         <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString">PangoGlyphString</a> *glyphs,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Renders a <a class="link" href="pango-Glyph-Storage.html#PangoGlyphString" title="PangoGlyphString"><span class="type">PangoGlyphString</span></a> onto a <span class="type">XftDraw</span>, possibly
+transforming the layed-out coordinates through a transformation
+matrix. Note that the transformation matrix for <em class="parameter"><code>font</code></em> is not
+changed, so to produce correct rendering results, the <em class="parameter"><code>font</code></em>
+must have been loaded using a <a class="link" href="pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a> with an identical
+transformation matrix to that passed in to this function.</p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>draw</code></em> :</span></p></td>
+<td>    an <span class="type">XftDraw</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td>   the color in which to draw the glyphs
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>matrix</code></em> :</span></p></td>
+<td>  a <a class="link" href="pango-Glyph-Storage.html#PangoMatrix" title="PangoMatrix"><span class="type">PangoMatrix</span></a>, or <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL--CAPS"
+><code class="literal">NULL</code></a> to use an identity transformation
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>font</code></em> :</span></p></td>
+<td>    the font in which to draw the string
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>glyphs</code></em> :</span></p></td>
+<td>  the glyph string to draw
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>       the x position of the start of the string (in Pango
+          units in user space coordinates)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>       the y position of the baseline (in Pango units
+          in user space coordinates)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-render-layout-line"></a><h3>pango_xft_render_layout_line ()</h3>
+<pre class="programlisting">void                pango_xft_render_layout_line        (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine">PangoLayoutLine</a> *line,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a> onto a <span class="type">XftDraw</span></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>draw</code></em> :</span></p></td>
+<td>      an <span class="type">XftDraw</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td>     the foreground color in which to draw the layout line
+            (may be overridden by color attributes)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>line</code></em> :</span></p></td>
+<td>      a <a class="link" href="pango-Layout-Objects.html#PangoLayoutLine" title="PangoLayoutLine"><span class="type">PangoLayoutLine</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the x position of start of string (in Pango units)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the y position of baseline (in Pango units)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="pango-xft-render-layout"></a><h3>pango_xft_render_layout ()</h3>
+<pre class="programlisting">void                pango_xft_render_layout             (XftDraw *draw,
+                                                         XftColor *color,
+                                                         <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout,
+                                                         int x,
+                                                         int y);</pre>
+<p>
+Render a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> onto a <span class="type">XftDraw</span></p>
+<p>
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>draw</code></em> :</span></p></td>
+<td>      an <span class="type">XftDraw</span>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>color</code></em> :</span></p></td>
+<td>     the foreground color in which to draw the layout
+            (may be overridden by color attributes)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>layout</code></em> :</span></p></td>
+<td>    a <a class="link" href="pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>x</code></em> :</span></p></td>
+<td>         the X position of the left of the layout (in Pango units)
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>y</code></em> :</span></p></td>
+<td>         the Y position of the top of the layout (in Pango units)
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.8</p>
+</div>
+</div>
+<div class="refsect1" lang="en">
+<a name="pango-Xft-Fonts-and-Rendering.property-details"></a><h2>Property Details</h2>
+<div class="refsect2" lang="en">
+<a name="PangoXftRenderer--display"></a><h3>The <code class="literal">"display"</code> property</h3>
+<pre class="programlisting">  "display"                  <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
+>gpointer</a>              : Write / Construct Only</pre>
+<p>The display being rendered to.</p>
+</div>
+<hr>
+<div class="refsect2" lang="en">
+<a name="PangoXftRenderer--screen"></a><h3>The <code class="literal">"screen"</code> property</h3>
+<pre class="programlisting">  "screen"                   <a
+href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"
+>gint</a>                  : Write / Construct Only</pre>
+<p>The screen being rendered to.</p>
+<p>Allowed values: &gt;= 0</p>
+<p>Default value: 0</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-hierarchy.html b/docs/html/pango-hierarchy.html
new file mode 100755 (executable)
index 0000000..dbe5fb2
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Object Hierarchy</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="pango-querymodules.html" title="pango-querymodules">
+<link rel="next" href="index-all.html" title="Index">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="pango-querymodules.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="index-all.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="pango-hierarchy"></a>Object Hierarchy</h2></div></div></div>
+<pre class="screen">
+    <a
+href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"
+>GObject</a>
+        <a class="link" href="pango-Fonts.html#PangoFontMap">PangoFontMap</a>
+            <a class="link" href="PangoFcFontMap.html" title="PangoFcFontMap">PangoFcFontMap</a>
+                <a class="link" href="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap">PangoFT2FontMap</a>
+                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap">PangoXftFontMap</a>
+        <a class="link" href="pango-Fonts.html#PangoFont">PangoFont</a>
+            <a class="link" href="PangoFcFont.html" title="PangoFcFont">PangoFcFont</a>
+                <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftFont">PangoXftFont</a>
+        <a class="link" href="pango-Text-Processing.html#PangoContext">PangoContext</a>
+        <a class="link" href="pango-Engines.html#PangoEngine">PangoEngine</a>
+            <a class="link" href="PangoEngineLang.html" title="PangoEngineLang">PangoEngineLang</a>
+            <a class="link" href="PangoEngineShape.html" title="PangoEngineShape">PangoEngineShape</a>
+        <a class="link" href="PangoFcDecoder.html" title="PangoFcDecoder">PangoFcDecoder</a>
+        <a class="link" href="pango-Fonts.html#PangoFontFace">PangoFontFace</a>
+        <a class="link" href="pango-Fonts.html#PangoFontFamily">PangoFontFamily</a>
+        <a class="link" href="pango-Fonts.html#PangoFontset">PangoFontset</a>
+            <a class="link" href="pango-Fonts.html#PangoFontsetSimple">PangoFontsetSimple</a>
+        <a class="link" href="pango-Layout-Objects.html#PangoLayout">PangoLayout</a>
+        <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTInfo">PangoOTInfo</a>
+        <a class="link" href="pango-OpenType-Font-Handling.html#PangoOTRuleset">PangoOTRuleset</a>
+        <a class="link" href="PangoRenderer.html" title="PangoRenderer">PangoRenderer</a>
+            <a class="link" href="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer">PangoXftRenderer</a>
+    GInterface
+        <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFontMap">PangoCairoFontMap</a>
+        <a class="link" href="pango-Cairo-Rendering.html#PangoCairoFont">PangoCairoFont</a>
+</pre>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango-querymodules.html b/docs/html/pango-querymodules.html
new file mode 100755 (executable)
index 0000000..566698c
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>pango-querymodules</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="tools.html" title="Pango Tools">
+<link rel="prev" href="tools.html" title="Pango Tools">
+<link rel="next" href="pango-hierarchy.html" title="Object Hierarchy">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="tools.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="tools.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-hierarchy.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry" lang="en">
+<a name="pango-querymodules"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">pango-querymodules</span></h2>
+<p>pango-querymodules — Module registration utility</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="cmdsynopsis"><p><code class="command">pango-querymodules</code>  [module...]</p></div>
+</div>
+<div class="refsect1" lang="en">
+<a name="Description"></a><h2>Description</h2>
+<p>
+<span class="command"><strong>pango-querymodules</strong></span> collects information about loadable 
+modules for Pango and writes it to <code class="filename">stdout</code>. 
+</p>
+<p>
+If called without arguments, it looks for modules in the Pango module path.  
+</p>
+<p>
+If called with arguments, it looks for the specified modules. The arguments
+may be absolute or relative paths.
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="Environment"></a><h2>Environment</h2>
+<p>
+The Pango module path is specified by the key
+<code class="literal">Pango/ModulesPath</code> in the Pango config database, which is
+read from
+      <code class="filename"><em class="replaceable"><code>sysconfdir</code></em>/pango/pangorc</code>,
+      <code class="filename">~/.pangorc</code> and the file specified in the environment
+      variable <code class="envar">PANGO_RC_FILE</code>. 
+</p>
+</div>
+<div class="refsect1" lang="en">
+<a name="Bugs"></a><h2>Bugs</h2>
+<p>
+None known yet.
+</p>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/pango.devhelp b/docs/html/pango.devhelp
new file mode 100755 (executable)
index 0000000..44e3e54
--- /dev/null
@@ -0,0 +1,797 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="Pango Reference Manual" link="index.html" author="" name="pango">
+  <chapters>
+    <sub name="Basic Pango Interfaces" link="pango.html">
+      <sub name="Rendering" link="pango-Text-Processing.html"/>
+      <sub name="Glyph Storage" link="pango-Glyph-Storage.html"/>
+      <sub name="Fonts" link="pango-Fonts.html"/>
+      <sub name="Text Attributes" link="pango-Text-Attributes.html"/>
+      <sub name="Tab Stops" link="pango-Tab-Stops.html"/>
+      <sub name="Text Attribute Markup" link="PangoMarkupFormat.html"/>
+      <sub name="Layout Objects" link="pango-Layout-Objects.html"/>
+      <sub name="Scripts and Languages" link="pango-Scripts-and-Languages.html"/>
+      <sub name="Bidirectional Text" link="pango-Bidirectional-Text.html"/>
+      <sub name="Vertical Text" link="pango-Vertical-Text.html"/>
+    </sub>
+    <sub name="Rendering with Pango" link="rendering.html">
+      <sub name="Win32 Fonts and Rendering" link="pango-Win32-Fonts-and-Rendering.html"/>
+      <sub name="FreeType Fonts and Rendering" link="pango-FreeType-Fonts-and-Rendering.html"/>
+      <sub name="Xft Fonts and Rendering" link="pango-Xft-Fonts-and-Rendering.html"/>
+      <sub name="Cairo Rendering" link="pango-Cairo-Rendering.html"/>
+      <sub name="ATSUI Fonts" link="pango-ATSUI-Fonts.html"/>
+      <sub name="Deprecated X font backend" link="pango-X-Fonts-and-Rendering.html"/>
+    </sub>
+    <sub name="Low Level Functionality" link="lowlevel.html">
+      <sub name="PangoRenderer" link="PangoRenderer.html"/>
+      <sub name="PangoFcFontMap" link="PangoFcFontMap.html"/>
+      <sub name="PangoFcFont" link="PangoFcFont.html"/>
+      <sub name="PangoFcDecoder" link="PangoFcDecoder.html"/>
+      <sub name="OpenType Font Handling" link="pango-OpenType-Font-Handling.html"/>
+      <sub name="Coverage Maps" link="pango-Coverage-Maps.html"/>
+      <sub name="Engines" link="pango-Engines.html"/>
+      <sub name="PangoEngineLang" link="PangoEngineLang.html"/>
+      <sub name="PangoEngineShape" link="PangoEngineShape.html"/>
+      <sub name="Modules" link="pango-Modules.html"/>
+      <sub name="Miscellaneous Utilities" link="pango-Miscellaneous-Utilities.html"/>
+      <sub name="Version Checking" link="pango-Version-Checking.html"/>
+    </sub>
+    <sub name="Pango Tools" link="tools.html">
+      <sub name="pango-querymodules" link="pango-querymodules.html"/>
+    </sub>
+    <sub name="Object Hierarchy" link="pango-hierarchy.html"/>
+    <sub name="Index" link="index-all.html"/>
+    <sub name="Index of deprecated symbols" link="index-deprecated.html"/>
+    <sub name="Index of new symbols in 1.2" link="index-1.2.html"/>
+    <sub name="Index of new symbols in 1.4" link="index-1.4.html"/>
+    <sub name="Index of new symbols in 1.6" link="index-1.6.html"/>
+    <sub name="Index of new symbols in 1.8" link="index-1.8.html"/>
+    <sub name="Index of new symbols in 1.10" link="index-1.10.html"/>
+    <sub name="Index of new symbols in 1.12" link="index-1.12.html"/>
+    <sub name="Index of new symbols in 1.14" link="index-1.14.html"/>
+    <sub name="Index of new symbols in 1.16" link="index-1.16.html"/>
+    <sub name="Index of new symbols in 1.18" link="index-1.18.html"/>
+    <sub name="Index of new symbols in 1.20" link="index-1.20.html"/>
+    <sub name="Index of new symbols in 1.22" link="index-1.22.html"/>
+    <sub name="Index of new symbols in 1.24" link="index-1.24.html"/>
+    <sub name="Index of new symbols in 1.26" link="index-1.26.html"/>
+  </chapters>
+  <functions>
+    <function name="PangoContext" link="pango-Text-Processing.html#PangoContext-struct"/>
+    <function name="PangoItem" link="pango-Text-Processing.html#PangoItem"/>
+    <function name="PangoAnalysis" link="pango-Text-Processing.html#PangoAnalysis"/>
+    <function name="PANGO_ANALYSIS_FLAG_CENTERED_BASELINE" link="pango-Text-Processing.html#PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS"/>
+    <function name="PANGO_TYPE_DIRECTION" link="pango-Text-Processing.html#PANGO-TYPE-DIRECTION--CAPS"/>
+    <function name="pango_itemize ()" link="pango-Text-Processing.html#pango-itemize"/>
+    <function name="pango_itemize_with_base_dir ()" link="pango-Text-Processing.html#pango-itemize-with-base-dir"/>
+    <function name="pango_item_free ()" link="pango-Text-Processing.html#pango-item-free"/>
+    <function name="pango_item_copy ()" link="pango-Text-Processing.html#pango-item-copy"/>
+    <function name="pango_item_new ()" link="pango-Text-Processing.html#pango-item-new"/>
+    <function name="pango_item_split ()" link="pango-Text-Processing.html#pango-item-split"/>
+    <function name="pango_reorder_items ()" link="pango-Text-Processing.html#pango-reorder-items"/>
+    <function name="pango_context_new ()" link="pango-Text-Processing.html#pango-context-new"/>
+    <function name="pango_context_set_font_map ()" link="pango-Text-Processing.html#pango-context-set-font-map"/>
+    <function name="pango_context_get_font_map ()" link="pango-Text-Processing.html#pango-context-get-font-map"/>
+    <function name="pango_context_get_font_description ()" link="pango-Text-Processing.html#pango-context-get-font-description"/>
+    <function name="pango_context_set_font_description ()" link="pango-Text-Processing.html#pango-context-set-font-description"/>
+    <function name="pango_context_get_language ()" link="pango-Text-Processing.html#pango-context-get-language"/>
+    <function name="pango_context_set_language ()" link="pango-Text-Processing.html#pango-context-set-language"/>
+    <function name="pango_context_get_base_dir ()" link="pango-Text-Processing.html#pango-context-get-base-dir"/>
+    <function name="pango_context_set_base_dir ()" link="pango-Text-Processing.html#pango-context-set-base-dir"/>
+    <function name="pango_context_get_base_gravity ()" link="pango-Text-Processing.html#pango-context-get-base-gravity"/>
+    <function name="pango_context_set_base_gravity ()" link="pango-Text-Processing.html#pango-context-set-base-gravity"/>
+    <function name="pango_context_get_gravity ()" link="pango-Text-Processing.html#pango-context-get-gravity"/>
+    <function name="pango_context_get_gravity_hint ()" link="pango-Text-Processing.html#pango-context-get-gravity-hint"/>
+    <function name="pango_context_set_gravity_hint ()" link="pango-Text-Processing.html#pango-context-set-gravity-hint"/>
+    <function name="pango_context_get_matrix ()" link="pango-Text-Processing.html#pango-context-get-matrix"/>
+    <function name="pango_context_set_matrix ()" link="pango-Text-Processing.html#pango-context-set-matrix"/>
+    <function name="pango_context_load_font ()" link="pango-Text-Processing.html#pango-context-load-font"/>
+    <function name="pango_context_load_fontset ()" link="pango-Text-Processing.html#pango-context-load-fontset"/>
+    <function name="pango_context_get_metrics ()" link="pango-Text-Processing.html#pango-context-get-metrics"/>
+    <function name="pango_context_list_families ()" link="pango-Text-Processing.html#pango-context-list-families"/>
+    <function name="pango_break ()" link="pango-Text-Processing.html#pango-break"/>
+    <function name="pango_get_log_attrs ()" link="pango-Text-Processing.html#pango-get-log-attrs"/>
+    <function name="pango_find_paragraph_boundary ()" link="pango-Text-Processing.html#pango-find-paragraph-boundary"/>
+    <function name="pango_default_break ()" link="pango-Text-Processing.html#pango-default-break"/>
+    <function name="PangoLogAttr" link="pango-Text-Processing.html#PangoLogAttr"/>
+    <function name="pango_shape ()" link="pango-Text-Processing.html#pango-shape"/>
+    <function name="PANGO_SCALE" link="pango-Glyph-Storage.html#PANGO-SCALE--CAPS"/>
+    <function name="PANGO_PIXELS()" link="pango-Glyph-Storage.html#PANGO-PIXELS--CAPS"/>
+    <function name="PANGO_PIXELS_FLOOR()" link="pango-Glyph-Storage.html#PANGO-PIXELS-FLOOR--CAPS"/>
+    <function name="PANGO_PIXELS_CEIL()" link="pango-Glyph-Storage.html#PANGO-PIXELS-CEIL--CAPS"/>
+    <function name="PANGO_UNITS_ROUND()" link="pango-Glyph-Storage.html#PANGO-UNITS-ROUND--CAPS"/>
+    <function name="pango_units_to_double ()" link="pango-Glyph-Storage.html#pango-units-to-double"/>
+    <function name="pango_units_from_double ()" link="pango-Glyph-Storage.html#pango-units-from-double"/>
+    <function name="PangoRectangle" link="pango-Glyph-Storage.html#PangoRectangle"/>
+    <function name="PANGO_ASCENT()" link="pango-Glyph-Storage.html#PANGO-ASCENT--CAPS"/>
+    <function name="PANGO_DESCENT()" link="pango-Glyph-Storage.html#PANGO-DESCENT--CAPS"/>
+    <function name="PANGO_LBEARING()" link="pango-Glyph-Storage.html#PANGO-LBEARING--CAPS"/>
+    <function name="PANGO_RBEARING()" link="pango-Glyph-Storage.html#PANGO-RBEARING--CAPS"/>
+    <function name="pango_extents_to_pixels ()" link="pango-Glyph-Storage.html#pango-extents-to-pixels"/>
+    <function name="PangoMatrix" link="pango-Glyph-Storage.html#PangoMatrix"/>
+    <function name="PANGO_TYPE_MATRIX" link="pango-Glyph-Storage.html#PANGO-TYPE-MATRIX--CAPS"/>
+    <function name="PANGO_MATRIX_INIT" link="pango-Glyph-Storage.html#PANGO-MATRIX-INIT--CAPS"/>
+    <function name="pango_matrix_copy ()" link="pango-Glyph-Storage.html#pango-matrix-copy"/>
+    <function name="pango_matrix_free ()" link="pango-Glyph-Storage.html#pango-matrix-free"/>
+    <function name="pango_matrix_translate ()" link="pango-Glyph-Storage.html#pango-matrix-translate"/>
+    <function name="pango_matrix_scale ()" link="pango-Glyph-Storage.html#pango-matrix-scale"/>
+    <function name="pango_matrix_rotate ()" link="pango-Glyph-Storage.html#pango-matrix-rotate"/>
+    <function name="pango_matrix_concat ()" link="pango-Glyph-Storage.html#pango-matrix-concat"/>
+    <function name="pango_matrix_transform_point ()" link="pango-Glyph-Storage.html#pango-matrix-transform-point"/>
+    <function name="pango_matrix_transform_distance ()" link="pango-Glyph-Storage.html#pango-matrix-transform-distance"/>
+    <function name="pango_matrix_transform_rectangle ()" link="pango-Glyph-Storage.html#pango-matrix-transform-rectangle"/>
+    <function name="pango_matrix_transform_pixel_rectangle ()" link="pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle"/>
+    <function name="pango_matrix_get_font_scale_factor ()" link="pango-Glyph-Storage.html#pango-matrix-get-font-scale-factor"/>
+    <function name="PangoGlyph" link="pango-Glyph-Storage.html#PangoGlyph"/>
+    <function name="PANGO_GLYPH_EMPTY" link="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS"/>
+    <function name="PANGO_GLYPH_INVALID_INPUT" link="pango-Glyph-Storage.html#PANGO-GLYPH-INVALID-INPUT--CAPS"/>
+    <function name="PANGO_GLYPH_UNKNOWN_FLAG" link="pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS"/>
+    <function name="PANGO_GET_UNKNOWN_GLYPH()" link="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS"/>
+    <function name="PangoGlyphInfo" link="pango-Glyph-Storage.html#PangoGlyphInfo"/>
+    <function name="PangoGlyphGeometry" link="pango-Glyph-Storage.html#PangoGlyphGeometry"/>
+    <function name="PangoGlyphUnit" link="pango-Glyph-Storage.html#PangoGlyphUnit"/>
+    <function name="PangoGlyphVisAttr" link="pango-Glyph-Storage.html#PangoGlyphVisAttr"/>
+    <function name="PangoGlyphString" link="pango-Glyph-Storage.html#PangoGlyphString"/>
+    <function name="PangoGlyphItem" link="pango-Glyph-Storage.html#PangoGlyphItem"/>
+    <function name="PangoGlyphItemIter" link="pango-Glyph-Storage.html#PangoGlyphItemIter"/>
+    <function name="PANGO_TYPE_GLYPH_STRING" link="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-STRING--CAPS"/>
+    <function name="pango_glyph_string_new ()" link="pango-Glyph-Storage.html#pango-glyph-string-new"/>
+    <function name="pango_glyph_string_copy ()" link="pango-Glyph-Storage.html#pango-glyph-string-copy"/>
+    <function name="pango_glyph_string_set_size ()" link="pango-Glyph-Storage.html#pango-glyph-string-set-size"/>
+    <function name="pango_glyph_string_free ()" link="pango-Glyph-Storage.html#pango-glyph-string-free"/>
+    <function name="pango_glyph_string_extents ()" link="pango-Glyph-Storage.html#pango-glyph-string-extents"/>
+    <function name="pango_glyph_string_extents_range ()" link="pango-Glyph-Storage.html#pango-glyph-string-extents-range"/>
+    <function name="pango_glyph_string_get_width ()" link="pango-Glyph-Storage.html#pango-glyph-string-get-width"/>
+    <function name="pango_glyph_string_index_to_x ()" link="pango-Glyph-Storage.html#pango-glyph-string-index-to-x"/>
+    <function name="pango_glyph_string_x_to_index ()" link="pango-Glyph-Storage.html#pango-glyph-string-x-to-index"/>
+    <function name="pango_glyph_string_get_logical_widths ()" link="pango-Glyph-Storage.html#pango-glyph-string-get-logical-widths"/>
+    <function name="PANGO_TYPE_GLYPH_ITEM" link="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM--CAPS"/>
+    <function name="pango_glyph_item_copy ()" link="pango-Glyph-Storage.html#pango-glyph-item-copy"/>
+    <function name="pango_glyph_item_free ()" link="pango-Glyph-Storage.html#pango-glyph-item-free"/>
+    <function name="pango_glyph_item_split ()" link="pango-Glyph-Storage.html#pango-glyph-item-split"/>
+    <function name="pango_glyph_item_apply_attrs ()" link="pango-Glyph-Storage.html#pango-glyph-item-apply-attrs"/>
+    <function name="pango_glyph_item_letter_space ()" link="pango-Glyph-Storage.html#pango-glyph-item-letter-space"/>
+    <function name="pango_glyph_item_get_logical_widths ()" link="pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths"/>
+    <function name="PANGO_TYPE_GLYPH_ITEM_ITER" link="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM-ITER--CAPS"/>
+    <function name="pango_glyph_item_iter_copy ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-copy"/>
+    <function name="pango_glyph_item_iter_free ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-free"/>
+    <function name="pango_glyph_item_iter_init_start ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-init-start"/>
+    <function name="pango_glyph_item_iter_init_end ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-init-end"/>
+    <function name="pango_glyph_item_iter_next_cluster ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster"/>
+    <function name="pango_glyph_item_iter_prev_cluster ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster"/>
+    <function name="PangoFontDescription" link="pango-Fonts.html#PangoFontDescription"/>
+    <function name="PANGO_TYPE_FONT_DESCRIPTION" link="pango-Fonts.html#PANGO-TYPE-FONT-DESCRIPTION--CAPS"/>
+    <function name="enum PangoStyle" link="pango-Fonts.html#PangoStyle"/>
+    <function name="PANGO_TYPE_STYLE" link="pango-Fonts.html#PANGO-TYPE-STYLE--CAPS"/>
+    <function name="enum PangoWeight" link="pango-Fonts.html#PangoWeight"/>
+    <function name="PANGO_TYPE_WEIGHT" link="pango-Fonts.html#PANGO-TYPE-WEIGHT--CAPS"/>
+    <function name="enum PangoVariant" link="pango-Fonts.html#PangoVariant"/>
+    <function name="PANGO_TYPE_VARIANT" link="pango-Fonts.html#PANGO-TYPE-VARIANT--CAPS"/>
+    <function name="enum PangoStretch" link="pango-Fonts.html#PangoStretch"/>
+    <function name="PANGO_TYPE_STRETCH" link="pango-Fonts.html#PANGO-TYPE-STRETCH--CAPS"/>
+    <function name="enum PangoFontMask" link="pango-Fonts.html#PangoFontMask"/>
+    <function name="PANGO_TYPE_FONT_MASK" link="pango-Fonts.html#PANGO-TYPE-FONT-MASK--CAPS"/>
+    <function name="pango_font_description_new ()" link="pango-Fonts.html#pango-font-description-new"/>
+    <function name="pango_font_description_copy ()" link="pango-Fonts.html#pango-font-description-copy"/>
+    <function name="pango_font_description_copy_static ()" link="pango-Fonts.html#pango-font-description-copy-static"/>
+    <function name="pango_font_description_hash ()" link="pango-Fonts.html#pango-font-description-hash"/>
+    <function name="pango_font_description_equal ()" link="pango-Fonts.html#pango-font-description-equal"/>
+    <function name="pango_font_description_free ()" link="pango-Fonts.html#pango-font-description-free"/>
+    <function name="pango_font_descriptions_free ()" link="pango-Fonts.html#pango-font-descriptions-free"/>
+    <function name="pango_font_description_set_family ()" link="pango-Fonts.html#pango-font-description-set-family"/>
+    <function name="pango_font_description_set_family_static ()" link="pango-Fonts.html#pango-font-description-set-family-static"/>
+    <function name="pango_font_description_get_family ()" link="pango-Fonts.html#pango-font-description-get-family"/>
+    <function name="pango_font_description_set_style ()" link="pango-Fonts.html#pango-font-description-set-style"/>
+    <function name="pango_font_description_get_style ()" link="pango-Fonts.html#pango-font-description-get-style"/>
+    <function name="pango_font_description_set_variant ()" link="pango-Fonts.html#pango-font-description-set-variant"/>
+    <function name="pango_font_description_get_variant ()" link="pango-Fonts.html#pango-font-description-get-variant"/>
+    <function name="pango_font_description_set_weight ()" link="pango-Fonts.html#pango-font-description-set-weight"/>
+    <function name="pango_font_description_get_weight ()" link="pango-Fonts.html#pango-font-description-get-weight"/>
+    <function name="pango_font_description_set_stretch ()" link="pango-Fonts.html#pango-font-description-set-stretch"/>
+    <function name="pango_font_description_get_stretch ()" link="pango-Fonts.html#pango-font-description-get-stretch"/>
+    <function name="pango_font_description_set_size ()" link="pango-Fonts.html#pango-font-description-set-size"/>
+    <function name="pango_font_description_get_size ()" link="pango-Fonts.html#pango-font-description-get-size"/>
+    <function name="pango_font_description_set_absolute_size ()" link="pango-Fonts.html#pango-font-description-set-absolute-size"/>
+    <function name="pango_font_description_get_size_is_absolute ()" link="pango-Fonts.html#pango-font-description-get-size-is-absolute"/>
+    <function name="pango_font_description_set_gravity ()" link="pango-Fonts.html#pango-font-description-set-gravity"/>
+    <function name="pango_font_description_get_gravity ()" link="pango-Fonts.html#pango-font-description-get-gravity"/>
+    <function name="pango_font_description_get_set_fields ()" link="pango-Fonts.html#pango-font-description-get-set-fields"/>
+    <function name="pango_font_description_unset_fields ()" link="pango-Fonts.html#pango-font-description-unset-fields"/>
+    <function name="pango_font_description_merge ()" link="pango-Fonts.html#pango-font-description-merge"/>
+    <function name="pango_font_description_merge_static ()" link="pango-Fonts.html#pango-font-description-merge-static"/>
+    <function name="pango_font_description_better_match ()" link="pango-Fonts.html#pango-font-description-better-match"/>
+    <function name="pango_font_description_from_string ()" link="pango-Fonts.html#pango-font-description-from-string"/>
+    <function name="pango_font_description_to_string ()" link="pango-Fonts.html#pango-font-description-to-string"/>
+    <function name="pango_font_description_to_filename ()" link="pango-Fonts.html#pango-font-description-to-filename"/>
+    <function name="PangoFontMetrics" link="pango-Fonts.html#PangoFontMetrics"/>
+    <function name="PANGO_TYPE_FONT_METRICS" link="pango-Fonts.html#PANGO-TYPE-FONT-METRICS--CAPS"/>
+    <function name="pango_font_metrics_ref ()" link="pango-Fonts.html#pango-font-metrics-ref"/>
+    <function name="pango_font_metrics_unref ()" link="pango-Fonts.html#pango-font-metrics-unref"/>
+    <function name="pango_font_metrics_get_ascent ()" link="pango-Fonts.html#pango-font-metrics-get-ascent"/>
+    <function name="pango_font_metrics_get_descent ()" link="pango-Fonts.html#pango-font-metrics-get-descent"/>
+    <function name="pango_font_metrics_get_approximate_char_width ()" link="pango-Fonts.html#pango-font-metrics-get-approximate-char-width"/>
+    <function name="pango_font_metrics_get_approximate_digit_width ()" link="pango-Fonts.html#pango-font-metrics-get-approximate-digit-width"/>
+    <function name="pango_font_metrics_get_underline_thickness ()" link="pango-Fonts.html#pango-font-metrics-get-underline-thickness"/>
+    <function name="pango_font_metrics_get_underline_position ()" link="pango-Fonts.html#pango-font-metrics-get-underline-position"/>
+    <function name="pango_font_metrics_get_strikethrough_thickness ()" link="pango-Fonts.html#pango-font-metrics-get-strikethrough-thickness"/>
+    <function name="pango_font_metrics_get_strikethrough_position ()" link="pango-Fonts.html#pango-font-metrics-get-strikethrough-position"/>
+    <function name="PangoFont" link="pango-Fonts.html#PangoFont-struct"/>
+    <function name="PANGO_TYPE_FONT" link="pango-Fonts.html#PANGO-TYPE-FONT--CAPS"/>
+    <function name="PANGO_FONT()" link="pango-Fonts.html#PANGO-FONT--CAPS"/>
+    <function name="PANGO_IS_FONT()" link="pango-Fonts.html#PANGO-IS-FONT--CAPS"/>
+    <function name="pango_font_find_shaper ()" link="pango-Fonts.html#pango-font-find-shaper"/>
+    <function name="pango_font_describe ()" link="pango-Fonts.html#pango-font-describe"/>
+    <function name="pango_font_describe_with_absolute_size ()" link="pango-Fonts.html#pango-font-describe-with-absolute-size"/>
+    <function name="pango_font_get_coverage ()" link="pango-Fonts.html#pango-font-get-coverage"/>
+    <function name="pango_font_get_glyph_extents ()" link="pango-Fonts.html#pango-font-get-glyph-extents"/>
+    <function name="pango_font_get_metrics ()" link="pango-Fonts.html#pango-font-get-metrics"/>
+    <function name="pango_font_get_font_map ()" link="pango-Fonts.html#pango-font-get-font-map"/>
+    <function name="PangoFontFamily" link="pango-Fonts.html#PangoFontFamily-struct"/>
+    <function name="PANGO_TYPE_FONT_FAMILY" link="pango-Fonts.html#PANGO-TYPE-FONT-FAMILY--CAPS"/>
+    <function name="PANGO_FONT_FAMILY()" link="pango-Fonts.html#PANGO-FONT-FAMILY--CAPS"/>
+    <function name="PANGO_IS_FONT_FAMILY()" link="pango-Fonts.html#PANGO-IS-FONT-FAMILY--CAPS"/>
+    <function name="pango_font_family_get_name ()" link="pango-Fonts.html#pango-font-family-get-name"/>
+    <function name="pango_font_family_is_monospace ()" link="pango-Fonts.html#pango-font-family-is-monospace"/>
+    <function name="pango_font_family_list_faces ()" link="pango-Fonts.html#pango-font-family-list-faces"/>
+    <function name="PangoFontFace" link="pango-Fonts.html#PangoFontFace-struct"/>
+    <function name="PANGO_TYPE_FONT_FACE" link="pango-Fonts.html#PANGO-TYPE-FONT-FACE--CAPS"/>
+    <function name="PANGO_FONT_FACE()" link="pango-Fonts.html#PANGO-FONT-FACE--CAPS"/>
+    <function name="PANGO_IS_FONT_FACE()" link="pango-Fonts.html#PANGO-IS-FONT-FACE--CAPS"/>
+    <function name="pango_font_face_get_face_name ()" link="pango-Fonts.html#pango-font-face-get-face-name"/>
+    <function name="pango_font_face_list_sizes ()" link="pango-Fonts.html#pango-font-face-list-sizes"/>
+    <function name="pango_font_face_describe ()" link="pango-Fonts.html#pango-font-face-describe"/>
+    <function name="pango_font_face_is_synthesized ()" link="pango-Fonts.html#pango-font-face-is-synthesized"/>
+    <function name="PangoFontMap" link="pango-Fonts.html#PangoFontMap-struct"/>
+    <function name="PANGO_TYPE_FONT_MAP" link="pango-Fonts.html#PANGO-TYPE-FONT-MAP--CAPS"/>
+    <function name="PANGO_FONT_MAP()" link="pango-Fonts.html#PANGO-FONT-MAP--CAPS"/>
+    <function name="PANGO_IS_FONT_MAP()" link="pango-Fonts.html#PANGO-IS-FONT-MAP--CAPS"/>
+    <function name="PangoFontMapClass" link="pango-Fonts.html#PangoFontMapClass"/>
+    <function name="PANGO_FONT_MAP_CLASS()" link="pango-Fonts.html#PANGO-FONT-MAP-CLASS--CAPS"/>
+    <function name="PANGO_IS_FONT_MAP_CLASS()" link="pango-Fonts.html#PANGO-IS-FONT-MAP-CLASS--CAPS"/>
+    <function name="PANGO_FONT_MAP_GET_CLASS()" link="pango-Fonts.html#PANGO-FONT-MAP-GET-CLASS--CAPS"/>
+    <function name="pango_font_map_create_context ()" link="pango-Fonts.html#pango-font-map-create-context"/>
+    <function name="pango_font_map_load_font ()" link="pango-Fonts.html#pango-font-map-load-font"/>
+    <function name="pango_font_map_load_fontset ()" link="pango-Fonts.html#pango-font-map-load-fontset"/>
+    <function name="pango_font_map_list_families ()" link="pango-Fonts.html#pango-font-map-list-families"/>
+    <function name="pango_font_map_get_shape_engine_type ()" link="pango-Fonts.html#pango-font-map-get-shape-engine-type"/>
+    <function name="PangoFontset" link="pango-Fonts.html#PangoFontset-struct"/>
+    <function name="PANGO_TYPE_FONTSET" link="pango-Fonts.html#PANGO-TYPE-FONTSET--CAPS"/>
+    <function name="PangoFontsetClass" link="pango-Fonts.html#PangoFontsetClass"/>
+    <function name="pango_fontset_get_font ()" link="pango-Fonts.html#pango-fontset-get-font"/>
+    <function name="pango_fontset_get_metrics ()" link="pango-Fonts.html#pango-fontset-get-metrics"/>
+    <function name="PangoFontsetForeachFunc ()" link="pango-Fonts.html#PangoFontsetForeachFunc"/>
+    <function name="pango_fontset_foreach ()" link="pango-Fonts.html#pango-fontset-foreach"/>
+    <function name="PangoFontsetSimple" link="pango-Fonts.html#PangoFontsetSimple-struct"/>
+    <function name="PANGO_TYPE_FONTSET_SIMPLE" link="pango-Fonts.html#PANGO-TYPE-FONTSET-SIMPLE--CAPS"/>
+    <function name="pango_fontset_simple_new ()" link="pango-Fonts.html#pango-fontset-simple-new"/>
+    <function name="pango_fontset_simple_append ()" link="pango-Fonts.html#pango-fontset-simple-append"/>
+    <function name="pango_fontset_simple_size ()" link="pango-Fonts.html#pango-fontset-simple-size"/>
+    <function name="enum PangoAttrType" link="pango-Text-Attributes.html#PangoAttrType"/>
+    <function name="PANGO_TYPE_ATTR_TYPE" link="pango-Text-Attributes.html#PANGO-TYPE-ATTR-TYPE--CAPS"/>
+    <function name="PangoAttrClass" link="pango-Text-Attributes.html#PangoAttrClass"/>
+    <function name="PangoAttribute" link="pango-Text-Attributes.html#PangoAttribute"/>
+    <function name="PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING" link="pango-Text-Attributes.html#PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS"/>
+    <function name="PANGO_ATTR_INDEX_TO_TEXT_END" link="pango-Text-Attributes.html#PANGO-ATTR-INDEX-TO-TEXT-END--CAPS"/>
+    <function name="PangoAttrString" link="pango-Text-Attributes.html#PangoAttrString"/>
+    <function name="PangoAttrLanguage" link="pango-Text-Attributes.html#PangoAttrLanguage"/>
+    <function name="PangoAttrColor" link="pango-Text-Attributes.html#PangoAttrColor"/>
+    <function name="PangoAttrInt" link="pango-Text-Attributes.html#PangoAttrInt"/>
+    <function name="PangoAttrFloat" link="pango-Text-Attributes.html#PangoAttrFloat"/>
+    <function name="PangoAttrFontDesc" link="pango-Text-Attributes.html#PangoAttrFontDesc"/>
+    <function name="PangoAttrShape" link="pango-Text-Attributes.html#PangoAttrShape"/>
+    <function name="PangoAttrSize" link="pango-Text-Attributes.html#PangoAttrSize"/>
+    <function name="pango_parse_markup ()" link="pango-Text-Attributes.html#pango-parse-markup"/>
+    <function name="pango_attr_type_register ()" link="pango-Text-Attributes.html#pango-attr-type-register"/>
+    <function name="pango_attr_type_get_name ()" link="pango-Text-Attributes.html#pango-attr-type-get-name"/>
+    <function name="pango_attribute_init ()" link="pango-Text-Attributes.html#pango-attribute-init"/>
+    <function name="pango_attribute_copy ()" link="pango-Text-Attributes.html#pango-attribute-copy"/>
+    <function name="pango_attribute_equal ()" link="pango-Text-Attributes.html#pango-attribute-equal"/>
+    <function name="pango_attribute_destroy ()" link="pango-Text-Attributes.html#pango-attribute-destroy"/>
+    <function name="pango_attr_language_new ()" link="pango-Text-Attributes.html#pango-attr-language-new"/>
+    <function name="pango_attr_family_new ()" link="pango-Text-Attributes.html#pango-attr-family-new"/>
+    <function name="pango_attr_style_new ()" link="pango-Text-Attributes.html#pango-attr-style-new"/>
+    <function name="pango_attr_variant_new ()" link="pango-Text-Attributes.html#pango-attr-variant-new"/>
+    <function name="pango_attr_stretch_new ()" link="pango-Text-Attributes.html#pango-attr-stretch-new"/>
+    <function name="pango_attr_weight_new ()" link="pango-Text-Attributes.html#pango-attr-weight-new"/>
+    <function name="pango_attr_size_new ()" link="pango-Text-Attributes.html#pango-attr-size-new"/>
+    <function name="pango_attr_size_new_absolute ()" link="pango-Text-Attributes.html#pango-attr-size-new-absolute"/>
+    <function name="pango_attr_font_desc_new ()" link="pango-Text-Attributes.html#pango-attr-font-desc-new"/>
+    <function name="pango_attr_foreground_new ()" link="pango-Text-Attributes.html#pango-attr-foreground-new"/>
+    <function name="pango_attr_background_new ()" link="pango-Text-Attributes.html#pango-attr-background-new"/>
+    <function name="pango_attr_strikethrough_new ()" link="pango-Text-Attributes.html#pango-attr-strikethrough-new"/>
+    <function name="pango_attr_strikethrough_color_new ()" link="pango-Text-Attributes.html#pango-attr-strikethrough-color-new"/>
+    <function name="pango_attr_underline_new ()" link="pango-Text-Attributes.html#pango-attr-underline-new"/>
+    <function name="pango_attr_underline_color_new ()" link="pango-Text-Attributes.html#pango-attr-underline-color-new"/>
+    <function name="enum PangoUnderline" link="pango-Text-Attributes.html#PangoUnderline"/>
+    <function name="PANGO_TYPE_UNDERLINE" link="pango-Text-Attributes.html#PANGO-TYPE-UNDERLINE--CAPS"/>
+    <function name="pango_attr_shape_new ()" link="pango-Text-Attributes.html#pango-attr-shape-new"/>
+    <function name="pango_attr_shape_new_with_data ()" link="pango-Text-Attributes.html#pango-attr-shape-new-with-data"/>
+    <function name="PangoAttrDataCopyFunc ()" link="pango-Text-Attributes.html#PangoAttrDataCopyFunc"/>
+    <function name="pango_attr_scale_new ()" link="pango-Text-Attributes.html#pango-attr-scale-new"/>
+    <function name="PANGO_SCALE_XX_SMALL" link="pango-Text-Attributes.html#PANGO-SCALE-XX-SMALL--CAPS"/>
+    <function name="PANGO_SCALE_X_SMALL" link="pango-Text-Attributes.html#PANGO-SCALE-X-SMALL--CAPS"/>
+    <function name="PANGO_SCALE_SMALL" link="pango-Text-Attributes.html#PANGO-SCALE-SMALL--CAPS"/>
+    <function name="PANGO_SCALE_MEDIUM" link="pango-Text-Attributes.html#PANGO-SCALE-MEDIUM--CAPS"/>
+    <function name="PANGO_SCALE_LARGE" link="pango-Text-Attributes.html#PANGO-SCALE-LARGE--CAPS"/>
+    <function name="PANGO_SCALE_X_LARGE" link="pango-Text-Attributes.html#PANGO-SCALE-X-LARGE--CAPS"/>
+    <function name="PANGO_SCALE_XX_LARGE" link="pango-Text-Attributes.html#PANGO-SCALE-XX-LARGE--CAPS"/>
+    <function name="pango_attr_rise_new ()" link="pango-Text-Attributes.html#pango-attr-rise-new"/>
+    <function name="pango_attr_letter_spacing_new ()" link="pango-Text-Attributes.html#pango-attr-letter-spacing-new"/>
+    <function name="pango_attr_fallback_new ()" link="pango-Text-Attributes.html#pango-attr-fallback-new"/>
+    <function name="pango_attr_gravity_new ()" link="pango-Text-Attributes.html#pango-attr-gravity-new"/>
+    <function name="pango_attr_gravity_hint_new ()" link="pango-Text-Attributes.html#pango-attr-gravity-hint-new"/>
+    <function name="PangoColor" link="pango-Text-Attributes.html#PangoColor"/>
+    <function name="PANGO_TYPE_COLOR" link="pango-Text-Attributes.html#PANGO-TYPE-COLOR--CAPS"/>
+    <function name="pango_color_parse ()" link="pango-Text-Attributes.html#pango-color-parse"/>
+    <function name="pango_color_copy ()" link="pango-Text-Attributes.html#pango-color-copy"/>
+    <function name="pango_color_free ()" link="pango-Text-Attributes.html#pango-color-free"/>
+    <function name="pango_color_to_string ()" link="pango-Text-Attributes.html#pango-color-to-string"/>
+    <function name="PangoAttrList" link="pango-Text-Attributes.html#PangoAttrList"/>
+    <function name="PANGO_TYPE_ATTR_LIST" link="pango-Text-Attributes.html#PANGO-TYPE-ATTR-LIST--CAPS"/>
+    <function name="pango_attr_list_new ()" link="pango-Text-Attributes.html#pango-attr-list-new"/>
+    <function name="pango_attr_list_ref ()" link="pango-Text-Attributes.html#pango-attr-list-ref"/>
+    <function name="pango_attr_list_unref ()" link="pango-Text-Attributes.html#pango-attr-list-unref"/>
+    <function name="pango_attr_list_copy ()" link="pango-Text-Attributes.html#pango-attr-list-copy"/>
+    <function name="pango_attr_list_insert ()" link="pango-Text-Attributes.html#pango-attr-list-insert"/>
+    <function name="pango_attr_list_insert_before ()" link="pango-Text-Attributes.html#pango-attr-list-insert-before"/>
+    <function name="pango_attr_list_change ()" link="pango-Text-Attributes.html#pango-attr-list-change"/>
+    <function name="pango_attr_list_splice ()" link="pango-Text-Attributes.html#pango-attr-list-splice"/>
+    <function name="pango_attr_list_filter ()" link="pango-Text-Attributes.html#pango-attr-list-filter"/>
+    <function name="PangoAttrFilterFunc ()" link="pango-Text-Attributes.html#PangoAttrFilterFunc"/>
+    <function name="pango_attr_list_get_iterator ()" link="pango-Text-Attributes.html#pango-attr-list-get-iterator"/>
+    <function name="PangoAttrIterator" link="pango-Text-Attributes.html#PangoAttrIterator"/>
+    <function name="pango_attr_iterator_copy ()" link="pango-Text-Attributes.html#pango-attr-iterator-copy"/>
+    <function name="pango_attr_iterator_next ()" link="pango-Text-Attributes.html#pango-attr-iterator-next"/>
+    <function name="pango_attr_iterator_range ()" link="pango-Text-Attributes.html#pango-attr-iterator-range"/>
+    <function name="pango_attr_iterator_get ()" link="pango-Text-Attributes.html#pango-attr-iterator-get"/>
+    <function name="pango_attr_iterator_get_font ()" link="pango-Text-Attributes.html#pango-attr-iterator-get-font"/>
+    <function name="pango_attr_iterator_get_attrs ()" link="pango-Text-Attributes.html#pango-attr-iterator-get-attrs"/>
+    <function name="pango_attr_iterator_destroy ()" link="pango-Text-Attributes.html#pango-attr-iterator-destroy"/>
+    <function name="PangoTabArray" link="pango-Tab-Stops.html#PangoTabArray"/>
+    <function name="PANGO_TYPE_TAB_ARRAY" link="pango-Tab-Stops.html#PANGO-TYPE-TAB-ARRAY--CAPS"/>
+    <function name="enum PangoTabAlign" link="pango-Tab-Stops.html#PangoTabAlign"/>
+    <function name="PANGO_TYPE_TAB_ALIGN" link="pango-Tab-Stops.html#PANGO-TYPE-TAB-ALIGN--CAPS"/>
+    <function name="pango_tab_array_new ()" link="pango-Tab-Stops.html#pango-tab-array-new"/>
+    <function name="pango_tab_array_new_with_positions ()" link="pango-Tab-Stops.html#pango-tab-array-new-with-positions"/>
+    <function name="pango_tab_array_copy ()" link="pango-Tab-Stops.html#pango-tab-array-copy"/>
+    <function name="pango_tab_array_free ()" link="pango-Tab-Stops.html#pango-tab-array-free"/>
+    <function name="pango_tab_array_get_size ()" link="pango-Tab-Stops.html#pango-tab-array-get-size"/>
+    <function name="pango_tab_array_resize ()" link="pango-Tab-Stops.html#pango-tab-array-resize"/>
+    <function name="pango_tab_array_set_tab ()" link="pango-Tab-Stops.html#pango-tab-array-set-tab"/>
+    <function name="pango_tab_array_get_tab ()" link="pango-Tab-Stops.html#pango-tab-array-get-tab"/>
+    <function name="pango_tab_array_get_tabs ()" link="pango-Tab-Stops.html#pango-tab-array-get-tabs"/>
+    <function name="pango_tab_array_get_positions_in_pixels ()" link="pango-Tab-Stops.html#pango-tab-array-get-positions-in-pixels"/>
+    <function name="PangoLayout" link="pango-Layout-Objects.html#PangoLayout-struct"/>
+    <function name="PangoLayoutIter" link="pango-Layout-Objects.html#PangoLayoutIter"/>
+    <function name="pango_layout_new ()" link="pango-Layout-Objects.html#pango-layout-new"/>
+    <function name="pango_layout_copy ()" link="pango-Layout-Objects.html#pango-layout-copy"/>
+    <function name="pango_layout_get_context ()" link="pango-Layout-Objects.html#pango-layout-get-context"/>
+    <function name="pango_layout_context_changed ()" link="pango-Layout-Objects.html#pango-layout-context-changed"/>
+    <function name="pango_layout_set_text ()" link="pango-Layout-Objects.html#pango-layout-set-text"/>
+    <function name="pango_layout_get_text ()" link="pango-Layout-Objects.html#pango-layout-get-text"/>
+    <function name="pango_layout_set_markup ()" link="pango-Layout-Objects.html#pango-layout-set-markup"/>
+    <function name="pango_layout_set_markup_with_accel ()" link="pango-Layout-Objects.html#pango-layout-set-markup-with-accel"/>
+    <function name="pango_layout_set_attributes ()" link="pango-Layout-Objects.html#pango-layout-set-attributes"/>
+    <function name="pango_layout_get_attributes ()" link="pango-Layout-Objects.html#pango-layout-get-attributes"/>
+    <function name="pango_layout_set_font_description ()" link="pango-Layout-Objects.html#pango-layout-set-font-description"/>
+    <function name="pango_layout_get_font_description ()" link="pango-Layout-Objects.html#pango-layout-get-font-description"/>
+    <function name="pango_layout_set_width ()" link="pango-Layout-Objects.html#pango-layout-set-width"/>
+    <function name="pango_layout_get_width ()" link="pango-Layout-Objects.html#pango-layout-get-width"/>
+    <function name="pango_layout_set_height ()" link="pango-Layout-Objects.html#pango-layout-set-height"/>
+    <function name="pango_layout_get_height ()" link="pango-Layout-Objects.html#pango-layout-get-height"/>
+    <function name="pango_layout_set_wrap ()" link="pango-Layout-Objects.html#pango-layout-set-wrap"/>
+    <function name="pango_layout_get_wrap ()" link="pango-Layout-Objects.html#pango-layout-get-wrap"/>
+    <function name="pango_layout_is_wrapped ()" link="pango-Layout-Objects.html#pango-layout-is-wrapped"/>
+    <function name="enum PangoWrapMode" link="pango-Layout-Objects.html#PangoWrapMode"/>
+    <function name="PANGO_TYPE_WRAP_MODE" link="pango-Layout-Objects.html#PANGO-TYPE-WRAP-MODE--CAPS"/>
+    <function name="pango_layout_set_ellipsize ()" link="pango-Layout-Objects.html#pango-layout-set-ellipsize"/>
+    <function name="pango_layout_get_ellipsize ()" link="pango-Layout-Objects.html#pango-layout-get-ellipsize"/>
+    <function name="pango_layout_is_ellipsized ()" link="pango-Layout-Objects.html#pango-layout-is-ellipsized"/>
+    <function name="enum PangoEllipsizeMode" link="pango-Layout-Objects.html#PangoEllipsizeMode"/>
+    <function name="PANGO_TYPE_ELLIPSIZE_MODE" link="pango-Layout-Objects.html#PANGO-TYPE-ELLIPSIZE-MODE--CAPS"/>
+    <function name="pango_layout_set_indent ()" link="pango-Layout-Objects.html#pango-layout-set-indent"/>
+    <function name="pango_layout_get_indent ()" link="pango-Layout-Objects.html#pango-layout-get-indent"/>
+    <function name="pango_layout_get_spacing ()" link="pango-Layout-Objects.html#pango-layout-get-spacing"/>
+    <function name="pango_layout_set_spacing ()" link="pango-Layout-Objects.html#pango-layout-set-spacing"/>
+    <function name="pango_layout_set_justify ()" link="pango-Layout-Objects.html#pango-layout-set-justify"/>
+    <function name="pango_layout_get_justify ()" link="pango-Layout-Objects.html#pango-layout-get-justify"/>
+    <function name="pango_layout_set_auto_dir ()" link="pango-Layout-Objects.html#pango-layout-set-auto-dir"/>
+    <function name="pango_layout_get_auto_dir ()" link="pango-Layout-Objects.html#pango-layout-get-auto-dir"/>
+    <function name="pango_layout_set_alignment ()" link="pango-Layout-Objects.html#pango-layout-set-alignment"/>
+    <function name="pango_layout_get_alignment ()" link="pango-Layout-Objects.html#pango-layout-get-alignment"/>
+    <function name="pango_layout_set_tabs ()" link="pango-Layout-Objects.html#pango-layout-set-tabs"/>
+    <function name="pango_layout_get_tabs ()" link="pango-Layout-Objects.html#pango-layout-get-tabs"/>
+    <function name="pango_layout_set_single_paragraph_mode ()" link="pango-Layout-Objects.html#pango-layout-set-single-paragraph-mode"/>
+    <function name="pango_layout_get_single_paragraph_mode ()" link="pango-Layout-Objects.html#pango-layout-get-single-paragraph-mode"/>
+    <function name="enum PangoAlignment" link="pango-Layout-Objects.html#PangoAlignment"/>
+    <function name="PANGO_TYPE_ALIGNMENT" link="pango-Layout-Objects.html#PANGO-TYPE-ALIGNMENT--CAPS"/>
+    <function name="pango_layout_get_unknown_glyphs_count ()" link="pango-Layout-Objects.html#pango-layout-get-unknown-glyphs-count"/>
+    <function name="pango_layout_get_log_attrs ()" link="pango-Layout-Objects.html#pango-layout-get-log-attrs"/>
+    <function name="pango_layout_index_to_pos ()" link="pango-Layout-Objects.html#pango-layout-index-to-pos"/>
+    <function name="pango_layout_index_to_line_x ()" link="pango-Layout-Objects.html#pango-layout-index-to-line-x"/>
+    <function name="pango_layout_xy_to_index ()" link="pango-Layout-Objects.html#pango-layout-xy-to-index"/>
+    <function name="pango_layout_get_cursor_pos ()" link="pango-Layout-Objects.html#pango-layout-get-cursor-pos"/>
+    <function name="pango_layout_move_cursor_visually ()" link="pango-Layout-Objects.html#pango-layout-move-cursor-visually"/>
+    <function name="pango_layout_get_extents ()" link="pango-Layout-Objects.html#pango-layout-get-extents"/>
+    <function name="pango_layout_get_pixel_extents ()" link="pango-Layout-Objects.html#pango-layout-get-pixel-extents"/>
+    <function name="pango_layout_get_size ()" link="pango-Layout-Objects.html#pango-layout-get-size"/>
+    <function name="pango_layout_get_pixel_size ()" link="pango-Layout-Objects.html#pango-layout-get-pixel-size"/>
+    <function name="pango_layout_get_baseline ()" link="pango-Layout-Objects.html#pango-layout-get-baseline"/>
+    <function name="pango_layout_get_line_count ()" link="pango-Layout-Objects.html#pango-layout-get-line-count"/>
+    <function name="pango_layout_get_line ()" link="pango-Layout-Objects.html#pango-layout-get-line"/>
+    <function name="pango_layout_get_line_readonly ()" link="pango-Layout-Objects.html#pango-layout-get-line-readonly"/>
+    <function name="pango_layout_get_lines ()" link="pango-Layout-Objects.html#pango-layout-get-lines"/>
+    <function name="pango_layout_get_lines_readonly ()" link="pango-Layout-Objects.html#pango-layout-get-lines-readonly"/>
+    <function name="pango_layout_get_iter ()" link="pango-Layout-Objects.html#pango-layout-get-iter"/>
+    <function name="pango_layout_iter_copy ()" link="pango-Layout-Objects.html#pango-layout-iter-copy"/>
+    <function name="pango_layout_iter_free ()" link="pango-Layout-Objects.html#pango-layout-iter-free"/>
+    <function name="pango_layout_iter_next_run ()" link="pango-Layout-Objects.html#pango-layout-iter-next-run"/>
+    <function name="pango_layout_iter_next_char ()" link="pango-Layout-Objects.html#pango-layout-iter-next-char"/>
+    <function name="pango_layout_iter_next_cluster ()" link="pango-Layout-Objects.html#pango-layout-iter-next-cluster"/>
+    <function name="pango_layout_iter_next_line ()" link="pango-Layout-Objects.html#pango-layout-iter-next-line"/>
+    <function name="pango_layout_iter_at_last_line ()" link="pango-Layout-Objects.html#pango-layout-iter-at-last-line"/>
+    <function name="pango_layout_iter_get_index ()" link="pango-Layout-Objects.html#pango-layout-iter-get-index"/>
+    <function name="pango_layout_iter_get_baseline ()" link="pango-Layout-Objects.html#pango-layout-iter-get-baseline"/>
+    <function name="pango_layout_iter_get_run ()" link="pango-Layout-Objects.html#pango-layout-iter-get-run"/>
+    <function name="pango_layout_iter_get_run_readonly ()" link="pango-Layout-Objects.html#pango-layout-iter-get-run-readonly"/>
+    <function name="pango_layout_iter_get_line ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line"/>
+    <function name="pango_layout_iter_get_line_readonly ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line-readonly"/>
+    <function name="pango_layout_iter_get_layout ()" link="pango-Layout-Objects.html#pango-layout-iter-get-layout"/>
+    <function name="pango_layout_iter_get_char_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-char-extents"/>
+    <function name="pango_layout_iter_get_cluster_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-cluster-extents"/>
+    <function name="pango_layout_iter_get_run_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-run-extents"/>
+    <function name="pango_layout_iter_get_line_yrange ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line-yrange"/>
+    <function name="pango_layout_iter_get_line_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line-extents"/>
+    <function name="pango_layout_iter_get_layout_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-layout-extents"/>
+    <function name="PangoLayoutLine" link="pango-Layout-Objects.html#PangoLayoutLine"/>
+    <function name="PangoLayoutRun" link="pango-Layout-Objects.html#PangoLayoutRun"/>
+    <function name="pango_layout_line_ref ()" link="pango-Layout-Objects.html#pango-layout-line-ref"/>
+    <function name="pango_layout_line_unref ()" link="pango-Layout-Objects.html#pango-layout-line-unref"/>
+    <function name="pango_layout_line_get_extents ()" link="pango-Layout-Objects.html#pango-layout-line-get-extents"/>
+    <function name="pango_layout_line_get_pixel_extents ()" link="pango-Layout-Objects.html#pango-layout-line-get-pixel-extents"/>
+    <function name="pango_layout_line_index_to_x ()" link="pango-Layout-Objects.html#pango-layout-line-index-to-x"/>
+    <function name="pango_layout_line_x_to_index ()" link="pango-Layout-Objects.html#pango-layout-line-x-to-index"/>
+    <function name="pango_layout_line_get_x_ranges ()" link="pango-Layout-Objects.html#pango-layout-line-get-x-ranges"/>
+    <function name="enum PangoScript" link="pango-Scripts-and-Languages.html#PangoScript"/>
+    <function name="PANGO_TYPE_SCRIPT" link="pango-Scripts-and-Languages.html#PANGO-TYPE-SCRIPT--CAPS"/>
+    <function name="PangoScriptIter" link="pango-Scripts-and-Languages.html#PangoScriptIter"/>
+    <function name="pango_script_for_unichar ()" link="pango-Scripts-and-Languages.html#pango-script-for-unichar"/>
+    <function name="pango_script_get_sample_language ()" link="pango-Scripts-and-Languages.html#pango-script-get-sample-language"/>
+    <function name="pango_script_iter_new ()" link="pango-Scripts-and-Languages.html#pango-script-iter-new"/>
+    <function name="pango_script_iter_get_range ()" link="pango-Scripts-and-Languages.html#pango-script-iter-get-range"/>
+    <function name="pango_script_iter_next ()" link="pango-Scripts-and-Languages.html#pango-script-iter-next"/>
+    <function name="pango_script_iter_free ()" link="pango-Scripts-and-Languages.html#pango-script-iter-free"/>
+    <function name="PangoLanguage" link="pango-Scripts-and-Languages.html#PangoLanguage"/>
+    <function name="PANGO_TYPE_LANGUAGE" link="pango-Scripts-and-Languages.html#PANGO-TYPE-LANGUAGE--CAPS"/>
+    <function name="pango_language_from_string ()" link="pango-Scripts-and-Languages.html#pango-language-from-string"/>
+    <function name="pango_language_to_string ()" link="pango-Scripts-and-Languages.html#pango-language-to-string"/>
+    <function name="pango_language_matches ()" link="pango-Scripts-and-Languages.html#pango-language-matches"/>
+    <function name="pango_language_includes_script ()" link="pango-Scripts-and-Languages.html#pango-language-includes-script"/>
+    <function name="pango_language_get_scripts ()" link="pango-Scripts-and-Languages.html#pango-language-get-scripts"/>
+    <function name="pango_language_get_default ()" link="pango-Scripts-and-Languages.html#pango-language-get-default"/>
+    <function name="pango_language_get_sample_string ()" link="pango-Scripts-and-Languages.html#pango-language-get-sample-string"/>
+    <function name="enum PangoDirection" link="pango-Bidirectional-Text.html#PangoDirection"/>
+    <function name="pango_unichar_direction ()" link="pango-Bidirectional-Text.html#pango-unichar-direction"/>
+    <function name="pango_find_base_dir ()" link="pango-Bidirectional-Text.html#pango-find-base-dir"/>
+    <function name="pango_get_mirror_char ()" link="pango-Bidirectional-Text.html#pango-get-mirror-char"/>
+    <function name="enum PangoBidiType" link="pango-Bidirectional-Text.html#PangoBidiType"/>
+    <function name="pango_bidi_type_for_unichar ()" link="pango-Bidirectional-Text.html#pango-bidi-type-for-unichar"/>
+    <function name="enum PangoGravity" link="pango-Vertical-Text.html#PangoGravity"/>
+    <function name="enum PangoGravityHint" link="pango-Vertical-Text.html#PangoGravityHint"/>
+    <function name="PANGO_GRAVITY_IS_VERTICAL()" link="pango-Vertical-Text.html#PANGO-GRAVITY-IS-VERTICAL--CAPS"/>
+    <function name="pango_gravity_get_for_matrix ()" link="pango-Vertical-Text.html#pango-gravity-get-for-matrix"/>
+    <function name="pango_gravity_get_for_script ()" link="pango-Vertical-Text.html#pango-gravity-get-for-script"/>
+    <function name="pango_gravity_get_for_script_and_width ()" link="pango-Vertical-Text.html#pango-gravity-get-for-script-and-width"/>
+    <function name="pango_gravity_to_rotation ()" link="pango-Vertical-Text.html#pango-gravity-to-rotation"/>
+    <function name="PANGO_RENDER_TYPE_WIN32" link="pango-Win32-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-WIN32--CAPS"/>
+    <function name="pango_win32_get_context ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-context"/>
+    <function name="pango_win32_render ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render"/>
+    <function name="pango_win32_render_transformed ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-transformed"/>
+    <function name="pango_win32_render_layout_line ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout-line"/>
+    <function name="pango_win32_render_layout ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout"/>
+    <function name="pango_win32_get_unknown_glyph ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-unknown-glyph"/>
+    <function name="pango_win32_font_get_glyph_index ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-glyph-index"/>
+    <function name="pango_win32_font_select_font ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-select-font"/>
+    <function name="pango_win32_font_done_font ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font"/>
+    <function name="pango_win32_font_get_metrics_factor ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-metrics-factor"/>
+    <function name="pango_win32_get_debug_flag ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-debug-flag"/>
+    <function name="pango_win32_get_dc ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-dc"/>
+    <function name="PangoWin32FontCache" link="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache"/>
+    <function name="pango_win32_font_cache_new ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-new"/>
+    <function name="pango_win32_font_cache_free ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-free"/>
+    <function name="pango_win32_font_cache_load ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-load"/>
+    <function name="pango_win32_font_cache_loadw ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-loadw"/>
+    <function name="pango_win32_font_cache_unload ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload"/>
+    <function name="pango_win32_font_map_for_display ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-for-display"/>
+    <function name="pango_win32_shutdown_display ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-shutdown-display"/>
+    <function name="pango_win32_font_map_get_font_cache ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-get-font-cache"/>
+    <function name="pango_win32_font_logfont ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfont"/>
+    <function name="pango_win32_font_logfontw ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw"/>
+    <function name="pango_win32_font_description_from_logfont ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfont"/>
+    <function name="pango_win32_font_description_from_logfontw ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfontw"/>
+    <function name="PangoFT2FontMap" link="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap-struct"/>
+    <function name="PANGO_RENDER_TYPE_FT2" link="pango-FreeType-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-FT2--CAPS"/>
+    <function name="pango_ft2_font_map_new ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new"/>
+    <function name="pango_ft2_font_map_set_resolution ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-resolution"/>
+    <function name="pango_ft2_font_map_create_context ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context"/>
+    <function name="PangoFT2SubstituteFunc ()" link="pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc"/>
+    <function name="pango_ft2_font_map_set_default_substitute ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute"/>
+    <function name="pango_ft2_font_map_substitute_changed ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-substitute-changed"/>
+    <function name="pango_ft2_get_context ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-context"/>
+    <function name="pango_ft2_render ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render"/>
+    <function name="pango_ft2_render_transformed ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-transformed"/>
+    <function name="pango_ft2_render_layout_line ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line"/>
+    <function name="pango_ft2_render_layout_line_subpixel ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line-subpixel"/>
+    <function name="pango_ft2_render_layout ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout"/>
+    <function name="pango_ft2_render_layout_subpixel ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-subpixel"/>
+    <function name="pango_ft2_get_unknown_glyph ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-unknown-glyph"/>
+    <function name="pango_ft2_font_get_kerning ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-kerning"/>
+    <function name="pango_ft2_font_get_face ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-face"/>
+    <function name="pango_ft2_font_get_coverage ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-coverage"/>
+    <function name="pango_ft2_font_map_for_display ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display"/>
+    <function name="pango_ft2_shutdown_display ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display"/>
+    <function name="PangoXftFont" link="pango-Xft-Fonts-and-Rendering.html#PangoXftFont-struct"/>
+    <function name="PangoXftFontMap" link="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap-struct"/>
+    <function name="PANGO_RENDER_TYPE_XFT" link="pango-Xft-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-XFT--CAPS"/>
+    <function name="pango_xft_get_context ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context"/>
+    <function name="pango_xft_get_font_map ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map"/>
+    <function name="pango_xft_set_default_substitute ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute"/>
+    <function name="PangoXftSubstituteFunc ()" link="pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc"/>
+    <function name="pango_xft_substitute_changed ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed"/>
+    <function name="pango_xft_shutdown_display ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-shutdown-display"/>
+    <function name="pango_xft_font_get_font ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-font"/>
+    <function name="pango_xft_font_get_display ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-display"/>
+    <function name="pango_xft_font_has_char ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char"/>
+    <function name="pango_xft_font_lock_face ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face"/>
+    <function name="pango_xft_font_unlock_face ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face"/>
+    <function name="pango_xft_font_get_glyph ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph"/>
+    <function name="pango_xft_font_get_unknown_glyph ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-unknown-glyph"/>
+    <function name="PangoXftRenderer" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer-struct"/>
+    <function name="PangoXftRendererClass" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass"/>
+    <function name="pango_xft_renderer_new ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-new"/>
+    <function name="pango_xft_renderer_set_draw ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw"/>
+    <function name="pango_xft_renderer_set_default_color ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-default-color"/>
+    <function name="pango_xft_render ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render"/>
+    <function name="pango_xft_picture_render ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-picture-render"/>
+    <function name="pango_xft_render_transformed ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-transformed"/>
+    <function name="pango_xft_render_layout_line ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout-line"/>
+    <function name="pango_xft_render_layout ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout"/>
+    <function name="The &quot;display&quot; property" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--display"/>
+    <function name="The &quot;screen&quot; property" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--screen"/>
+    <function name="PangoCairoFont" link="pango-Cairo-Rendering.html#PangoCairoFont-struct"/>
+    <function name="PangoCairoFontMap" link="pango-Cairo-Rendering.html#PangoCairoFontMap-struct"/>
+    <function name="pango_cairo_font_map_get_default ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default"/>
+    <function name="pango_cairo_font_map_set_default ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-set-default"/>
+    <function name="pango_cairo_font_map_new ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-new"/>
+    <function name="pango_cairo_font_map_new_for_font_type ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-new-for-font-type"/>
+    <function name="pango_cairo_font_map_get_font_type ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-get-font-type"/>
+    <function name="pango_cairo_font_map_set_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution"/>
+    <function name="pango_cairo_font_map_get_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-get-resolution"/>
+    <function name="pango_cairo_font_map_create_context ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context"/>
+    <function name="pango_cairo_font_get_scaled_font ()" link="pango-Cairo-Rendering.html#pango-cairo-font-get-scaled-font"/>
+    <function name="pango_cairo_context_set_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-context-set-resolution"/>
+    <function name="pango_cairo_context_get_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-context-get-resolution"/>
+    <function name="pango_cairo_context_set_font_options ()" link="pango-Cairo-Rendering.html#pango-cairo-context-set-font-options"/>
+    <function name="pango_cairo_context_get_font_options ()" link="pango-Cairo-Rendering.html#pango-cairo-context-get-font-options"/>
+    <function name="PangoCairoShapeRendererFunc ()" link="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc"/>
+    <function name="pango_cairo_context_set_shape_renderer ()" link="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer"/>
+    <function name="pango_cairo_context_get_shape_renderer ()" link="pango-Cairo-Rendering.html#pango-cairo-context-get-shape-renderer"/>
+    <function name="pango_cairo_create_context ()" link="pango-Cairo-Rendering.html#pango-cairo-create-context"/>
+    <function name="pango_cairo_update_context ()" link="pango-Cairo-Rendering.html#pango-cairo-update-context"/>
+    <function name="pango_cairo_create_layout ()" link="pango-Cairo-Rendering.html#pango-cairo-create-layout"/>
+    <function name="pango_cairo_update_layout ()" link="pango-Cairo-Rendering.html#pango-cairo-update-layout"/>
+    <function name="pango_cairo_show_glyph_string ()" link="pango-Cairo-Rendering.html#pango-cairo-show-glyph-string"/>
+    <function name="pango_cairo_show_glyph_item ()" link="pango-Cairo-Rendering.html#pango-cairo-show-glyph-item"/>
+    <function name="pango_cairo_show_layout_line ()" link="pango-Cairo-Rendering.html#pango-cairo-show-layout-line"/>
+    <function name="pango_cairo_show_layout ()" link="pango-Cairo-Rendering.html#pango-cairo-show-layout"/>
+    <function name="pango_cairo_show_error_underline ()" link="pango-Cairo-Rendering.html#pango-cairo-show-error-underline"/>
+    <function name="pango_cairo_glyph_string_path ()" link="pango-Cairo-Rendering.html#pango-cairo-glyph-string-path"/>
+    <function name="pango_cairo_layout_line_path ()" link="pango-Cairo-Rendering.html#pango-cairo-layout-line-path"/>
+    <function name="pango_cairo_layout_path ()" link="pango-Cairo-Rendering.html#pango-cairo-layout-path"/>
+    <function name="pango_cairo_error_underline_path ()" link="pango-Cairo-Rendering.html#pango-cairo-error-underline-path"/>
+    <function name="PANGO_RENDER_TYPE_ATSUI" link="pango-ATSUI-Fonts.html#PANGO-RENDER-TYPE-ATSUI--CAPS"/>
+    <function name="pango_atsui_font_get_cgfont ()" link="pango-ATSUI-Fonts.html#pango-atsui-font-get-cgfont"/>
+    <function name="PANGO_RENDER_TYPE_X" link="pango-X-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-X--CAPS"/>
+    <function name="pango_x_get_context ()" link="pango-X-Fonts-and-Rendering.html#pango-x-get-context"/>
+    <function name="pango_x_context_set_funcs ()" link="pango-X-Fonts-and-Rendering.html#pango-x-context-set-funcs"/>
+    <function name="PangoGetGCFunc ()" link="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc"/>
+    <function name="PangoFreeGCFunc ()" link="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc"/>
+    <function name="pango_x_render ()" link="pango-X-Fonts-and-Rendering.html#pango-x-render"/>
+    <function name="pango_x_render_layout_line ()" link="pango-X-Fonts-and-Rendering.html#pango-x-render-layout-line"/>
+    <function name="pango_x_render_layout ()" link="pango-X-Fonts-and-Rendering.html#pango-x-render-layout"/>
+    <function name="PangoXSubfont" link="pango-X-Fonts-and-Rendering.html#PangoXSubfont"/>
+    <function name="PANGO_X_MAKE_GLYPH()" link="pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS"/>
+    <function name="PANGO_X_GLYPH_SUBFONT()" link="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-SUBFONT--CAPS"/>
+    <function name="PANGO_X_GLYPH_INDEX()" link="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-INDEX--CAPS"/>
+    <function name="pango_x_load_font ()" link="pango-X-Fonts-and-Rendering.html#pango-x-load-font"/>
+    <function name="pango_x_get_unknown_glyph ()" link="pango-X-Fonts-and-Rendering.html#pango-x-get-unknown-glyph"/>
+    <function name="pango_x_has_glyph ()" link="pango-X-Fonts-and-Rendering.html#pango-x-has-glyph"/>
+    <function name="pango_x_list_subfonts ()" link="pango-X-Fonts-and-Rendering.html#pango-x-list-subfonts"/>
+    <function name="pango_x_font_map_for_display ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display"/>
+    <function name="pango_x_shutdown_display ()" link="pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display"/>
+    <function name="pango_x_font_map_get_font_cache ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-map-get-font-cache"/>
+    <function name="pango_x_font_subfont_xlfd ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-subfont-xlfd"/>
+    <function name="pango_x_find_first_subfont ()" link="pango-X-Fonts-and-Rendering.html#pango-x-find-first-subfont"/>
+    <function name="pango_x_font_get_unknown_glyph ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-get-unknown-glyph"/>
+    <function name="pango_x_apply_ligatures ()" link="pango-X-Fonts-and-Rendering.html#pango-x-apply-ligatures"/>
+    <function name="pango_x_fallback_shape ()" link="pango-X-Fonts-and-Rendering.html#pango-x-fallback-shape"/>
+    <function name="PangoXFontCache" link="pango-X-Fonts-and-Rendering.html#PangoXFontCache"/>
+    <function name="pango_x_font_cache_new ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-new"/>
+    <function name="pango_x_font_cache_free ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free"/>
+    <function name="pango_x_font_cache_load ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load"/>
+    <function name="pango_x_font_cache_unload ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload"/>
+    <function name="PangoRenderer" link="PangoRenderer.html#PangoRenderer-struct"/>
+    <function name="enum PangoRenderPart" link="PangoRenderer.html#PangoRenderPart"/>
+    <function name="PANGO_TYPE_RENDER_PART" link="PangoRenderer.html#PANGO-TYPE-RENDER-PART--CAPS"/>
+    <function name="PangoRendererClass" link="PangoRenderer.html#PangoRendererClass"/>
+    <function name="pango_renderer_draw_layout ()" link="PangoRenderer.html#pango-renderer-draw-layout"/>
+    <function name="pango_renderer_draw_layout_line ()" link="PangoRenderer.html#pango-renderer-draw-layout-line"/>
+    <function name="pango_renderer_draw_glyphs ()" link="PangoRenderer.html#pango-renderer-draw-glyphs"/>
+    <function name="pango_renderer_draw_glyph_item ()" link="PangoRenderer.html#pango-renderer-draw-glyph-item"/>
+    <function name="pango_renderer_draw_rectangle ()" link="PangoRenderer.html#pango-renderer-draw-rectangle"/>
+    <function name="pango_renderer_draw_error_underline ()" link="PangoRenderer.html#pango-renderer-draw-error-underline"/>
+    <function name="pango_renderer_draw_trapezoid ()" link="PangoRenderer.html#pango-renderer-draw-trapezoid"/>
+    <function name="pango_renderer_draw_glyph ()" link="PangoRenderer.html#pango-renderer-draw-glyph"/>
+    <function name="pango_renderer_activate ()" link="PangoRenderer.html#pango-renderer-activate"/>
+    <function name="pango_renderer_deactivate ()" link="PangoRenderer.html#pango-renderer-deactivate"/>
+    <function name="pango_renderer_part_changed ()" link="PangoRenderer.html#pango-renderer-part-changed"/>
+    <function name="pango_renderer_set_color ()" link="PangoRenderer.html#pango-renderer-set-color"/>
+    <function name="pango_renderer_get_color ()" link="PangoRenderer.html#pango-renderer-get-color"/>
+    <function name="pango_renderer_set_matrix ()" link="PangoRenderer.html#pango-renderer-set-matrix"/>
+    <function name="pango_renderer_get_matrix ()" link="PangoRenderer.html#pango-renderer-get-matrix"/>
+    <function name="pango_renderer_get_layout ()" link="PangoRenderer.html#pango-renderer-get-layout"/>
+    <function name="pango_renderer_get_layout_line ()" link="PangoRenderer.html#pango-renderer-get-layout-line"/>
+    <function name="PangoFcFontMap" link="PangoFcFontMap.html#PangoFcFontMap-struct"/>
+    <function name="PangoFcFontMapClass" link="PangoFcFontMap.html#PangoFcFontMapClass"/>
+    <function name="pango_fc_font_map_create_context ()" link="PangoFcFontMap.html#pango-fc-font-map-create-context"/>
+    <function name="PangoFcDecoderFindFunc ()" link="PangoFcFontMap.html#PangoFcDecoderFindFunc"/>
+    <function name="pango_fc_font_map_add_decoder_find_func ()" link="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func"/>
+    <function name="pango_fc_font_map_find_decoder ()" link="PangoFcFontMap.html#pango-fc-font-map-find-decoder"/>
+    <function name="pango_fc_font_map_cache_clear ()" link="PangoFcFontMap.html#pango-fc-font-map-cache-clear"/>
+    <function name="pango_fc_font_map_shutdown ()" link="PangoFcFontMap.html#pango-fc-font-map-shutdown"/>
+    <function name="pango_fc_font_description_from_pattern ()" link="PangoFcFontMap.html#pango-fc-font-description-from-pattern"/>
+    <function name="PANGO_FC_GRAVITY" link="PangoFcFontMap.html#PANGO-FC-GRAVITY--CAPS"/>
+    <function name="PANGO_FC_VERSION" link="PangoFcFontMap.html#PANGO-FC-VERSION--CAPS"/>
+    <function name="PANGO_FC_PRGNAME" link="PangoFcFontMap.html#PANGO-FC-PRGNAME--CAPS"/>
+    <function name="PangoFcFontsetKey" link="PangoFcFontMap.html#PangoFcFontsetKey"/>
+    <function name="pango_fc_fontset_key_get_context_key ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-context-key"/>
+    <function name="pango_fc_fontset_key_get_description ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-description"/>
+    <function name="pango_fc_fontset_key_get_language ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-language"/>
+    <function name="pango_fc_fontset_key_get_matrix ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-matrix"/>
+    <function name="pango_fc_fontset_key_get_absolute_size ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-absolute-size"/>
+    <function name="pango_fc_fontset_key_get_resolution ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-resolution"/>
+    <function name="PangoFcFontKey" link="PangoFcFontMap.html#PangoFcFontKey"/>
+    <function name="pango_fc_font_key_get_context_key ()" link="PangoFcFontMap.html#pango-fc-font-key-get-context-key"/>
+    <function name="pango_fc_font_key_get_matrix ()" link="PangoFcFontMap.html#pango-fc-font-key-get-matrix"/>
+    <function name="pango_fc_font_key_get_pattern ()" link="PangoFcFontMap.html#pango-fc-font-key-get-pattern"/>
+    <function name="PangoFcFont" link="PangoFcFont.html#PangoFcFont-struct"/>
+    <function name="PangoFcFontClass" link="PangoFcFont.html#PangoFcFontClass"/>
+    <function name="PANGO_RENDER_TYPE_FC" link="PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS"/>
+    <function name="pango_fc_font_lock_face ()" link="PangoFcFont.html#pango-fc-font-lock-face"/>
+    <function name="pango_fc_font_unlock_face ()" link="PangoFcFont.html#pango-fc-font-unlock-face"/>
+    <function name="pango_fc_font_has_char ()" link="PangoFcFont.html#pango-fc-font-has-char"/>
+    <function name="pango_fc_font_get_glyph ()" link="PangoFcFont.html#pango-fc-font-get-glyph"/>
+    <function name="pango_fc_font_get_unknown_glyph ()" link="PangoFcFont.html#pango-fc-font-get-unknown-glyph"/>
+    <function name="pango_fc_font_kern_glyphs ()" link="PangoFcFont.html#pango-fc-font-kern-glyphs"/>
+    <function name="The &quot;fontmap&quot; property" link="PangoFcFont.html#PangoFcFont--fontmap"/>
+    <function name="The &quot;pattern&quot; property" link="PangoFcFont.html#PangoFcFont--pattern"/>
+    <function name="PangoFcDecoder" link="PangoFcDecoder.html#PangoFcDecoder-struct"/>
+    <function name="PangoFcDecoderClass" link="PangoFcDecoder.html#PangoFcDecoderClass"/>
+    <function name="pango_fc_decoder_get_charset ()" link="PangoFcDecoder.html#pango-fc-decoder-get-charset"/>
+    <function name="pango_fc_decoder_get_glyph ()" link="PangoFcDecoder.html#pango-fc-decoder-get-glyph"/>
+    <function name="PangoOTTag" link="pango-OpenType-Font-Handling.html#PangoOTTag"/>
+    <function name="PangoOTInfo" link="pango-OpenType-Font-Handling.html#PangoOTInfo-struct"/>
+    <function name="PangoOTBuffer" link="pango-OpenType-Font-Handling.html#PangoOTBuffer"/>
+    <function name="PangoOTGlyph" link="pango-OpenType-Font-Handling.html#PangoOTGlyph"/>
+    <function name="PangoOTRuleset" link="pango-OpenType-Font-Handling.html#PangoOTRuleset-struct"/>
+    <function name="PangoOTRulesetDescription" link="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription"/>
+    <function name="enum PangoOTTableType" link="pango-OpenType-Font-Handling.html#PangoOTTableType"/>
+    <function name="PangoOTFeatureMap" link="pango-OpenType-Font-Handling.html#PangoOTFeatureMap"/>
+    <function name="PANGO_OT_TAG_MAKE()" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS"/>
+    <function name="PANGO_OT_TAG_MAKE_FROM_STRING()" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE-FROM-STRING--CAPS"/>
+    <function name="PANGO_OT_ALL_GLYPHS" link="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS"/>
+    <function name="PANGO_OT_NO_FEATURE" link="pango-OpenType-Font-Handling.html#PANGO-OT-NO-FEATURE--CAPS"/>
+    <function name="PANGO_OT_NO_SCRIPT" link="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS"/>
+    <function name="PANGO_OT_DEFAULT_LANGUAGE" link="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS"/>
+    <function name="PANGO_OT_TAG_DEFAULT_LANGUAGE" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS"/>
+    <function name="PANGO_OT_TAG_DEFAULT_SCRIPT" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS"/>
+    <function name="pango_ot_info_get ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-get"/>
+    <function name="pango_ot_info_find_script ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-find-script"/>
+    <function name="pango_ot_info_find_language ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-find-language"/>
+    <function name="pango_ot_info_find_feature ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature"/>
+    <function name="pango_ot_info_list_scripts ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-list-scripts"/>
+    <function name="pango_ot_info_list_languages ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-list-languages"/>
+    <function name="pango_ot_info_list_features ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-list-features"/>
+    <function name="pango_ot_buffer_new ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-new"/>
+    <function name="pango_ot_buffer_destroy ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy"/>
+    <function name="pango_ot_buffer_clear ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-clear"/>
+    <function name="pango_ot_buffer_add_glyph ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-add-glyph"/>
+    <function name="pango_ot_buffer_set_rtl ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-rtl"/>
+    <function name="pango_ot_buffer_set_zero_width_marks ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-zero-width-marks"/>
+    <function name="pango_ot_buffer_get_glyphs ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-get-glyphs"/>
+    <function name="pango_ot_buffer_output ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-output"/>
+    <function name="pango_ot_ruleset_get_for_description ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description"/>
+    <function name="pango_ot_ruleset_new ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new"/>
+    <function name="pango_ot_ruleset_new_for ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for"/>
+    <function name="pango_ot_ruleset_new_from_description ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description"/>
+    <function name="pango_ot_ruleset_add_feature ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature"/>
+    <function name="pango_ot_ruleset_maybe_add_feature ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature"/>
+    <function name="pango_ot_ruleset_maybe_add_features ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features"/>
+    <function name="pango_ot_ruleset_get_feature_count ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-feature-count"/>
+    <function name="pango_ot_ruleset_substitute ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-substitute"/>
+    <function name="pango_ot_ruleset_position ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-position"/>
+    <function name="pango_ot_ruleset_description_copy ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy"/>
+    <function name="pango_ot_ruleset_description_equal ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-equal"/>
+    <function name="pango_ot_ruleset_description_free ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free"/>
+    <function name="pango_ot_ruleset_description_hash ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-hash"/>
+    <function name="pango_ot_tag_from_language ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language"/>
+    <function name="pango_ot_tag_from_script ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script"/>
+    <function name="pango_ot_tag_to_language ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-to-language"/>
+    <function name="pango_ot_tag_to_script ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-to-script"/>
+    <function name="enum PangoCoverageLevel" link="pango-Coverage-Maps.html#PangoCoverageLevel"/>
+    <function name="PANGO_TYPE_COVERAGE_LEVEL" link="pango-Coverage-Maps.html#PANGO-TYPE-COVERAGE-LEVEL--CAPS"/>
+    <function name="PangoCoverage" link="pango-Coverage-Maps.html#PangoCoverage"/>
+    <function name="pango_coverage_new ()" link="pango-Coverage-Maps.html#pango-coverage-new"/>
+    <function name="pango_coverage_ref ()" link="pango-Coverage-Maps.html#pango-coverage-ref"/>
+    <function name="pango_coverage_unref ()" link="pango-Coverage-Maps.html#pango-coverage-unref"/>
+    <function name="pango_coverage_copy ()" link="pango-Coverage-Maps.html#pango-coverage-copy"/>
+    <function name="pango_coverage_get ()" link="pango-Coverage-Maps.html#pango-coverage-get"/>
+    <function name="pango_coverage_max ()" link="pango-Coverage-Maps.html#pango-coverage-max"/>
+    <function name="pango_coverage_set ()" link="pango-Coverage-Maps.html#pango-coverage-set"/>
+    <function name="pango_coverage_to_bytes ()" link="pango-Coverage-Maps.html#pango-coverage-to-bytes"/>
+    <function name="pango_coverage_from_bytes ()" link="pango-Coverage-Maps.html#pango-coverage-from-bytes"/>
+    <function name="PangoEngineInfo" link="pango-Engines.html#PangoEngineInfo"/>
+    <function name="PangoEngineScriptInfo" link="pango-Engines.html#PangoEngineScriptInfo"/>
+    <function name="PangoEngine" link="pango-Engines.html#PangoEngine-struct"/>
+    <function name="PangoEngineClass" link="pango-Engines.html#PangoEngineClass"/>
+    <function name="PANGO_RENDER_TYPE_NONE" link="pango-Engines.html#PANGO-RENDER-TYPE-NONE--CAPS"/>
+    <function name="script_engine_list ()" link="pango-Engines.html#script-engine-list"/>
+    <function name="script_engine_init ()" link="pango-Engines.html#script-engine-init"/>
+    <function name="script_engine_exit ()" link="pango-Engines.html#script-engine-exit"/>
+    <function name="script_engine_create ()" link="pango-Engines.html#script-engine-create"/>
+    <function name="PangoEngineLang" link="PangoEngineLang.html#PangoEngineLang-struct"/>
+    <function name="PangoEngineLangClass" link="PangoEngineLang.html#PangoEngineLangClass"/>
+    <function name="PANGO_ENGINE_TYPE_LANG" link="PangoEngineLang.html#PANGO-ENGINE-TYPE-LANG--CAPS"/>
+    <function name="PANGO_ENGINE_LANG_DEFINE_TYPE()" link="PangoEngineLang.html#PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS"/>
+    <function name="PangoEngineShape" link="PangoEngineShape.html#PangoEngineShape-struct"/>
+    <function name="PangoEngineShapeClass" link="PangoEngineShape.html#PangoEngineShapeClass"/>
+    <function name="PANGO_ENGINE_TYPE_SHAPE" link="PangoEngineShape.html#PANGO-ENGINE-TYPE-SHAPE--CAPS"/>
+    <function name="PANGO_ENGINE_SHAPE_DEFINE_TYPE()" link="PangoEngineShape.html#PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS"/>
+    <function name="PangoIncludedModule" link="pango-Modules.html#PangoIncludedModule"/>
+    <function name="PangoMap" link="pango-Modules.html#PangoMap"/>
+    <function name="PangoMapEntry" link="pango-Modules.html#PangoMapEntry"/>
+    <function name="pango_find_map ()" link="pango-Modules.html#pango-find-map"/>
+    <function name="pango_map_get_engine ()" link="pango-Modules.html#pango-map-get-engine"/>
+    <function name="pango_map_get_engines ()" link="pango-Modules.html#pango-map-get-engines"/>
+    <function name="pango_module_register ()" link="pango-Modules.html#pango-module-register"/>
+    <function name="pango_split_file_list ()" link="pango-Miscellaneous-Utilities.html#pango-split-file-list"/>
+    <function name="pango_trim_string ()" link="pango-Miscellaneous-Utilities.html#pango-trim-string"/>
+    <function name="pango_read_line ()" link="pango-Miscellaneous-Utilities.html#pango-read-line"/>
+    <function name="pango_skip_space ()" link="pango-Miscellaneous-Utilities.html#pango-skip-space"/>
+    <function name="pango_scan_word ()" link="pango-Miscellaneous-Utilities.html#pango-scan-word"/>
+    <function name="pango_scan_string ()" link="pango-Miscellaneous-Utilities.html#pango-scan-string"/>
+    <function name="pango_scan_int ()" link="pango-Miscellaneous-Utilities.html#pango-scan-int"/>
+    <function name="pango_config_key_get ()" link="pango-Miscellaneous-Utilities.html#pango-config-key-get"/>
+    <function name="pango_lookup_aliases ()" link="pango-Miscellaneous-Utilities.html#pango-lookup-aliases"/>
+    <function name="pango_parse_enum ()" link="pango-Miscellaneous-Utilities.html#pango-parse-enum"/>
+    <function name="pango_parse_style ()" link="pango-Miscellaneous-Utilities.html#pango-parse-style"/>
+    <function name="pango_parse_variant ()" link="pango-Miscellaneous-Utilities.html#pango-parse-variant"/>
+    <function name="pango_parse_weight ()" link="pango-Miscellaneous-Utilities.html#pango-parse-weight"/>
+    <function name="pango_parse_stretch ()" link="pango-Miscellaneous-Utilities.html#pango-parse-stretch"/>
+    <function name="pango_get_sysconf_subdirectory ()" link="pango-Miscellaneous-Utilities.html#pango-get-sysconf-subdirectory"/>
+    <function name="pango_get_lib_subdirectory ()" link="pango-Miscellaneous-Utilities.html#pango-get-lib-subdirectory"/>
+    <function name="pango_log2vis_get_embedding_levels ()" link="pango-Miscellaneous-Utilities.html#pango-log2vis-get-embedding-levels"/>
+    <function name="pango_is_zero_width ()" link="pango-Miscellaneous-Utilities.html#pango-is-zero-width"/>
+    <function name="pango_quantize_line_geometry ()" link="pango-Miscellaneous-Utilities.html#pango-quantize-line-geometry"/>
+    <function name="PANGO_VERSION_ENCODE()" link="pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS"/>
+    <function name="PANGO_VERSION" link="pango-Version-Checking.html#PANGO-VERSION--CAPS"/>
+    <function name="PANGO_VERSION_MAJOR" link="pango-Version-Checking.html#PANGO-VERSION-MAJOR--CAPS"/>
+    <function name="PANGO_VERSION_MINOR" link="pango-Version-Checking.html#PANGO-VERSION-MINOR--CAPS"/>
+    <function name="PANGO_VERSION_MICRO" link="pango-Version-Checking.html#PANGO-VERSION-MICRO--CAPS"/>
+    <function name="PANGO_VERSION_STRING" link="pango-Version-Checking.html#PANGO-VERSION-STRING--CAPS"/>
+    <function name="PANGO_VERSION_CHECK()" link="pango-Version-Checking.html#PANGO-VERSION-CHECK--CAPS"/>
+    <function name="pango_version ()" link="pango-Version-Checking.html#pango-version"/>
+    <function name="pango_version_string ()" link="pango-Version-Checking.html#pango-version-string"/>
+    <function name="pango_version_check ()" link="pango-Version-Checking.html#pango-version-check"/>
+  </functions>
+</book>
diff --git a/docs/html/pango.devhelp2 b/docs/html/pango.devhelp2
new file mode 100755 (executable)
index 0000000..b527c04
--- /dev/null
@@ -0,0 +1,991 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="Pango Reference Manual" link="index.html" author="" name="pango" version="2" language="c">
+  <chapters>
+    <sub name="Basic Pango Interfaces" link="pango.html">
+      <sub name="Rendering" link="pango-Text-Processing.html"/>
+      <sub name="Glyph Storage" link="pango-Glyph-Storage.html"/>
+      <sub name="Fonts" link="pango-Fonts.html"/>
+      <sub name="Text Attributes" link="pango-Text-Attributes.html"/>
+      <sub name="Tab Stops" link="pango-Tab-Stops.html"/>
+      <sub name="Text Attribute Markup" link="PangoMarkupFormat.html"/>
+      <sub name="Layout Objects" link="pango-Layout-Objects.html"/>
+      <sub name="Scripts and Languages" link="pango-Scripts-and-Languages.html"/>
+      <sub name="Bidirectional Text" link="pango-Bidirectional-Text.html"/>
+      <sub name="Vertical Text" link="pango-Vertical-Text.html"/>
+    </sub>
+    <sub name="Rendering with Pango" link="rendering.html">
+      <sub name="Win32 Fonts and Rendering" link="pango-Win32-Fonts-and-Rendering.html"/>
+      <sub name="FreeType Fonts and Rendering" link="pango-FreeType-Fonts-and-Rendering.html"/>
+      <sub name="Xft Fonts and Rendering" link="pango-Xft-Fonts-and-Rendering.html"/>
+      <sub name="Cairo Rendering" link="pango-Cairo-Rendering.html"/>
+      <sub name="ATSUI Fonts" link="pango-ATSUI-Fonts.html"/>
+      <sub name="Deprecated X font backend" link="pango-X-Fonts-and-Rendering.html"/>
+    </sub>
+    <sub name="Low Level Functionality" link="lowlevel.html">
+      <sub name="PangoRenderer" link="PangoRenderer.html"/>
+      <sub name="PangoFcFontMap" link="PangoFcFontMap.html"/>
+      <sub name="PangoFcFont" link="PangoFcFont.html"/>
+      <sub name="PangoFcDecoder" link="PangoFcDecoder.html"/>
+      <sub name="OpenType Font Handling" link="pango-OpenType-Font-Handling.html"/>
+      <sub name="Coverage Maps" link="pango-Coverage-Maps.html"/>
+      <sub name="Engines" link="pango-Engines.html"/>
+      <sub name="PangoEngineLang" link="PangoEngineLang.html"/>
+      <sub name="PangoEngineShape" link="PangoEngineShape.html"/>
+      <sub name="Modules" link="pango-Modules.html"/>
+      <sub name="Miscellaneous Utilities" link="pango-Miscellaneous-Utilities.html"/>
+      <sub name="Version Checking" link="pango-Version-Checking.html"/>
+    </sub>
+    <sub name="Pango Tools" link="tools.html">
+      <sub name="pango-querymodules" link="pango-querymodules.html"/>
+    </sub>
+    <sub name="Object Hierarchy" link="pango-hierarchy.html"/>
+    <sub name="Index" link="index-all.html"/>
+    <sub name="Index of deprecated symbols" link="index-deprecated.html"/>
+    <sub name="Index of new symbols in 1.2" link="index-1.2.html"/>
+    <sub name="Index of new symbols in 1.4" link="index-1.4.html"/>
+    <sub name="Index of new symbols in 1.6" link="index-1.6.html"/>
+    <sub name="Index of new symbols in 1.8" link="index-1.8.html"/>
+    <sub name="Index of new symbols in 1.10" link="index-1.10.html"/>
+    <sub name="Index of new symbols in 1.12" link="index-1.12.html"/>
+    <sub name="Index of new symbols in 1.14" link="index-1.14.html"/>
+    <sub name="Index of new symbols in 1.16" link="index-1.16.html"/>
+    <sub name="Index of new symbols in 1.18" link="index-1.18.html"/>
+    <sub name="Index of new symbols in 1.20" link="index-1.20.html"/>
+    <sub name="Index of new symbols in 1.22" link="index-1.22.html"/>
+    <sub name="Index of new symbols in 1.24" link="index-1.24.html"/>
+    <sub name="Index of new symbols in 1.26" link="index-1.26.html"/>
+  </chapters>
+  <functions>
+    <keyword type="struct" name="PangoContext" link="pango-Text-Processing.html#PangoContext-struct"/>
+    <keyword type="struct" name="PangoItem" link="pango-Text-Processing.html#PangoItem"/>
+    <keyword type="struct" name="PangoAnalysis" link="pango-Text-Processing.html#PangoAnalysis"/>
+    <keyword type="macro" name="PANGO_ANALYSIS_FLAG_CENTERED_BASELINE" link="pango-Text-Processing.html#PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS"/>
+    <keyword type="macro" name="PANGO_TYPE_DIRECTION" link="pango-Text-Processing.html#PANGO-TYPE-DIRECTION--CAPS"/>
+    <keyword type="function" name="pango_itemize ()" link="pango-Text-Processing.html#pango-itemize"/>
+    <keyword type="function" name="pango_itemize_with_base_dir ()" link="pango-Text-Processing.html#pango-itemize-with-base-dir" since="1.4"/>
+    <keyword type="function" name="pango_item_free ()" link="pango-Text-Processing.html#pango-item-free"/>
+    <keyword type="function" name="pango_item_copy ()" link="pango-Text-Processing.html#pango-item-copy"/>
+    <keyword type="function" name="pango_item_new ()" link="pango-Text-Processing.html#pango-item-new"/>
+    <keyword type="function" name="pango_item_split ()" link="pango-Text-Processing.html#pango-item-split"/>
+    <keyword type="function" name="pango_reorder_items ()" link="pango-Text-Processing.html#pango-reorder-items"/>
+    <keyword type="function" name="pango_context_new ()" link="pango-Text-Processing.html#pango-context-new"/>
+    <keyword type="function" name="pango_context_set_font_map ()" link="pango-Text-Processing.html#pango-context-set-font-map"/>
+    <keyword type="function" name="pango_context_get_font_map ()" link="pango-Text-Processing.html#pango-context-get-font-map" since="1.6"/>
+    <keyword type="function" name="pango_context_get_font_description ()" link="pango-Text-Processing.html#pango-context-get-font-description"/>
+    <keyword type="function" name="pango_context_set_font_description ()" link="pango-Text-Processing.html#pango-context-set-font-description"/>
+    <keyword type="function" name="pango_context_get_language ()" link="pango-Text-Processing.html#pango-context-get-language"/>
+    <keyword type="function" name="pango_context_set_language ()" link="pango-Text-Processing.html#pango-context-set-language"/>
+    <keyword type="function" name="pango_context_get_base_dir ()" link="pango-Text-Processing.html#pango-context-get-base-dir"/>
+    <keyword type="function" name="pango_context_set_base_dir ()" link="pango-Text-Processing.html#pango-context-set-base-dir"/>
+    <keyword type="function" name="pango_context_get_base_gravity ()" link="pango-Text-Processing.html#pango-context-get-base-gravity" since="1.16"/>
+    <keyword type="function" name="pango_context_set_base_gravity ()" link="pango-Text-Processing.html#pango-context-set-base-gravity" since="1.16"/>
+    <keyword type="function" name="pango_context_get_gravity ()" link="pango-Text-Processing.html#pango-context-get-gravity" since="1.16"/>
+    <keyword type="function" name="pango_context_get_gravity_hint ()" link="pango-Text-Processing.html#pango-context-get-gravity-hint" since="1.16"/>
+    <keyword type="function" name="pango_context_set_gravity_hint ()" link="pango-Text-Processing.html#pango-context-set-gravity-hint" since="1.16"/>
+    <keyword type="function" name="pango_context_get_matrix ()" link="pango-Text-Processing.html#pango-context-get-matrix" since="1.6"/>
+    <keyword type="function" name="pango_context_set_matrix ()" link="pango-Text-Processing.html#pango-context-set-matrix" since="1.6"/>
+    <keyword type="function" name="pango_context_load_font ()" link="pango-Text-Processing.html#pango-context-load-font"/>
+    <keyword type="function" name="pango_context_load_fontset ()" link="pango-Text-Processing.html#pango-context-load-fontset"/>
+    <keyword type="function" name="pango_context_get_metrics ()" link="pango-Text-Processing.html#pango-context-get-metrics"/>
+    <keyword type="function" name="pango_context_list_families ()" link="pango-Text-Processing.html#pango-context-list-families"/>
+    <keyword type="function" name="pango_break ()" link="pango-Text-Processing.html#pango-break"/>
+    <keyword type="function" name="pango_get_log_attrs ()" link="pango-Text-Processing.html#pango-get-log-attrs"/>
+    <keyword type="function" name="pango_find_paragraph_boundary ()" link="pango-Text-Processing.html#pango-find-paragraph-boundary"/>
+    <keyword type="function" name="pango_default_break ()" link="pango-Text-Processing.html#pango-default-break"/>
+    <keyword type="struct" name="PangoLogAttr" link="pango-Text-Processing.html#PangoLogAttr"/>
+    <keyword type="function" name="pango_shape ()" link="pango-Text-Processing.html#pango-shape"/>
+    <keyword type="macro" name="PANGO_SCALE" link="pango-Glyph-Storage.html#PANGO-SCALE--CAPS"/>
+    <keyword type="macro" name="PANGO_PIXELS()" link="pango-Glyph-Storage.html#PANGO-PIXELS--CAPS"/>
+    <keyword type="macro" name="PANGO_PIXELS_FLOOR()" link="pango-Glyph-Storage.html#PANGO-PIXELS-FLOOR--CAPS" since="1.14"/>
+    <keyword type="macro" name="PANGO_PIXELS_CEIL()" link="pango-Glyph-Storage.html#PANGO-PIXELS-CEIL--CAPS" since="1.14"/>
+    <keyword type="macro" name="PANGO_UNITS_ROUND()" link="pango-Glyph-Storage.html#PANGO-UNITS-ROUND--CAPS" since="1.18"/>
+    <keyword type="function" name="pango_units_to_double ()" link="pango-Glyph-Storage.html#pango-units-to-double" since="1.16"/>
+    <keyword type="function" name="pango_units_from_double ()" link="pango-Glyph-Storage.html#pango-units-from-double" since="1.16"/>
+    <keyword type="struct" name="PangoRectangle" link="pango-Glyph-Storage.html#PangoRectangle"/>
+    <keyword type="macro" name="PANGO_ASCENT()" link="pango-Glyph-Storage.html#PANGO-ASCENT--CAPS"/>
+    <keyword type="macro" name="PANGO_DESCENT()" link="pango-Glyph-Storage.html#PANGO-DESCENT--CAPS"/>
+    <keyword type="macro" name="PANGO_LBEARING()" link="pango-Glyph-Storage.html#PANGO-LBEARING--CAPS"/>
+    <keyword type="macro" name="PANGO_RBEARING()" link="pango-Glyph-Storage.html#PANGO-RBEARING--CAPS"/>
+    <keyword type="function" name="pango_extents_to_pixels ()" link="pango-Glyph-Storage.html#pango-extents-to-pixels" since="1.16"/>
+    <keyword type="struct" name="PangoMatrix" link="pango-Glyph-Storage.html#PangoMatrix" since="1.6"/>
+    <keyword type="macro" name="PANGO_TYPE_MATRIX" link="pango-Glyph-Storage.html#PANGO-TYPE-MATRIX--CAPS"/>
+    <keyword type="macro" name="PANGO_MATRIX_INIT" link="pango-Glyph-Storage.html#PANGO-MATRIX-INIT--CAPS" since="1.6"/>
+    <keyword type="function" name="pango_matrix_copy ()" link="pango-Glyph-Storage.html#pango-matrix-copy" since="1.6"/>
+    <keyword type="function" name="pango_matrix_free ()" link="pango-Glyph-Storage.html#pango-matrix-free" since="1.6"/>
+    <keyword type="function" name="pango_matrix_translate ()" link="pango-Glyph-Storage.html#pango-matrix-translate" since="1.6"/>
+    <keyword type="function" name="pango_matrix_scale ()" link="pango-Glyph-Storage.html#pango-matrix-scale" since="1.6"/>
+    <keyword type="function" name="pango_matrix_rotate ()" link="pango-Glyph-Storage.html#pango-matrix-rotate" since="1.6"/>
+    <keyword type="function" name="pango_matrix_concat ()" link="pango-Glyph-Storage.html#pango-matrix-concat" since="1.6"/>
+    <keyword type="function" name="pango_matrix_transform_point ()" link="pango-Glyph-Storage.html#pango-matrix-transform-point" since="1.16"/>
+    <keyword type="function" name="pango_matrix_transform_distance ()" link="pango-Glyph-Storage.html#pango-matrix-transform-distance" since="1.16"/>
+    <keyword type="function" name="pango_matrix_transform_rectangle ()" link="pango-Glyph-Storage.html#pango-matrix-transform-rectangle" since="1.16"/>
+    <keyword type="function" name="pango_matrix_transform_pixel_rectangle ()" link="pango-Glyph-Storage.html#pango-matrix-transform-pixel-rectangle" since="1.16"/>
+    <keyword type="function" name="pango_matrix_get_font_scale_factor ()" link="pango-Glyph-Storage.html#pango-matrix-get-font-scale-factor" since="1.12"/>
+    <keyword type="typedef" name="PangoGlyph" link="pango-Glyph-Storage.html#PangoGlyph"/>
+    <keyword type="macro" name="PANGO_GLYPH_EMPTY" link="pango-Glyph-Storage.html#PANGO-GLYPH-EMPTY--CAPS"/>
+    <keyword type="macro" name="PANGO_GLYPH_INVALID_INPUT" link="pango-Glyph-Storage.html#PANGO-GLYPH-INVALID-INPUT--CAPS" since="1.20"/>
+    <keyword type="macro" name="PANGO_GLYPH_UNKNOWN_FLAG" link="pango-Glyph-Storage.html#PANGO-GLYPH-UNKNOWN-FLAG--CAPS"/>
+    <keyword type="macro" name="PANGO_GET_UNKNOWN_GLYPH()" link="pango-Glyph-Storage.html#PANGO-GET-UNKNOWN-GLYPH--CAPS"/>
+    <keyword type="struct" name="PangoGlyphInfo" link="pango-Glyph-Storage.html#PangoGlyphInfo"/>
+    <keyword type="struct" name="PangoGlyphGeometry" link="pango-Glyph-Storage.html#PangoGlyphGeometry"/>
+    <keyword type="typedef" name="PangoGlyphUnit" link="pango-Glyph-Storage.html#PangoGlyphUnit"/>
+    <keyword type="struct" name="PangoGlyphVisAttr" link="pango-Glyph-Storage.html#PangoGlyphVisAttr"/>
+    <keyword type="struct" name="PangoGlyphString" link="pango-Glyph-Storage.html#PangoGlyphString"/>
+    <keyword type="struct" name="PangoGlyphItem" link="pango-Glyph-Storage.html#PangoGlyphItem"/>
+    <keyword type="struct" name="PangoGlyphItemIter" link="pango-Glyph-Storage.html#PangoGlyphItemIter" since="1.22"/>
+    <keyword type="macro" name="PANGO_TYPE_GLYPH_STRING" link="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-STRING--CAPS"/>
+    <keyword type="function" name="pango_glyph_string_new ()" link="pango-Glyph-Storage.html#pango-glyph-string-new"/>
+    <keyword type="function" name="pango_glyph_string_copy ()" link="pango-Glyph-Storage.html#pango-glyph-string-copy"/>
+    <keyword type="function" name="pango_glyph_string_set_size ()" link="pango-Glyph-Storage.html#pango-glyph-string-set-size"/>
+    <keyword type="function" name="pango_glyph_string_free ()" link="pango-Glyph-Storage.html#pango-glyph-string-free"/>
+    <keyword type="function" name="pango_glyph_string_extents ()" link="pango-Glyph-Storage.html#pango-glyph-string-extents"/>
+    <keyword type="function" name="pango_glyph_string_extents_range ()" link="pango-Glyph-Storage.html#pango-glyph-string-extents-range"/>
+    <keyword type="function" name="pango_glyph_string_get_width ()" link="pango-Glyph-Storage.html#pango-glyph-string-get-width" since="1.14"/>
+    <keyword type="function" name="pango_glyph_string_index_to_x ()" link="pango-Glyph-Storage.html#pango-glyph-string-index-to-x"/>
+    <keyword type="function" name="pango_glyph_string_x_to_index ()" link="pango-Glyph-Storage.html#pango-glyph-string-x-to-index"/>
+    <keyword type="function" name="pango_glyph_string_get_logical_widths ()" link="pango-Glyph-Storage.html#pango-glyph-string-get-logical-widths"/>
+    <keyword type="macro" name="PANGO_TYPE_GLYPH_ITEM" link="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM--CAPS" since="1.20"/>
+    <keyword type="function" name="pango_glyph_item_copy ()" link="pango-Glyph-Storage.html#pango-glyph-item-copy" since="1.20"/>
+    <keyword type="function" name="pango_glyph_item_free ()" link="pango-Glyph-Storage.html#pango-glyph-item-free" since="1.6"/>
+    <keyword type="function" name="pango_glyph_item_split ()" link="pango-Glyph-Storage.html#pango-glyph-item-split" since="1.2"/>
+    <keyword type="function" name="pango_glyph_item_apply_attrs ()" link="pango-Glyph-Storage.html#pango-glyph-item-apply-attrs" since="1.2"/>
+    <keyword type="function" name="pango_glyph_item_letter_space ()" link="pango-Glyph-Storage.html#pango-glyph-item-letter-space" since="1.6"/>
+    <keyword type="function" name="pango_glyph_item_get_logical_widths ()" link="pango-Glyph-Storage.html#pango-glyph-item-get-logical-widths" since="1.26"/>
+    <keyword type="macro" name="PANGO_TYPE_GLYPH_ITEM_ITER" link="pango-Glyph-Storage.html#PANGO-TYPE-GLYPH-ITEM-ITER--CAPS" since="1.22"/>
+    <keyword type="function" name="pango_glyph_item_iter_copy ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-copy" since="1.22"/>
+    <keyword type="function" name="pango_glyph_item_iter_free ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-free" since="1.22"/>
+    <keyword type="function" name="pango_glyph_item_iter_init_start ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-init-start" since="1.22"/>
+    <keyword type="function" name="pango_glyph_item_iter_init_end ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-init-end" since="1.22"/>
+    <keyword type="function" name="pango_glyph_item_iter_next_cluster ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-next-cluster" since="1.22"/>
+    <keyword type="function" name="pango_glyph_item_iter_prev_cluster ()" link="pango-Glyph-Storage.html#pango-glyph-item-iter-prev-cluster" since="1.22"/>
+    <keyword type="struct" name="PangoFontDescription" link="pango-Fonts.html#PangoFontDescription"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT_DESCRIPTION" link="pango-Fonts.html#PANGO-TYPE-FONT-DESCRIPTION--CAPS"/>
+    <keyword type="enum" name="enum PangoStyle" link="pango-Fonts.html#PangoStyle"/>
+    <keyword type="macro" name="PANGO_TYPE_STYLE" link="pango-Fonts.html#PANGO-TYPE-STYLE--CAPS"/>
+    <keyword type="enum" name="enum PangoWeight" link="pango-Fonts.html#PangoWeight"/>
+    <keyword type="macro" name="PANGO_TYPE_WEIGHT" link="pango-Fonts.html#PANGO-TYPE-WEIGHT--CAPS"/>
+    <keyword type="enum" name="enum PangoVariant" link="pango-Fonts.html#PangoVariant"/>
+    <keyword type="macro" name="PANGO_TYPE_VARIANT" link="pango-Fonts.html#PANGO-TYPE-VARIANT--CAPS"/>
+    <keyword type="enum" name="enum PangoStretch" link="pango-Fonts.html#PangoStretch"/>
+    <keyword type="macro" name="PANGO_TYPE_STRETCH" link="pango-Fonts.html#PANGO-TYPE-STRETCH--CAPS"/>
+    <keyword type="enum" name="enum PangoFontMask" link="pango-Fonts.html#PangoFontMask"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT_MASK" link="pango-Fonts.html#PANGO-TYPE-FONT-MASK--CAPS"/>
+    <keyword type="function" name="pango_font_description_new ()" link="pango-Fonts.html#pango-font-description-new"/>
+    <keyword type="function" name="pango_font_description_copy ()" link="pango-Fonts.html#pango-font-description-copy"/>
+    <keyword type="function" name="pango_font_description_copy_static ()" link="pango-Fonts.html#pango-font-description-copy-static"/>
+    <keyword type="function" name="pango_font_description_hash ()" link="pango-Fonts.html#pango-font-description-hash"/>
+    <keyword type="function" name="pango_font_description_equal ()" link="pango-Fonts.html#pango-font-description-equal"/>
+    <keyword type="function" name="pango_font_description_free ()" link="pango-Fonts.html#pango-font-description-free"/>
+    <keyword type="function" name="pango_font_descriptions_free ()" link="pango-Fonts.html#pango-font-descriptions-free"/>
+    <keyword type="function" name="pango_font_description_set_family ()" link="pango-Fonts.html#pango-font-description-set-family"/>
+    <keyword type="function" name="pango_font_description_set_family_static ()" link="pango-Fonts.html#pango-font-description-set-family-static"/>
+    <keyword type="function" name="pango_font_description_get_family ()" link="pango-Fonts.html#pango-font-description-get-family"/>
+    <keyword type="function" name="pango_font_description_set_style ()" link="pango-Fonts.html#pango-font-description-set-style"/>
+    <keyword type="function" name="pango_font_description_get_style ()" link="pango-Fonts.html#pango-font-description-get-style"/>
+    <keyword type="function" name="pango_font_description_set_variant ()" link="pango-Fonts.html#pango-font-description-set-variant"/>
+    <keyword type="function" name="pango_font_description_get_variant ()" link="pango-Fonts.html#pango-font-description-get-variant"/>
+    <keyword type="function" name="pango_font_description_set_weight ()" link="pango-Fonts.html#pango-font-description-set-weight"/>
+    <keyword type="function" name="pango_font_description_get_weight ()" link="pango-Fonts.html#pango-font-description-get-weight"/>
+    <keyword type="function" name="pango_font_description_set_stretch ()" link="pango-Fonts.html#pango-font-description-set-stretch"/>
+    <keyword type="function" name="pango_font_description_get_stretch ()" link="pango-Fonts.html#pango-font-description-get-stretch"/>
+    <keyword type="function" name="pango_font_description_set_size ()" link="pango-Fonts.html#pango-font-description-set-size"/>
+    <keyword type="function" name="pango_font_description_get_size ()" link="pango-Fonts.html#pango-font-description-get-size"/>
+    <keyword type="function" name="pango_font_description_set_absolute_size ()" link="pango-Fonts.html#pango-font-description-set-absolute-size" since="1.8"/>
+    <keyword type="function" name="pango_font_description_get_size_is_absolute ()" link="pango-Fonts.html#pango-font-description-get-size-is-absolute" since="1.8"/>
+    <keyword type="function" name="pango_font_description_set_gravity ()" link="pango-Fonts.html#pango-font-description-set-gravity" since="1.16"/>
+    <keyword type="function" name="pango_font_description_get_gravity ()" link="pango-Fonts.html#pango-font-description-get-gravity" since="1.16"/>
+    <keyword type="function" name="pango_font_description_get_set_fields ()" link="pango-Fonts.html#pango-font-description-get-set-fields"/>
+    <keyword type="function" name="pango_font_description_unset_fields ()" link="pango-Fonts.html#pango-font-description-unset-fields"/>
+    <keyword type="function" name="pango_font_description_merge ()" link="pango-Fonts.html#pango-font-description-merge"/>
+    <keyword type="function" name="pango_font_description_merge_static ()" link="pango-Fonts.html#pango-font-description-merge-static"/>
+    <keyword type="function" name="pango_font_description_better_match ()" link="pango-Fonts.html#pango-font-description-better-match"/>
+    <keyword type="function" name="pango_font_description_from_string ()" link="pango-Fonts.html#pango-font-description-from-string"/>
+    <keyword type="function" name="pango_font_description_to_string ()" link="pango-Fonts.html#pango-font-description-to-string"/>
+    <keyword type="function" name="pango_font_description_to_filename ()" link="pango-Fonts.html#pango-font-description-to-filename"/>
+    <keyword type="struct" name="PangoFontMetrics" link="pango-Fonts.html#PangoFontMetrics"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT_METRICS" link="pango-Fonts.html#PANGO-TYPE-FONT-METRICS--CAPS"/>
+    <keyword type="function" name="pango_font_metrics_ref ()" link="pango-Fonts.html#pango-font-metrics-ref"/>
+    <keyword type="function" name="pango_font_metrics_unref ()" link="pango-Fonts.html#pango-font-metrics-unref"/>
+    <keyword type="function" name="pango_font_metrics_get_ascent ()" link="pango-Fonts.html#pango-font-metrics-get-ascent"/>
+    <keyword type="function" name="pango_font_metrics_get_descent ()" link="pango-Fonts.html#pango-font-metrics-get-descent"/>
+    <keyword type="function" name="pango_font_metrics_get_approximate_char_width ()" link="pango-Fonts.html#pango-font-metrics-get-approximate-char-width"/>
+    <keyword type="function" name="pango_font_metrics_get_approximate_digit_width ()" link="pango-Fonts.html#pango-font-metrics-get-approximate-digit-width"/>
+    <keyword type="function" name="pango_font_metrics_get_underline_thickness ()" link="pango-Fonts.html#pango-font-metrics-get-underline-thickness" since="1.6"/>
+    <keyword type="function" name="pango_font_metrics_get_underline_position ()" link="pango-Fonts.html#pango-font-metrics-get-underline-position" since="1.6"/>
+    <keyword type="function" name="pango_font_metrics_get_strikethrough_thickness ()" link="pango-Fonts.html#pango-font-metrics-get-strikethrough-thickness" since="1.6"/>
+    <keyword type="function" name="pango_font_metrics_get_strikethrough_position ()" link="pango-Fonts.html#pango-font-metrics-get-strikethrough-position" since="1.6"/>
+    <keyword type="struct" name="PangoFont" link="pango-Fonts.html#PangoFont-struct"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT" link="pango-Fonts.html#PANGO-TYPE-FONT--CAPS"/>
+    <keyword type="macro" name="PANGO_FONT()" link="pango-Fonts.html#PANGO-FONT--CAPS"/>
+    <keyword type="macro" name="PANGO_IS_FONT()" link="pango-Fonts.html#PANGO-IS-FONT--CAPS"/>
+    <keyword type="function" name="pango_font_find_shaper ()" link="pango-Fonts.html#pango-font-find-shaper"/>
+    <keyword type="function" name="pango_font_describe ()" link="pango-Fonts.html#pango-font-describe"/>
+    <keyword type="function" name="pango_font_describe_with_absolute_size ()" link="pango-Fonts.html#pango-font-describe-with-absolute-size" since="1.14"/>
+    <keyword type="function" name="pango_font_get_coverage ()" link="pango-Fonts.html#pango-font-get-coverage"/>
+    <keyword type="function" name="pango_font_get_glyph_extents ()" link="pango-Fonts.html#pango-font-get-glyph-extents"/>
+    <keyword type="function" name="pango_font_get_metrics ()" link="pango-Fonts.html#pango-font-get-metrics"/>
+    <keyword type="function" name="pango_font_get_font_map ()" link="pango-Fonts.html#pango-font-get-font-map" since="1.10"/>
+    <keyword type="struct" name="PangoFontFamily" link="pango-Fonts.html#PangoFontFamily-struct"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT_FAMILY" link="pango-Fonts.html#PANGO-TYPE-FONT-FAMILY--CAPS"/>
+    <keyword type="macro" name="PANGO_FONT_FAMILY()" link="pango-Fonts.html#PANGO-FONT-FAMILY--CAPS"/>
+    <keyword type="macro" name="PANGO_IS_FONT_FAMILY()" link="pango-Fonts.html#PANGO-IS-FONT-FAMILY--CAPS"/>
+    <keyword type="function" name="pango_font_family_get_name ()" link="pango-Fonts.html#pango-font-family-get-name"/>
+    <keyword type="function" name="pango_font_family_is_monospace ()" link="pango-Fonts.html#pango-font-family-is-monospace" since="1.4"/>
+    <keyword type="function" name="pango_font_family_list_faces ()" link="pango-Fonts.html#pango-font-family-list-faces"/>
+    <keyword type="struct" name="PangoFontFace" link="pango-Fonts.html#PangoFontFace-struct"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT_FACE" link="pango-Fonts.html#PANGO-TYPE-FONT-FACE--CAPS"/>
+    <keyword type="macro" name="PANGO_FONT_FACE()" link="pango-Fonts.html#PANGO-FONT-FACE--CAPS"/>
+    <keyword type="macro" name="PANGO_IS_FONT_FACE()" link="pango-Fonts.html#PANGO-IS-FONT-FACE--CAPS"/>
+    <keyword type="function" name="pango_font_face_get_face_name ()" link="pango-Fonts.html#pango-font-face-get-face-name"/>
+    <keyword type="function" name="pango_font_face_list_sizes ()" link="pango-Fonts.html#pango-font-face-list-sizes" since="1.4"/>
+    <keyword type="function" name="pango_font_face_describe ()" link="pango-Fonts.html#pango-font-face-describe"/>
+    <keyword type="function" name="pango_font_face_is_synthesized ()" link="pango-Fonts.html#pango-font-face-is-synthesized" since="1.18"/>
+    <keyword type="struct" name="PangoFontMap" link="pango-Fonts.html#PangoFontMap-struct"/>
+    <keyword type="macro" name="PANGO_TYPE_FONT_MAP" link="pango-Fonts.html#PANGO-TYPE-FONT-MAP--CAPS"/>
+    <keyword type="macro" name="PANGO_FONT_MAP()" link="pango-Fonts.html#PANGO-FONT-MAP--CAPS"/>
+    <keyword type="macro" name="PANGO_IS_FONT_MAP()" link="pango-Fonts.html#PANGO-IS-FONT-MAP--CAPS"/>
+    <keyword type="struct" name="PangoFontMapClass" link="pango-Fonts.html#PangoFontMapClass"/>
+    <keyword type="macro" name="PANGO_FONT_MAP_CLASS()" link="pango-Fonts.html#PANGO-FONT-MAP-CLASS--CAPS"/>
+    <keyword type="macro" name="PANGO_IS_FONT_MAP_CLASS()" link="pango-Fonts.html#PANGO-IS-FONT-MAP-CLASS--CAPS"/>
+    <keyword type="macro" name="PANGO_FONT_MAP_GET_CLASS()" link="pango-Fonts.html#PANGO-FONT-MAP-GET-CLASS--CAPS"/>
+    <keyword type="function" name="pango_font_map_create_context ()" link="pango-Fonts.html#pango-font-map-create-context" since="1.22"/>
+    <keyword type="function" name="pango_font_map_load_font ()" link="pango-Fonts.html#pango-font-map-load-font"/>
+    <keyword type="function" name="pango_font_map_load_fontset ()" link="pango-Fonts.html#pango-font-map-load-fontset"/>
+    <keyword type="function" name="pango_font_map_list_families ()" link="pango-Fonts.html#pango-font-map-list-families"/>
+    <keyword type="function" name="pango_font_map_get_shape_engine_type ()" link="pango-Fonts.html#pango-font-map-get-shape-engine-type" since="1.4"/>
+    <keyword type="struct" name="PangoFontset" link="pango-Fonts.html#PangoFontset-struct"/>
+    <keyword type="macro" name="PANGO_TYPE_FONTSET" link="pango-Fonts.html#PANGO-TYPE-FONTSET--CAPS"/>
+    <keyword type="struct" name="PangoFontsetClass" link="pango-Fonts.html#PangoFontsetClass"/>
+    <keyword type="function" name="pango_fontset_get_font ()" link="pango-Fonts.html#pango-fontset-get-font"/>
+    <keyword type="function" name="pango_fontset_get_metrics ()" link="pango-Fonts.html#pango-fontset-get-metrics"/>
+    <keyword type="function" name="PangoFontsetForeachFunc ()" link="pango-Fonts.html#PangoFontsetForeachFunc" since="1.4"/>
+    <keyword type="function" name="pango_fontset_foreach ()" link="pango-Fonts.html#pango-fontset-foreach" since="1.4"/>
+    <keyword type="struct" name="PangoFontsetSimple" link="pango-Fonts.html#PangoFontsetSimple-struct"/>
+    <keyword type="macro" name="PANGO_TYPE_FONTSET_SIMPLE" link="pango-Fonts.html#PANGO-TYPE-FONTSET-SIMPLE--CAPS"/>
+    <keyword type="function" name="pango_fontset_simple_new ()" link="pango-Fonts.html#pango-fontset-simple-new"/>
+    <keyword type="function" name="pango_fontset_simple_append ()" link="pango-Fonts.html#pango-fontset-simple-append"/>
+    <keyword type="function" name="pango_fontset_simple_size ()" link="pango-Fonts.html#pango-fontset-simple-size"/>
+    <keyword type="enum" name="enum PangoAttrType" link="pango-Text-Attributes.html#PangoAttrType"/>
+    <keyword type="macro" name="PANGO_TYPE_ATTR_TYPE" link="pango-Text-Attributes.html#PANGO-TYPE-ATTR-TYPE--CAPS"/>
+    <keyword type="struct" name="PangoAttrClass" link="pango-Text-Attributes.html#PangoAttrClass"/>
+    <keyword type="struct" name="PangoAttribute" link="pango-Text-Attributes.html#PangoAttribute"/>
+    <keyword type="macro" name="PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING" link="pango-Text-Attributes.html#PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS"/>
+    <keyword type="macro" name="PANGO_ATTR_INDEX_TO_TEXT_END" link="pango-Text-Attributes.html#PANGO-ATTR-INDEX-TO-TEXT-END--CAPS"/>
+    <keyword type="struct" name="PangoAttrString" link="pango-Text-Attributes.html#PangoAttrString"/>
+    <keyword type="struct" name="PangoAttrLanguage" link="pango-Text-Attributes.html#PangoAttrLanguage"/>
+    <keyword type="struct" name="PangoAttrColor" link="pango-Text-Attributes.html#PangoAttrColor"/>
+    <keyword type="struct" name="PangoAttrInt" link="pango-Text-Attributes.html#PangoAttrInt"/>
+    <keyword type="struct" name="PangoAttrFloat" link="pango-Text-Attributes.html#PangoAttrFloat"/>
+    <keyword type="struct" name="PangoAttrFontDesc" link="pango-Text-Attributes.html#PangoAttrFontDesc"/>
+    <keyword type="struct" name="PangoAttrShape" link="pango-Text-Attributes.html#PangoAttrShape"/>
+    <keyword type="struct" name="PangoAttrSize" link="pango-Text-Attributes.html#PangoAttrSize"/>
+    <keyword type="function" name="pango_parse_markup ()" link="pango-Text-Attributes.html#pango-parse-markup"/>
+    <keyword type="function" name="pango_attr_type_register ()" link="pango-Text-Attributes.html#pango-attr-type-register"/>
+    <keyword type="function" name="pango_attr_type_get_name ()" link="pango-Text-Attributes.html#pango-attr-type-get-name" since="1.22"/>
+    <keyword type="function" name="pango_attribute_init ()" link="pango-Text-Attributes.html#pango-attribute-init" since="1.20"/>
+    <keyword type="function" name="pango_attribute_copy ()" link="pango-Text-Attributes.html#pango-attribute-copy"/>
+    <keyword type="function" name="pango_attribute_equal ()" link="pango-Text-Attributes.html#pango-attribute-equal"/>
+    <keyword type="function" name="pango_attribute_destroy ()" link="pango-Text-Attributes.html#pango-attribute-destroy"/>
+    <keyword type="function" name="pango_attr_language_new ()" link="pango-Text-Attributes.html#pango-attr-language-new"/>
+    <keyword type="function" name="pango_attr_family_new ()" link="pango-Text-Attributes.html#pango-attr-family-new"/>
+    <keyword type="function" name="pango_attr_style_new ()" link="pango-Text-Attributes.html#pango-attr-style-new"/>
+    <keyword type="function" name="pango_attr_variant_new ()" link="pango-Text-Attributes.html#pango-attr-variant-new"/>
+    <keyword type="function" name="pango_attr_stretch_new ()" link="pango-Text-Attributes.html#pango-attr-stretch-new"/>
+    <keyword type="function" name="pango_attr_weight_new ()" link="pango-Text-Attributes.html#pango-attr-weight-new"/>
+    <keyword type="function" name="pango_attr_size_new ()" link="pango-Text-Attributes.html#pango-attr-size-new"/>
+    <keyword type="function" name="pango_attr_size_new_absolute ()" link="pango-Text-Attributes.html#pango-attr-size-new-absolute" since="1.8"/>
+    <keyword type="function" name="pango_attr_font_desc_new ()" link="pango-Text-Attributes.html#pango-attr-font-desc-new"/>
+    <keyword type="function" name="pango_attr_foreground_new ()" link="pango-Text-Attributes.html#pango-attr-foreground-new"/>
+    <keyword type="function" name="pango_attr_background_new ()" link="pango-Text-Attributes.html#pango-attr-background-new"/>
+    <keyword type="function" name="pango_attr_strikethrough_new ()" link="pango-Text-Attributes.html#pango-attr-strikethrough-new"/>
+    <keyword type="function" name="pango_attr_strikethrough_color_new ()" link="pango-Text-Attributes.html#pango-attr-strikethrough-color-new" since="1.8"/>
+    <keyword type="function" name="pango_attr_underline_new ()" link="pango-Text-Attributes.html#pango-attr-underline-new"/>
+    <keyword type="function" name="pango_attr_underline_color_new ()" link="pango-Text-Attributes.html#pango-attr-underline-color-new" since="1.8"/>
+    <keyword type="enum" name="enum PangoUnderline" link="pango-Text-Attributes.html#PangoUnderline"/>
+    <keyword type="macro" name="PANGO_TYPE_UNDERLINE" link="pango-Text-Attributes.html#PANGO-TYPE-UNDERLINE--CAPS"/>
+    <keyword type="function" name="pango_attr_shape_new ()" link="pango-Text-Attributes.html#pango-attr-shape-new"/>
+    <keyword type="function" name="pango_attr_shape_new_with_data ()" link="pango-Text-Attributes.html#pango-attr-shape-new-with-data" since="1.8"/>
+    <keyword type="function" name="PangoAttrDataCopyFunc ()" link="pango-Text-Attributes.html#PangoAttrDataCopyFunc"/>
+    <keyword type="function" name="pango_attr_scale_new ()" link="pango-Text-Attributes.html#pango-attr-scale-new"/>
+    <keyword type="macro" name="PANGO_SCALE_XX_SMALL" link="pango-Text-Attributes.html#PANGO-SCALE-XX-SMALL--CAPS"/>
+    <keyword type="macro" name="PANGO_SCALE_X_SMALL" link="pango-Text-Attributes.html#PANGO-SCALE-X-SMALL--CAPS"/>
+    <keyword type="macro" name="PANGO_SCALE_SMALL" link="pango-Text-Attributes.html#PANGO-SCALE-SMALL--CAPS"/>
+    <keyword type="macro" name="PANGO_SCALE_MEDIUM" link="pango-Text-Attributes.html#PANGO-SCALE-MEDIUM--CAPS"/>
+    <keyword type="macro" name="PANGO_SCALE_LARGE" link="pango-Text-Attributes.html#PANGO-SCALE-LARGE--CAPS"/>
+    <keyword type="macro" name="PANGO_SCALE_X_LARGE" link="pango-Text-Attributes.html#PANGO-SCALE-X-LARGE--CAPS"/>
+    <keyword type="macro" name="PANGO_SCALE_XX_LARGE" link="pango-Text-Attributes.html#PANGO-SCALE-XX-LARGE--CAPS"/>
+    <keyword type="function" name="pango_attr_rise_new ()" link="pango-Text-Attributes.html#pango-attr-rise-new"/>
+    <keyword type="function" name="pango_attr_letter_spacing_new ()" link="pango-Text-Attributes.html#pango-attr-letter-spacing-new" since="1.6"/>
+    <keyword type="function" name="pango_attr_fallback_new ()" link="pango-Text-Attributes.html#pango-attr-fallback-new" since="1.4"/>
+    <keyword type="function" name="pango_attr_gravity_new ()" link="pango-Text-Attributes.html#pango-attr-gravity-new" since="1.16"/>
+    <keyword type="function" name="pango_attr_gravity_hint_new ()" link="pango-Text-Attributes.html#pango-attr-gravity-hint-new" since="1.16"/>
+    <keyword type="struct" name="PangoColor" link="pango-Text-Attributes.html#PangoColor"/>
+    <keyword type="macro" name="PANGO_TYPE_COLOR" link="pango-Text-Attributes.html#PANGO-TYPE-COLOR--CAPS"/>
+    <keyword type="function" name="pango_color_parse ()" link="pango-Text-Attributes.html#pango-color-parse"/>
+    <keyword type="function" name="pango_color_copy ()" link="pango-Text-Attributes.html#pango-color-copy"/>
+    <keyword type="function" name="pango_color_free ()" link="pango-Text-Attributes.html#pango-color-free"/>
+    <keyword type="function" name="pango_color_to_string ()" link="pango-Text-Attributes.html#pango-color-to-string" since="1.16"/>
+    <keyword type="struct" name="PangoAttrList" link="pango-Text-Attributes.html#PangoAttrList"/>
+    <keyword type="macro" name="PANGO_TYPE_ATTR_LIST" link="pango-Text-Attributes.html#PANGO-TYPE-ATTR-LIST--CAPS"/>
+    <keyword type="function" name="pango_attr_list_new ()" link="pango-Text-Attributes.html#pango-attr-list-new"/>
+    <keyword type="function" name="pango_attr_list_ref ()" link="pango-Text-Attributes.html#pango-attr-list-ref" since="1.10"/>
+    <keyword type="function" name="pango_attr_list_unref ()" link="pango-Text-Attributes.html#pango-attr-list-unref"/>
+    <keyword type="function" name="pango_attr_list_copy ()" link="pango-Text-Attributes.html#pango-attr-list-copy"/>
+    <keyword type="function" name="pango_attr_list_insert ()" link="pango-Text-Attributes.html#pango-attr-list-insert"/>
+    <keyword type="function" name="pango_attr_list_insert_before ()" link="pango-Text-Attributes.html#pango-attr-list-insert-before"/>
+    <keyword type="function" name="pango_attr_list_change ()" link="pango-Text-Attributes.html#pango-attr-list-change"/>
+    <keyword type="function" name="pango_attr_list_splice ()" link="pango-Text-Attributes.html#pango-attr-list-splice"/>
+    <keyword type="function" name="pango_attr_list_filter ()" link="pango-Text-Attributes.html#pango-attr-list-filter" since="1.2"/>
+    <keyword type="function" name="PangoAttrFilterFunc ()" link="pango-Text-Attributes.html#PangoAttrFilterFunc"/>
+    <keyword type="function" name="pango_attr_list_get_iterator ()" link="pango-Text-Attributes.html#pango-attr-list-get-iterator"/>
+    <keyword type="struct" name="PangoAttrIterator" link="pango-Text-Attributes.html#PangoAttrIterator"/>
+    <keyword type="function" name="pango_attr_iterator_copy ()" link="pango-Text-Attributes.html#pango-attr-iterator-copy"/>
+    <keyword type="function" name="pango_attr_iterator_next ()" link="pango-Text-Attributes.html#pango-attr-iterator-next"/>
+    <keyword type="function" name="pango_attr_iterator_range ()" link="pango-Text-Attributes.html#pango-attr-iterator-range"/>
+    <keyword type="function" name="pango_attr_iterator_get ()" link="pango-Text-Attributes.html#pango-attr-iterator-get"/>
+    <keyword type="function" name="pango_attr_iterator_get_font ()" link="pango-Text-Attributes.html#pango-attr-iterator-get-font"/>
+    <keyword type="function" name="pango_attr_iterator_get_attrs ()" link="pango-Text-Attributes.html#pango-attr-iterator-get-attrs" since="1.2"/>
+    <keyword type="function" name="pango_attr_iterator_destroy ()" link="pango-Text-Attributes.html#pango-attr-iterator-destroy"/>
+    <keyword type="struct" name="PangoTabArray" link="pango-Tab-Stops.html#PangoTabArray"/>
+    <keyword type="macro" name="PANGO_TYPE_TAB_ARRAY" link="pango-Tab-Stops.html#PANGO-TYPE-TAB-ARRAY--CAPS"/>
+    <keyword type="enum" name="enum PangoTabAlign" link="pango-Tab-Stops.html#PangoTabAlign"/>
+    <keyword type="macro" name="PANGO_TYPE_TAB_ALIGN" link="pango-Tab-Stops.html#PANGO-TYPE-TAB-ALIGN--CAPS"/>
+    <keyword type="function" name="pango_tab_array_new ()" link="pango-Tab-Stops.html#pango-tab-array-new"/>
+    <keyword type="function" name="pango_tab_array_new_with_positions ()" link="pango-Tab-Stops.html#pango-tab-array-new-with-positions"/>
+    <keyword type="function" name="pango_tab_array_copy ()" link="pango-Tab-Stops.html#pango-tab-array-copy"/>
+    <keyword type="function" name="pango_tab_array_free ()" link="pango-Tab-Stops.html#pango-tab-array-free"/>
+    <keyword type="function" name="pango_tab_array_get_size ()" link="pango-Tab-Stops.html#pango-tab-array-get-size"/>
+    <keyword type="function" name="pango_tab_array_resize ()" link="pango-Tab-Stops.html#pango-tab-array-resize"/>
+    <keyword type="function" name="pango_tab_array_set_tab ()" link="pango-Tab-Stops.html#pango-tab-array-set-tab"/>
+    <keyword type="function" name="pango_tab_array_get_tab ()" link="pango-Tab-Stops.html#pango-tab-array-get-tab"/>
+    <keyword type="function" name="pango_tab_array_get_tabs ()" link="pango-Tab-Stops.html#pango-tab-array-get-tabs"/>
+    <keyword type="function" name="pango_tab_array_get_positions_in_pixels ()" link="pango-Tab-Stops.html#pango-tab-array-get-positions-in-pixels"/>
+    <keyword type="struct" name="PangoLayout" link="pango-Layout-Objects.html#PangoLayout-struct"/>
+    <keyword type="struct" name="PangoLayoutIter" link="pango-Layout-Objects.html#PangoLayoutIter"/>
+    <keyword type="function" name="pango_layout_new ()" link="pango-Layout-Objects.html#pango-layout-new"/>
+    <keyword type="function" name="pango_layout_copy ()" link="pango-Layout-Objects.html#pango-layout-copy"/>
+    <keyword type="function" name="pango_layout_get_context ()" link="pango-Layout-Objects.html#pango-layout-get-context"/>
+    <keyword type="function" name="pango_layout_context_changed ()" link="pango-Layout-Objects.html#pango-layout-context-changed"/>
+    <keyword type="function" name="pango_layout_set_text ()" link="pango-Layout-Objects.html#pango-layout-set-text"/>
+    <keyword type="function" name="pango_layout_get_text ()" link="pango-Layout-Objects.html#pango-layout-get-text"/>
+    <keyword type="function" name="pango_layout_set_markup ()" link="pango-Layout-Objects.html#pango-layout-set-markup"/>
+    <keyword type="function" name="pango_layout_set_markup_with_accel ()" link="pango-Layout-Objects.html#pango-layout-set-markup-with-accel"/>
+    <keyword type="function" name="pango_layout_set_attributes ()" link="pango-Layout-Objects.html#pango-layout-set-attributes"/>
+    <keyword type="function" name="pango_layout_get_attributes ()" link="pango-Layout-Objects.html#pango-layout-get-attributes"/>
+    <keyword type="function" name="pango_layout_set_font_description ()" link="pango-Layout-Objects.html#pango-layout-set-font-description"/>
+    <keyword type="function" name="pango_layout_get_font_description ()" link="pango-Layout-Objects.html#pango-layout-get-font-description" since="1.8"/>
+    <keyword type="function" name="pango_layout_set_width ()" link="pango-Layout-Objects.html#pango-layout-set-width"/>
+    <keyword type="function" name="pango_layout_get_width ()" link="pango-Layout-Objects.html#pango-layout-get-width"/>
+    <keyword type="function" name="pango_layout_set_height ()" link="pango-Layout-Objects.html#pango-layout-set-height" since="1.20"/>
+    <keyword type="function" name="pango_layout_get_height ()" link="pango-Layout-Objects.html#pango-layout-get-height" since="1.20"/>
+    <keyword type="function" name="pango_layout_set_wrap ()" link="pango-Layout-Objects.html#pango-layout-set-wrap"/>
+    <keyword type="function" name="pango_layout_get_wrap ()" link="pango-Layout-Objects.html#pango-layout-get-wrap"/>
+    <keyword type="function" name="pango_layout_is_wrapped ()" link="pango-Layout-Objects.html#pango-layout-is-wrapped" since="1.16"/>
+    <keyword type="enum" name="enum PangoWrapMode" link="pango-Layout-Objects.html#PangoWrapMode"/>
+    <keyword type="macro" name="PANGO_TYPE_WRAP_MODE" link="pango-Layout-Objects.html#PANGO-TYPE-WRAP-MODE--CAPS"/>
+    <keyword type="function" name="pango_layout_set_ellipsize ()" link="pango-Layout-Objects.html#pango-layout-set-ellipsize" since="1.6"/>
+    <keyword type="function" name="pango_layout_get_ellipsize ()" link="pango-Layout-Objects.html#pango-layout-get-ellipsize" since="1.6"/>
+    <keyword type="function" name="pango_layout_is_ellipsized ()" link="pango-Layout-Objects.html#pango-layout-is-ellipsized" since="1.16"/>
+    <keyword type="enum" name="enum PangoEllipsizeMode" link="pango-Layout-Objects.html#PangoEllipsizeMode"/>
+    <keyword type="macro" name="PANGO_TYPE_ELLIPSIZE_MODE" link="pango-Layout-Objects.html#PANGO-TYPE-ELLIPSIZE-MODE--CAPS"/>
+    <keyword type="function" name="pango_layout_set_indent ()" link="pango-Layout-Objects.html#pango-layout-set-indent"/>
+    <keyword type="function" name="pango_layout_get_indent ()" link="pango-Layout-Objects.html#pango-layout-get-indent"/>
+    <keyword type="function" name="pango_layout_get_spacing ()" link="pango-Layout-Objects.html#pango-layout-get-spacing"/>
+    <keyword type="function" name="pango_layout_set_spacing ()" link="pango-Layout-Objects.html#pango-layout-set-spacing"/>
+    <keyword type="function" name="pango_layout_set_justify ()" link="pango-Layout-Objects.html#pango-layout-set-justify"/>
+    <keyword type="function" name="pango_layout_get_justify ()" link="pango-Layout-Objects.html#pango-layout-get-justify"/>
+    <keyword type="function" name="pango_layout_set_auto_dir ()" link="pango-Layout-Objects.html#pango-layout-set-auto-dir" since="1.4"/>
+    <keyword type="function" name="pango_layout_get_auto_dir ()" link="pango-Layout-Objects.html#pango-layout-get-auto-dir" since="1.4"/>
+    <keyword type="function" name="pango_layout_set_alignment ()" link="pango-Layout-Objects.html#pango-layout-set-alignment"/>
+    <keyword type="function" name="pango_layout_get_alignment ()" link="pango-Layout-Objects.html#pango-layout-get-alignment"/>
+    <keyword type="function" name="pango_layout_set_tabs ()" link="pango-Layout-Objects.html#pango-layout-set-tabs"/>
+    <keyword type="function" name="pango_layout_get_tabs ()" link="pango-Layout-Objects.html#pango-layout-get-tabs"/>
+    <keyword type="function" name="pango_layout_set_single_paragraph_mode ()" link="pango-Layout-Objects.html#pango-layout-set-single-paragraph-mode"/>
+    <keyword type="function" name="pango_layout_get_single_paragraph_mode ()" link="pango-Layout-Objects.html#pango-layout-get-single-paragraph-mode"/>
+    <keyword type="enum" name="enum PangoAlignment" link="pango-Layout-Objects.html#PangoAlignment"/>
+    <keyword type="macro" name="PANGO_TYPE_ALIGNMENT" link="pango-Layout-Objects.html#PANGO-TYPE-ALIGNMENT--CAPS"/>
+    <keyword type="function" name="pango_layout_get_unknown_glyphs_count ()" link="pango-Layout-Objects.html#pango-layout-get-unknown-glyphs-count" since="1.16"/>
+    <keyword type="function" name="pango_layout_get_log_attrs ()" link="pango-Layout-Objects.html#pango-layout-get-log-attrs"/>
+    <keyword type="function" name="pango_layout_index_to_pos ()" link="pango-Layout-Objects.html#pango-layout-index-to-pos"/>
+    <keyword type="function" name="pango_layout_index_to_line_x ()" link="pango-Layout-Objects.html#pango-layout-index-to-line-x"/>
+    <keyword type="function" name="pango_layout_xy_to_index ()" link="pango-Layout-Objects.html#pango-layout-xy-to-index"/>
+    <keyword type="function" name="pango_layout_get_cursor_pos ()" link="pango-Layout-Objects.html#pango-layout-get-cursor-pos"/>
+    <keyword type="function" name="pango_layout_move_cursor_visually ()" link="pango-Layout-Objects.html#pango-layout-move-cursor-visually"/>
+    <keyword type="function" name="pango_layout_get_extents ()" link="pango-Layout-Objects.html#pango-layout-get-extents"/>
+    <keyword type="function" name="pango_layout_get_pixel_extents ()" link="pango-Layout-Objects.html#pango-layout-get-pixel-extents"/>
+    <keyword type="function" name="pango_layout_get_size ()" link="pango-Layout-Objects.html#pango-layout-get-size"/>
+    <keyword type="function" name="pango_layout_get_pixel_size ()" link="pango-Layout-Objects.html#pango-layout-get-pixel-size"/>
+    <keyword type="function" name="pango_layout_get_baseline ()" link="pango-Layout-Objects.html#pango-layout-get-baseline" since="1.22"/>
+    <keyword type="function" name="pango_layout_get_line_count ()" link="pango-Layout-Objects.html#pango-layout-get-line-count"/>
+    <keyword type="function" name="pango_layout_get_line ()" link="pango-Layout-Objects.html#pango-layout-get-line"/>
+    <keyword type="function" name="pango_layout_get_line_readonly ()" link="pango-Layout-Objects.html#pango-layout-get-line-readonly" since="1.16"/>
+    <keyword type="function" name="pango_layout_get_lines ()" link="pango-Layout-Objects.html#pango-layout-get-lines"/>
+    <keyword type="function" name="pango_layout_get_lines_readonly ()" link="pango-Layout-Objects.html#pango-layout-get-lines-readonly" since="1.16"/>
+    <keyword type="function" name="pango_layout_get_iter ()" link="pango-Layout-Objects.html#pango-layout-get-iter"/>
+    <keyword type="function" name="pango_layout_iter_copy ()" link="pango-Layout-Objects.html#pango-layout-iter-copy" since="1.20"/>
+    <keyword type="function" name="pango_layout_iter_free ()" link="pango-Layout-Objects.html#pango-layout-iter-free"/>
+    <keyword type="function" name="pango_layout_iter_next_run ()" link="pango-Layout-Objects.html#pango-layout-iter-next-run"/>
+    <keyword type="function" name="pango_layout_iter_next_char ()" link="pango-Layout-Objects.html#pango-layout-iter-next-char"/>
+    <keyword type="function" name="pango_layout_iter_next_cluster ()" link="pango-Layout-Objects.html#pango-layout-iter-next-cluster"/>
+    <keyword type="function" name="pango_layout_iter_next_line ()" link="pango-Layout-Objects.html#pango-layout-iter-next-line"/>
+    <keyword type="function" name="pango_layout_iter_at_last_line ()" link="pango-Layout-Objects.html#pango-layout-iter-at-last-line"/>
+    <keyword type="function" name="pango_layout_iter_get_index ()" link="pango-Layout-Objects.html#pango-layout-iter-get-index"/>
+    <keyword type="function" name="pango_layout_iter_get_baseline ()" link="pango-Layout-Objects.html#pango-layout-iter-get-baseline"/>
+    <keyword type="function" name="pango_layout_iter_get_run ()" link="pango-Layout-Objects.html#pango-layout-iter-get-run"/>
+    <keyword type="function" name="pango_layout_iter_get_run_readonly ()" link="pango-Layout-Objects.html#pango-layout-iter-get-run-readonly" since="1.16"/>
+    <keyword type="function" name="pango_layout_iter_get_line ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line"/>
+    <keyword type="function" name="pango_layout_iter_get_line_readonly ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line-readonly" since="1.16"/>
+    <keyword type="function" name="pango_layout_iter_get_layout ()" link="pango-Layout-Objects.html#pango-layout-iter-get-layout" since="1.20"/>
+    <keyword type="function" name="pango_layout_iter_get_char_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-char-extents"/>
+    <keyword type="function" name="pango_layout_iter_get_cluster_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-cluster-extents"/>
+    <keyword type="function" name="pango_layout_iter_get_run_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-run-extents"/>
+    <keyword type="function" name="pango_layout_iter_get_line_yrange ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line-yrange"/>
+    <keyword type="function" name="pango_layout_iter_get_line_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-line-extents"/>
+    <keyword type="function" name="pango_layout_iter_get_layout_extents ()" link="pango-Layout-Objects.html#pango-layout-iter-get-layout-extents"/>
+    <keyword type="struct" name="PangoLayoutLine" link="pango-Layout-Objects.html#PangoLayoutLine"/>
+    <keyword type="typedef" name="PangoLayoutRun" link="pango-Layout-Objects.html#PangoLayoutRun"/>
+    <keyword type="function" name="pango_layout_line_ref ()" link="pango-Layout-Objects.html#pango-layout-line-ref" since="1.10"/>
+    <keyword type="function" name="pango_layout_line_unref ()" link="pango-Layout-Objects.html#pango-layout-line-unref"/>
+    <keyword type="function" name="pango_layout_line_get_extents ()" link="pango-Layout-Objects.html#pango-layout-line-get-extents"/>
+    <keyword type="function" name="pango_layout_line_get_pixel_extents ()" link="pango-Layout-Objects.html#pango-layout-line-get-pixel-extents"/>
+    <keyword type="function" name="pango_layout_line_index_to_x ()" link="pango-Layout-Objects.html#pango-layout-line-index-to-x"/>
+    <keyword type="function" name="pango_layout_line_x_to_index ()" link="pango-Layout-Objects.html#pango-layout-line-x-to-index"/>
+    <keyword type="function" name="pango_layout_line_get_x_ranges ()" link="pango-Layout-Objects.html#pango-layout-line-get-x-ranges"/>
+    <keyword type="enum" name="enum PangoScript" link="pango-Scripts-and-Languages.html#PangoScript"/>
+    <keyword type="macro" name="PANGO_TYPE_SCRIPT" link="pango-Scripts-and-Languages.html#PANGO-TYPE-SCRIPT--CAPS"/>
+    <keyword type="struct" name="PangoScriptIter" link="pango-Scripts-and-Languages.html#PangoScriptIter"/>
+    <keyword type="function" name="pango_script_for_unichar ()" link="pango-Scripts-and-Languages.html#pango-script-for-unichar" since="1.4"/>
+    <keyword type="function" name="pango_script_get_sample_language ()" link="pango-Scripts-and-Languages.html#pango-script-get-sample-language" since="1.4"/>
+    <keyword type="function" name="pango_script_iter_new ()" link="pango-Scripts-and-Languages.html#pango-script-iter-new" since="1.4"/>
+    <keyword type="function" name="pango_script_iter_get_range ()" link="pango-Scripts-and-Languages.html#pango-script-iter-get-range" since="1.4"/>
+    <keyword type="function" name="pango_script_iter_next ()" link="pango-Scripts-and-Languages.html#pango-script-iter-next" since="1.4"/>
+    <keyword type="function" name="pango_script_iter_free ()" link="pango-Scripts-and-Languages.html#pango-script-iter-free" since="1.4"/>
+    <keyword type="struct" name="PangoLanguage" link="pango-Scripts-and-Languages.html#PangoLanguage"/>
+    <keyword type="macro" name="PANGO_TYPE_LANGUAGE" link="pango-Scripts-and-Languages.html#PANGO-TYPE-LANGUAGE--CAPS"/>
+    <keyword type="function" name="pango_language_from_string ()" link="pango-Scripts-and-Languages.html#pango-language-from-string"/>
+    <keyword type="function" name="pango_language_to_string ()" link="pango-Scripts-and-Languages.html#pango-language-to-string"/>
+    <keyword type="function" name="pango_language_matches ()" link="pango-Scripts-and-Languages.html#pango-language-matches"/>
+    <keyword type="function" name="pango_language_includes_script ()" link="pango-Scripts-and-Languages.html#pango-language-includes-script" since="1.4"/>
+    <keyword type="function" name="pango_language_get_scripts ()" link="pango-Scripts-and-Languages.html#pango-language-get-scripts" since="1.22"/>
+    <keyword type="function" name="pango_language_get_default ()" link="pango-Scripts-and-Languages.html#pango-language-get-default" since="1.16"/>
+    <keyword type="function" name="pango_language_get_sample_string ()" link="pango-Scripts-and-Languages.html#pango-language-get-sample-string"/>
+    <keyword type="enum" name="enum PangoDirection" link="pango-Bidirectional-Text.html#PangoDirection"/>
+    <keyword type="function" name="pango_unichar_direction ()" link="pango-Bidirectional-Text.html#pango-unichar-direction"/>
+    <keyword type="function" name="pango_find_base_dir ()" link="pango-Bidirectional-Text.html#pango-find-base-dir" since="1.4"/>
+    <keyword type="function" name="pango_get_mirror_char ()" link="pango-Bidirectional-Text.html#pango-get-mirror-char" deprecated=""/>
+    <keyword type="enum" name="enum PangoBidiType" link="pango-Bidirectional-Text.html#PangoBidiType" since="1.22"/>
+    <keyword type="function" name="pango_bidi_type_for_unichar ()" link="pango-Bidirectional-Text.html#pango-bidi-type-for-unichar" since="1.22"/>
+    <keyword type="enum" name="enum PangoGravity" link="pango-Vertical-Text.html#PangoGravity" since="1.16"/>
+    <keyword type="enum" name="enum PangoGravityHint" link="pango-Vertical-Text.html#PangoGravityHint" since="1.16"/>
+    <keyword type="macro" name="PANGO_GRAVITY_IS_VERTICAL()" link="pango-Vertical-Text.html#PANGO-GRAVITY-IS-VERTICAL--CAPS" since="1.16"/>
+    <keyword type="function" name="pango_gravity_get_for_matrix ()" link="pango-Vertical-Text.html#pango-gravity-get-for-matrix" since="1.16"/>
+    <keyword type="function" name="pango_gravity_get_for_script ()" link="pango-Vertical-Text.html#pango-gravity-get-for-script" since="1.16"/>
+    <keyword type="function" name="pango_gravity_get_for_script_and_width ()" link="pango-Vertical-Text.html#pango-gravity-get-for-script-and-width" since="1.26"/>
+    <keyword type="function" name="pango_gravity_to_rotation ()" link="pango-Vertical-Text.html#pango-gravity-to-rotation" since="1.16"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_WIN32" link="pango-Win32-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-WIN32--CAPS"/>
+    <keyword type="function" name="pango_win32_get_context ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-context" deprecated=""/>
+    <keyword type="function" name="pango_win32_render ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render"/>
+    <keyword type="function" name="pango_win32_render_transformed ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-transformed"/>
+    <keyword type="function" name="pango_win32_render_layout_line ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout-line"/>
+    <keyword type="function" name="pango_win32_render_layout ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-render-layout"/>
+    <keyword type="function" name="pango_win32_get_unknown_glyph ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-unknown-glyph" deprecated=""/>
+    <keyword type="function" name="pango_win32_font_get_glyph_index ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-glyph-index"/>
+    <keyword type="function" name="pango_win32_font_select_font ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-select-font"/>
+    <keyword type="function" name="pango_win32_font_done_font ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-done-font"/>
+    <keyword type="function" name="pango_win32_font_get_metrics_factor ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-get-metrics-factor"/>
+    <keyword type="function" name="pango_win32_get_debug_flag ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-debug-flag" since="1.2"/>
+    <keyword type="function" name="pango_win32_get_dc ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-get-dc"/>
+    <keyword type="struct" name="PangoWin32FontCache" link="pango-Win32-Fonts-and-Rendering.html#PangoWin32FontCache"/>
+    <keyword type="function" name="pango_win32_font_cache_new ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-new"/>
+    <keyword type="function" name="pango_win32_font_cache_free ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-free"/>
+    <keyword type="function" name="pango_win32_font_cache_load ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-load"/>
+    <keyword type="function" name="pango_win32_font_cache_loadw ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-loadw" since="1.16"/>
+    <keyword type="function" name="pango_win32_font_cache_unload ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-cache-unload"/>
+    <keyword type="function" name="pango_win32_font_map_for_display ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-for-display"/>
+    <keyword type="function" name="pango_win32_shutdown_display ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-shutdown-display"/>
+    <keyword type="function" name="pango_win32_font_map_get_font_cache ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-map-get-font-cache"/>
+    <keyword type="function" name="pango_win32_font_logfont ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfont"/>
+    <keyword type="function" name="pango_win32_font_logfontw ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-logfontw" since="1.16"/>
+    <keyword type="function" name="pango_win32_font_description_from_logfont ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfont" since="1.12"/>
+    <keyword type="function" name="pango_win32_font_description_from_logfontw ()" link="pango-Win32-Fonts-and-Rendering.html#pango-win32-font-description-from-logfontw" since="1.16"/>
+    <keyword type="struct" name="PangoFT2FontMap" link="pango-FreeType-Fonts-and-Rendering.html#PangoFT2FontMap-struct"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_FT2" link="pango-FreeType-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-FT2--CAPS" deprecated=""/>
+    <keyword type="function" name="pango_ft2_font_map_new ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-new" since="1.2"/>
+    <keyword type="function" name="pango_ft2_font_map_set_resolution ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-resolution" since="1.2"/>
+    <keyword type="function" name="pango_ft2_font_map_create_context ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-create-context" deprecated="1.22: Use pango_font_map_create_context() instead." since="1.2"/>
+    <keyword type="function" name="PangoFT2SubstituteFunc ()" link="pango-FreeType-Fonts-and-Rendering.html#PangoFT2SubstituteFunc"/>
+    <keyword type="function" name="pango_ft2_font_map_set_default_substitute ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-set-default-substitute" since="1.2"/>
+    <keyword type="function" name="pango_ft2_font_map_substitute_changed ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-substitute-changed" since="1.2"/>
+    <keyword type="function" name="pango_ft2_get_context ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-context" deprecated="1.22: Use pango_font_map_create_context() instead."/>
+    <keyword type="function" name="pango_ft2_render ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render"/>
+    <keyword type="function" name="pango_ft2_render_transformed ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-transformed" since="1.6"/>
+    <keyword type="function" name="pango_ft2_render_layout_line ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line"/>
+    <keyword type="function" name="pango_ft2_render_layout_line_subpixel ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-line-subpixel" since="1.6"/>
+    <keyword type="function" name="pango_ft2_render_layout ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout"/>
+    <keyword type="function" name="pango_ft2_render_layout_subpixel ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-render-layout-subpixel" since="1.6"/>
+    <keyword type="function" name="pango_ft2_get_unknown_glyph ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-get-unknown-glyph" deprecated=""/>
+    <keyword type="function" name="pango_ft2_font_get_kerning ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-kerning" deprecated=""/>
+    <keyword type="function" name="pango_ft2_font_get_face ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-face" deprecated=""/>
+    <keyword type="function" name="pango_ft2_font_get_coverage ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-get-coverage" deprecated=""/>
+    <keyword type="function" name="pango_ft2_font_map_for_display ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-font-map-for-display" deprecated=""/>
+    <keyword type="function" name="pango_ft2_shutdown_display ()" link="pango-FreeType-Fonts-and-Rendering.html#pango-ft2-shutdown-display" deprecated=""/>
+    <keyword type="struct" name="PangoXftFont" link="pango-Xft-Fonts-and-Rendering.html#PangoXftFont-struct"/>
+    <keyword type="struct" name="PangoXftFontMap" link="pango-Xft-Fonts-and-Rendering.html#PangoXftFontMap-struct"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_XFT" link="pango-Xft-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-XFT--CAPS" deprecated=""/>
+    <keyword type="function" name="pango_xft_get_context ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-context" deprecated=""/>
+    <keyword type="function" name="pango_xft_get_font_map ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-get-font-map" since="1.2"/>
+    <keyword type="function" name="pango_xft_set_default_substitute ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-set-default-substitute" since="1.2"/>
+    <keyword type="function" name="PangoXftSubstituteFunc ()" link="pango-Xft-Fonts-and-Rendering.html#PangoXftSubstituteFunc"/>
+    <keyword type="function" name="pango_xft_substitute_changed ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-substitute-changed" since="1.2"/>
+    <keyword type="function" name="pango_xft_shutdown_display ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-shutdown-display" since="1.2"/>
+    <keyword type="function" name="pango_xft_font_get_font ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-font"/>
+    <keyword type="function" name="pango_xft_font_get_display ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-display"/>
+    <keyword type="function" name="pango_xft_font_has_char ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-has-char" deprecated="" since="1.2"/>
+    <keyword type="function" name="pango_xft_font_lock_face ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-lock-face" deprecated="" since="1.2"/>
+    <keyword type="function" name="pango_xft_font_unlock_face ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-unlock-face" deprecated="" since="1.2"/>
+    <keyword type="function" name="pango_xft_font_get_glyph ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-glyph" deprecated="" since="1.2"/>
+    <keyword type="function" name="pango_xft_font_get_unknown_glyph ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-font-get-unknown-glyph" deprecated=""/>
+    <keyword type="struct" name="PangoXftRenderer" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer-struct"/>
+    <keyword type="struct" name="PangoXftRendererClass" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRendererClass" since="1.8"/>
+    <keyword type="function" name="pango_xft_renderer_new ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-new" since="1.8"/>
+    <keyword type="function" name="pango_xft_renderer_set_draw ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-draw" since="1.8"/>
+    <keyword type="function" name="pango_xft_renderer_set_default_color ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-renderer-set-default-color" since="1.8"/>
+    <keyword type="function" name="pango_xft_render ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render"/>
+    <keyword type="function" name="pango_xft_picture_render ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-picture-render"/>
+    <keyword type="function" name="pango_xft_render_transformed ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-transformed" since="1.8"/>
+    <keyword type="function" name="pango_xft_render_layout_line ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout-line" since="1.8"/>
+    <keyword type="function" name="pango_xft_render_layout ()" link="pango-Xft-Fonts-and-Rendering.html#pango-xft-render-layout" since="1.8"/>
+    <keyword type="property" name="The &quot;display&quot; property" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--display"/>
+    <keyword type="property" name="The &quot;screen&quot; property" link="pango-Xft-Fonts-and-Rendering.html#PangoXftRenderer--screen"/>
+    <keyword type="struct" name="PangoCairoFont" link="pango-Cairo-Rendering.html#PangoCairoFont-struct"/>
+    <keyword type="struct" name="PangoCairoFontMap" link="pango-Cairo-Rendering.html#PangoCairoFontMap-struct"/>
+    <keyword type="function" name="pango_cairo_font_map_get_default ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-get-default" since="1.10"/>
+    <keyword type="function" name="pango_cairo_font_map_set_default ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-set-default" since="1.22"/>
+    <keyword type="function" name="pango_cairo_font_map_new ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-new" since="1.10"/>
+    <keyword type="function" name="pango_cairo_font_map_new_for_font_type ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-new-for-font-type" since="1.18"/>
+    <keyword type="function" name="pango_cairo_font_map_get_font_type ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-get-font-type" since="1.18"/>
+    <keyword type="function" name="pango_cairo_font_map_set_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-set-resolution" since="1.10"/>
+    <keyword type="function" name="pango_cairo_font_map_get_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-get-resolution" since="1.10"/>
+    <keyword type="function" name="pango_cairo_font_map_create_context ()" link="pango-Cairo-Rendering.html#pango-cairo-font-map-create-context" deprecated="1.22: Use pango_font_map_create_context() instead." since="1.10"/>
+    <keyword type="function" name="pango_cairo_font_get_scaled_font ()" link="pango-Cairo-Rendering.html#pango-cairo-font-get-scaled-font" since="1.18"/>
+    <keyword type="function" name="pango_cairo_context_set_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-context-set-resolution" since="1.10"/>
+    <keyword type="function" name="pango_cairo_context_get_resolution ()" link="pango-Cairo-Rendering.html#pango-cairo-context-get-resolution" since="1.10"/>
+    <keyword type="function" name="pango_cairo_context_set_font_options ()" link="pango-Cairo-Rendering.html#pango-cairo-context-set-font-options" since="1.10"/>
+    <keyword type="function" name="pango_cairo_context_get_font_options ()" link="pango-Cairo-Rendering.html#pango-cairo-context-get-font-options" since="1.10"/>
+    <keyword type="function" name="PangoCairoShapeRendererFunc ()" link="pango-Cairo-Rendering.html#PangoCairoShapeRendererFunc"/>
+    <keyword type="function" name="pango_cairo_context_set_shape_renderer ()" link="pango-Cairo-Rendering.html#pango-cairo-context-set-shape-renderer" since="1.18"/>
+    <keyword type="function" name="pango_cairo_context_get_shape_renderer ()" link="pango-Cairo-Rendering.html#pango-cairo-context-get-shape-renderer" since="1.18"/>
+    <keyword type="function" name="pango_cairo_create_context ()" link="pango-Cairo-Rendering.html#pango-cairo-create-context" since="1.22"/>
+    <keyword type="function" name="pango_cairo_update_context ()" link="pango-Cairo-Rendering.html#pango-cairo-update-context" since="1.10"/>
+    <keyword type="function" name="pango_cairo_create_layout ()" link="pango-Cairo-Rendering.html#pango-cairo-create-layout" since="1.10"/>
+    <keyword type="function" name="pango_cairo_update_layout ()" link="pango-Cairo-Rendering.html#pango-cairo-update-layout" since="1.10"/>
+    <keyword type="function" name="pango_cairo_show_glyph_string ()" link="pango-Cairo-Rendering.html#pango-cairo-show-glyph-string" since="1.10"/>
+    <keyword type="function" name="pango_cairo_show_glyph_item ()" link="pango-Cairo-Rendering.html#pango-cairo-show-glyph-item" since="1.22"/>
+    <keyword type="function" name="pango_cairo_show_layout_line ()" link="pango-Cairo-Rendering.html#pango-cairo-show-layout-line" since="1.10"/>
+    <keyword type="function" name="pango_cairo_show_layout ()" link="pango-Cairo-Rendering.html#pango-cairo-show-layout" since="1.10"/>
+    <keyword type="function" name="pango_cairo_show_error_underline ()" link="pango-Cairo-Rendering.html#pango-cairo-show-error-underline" since="1.14"/>
+    <keyword type="function" name="pango_cairo_glyph_string_path ()" link="pango-Cairo-Rendering.html#pango-cairo-glyph-string-path" since="1.10"/>
+    <keyword type="function" name="pango_cairo_layout_line_path ()" link="pango-Cairo-Rendering.html#pango-cairo-layout-line-path" since="1.10"/>
+    <keyword type="function" name="pango_cairo_layout_path ()" link="pango-Cairo-Rendering.html#pango-cairo-layout-path" since="1.10"/>
+    <keyword type="function" name="pango_cairo_error_underline_path ()" link="pango-Cairo-Rendering.html#pango-cairo-error-underline-path" since="1.14"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_ATSUI" link="pango-ATSUI-Fonts.html#PANGO-RENDER-TYPE-ATSUI--CAPS"/>
+    <keyword type="function" name="pango_atsui_font_get_cgfont ()" link="pango-ATSUI-Fonts.html#pango-atsui-font-get-cgfont" since="1.18"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_X" link="pango-X-Fonts-and-Rendering.html#PANGO-RENDER-TYPE-X--CAPS" deprecated=""/>
+    <keyword type="function" name="pango_x_get_context ()" link="pango-X-Fonts-and-Rendering.html#pango-x-get-context" deprecated=""/>
+    <keyword type="function" name="pango_x_context_set_funcs ()" link="pango-X-Fonts-and-Rendering.html#pango-x-context-set-funcs" deprecated=""/>
+    <keyword type="function" name="PangoGetGCFunc ()" link="pango-X-Fonts-and-Rendering.html#PangoGetGCFunc" deprecated=""/>
+    <keyword type="function" name="PangoFreeGCFunc ()" link="pango-X-Fonts-and-Rendering.html#PangoFreeGCFunc" deprecated=""/>
+    <keyword type="function" name="pango_x_render ()" link="pango-X-Fonts-and-Rendering.html#pango-x-render" deprecated=""/>
+    <keyword type="function" name="pango_x_render_layout_line ()" link="pango-X-Fonts-and-Rendering.html#pango-x-render-layout-line" deprecated=""/>
+    <keyword type="function" name="pango_x_render_layout ()" link="pango-X-Fonts-and-Rendering.html#pango-x-render-layout" deprecated=""/>
+    <keyword type="typedef" name="PangoXSubfont" link="pango-X-Fonts-and-Rendering.html#PangoXSubfont" deprecated=""/>
+    <keyword type="macro" name="PANGO_X_MAKE_GLYPH()" link="pango-X-Fonts-and-Rendering.html#PANGO-X-MAKE-GLYPH--CAPS" deprecated=""/>
+    <keyword type="macro" name="PANGO_X_GLYPH_SUBFONT()" link="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-SUBFONT--CAPS" deprecated=""/>
+    <keyword type="macro" name="PANGO_X_GLYPH_INDEX()" link="pango-X-Fonts-and-Rendering.html#PANGO-X-GLYPH-INDEX--CAPS" deprecated=""/>
+    <keyword type="function" name="pango_x_load_font ()" link="pango-X-Fonts-and-Rendering.html#pango-x-load-font" deprecated=""/>
+    <keyword type="function" name="pango_x_get_unknown_glyph ()" link="pango-X-Fonts-and-Rendering.html#pango-x-get-unknown-glyph" deprecated=""/>
+    <keyword type="function" name="pango_x_has_glyph ()" link="pango-X-Fonts-and-Rendering.html#pango-x-has-glyph" deprecated=""/>
+    <keyword type="function" name="pango_x_list_subfonts ()" link="pango-X-Fonts-and-Rendering.html#pango-x-list-subfonts" deprecated=""/>
+    <keyword type="function" name="pango_x_font_map_for_display ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-map-for-display" deprecated=""/>
+    <keyword type="function" name="pango_x_shutdown_display ()" link="pango-X-Fonts-and-Rendering.html#pango-x-shutdown-display" deprecated=""/>
+    <keyword type="function" name="pango_x_font_map_get_font_cache ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-map-get-font-cache" deprecated=""/>
+    <keyword type="function" name="pango_x_font_subfont_xlfd ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-subfont-xlfd" deprecated=""/>
+    <keyword type="function" name="pango_x_find_first_subfont ()" link="pango-X-Fonts-and-Rendering.html#pango-x-find-first-subfont" deprecated=""/>
+    <keyword type="function" name="pango_x_font_get_unknown_glyph ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-get-unknown-glyph" deprecated=""/>
+    <keyword type="function" name="pango_x_apply_ligatures ()" link="pango-X-Fonts-and-Rendering.html#pango-x-apply-ligatures" deprecated=""/>
+    <keyword type="function" name="pango_x_fallback_shape ()" link="pango-X-Fonts-and-Rendering.html#pango-x-fallback-shape" deprecated=""/>
+    <keyword type="struct" name="PangoXFontCache" link="pango-X-Fonts-and-Rendering.html#PangoXFontCache" deprecated=""/>
+    <keyword type="function" name="pango_x_font_cache_new ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-new" deprecated=""/>
+    <keyword type="function" name="pango_x_font_cache_free ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-free" deprecated=""/>
+    <keyword type="function" name="pango_x_font_cache_load ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-load" deprecated=""/>
+    <keyword type="function" name="pango_x_font_cache_unload ()" link="pango-X-Fonts-and-Rendering.html#pango-x-font-cache-unload" deprecated=""/>
+    <keyword type="struct" name="PangoRenderer" link="PangoRenderer.html#PangoRenderer-struct"/>
+    <keyword type="enum" name="enum PangoRenderPart" link="PangoRenderer.html#PangoRenderPart" since="1.8"/>
+    <keyword type="macro" name="PANGO_TYPE_RENDER_PART" link="PangoRenderer.html#PANGO-TYPE-RENDER-PART--CAPS"/>
+    <keyword type="struct" name="PangoRendererClass" link="PangoRenderer.html#PangoRendererClass" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_layout ()" link="PangoRenderer.html#pango-renderer-draw-layout" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_layout_line ()" link="PangoRenderer.html#pango-renderer-draw-layout-line" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_glyphs ()" link="PangoRenderer.html#pango-renderer-draw-glyphs" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_glyph_item ()" link="PangoRenderer.html#pango-renderer-draw-glyph-item" since="1.22"/>
+    <keyword type="function" name="pango_renderer_draw_rectangle ()" link="PangoRenderer.html#pango-renderer-draw-rectangle" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_error_underline ()" link="PangoRenderer.html#pango-renderer-draw-error-underline" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_trapezoid ()" link="PangoRenderer.html#pango-renderer-draw-trapezoid" since="1.8"/>
+    <keyword type="function" name="pango_renderer_draw_glyph ()" link="PangoRenderer.html#pango-renderer-draw-glyph" since="1.8"/>
+    <keyword type="function" name="pango_renderer_activate ()" link="PangoRenderer.html#pango-renderer-activate" since="1.8"/>
+    <keyword type="function" name="pango_renderer_deactivate ()" link="PangoRenderer.html#pango-renderer-deactivate" since="1.8"/>
+    <keyword type="function" name="pango_renderer_part_changed ()" link="PangoRenderer.html#pango-renderer-part-changed" since="1.8"/>
+    <keyword type="function" name="pango_renderer_set_color ()" link="PangoRenderer.html#pango-renderer-set-color" since="1.8"/>
+    <keyword type="function" name="pango_renderer_get_color ()" link="PangoRenderer.html#pango-renderer-get-color" since="1.8"/>
+    <keyword type="function" name="pango_renderer_set_matrix ()" link="PangoRenderer.html#pango-renderer-set-matrix" since="1.8"/>
+    <keyword type="function" name="pango_renderer_get_matrix ()" link="PangoRenderer.html#pango-renderer-get-matrix" since="1.8"/>
+    <keyword type="function" name="pango_renderer_get_layout ()" link="PangoRenderer.html#pango-renderer-get-layout" since="1.20"/>
+    <keyword type="function" name="pango_renderer_get_layout_line ()" link="PangoRenderer.html#pango-renderer-get-layout-line" since="1.20"/>
+    <keyword type="struct" name="PangoFcFontMap" link="PangoFcFontMap.html#PangoFcFontMap-struct"/>
+    <keyword type="struct" name="PangoFcFontMapClass" link="PangoFcFontMap.html#PangoFcFontMapClass"/>
+    <keyword type="function" name="pango_fc_font_map_create_context ()" link="PangoFcFontMap.html#pango-fc-font-map-create-context" deprecated="1.22: Use pango_font_map_create_context() instead." since="1.4"/>
+    <keyword type="function" name="PangoFcDecoderFindFunc ()" link="PangoFcFontMap.html#PangoFcDecoderFindFunc"/>
+    <keyword type="function" name="pango_fc_font_map_add_decoder_find_func ()" link="PangoFcFontMap.html#pango-fc-font-map-add-decoder-find-func" since="1.6."/>
+    <keyword type="function" name="pango_fc_font_map_find_decoder ()" link="PangoFcFontMap.html#pango-fc-font-map-find-decoder" since="1.26."/>
+    <keyword type="function" name="pango_fc_font_map_cache_clear ()" link="PangoFcFontMap.html#pango-fc-font-map-cache-clear" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_map_shutdown ()" link="PangoFcFontMap.html#pango-fc-font-map-shutdown" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_description_from_pattern ()" link="PangoFcFontMap.html#pango-fc-font-description-from-pattern" since="1.4"/>
+    <keyword type="macro" name="PANGO_FC_GRAVITY" link="PangoFcFontMap.html#PANGO-FC-GRAVITY--CAPS" since="1.20"/>
+    <keyword type="macro" name="PANGO_FC_VERSION" link="PangoFcFontMap.html#PANGO-FC-VERSION--CAPS" since="1.20"/>
+    <keyword type="macro" name="PANGO_FC_PRGNAME" link="PangoFcFontMap.html#PANGO-FC-PRGNAME--CAPS" since="1.24"/>
+    <keyword type="struct" name="PangoFcFontsetKey" link="PangoFcFontMap.html#PangoFcFontsetKey" since="1.24"/>
+    <keyword type="function" name="pango_fc_fontset_key_get_context_key ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-context-key" since="1.24"/>
+    <keyword type="function" name="pango_fc_fontset_key_get_description ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-description" since="1.24"/>
+    <keyword type="function" name="pango_fc_fontset_key_get_language ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-language" since="1.24"/>
+    <keyword type="function" name="pango_fc_fontset_key_get_matrix ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-matrix" since="1.24"/>
+    <keyword type="function" name="pango_fc_fontset_key_get_absolute_size ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-absolute-size" since="1.24"/>
+    <keyword type="function" name="pango_fc_fontset_key_get_resolution ()" link="PangoFcFontMap.html#pango-fc-fontset-key-get-resolution" since="1.24"/>
+    <keyword type="struct" name="PangoFcFontKey" link="PangoFcFontMap.html#PangoFcFontKey" since="1.24"/>
+    <keyword type="function" name="pango_fc_font_key_get_context_key ()" link="PangoFcFontMap.html#pango-fc-font-key-get-context-key" since="1.24"/>
+    <keyword type="function" name="pango_fc_font_key_get_matrix ()" link="PangoFcFontMap.html#pango-fc-font-key-get-matrix" since="1.24"/>
+    <keyword type="function" name="pango_fc_font_key_get_pattern ()" link="PangoFcFontMap.html#pango-fc-font-key-get-pattern" since="1.24"/>
+    <keyword type="struct" name="PangoFcFont" link="PangoFcFont.html#PangoFcFont-struct"/>
+    <keyword type="struct" name="PangoFcFontClass" link="PangoFcFont.html#PangoFcFontClass"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_FC" link="PangoFcFont.html#PANGO-RENDER-TYPE-FC--CAPS"/>
+    <keyword type="function" name="pango_fc_font_lock_face ()" link="PangoFcFont.html#pango-fc-font-lock-face" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_unlock_face ()" link="PangoFcFont.html#pango-fc-font-unlock-face" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_has_char ()" link="PangoFcFont.html#pango-fc-font-has-char" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_get_glyph ()" link="PangoFcFont.html#pango-fc-font-get-glyph" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_get_unknown_glyph ()" link="PangoFcFont.html#pango-fc-font-get-unknown-glyph" deprecated="" since="1.4"/>
+    <keyword type="function" name="pango_fc_font_kern_glyphs ()" link="PangoFcFont.html#pango-fc-font-kern-glyphs" since="1.4"/>
+    <keyword type="property" name="The &quot;fontmap&quot; property" link="PangoFcFont.html#PangoFcFont--fontmap"/>
+    <keyword type="property" name="The &quot;pattern&quot; property" link="PangoFcFont.html#PangoFcFont--pattern"/>
+    <keyword type="struct" name="PangoFcDecoder" link="PangoFcDecoder.html#PangoFcDecoder-struct"/>
+    <keyword type="struct" name="PangoFcDecoderClass" link="PangoFcDecoder.html#PangoFcDecoderClass" since="1.6"/>
+    <keyword type="function" name="pango_fc_decoder_get_charset ()" link="PangoFcDecoder.html#pango-fc-decoder-get-charset" since="1.6"/>
+    <keyword type="function" name="pango_fc_decoder_get_glyph ()" link="PangoFcDecoder.html#pango-fc-decoder-get-glyph" since="1.6"/>
+    <keyword type="typedef" name="PangoOTTag" link="pango-OpenType-Font-Handling.html#PangoOTTag"/>
+    <keyword type="struct" name="PangoOTInfo" link="pango-OpenType-Font-Handling.html#PangoOTInfo-struct"/>
+    <keyword type="struct" name="PangoOTBuffer" link="pango-OpenType-Font-Handling.html#PangoOTBuffer"/>
+    <keyword type="struct" name="PangoOTGlyph" link="pango-OpenType-Font-Handling.html#PangoOTGlyph"/>
+    <keyword type="struct" name="PangoOTRuleset" link="pango-OpenType-Font-Handling.html#PangoOTRuleset-struct"/>
+    <keyword type="struct" name="PangoOTRulesetDescription" link="pango-OpenType-Font-Handling.html#PangoOTRulesetDescription" since="1.18"/>
+    <keyword type="enum" name="enum PangoOTTableType" link="pango-OpenType-Font-Handling.html#PangoOTTableType"/>
+    <keyword type="struct" name="PangoOTFeatureMap" link="pango-OpenType-Font-Handling.html#PangoOTFeatureMap" since="1.18"/>
+    <keyword type="macro" name="PANGO_OT_TAG_MAKE()" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE--CAPS"/>
+    <keyword type="macro" name="PANGO_OT_TAG_MAKE_FROM_STRING()" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-MAKE-FROM-STRING--CAPS"/>
+    <keyword type="macro" name="PANGO_OT_ALL_GLYPHS" link="pango-OpenType-Font-Handling.html#PANGO-OT-ALL-GLYPHS--CAPS" since="1.16"/>
+    <keyword type="macro" name="PANGO_OT_NO_FEATURE" link="pango-OpenType-Font-Handling.html#PANGO-OT-NO-FEATURE--CAPS" since="1.18"/>
+    <keyword type="macro" name="PANGO_OT_NO_SCRIPT" link="pango-OpenType-Font-Handling.html#PANGO-OT-NO-SCRIPT--CAPS" since="1.18"/>
+    <keyword type="macro" name="PANGO_OT_DEFAULT_LANGUAGE" link="pango-OpenType-Font-Handling.html#PANGO-OT-DEFAULT-LANGUAGE--CAPS" since="1.16"/>
+    <keyword type="macro" name="PANGO_OT_TAG_DEFAULT_LANGUAGE" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS" since="1.18"/>
+    <keyword type="macro" name="PANGO_OT_TAG_DEFAULT_SCRIPT" link="pango-OpenType-Font-Handling.html#PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" since="1.18"/>
+    <keyword type="function" name="pango_ot_info_get ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-get" since="1.2"/>
+    <keyword type="function" name="pango_ot_info_find_script ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-find-script"/>
+    <keyword type="function" name="pango_ot_info_find_language ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-find-language"/>
+    <keyword type="function" name="pango_ot_info_find_feature ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-find-feature"/>
+    <keyword type="function" name="pango_ot_info_list_scripts ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-list-scripts"/>
+    <keyword type="function" name="pango_ot_info_list_languages ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-list-languages"/>
+    <keyword type="function" name="pango_ot_info_list_features ()" link="pango-OpenType-Font-Handling.html#pango-ot-info-list-features"/>
+    <keyword type="function" name="pango_ot_buffer_new ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-new" since="1.4"/>
+    <keyword type="function" name="pango_ot_buffer_destroy ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-destroy" since="1.4"/>
+    <keyword type="function" name="pango_ot_buffer_clear ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-clear" since="1.4"/>
+    <keyword type="function" name="pango_ot_buffer_add_glyph ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-add-glyph" since="1.4"/>
+    <keyword type="function" name="pango_ot_buffer_set_rtl ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-rtl" since="1.4"/>
+    <keyword type="function" name="pango_ot_buffer_set_zero_width_marks ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-set-zero-width-marks" since="1.6"/>
+    <keyword type="function" name="pango_ot_buffer_get_glyphs ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-get-glyphs" since="1.4"/>
+    <keyword type="function" name="pango_ot_buffer_output ()" link="pango-OpenType-Font-Handling.html#pango-ot-buffer-output" since="1.4"/>
+    <keyword type="function" name="pango_ot_ruleset_get_for_description ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-for-description" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_new ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new"/>
+    <keyword type="function" name="pango_ot_ruleset_new_for ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-for" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_new_from_description ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-new-from-description" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_add_feature ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-add-feature"/>
+    <keyword type="function" name="pango_ot_ruleset_maybe_add_feature ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-feature" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_maybe_add_features ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-maybe-add-features" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_get_feature_count ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-get-feature-count" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_substitute ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-substitute" since="1.4"/>
+    <keyword type="function" name="pango_ot_ruleset_position ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-position" since="1.4"/>
+    <keyword type="function" name="pango_ot_ruleset_description_copy ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-copy" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_description_equal ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-equal" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_description_free ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-free" since="1.18"/>
+    <keyword type="function" name="pango_ot_ruleset_description_hash ()" link="pango-OpenType-Font-Handling.html#pango-ot-ruleset-description-hash" since="1.18"/>
+    <keyword type="function" name="pango_ot_tag_from_language ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-from-language" since="1.18"/>
+    <keyword type="function" name="pango_ot_tag_from_script ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-from-script" since="1.18"/>
+    <keyword type="function" name="pango_ot_tag_to_language ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-to-language" since="1.18"/>
+    <keyword type="function" name="pango_ot_tag_to_script ()" link="pango-OpenType-Font-Handling.html#pango-ot-tag-to-script" since="1.18"/>
+    <keyword type="enum" name="enum PangoCoverageLevel" link="pango-Coverage-Maps.html#PangoCoverageLevel"/>
+    <keyword type="macro" name="PANGO_TYPE_COVERAGE_LEVEL" link="pango-Coverage-Maps.html#PANGO-TYPE-COVERAGE-LEVEL--CAPS"/>
+    <keyword type="struct" name="PangoCoverage" link="pango-Coverage-Maps.html#PangoCoverage"/>
+    <keyword type="function" name="pango_coverage_new ()" link="pango-Coverage-Maps.html#pango-coverage-new"/>
+    <keyword type="function" name="pango_coverage_ref ()" link="pango-Coverage-Maps.html#pango-coverage-ref"/>
+    <keyword type="function" name="pango_coverage_unref ()" link="pango-Coverage-Maps.html#pango-coverage-unref"/>
+    <keyword type="function" name="pango_coverage_copy ()" link="pango-Coverage-Maps.html#pango-coverage-copy"/>
+    <keyword type="function" name="pango_coverage_get ()" link="pango-Coverage-Maps.html#pango-coverage-get"/>
+    <keyword type="function" name="pango_coverage_max ()" link="pango-Coverage-Maps.html#pango-coverage-max"/>
+    <keyword type="function" name="pango_coverage_set ()" link="pango-Coverage-Maps.html#pango-coverage-set"/>
+    <keyword type="function" name="pango_coverage_to_bytes ()" link="pango-Coverage-Maps.html#pango-coverage-to-bytes"/>
+    <keyword type="function" name="pango_coverage_from_bytes ()" link="pango-Coverage-Maps.html#pango-coverage-from-bytes"/>
+    <keyword type="struct" name="PangoEngineInfo" link="pango-Engines.html#PangoEngineInfo"/>
+    <keyword type="struct" name="PangoEngineScriptInfo" link="pango-Engines.html#PangoEngineScriptInfo"/>
+    <keyword type="struct" name="PangoEngine" link="pango-Engines.html#PangoEngine-struct"/>
+    <keyword type="struct" name="PangoEngineClass" link="pango-Engines.html#PangoEngineClass"/>
+    <keyword type="macro" name="PANGO_RENDER_TYPE_NONE" link="pango-Engines.html#PANGO-RENDER-TYPE-NONE--CAPS"/>
+    <keyword type="function" name="script_engine_list ()" link="pango-Engines.html#script-engine-list"/>
+    <keyword type="function" name="script_engine_init ()" link="pango-Engines.html#script-engine-init"/>
+    <keyword type="function" name="script_engine_exit ()" link="pango-Engines.html#script-engine-exit"/>
+    <keyword type="function" name="script_engine_create ()" link="pango-Engines.html#script-engine-create"/>
+    <keyword type="struct" name="PangoEngineLang" link="PangoEngineLang.html#PangoEngineLang-struct"/>
+    <keyword type="struct" name="PangoEngineLangClass" link="PangoEngineLang.html#PangoEngineLangClass"/>
+    <keyword type="macro" name="PANGO_ENGINE_TYPE_LANG" link="PangoEngineLang.html#PANGO-ENGINE-TYPE-LANG--CAPS"/>
+    <keyword type="macro" name="PANGO_ENGINE_LANG_DEFINE_TYPE()" link="PangoEngineLang.html#PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS"/>
+    <keyword type="struct" name="PangoEngineShape" link="PangoEngineShape.html#PangoEngineShape-struct"/>
+    <keyword type="struct" name="PangoEngineShapeClass" link="PangoEngineShape.html#PangoEngineShapeClass"/>
+    <keyword type="macro" name="PANGO_ENGINE_TYPE_SHAPE" link="PangoEngineShape.html#PANGO-ENGINE-TYPE-SHAPE--CAPS"/>
+    <keyword type="macro" name="PANGO_ENGINE_SHAPE_DEFINE_TYPE()" link="PangoEngineShape.html#PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS"/>
+    <keyword type="struct" name="PangoIncludedModule" link="pango-Modules.html#PangoIncludedModule"/>
+    <keyword type="struct" name="PangoMap" link="pango-Modules.html#PangoMap"/>
+    <keyword type="struct" name="PangoMapEntry" link="pango-Modules.html#PangoMapEntry"/>
+    <keyword type="function" name="pango_find_map ()" link="pango-Modules.html#pango-find-map"/>
+    <keyword type="function" name="pango_map_get_engine ()" link="pango-Modules.html#pango-map-get-engine"/>
+    <keyword type="function" name="pango_map_get_engines ()" link="pango-Modules.html#pango-map-get-engines" since="1.4"/>
+    <keyword type="function" name="pango_module_register ()" link="pango-Modules.html#pango-module-register"/>
+    <keyword type="function" name="pango_split_file_list ()" link="pango-Miscellaneous-Utilities.html#pango-split-file-list"/>
+    <keyword type="function" name="pango_trim_string ()" link="pango-Miscellaneous-Utilities.html#pango-trim-string"/>
+    <keyword type="function" name="pango_read_line ()" link="pango-Miscellaneous-Utilities.html#pango-read-line"/>
+    <keyword type="function" name="pango_skip_space ()" link="pango-Miscellaneous-Utilities.html#pango-skip-space"/>
+    <keyword type="function" name="pango_scan_word ()" link="pango-Miscellaneous-Utilities.html#pango-scan-word"/>
+    <keyword type="function" name="pango_scan_string ()" link="pango-Miscellaneous-Utilities.html#pango-scan-string"/>
+    <keyword type="function" name="pango_scan_int ()" link="pango-Miscellaneous-Utilities.html#pango-scan-int"/>
+    <keyword type="function" name="pango_config_key_get ()" link="pango-Miscellaneous-Utilities.html#pango-config-key-get"/>
+    <keyword type="function" name="pango_lookup_aliases ()" link="pango-Miscellaneous-Utilities.html#pango-lookup-aliases"/>
+    <keyword type="function" name="pango_parse_enum ()" link="pango-Miscellaneous-Utilities.html#pango-parse-enum" since="1.16"/>
+    <keyword type="function" name="pango_parse_style ()" link="pango-Miscellaneous-Utilities.html#pango-parse-style"/>
+    <keyword type="function" name="pango_parse_variant ()" link="pango-Miscellaneous-Utilities.html#pango-parse-variant"/>
+    <keyword type="function" name="pango_parse_weight ()" link="pango-Miscellaneous-Utilities.html#pango-parse-weight"/>
+    <keyword type="function" name="pango_parse_stretch ()" link="pango-Miscellaneous-Utilities.html#pango-parse-stretch"/>
+    <keyword type="function" name="pango_get_sysconf_subdirectory ()" link="pango-Miscellaneous-Utilities.html#pango-get-sysconf-subdirectory"/>
+    <keyword type="function" name="pango_get_lib_subdirectory ()" link="pango-Miscellaneous-Utilities.html#pango-get-lib-subdirectory"/>
+    <keyword type="function" name="pango_log2vis_get_embedding_levels ()" link="pango-Miscellaneous-Utilities.html#pango-log2vis-get-embedding-levels" since="1.4"/>
+    <keyword type="function" name="pango_is_zero_width ()" link="pango-Miscellaneous-Utilities.html#pango-is-zero-width" since="1.10"/>
+    <keyword type="function" name="pango_quantize_line_geometry ()" link="pango-Miscellaneous-Utilities.html#pango-quantize-line-geometry" since="1.12"/>
+    <keyword type="macro" name="PANGO_VERSION_ENCODE()" link="pango-Version-Checking.html#PANGO-VERSION-ENCODE--CAPS"/>
+    <keyword type="macro" name="PANGO_VERSION" link="pango-Version-Checking.html#PANGO-VERSION--CAPS"/>
+    <keyword type="macro" name="PANGO_VERSION_MAJOR" link="pango-Version-Checking.html#PANGO-VERSION-MAJOR--CAPS"/>
+    <keyword type="macro" name="PANGO_VERSION_MINOR" link="pango-Version-Checking.html#PANGO-VERSION-MINOR--CAPS"/>
+    <keyword type="macro" name="PANGO_VERSION_MICRO" link="pango-Version-Checking.html#PANGO-VERSION-MICRO--CAPS"/>
+    <keyword type="macro" name="PANGO_VERSION_STRING" link="pango-Version-Checking.html#PANGO-VERSION-STRING--CAPS"/>
+    <keyword type="macro" name="PANGO_VERSION_CHECK()" link="pango-Version-Checking.html#PANGO-VERSION-CHECK--CAPS"/>
+    <keyword type="function" name="pango_version ()" link="pango-Version-Checking.html#pango-version" since="1.16"/>
+    <keyword type="function" name="pango_version_string ()" link="pango-Version-Checking.html#pango-version-string" since="1.16"/>
+    <keyword type="function" name="pango_version_check ()" link="pango-Version-Checking.html#pango-version-check" since="1.16"/>
+    <keyword type="constant" name="PANGO_STYLE_NORMAL" link="pango-Fonts.html#PANGO-STYLE-NORMAL--CAPS"/>
+    <keyword type="constant" name="PANGO_STYLE_OBLIQUE" link="pango-Fonts.html#PANGO-STYLE-OBLIQUE--CAPS"/>
+    <keyword type="constant" name="PANGO_STYLE_ITALIC" link="pango-Fonts.html#PANGO-STYLE-ITALIC--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_THIN" link="pango-Fonts.html#PANGO-WEIGHT-THIN--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_ULTRALIGHT" link="pango-Fonts.html#PANGO-WEIGHT-ULTRALIGHT--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_LIGHT" link="pango-Fonts.html#PANGO-WEIGHT-LIGHT--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_BOOK" link="pango-Fonts.html#PANGO-WEIGHT-BOOK--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_NORMAL" link="pango-Fonts.html#PANGO-WEIGHT-NORMAL--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_MEDIUM" link="pango-Fonts.html#PANGO-WEIGHT-MEDIUM--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_SEMIBOLD" link="pango-Fonts.html#PANGO-WEIGHT-SEMIBOLD--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_BOLD" link="pango-Fonts.html#PANGO-WEIGHT-BOLD--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_ULTRABOLD" link="pango-Fonts.html#PANGO-WEIGHT-ULTRABOLD--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_HEAVY" link="pango-Fonts.html#PANGO-WEIGHT-HEAVY--CAPS"/>
+    <keyword type="constant" name="PANGO_WEIGHT_ULTRAHEAVY" link="pango-Fonts.html#PANGO-WEIGHT-ULTRAHEAVY--CAPS"/>
+    <keyword type="constant" name="PANGO_VARIANT_NORMAL" link="pango-Fonts.html#PANGO-VARIANT-NORMAL--CAPS"/>
+    <keyword type="constant" name="PANGO_VARIANT_SMALL_CAPS" link="pango-Fonts.html#PANGO-VARIANT-SMALL-CAPS--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_ULTRA_CONDENSED" link="pango-Fonts.html#PANGO-STRETCH-ULTRA-CONDENSED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_EXTRA_CONDENSED" link="pango-Fonts.html#PANGO-STRETCH-EXTRA-CONDENSED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_CONDENSED" link="pango-Fonts.html#PANGO-STRETCH-CONDENSED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_SEMI_CONDENSED" link="pango-Fonts.html#PANGO-STRETCH-SEMI-CONDENSED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_NORMAL" link="pango-Fonts.html#PANGO-STRETCH-NORMAL--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_SEMI_EXPANDED" link="pango-Fonts.html#PANGO-STRETCH-SEMI-EXPANDED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_EXPANDED" link="pango-Fonts.html#PANGO-STRETCH-EXPANDED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_EXTRA_EXPANDED" link="pango-Fonts.html#PANGO-STRETCH-EXTRA-EXPANDED--CAPS"/>
+    <keyword type="constant" name="PANGO_STRETCH_ULTRA_EXPANDED" link="pango-Fonts.html#PANGO-STRETCH-ULTRA-EXPANDED--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_FAMILY" link="pango-Fonts.html#PANGO-FONT-MASK-FAMILY--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_STYLE" link="pango-Fonts.html#PANGO-FONT-MASK-STYLE--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_VARIANT" link="pango-Fonts.html#PANGO-FONT-MASK-VARIANT--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_WEIGHT" link="pango-Fonts.html#PANGO-FONT-MASK-WEIGHT--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_STRETCH" link="pango-Fonts.html#PANGO-FONT-MASK-STRETCH--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_SIZE" link="pango-Fonts.html#PANGO-FONT-MASK-SIZE--CAPS"/>
+    <keyword type="constant" name="PANGO_FONT_MASK_GRAVITY" link="pango-Fonts.html#PANGO-FONT-MASK-GRAVITY--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_INVALID" link="pango-Text-Attributes.html#PANGO-ATTR-INVALID--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_LANGUAGE" link="pango-Text-Attributes.html#PANGO-ATTR-LANGUAGE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_FAMILY" link="pango-Text-Attributes.html#PANGO-ATTR-FAMILY--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_STYLE" link="pango-Text-Attributes.html#PANGO-ATTR-STYLE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_WEIGHT" link="pango-Text-Attributes.html#PANGO-ATTR-WEIGHT--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_VARIANT" link="pango-Text-Attributes.html#PANGO-ATTR-VARIANT--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_STRETCH" link="pango-Text-Attributes.html#PANGO-ATTR-STRETCH--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_SIZE" link="pango-Text-Attributes.html#PANGO-ATTR-SIZE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_FONT_DESC" link="pango-Text-Attributes.html#PANGO-ATTR-FONT-DESC--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_FOREGROUND" link="pango-Text-Attributes.html#PANGO-ATTR-FOREGROUND--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_BACKGROUND" link="pango-Text-Attributes.html#PANGO-ATTR-BACKGROUND--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_UNDERLINE" link="pango-Text-Attributes.html#PANGO-ATTR-UNDERLINE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_STRIKETHROUGH" link="pango-Text-Attributes.html#PANGO-ATTR-STRIKETHROUGH--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_RISE" link="pango-Text-Attributes.html#PANGO-ATTR-RISE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_SHAPE" link="pango-Text-Attributes.html#PANGO-ATTR-SHAPE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_SCALE" link="pango-Text-Attributes.html#PANGO-ATTR-SCALE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_FALLBACK" link="pango-Text-Attributes.html#PANGO-ATTR-FALLBACK--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_LETTER_SPACING" link="pango-Text-Attributes.html#PANGO-ATTR-LETTER-SPACING--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_UNDERLINE_COLOR" link="pango-Text-Attributes.html#PANGO-ATTR-UNDERLINE-COLOR--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_STRIKETHROUGH_COLOR" link="pango-Text-Attributes.html#PANGO-ATTR-STRIKETHROUGH-COLOR--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_ABSOLUTE_SIZE" link="pango-Text-Attributes.html#PANGO-ATTR-ABSOLUTE-SIZE--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_GRAVITY" link="pango-Text-Attributes.html#PANGO-ATTR-GRAVITY--CAPS"/>
+    <keyword type="constant" name="PANGO_ATTR_GRAVITY_HINT" link="pango-Text-Attributes.html#PANGO-ATTR-GRAVITY-HINT--CAPS"/>
+    <keyword type="constant" name="PANGO_UNDERLINE_NONE" link="pango-Text-Attributes.html#PANGO-UNDERLINE-NONE--CAPS"/>
+    <keyword type="constant" name="PANGO_UNDERLINE_SINGLE" link="pango-Text-Attributes.html#PANGO-UNDERLINE-SINGLE--CAPS"/>
+    <keyword type="constant" name="PANGO_UNDERLINE_DOUBLE" link="pango-Text-Attributes.html#PANGO-UNDERLINE-DOUBLE--CAPS"/>
+    <keyword type="constant" name="PANGO_UNDERLINE_LOW" link="pango-Text-Attributes.html#PANGO-UNDERLINE-LOW--CAPS"/>
+    <keyword type="constant" name="PANGO_UNDERLINE_ERROR" link="pango-Text-Attributes.html#PANGO-UNDERLINE-ERROR--CAPS"/>
+    <keyword type="constant" name="PANGO_TAB_LEFT" link="pango-Tab-Stops.html#PANGO-TAB-LEFT--CAPS"/>
+    <keyword type="constant" name="PANGO_WRAP_WORD" link="pango-Layout-Objects.html#PANGO-WRAP-WORD--CAPS"/>
+    <keyword type="constant" name="PANGO_WRAP_CHAR" link="pango-Layout-Objects.html#PANGO-WRAP-CHAR--CAPS"/>
+    <keyword type="constant" name="PANGO_WRAP_WORD_CHAR" link="pango-Layout-Objects.html#PANGO-WRAP-WORD-CHAR--CAPS"/>
+    <keyword type="constant" name="PANGO_ELLIPSIZE_NONE" link="pango-Layout-Objects.html#PANGO-ELLIPSIZE-NONE--CAPS"/>
+    <keyword type="constant" name="PANGO_ELLIPSIZE_START" link="pango-Layout-Objects.html#PANGO-ELLIPSIZE-START--CAPS"/>
+    <keyword type="constant" name="PANGO_ELLIPSIZE_MIDDLE" link="pango-Layout-Objects.html#PANGO-ELLIPSIZE-MIDDLE--CAPS"/>
+    <keyword type="constant" name="PANGO_ELLIPSIZE_END" link="pango-Layout-Objects.html#PANGO-ELLIPSIZE-END--CAPS"/>
+    <keyword type="constant" name="PANGO_ALIGN_LEFT" link="pango-Layout-Objects.html#PANGO-ALIGN-LEFT--CAPS"/>
+    <keyword type="constant" name="PANGO_ALIGN_CENTER" link="pango-Layout-Objects.html#PANGO-ALIGN-CENTER--CAPS"/>
+    <keyword type="constant" name="PANGO_ALIGN_RIGHT" link="pango-Layout-Objects.html#PANGO-ALIGN-RIGHT--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_INVALID_CODE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-INVALID-CODE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_COMMON" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-COMMON--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_INHERITED" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-INHERITED--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_ARABIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-ARABIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_ARMENIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-ARMENIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_BENGALI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-BENGALI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_BOPOMOFO" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-BOPOMOFO--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CHEROKEE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CHEROKEE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_COPTIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-COPTIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CYRILLIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CYRILLIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_DESERET" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-DESERET--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_DEVANAGARI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-DEVANAGARI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_ETHIOPIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-ETHIOPIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_GEORGIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-GEORGIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_GOTHIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-GOTHIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_GREEK" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-GREEK--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_GUJARATI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-GUJARATI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_GURMUKHI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-GURMUKHI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_HAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_HANGUL" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HANGUL--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_HEBREW" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HEBREW--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_HIRAGANA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HIRAGANA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_KANNADA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KANNADA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_KATAKANA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KATAKANA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_KHMER" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KHMER--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LAO" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LAO--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LATIN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LATIN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_MALAYALAM" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-MALAYALAM--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_MONGOLIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-MONGOLIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_MYANMAR" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-MYANMAR--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_OGHAM" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-OGHAM--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_OLD_ITALIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-OLD-ITALIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_ORIYA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-ORIYA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_RUNIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-RUNIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_SINHALA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-SINHALA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_SYRIAC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-SYRIAC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TAMIL" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TAMIL--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TELUGU" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TELUGU--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_THAANA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-THAANA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_THAI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-THAI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TIBETAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TIBETAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CANADIAN_ABORIGINAL" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CANADIAN-ABORIGINAL--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_YI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-YI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TAGALOG" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TAGALOG--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_HANUNOO" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-HANUNOO--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_BUHID" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-BUHID--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TAGBANWA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TAGBANWA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_BRAILLE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-BRAILLE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CYPRIOT" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CYPRIOT--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LIMBU" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LIMBU--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_OSMANYA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-OSMANYA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_SHAVIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-SHAVIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LINEAR_B" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LINEAR-B--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TAI_LE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TAI-LE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_UGARITIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-UGARITIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_NEW_TAI_LUE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-NEW-TAI-LUE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_BUGINESE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-BUGINESE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_GLAGOLITIC" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-GLAGOLITIC--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_TIFINAGH" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-TIFINAGH--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_SYLOTI_NAGRI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-SYLOTI-NAGRI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_OLD_PERSIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-OLD-PERSIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_KHAROSHTHI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KHAROSHTHI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_UNKNOWN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-UNKNOWN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_BALINESE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-BALINESE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CUNEIFORM" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CUNEIFORM--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_PHOENICIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-PHOENICIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_PHAGS_PA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-PHAGS-PA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_NKO" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-NKO--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_KAYAH_LI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-KAYAH-LI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LEPCHA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LEPCHA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_REJANG" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-REJANG--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_SUNDANESE" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-SUNDANESE--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_SAURASHTRA" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-SAURASHTRA--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CHAM" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CHAM--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_OL_CHIKI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-OL-CHIKI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_VAI" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-VAI--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_CARIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-CARIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LYCIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LYCIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_SCRIPT_LYDIAN" link="pango-Scripts-and-Languages.html#PANGO-SCRIPT-LYDIAN--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_LTR" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-LTR--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_RTL" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-RTL--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_TTB_LTR" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-TTB-LTR--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_TTB_RTL" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-TTB-RTL--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_WEAK_LTR" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-WEAK-LTR--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_WEAK_RTL" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-WEAK-RTL--CAPS"/>
+    <keyword type="constant" name="PANGO_DIRECTION_NEUTRAL" link="pango-Bidirectional-Text.html#PANGO-DIRECTION-NEUTRAL--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_L" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-L--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_LRE" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-LRE--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_LRO" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-LRO--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_R" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-R--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_AL" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-AL--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_RLE" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-RLE--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_RLO" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-RLO--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_PDF" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-PDF--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_EN" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-EN--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_ES" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-ES--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_ET" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-ET--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_AN" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-AN--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_CS" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-CS--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_NSM" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-NSM--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_BN" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-BN--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_B" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-B--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_S" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-S--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_WS" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-WS--CAPS"/>
+    <keyword type="constant" name="PANGO_BIDI_TYPE_ON" link="pango-Bidirectional-Text.html#PANGO-BIDI-TYPE-ON--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_SOUTH" link="pango-Vertical-Text.html#PANGO-GRAVITY-SOUTH--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_EAST" link="pango-Vertical-Text.html#PANGO-GRAVITY-EAST--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_NORTH" link="pango-Vertical-Text.html#PANGO-GRAVITY-NORTH--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_WEST" link="pango-Vertical-Text.html#PANGO-GRAVITY-WEST--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_AUTO" link="pango-Vertical-Text.html#PANGO-GRAVITY-AUTO--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_HINT_NATURAL" link="pango-Vertical-Text.html#PANGO-GRAVITY-HINT-NATURAL--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_HINT_STRONG" link="pango-Vertical-Text.html#PANGO-GRAVITY-HINT-STRONG--CAPS"/>
+    <keyword type="constant" name="PANGO_GRAVITY_HINT_LINE" link="pango-Vertical-Text.html#PANGO-GRAVITY-HINT-LINE--CAPS"/>
+    <keyword type="constant" name="PANGO_RENDER_PART_FOREGROUND" link="PangoRenderer.html#PANGO-RENDER-PART-FOREGROUND--CAPS"/>
+    <keyword type="constant" name="PANGO_RENDER_PART_BACKGROUND" link="PangoRenderer.html#PANGO-RENDER-PART-BACKGROUND--CAPS"/>
+    <keyword type="constant" name="PANGO_RENDER_PART_UNDERLINE" link="PangoRenderer.html#PANGO-RENDER-PART-UNDERLINE--CAPS"/>
+    <keyword type="constant" name="PANGO_RENDER_PART_STRIKETHROUGH" link="PangoRenderer.html#PANGO-RENDER-PART-STRIKETHROUGH--CAPS"/>
+    <keyword type="constant" name="PANGO_OT_TABLE_GSUB" link="pango-OpenType-Font-Handling.html#PANGO-OT-TABLE-GSUB--CAPS"/>
+    <keyword type="constant" name="PANGO_OT_TABLE_GPOS" link="pango-OpenType-Font-Handling.html#PANGO-OT-TABLE-GPOS--CAPS"/>
+    <keyword type="constant" name="PANGO_COVERAGE_NONE" link="pango-Coverage-Maps.html#PANGO-COVERAGE-NONE--CAPS"/>
+    <keyword type="constant" name="PANGO_COVERAGE_FALLBACK" link="pango-Coverage-Maps.html#PANGO-COVERAGE-FALLBACK--CAPS"/>
+    <keyword type="constant" name="PANGO_COVERAGE_APPROXIMATE" link="pango-Coverage-Maps.html#PANGO-COVERAGE-APPROXIMATE--CAPS"/>
+    <keyword type="constant" name="PANGO_COVERAGE_EXACT" link="pango-Coverage-Maps.html#PANGO-COVERAGE-EXACT--CAPS"/>
+  </functions>
+</book>
diff --git a/docs/html/pango.html b/docs/html/pango.html
new file mode 100755 (executable)
index 0000000..0cc7725
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Basic Pango Interfaces</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="index.html" title="Pango Reference Manual">
+<link rel="next" href="pango-Text-Processing.html" title="Rendering">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Text-Processing.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="pango"></a>Basic Pango Interfaces</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="pango-Text-Processing.html">Rendering</a></span><span class="refpurpose"> — Functions to run the rendering pipeline</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Glyph-Storage.html">Glyph Storage</a></span><span class="refpurpose"> — Structures for storing information about glyphs</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Fonts.html">Fonts</a></span><span class="refpurpose"> — Structures representing abstract fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Text-Attributes.html">Text Attributes</a></span><span class="refpurpose"> — Font and other attributes for annotating text</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Tab-Stops.html">Tab Stops</a></span><span class="refpurpose"> — Structures for storing tab stops</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="PangoMarkupFormat.html">Text Attribute Markup</a></span><span class="refpurpose"> — Simple
+markup language to encode text with attributes</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Layout-Objects.html">Layout Objects</a></span><span class="refpurpose"> — High-level layout driver objects</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Scripts-and-Languages.html">Scripts and Languages</a></span><span class="refpurpose"> — Identifying writing systems and languages</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Bidirectional-Text.html">Bidirectional Text</a></span><span class="refpurpose"> — Types and functions to help with handling bidirectional text</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Vertical-Text.html">Vertical Text</a></span><span class="refpurpose"> — Laying text out in vertical directions</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/rendering.html b/docs/html/rendering.html
new file mode 100755 (executable)
index 0000000..0679605
--- /dev/null
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Rendering with Pango</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="pango-Vertical-Text.html" title="Vertical Text">
+<link rel="next" href="pango-Win32-Fonts-and-Rendering.html" title="Win32 Fonts and Rendering">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="pango-Vertical-Text.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-Win32-Fonts-and-Rendering.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="rendering"></a>Rendering with Pango</h2></div></div></div>
+<div class="toc"><dl>
+<dt>
+<span class="refentrytitle"><a href="pango-Win32-Fonts-and-Rendering.html">Win32 Fonts and Rendering</a></span><span class="refpurpose"> — Functions for shape engines to manipulate Win32 fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-FreeType-Fonts-and-Rendering.html">FreeType Fonts and Rendering</a></span><span class="refpurpose"> — Functions for shape engines to manipulate FreeType fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Xft-Fonts-and-Rendering.html">Xft Fonts and Rendering</a></span><span class="refpurpose"> — Font handling and rendering with the Xft backend</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-Cairo-Rendering.html">Cairo Rendering</a></span><span class="refpurpose"> — Rendering with the Cairo backend</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-ATSUI-Fonts.html">ATSUI Fonts</a></span><span class="refpurpose"> — Font handling with ATSUI fonts</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="pango-X-Fonts-and-Rendering.html">Deprecated X font backend</a></span><span class="refpurpose"> — Font handling and rendering with the deprecated X font backend</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/right.png b/docs/html/right.png
new file mode 100755 (executable)
index 0000000..92832e3
Binary files /dev/null and b/docs/html/right.png differ
diff --git a/docs/html/rotated-text.png b/docs/html/rotated-text.png
new file mode 100755 (executable)
index 0000000..b29682e
Binary files /dev/null and b/docs/html/rotated-text.png differ
diff --git a/docs/html/style.css b/docs/html/style.css
new file mode 100755 (executable)
index 0000000..bb44c28
--- /dev/null
@@ -0,0 +1,167 @@
+.synopsis, .classsynopsis
+{
+  background: #eeeeee;
+  border: solid 1px #aaaaaa;
+  padding: 0.5em;
+}
+.programlisting
+{
+  background: #eeeeff;
+  border: solid 1px #aaaaff;
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+/* this is needed so that the local anchors are displayed below the naviagtion */
+@media screen {
+  sup a.footnote
+  {
+    position: relative;
+    top: 0em ! important;
+  }
+  div.refnamediv a[name], div.refsect1 a[name]
+  {
+    position: relative;
+    top: -4.5em;
+  }
+  table.navigation#top
+  {
+    background: #ffeeee;
+    border: solid 1px #ffaaaa;
+    margin-top: 0;
+    margin-bottom: 0;
+    position: fixed;
+    top: 0;
+    left: 0;
+    height: 2em;
+    z-index: 1;
+  }
+  .navigation a
+  {
+    color: #770000;
+  }
+  .navigation a:visited
+  {
+    color: #550000;
+  }
+  td.shortcuts
+  {
+    color: #770000;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+  div.refentry, div.chapter, div.reference, div.part, div.book, div.glossary, div.sect1, div.appendix, div.preface
+  {
+    position: relative;
+    top: 3em;
+    z-index: 0;
+  }
+  div.glossary, div.index
+  {
+    position: relative;
+    top: 2em;
+    z-index: 0;
+  }
+  div.refnamediv
+  {
+    margin-top: 2em;
+  }
+  body
+  {
+    padding-bottom: 20em;
+  }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    background: #ffeeee;
+    border: solid 1px #ffaaaa;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 2em;
+  }
+}
+
+.navigation .title
+{
+  font-size: 200%;
+}
+
+
+div.gallery-float
+{
+  float: left;
+  padding: 10px;
+}
+div.gallery-float img
+{
+  border-style: none;
+}
+div.gallery-spacer
+{
+  clear: both;
+}
+a
+{
+  text-decoration: none;
+}
+a:hover
+{
+  text-decoration: underline;
+  color: #FF0000;
+}
+
+div.table table
+{
+  border-collapse: collapse;
+  border-spacing: 0px;
+  border-style: solid;
+  border-color: #777777;
+  border-width: 1px;
+}
+
+div.table table td, div.table table th
+{
+  border-style: solid;
+  border-color: #777777;
+  border-width: 1px;
+  padding: 3px;
+  vertical-align: top;
+}
+
+div.table table th
+{
+  background-color: #eeeeee;
+}
+
+hr
+{
+  color: #777777;
+  background: #777777;
+  border: 0;
+  height: 1px;
+  clear: both;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  color: #777777;
+  text-align: center;
+  font-size: 80%;
+}
diff --git a/docs/html/tools.html b/docs/html/tools.html
new file mode 100755 (executable)
index 0000000..fef8285
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Pango Tools</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
+<link rel="home" href="index.html" title="Pango Reference Manual">
+<link rel="up" href="index.html" title="Pango Reference Manual">
+<link rel="prev" href="pango-Version-Checking.html" title="Version Checking">
+<link rel="next" href="pango-querymodules.html" title="pango-querymodules">
+<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+<link rel="chapter" href="pango.html" title="Basic Pango Interfaces">
+<link rel="chapter" href="rendering.html" title="Rendering with Pango">
+<link rel="chapter" href="lowlevel.html" title="Low Level Functionality">
+<link rel="chapter" href="tools.html" title="Pango Tools">
+<link rel="chapter" href="pango-hierarchy.html" title="Object Hierarchy">
+<link rel="index" href="index-all.html" title="Index">
+<link rel="index" href="index-deprecated.html" title="Index of deprecated symbols">
+<link rel="index" href="index-1.2.html" title="Index of new symbols in 1.2">
+<link rel="index" href="index-1.4.html" title="Index of new symbols in 1.4">
+<link rel="index" href="index-1.6.html" title="Index of new symbols in 1.6">
+<link rel="index" href="index-1.8.html" title="Index of new symbols in 1.8">
+<link rel="index" href="index-1.10.html" title="Index of new symbols in 1.10">
+<link rel="index" href="index-1.12.html" title="Index of new symbols in 1.12">
+<link rel="index" href="index-1.14.html" title="Index of new symbols in 1.14">
+<link rel="index" href="index-1.16.html" title="Index of new symbols in 1.16">
+<link rel="index" href="index-1.18.html" title="Index of new symbols in 1.18">
+<link rel="index" href="index-1.20.html" title="Index of new symbols in 1.20">
+<link rel="index" href="index-1.22.html" title="Index of new symbols in 1.22">
+<link rel="index" href="index-1.24.html" title="Index of new symbols in 1.24">
+<link rel="index" href="index-1.26.html" title="Index of new symbols in 1.26">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="pango-Version-Checking.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">Pango Reference Manual</th>
+<td><a accesskey="n" href="pango-querymodules.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" lang="en">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="tools"></a>Pango Tools</h2></div></div></div>
+<div class="toc"><dl><dt>
+<span class="refentrytitle"><a href="pango-querymodules.html">pango-querymodules</a></span><span class="refpurpose"> — Module registration utility</span>
+</dt></dl></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.11</div>
+</body>
+</html>
diff --git a/docs/html/up.png b/docs/html/up.png
new file mode 100755 (executable)
index 0000000..85b3e2a
Binary files /dev/null and b/docs/html/up.png differ
diff --git a/docs/layout.eps b/docs/layout.eps
new file mode 100755 (executable)
index 0000000..42c897a
--- /dev/null
@@ -0,0 +1,231 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: layout.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 1
+%%CreationDate: Thu Mar  9 16:51:04 2000
+%%For: otaylor@fresnel.labs.redhat.com (Owen Taylor,,547-0012 x249)
+%%Orientation: Portrait
+%%BoundingBox: 0 0 629 233
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.443 0.459 0.443 srgb} bind def
+
+end
+save
+-5.0 253.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+%%EndProlog
+
+$F2psBegin
+10 setmiterlimit
+n -1000 5215 m -1000 -1000 l 11561 -1000 l 11561 5215 l cp clip
+ 0.06000 0.06000 sc
+% Polyline
+15.000 slw
+gs  clippath
+10200 3405 m 10350 3450 l 10200 3495 l 10380 3495 l 10380 3405 l cp
+6300 3495 m 6150 3450 l 6300 3405 l 6120 3405 l 6120 3495 l cp
+clip
+n 6150 3450 m 10350 3450 l gs col-1 s gr gr
+
+% arrowhead
+7.500 slw
+n 6300 3495 m 6150 3450 l 6300 3405 l 6300 3450 l 6300 3495 l  cp gs 0.00 setgray ef gr  col-1 s
+% arrowhead
+n 10200 3405 m 10350 3450 l 10200 3495 l 10200 3450 l 10200 3405 l  cp gs 0.00 setgray ef gr  col-1 s
+% Polyline
+n 1200 675 m 1200 3600 l gs col-1 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+5250 3405 m 5400 3450 l 5250 3495 l 5430 3495 l 5430 3405 l cp
+1350 3495 m 1200 3450 l 1350 3405 l 1170 3405 l 1170 3495 l cp
+clip
+n 1200 3450 m 5400 3450 l gs col-1 s gr gr
+
+% arrowhead
+7.500 slw
+n 1350 3495 m 1200 3450 l 1350 3405 l 1350 3450 l 1350 3495 l  cp gs 0.00 setgray ef gr  col-1 s
+% arrowhead
+n 5250 3405 m 5400 3450 l 5250 3495 l 5250 3450 l 5250 3405 l  cp gs 0.00 setgray ef gr  col-1 s
+% Polyline
+n 1050 2175 m 1200 2175 l gs col-1 s gr 
+% Polyline
+15.000 slw
+n 1125 2025 m 1125 2175 l gs col-1 s gr 
+% Polyline
+7.500 slw
+n 6150 975 m 6150 3600 l gs col-1 s gr 
+% Polyline
+n 5400 975 m 5400 3600 l gs col-1 s gr 
+% Polyline
+n 1800 975 m 1800 675 l gs col-1 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+1650 780 m 1800 825 l 1650 870 l 1830 870 l 1830 780 l cp
+1350 870 m 1200 825 l 1350 780 l 1170 780 l 1170 870 l cp
+clip
+n 1200 825 m 1800 825 l gs col-1 s gr gr
+
+% arrowhead
+7.500 slw
+n 1350 870 m 1200 825 l 1350 780 l 1350 825 l 1350 870 l  cp gs 0.00 setgray ef gr  col-1 s
+% arrowhead
+n 1650 780 m 1800 825 l 1650 870 l 1650 825 l 1650 780 l  cp gs 0.00 setgray ef gr  col-1 s
+% Polyline
+n 9750 975 m 9750 675 l gs col-1 s gr 
+% Polyline
+15.000 slw
+gs  clippath
+10200 780 m 10350 825 l 10200 870 l 10380 870 l 10380 780 l cp
+9900 870 m 9750 825 l 9900 780 l 9720 780 l 9720 870 l cp
+clip
+n 9750 825 m 10350 825 l gs col-1 s gr gr
+
+% arrowhead
+7.500 slw
+n 9900 870 m 9750 825 l 9900 780 l 9900 825 l 9900 870 l  cp gs 0.00 setgray ef gr  col-1 s
+% arrowhead
+n 10200 780 m 10350 825 l 10200 870 l 10200 825 l 10200 780 l  cp gs 0.00 setgray ef gr  col-1 s
+% Polyline
+n 10350 675 m 10350 3600 l gs col-1 s gr 
+% Polyline
+15.000 slw
+n 4950 1425 m 1800 1425 l 1800 975 l 4950 975 l cp gs col32 s gr 
+% Polyline
+n 4575 2025 m 1200 2025 l 1200 1575 l 4575 1575 l cp gs col32 s gr 
+% Polyline
+n 5250 2625 m 1200 2625 l 1200 2175 l 5250 2175 l cp gs col32 s gr 
+% Polyline
+n 2400 3225 m 1200 3225 l 1200 2775 l 2400 2775 l cp gs col32 s gr 
+% Polyline
+n 9750 1425 m 6600 1425 l 6600 975 l 9750 975 l cp gs col32 s gr 
+% Polyline
+n 10350 2025 m 6975 2025 l 6975 1575 l 10350 1575 l cp gs col32 s gr 
+% Polyline
+n 10350 2625 m 6300 2625 l 6300 2175 l 10350 2175 l cp gs col32 s gr 
+% Polyline
+n 10350 3225 m 9150 3225 l 9150 2775 l 10350 2775 l cp gs col32 s gr 
+% Polyline
+7.500 slw
+n 1200 2025 m 1050 2025 l gs col-1 s gr 
+/Times-Roman ff 360.00 scf sf
+1200 2475 m
+gs 1 -1 sc (demonstrate PangoLayout's) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+1200 3075 m
+gs 1 -1 sc (features.) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+1200 1875 m
+gs 1 -1 sc (should wrap suitably to) col0 sh gr
+/Helvetica ff 240.00 scf sf
+525 2175 m
+gs 1 -1 sc (spacing) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Times-Roman ff 360.00 scf sf
+1800 1275 m
+gs 1 -1 sc (Here is some text that) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+9150 3075 m
+gs 1 -1 sc (features.) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6600 1275 m
+gs 1 -1 sc (Here is some text that) col0 sh gr
+/Helvetica ff 240.00 scf sf
+1875 3825 m
+gs 1 -1 sc (width) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Helvetica ff 240.00 scf sf
+6825 3825 m
+gs 1 -1 sc (width) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Helvetica ff 240.00 scf sf
+10050 525 m
+gs 1 -1 sc (indent) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Helvetica ff 240.00 scf sf
+1575 525 m
+gs 1 -1 sc (indent) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Helvetica ff 300.00 scf sf
+9225 4125 m
+gs 1 -1 sc (Right Aligned) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Helvetica ff 300.00 scf sf
+4350 4125 m
+gs 1 -1 sc (Left Aligned) dup sw pop 2 div neg 0 rm  col-1 sh gr
+/Times-Roman ff 360.00 scf sf
+6975 1875 m
+gs 1 -1 sc (should wrap suitably to) col0 sh gr
+/Times-Roman ff 360.00 scf sf
+6300 2475 m
+gs 1 -1 sc (demonstrate PangoLayout's) col0 sh gr
+$F2psEnd
+rs
diff --git a/docs/layout.fig b/docs/layout.fig
new file mode 100755 (executable)
index 0000000..7e43560
--- /dev/null
@@ -0,0 +1,75 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+0 32 #717571
+2 1 0 2 -1 7 100 0 -1 0.000 0 0 -1 1 1 2
+       1 1 1.00 90.00 150.00
+       1 1 1.00 90.00 150.00
+        6150 3450 10350 3450
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        1200 675 1200 3600
+2 1 0 2 -1 7 100 0 -1 0.000 0 0 -1 1 1 2
+       1 1 1.00 90.00 150.00
+       1 1 1.00 90.00 150.00
+        1200 3450 5400 3450
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        1050 2175 1200 2175
+2 1 0 2 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        1125 2025 1125 2175
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        6150 975 6150 3600
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        5400 975 5400 3600
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        1800 975 1800 675
+2 1 0 2 -1 7 100 0 -1 0.000 0 0 -1 1 1 2
+       1 1 1.00 90.00 150.00
+       1 1 1.00 90.00 150.00
+        1200 825 1800 825
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        9750 975 9750 675
+2 1 0 2 -1 7 100 0 -1 0.000 0 0 -1 1 1 2
+       1 1 1.00 90.00 150.00
+       1 1 1.00 90.00 150.00
+        9750 825 10350 825
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        10350 675 10350 3600
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        4950 1425 1800 1425 1800 975 4950 975 4950 1425
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        4575 2025 1200 2025 1200 1575 4575 1575 4575 2025
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        5250 2625 1200 2625 1200 2175 5250 2175 5250 2625
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        2400 3225 1200 3225 1200 2775 2400 2775 2400 3225
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        9750 1425 6600 1425 6600 975 9750 975 9750 1425
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        10350 2025 6975 2025 6975 1575 10350 1575 10350 2025
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        10350 2625 6300 2625 6300 2175 10350 2175 10350 2625
+2 2 0 2 32 7 100 0 -1 0.000 0 0 -1 0 0 5
+        10350 3225 9150 3225 9150 2775 10350 2775 10350 3225
+2 1 0 1 -1 7 100 0 -1 0.000 0 0 -1 0 0 2
+        1200 2025 1050 2025
+4 0 0 100 0 0 24 0.0000 4 330 4155 1200 2475 demonstrate PangoLayout's\001
+4 0 0 100 0 0 24 0.0000 4 255 1260 1200 3075 features.\001
+4 0 0 100 0 0 24 0.0000 4 330 3405 1200 1875 should wrap suitably to\001
+4 1 -1 100 0 16 16 0.0000 4 240 855 525 2175 spacing\001
+4 0 0 100 0 0 24 0.0000 4 255 3270 1800 1275 Here is some text that\001
+4 0 0 100 0 0 24 0.0000 4 255 1260 9150 3075 features.\001
+4 0 0 100 0 0 24 0.0000 4 255 3270 6600 1275 Here is some text that\001
+4 1 -1 100 0 16 16 0.0000 4 180 540 1875 3825 width\001
+4 1 -1 100 0 16 16 0.0000 4 180 540 6825 3825 width\001
+4 1 -1 100 0 16 16 0.0000 4 180 645 10050 525 indent\001
+4 1 -1 100 0 16 16 0.0000 4 180 645 1575 525 indent\001
+4 1 -1 100 0 16 20 0.0000 4 300 1770 9225 4125 Right Aligned\001
+4 1 -1 100 0 16 20 0.0000 4 300 1590 4350 4125 Left Aligned\001
+4 0 0 100 0 0 24 0.0000 4 330 3405 6975 1875 should wrap suitably to\001
+4 0 0 100 0 0 24 0.0000 4 330 4155 6300 2475 demonstrate PangoLayout's\001
diff --git a/docs/layout.gif b/docs/layout.gif
new file mode 100755 (executable)
index 0000000..96bde1f
Binary files /dev/null and b/docs/layout.gif differ
diff --git a/docs/pango-docs.sgml b/docs/pango-docs.sgml
new file mode 100755 (executable)
index 0000000..a3b4761
--- /dev/null
@@ -0,0 +1,138 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY pango-Text-Processing SYSTEM "xml/main.xml">
+<!ENTITY pango-Glyph-Storage SYSTEM "xml/glyphs.xml">
+<!ENTITY pango-Coverage-Maps SYSTEM "xml/coverage-maps.xml">
+<!ENTITY pango-Fonts SYSTEM "xml/fonts.xml">
+<!ENTITY pango-Text-Attributes SYSTEM "xml/text-attributes.xml">
+<!ENTITY pango-Tab-Stops SYSTEM "xml/tab-stops.xml">
+<!ENTITY pango-Layout-Objects SYSTEM "xml/layout.xml">
+<!ENTITY pango-Scripts SYSTEM "xml/scripts.xml">
+<!ENTITY pango-Engines SYSTEM "xml/engines.xml">
+<!ENTITY PangoEngineLang SYSTEM "xml/pango-engine-lang.xml">
+<!ENTITY PangoEngineShape SYSTEM "xml/pango-engine-shape.xml">
+<!ENTITY PangoRenderer SYSTEM "xml/pango-renderer.xml">
+<!ENTITY pango-Modules SYSTEM "xml/modules.xml">
+<!ENTITY pango-X-Fonts-and-Rendering SYSTEM "xml/x-fonts.xml">
+<!ENTITY pango-Win32-Fonts-and-Rendering SYSTEM "xml/win32-fonts.xml">
+<!ENTITY pango-FreeType-Fonts-and-Rendering SYSTEM "xml/freetype-fonts.xml">
+<!ENTITY pango-Xft-Fonts-and-Rendering SYSTEM "xml/xft-fonts.xml">
+<!ENTITY pango-ATSUI-Fonts SYSTEM "xml/atsui-fonts.xml">
+<!ENTITY pangocairo SYSTEM "xml/pangocairo.xml">
+<!ENTITY PangoFcFontMap SYSTEM "xml/pangofc-fontmap.xml">
+<!ENTITY PangoFcFont SYSTEM "xml/pangofc-font.xml">
+<!ENTITY PangoFcDecoder SYSTEM "xml/pangofc-decoder.xml">
+<!ENTITY pango-OpenType-Font-Handling SYSTEM "xml/opentype.xml">
+<!ENTITY pango-Misc-Utils SYSTEM "xml/utils.xml">
+<!ENTITY markup-format SYSTEM "pango_markup.sgml">
+<!ENTITY pango-querymodules SYSTEM "pango-querymodules.xml">
+<!ENTITY pango-Version SYSTEM "xml/pango-version.xml">
+<!ENTITY pango-Vertical-Text SYSTEM "xml/vertical.xml">
+<!ENTITY pango-Bidi-Text SYSTEM "xml/bidi.xml">
+<!ENTITY version SYSTEM "version.xml">
+<!ENTITY pango-tree-index SYSTEM "xml/tree_index.sgml">
+]>
+<book id="index">
+  <bookinfo>
+    <title>Pango Reference Manual</title>
+    <releaseinfo>for Pango &version;</releaseinfo>
+  </bookinfo>
+
+  <chapter id="pango">
+    <title>Basic Pango Interfaces</title>
+    &pango-Text-Processing;
+    &pango-Glyph-Storage;
+    &pango-Fonts;
+    &pango-Text-Attributes;
+    &pango-Tab-Stops;
+    &markup-format;
+    &pango-Layout-Objects;
+    &pango-Scripts;
+    &pango-Bidi-Text;
+    &pango-Vertical-Text;
+  </chapter>
+
+  <chapter id="rendering">
+    <title>Rendering with Pango</title>
+    &pango-Win32-Fonts-and-Rendering;
+    &pango-FreeType-Fonts-and-Rendering;
+    &pango-Xft-Fonts-and-Rendering;
+    &pangocairo;
+    &pango-ATSUI-Fonts;
+    &pango-X-Fonts-and-Rendering;
+  </chapter>
+
+  <chapter id="lowlevel">
+    <title>Low Level Functionality</title>
+    &PangoRenderer;
+    &PangoFcFontMap;
+    &PangoFcFont;
+    &PangoFcDecoder;
+    &pango-OpenType-Font-Handling;
+    &pango-Coverage-Maps;
+    &pango-Engines;
+    &PangoEngineLang;
+    &PangoEngineShape;
+    &pango-Modules;
+    &pango-Misc-Utils;
+    &pango-Version;
+    </chapter>
+
+  <chapter id="tools">
+    <title>Pango Tools</title>
+
+    &pango-querymodules;
+  </chapter>
+
+  <chapter id="pango-hierarchy">
+    <title>Object Hierarchy</title>
+    &pango-tree-index;
+  </chapter>
+
+  <index id="index-all">
+    <title>Index</title>
+  </index>
+  <index id="index-deprecated" role="deprecated">
+    <title>Index of deprecated symbols</title>
+  </index>
+  <index id="index-1.2" role="1.2">
+    <title>Index of new symbols in 1.2</title>
+  </index>
+  <index id="index-1.4" role="1.4">
+    <title>Index of new symbols in 1.4</title>
+  </index>
+  <index id="index-1.6" role="1.6">
+    <title>Index of new symbols in 1.6</title>
+  </index>
+  <index id="index-1.8" role="1.8">
+    <title>Index of new symbols in 1.8</title>
+  </index>
+  <index id="index-1.10" role="1.10">
+    <title>Index of new symbols in 1.10</title>
+  </index>
+  <index id="index-1.12" role="1.12">
+    <title>Index of new symbols in 1.12</title>
+  </index>
+  <index id="index-1.14" role="1.14">
+    <title>Index of new symbols in 1.14</title>
+  </index>
+  <index id="index-1.16" role="1.16">
+    <title>Index of new symbols in 1.16</title>
+  </index>
+  <index id="index-1.18" role="1.18">
+    <title>Index of new symbols in 1.18</title>
+  </index>
+  <index id="index-1.20" role="1.20">
+    <title>Index of new symbols in 1.20</title>
+  </index>
+  <index id="index-1.22" role="1.22">
+    <title>Index of new symbols in 1.22</title>
+  </index>
+  <index id="index-1.24" role="1.24">
+    <title>Index of new symbols in 1.24</title>
+  </index>
+  <index id="index-1.26" role="1.26">
+    <title>Index of new symbols in 1.26</title>
+  </index>
+</book>
diff --git a/docs/pango-overrides.txt b/docs/pango-overrides.txt
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/docs/pango-querymodules.1 b/docs/pango-querymodules.1
new file mode 100755 (executable)
index 0000000..62b0dd6
--- /dev/null
@@ -0,0 +1,47 @@
+'\" t
+.\"     Title: pango-querymodules
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.74.3 <http://docbook.sf.net/>
+.\"      Date: 11/16/2009
+.\"    Manual: [FIXME: manual]
+.\"    Source: [FIXME: source]
+.\"  Language: English
+.\"
+.TH "PANGO\-QUERYMODULES" "1" "11/16/2009" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pango-querymodules \- Module registration utility
+.SH "SYNOPSIS"
+.HP \w'\fBpango\-querymodules\fR\ 'u
+\fBpango\-querymodules\fR [module...]
+.SH "DESCRIPTION"
+.PP
+
+\fBpango\-querymodules\fR
+collects information about loadable modules for Pango and writes it to
+stdout\&.
+.PP
+If called without arguments, it looks for modules in the Pango module path\&.
+.PP
+If called with arguments, it looks for the specified modules\&. The arguments may be absolute or relative paths\&.
+.SH "ENVIRONMENT"
+.PP
+The Pango module path is specified by the key
+Pango/ModulesPath
+in the Pango config database, which is read from
+\fIsysconfdir\fR/pango/pangorc,
+~/\&.pangorc
+and the file specified in the environment variable
+\fBPANGO_RC_FILE\fR\&.
+.SH "BUGS"
+.PP
+None known yet\&.
diff --git a/docs/pango-querymodules.xml b/docs/pango-querymodules.xml
new file mode 100755 (executable)
index 0000000..ee4030b
--- /dev/null
@@ -0,0 +1,53 @@
+<refentry id="pango-querymodules">
+
+<refmeta>
+<refentrytitle>pango-querymodules</refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname>pango-querymodules</refname>
+<refpurpose>Module registration utility</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>pango-querymodules</command>
+<arg choice="opt" rep="repeat">module</arg>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1 id="Description"><title>Description</title>
+<para>
+<command>pango-querymodules</command> collects information about loadable 
+modules for Pango and writes it to <filename>stdout</filename>. 
+</para>
+<para>
+If called without arguments, it looks for modules in the Pango module path.  
+</para>
+<para>
+If called with arguments, it looks for the specified modules. The arguments
+may be absolute or relative paths.
+</para>
+</refsect1>
+
+<refsect1 id="Environment"><title>Environment</title>
+<para>
+The Pango module path is specified by the key
+<literal>Pango/ModulesPath</literal> in the Pango config database, which is
+read from
+      <filename><replaceable>sysconfdir</replaceable>/pango/pangorc</filename>,
+      <filename>~/.pangorc</filename> and the file specified in the environment
+      variable <envar>PANGO_RC_FILE</envar>. 
+</para>
+</refsect1>
+
+<refsect1 id="Bugs"><title>Bugs</title>
+<para>
+None known yet.
+</para>
+</refsect1>
+
+</refentry>
+
+
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
new file mode 100755 (executable)
index 0000000..e4cfbc9
--- /dev/null
@@ -0,0 +1,1132 @@
+<SECTION>
+<TITLE>Text Processing</TITLE>
+<FILE>main</FILE>
+<SUBSECTION>
+PangoContext
+PangoItem
+PangoAnalysis
+PANGO_ANALYSIS_FLAG_CENTERED_BASELINE
+PANGO_TYPE_DIRECTION
+<SUBSECTION>
+pango_itemize
+pango_itemize_with_base_dir
+pango_item_free
+pango_item_copy
+pango_item_new
+pango_item_split
+pango_reorder_items
+<SUBSECTION>
+pango_context_new
+pango_context_set_font_map
+pango_context_get_font_map
+pango_context_get_font_description
+pango_context_set_font_description
+pango_context_get_language
+pango_context_set_language
+pango_context_get_base_dir
+pango_context_set_base_dir
+pango_context_get_base_gravity
+pango_context_set_base_gravity
+pango_context_get_gravity
+pango_context_get_gravity_hint
+pango_context_set_gravity_hint
+pango_context_get_matrix
+pango_context_set_matrix
+pango_context_load_font
+pango_context_load_fontset
+pango_context_get_metrics
+pango_context_list_families
+<SUBSECTION Standard>
+PANGO_TYPE_CONTEXT
+PangoContextClass
+PANGO_CONTEXT
+PANGO_CONTEXT_CLASS
+PANGO_IS_CONTEXT
+PANGO_IS_CONTEXT_CLASS
+PANGO_CONTEXT_GET_CLASS
+PANGO_TYPE_ITEM
+<SUBSECTION>
+pango_break
+pango_get_log_attrs
+pango_find_paragraph_boundary
+pango_default_break
+PangoLogAttr
+<SUBSECTION>
+pango_shape
+
+<SUBSECTION Private>
+pango_context_get_type
+pango_item_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Glyph Storage</TITLE>
+<FILE>glyphs</FILE>
+PANGO_SCALE
+PANGO_PIXELS
+PANGO_PIXELS_FLOOR
+PANGO_PIXELS_CEIL
+PANGO_UNITS_ROUND
+pango_units_to_double
+pango_units_from_double
+PangoRectangle
+PANGO_ASCENT
+PANGO_DESCENT
+PANGO_LBEARING
+PANGO_RBEARING
+pango_extents_to_pixels
+PangoMatrix
+PANGO_TYPE_MATRIX
+PANGO_MATRIX_INIT
+pango_matrix_copy
+pango_matrix_free
+pango_matrix_translate
+pango_matrix_scale
+pango_matrix_rotate
+pango_matrix_concat
+pango_matrix_transform_point
+pango_matrix_transform_distance
+pango_matrix_transform_rectangle
+pango_matrix_transform_pixel_rectangle
+pango_matrix_get_font_scale_factor
+PangoGlyph
+PANGO_GLYPH_EMPTY
+PANGO_GLYPH_INVALID_INPUT
+PANGO_GLYPH_UNKNOWN_FLAG
+PANGO_GET_UNKNOWN_GLYPH
+PangoGlyphInfo
+PangoGlyphGeometry
+PangoGlyphUnit
+PangoGlyphVisAttr
+PangoGlyphString
+PangoGlyphItem
+PangoGlyphItemIter
+PANGO_TYPE_GLYPH_STRING
+pango_glyph_string_new
+pango_glyph_string_copy
+pango_glyph_string_set_size
+pango_glyph_string_free
+pango_glyph_string_extents
+pango_glyph_string_extents_range
+pango_glyph_string_get_width
+pango_glyph_string_index_to_x
+pango_glyph_string_x_to_index
+pango_glyph_string_get_logical_widths
+PANGO_TYPE_GLYPH_ITEM
+pango_glyph_item_copy
+pango_glyph_item_free
+pango_glyph_item_split
+pango_glyph_item_apply_attrs
+pango_glyph_item_letter_space
+pango_glyph_item_get_logical_widths
+PANGO_TYPE_GLYPH_ITEM_ITER
+pango_glyph_item_iter_copy
+pango_glyph_item_iter_free
+pango_glyph_item_iter_init_start
+pango_glyph_item_iter_init_end
+pango_glyph_item_iter_next_cluster
+pango_glyph_item_iter_prev_cluster
+
+<SUBSECTION Private>
+pango_glyph_string_get_type
+pango_glyph_item_get_type
+pango_glyph_item_iter_get_type
+pango_matrix_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Coverage Maps</TITLE>
+<FILE>coverage-maps</FILE>
+PangoCoverageLevel
+PANGO_TYPE_COVERAGE_LEVEL
+PangoCoverage
+<SUBSECTION>
+pango_coverage_new
+pango_coverage_ref
+pango_coverage_unref
+pango_coverage_copy
+pango_coverage_get
+pango_coverage_max
+pango_coverage_set
+pango_coverage_to_bytes
+pango_coverage_from_bytes
+
+<SUBSECTION Private>
+pango_coverage_level_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Fonts</TITLE>
+<FILE>fonts</FILE>
+PangoFontDescription
+PANGO_TYPE_FONT_DESCRIPTION
+PangoStyle
+PANGO_TYPE_STYLE
+PangoWeight
+PANGO_TYPE_WEIGHT
+PangoVariant
+PANGO_TYPE_VARIANT
+PangoStretch
+PANGO_TYPE_STRETCH
+PangoFontMask
+PANGO_TYPE_FONT_MASK
+pango_font_description_new
+pango_font_description_copy
+pango_font_description_copy_static
+pango_font_description_hash
+pango_font_description_equal
+pango_font_description_free
+pango_font_descriptions_free
+pango_font_description_set_family
+pango_font_description_set_family_static
+pango_font_description_get_family
+pango_font_description_set_style
+pango_font_description_get_style
+pango_font_description_set_variant
+pango_font_description_get_variant
+pango_font_description_set_weight
+pango_font_description_get_weight
+pango_font_description_set_stretch
+pango_font_description_get_stretch
+pango_font_description_set_size
+pango_font_description_get_size
+pango_font_description_set_absolute_size
+pango_font_description_get_size_is_absolute
+pango_font_description_set_gravity
+pango_font_description_get_gravity
+pango_font_description_get_set_fields
+pango_font_description_unset_fields
+pango_font_description_merge
+pango_font_description_merge_static
+pango_font_description_better_match
+pango_font_description_from_string
+pango_font_description_to_string
+pango_font_description_to_filename
+<SUBSECTION>
+PangoFontMetrics
+PANGO_TYPE_FONT_METRICS
+pango_font_metrics_ref
+pango_font_metrics_unref
+pango_font_metrics_get_ascent
+pango_font_metrics_get_descent
+pango_font_metrics_get_approximate_char_width
+pango_font_metrics_get_approximate_digit_width
+pango_font_metrics_get_underline_thickness
+pango_font_metrics_get_underline_position
+pango_font_metrics_get_strikethrough_thickness
+pango_font_metrics_get_strikethrough_position
+<SUBSECTION>
+PangoFont
+PANGO_TYPE_FONT
+PANGO_FONT
+PANGO_IS_FONT
+pango_font_find_shaper
+pango_font_describe
+pango_font_describe_with_absolute_size
+pango_font_get_coverage
+pango_font_get_glyph_extents
+pango_font_get_metrics
+pango_font_get_font_map
+<SUBSECTION>
+PangoFontFamily
+PANGO_TYPE_FONT_FAMILY
+PANGO_FONT_FAMILY
+PANGO_IS_FONT_FAMILY
+pango_font_family_get_name
+pango_font_family_is_monospace
+pango_font_family_list_faces
+<SUBSECTION>
+PangoFontFace
+PANGO_TYPE_FONT_FACE
+PANGO_FONT_FACE
+PANGO_IS_FONT_FACE
+pango_font_face_get_face_name
+pango_font_face_list_sizes
+pango_font_face_describe
+pango_font_face_is_synthesized
+<SUBSECTION>
+PangoFontMap
+PANGO_TYPE_FONT_MAP
+PANGO_FONT_MAP
+PANGO_IS_FONT_MAP
+PangoFontMapClass
+PANGO_FONT_MAP_CLASS
+PANGO_IS_FONT_MAP_CLASS
+PANGO_FONT_MAP_GET_CLASS
+pango_font_map_create_context
+pango_font_map_load_font
+pango_font_map_load_fontset
+pango_font_map_list_families
+pango_font_map_get_shape_engine_type
+<SUBSECTION>
+PangoFontset
+PANGO_TYPE_FONTSET
+PangoFontsetClass
+pango_fontset_get_font
+pango_fontset_get_metrics
+PangoFontsetForeachFunc
+pango_fontset_foreach
+PangoFontsetSimple
+PANGO_TYPE_FONTSET_SIMPLE
+pango_fontset_simple_new
+pango_fontset_simple_append
+pango_fontset_simple_size
+
+<SUBSECTION Standard>
+PANGO_FONT_FACE_CLASS
+PANGO_IS_FONT_CLASS
+PANGO_FONT_FACE_GET_CLASS
+PangoFontFamilyClass
+PangoFontFaceClass
+PANGO_FONT_GET_CLASS
+PANGO_FONT_CLASS
+PANGO_IS_FONT_FAMILY_CLASS
+PangoFontClass
+PANGO_FONT_FAMILY_GET_CLASS
+PANGO_FONT_FAMILY_CLASS
+PANGO_IS_FONT_FACE_CLASS
+PANGO_FONTSET
+PANGO_IS_FONTSET
+PANGO_FONTSET_CLASS
+PANGO_IS_FONTSET_CLASS
+PANGO_FONTSET_GET_CLASS
+PANGO_FONTSET_SIMPLE
+PANGO_IS_FONTSET_SIMPLE
+PangoFontsetSimpleClass
+
+<SUBSECTION Private>
+pango_font_metrics_new
+pango_font_get_type
+pango_stretch_get_type
+pango_style_get_type
+pango_variant_get_type
+pango_weight_get_type
+pango_font_mask_get_type
+pango_font_description_get_type
+pango_font_map_get_type
+pango_font_face_get_type
+pango_font_family_get_type
+pango_font_metrics_get_type
+pango_fontset_get_type
+pango_fontset_simple_get_type
+PANGO_UNKNOWN_GLYPH_WIDTH
+PANGO_UNKNOWN_GLYPH_HEIGHT
+</SECTION>
+
+<SECTION>
+<TITLE>Text Attributes</TITLE>
+<FILE>text-attributes</FILE>
+PangoAttrType
+PANGO_TYPE_ATTR_TYPE
+PangoAttrClass
+PangoAttribute
+PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING
+PANGO_ATTR_INDEX_TO_TEXT_END
+PangoAttrString
+PangoAttrLanguage
+PangoAttrColor
+PangoAttrInt
+PangoAttrFloat
+PangoAttrFontDesc
+PangoAttrShape
+PangoAttrSize
+pango_parse_markup
+pango_attr_type_register
+pango_attr_type_get_name
+pango_attribute_init
+pango_attribute_copy
+pango_attribute_equal
+pango_attribute_destroy
+<SUBSECTION>
+pango_attr_language_new
+pango_attr_family_new
+pango_attr_style_new
+pango_attr_variant_new
+pango_attr_stretch_new
+pango_attr_weight_new
+pango_attr_size_new
+pango_attr_size_new_absolute
+pango_attr_font_desc_new
+pango_attr_foreground_new
+pango_attr_background_new
+pango_attr_strikethrough_new
+pango_attr_strikethrough_color_new
+pango_attr_underline_new
+pango_attr_underline_color_new
+PangoUnderline
+PANGO_TYPE_UNDERLINE
+pango_attr_shape_new
+pango_attr_shape_new_with_data
+PangoAttrDataCopyFunc
+pango_attr_scale_new
+PANGO_SCALE_XX_SMALL
+PANGO_SCALE_X_SMALL
+PANGO_SCALE_SMALL
+PANGO_SCALE_MEDIUM
+PANGO_SCALE_LARGE
+PANGO_SCALE_X_LARGE
+PANGO_SCALE_XX_LARGE
+pango_attr_rise_new
+pango_attr_letter_spacing_new
+pango_attr_fallback_new
+pango_attr_gravity_new
+pango_attr_gravity_hint_new
+PangoColor
+PANGO_TYPE_COLOR
+pango_color_parse
+pango_color_copy
+pango_color_free
+pango_color_to_string
+<SUBSECTION>
+PangoAttrList
+PANGO_TYPE_ATTR_LIST
+pango_attr_list_new
+pango_attr_list_ref
+pango_attr_list_unref
+pango_attr_list_copy
+pango_attr_list_insert
+pango_attr_list_insert_before
+pango_attr_list_change
+pango_attr_list_splice
+pango_attr_list_filter
+PangoAttrFilterFunc
+pango_attr_list_get_iterator
+PangoAttrIterator
+pango_attr_iterator_copy
+pango_attr_iterator_next
+pango_attr_iterator_range
+pango_attr_iterator_get
+pango_attr_iterator_get_font
+pango_attr_iterator_get_attrs
+pango_attr_iterator_destroy
+<SUBSECTION Private>
+pango_attr_type_get_type
+pango_attr_list_get_type
+pango_underline_get_type
+pango_color_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Tab Stops</TITLE>
+<FILE>tab-stops</FILE>
+PangoTabArray
+PANGO_TYPE_TAB_ARRAY
+PangoTabAlign
+PANGO_TYPE_TAB_ALIGN
+pango_tab_array_new
+pango_tab_array_new_with_positions
+pango_tab_array_copy
+pango_tab_array_free
+pango_tab_array_get_size
+pango_tab_array_resize
+pango_tab_array_set_tab
+pango_tab_array_get_tab
+pango_tab_array_get_tabs
+pango_tab_array_get_positions_in_pixels
+
+<SUBSECTION Private>
+pango_tab_align_get_type
+pango_tab_array_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Layout Objects</TITLE>
+<FILE>layout</FILE>
+PangoLayout
+PangoLayoutIter
+pango_layout_new
+pango_layout_copy
+
+pango_layout_get_context
+pango_layout_context_changed
+
+pango_layout_set_text
+pango_layout_get_text
+pango_layout_set_markup
+pango_layout_set_markup_with_accel
+pango_layout_set_attributes
+pango_layout_get_attributes
+pango_layout_set_font_description
+pango_layout_get_font_description
+pango_layout_set_width
+pango_layout_get_width
+pango_layout_set_height
+pango_layout_get_height
+pango_layout_set_wrap
+pango_layout_get_wrap
+pango_layout_is_wrapped
+PangoWrapMode
+PANGO_TYPE_WRAP_MODE
+pango_layout_set_ellipsize
+pango_layout_get_ellipsize
+pango_layout_is_ellipsized
+PangoEllipsizeMode
+PANGO_TYPE_ELLIPSIZE_MODE
+pango_layout_set_indent
+pango_layout_get_indent
+pango_layout_get_spacing
+pango_layout_set_spacing
+pango_layout_set_justify
+pango_layout_get_justify
+pango_layout_set_auto_dir
+pango_layout_get_auto_dir
+pango_layout_set_alignment
+pango_layout_get_alignment
+pango_layout_set_tabs
+pango_layout_get_tabs
+pango_layout_set_single_paragraph_mode
+pango_layout_get_single_paragraph_mode
+PangoAlignment
+PANGO_TYPE_ALIGNMENT
+
+pango_layout_get_unknown_glyphs_count
+pango_layout_get_log_attrs
+
+pango_layout_index_to_pos
+pango_layout_index_to_line_x
+pango_layout_xy_to_index
+pango_layout_get_cursor_pos
+pango_layout_move_cursor_visually
+
+pango_layout_get_extents
+pango_layout_get_pixel_extents
+pango_layout_get_size
+pango_layout_get_pixel_size
+pango_layout_get_baseline
+pango_layout_get_line_count
+pango_layout_get_line
+pango_layout_get_line_readonly
+pango_layout_get_lines
+pango_layout_get_lines_readonly
+
+pango_layout_get_iter
+pango_layout_iter_copy
+pango_layout_iter_free
+pango_layout_iter_next_run
+pango_layout_iter_next_char
+pango_layout_iter_next_cluster
+pango_layout_iter_next_line
+pango_layout_iter_at_last_line
+pango_layout_iter_get_index
+pango_layout_iter_get_baseline
+pango_layout_iter_get_run
+pango_layout_iter_get_run_readonly
+pango_layout_iter_get_line
+pango_layout_iter_get_line_readonly
+pango_layout_iter_get_layout
+pango_layout_iter_get_char_extents
+pango_layout_iter_get_cluster_extents
+pango_layout_iter_get_run_extents
+pango_layout_iter_get_line_yrange
+pango_layout_iter_get_line_extents
+pango_layout_iter_get_layout_extents
+
+<SUBSECTION>
+PangoLayoutLine
+PangoLayoutRun
+
+pango_layout_line_ref
+pango_layout_line_unref
+pango_layout_line_get_extents
+pango_layout_line_get_pixel_extents
+pango_layout_line_index_to_x
+pango_layout_line_x_to_index
+pango_layout_line_get_x_ranges
+
+<SUBSECTION Standard>
+PANGO_TYPE_LAYOUT
+PangoLayoutClass
+PANGO_LAYOUT
+PANGO_IS_LAYOUT
+PANGO_LAYOUT_CLASS
+PANGO_IS_LAYOUT_CLASS
+PANGO_LAYOUT_GET_CLASS
+PANGO_TYPE_LAYOUT_ITER
+PANGO_TYPE_LAYOUT_LINE
+
+<SUBSECTION Private>
+pango_layout_get_type
+pango_layout_iter_get_type
+pango_layout_line_get_type
+pango_alignment_get_type
+pango_wrap_mode_get_type
+pango_ellipsize_mode_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Scripts and Languages</TITLE>
+<FILE>scripts</FILE>
+PangoScript
+PANGO_TYPE_SCRIPT
+PangoScriptIter
+pango_script_for_unichar
+pango_script_get_sample_language
+pango_script_iter_new
+pango_script_iter_get_range
+pango_script_iter_next
+pango_script_iter_free
+PangoLanguage
+PANGO_TYPE_LANGUAGE
+pango_language_from_string
+pango_language_to_string
+pango_language_matches
+pango_language_includes_script
+pango_language_get_scripts
+pango_language_get_default
+pango_language_get_sample_string
+<SUBSECTION Private>
+pango_script_get_type
+pango_language_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Engines</TITLE>
+<FILE>engines</FILE>
+PangoEngineInfo
+PangoEngineScriptInfo
+PangoEngine
+PangoEngineClass
+PANGO_RENDER_TYPE_NONE
+script_engine_list
+script_engine_init
+script_engine_exit
+script_engine_create
+<SUBSECTION Standard>
+PANGO_ENGINE
+PANGO_IS_ENGINE
+PANGO_TYPE_ENGINE
+PANGO_ENGINE_CLASS
+PANGO_IS_ENGINE_CLASS
+PANGO_ENGINE_GET_CLASS
+<SUBSECTION Private>
+pango_engine_get_type
+PANGO_MODULE_ENTRY
+PANGO_ENGINE_DEFINE_TYPE
+</SECTION>
+
+<SECTION>
+<TITLE>PangoEngineLang</TITLE>
+<FILE>pango-engine-lang</FILE>
+PangoEngineLang
+PangoEngineLangClass
+PANGO_ENGINE_TYPE_LANG
+PANGO_ENGINE_LANG_DEFINE_TYPE
+<SUBSECTION Standard>
+PANGO_ENGINE_LANG
+PANGO_IS_ENGINE_LANG
+PANGO_TYPE_ENGINE_LANG
+PANGO_ENGINE_LANG_CLASS
+PANGO_IS_ENGINE_LANG_CLASS
+PANGO_ENGINE_LANG_GET_CLASS
+<SUBSECTION Private>
+pango_engine_lang_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>PangoEngineShape</TITLE>
+<FILE>pango-engine-shape</FILE>
+PangoEngineShape
+PangoEngineShapeClass
+PANGO_ENGINE_TYPE_SHAPE
+PANGO_ENGINE_SHAPE_DEFINE_TYPE
+<SUBSECTION Standard>
+PANGO_ENGINE_SHAPE
+PANGO_IS_ENGINE_SHAPE
+PANGO_TYPE_ENGINE_SHAPE
+PANGO_ENGINE_SHAPE_CLASS
+PANGO_IS_ENGINE_SHAPE_CLASS
+PANGO_ENGINE_SHAPE_GET_CLASS
+<SUBSECTION Private>
+pango_engine_shape_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Modules</TITLE>
+<FILE>modules</FILE>
+PangoIncludedModule
+PangoMap
+PangoMapEntry
+pango_find_map
+pango_map_get_engine
+pango_map_get_engines
+pango_module_register
+</SECTION>
+
+<SECTION>
+<FILE>pango-renderer</FILE>
+PangoRenderer
+PangoRenderPart
+PANGO_TYPE_RENDER_PART
+PangoRendererClass
+<TITLE>PangoRenderer</TITLE>
+pango_renderer_draw_layout
+pango_renderer_draw_layout_line
+pango_renderer_draw_glyphs
+pango_renderer_draw_glyph_item
+pango_renderer_draw_rectangle
+pango_renderer_draw_error_underline
+pango_renderer_draw_trapezoid
+pango_renderer_draw_glyph
+pango_renderer_activate
+pango_renderer_deactivate
+pango_renderer_part_changed
+pango_renderer_set_color
+pango_renderer_get_color
+pango_renderer_set_matrix
+pango_renderer_get_matrix
+pango_renderer_get_layout
+pango_renderer_get_layout_line
+<SUBSECTION Standard>
+PANGO_RENDERER
+PANGO_IS_RENDERER
+PANGO_TYPE_RENDERER
+pango_renderer_get_type
+PANGO_RENDERER_CLASS
+PANGO_IS_RENDERER_CLASS
+PANGO_RENDERER_GET_CLASS
+<SUBSECTION Private>
+pango_render_part_get_type
+PangoRendererPrivate
+</SECTION>
+
+<SECTION>
+<TITLE>X Fonts and Rendering</TITLE>
+<FILE>x-fonts</FILE>
+PANGO_RENDER_TYPE_X
+pango_x_get_context
+pango_x_context_set_funcs
+PangoGetGCFunc
+PangoFreeGCFunc
+pango_x_render
+pango_x_render_layout_line
+pango_x_render_layout
+PangoXSubfont
+PANGO_X_MAKE_GLYPH
+PANGO_X_GLYPH_SUBFONT
+PANGO_X_GLYPH_INDEX
+pango_x_load_font
+pango_x_get_unknown_glyph
+pango_x_has_glyph
+pango_x_list_subfonts
+pango_x_font_map_for_display
+pango_x_shutdown_display
+pango_x_font_map_get_font_cache
+pango_x_font_subfont_xlfd
+pango_x_find_first_subfont
+pango_x_font_get_unknown_glyph
+pango_x_apply_ligatures
+pango_x_fallback_shape
+PangoXFontCache
+pango_x_font_cache_new
+pango_x_font_cache_free
+pango_x_font_cache_load
+pango_x_font_cache_unload
+</SECTION>
+
+<SECTION>
+<TITLE>Win32 Fonts and Rendering</TITLE>
+<FILE>win32-fonts</FILE>
+PANGO_RENDER_TYPE_WIN32
+pango_win32_get_context
+pango_win32_render
+pango_win32_render_transformed
+pango_win32_render_layout_line
+pango_win32_render_layout
+pango_win32_get_unknown_glyph
+pango_win32_font_get_glyph_index
+pango_win32_font_select_font
+pango_win32_font_done_font
+pango_win32_font_get_metrics_factor
+pango_win32_get_debug_flag
+pango_win32_get_dc
+PangoWin32FontCache
+pango_win32_font_cache_new
+pango_win32_font_cache_free
+pango_win32_font_cache_load
+pango_win32_font_cache_loadw
+pango_win32_font_cache_unload
+pango_win32_font_map_for_display
+pango_win32_shutdown_display
+pango_win32_font_map_get_font_cache
+pango_win32_font_logfont
+pango_win32_font_logfontw
+pango_win32_font_description_from_logfont
+pango_win32_font_description_from_logfontw
+
+<SUBSECTION Private>
+STRICT
+</SECTION>
+
+<SECTION>
+<TITLE>FreeType Fonts and Rendering</TITLE>
+<FILE>freetype-fonts</FILE>
+PangoFT2FontMap
+PANGO_RENDER_TYPE_FT2
+pango_ft2_font_map_new
+pango_ft2_font_map_set_resolution
+pango_ft2_font_map_create_context
+PangoFT2SubstituteFunc
+pango_ft2_font_map_set_default_substitute
+pango_ft2_font_map_substitute_changed
+pango_ft2_get_context
+pango_ft2_render
+pango_ft2_render_transformed
+pango_ft2_render_layout_line
+pango_ft2_render_layout_line_subpixel
+pango_ft2_render_layout
+pango_ft2_render_layout_subpixel
+pango_ft2_get_unknown_glyph
+pango_ft2_font_get_kerning
+pango_ft2_font_get_face
+pango_ft2_font_get_coverage
+pango_ft2_font_map_for_display
+pango_ft2_shutdown_display
+<SUBSECTION Standard>
+PANGO_TYPE_FT2_FONT_MAP
+PANGO_FT2_FONT_MAP
+PANGO_FT2_IS_FONT_MAP
+<SUBSECTION Private>
+pango_ft2_font_map_get_type
+STRICT
+</SECTION>
+
+<SECTION>
+<TITLE>Xft Fonts and Rendering</TITLE>
+<FILE>xft-fonts</FILE>
+PangoXftFont
+PangoXftFontMap
+PANGO_RENDER_TYPE_XFT
+pango_xft_get_context
+pango_xft_get_font_map
+pango_xft_set_default_substitute
+PangoXftSubstituteFunc
+pango_xft_substitute_changed
+pango_xft_shutdown_display
+pango_xft_font_get_font
+pango_xft_font_get_display
+pango_xft_font_has_char
+pango_xft_font_lock_face
+pango_xft_font_unlock_face
+pango_xft_font_get_glyph
+pango_xft_font_get_unknown_glyph
+PangoXftRenderer
+PangoXftRendererClass
+
+pango_xft_renderer_new
+pango_xft_renderer_set_draw
+pango_xft_renderer_set_default_color
+pango_xft_render
+pango_xft_picture_render
+pango_xft_render_transformed
+pango_xft_render_layout_line
+pango_xft_render_layout
+<SUBSECTION Standard>
+PANGO_TYPE_XFT_FONT
+PANGO_XFT_FONT
+PANGO_XFT_IS_FONT
+PANGO_TYPE_XFT_FONT_MAP
+PANGO_XFT_FONT_MAP
+PANGO_XFT_IS_FONT_MAP
+PANGO_XFT_RENDERER
+PANGO_IS_XFT_RENDERER
+PANGO_TYPE_XFT_RENDERER
+PANGO_XFT_RENDERER_CLASS
+PANGO_IS_XFT_RENDERER_CLASS
+PANGO_XFT_RENDERER_GET_CLASS
+
+<SUBSECTION Private>
+PangoXftRendererPrivate
+pango_xft_font_get_type
+pango_xft_font_map_get_type
+pango_xft_renderer_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Cairo Rendering</TITLE>
+<FILE>pangocairo</FILE>
+PangoCairoFont
+PangoCairoFontMap
+pango_cairo_font_map_get_default
+pango_cairo_font_map_set_default
+pango_cairo_font_map_new
+pango_cairo_font_map_new_for_font_type
+pango_cairo_font_map_get_font_type
+pango_cairo_font_map_set_resolution
+pango_cairo_font_map_get_resolution
+pango_cairo_font_map_create_context
+pango_cairo_font_get_scaled_font
+pango_cairo_context_set_resolution
+pango_cairo_context_get_resolution
+pango_cairo_context_set_font_options
+pango_cairo_context_get_font_options
+PangoCairoShapeRendererFunc
+pango_cairo_context_set_shape_renderer
+pango_cairo_context_get_shape_renderer
+pango_cairo_create_context
+pango_cairo_update_context
+pango_cairo_create_layout
+pango_cairo_update_layout
+pango_cairo_show_glyph_string
+pango_cairo_show_glyph_item
+pango_cairo_show_layout_line
+pango_cairo_show_layout
+pango_cairo_show_error_underline
+pango_cairo_glyph_string_path
+pango_cairo_layout_line_path
+pango_cairo_layout_path
+pango_cairo_error_underline_path
+<SUBSECTION Standard>
+PANGO_CAIRO_FONT
+PANGO_CAIRO_FONT_MAP
+PANGO_IS_CAIRO_FONT
+PANGO_IS_CAIRO_FONT_MAP
+PANGO_TYPE_CAIRO_FONT
+PANGO_TYPE_CAIRO_FONT_MAP
+pango_cairo_font_get_type
+pango_cairo_font_map_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>ATSUI Fonts</TITLE>
+<FILE>atsui-fonts</FILE>
+PANGO_RENDER_TYPE_ATSUI
+pango_atsui_font_get_cgfont
+<SUBSECTION Standard>
+PANGO_ATSUI_FONT
+PANGO_ATSUI_FONT_CLASS
+PANGO_ATSUI_FONT_GET_CLASS
+PANGO_CAIRO_ATSUI_FONT
+PANGO_CAIRO_ATSUI_FONT_CLASS
+PANGO_CAIRO_ATSUI_FONT_GET_CLASS
+PANGO_IS_ATSUI_FONT
+PANGO_IS_ATSUI_FONT_CLASS
+PANGO_IS_CAIRO_ATSUI_FONT_CLASS
+PANGO_TYPE_ATSUI_FONT
+PANGO_TYPE_CAIRO_ATSUI_FONT
+PangoATSUIFont
+PangoATSUIFontClass
+PangoATSUIFontPrivate
+PangoCairoATSUIFont
+PangoCairoATSUIFontClass
+pango_atsui_font_get_type
+pango_cairo_atsui_font_get_type
+</SECTION>
+
+<SECTION>
+<FILE>pangofc-fontmap</FILE>
+<TITLE>PangoFcFontMap</TITLE>
+PangoFcFontMap
+PangoFcFontMapClass
+pango_fc_font_map_create_context
+PangoFcDecoderFindFunc
+pango_fc_font_map_add_decoder_find_func
+pango_fc_font_map_find_decoder
+pango_fc_font_map_cache_clear
+pango_fc_font_map_shutdown
+pango_fc_font_description_from_pattern
+PANGO_FC_GRAVITY
+PANGO_FC_VERSION
+PANGO_FC_PRGNAME
+<SUBSECTION Standard>
+PANGO_FC_FONT_MAP
+PANGO_IS_FC_FONT_MAP
+PANGO_TYPE_FC_FONT_MAP
+PANGO_FC_FONT_MAP_CLASS
+PANGO_IS_FC_FONT_MAP_CLASS
+PANGO_FC_FONT_MAP_GET_CLASS
+
+<SUBSECTION>
+PangoFcFontsetKey
+pango_fc_fontset_key_get_context_key
+pango_fc_fontset_key_get_description
+pango_fc_fontset_key_get_language
+pango_fc_fontset_key_get_matrix
+pango_fc_fontset_key_get_absolute_size
+pango_fc_fontset_key_get_resolution
+PangoFcFontKey
+pango_fc_font_key_get_context_key
+pango_fc_font_key_get_matrix
+pango_fc_font_key_get_pattern
+
+<SUBSECTION Private>
+PangoFcFontMapPrivate
+pango_fc_font_map_get_type
+</SECTION>
+
+
+<SECTION>
+<FILE>pangofc-font</FILE>
+<TITLE>PangoFcFont</TITLE>
+PangoFcFont
+PangoFcFontClass
+PANGO_RENDER_TYPE_FC
+pango_fc_font_lock_face
+pango_fc_font_unlock_face
+pango_fc_font_has_char
+pango_fc_font_get_glyph
+pango_fc_font_get_unknown_glyph
+pango_fc_font_kern_glyphs
+<SUBSECTION Standard>
+PANGO_FC_FONT
+PANGO_IS_FC_FONT
+PANGO_TYPE_FC_FONT
+PANGO_FC_FONT_CLASS
+PANGO_IS_FC_FONT_CLASS
+PANGO_FC_FONT_GET_CLASS
+<SUBSECTION Private>
+pango_fc_font_get_type
+</SECTION>
+
+<SECTION>
+<FILE>pangofc-decoder</FILE>
+<TITLE>PangoFcDecoder</TITLE>
+PangoFcDecoder
+PangoFcDecoderClass
+pango_fc_decoder_get_charset
+pango_fc_decoder_get_glyph
+<SUBSECTION Standard>
+PANGO_FC_DECODER
+PANGO_IS_FC_DECODER
+PANGO_TYPE_FC_DECODER
+pango_fc_decoder_get_type
+PANGO_FC_DECODER_CLASS
+PANGO_IS_FC_DECODER_CLASS
+PANGO_FC_DECODER_GET_CLASS
+</SECTION>
+
+<SECTION>
+<TITLE>OpenType Font Handling</TITLE>
+<FILE>opentype</FILE>
+PangoOTTag
+PangoOTInfo
+PangoOTBuffer
+PangoOTGlyph
+PangoOTRuleset
+PangoOTRulesetDescription
+PangoOTTableType
+PangoOTFeatureMap
+PANGO_OT_TAG_MAKE
+PANGO_OT_TAG_MAKE_FROM_STRING
+PANGO_OT_ALL_GLYPHS
+PANGO_OT_NO_FEATURE
+PANGO_OT_NO_SCRIPT
+PANGO_OT_DEFAULT_LANGUAGE
+PANGO_OT_TAG_DEFAULT_LANGUAGE
+PANGO_OT_TAG_DEFAULT_SCRIPT
+pango_ot_info_get
+pango_ot_info_find_script
+pango_ot_info_find_language
+pango_ot_info_find_feature
+pango_ot_info_list_scripts
+pango_ot_info_list_languages
+pango_ot_info_list_features
+pango_ot_buffer_new
+pango_ot_buffer_destroy
+pango_ot_buffer_clear
+pango_ot_buffer_add_glyph
+pango_ot_buffer_set_rtl
+pango_ot_buffer_set_zero_width_marks
+pango_ot_buffer_get_glyphs
+pango_ot_buffer_output
+pango_ot_ruleset_get_for_description
+pango_ot_ruleset_new
+pango_ot_ruleset_new_for
+pango_ot_ruleset_new_from_description
+pango_ot_ruleset_add_feature
+pango_ot_ruleset_maybe_add_feature
+pango_ot_ruleset_maybe_add_features
+pango_ot_ruleset_get_feature_count
+pango_ot_ruleset_substitute
+pango_ot_ruleset_position
+pango_ot_ruleset_description_copy
+pango_ot_ruleset_description_equal
+pango_ot_ruleset_description_free
+pango_ot_ruleset_description_hash
+pango_ot_tag_from_language
+pango_ot_tag_from_script
+pango_ot_tag_to_language
+pango_ot_tag_to_script
+
+<SUBSECTION Standard>
+PANGO_IS_OT_INFO
+PANGO_IS_OT_RULESET
+PANGO_OT_INFO
+PANGO_OT_RULESET
+PANGO_TYPE_OT_INFO
+PANGO_TYPE_OT_RULESET
+pango_ot_info_get_type
+pango_ot_ruleset_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Miscellaneous Utilities</TITLE>
+<FILE>utils</FILE>
+pango_split_file_list
+pango_trim_string
+pango_read_line
+pango_skip_space
+pango_scan_word
+pango_scan_string
+pango_scan_int
+pango_config_key_get
+pango_lookup_aliases
+pango_parse_enum
+pango_parse_style
+pango_parse_variant
+pango_parse_weight
+pango_parse_stretch
+pango_get_sysconf_subdirectory
+pango_get_lib_subdirectory
+pango_log2vis_get_embedding_levels
+pango_is_zero_width
+pango_quantize_line_geometry
+</SECTION>
+
+<SECTION>
+<TITLE>Version Checking</TITLE>
+<FILE>pango-version</FILE>
+PANGO_VERSION_ENCODE
+PANGO_VERSION
+PANGO_VERSION_MAJOR
+PANGO_VERSION_MINOR
+PANGO_VERSION_MICRO
+PANGO_VERSION_STRING
+PANGO_VERSION_CHECK
+pango_version
+pango_version_string
+pango_version_check
+</SECTION>
+
+<SECTION>
+<TITLE>Vertical Text</TITLE>
+<FILE>vertical</FILE>
+PangoGravity
+PangoGravityHint
+PANGO_GRAVITY_IS_VERTICAL
+pango_gravity_get_for_matrix
+pango_gravity_get_for_script
+pango_gravity_get_for_script_and_width
+pango_gravity_to_rotation
+<SUBSECTION Standard>
+PANGO_TYPE_GRAVITY
+PANGO_TYPE_GRAVITY_HINT
+<SUBSECTION Private>
+pango_gravity_get_type
+pango_gravity_hint_get_type
+</SECTION>
+
+<SECTION>
+<TITLE>Bidirectional Text</TITLE>
+<FILE>bidi</FILE>
+PangoDirection
+pango_unichar_direction
+pango_find_base_dir
+pango_get_mirror_char
+PangoBidiType
+pango_bidi_type_for_unichar
+<SUBSECTION Standard>
+PANGO_TYPE_BIDI_TYPE
+<SUBSECTION Private>
+pango_bidi_type_get_type
+pango_direction_get_type
+</SECTION>
diff --git a/docs/pango.types b/docs/pango.types
new file mode 100755 (executable)
index 0000000..7d93cda
--- /dev/null
@@ -0,0 +1,80 @@
+#include <pango/pango-attributes.h>
+#include <pango/pango-context.h>
+#include <pango/pango-engine.h>
+#include <pango/pango-enum-types.h>
+#include <pango/pango-font.h>
+#include <pango/pango-fontmap.h>
+#include <pango/pango-fontset.h>
+#include <pango/pango-glyph-item.h>
+#include <pango/pango-glyph.h>
+#include <pango/pango-item.h>
+#include <pango/pango-language.h>
+#include <pango/pango-layout.h>
+#include <pango/pango-matrix.h>
+#include <pango/pango-ot.h>
+#include <pango/pango-renderer.h>
+#include <pango/pango-tabs.h>
+#include <pango/pangocairo-fc.h>
+#include <pango/pangocairo.h>
+#include <pango/pangofc-decoder.h>
+#include <pango/pangofc-font.h>
+#include <pango/pangofc-fontmap.h>
+#include <pango/pangoft2.h>
+#include <pango/pangoxft-render.h>
+#include <pango/pangoxft.h>
+
+pango_alignment_get_type
+pango_attr_list_get_type
+pango_attr_type_get_type
+pango_bidi_type_get_type
+pango_cairo_fc_font_map_get_type
+pango_cairo_font_get_type
+pango_cairo_font_map_get_type
+pango_color_get_type
+pango_context_get_type
+pango_coverage_level_get_type
+pango_direction_get_type
+pango_ellipsize_mode_get_type
+pango_engine_get_type
+pango_engine_lang_get_type
+pango_engine_shape_get_type
+pango_fc_decoder_get_type
+pango_fc_font_get_type
+pango_fc_font_map_get_type
+pango_font_description_get_type
+pango_font_face_get_type
+pango_font_family_get_type
+pango_font_get_type
+pango_font_map_get_type
+pango_font_mask_get_type
+pango_font_metrics_get_type
+pango_fontset_get_type
+pango_fontset_simple_get_type
+pango_ft2_font_map_get_type
+pango_glyph_item_get_type
+pango_glyph_item_iter_get_type
+pango_glyph_string_get_type
+pango_gravity_get_type
+pango_gravity_hint_get_type
+pango_item_get_type
+pango_language_get_type
+pango_layout_get_type
+pango_layout_iter_get_type
+pango_layout_line_get_type
+pango_matrix_get_type
+pango_ot_info_get_type
+pango_ot_ruleset_get_type
+pango_render_part_get_type
+pango_renderer_get_type
+pango_script_get_type
+pango_stretch_get_type
+pango_style_get_type
+pango_tab_align_get_type
+pango_tab_array_get_type
+pango_underline_get_type
+pango_variant_get_type
+pango_weight_get_type
+pango_wrap_mode_get_type
+pango_xft_font_get_type
+pango_xft_font_map_get_type
+pango_xft_renderer_get_type
diff --git a/docs/pango_markup.sgml b/docs/pango_markup.sgml
new file mode 100755 (executable)
index 0000000..0460ccb
--- /dev/null
@@ -0,0 +1,264 @@
+<refentry id="PangoMarkupFormat" revision="11 Dec 2002">
+<refmeta>
+<refentrytitle>Text Attribute Markup</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>Pango Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Text Attribute Markup</refname><refpurpose>Simple
+markup language to encode text with attributes</refpurpose>
+</refnamediv>
+
+<refsect1 id="PangoMarkupFormatLanguage">
+<title>Pango Text Attribute Markup Language</title>
+
+<para>
+Frequently, you want to display some text to the user with attributes
+applied to part of the text (for example, you might want bold or
+italicized words). With the base Pango interfaces, you could create a
+<link linkend="PangoAttrList">PangoAttrList</link> and apply it to the
+text; the problem is that you'd need to apply attributes to some
+numeric range of characters, for example "characters 12-17." This is
+broken from an internationalization standpoint; once the text is
+translated, the word you wanted to italicize could be in a different
+position.
+</para>
+
+<para>
+The solution is to include the text attributes in the string to be
+translated. Pango provides this feature with a small markup language.
+You can parse a marked-up string into the string text plus a
+<link linkend="PangoAttrList">PangoAttrList</link> using the function 
+<link linkend="pango-parse-markup">pango_parse_markup()</link>.
+</para>
+
+<para>
+A simple example of a marked-up string might be:
+<literal>"&lt;span foreground="blue" size="x-large"&gt;Blue text&lt;/span&gt; is &lt;i&gt;cool&lt;/i&gt;!"</literal>
+</para>
+
+<para>
+The root tag of a marked-up document is &lt;markup&gt;, but <link
+linkend="pango-parse-markup">pango_parse_markup()</link> allows you to
+omit this tag, so you will most likely never need to use it. The most
+general markup tag is &lt;span&gt;, then there are some convenience
+tags. &lt;span&gt; has the following attributes:
+<variablelist><title>&lt;span&gt; attributes</title>
+
+<varlistentry>
+<term>font<footnote id='since_1_21'><para>Since 1.21</para></footnote></term>
+<term>font_desc</term>
+<listitem><para>
+A font description string, such as "Sans Italic 12". See 
+<link linkend="pango-font-description-from-string">pango_font_description_from_string()</link> 
+for a description of the format of the string representation . Note that any 
+other span attributes will override this description. So if you have 
+"Sans Italic" and also a style="normal" attribute, you will get Sans normal, 
+not italic.</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>font_family</term>
+<term>face</term>
+<listitem><para>
+A font family name
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>font_size<footnoteref linkend='since_1_21'/></term>
+<term>size</term>
+<listitem><para>
+Font size in 1024ths of a point, or one of the absolute sizes 
+'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large',
+'xx-large', or one of the relative sizes 'smaller' or 'larger'.
+If you want to specify a absolute size, it's usually easier
+to take advantage of the ability to specify a partial
+font description using 'font'; you can use
+<literal>font='12.5'</literal> rather than
+<literal>size='12800'</literal>.
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>font_style<footnoteref linkend='since_1_21'/></term>
+<term>style</term>
+<listitem><para>
+One of 'normal', 'oblique', 'italic'
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>font_weight<footnoteref linkend='since_1_21'/></term>
+<term>weight</term>
+<listitem><para>
+One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy',
+or a numeric weight
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>font_variant<footnoteref linkend='since_1_21'/></term>
+<term>variant</term>
+<listitem><para>
+One of 'normal' or 'smallcaps'
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>font_stretch<footnoteref linkend='since_1_21'/></term>
+<term>stretch</term>
+<listitem><para>
+One of 'ultracondensed', 'extracondensed', 'condensed',
+'semicondensed', 'normal', 'semiexpanded', 'expanded',
+'extraexpanded', 'ultraexpanded'
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>foreground</term>
+<term>fgcolor<footnoteref linkend='since_1_21'/></term>
+<term>color</term>
+<listitem><para>
+An RGB color specification such as '#00FF00' or a color name such as 
+'red'
+</para></listitem>
+</varlistentry>
+
+<varlistentry>
+<term>background</term>
+<term>bgcolor<footnoteref linkend='since_1_21'/></term>
+<listitem><para>
+An RGB color specification such as '#00FF00' or a color name such as 
+'red'
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>underline</term>
+<listitem><para>
+One of 'none', 'single', 'double', 'low', 'error'
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>underline_color</term>
+<listitem><para>
+The color of underlines; an RGB color specification such as '#00FF00'
+or a color name such as 'red'
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>rise</term>
+<listitem><para>
+Vertical displacement, in 10000ths of an em. Can be negative for 
+subscript, positive for superscript.
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>strikethrough</term>
+<listitem><para>
+'true' or 'false' whether to strike through the text
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>strikethrough_color</term>
+<listitem><para>
+The color of strikethrough lines; an RGB color specification such as
+'#00FF00' or a color name such as 'red'
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>fallback</term>
+<listitem><para>
+'true' or 'false' whether to enable fallback. If disabled, then characters
+will only be used from the closest matching font on the system. No fallback
+will be done to other fonts on the system that might contain the characters
+in the text.  Fallback is enabled by default. Most applications should not
+disable fallback.
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>lang</term>
+<listitem><para>
+A language code, indicating the text language
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>letter_spacing</term>
+<listitem><para>
+Inter-letter spacing in 1024ths of a point.
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>gravity</term>
+<listitem><para>
+One of 'south', 'east', 'north', 'west', 'auto'.
+</para></listitem>
+</varlistentry>
+
+<varlistentry><term>gravity_hint</term>
+<listitem><para>
+One of 'natural', 'strong', 'line'.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+
+</para>
+
+<para>
+The following convenience tags are provided:
+
+<variablelist><title>Convenience tags</title>
+<varlistentry><term>b</term>
+<listitem><para>
+Bold
+</para></listitem>
+</varlistentry>
+<varlistentry><term>big</term>
+<listitem><para>
+Makes font relatively larger, equivalent to &lt;span size="larger"&gt;
+</para></listitem>
+</varlistentry>
+<varlistentry><term>i</term>
+<listitem><para>
+Italic
+</para></listitem>
+</varlistentry>
+<varlistentry><term>s</term>
+<listitem><para>
+Strikethrough
+</para></listitem>
+</varlistentry>
+<varlistentry><term>sub</term>
+<listitem><para>
+Subscript
+</para></listitem>
+</varlistentry>
+<varlistentry><term>sup</term>
+<listitem><para>
+Superscript
+</para></listitem>
+</varlistentry>
+<varlistentry><term>small</term>
+<listitem><para>
+Makes font relatively smaller, equivalent to &lt;span size="smaller"&gt;
+</para></listitem>
+</varlistentry>
+<varlistentry><term>tt</term>
+<listitem><para>
+Monospace font
+</para></listitem>
+</varlistentry>
+<varlistentry><term>u</term>
+<listitem><para>
+Underline
+</para></listitem>
+</varlistentry>
+</variablelist>
+
+</para>
+
+</refsect1>
+
+</refentry>
diff --git a/docs/rotated-text.png b/docs/rotated-text.png
new file mode 100755 (executable)
index 0000000..b29682e
Binary files /dev/null and b/docs/rotated-text.png differ
diff --git a/docs/tmpl/atsui-fonts.sgml b/docs/tmpl/atsui-fonts.sgml
new file mode 100755 (executable)
index 0000000..0d85177
--- /dev/null
@@ -0,0 +1,37 @@
+<!-- ##### SECTION Title ##### -->
+ATSUI Fonts
+
+<!-- ##### SECTION Short_Description ##### -->
+Font handling with ATSUI fonts
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The macros and functions in this section are used to access fonts natively on
+MacOS systems using the ATSUI text rendering subsystem.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_ATSUI ##### -->
+<para>
+A string constant identifying the ATSUI renderer. The associated quark (see
+g_quark_from_string()) is used to identify the renderer in pango_find_map().
+</para>
+
+
+
+<!-- ##### FUNCTION pango_atsui_font_get_cgfont ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
diff --git a/docs/tmpl/bidi.sgml b/docs/tmpl/bidi.sgml
new file mode 100755 (executable)
index 0000000..7e5171e
--- /dev/null
@@ -0,0 +1,105 @@
+<!-- ##### SECTION Title ##### -->
+Bidirectional Text
+
+<!-- ##### SECTION Short_Description ##### -->
+Types and functions to help with handling bidirectional text
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Pango supports bidirectional text (like Arabic and Hebrew) automatically.
+Some applications however, need some help to correctly handle bidirectional
+text.
+</para>
+<para>
+The #PangoDirection type can be used with pango_context_set_base_dir() to
+instruct Pango about direction of text, though in most cases Pango detects
+that correctly and automatically.  The rest of the facilities in this section
+are used internally by Pango already, and are provided to help applications
+that need more direct control over bidirectional setting of text.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+pango_context_get_base_dir(),
+pango_context_set_base_dir(),
+pango_itemize_with_base_dir()
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM PangoDirection ##### -->
+<para>
+</para>
+
+@PANGO_DIRECTION_LTR: 
+@PANGO_DIRECTION_RTL: 
+@PANGO_DIRECTION_TTB_LTR: 
+@PANGO_DIRECTION_TTB_RTL: 
+@PANGO_DIRECTION_WEAK_LTR: 
+@PANGO_DIRECTION_WEAK_RTL: 
+@PANGO_DIRECTION_NEUTRAL: 
+
+<!-- ##### FUNCTION pango_unichar_direction ##### -->
+<para>
+
+</para>
+
+@ch: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_find_base_dir ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_get_mirror_char ##### -->
+<para>
+
+</para>
+
+@ch: 
+@mirrored_ch: 
+@Returns: 
+
+
+<!-- ##### ENUM PangoBidiType ##### -->
+<para>
+
+</para>
+
+@PANGO_BIDI_TYPE_L: 
+@PANGO_BIDI_TYPE_LRE: 
+@PANGO_BIDI_TYPE_LRO: 
+@PANGO_BIDI_TYPE_R: 
+@PANGO_BIDI_TYPE_AL: 
+@PANGO_BIDI_TYPE_RLE: 
+@PANGO_BIDI_TYPE_RLO: 
+@PANGO_BIDI_TYPE_PDF: 
+@PANGO_BIDI_TYPE_EN: 
+@PANGO_BIDI_TYPE_ES: 
+@PANGO_BIDI_TYPE_ET: 
+@PANGO_BIDI_TYPE_AN: 
+@PANGO_BIDI_TYPE_CS: 
+@PANGO_BIDI_TYPE_NSM: 
+@PANGO_BIDI_TYPE_BN: 
+@PANGO_BIDI_TYPE_B: 
+@PANGO_BIDI_TYPE_S: 
+@PANGO_BIDI_TYPE_WS: 
+@PANGO_BIDI_TYPE_ON: 
+
+<!-- ##### FUNCTION pango_bidi_type_for_unichar ##### -->
+<para>
+
+</para>
+
+@ch: 
+@Returns: 
+
+
diff --git a/docs/tmpl/coverage-maps.sgml b/docs/tmpl/coverage-maps.sgml
new file mode 100755 (executable)
index 0000000..69c7162
--- /dev/null
@@ -0,0 +1,136 @@
+<!-- ##### SECTION Title ##### -->
+Coverage Maps
+
+<!-- ##### SECTION Short_Description ##### -->
+Unicode character range coverage storage
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+It is often necessary in Pango to determine if a particular font can
+represent a particular character, and also how well it can represent
+that character. The #PangoCoverage is a data structure that is used
+to represent that information.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM PangoCoverageLevel ##### -->
+<para>
+Used to indicate how well a font can represent a particular Unicode
+character point for a particular script.
+</para>
+
+@PANGO_COVERAGE_NONE: The character is not representable with the font.
+@PANGO_COVERAGE_FALLBACK: The character is represented in a way that may be
+                          comprehensible but is not the correct graphical form.
+                          For instance, a Hangul character represented as a
+                          a sequence of Jamos, or a Latin transliteration of
+                          a Cyrillic word.
+@PANGO_COVERAGE_APPROXIMATE: The character is represented as basically the correct
+                             graphical form, but with a stylistic variant inappropriate for
+                             the current script.
+@PANGO_COVERAGE_EXACT: The character is represented as the correct graphical form.
+
+<!-- ##### MACRO PANGO_TYPE_COVERAGE_LEVEL ##### -->
+<para>
+The #GObject type for #PangoCoverageLevel.
+</para>
+
+
+
+<!-- ##### STRUCT PangoCoverage ##### -->
+<para>
+The #PangoCoverage structure represents a map from Unicode characters
+to #PangoCoverageLevel. It is an opaque structure with no public fields.
+</para>
+
+
+<!-- ##### FUNCTION pango_coverage_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_coverage_ref ##### -->
+<para>
+
+</para>
+
+@coverage: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_coverage_unref ##### -->
+<para>
+
+</para>
+
+@coverage: 
+
+
+<!-- ##### FUNCTION pango_coverage_copy ##### -->
+<para>
+
+</para>
+
+@coverage: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_coverage_get ##### -->
+<para>
+
+</para>
+
+@coverage: 
+@index_: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_coverage_max ##### -->
+<para>
+
+</para>
+
+@coverage: 
+@other: 
+
+
+<!-- ##### FUNCTION pango_coverage_set ##### -->
+<para>
+
+</para>
+
+@coverage: 
+@index_: 
+@level: 
+
+
+<!-- ##### FUNCTION pango_coverage_to_bytes ##### -->
+<para>
+
+</para>
+
+@coverage: 
+@bytes: 
+@n_bytes: 
+
+
+<!-- ##### FUNCTION pango_coverage_from_bytes ##### -->
+<para>
+
+</para>
+
+@bytes: 
+@n_bytes: 
+@Returns: 
+
+
diff --git a/docs/tmpl/engines.sgml b/docs/tmpl/engines.sgml
new file mode 100755 (executable)
index 0000000..20de439
--- /dev/null
@@ -0,0 +1,116 @@
+<!-- ##### SECTION Title ##### -->
+Engines
+
+<!-- ##### SECTION Short_Description ##### -->
+Language-specific and rendering-system-specific processing
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Pango utilizes a module architecture in which the language-specific
+and render-system-specific components are provided by loadable
+modules. Each loadable module supplies one or more
+<firstterm>engines</firstterm>.  Each <firstterm>engine</firstterm>
+has an associated <firstterm>engine type</firstterm> and
+<firstterm>render type</firstterm>. These two types are represented by
+strings.
+</para>
+<para>
+Each dynamically-loaded module exports several functions which provide
+the public API. These functions are script_engine_list(),
+script_engine_init() and script_engine_exit, and
+script_engine_create(). The latter three functions are used when
+creating engines from the module at run time, while the first
+function is used when building a catalog of all available modules.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoEngineInfo ##### -->
+<para>
+The #PangoEngineInfo structure contains information about a particular
+engine. It contains the following fields:
+</para>
+
+@id: a unique string ID for the engine.
+@engine_type: a string identifying the engine type.
+@render_type: a string identifying the render type.
+@scripts: array of scripts this engine supports.
+@n_scripts: number of items in @scripts.
+
+<!-- ##### STRUCT PangoEngineScriptInfo ##### -->
+<para>
+The #PangoEngineScriptInfo structure contains
+information about how the shaper covers a particular
+script.
+</para>
+
+@script: a #PangoScript. The value %PANGO_SCRIPT_COMMON has
+        the special meaning here of "all scripts"
+@langs: a semicolon separated list of languages that this
+        engine handles for this script. This may be empty, 
+        in which case the engine is saying that it is a
+        fallback choice for all languages for this range,
+        but should not be used if another engine 
+        indicates that it is specific for the language for
+        a given code point. An entry in this list of "*"
+        indicates that this engine is specific to all
+        languages for this range.
+
+<!-- ##### STRUCT PangoEngine ##### -->
+<para>
+</para>
+
+
+<!-- ##### STRUCT PangoEngineClass ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_NONE ##### -->
+<para>
+A string constant defining the render type
+for engines that are not rendering-system 
+specific.
+</para>
+
+
+
+<!-- ##### FUNCTION script_engine_list ##### -->
+<para>
+</para>
+
+@engines: location to store a pointer to an array of engines.
+@n_engines: location to store the number of elements in @engines.
+
+
+<!-- ##### FUNCTION script_engine_init ##### -->
+<para>
+
+</para>
+
+@module: 
+
+
+<!-- ##### FUNCTION script_engine_exit ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION script_engine_create ##### -->
+<para>
+
+</para>
+
+@id: 
+@Returns: 
+
+
diff --git a/docs/tmpl/fonts.sgml b/docs/tmpl/fonts.sgml
new file mode 100755 (executable)
index 0000000..baa0558
--- /dev/null
@@ -0,0 +1,1039 @@
+<!-- ##### SECTION Title ##### -->
+Fonts
+
+<!-- ##### SECTION Short_Description ##### -->
+Structures representing abstract fonts
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Pango supports a flexible architecture where a
+particular rendering architecture can supply an
+implementation of fonts. The #PangoFont structure
+represents an abstract rendering-system-independent font.
+Pango provides routines to list available fonts, and
+to load a font of a given description.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoFontDescription ##### -->
+<para>
+The #PangoFontDescription structure represents the description
+of an ideal font. These structures are used both to list
+what fonts are available on the system and also for specifying
+the characteristics of a font to load.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONT_DESCRIPTION ##### -->
+<para>
+The #GObject type for #PangoFontDescription.
+</para>
+
+
+
+<!-- ##### ENUM PangoStyle ##### -->
+<para>
+</para>
+
+@PANGO_STYLE_NORMAL: 
+@PANGO_STYLE_OBLIQUE: 
+@PANGO_STYLE_ITALIC: 
+
+<!-- ##### MACRO PANGO_TYPE_STYLE ##### -->
+<para>
+The #GObject type for #PangoStyle.
+</para>
+
+
+
+<!-- ##### ENUM PangoWeight ##### -->
+<para>
+An enumeration specifying the weight (boldness) of a font. This is a numerical
+value ranging from 100 to 900, but there are some predefined values:
+</para>
+
+@PANGO_WEIGHT_THIN: the thin weight (= 100; Since: 1.24)
+@PANGO_WEIGHT_ULTRALIGHT: the ultralight weight (= 200)
+@PANGO_WEIGHT_LIGHT: the light weight (= 300)
+@PANGO_WEIGHT_BOOK: the book weight (= 380; Since: 1.24)
+@PANGO_WEIGHT_NORMAL: the default weight (= 400)
+@PANGO_WEIGHT_MEDIUM: the normal weight (= 500; Since: 1.24)
+@PANGO_WEIGHT_SEMIBOLD: the semibold weight (= 600)
+@PANGO_WEIGHT_BOLD: the bold weight (= 700)
+@PANGO_WEIGHT_ULTRABOLD: the ultrabold weight (= 800)
+@PANGO_WEIGHT_HEAVY: the heavy weight (= 900)
+@PANGO_WEIGHT_ULTRAHEAVY: the ultraheavy weight (= 1000; Since: 1.24)
+
+<!-- ##### MACRO PANGO_TYPE_WEIGHT ##### -->
+<para>
+The #GObject type for #PangoWeight.
+</para>
+
+
+
+<!-- ##### ENUM PangoVariant ##### -->
+<para>
+An enumeration specifying capitalization variant of the font.
+</para>
+
+@PANGO_VARIANT_NORMAL: A normal font.
+@PANGO_VARIANT_SMALL_CAPS: A font with the lower case characters
+  replaced by smaller variants of the capital characters.
+
+<!-- ##### MACRO PANGO_TYPE_VARIANT ##### -->
+<para>
+The #GObject type for #PangoVariant.
+</para>
+
+
+
+<!-- ##### ENUM PangoStretch ##### -->
+<para>
+An enumeration specifying the width of the font relative to other designs
+within a family.
+</para>
+
+@PANGO_STRETCH_ULTRA_CONDENSED: ultra condensed width
+@PANGO_STRETCH_EXTRA_CONDENSED: extra condensed width
+@PANGO_STRETCH_CONDENSED: condensed width
+@PANGO_STRETCH_SEMI_CONDENSED: semi condensed width
+@PANGO_STRETCH_NORMAL: the normal width
+@PANGO_STRETCH_SEMI_EXPANDED: semi expanded width
+@PANGO_STRETCH_EXPANDED: expanded width
+@PANGO_STRETCH_EXTRA_EXPANDED: extra expanded width
+@PANGO_STRETCH_ULTRA_EXPANDED: ultra expanded width
+
+<!-- ##### MACRO PANGO_TYPE_STRETCH ##### -->
+<para>
+The #GObject type for #PangoStretch.
+</para>
+
+
+
+<!-- ##### ENUM PangoFontMask ##### -->
+<para>
+The bits in a #PangoFontMask correspond to fields in a  
+#PangoFontDescription that have been set.
+</para>
+
+@PANGO_FONT_MASK_FAMILY: the font family is specified.
+@PANGO_FONT_MASK_STYLE: the font style is specified.
+@PANGO_FONT_MASK_VARIANT: the font variant is specified.
+@PANGO_FONT_MASK_WEIGHT: the font weight is specified.
+@PANGO_FONT_MASK_STRETCH: the font stretch is specified.
+@PANGO_FONT_MASK_SIZE: the font size is specified.
+@PANGO_FONT_MASK_GRAVITY: the font gravity is specified (Since: 1.16.)
+
+<!-- ##### MACRO PANGO_TYPE_FONT_MASK ##### -->
+<para>
+The #GObject type for #PangoFontMask.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_font_description_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_copy ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_copy_static ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_hash ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_equal ##### -->
+<para>
+
+</para>
+
+@desc1: 
+@desc2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_free ##### -->
+<para>
+
+</para>
+
+@desc: 
+
+
+<!-- ##### FUNCTION pango_font_descriptions_free ##### -->
+<para>
+
+</para>
+
+@descs: 
+@n_descs: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_family ##### -->
+<para>
+
+</para>
+
+@desc: 
+@family: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_family_static ##### -->
+<para>
+
+</para>
+
+@desc: 
+@family: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_family ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_style ##### -->
+<para>
+
+</para>
+
+@desc: 
+@style: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_style ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_variant ##### -->
+<para>
+
+</para>
+
+@desc: 
+@variant: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_variant ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_weight ##### -->
+<para>
+
+</para>
+
+@desc: 
+@weight: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_weight ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_stretch ##### -->
+<para>
+
+</para>
+
+@desc: 
+@stretch: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_stretch ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_size ##### -->
+<para>
+
+</para>
+
+@desc: 
+@size: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_size ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_absolute_size ##### -->
+<para>
+
+</para>
+
+@desc: 
+@size: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_size_is_absolute ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_set_gravity ##### -->
+<para>
+
+</para>
+
+@desc: 
+@gravity: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_gravity ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_get_set_fields ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_unset_fields ##### -->
+<para>
+
+</para>
+
+@desc: 
+@to_unset: 
+
+
+<!-- ##### FUNCTION pango_font_description_merge ##### -->
+<para>
+
+</para>
+
+@desc: 
+@desc_to_merge: 
+@replace_existing: 
+
+
+<!-- ##### FUNCTION pango_font_description_merge_static ##### -->
+<para>
+
+</para>
+
+@desc: 
+@desc_to_merge: 
+@replace_existing: 
+
+
+<!-- ##### FUNCTION pango_font_description_better_match ##### -->
+<para>
+
+</para>
+
+@desc: 
+@old_match: 
+@new_match: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_from_string ##### -->
+<para>
+
+</para>
+
+@str: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_to_string ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_description_to_filename ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoFontMetrics ##### -->
+<para>
+A #PangoFontMetrics structure holds the overall metric information
+for a font (possibly restricted to a script). The fields of this
+structure are private to implementations of a font backend. See
+the documentation of the corresponding getters for documentation
+of their meaning.
+</para>
+
+@ref_count: reference count.  Used internally.  See pango_font_metrics_ref()
+            and pango_font_metrics_unref().
+@ascent: the distance from the baseline to the highest point of the glyphs of
+        the font. This is positive in practically all fonts.
+@descent: the distance from the baseline to the lowest point of the glyphs of
+        the font. This is positive in practically all fonts.
+@approximate_char_width: approximate average width of the regular glyphs of
+         the font.  Note that for this calculation, East Asian characters
+        (those passing g_unichar_iswide()) are counted as double-width.
+        This produces a more uniform value for this measure across languages
+        and results in more uniform and more expected UI sizes.
+@approximate_digit_width: approximate average width of the glyphs for digits
+         of the font.
+@underline_position: position of the underline. This is normally negative.
+@underline_thickness: thickness of the underline.
+@strikethrough_position: position of the strikethrough line. This is
+        normally positive.
+@strikethrough_thickness: thickness of the strikethrough line.
+
+<!-- ##### MACRO PANGO_TYPE_FONT_METRICS ##### -->
+<para>
+The #GObject type for #PangoFontMetrics.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_font_metrics_ref ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_unref ##### -->
+<para>
+
+</para>
+
+@metrics: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_ascent ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_descent ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_approximate_char_width ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_approximate_digit_width ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_underline_thickness ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_underline_position ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_strikethrough_thickness ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_metrics_get_strikethrough_position ##### -->
+<para>
+
+</para>
+
+@metrics: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoFont ##### -->
+<para>
+The #PangoFont structure is used to represent
+a font in a rendering-system-independent matter.
+To create an implementation of a #PangoFont,
+the rendering-system specific code should allocate
+a larger structure that contains a nested
+#PangoFont, fill in the <structfield>klass</structfield> member of
+the nested #PangoFont with a pointer to
+a appropriate #PangoFontClass, then call
+pango_font_init() on the structure.
+</para>
+<para>
+The #PangoFont structure contains one member
+which the implementation fills in.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONT ##### -->
+<para>
+The #GObject type for #PangoFont.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_FONT ##### -->
+<para>
+Casts a #GObject to a #PangoFont.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### MACRO PANGO_IS_FONT ##### -->
+<para>
+Returns %TRUE if @object is a #PangoFont.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### FUNCTION pango_font_find_shaper ##### -->
+<para>
+
+</para>
+
+@font: 
+@language: 
+@ch: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_describe ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_describe_with_absolute_size ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_get_coverage ##### -->
+<para>
+
+</para>
+
+@font: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_get_glyph_extents ##### -->
+<para>
+
+</para>
+
+@font: 
+@glyph: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_font_get_metrics ##### -->
+<para>
+
+</para>
+
+@font: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_get_font_map ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoFontFamily ##### -->
+<para>
+The #PangoFontFamily structure is used to represent a family of related 
+font faces. The faces in a family share a common design, but differ in 
+slant, weight, width and other aspects.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONT_FAMILY ##### -->
+<para>
+The #GObject type for #PangoFontFamily.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_FONT_FAMILY ##### -->
+<para>
+Casts a #GObject to a #PangoFontFamily.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### MACRO PANGO_IS_FONT_FAMILY ##### -->
+<para>
+Returns %TRUE if @object is a #PangoFontFamily.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### FUNCTION pango_font_family_get_name ##### -->
+<para>
+
+</para>
+
+@family: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_family_is_monospace ##### -->
+<para>
+
+</para>
+
+@family: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_family_list_faces ##### -->
+<para>
+
+</para>
+
+@family: 
+@faces: 
+@n_faces: 
+
+
+<!-- ##### STRUCT PangoFontFace ##### -->
+<para>
+The #PangoFontFace structure is used to represent a group of fonts with 
+the same family, slant, weight, width, but varying sizes.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONT_FACE ##### -->
+<para>
+The #GObject type for #PangoFontFace.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_FONT_FACE ##### -->
+<para>
+Casts a #GObject to a #PangoFontFace.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### MACRO PANGO_IS_FONT_FACE ##### -->
+<para>
+Returns %TRUE if @object is a #PangoFontFace.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### FUNCTION pango_font_face_get_face_name ##### -->
+<para>
+
+</para>
+
+@face: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_face_list_sizes ##### -->
+<para>
+
+</para>
+
+@face: 
+@sizes: 
+@n_sizes: 
+
+
+<!-- ##### FUNCTION pango_font_face_describe ##### -->
+<para>
+
+</para>
+
+@face: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_face_is_synthesized ##### -->
+<para>
+
+</para>
+
+@face: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoFontMap ##### -->
+<para>
+The #PangoFontMap represents the set of fonts available for a
+particular rendering system. This is a virtual object with
+implementations being specific to particular rendering systems.  To
+create an implementation of a #PangoFontMap, the rendering-system
+specific code should allocate a larger structure that contains a nested
+#PangoFontMap, fill in the <structfield>klass</structfield> member of the nested #PangoFontMap with a
+pointer to a appropriate #PangoFontMapClass, then call
+pango_font_map_init() on the structure.
+</para>
+<para>
+The #PangoFontMap structure contains one member which the implementation
+fills in.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONT_MAP ##### -->
+<para>
+The #GObject type for #PangoFontMap.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_FONT_MAP ##### -->
+<para>
+Casts a #GObject to a #PangoFontMap. 
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### MACRO PANGO_IS_FONT_MAP ##### -->
+<para>
+Returns %TRUE if @object is a #PangoFontMap.
+</para>
+
+@object: a #GObject.
+
+
+<!-- ##### STRUCT PangoFontMapClass ##### -->
+<para>
+The #PangoFontMapClass structure holds the virtual functions for
+a particular #PangoFontMap implementation.
+</para>
+
+@parent_class: parent #GObjectClass.
+@load_font: a function to load a font with a given description. See
+            pango_font_map_load_font().
+@list_families: A function to list available font families. See
+                pango_font_map_list_families().
+@load_fontset: a function to load a fontset with a given given description
+             suitable for a particular language. See
+            pango_font_map_load_fontset().
+@shape_engine_type: the type of rendering-system-dependent engines that
+             can handle fonts of this fonts loaded with this fontmap.
+
+<!-- ##### MACRO PANGO_FONT_MAP_CLASS ##### -->
+<para>
+Casts a #GObject to a #PangoFontMapClass.
+</para>
+
+@klass: a #GObject.
+
+
+<!-- ##### MACRO PANGO_IS_FONT_MAP_CLASS ##### -->
+<para>
+Returns %TRUE if @klass is a subtype of #PangoFontMapClass.
+</para>
+
+@klass: a #GObject.
+
+
+<!-- ##### MACRO PANGO_FONT_MAP_GET_CLASS ##### -->
+<para>
+Returns the type of a #PangoFontMap.
+</para>
+
+@obj: a #PangoFontMap.
+
+
+<!-- ##### FUNCTION pango_font_map_create_context ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_map_load_font ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@context: 
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_map_load_fontset ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@context: 
+@desc: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_font_map_list_families ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@families: 
+@n_families: 
+
+
+<!-- ##### FUNCTION pango_font_map_get_shape_engine_type ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoFontset ##### -->
+<para>
+A #PangoFontset represents a set of #PangoFont to use
+when rendering text. It is the result of resolving a
+#PangoFontDescription against a particular #PangoContext.
+It has operations for finding the component font for
+a particular Unicode character, and for finding a composite
+set of metrics for the entire fontset.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONTSET ##### -->
+<para>
+The #GObject type for #PangoFontset.
+</para>
+
+
+
+<!-- ##### STRUCT PangoFontsetClass ##### -->
+<para>
+The #PangoFontsetClass structure holds the virtual functions for
+a particular #PangoFontset implementation.
+</para>
+
+@parent_class: parent #GObjectClass.
+@get_font: a function to get the font in the fontset that contains the 
+   best glyph for the given Unicode character; see pango_fontset_get_font().
+@get_metrics: a function to get overall metric information for the fonts 
+   in the fontset; see pango_fontset_get_metrics().
+@get_language: a function to get the language of the fontset.
+@foreach: a function to loop over the fonts in the fontset. See
+   pango_fontset_foreach().
+
+<!-- ##### FUNCTION pango_fontset_get_font ##### -->
+<para>
+
+</para>
+
+@fontset: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fontset_get_metrics ##### -->
+<para>
+
+</para>
+
+@fontset: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION PangoFontsetForeachFunc ##### -->
+<para>
+
+</para>
+
+@fontset: 
+@font: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fontset_foreach ##### -->
+<para>
+
+</para>
+
+@fontset: 
+@func: 
+@data: 
+
+
+<!-- ##### STRUCT PangoFontsetSimple ##### -->
+<para>
+#PangoFontsetSimple is a implementation of the abstract
+#PangoFontset base class in terms of an array of fonts,
+which the creator provides when constructing the
+#PangoFontsetSimple.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_FONTSET_SIMPLE ##### -->
+<para>
+The #GObject type for #PangoFontsetSimple.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_fontset_simple_new ##### -->
+<para>
+
+</para>
+
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fontset_simple_append ##### -->
+<para>
+
+</para>
+
+@fontset: 
+@font: 
+
+
+<!-- ##### FUNCTION pango_fontset_simple_size ##### -->
+<para>
+
+</para>
+
+@fontset: 
+@Returns: 
+
+
diff --git a/docs/tmpl/freetype-fonts.sgml b/docs/tmpl/freetype-fonts.sgml
new file mode 100755 (executable)
index 0000000..06f5006
--- /dev/null
@@ -0,0 +1,222 @@
+<!-- ##### SECTION Title ##### -->
+FreeType Fonts and Rendering
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions for shape engines to manipulate FreeType fonts
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The macros and functions in this section are used to access fonts and render
+text to bitmaps using the FreeType 2 library.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoFT2FontMap ##### -->
+<para>
+The #PangoFT2FontMap is the #PangoFontMap implementation for FreeType fonts.
+</para>
+
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_FT2 ##### -->
+<para>
+A string constant that was used to identify shape engines that work
+with the FreeType backend. See %PANGO_RENDER_TYPE_FC for the replacement.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_ft2_font_map_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_map_set_resolution ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@dpi_x: 
+@dpi_y: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_map_create_context ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION PangoFT2SubstituteFunc ##### -->
+<para>
+Function type for doing final config tweaking on prepared FcPatterns.
+</para>
+
+@pattern: the <type>FcPattern</type> to tweak.
+@data: user data.
+
+
+<!-- ##### FUNCTION pango_ft2_font_map_set_default_substitute ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@func: 
+@data: 
+@notify: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_map_substitute_changed ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+
+
+<!-- ##### FUNCTION pango_ft2_get_context ##### -->
+<para>
+
+</para>
+
+@dpi_x: 
+@dpi_y: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_render ##### -->
+<para>
+
+</para>
+
+@bitmap: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_ft2_render_transformed ##### -->
+<para>
+
+</para>
+
+@bitmap: 
+@matrix: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_ft2_render_layout_line ##### -->
+<para>
+
+</para>
+
+@bitmap: 
+@line: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_ft2_render_layout_line_subpixel ##### -->
+<para>
+
+</para>
+
+@bitmap: 
+@line: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_ft2_render_layout ##### -->
+<para>
+
+</para>
+
+@bitmap: 
+@layout: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_ft2_render_layout_subpixel ##### -->
+<para>
+
+</para>
+
+@bitmap: 
+@layout: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_ft2_get_unknown_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_get_kerning ##### -->
+<para>
+
+</para>
+
+@font: 
+@left: 
+@right: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_get_face ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_get_coverage ##### -->
+<para>
+
+</para>
+
+@font: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_font_map_for_display ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ft2_shutdown_display ##### -->
+<para>
+
+</para>
+
+
+
diff --git a/docs/tmpl/glyphs.sgml b/docs/tmpl/glyphs.sgml
new file mode 100755 (executable)
index 0000000..be546c6
--- /dev/null
@@ -0,0 +1,713 @@
+<!-- ##### SECTION Title ##### -->
+Glyph Storage
+
+<!-- ##### SECTION Short_Description ##### -->
+Structures for storing information about glyphs
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+pango_shape() produces a string of glyphs which
+can be measured or drawn to the screen. The following
+structures are used to store information about
+glyphs.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO PANGO_SCALE ##### -->
+<para>
+The %PANGO_SCALE macro represents the scale between dimensions used
+for Pango distances and device units. (The definition of device
+units is dependent on the output device; it will typically be pixels
+for a screen, and points for a printer.) %PANGO_SCALE is currently
+1024, but this may be changed in the future.
+</para>
+<para>
+When setting font sizes, device units are always considered to be
+points (as in "12 point font"), rather than pixels. 
+</para>
+
+
+
+<!-- ##### MACRO PANGO_PIXELS ##### -->
+<para>
+Converts a dimension to device units by rounding.
+</para>
+
+@d: a dimension in Pango units.
+@Returns: rounded dimension in device units.
+
+
+<!-- ##### MACRO PANGO_PIXELS_FLOOR ##### -->
+<para>
+Converts a dimension to device units by flooring.
+</para>
+
+@d: a dimension in Pango units.
+@Returns: floored dimension in device units.
+@Since: 1.14
+
+
+<!-- ##### MACRO PANGO_PIXELS_CEIL ##### -->
+<para>
+Converts a dimension to device units by ceiling.
+</para>
+
+@d: a dimension in Pango units.
+@Returns: ceiled dimension in device units.
+@Since: 1.14
+
+
+<!-- ##### MACRO PANGO_UNITS_ROUND ##### -->
+<para>
+Rounds a dimension to whole device units, but does not
+convert it to device units.
+</para>
+
+@d: a dimension in Pango units.
+@Returns: rounded dimension in Pango units.
+@Since: 1.18
+
+
+<!-- ##### FUNCTION pango_units_to_double ##### -->
+<para>
+
+</para>
+
+@i: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_units_from_double ##### -->
+<para>
+
+</para>
+
+@d: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoRectangle ##### -->
+<para>
+The #PangoRectangle structure represents a rectangle. It is frequently
+used to represent the logical or ink extents of a single glyph or section
+of text. (See, for instance, pango_font_get_glyph_extents())
+</para>
+
+@x: X coordinate of the left side of the rectangle.
+@y: Y coordinate of the the top side of the rectangle.
+@width: width of the rectangle.
+@height: height of the rectangle.
+
+<!-- ##### MACRO PANGO_ASCENT ##### -->
+<para>
+Extracts the <firstterm>ascent</firstterm> from a #PangoRectangle
+representing glyph extents. The ascent is the distance from the
+baseline to the highest point of the character. This is positive if the
+glyph ascends above the baseline.
+</para>
+
+@rect: a #PangoRectangle
+
+
+<!-- ##### MACRO PANGO_DESCENT ##### -->
+<para>
+Extracts the <firstterm>descent</firstterm> from a #PangoRectangle
+representing glyph extents. The descent is the distance from the
+baseline to the lowest point of the character. This is positive if the
+glyph descends below the baseline.
+</para>
+
+@rect: a #PangoRectangle
+
+
+<!-- ##### MACRO PANGO_LBEARING ##### -->
+<para>
+Extracts the <firstterm>left bearing</firstterm> from a #PangoRectangle
+representing glyph extents. The left bearing is the distance from the
+horizontal origin to the farthest left point of the character.
+This is positive for characters drawn completely to the right of the
+glyph origin.
+</para>
+
+@rect: a #PangoRectangle
+
+
+<!-- ##### MACRO PANGO_RBEARING ##### -->
+<para>
+Extracts the <firstterm>right bearing</firstterm> from a #PangoRectangle
+representing glyph extents. The right bearing is the distance from the
+horizontal origin to the farthest right point of the character.
+This is positive except for characters drawn completely to the left of the
+horizontal origin.
+</para>
+
+@rect: a #PangoRectangle
+
+
+<!-- ##### FUNCTION pango_extents_to_pixels ##### -->
+<para>
+
+</para>
+
+@inclusive: 
+@nearest: 
+
+
+<!-- ##### STRUCT PangoMatrix ##### -->
+<para>
+
+</para>
+
+@xx: 
+@xy: 
+@yx: 
+@yy: 
+@x0: 
+@y0: 
+
+<!-- ##### MACRO PANGO_TYPE_MATRIX ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO PANGO_MATRIX_INIT ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION pango_matrix_copy ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_matrix_free ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+
+<!-- ##### FUNCTION pango_matrix_translate ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@tx: 
+@ty: 
+
+
+<!-- ##### FUNCTION pango_matrix_scale ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@scale_x: 
+@scale_y: 
+
+
+<!-- ##### FUNCTION pango_matrix_rotate ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@degrees: 
+
+
+<!-- ##### FUNCTION pango_matrix_concat ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@new_matrix: 
+
+
+<!-- ##### FUNCTION pango_matrix_transform_point ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_matrix_transform_distance ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@dx: 
+@dy: 
+
+
+<!-- ##### FUNCTION pango_matrix_transform_rectangle ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@rect: 
+
+
+<!-- ##### FUNCTION pango_matrix_transform_pixel_rectangle ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@rect: 
+
+
+<!-- ##### FUNCTION pango_matrix_get_font_scale_factor ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@Returns: 
+
+
+<!-- ##### TYPEDEF PangoGlyph ##### -->
+<para>
+A #PangoGlyph represents a single glyph in the output form of a string.
+</para>
+
+
+<!-- ##### MACRO PANGO_GLYPH_EMPTY ##### -->
+<para>
+The %PANGO_GLYPH_EMPTY macro represents a #PangoGlyph value that has a
+special meaning, which is a zero-width empty glyph.  This is useful for
+example in shaper modules, to use as the glyph for various zero-width
+Unicode characters (those passing pango_is_zero_width()).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_GLYPH_INVALID_INPUT ##### -->
+<para>
+The %PANGO_GLYPH_EMPTY macro represents a #PangoGlyph value that has a
+special meaning of invalid input.  #PangoLayout produces one such glyph
+per invalid input UTF-8 byte and such a glyph is rendered as a crossed
+box.
+
+Note that this value is defined such that it has the %PANGO_GLYPH_UNKNOWN_FLAG
+on.
+</para>
+
+@Since: 1.20
+
+
+<!-- ##### MACRO PANGO_GLYPH_UNKNOWN_FLAG ##### -->
+<para>
+The %PANGO_GLYPH_UNKNOWN_FLAG macro is a flag value that can be added to
+a #gunichar value of a valid Unicode character, to produce a #PangoGlyph
+value, representing an unknown-character glyph for the respective #gunichar.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_GET_UNKNOWN_GLYPH ##### -->
+<para>
+Returns a #PangoGlyph value that means no glyph was found for @wc.
+The way this unknown glyphs are rendered is backend specific.  For example,
+a box with the hexadecimal Unicode code-point of the character written in it
+is what is done in the most common backends.
+</para>
+
+@wc: a Unicode character
+
+
+<!-- ##### STRUCT PangoGlyphInfo ##### -->
+<para>
+The #PangoGlyphInfo structure represents a single glyph together with
+positioning information and visual attributes.
+It contains the following fields.
+</para>
+
+@glyph: the glyph itself.
+@geometry: the positional information about the glyph.
+@attr: the visual attributes of the glyph.
+
+<!-- ##### STRUCT PangoGlyphGeometry ##### -->
+<para>
+The #PangoGlyphGeometry structure contains width and positioning
+information for a single glyph. 
+</para>
+
+@width: the logical width to use for the the character.
+@x_offset: horizontal offset from nominal character position.
+@y_offset: vertical offset from nominal character position.
+
+<!-- ##### TYPEDEF PangoGlyphUnit ##### -->
+<para>
+The #PangoGlyphUnit type is used to store dimensions within
+Pango. Dimensions are stored in 1/%PANGO_SCALE of a device unit.
+(A device unit might be a pixel for screen display, or
+a point on a printer.) %PANGO_SCALE is currently 1024, and
+may change in the future (unlikely though), but you should not
+depend on its exact value. The PANGO_PIXELS() macro can be used
+to convert from glyph units into device units with correct rounding.
+</para>
+
+
+<!-- ##### STRUCT PangoGlyphVisAttr ##### -->
+<para>
+The PangoGlyphVisAttr is used to communicate information between
+the shaping phase and the rendering phase.  More attributes may be
+added in the future.
+</para>
+
+@is_cluster_start: set for the first logical glyph in each cluster. (Clusters
+                  are stored in visual order, within the cluster, glyphs
+                  are always ordered in logical order, since visual
+                  order is meaningless; that is, in Arabic text, accent glyphs
+                  follow the glyphs for the base character.)
+
+<!-- ##### STRUCT PangoGlyphString ##### -->
+<para>
+The #PangoGlyphString structure is used to store strings
+of glyphs with geometry and visual attribute information.
+The storage for the glyph information is owned
+by the structure which simplifies memory management.
+</para>
+
+@num_glyphs: the number of glyphs in the string.
+@glyphs: an array of #PangoGlyphInfo structures of length <structfield>num_glyphs</structfield>.
+@log_clusters: for each glyph, byte index of the starting character for the
+cluster. The indices are relative to the start of the text
+corresponding to the PangoGlyphString.
+
+<!-- ##### STRUCT PangoGlyphItem ##### -->
+<para>
+A #PangoGlyphItem is a pair of a #PangoItem and the glyphs
+resulting from shaping the text corresponding to an item.
+As an example of the usage of #PangoGlyphItem, the results
+of shaping text with #PangoLayout is a list of #PangoLayoutLine,
+each of which contains a list of #PangoGlyphItem.
+</para>
+
+@item: a #PangoItem structure that provides information
+       about a segment of text.
+@glyphs: the glyphs obtained by shaping the text
+         corresponding to @item.
+
+<!-- ##### STRUCT PangoGlyphItemIter ##### -->
+<para>
+A #PangoGlyphItemIter is an iterator over the clusters in a
+#PangoGlyphItem.  The <firstterm>forward direction</firstterm> of the
+iterator is the logical direction of text.  That is, with increasing
+@start_index and @start_char values.  If @glyph_item is right-to-left
+(that is, if <literal>@glyph_item->item->analysis.level</literal> is odd),
+then @start_glyph decreases as the iterator moves forward.  Moreover,
+in right-to-left cases, @start_glyph is greater than @end_glyph.
+
+An iterator should be initialized using either of
+pango_glyph_item_iter_init_start() and
+pango_glyph_item_iter_init_end(), for forward and backward iteration
+respectively, and walked over using any desired mixture of
+pango_glyph_item_iter_next_cluster() and
+pango_glyph_item_iter_prev_cluster().  A common idiom for doing a
+forward iteration over the clusters is:
+<programlisting>
+PangoGlyphItemIter cluster_iter;
+gboolean have_cluster;
+
+for (have_cluster = pango_glyph_item_iter_init_start (&amp;cluster_iter,
+                                                      glyph_item, text);
+     have_cluster;
+     have_cluster = pango_glyph_item_iter_next_cluster (&amp;cluster_iter))
+{
+  ...
+}
+</programlisting>
+
+Note that @text is the start of the text for layout, which is then
+indexed by <literal>@glyph_item->item->offset</literal> to get to the
+text of @glyph_item.  The @start_index and @end_index values can directly
+index into @text.  The @start_glyph, @end_glyph, @start_char, and @end_char
+values however are zero-based for the @glyph_item.  For each cluster, the
+item pointed at by the start variables is included in the cluster while
+the one pointed at by end variables is not.
+
+None of the members of a #PangoGlyphItemIter should be modified manually.
+
+</para>
+
+@glyph_item: the #PangoGlyphItem this iterator iterates over
+@text: the UTF-8 text that @glyph_item refers to
+@start_glyph: starting glyph of the cluster
+@start_index: starting text index of the cluster
+@start_char: starting number of characters of the cluster
+@end_glyph: ending glyph of the cluster
+@end_index: ending text index of the cluster
+@end_char: ending number of characters of the cluster
+@Since: 1.22
+
+<!-- ##### MACRO PANGO_TYPE_GLYPH_STRING ##### -->
+<para>
+The #GObject type for #PangoGlyphString.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_glyph_string_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_copy ##### -->
+<para>
+
+</para>
+
+@string: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_set_size ##### -->
+<para>
+
+</para>
+
+@string: 
+@new_len: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_free ##### -->
+<para>
+
+</para>
+
+@string: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_extents ##### -->
+<para>
+
+</para>
+
+@glyphs: 
+@font: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_extents_range ##### -->
+<para>
+
+</para>
+
+@glyphs: 
+@start: 
+@end: 
+@font: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_get_width ##### -->
+<para>
+
+</para>
+
+@glyphs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_index_to_x ##### -->
+<para>
+
+</para>
+
+@glyphs: 
+@text: 
+@length: 
+@analysis: 
+@index_: 
+@trailing: 
+@x_pos: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_x_to_index ##### -->
+<para>
+
+</para>
+
+@glyphs: 
+@text: 
+@length: 
+@analysis: 
+@x_pos: 
+@index_: 
+@trailing: 
+
+
+<!-- ##### FUNCTION pango_glyph_string_get_logical_widths ##### -->
+<para>
+
+</para>
+
+@glyphs: 
+@text: 
+@length: 
+@embedding_level: 
+@logical_widths: 
+
+
+<!-- ##### MACRO PANGO_TYPE_GLYPH_ITEM ##### -->
+<para>
+The #GObject type for #PangoGlyphItem.
+</para>
+
+@Since: 1.20
+
+
+<!-- ##### FUNCTION pango_glyph_item_copy ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_free ##### -->
+<para>
+
+</para>
+
+@glyph_item: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_split ##### -->
+<para>
+
+</para>
+
+@orig: 
+@text: 
+@split_index: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_apply_attrs ##### -->
+<para>
+
+</para>
+
+@glyph_item: 
+@text: 
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_letter_space ##### -->
+<para>
+
+</para>
+
+@glyph_item: 
+@text: 
+@log_attrs: 
+@letter_spacing: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_get_logical_widths ##### -->
+<para>
+
+</para>
+
+@glyph_item: 
+@text: 
+@logical_widths: 
+
+
+<!-- ##### MACRO PANGO_TYPE_GLYPH_ITEM_ITER ##### -->
+<para>
+The #GObject type for #PangoGlyphItemIter.
+</para>
+
+@Since: 1.22
+
+
+<!-- ##### FUNCTION pango_glyph_item_iter_copy ##### -->
+<para>
+
+</para>
+
+@orig: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_iter_free ##### -->
+<para>
+
+</para>
+
+@iter: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_iter_init_start ##### -->
+<para>
+
+</para>
+
+@iter: 
+@glyph_item: 
+@text: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_iter_init_end ##### -->
+<para>
+
+</para>
+
+@iter: 
+@glyph_item: 
+@text: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_iter_next_cluster ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_glyph_item_iter_prev_cluster ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
diff --git a/docs/tmpl/layout.sgml b/docs/tmpl/layout.sgml
new file mode 100755 (executable)
index 0000000..c60f9d5
--- /dev/null
@@ -0,0 +1,913 @@
+<!-- ##### SECTION Title ##### -->
+Layout Objects
+
+<!-- ##### SECTION Short_Description ##### -->
+High-level layout driver objects
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+While complete access to the layout capabilities of Pango is provided
+using the detailed interfaces for itemization and shaping, using
+that functionality directly involves writing a fairly large amount
+of code. The objects and functions in this section provide a
+high-level driver for formatting entire paragraphs of text
+at once.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoLayout ##### -->
+<para>
+The #PangoLayout structure represents an entire paragraph
+of text. It is initialized with a #PangoContext, UTF-8 string
+and set of attributes for that string. Once that is done, the
+set of formatted lines can be extracted from the object,
+the layout can be rendered, and conversion between logical
+character positions within the layout's text, and the physical
+position of the resulting glyphs can be made.
+</para>
+
+<para>
+There are also a number of parameters to adjust the formatting
+of a #PangoLayout, which are illustrated in <xref linkend="parameters"/>.
+It is possible, as well, to ignore the 2-D setup, and simply
+treat the results of a #PangoLayout as a list of lines.
+</para>
+
+<figure id="parameters">
+<title>Adjustable parameters for a PangoLayout</title>
+<graphic fileref="layout.gif" format="GIF"></graphic>
+</figure>
+
+<para>
+The #PangoLayout structure is opaque, and has no user-visible
+fields.
+</para>
+
+
+<!-- ##### STRUCT PangoLayoutIter ##### -->
+<para>
+A #PangoLayoutIter structure can be used to
+iterate over the visual extents of a #PangoLayout. 
+</para>
+<para>
+The #PangoLayoutIter structure is opaque, and 
+has no user-visible fields.
+</para>
+
+
+<!-- ##### FUNCTION pango_layout_new ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_copy ##### -->
+<para>
+
+</para>
+
+@src: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_context ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_context_changed ##### -->
+<para>
+
+</para>
+
+@layout: 
+
+
+<!-- ##### FUNCTION pango_layout_set_text ##### -->
+<para>
+
+</para>
+
+@layout: 
+@text: 
+@length: 
+
+
+<!-- ##### FUNCTION pango_layout_get_text ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_markup ##### -->
+<para>
+
+</para>
+
+@layout: 
+@markup: 
+@length: 
+
+
+<!-- ##### FUNCTION pango_layout_set_markup_with_accel ##### -->
+<para>
+
+</para>
+
+@layout: 
+@markup: 
+@length: 
+@accel_marker: 
+@accel_char: 
+
+
+<!-- ##### FUNCTION pango_layout_set_attributes ##### -->
+<para>
+
+</para>
+
+@layout: 
+@attrs: 
+
+
+<!-- ##### FUNCTION pango_layout_get_attributes ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_font_description ##### -->
+<para>
+
+</para>
+
+@layout: 
+@desc: 
+
+
+<!-- ##### FUNCTION pango_layout_get_font_description ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_width ##### -->
+<para>
+
+</para>
+
+@layout: 
+@width: 
+
+
+<!-- ##### FUNCTION pango_layout_get_width ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_height ##### -->
+<para>
+
+</para>
+
+@layout: 
+@height: 
+
+
+<!-- ##### FUNCTION pango_layout_get_height ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_wrap ##### -->
+<para>
+
+</para>
+
+@layout: 
+@wrap: 
+
+
+<!-- ##### FUNCTION pango_layout_get_wrap ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_is_wrapped ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### ENUM PangoWrapMode ##### -->
+<para>
+A #PangoWrapMode describes how to wrap the lines of a #PangoLayout to the desired width.
+</para>
+
+@PANGO_WRAP_WORD: wrap lines at word boundaries.
+@PANGO_WRAP_CHAR: wrap lines at character boundaries.
+@PANGO_WRAP_WORD_CHAR: wrap lines at word boundaries, but fall back to character boundaries if there is not 
+enough space for a full word.
+
+<!-- ##### MACRO PANGO_TYPE_WRAP_MODE ##### -->
+<para>
+The #GObject type for #PangoWrapMode.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_layout_set_ellipsize ##### -->
+<para>
+
+</para>
+
+@layout: 
+@ellipsize: 
+
+
+<!-- ##### FUNCTION pango_layout_get_ellipsize ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_is_ellipsized ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### ENUM PangoEllipsizeMode ##### -->
+<para>
+
+</para>
+
+@PANGO_ELLIPSIZE_NONE: 
+@PANGO_ELLIPSIZE_START: 
+@PANGO_ELLIPSIZE_MIDDLE: 
+@PANGO_ELLIPSIZE_END: 
+
+<!-- ##### MACRO PANGO_TYPE_ELLIPSIZE_MODE ##### -->
+<para>
+The #GObject type for #PangoEllipsizeMode.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_layout_set_indent ##### -->
+<para>
+
+</para>
+
+@layout: 
+@indent: 
+
+
+<!-- ##### FUNCTION pango_layout_get_indent ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_spacing ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_spacing ##### -->
+<para>
+
+</para>
+
+@layout: 
+@spacing: 
+
+
+<!-- ##### FUNCTION pango_layout_set_justify ##### -->
+<para>
+
+</para>
+
+@layout: 
+@justify: 
+
+
+<!-- ##### FUNCTION pango_layout_get_justify ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_auto_dir ##### -->
+<para>
+
+</para>
+
+@layout: 
+@auto_dir: 
+
+
+<!-- ##### FUNCTION pango_layout_get_auto_dir ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_alignment ##### -->
+<para>
+
+</para>
+
+@layout: 
+@alignment: 
+
+
+<!-- ##### FUNCTION pango_layout_get_alignment ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_tabs ##### -->
+<para>
+
+</para>
+
+@layout: 
+@tabs: 
+
+
+<!-- ##### FUNCTION pango_layout_get_tabs ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_set_single_paragraph_mode ##### -->
+<para>
+
+</para>
+
+@layout: 
+@setting: 
+
+
+<!-- ##### FUNCTION pango_layout_get_single_paragraph_mode ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### ENUM PangoAlignment ##### -->
+<para>
+A #PangoAlignment describes how to align the lines of a #PangoLayout within the
+available space. If the #PangoLayout is set to justify
+using pango_layout_set_justify(), this only has effect for partial lines.
+</para>
+
+@PANGO_ALIGN_LEFT: Put all available space on the right
+@PANGO_ALIGN_CENTER: Center the line within the available space
+@PANGO_ALIGN_RIGHT: Put all available space on the left
+
+<!-- ##### MACRO PANGO_TYPE_ALIGNMENT ##### -->
+<para>
+The #GObject type for #PangoAlignment.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_layout_get_unknown_glyphs_count ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_log_attrs ##### -->
+<para>
+
+</para>
+
+@layout: 
+@attrs: 
+@n_attrs: 
+
+
+<!-- ##### FUNCTION pango_layout_index_to_pos ##### -->
+<para>
+
+</para>
+
+@layout: 
+@index_: 
+@pos: 
+
+
+<!-- ##### FUNCTION pango_layout_index_to_line_x ##### -->
+<para>
+
+</para>
+
+@layout: 
+@index_: 
+@trailing: 
+@line: 
+@x_pos: 
+
+
+<!-- ##### FUNCTION pango_layout_xy_to_index ##### -->
+<para>
+
+</para>
+
+@layout: 
+@x: 
+@y: 
+@index_: 
+@trailing: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_cursor_pos ##### -->
+<para>
+
+</para>
+
+@layout: 
+@index_: 
+@strong_pos: 
+@weak_pos: 
+
+
+<!-- ##### FUNCTION pango_layout_move_cursor_visually ##### -->
+<para>
+
+</para>
+
+@layout: 
+@strong: 
+@old_index: 
+@old_trailing: 
+@direction: 
+@new_index: 
+@new_trailing: 
+
+
+<!-- ##### FUNCTION pango_layout_get_extents ##### -->
+<para>
+
+</para>
+
+@layout: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_get_pixel_extents ##### -->
+<para>
+
+</para>
+
+@layout: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_get_size ##### -->
+<para>
+
+</para>
+
+@layout: 
+@width: 
+@height: 
+
+
+<!-- ##### FUNCTION pango_layout_get_pixel_size ##### -->
+<para>
+
+</para>
+
+@layout: 
+@width: 
+@height: 
+
+
+<!-- ##### FUNCTION pango_layout_get_baseline ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_line_count ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_line ##### -->
+<para>
+
+</para>
+
+@layout: 
+@line: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_line_readonly ##### -->
+<para>
+
+</para>
+
+@layout: 
+@line: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_lines ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_lines_readonly ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_get_iter ##### -->
+<para>
+
+</para>
+
+@layout: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_copy ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_free ##### -->
+<para>
+
+</para>
+
+@iter: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_next_run ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_next_char ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_next_cluster ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_next_line ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_at_last_line ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_index ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_baseline ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_run ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_run_readonly ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_line ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_line_readonly ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_layout ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_char_extents ##### -->
+<para>
+
+</para>
+
+@iter: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_cluster_extents ##### -->
+<para>
+
+</para>
+
+@iter: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_run_extents ##### -->
+<para>
+
+</para>
+
+@iter: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_line_yrange ##### -->
+<para>
+
+</para>
+
+@iter: 
+@y0_: 
+@y1_: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_line_extents ##### -->
+<para>
+
+</para>
+
+@iter: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_iter_get_layout_extents ##### -->
+<para>
+
+</para>
+
+@iter: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### STRUCT PangoLayoutLine ##### -->
+<para>
+The #PangoLayoutLine structure represents one of the lines resulting
+from laying out a paragraph via #PangoLayout. #PangoLayoutLine
+structures are obtained by calling pango_layout_get_line() and
+are only valid until the text, attributes, or settings of the
+parent #PangoLayout are modified.
+</para>
+<para>
+Routines for rendering PangoLayout objects are provided in
+code specific to each rendering system.
+</para>
+
+@layout: the parent layout for this line
+@start_index: the start of the line as byte index into @layout->text
+@length: the length of the line in bytes
+@runs: a list containing the runs of the line in visual order
+@is_paragraph_start: %TRUE if this is the first line of the paragraph
+@resolved_dir: the resolved #PangoDirection of the line
+
+<!-- ##### TYPEDEF PangoLayoutRun ##### -->
+<para>
+The #PangoLayoutRun structure represents a single run within
+a #PangoLayoutLine; it is simply an alternate name for
+#PangoGlyphItem.
+See the #PangoGlyphItem docs for details on the fields.
+</para>
+
+
+<!-- ##### FUNCTION pango_layout_line_ref ##### -->
+<para>
+
+</para>
+
+@line: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_line_unref ##### -->
+<para>
+
+</para>
+
+@line: 
+
+
+<!-- ##### FUNCTION pango_layout_line_get_extents ##### -->
+<para>
+
+</para>
+
+@line: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_line_get_pixel_extents ##### -->
+<para>
+
+</para>
+
+@layout_line: 
+@ink_rect: 
+@logical_rect: 
+
+
+<!-- ##### FUNCTION pango_layout_line_index_to_x ##### -->
+<para>
+
+</para>
+
+@line: 
+@index_: 
+@trailing: 
+@x_pos: 
+
+
+<!-- ##### FUNCTION pango_layout_line_x_to_index ##### -->
+<para>
+
+</para>
+
+@line: 
+@x_pos: 
+@index_: 
+@trailing: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_layout_line_get_x_ranges ##### -->
+<para>
+
+</para>
+
+@line: 
+@start_index: 
+@end_index: 
+@ranges: 
+@n_ranges: 
+
+
diff --git a/docs/tmpl/main.sgml b/docs/tmpl/main.sgml
new file mode 100755 (executable)
index 0000000..3bfcb99
--- /dev/null
@@ -0,0 +1,450 @@
+<!-- ##### SECTION Title ##### -->
+Rendering
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions to run the rendering pipeline
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The Pango rendering pipeline takes a string of
+Unicode characters and converts it into glyphs.
+The functions described in this section accomplish
+various steps of this process.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoContext ##### -->
+<para>
+The #PangoContext structure stores global information
+used to control the itemization process. 
+</para>
+
+
+<!-- ##### STRUCT PangoItem ##### -->
+<para>
+The #PangoItem structure stores information about
+a segment of text. It contains the following fields:
+</para>
+
+@offset: the offset of the segment from the beginning of the
+         string in bytes.
+@length: the length of the segment in bytes.
+@num_chars: the length of the segment in characters.
+@analysis: the properties of the segment.
+
+<!-- ##### STRUCT PangoAnalysis ##### -->
+<para>
+The #PangoAnalysis structure stores information about
+the properties of a segment of text. It has the following
+fields:
+</para>
+
+@shape_engine: the engine for doing rendering-system-dependent processing.
+@lang_engine: the engine for doing rendering-system-independent processing.
+@font: the font for this segment.
+@level: the bidirectional level for this segment.
+@gravity: the glyph orientation for this segment (A #PangoGravity).
+@flags: boolean flags for this segment (currently only one) (Since: 1.16).
+@script: the detected script for this segment (A #PangoScript) (Since: 1.18).
+@language: the detected language for this segment.
+@extra_attrs: extra attributes for this segment.
+
+<!-- ##### MACRO PANGO_ANALYSIS_FLAG_CENTERED_BASELINE ##### -->
+<para>
+Whether the segment should be shifted to center around the baseline.
+Used in vertical writing directions mostly.
+
+Since: 1.16
+</para>
+
+
+
+<!-- ##### MACRO PANGO_TYPE_DIRECTION ##### -->
+<para>
+The #GObject type for #PangoDirection.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_itemize ##### -->
+<para>
+
+</para>
+
+@context: 
+@text: 
+@start_index: 
+@length: 
+@attrs: 
+@cached_iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_itemize_with_base_dir ##### -->
+<para>
+
+</para>
+
+@context: 
+@base_dir: 
+@text: 
+@start_index: 
+@length: 
+@attrs: 
+@cached_iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_item_free ##### -->
+<para>
+
+</para>
+
+@item: 
+
+
+<!-- ##### FUNCTION pango_item_copy ##### -->
+<para>
+
+</para>
+
+@item: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_item_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_item_split ##### -->
+<para>
+
+</para>
+
+@orig: 
+@split_index: 
+@split_offset: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_reorder_items ##### -->
+<para>
+
+</para>
+
+@logical_items: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_font_map ##### -->
+<para>
+
+</para>
+
+@context: 
+@font_map: 
+
+
+<!-- ##### FUNCTION pango_context_get_font_map ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_get_font_description ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_font_description ##### -->
+<para>
+
+</para>
+
+@context: 
+@desc: 
+
+
+<!-- ##### FUNCTION pango_context_get_language ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_language ##### -->
+<para>
+
+</para>
+
+@context: 
+@language: 
+
+
+<!-- ##### FUNCTION pango_context_get_base_dir ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_base_dir ##### -->
+<para>
+
+</para>
+
+@context: 
+@direction: 
+
+
+<!-- ##### FUNCTION pango_context_get_base_gravity ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_base_gravity ##### -->
+<para>
+
+</para>
+
+@context: 
+@gravity: 
+
+
+<!-- ##### FUNCTION pango_context_get_gravity ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_get_gravity_hint ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_gravity_hint ##### -->
+<para>
+
+</para>
+
+@context: 
+@hint: 
+
+
+<!-- ##### FUNCTION pango_context_get_matrix ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_set_matrix ##### -->
+<para>
+
+</para>
+
+@context: 
+@matrix: 
+
+
+<!-- ##### FUNCTION pango_context_load_font ##### -->
+<para>
+
+</para>
+
+@context: 
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_load_fontset ##### -->
+<para>
+
+</para>
+
+@context: 
+@desc: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_get_metrics ##### -->
+<para>
+
+</para>
+
+@context: 
+@desc: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_context_list_families ##### -->
+<para>
+
+</para>
+
+@context: 
+@families: 
+@n_families: 
+
+
+<!-- ##### FUNCTION pango_break ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@analysis: 
+@attrs: 
+@attrs_len: 
+
+
+<!-- ##### FUNCTION pango_get_log_attrs ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@level: 
+@language: 
+@log_attrs: 
+@attrs_len: 
+
+
+<!-- ##### FUNCTION pango_find_paragraph_boundary ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@paragraph_delimiter_index: 
+@next_paragraph_start: 
+
+
+<!-- ##### FUNCTION pango_default_break ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@analysis: 
+@attrs: 
+@attrs_len: 
+
+
+<!-- ##### STRUCT PangoLogAttr ##### -->
+<para>
+The #PangoLogAttr structure stores information
+about the attributes of a single character.
+</para>
+
+@is_line_break: if set, can break line in front of character
+@is_mandatory_break: if set, must break line in front of character
+@is_char_break: if set, can break here when doing character wrapping
+@is_white: is whitespace character
+@is_cursor_position: if set, cursor can appear in front of character.
+       i.e. this is a grapheme boundary, or the first character
+        in the text.
+       This flag implements Unicode's
+       <ulink url="http://www.unicode.org/reports/tr29/">Grapheme
+       Cluster Boundaries</ulink> semantics.
+@is_word_start: is first character in a word
+@is_word_end: is first non-word char after a word
+       Note that in degenerate cases, you could have both @is_word_start
+       and @is_word_end set for some character.
+@is_sentence_boundary: is a sentence boundary.
+        There are two ways to divide sentences. The first assigns all
+       inter-sentence whitespace/control/format chars to some sentence,
+       so all chars are in some sentence; @is_sentence_boundary denotes
+       the boundaries there. The second way doesn't assign
+       between-sentence spaces, etc. to any sentence, so
+       @is_sentence_start/@is_sentence_end mark the boundaries
+       of those sentences.
+@is_sentence_start: is first character in a sentence
+@is_sentence_end: is first char after a sentence.
+       Note that in degenerate cases, you could have both @is_sentence_start
+       and @is_sentence_end set for some character. (e.g. no space after a
+       period, so the next sentence starts right away)
+@backspace_deletes_character: if set, backspace deletes one character
+                              rather than the entire grapheme cluster. This
+                              field is only meaningful on grapheme
+                              boundaries (where @is_cursor_position is
+                              set).  In some languages, the full grapheme
+                              (e.g.  letter + diacritics) is considered a
+                              unit, while in others, each decomposed
+                              character in the grapheme is a unit. In the
+                              default implementation of pango_break(), this
+                              bit is set on all grapheme boundaries except
+                              those following Latin, Cyrillic or Greek base
+                              characters.
+@is_expandable_space: is a whitespace character that can possibly be
+                      expanded for justification purposes. (Since: 1.18)
+@is_word_boundary: is a word boundary.
+       More specifically, means that this is not a position in the middle
+       of a word.  For example, both sides of a punctuation mark are
+       considered word boundaries.  This flag is particularly useful when
+       selecting text word-by-word.
+       This flag implements Unicode's
+       <ulink url="http://www.unicode.org/reports/tr29/">Word
+       Boundaries</ulink> semantics.
+       (Since: 1.22)
+
+<!-- ##### FUNCTION pango_shape ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@analysis: 
+@glyphs: 
+
+
diff --git a/docs/tmpl/modules.sgml b/docs/tmpl/modules.sgml
new file mode 100755 (executable)
index 0000000..0fe8c42
--- /dev/null
@@ -0,0 +1,87 @@
+<!-- ##### SECTION Title ##### -->
+Modules
+
+<!-- ##### SECTION Short_Description ##### -->
+Support for loadable modules
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Functions and macros in this section are used to support loading dynamic
+modules that add engines to Pango at run time.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoIncludedModule ##### -->
+<para>
+The #PangoIncludedModule structure for a statically linked module 
+contains the functions that would otherwise be loaded from a dynamically 
+loaded module.
+</para>
+
+@list: a function that lists the engines defined in this module.
+@init: a function to initialize the module.
+@exit: a function to finalize the module.
+@create: a function to create an engine, given the engine name.
+
+<!-- ##### STRUCT PangoMap ##### -->
+<para>
+A #PangoMap structure can be used to determine the engine to
+use for each character.
+</para>
+
+
+<!-- ##### STRUCT PangoMapEntry ##### -->
+<para>
+A #PangoMapEntry contains information about the engine that should be used 
+for the codepoint to which this entry belongs and also whether the engine 
+matches the language tag for this entry's map exactly or just approximately.
+</para>
+
+
+<!-- ##### FUNCTION pango_find_map ##### -->
+<para>
+
+</para>
+
+@language: 
+@engine_type_id: 
+@render_type_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_map_get_engine ##### -->
+<para>
+
+</para>
+
+@map: 
+@script: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_map_get_engines ##### -->
+<para>
+
+</para>
+
+@map: 
+@script: 
+@exact_engines: 
+@fallback_engines: 
+
+
+<!-- ##### FUNCTION pango_module_register ##### -->
+<para>
+
+</para>
+
+@module: 
+
+
diff --git a/docs/tmpl/opentype.sgml b/docs/tmpl/opentype.sgml
new file mode 100755 (executable)
index 0000000..ca4b53b
--- /dev/null
@@ -0,0 +1,551 @@
+<!-- ##### SECTION Title ##### -->
+OpenType Font Handling
+
+<!-- ##### SECTION Short_Description ##### -->
+Obtaining information from OpenType tables
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Functions and macros in this section are used to implement the OpenType Layout
+features and algorithms.  These are mostly useful when writing Fontconfig-based
+shaping engines
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Unstable
+
+<!-- ##### TYPEDEF PangoOTTag ##### -->
+<para>
+The <type>PangoOTTag</type> typedef is used to represent TrueType and OpenType
+four letter tags inside Pango. Use PANGO_OT_TAG_MAKE()
+or PANGO_OT_TAG_MAKE_FROM_STRING() macros to create <type>PangoOTTag</type>s manually.
+</para>
+
+
+<!-- ##### STRUCT PangoOTInfo ##### -->
+<para>
+The #PangoOTInfo struct contains the various 
+tables associated with an OpenType font. It contains only private fields and
+should only be accessed via the <function>pango_ot_info_*</function> functions
+which are documented below. To obtain a #PangoOTInfo,
+use pango_ot_info_new().
+</para>
+
+
+<!-- ##### STRUCT PangoOTBuffer ##### -->
+<para>
+The #PangoOTBuffer structure is used to store strings of glyphs associated
+with a #PangoFcFont, suitable for OpenType layout processing.  It contains
+only private fields and should only be accessed via the
+<function>pango_ot_buffer_*</function> functions which are documented below.
+To obtain a #PangoOTBuffer, use pango_ot_buffer_new().
+</para>
+
+
+<!-- ##### STRUCT PangoOTGlyph ##### -->
+<para>
+The #PangoOTGlyph structure represents a single glyph together with
+information used for OpenType layout processing of the glyph.
+It contains the following fields.
+</para>
+
+@glyph: the glyph itself.
+@properties: the properties value, identifying which features should be
+            applied on this glyph.  See pango_ruleset_add_feature().
+@cluster: the cluster that this glyph belongs to.
+@component: a component value, set by the OpenType layout engine.
+@ligID: a ligature index value, set by the OpenType layout engine.
+@internal: for Pango internal use
+
+<!-- ##### STRUCT PangoOTRuleset ##### -->
+<para>
+The #PangoOTRuleset structure holds a
+set of features selected from the tables in an OpenType font.
+(A feature is an operation such as adjusting glyph positioning
+that should be applied to a text feature such as a certain
+type of accent.) A #PangoOTRuleset
+is created with pango_ot_ruleset_new(), features are added
+to it with pango_ot_ruleset_add_feature(), then it is
+applied to a #PangoGlyphString with pango_ot_ruleset_shape().
+</para>
+
+
+<!-- ##### STRUCT PangoOTRulesetDescription ##### -->
+<para>
+The #PangoOTRuleset structure holds all the information needed
+to build a complete #PangoOTRuleset from an OpenType font.
+The main use of this struct is to act as the key for a per-font
+hash of rulesets.  The user populates a ruleset description and
+gets the ruleset using pango_ot_ruleset_get_for_description()
+or create a new one using pango_ot_ruleset_new_from_description().
+</para>
+
+@script: a #PangoScript.
+@language: a #PangoLanguage.
+@static_gsub_features: static map of GSUB features, or %NULL.
+@n_static_gsub_features: length of @static_gsub_features, or 0.
+@static_gpos_features: static map of GPOS features, or %NULL.
+@n_static_gpos_features: length of @static_gpos_features, or 0.
+@other_features: map of extra features to add to both GSUB and GPOS, or %NULL.
+                 Unlike the static maps, this pointer need not live beyond
+                the life of function calls taking this struct.
+@n_other_features: length of @other_features, or 0.
+@Since: 1.18
+
+<!-- ##### ENUM PangoOTTableType ##### -->
+<para>
+The <type>PangoOTTableType</type> enumeration values are used to
+identify the various OpenType tables in the
+<function>pango_ot_info_*</function> functions.
+</para>
+
+@PANGO_OT_TABLE_GSUB: The GSUB table.
+@PANGO_OT_TABLE_GPOS: The GPOS table.
+
+<!-- ##### STRUCT PangoOTFeatureMap ##### -->
+<para>
+The <type>PangoOTFeatureMap</type> typedef is used to represent an OpenType
+feature with the property bit associated with it.  The feature tag is
+represented as a char array instead of a #PangoOTTag for convenience.
+</para>
+
+@feature_name: feature tag in represented as four-letter ASCII string.
+@property_bit: the property bit to use for this feature.  See
+              pango_ot_ruleset_add_feature() for details.
+@Since: 1.18
+
+<!-- ##### MACRO PANGO_OT_TAG_MAKE ##### -->
+<para>
+Creates a #PangoOTTag from four characters.  This is similar and
+compatible with the <function>FT_MAKE_TAG()</function> macro from
+FreeType.
+</para>
+
+@c1: First character.
+@c2: Second character.
+@c3: Third character.
+@c4: Fourth character.
+
+
+<!-- ##### MACRO PANGO_OT_TAG_MAKE_FROM_STRING ##### -->
+<para>
+Creates a #PangoOTTag from a string. The string should be at least
+four characters long (pad with space characters if needed), and need
+not be nul-terminated.  This is a convenience wrapper around
+PANGO_OT_TAG_MAKE(), but cannot be used in certain situations, for
+example, as a switch expression, as it dereferences pointers.
+</para>
+
+@s: The string representation of the tag.
+
+
+<!-- ##### MACRO PANGO_OT_ALL_GLYPHS ##### -->
+<para>
+This is used as the property bit in pango_ot_ruleset_add_feature() when a
+feature should be applied to all glyphs.
+</para>
+
+@Since: 1.16
+
+
+<!-- ##### MACRO PANGO_OT_NO_FEATURE ##### -->
+<para>
+This is used as a feature index that represent no feature, that is, should be
+skipped.  It may be returned as feature index by pango_ot_info_find_feature()
+if the feature is not found, and pango_ot_rulset_add_feature() function
+automatically skips this value, so no special handling is required by the
+user.
+</para>
+
+@Since: 1.18
+
+
+<!-- ##### MACRO PANGO_OT_NO_SCRIPT ##### -->
+<para>
+This is used as a script index that represent no script, that is, when the
+requested script was not found, and a default ('DFLT') script was not found
+either.  It may be returned as script index by pango_ot_info_find_script()
+if the script or a default script are not found, all other functions
+taking a script index essentially return if the input script index is
+this value, so no special handling is required by the user.
+</para>
+
+@Since: 1.18
+
+
+<!-- ##### MACRO PANGO_OT_DEFAULT_LANGUAGE ##### -->
+<para>
+This is used as the language index in pango_ot_info_find_feature() when
+the default language system of the script is desired.
+
+It is also returned by pango_ot_info_find_language() if the requested language
+is not found, or the requested language tag was PANGO_OT_TAG_DEFAULT_LANGUAGE.
+The end result is that one can always call pango_ot_tag_from_language()
+followed by pango_ot_info_find_language() and pass the result to
+pango_ot_info_find_feature() without having to worry about falling back to
+default language system explicitly.
+</para>
+
+@Since: 1.16
+
+
+<!-- ##### MACRO PANGO_OT_TAG_DEFAULT_LANGUAGE ##### -->
+<para>
+This is a #PangoOTTag representing a special language tag 'dflt'.  It is
+returned as language tag by pango_ot_tag_from_language() if the requested
+language is not found.  It is safe to pass this value to
+pango_ot_info_find_language() as that function falls back to returning default
+language-system if the requested language tag is not found.
+</para>
+
+@Since: 1.18
+
+
+<!-- ##### MACRO PANGO_OT_TAG_DEFAULT_SCRIPT ##### -->
+<para>
+This is a #PangoOTTag representing the special script tag 'DFLT'.  It is
+returned as script tag by pango_ot_tag_from_script() if the requested script
+is not found.
+</para>
+
+@Since: 1.18
+
+
+<!-- ##### FUNCTION pango_ot_info_get ##### -->
+<para>
+
+</para>
+
+@face: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_info_find_script ##### -->
+<para>
+
+</para>
+
+@info: 
+@table_type: 
+@script_tag: 
+@script_index: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_info_find_language ##### -->
+<para>
+
+</para>
+
+@info: 
+@table_type: 
+@script_index: 
+@language_tag: 
+@language_index: 
+@required_feature_index: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_info_find_feature ##### -->
+<para>
+
+</para>
+
+@info: 
+@table_type: 
+@feature_tag: 
+@script_index: 
+@language_index: 
+@feature_index: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_info_list_scripts ##### -->
+<para>
+
+</para>
+
+@info: 
+@table_type: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_info_list_languages ##### -->
+<para>
+
+</para>
+
+@info: 
+@table_type: 
+@script_index: 
+@language_tag: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_info_list_features ##### -->
+<para>
+
+</para>
+
+@info: 
+@table_type: 
+@tag: 
+@script_index: 
+@language_index: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_new ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_destroy ##### -->
+<para>
+
+</para>
+
+@buffer: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_clear ##### -->
+<para>
+
+</para>
+
+@buffer: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_add_glyph ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@glyph: 
+@properties: 
+@cluster: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_set_rtl ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@rtl: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_set_zero_width_marks ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@zero_width_marks: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_get_glyphs ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@glyphs: 
+@n_glyphs: 
+
+
+<!-- ##### FUNCTION pango_ot_buffer_output ##### -->
+<para>
+
+</para>
+
+@buffer: 
+@glyphs: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_get_for_description ##### -->
+<para>
+
+</para>
+
+@info: 
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_new ##### -->
+<para>
+
+</para>
+
+@info: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_new_for ##### -->
+<para>
+
+</para>
+
+@info: 
+@script: 
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_new_from_description ##### -->
+<para>
+
+</para>
+
+@info: 
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_add_feature ##### -->
+<para>
+
+</para>
+
+@ruleset: 
+@table_type: 
+@feature_index: 
+@property_bit: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_maybe_add_feature ##### -->
+<para>
+
+</para>
+
+@ruleset: 
+@table_type: 
+@feature_tag: 
+@property_bit: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_maybe_add_features ##### -->
+<para>
+
+</para>
+
+@ruleset: 
+@table_type: 
+@features: 
+@n_features: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_get_feature_count ##### -->
+<para>
+
+</para>
+
+@ruleset: 
+@n_gsub_features: 
+@n_gpos_features: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_substitute ##### -->
+<para>
+
+</para>
+
+@ruleset: 
+@buffer: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_position ##### -->
+<para>
+
+</para>
+
+@ruleset: 
+@buffer: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_description_copy ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_description_equal ##### -->
+<para>
+
+</para>
+
+@desc1: 
+@desc2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_description_free ##### -->
+<para>
+
+</para>
+
+@desc: 
+
+
+<!-- ##### FUNCTION pango_ot_ruleset_description_hash ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_tag_from_language ##### -->
+<para>
+
+</para>
+
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_tag_from_script ##### -->
+<para>
+
+</para>
+
+@script: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_tag_to_language ##### -->
+<para>
+
+</para>
+
+@language_tag: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_ot_tag_to_script ##### -->
+<para>
+
+</para>
+
+@script_tag: 
+@Returns: 
+
+
diff --git a/docs/tmpl/pango-engine-lang.sgml b/docs/tmpl/pango-engine-lang.sgml
new file mode 100755 (executable)
index 0000000..a5a91bf
--- /dev/null
@@ -0,0 +1,53 @@
+<!-- ##### SECTION Title ##### -->
+PangoEngineLang
+
+<!-- ##### SECTION Short_Description ##### -->
+Rendering-system independent script engines
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The <firstterm>language engines</firstterm> are rendering-system independent
+engines that determine line, word, and character breaks for character strings.
+These engines are used in pango_break().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Unstable
+
+<!-- ##### STRUCT PangoEngineLang ##### -->
+<para>
+</para>
+
+
+<!-- ##### STRUCT PangoEngineLangClass ##### -->
+<para>
+
+</para>
+
+@script_break: 
+
+<!-- ##### MACRO PANGO_ENGINE_TYPE_LANG ##### -->
+<para>
+A string constant defining the engine type
+for language engines.
+These engines derive from #PangoEngineLang.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_ENGINE_LANG_DEFINE_TYPE ##### -->
+<para>
+
+</para>
+
+@name: 
+@prefix: 
+@class_init: 
+@instance_init: 
+
+
diff --git a/docs/tmpl/pango-engine-shape.sgml b/docs/tmpl/pango-engine-shape.sgml
new file mode 100755 (executable)
index 0000000..5e66f2d
--- /dev/null
@@ -0,0 +1,54 @@
+<!-- ##### SECTION Title ##### -->
+PangoEngineShape
+
+<!-- ##### SECTION Short_Description ##### -->
+Rendering-system dependent script engines
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The <firstterm>shape engines</firstterm> are rendering-system dependent
+engines that convert character strings into glyph strings.
+These engines are used in pango_shape().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+Unstable
+
+<!-- ##### STRUCT PangoEngineShape ##### -->
+<para>
+</para>
+
+
+<!-- ##### STRUCT PangoEngineShapeClass ##### -->
+<para>
+
+</para>
+
+@script_shape: 
+@covers: 
+
+<!-- ##### MACRO PANGO_ENGINE_TYPE_SHAPE ##### -->
+<para>
+A string constant defining the engine type
+for shaping engines.
+These engines derive from #PangoEngineShape.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_ENGINE_SHAPE_DEFINE_TYPE ##### -->
+<para>
+
+</para>
+
+@name: 
+@prefix: 
+@class_init: 
+@instance_init: 
+
+
diff --git a/docs/tmpl/pango-renderer.sgml b/docs/tmpl/pango-renderer.sgml
new file mode 100755 (executable)
index 0000000..5444545
--- /dev/null
@@ -0,0 +1,243 @@
+<!-- ##### SECTION Title ##### -->
+PangoRenderer
+
+<!-- ##### SECTION Short_Description ##### -->
+Rendering driver base class
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#PangoRenderer is a base class that contains the necessary logic for
+rendering a #PangoLayout or #PangoLayoutLine. By subclassing
+#PangoRenderer and overriding operations such as @draw_glyphs and
+@draw_rectangle, renderers for particular font backends and
+destinations can be created.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoRenderer ##### -->
+<para>
+
+</para>
+
+@matrix: 
+
+<!-- ##### ENUM PangoRenderPart ##### -->
+<para>
+
+</para>
+
+@PANGO_RENDER_PART_FOREGROUND: 
+@PANGO_RENDER_PART_BACKGROUND: 
+@PANGO_RENDER_PART_UNDERLINE: 
+@PANGO_RENDER_PART_STRIKETHROUGH: 
+
+<!-- ##### MACRO PANGO_TYPE_RENDER_PART ##### -->
+<para>
+The #GObject type for #PangoRenderPart.
+</para>
+
+
+
+<!-- ##### STRUCT PangoRendererClass ##### -->
+<para>
+
+</para>
+
+@draw_glyphs: 
+@draw_rectangle: 
+@draw_error_underline: 
+@draw_shape: 
+@draw_trapezoid: 
+@draw_glyph: 
+@part_changed: 
+@begin: 
+@end: 
+@prepare_run: 
+@draw_glyph_item: 
+
+<!-- ##### FUNCTION pango_renderer_draw_layout ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@layout: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_layout_line ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@line: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_glyphs ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_glyph_item ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@text: 
+@glyph_item: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_rectangle ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@part: 
+@x: 
+@y: 
+@width: 
+@height: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_error_underline ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@x: 
+@y: 
+@width: 
+@height: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_trapezoid ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@part: 
+@y1_: 
+@x11: 
+@x21: 
+@y2: 
+@x12: 
+@x22: 
+
+
+<!-- ##### FUNCTION pango_renderer_draw_glyph ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@font: 
+@glyph: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_renderer_activate ##### -->
+<para>
+
+</para>
+
+@renderer: 
+
+
+<!-- ##### FUNCTION pango_renderer_deactivate ##### -->
+<para>
+
+</para>
+
+@renderer: 
+
+
+<!-- ##### FUNCTION pango_renderer_part_changed ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@part: 
+
+
+<!-- ##### FUNCTION pango_renderer_set_color ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@part: 
+@color: 
+
+
+<!-- ##### FUNCTION pango_renderer_get_color ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@part: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_renderer_set_matrix ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@matrix: 
+
+
+<!-- ##### FUNCTION pango_renderer_get_matrix ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_renderer_get_layout ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_renderer_get_layout_line ##### -->
+<para>
+
+</para>
+
+@renderer: 
+@Returns: 
+
+
diff --git a/docs/tmpl/pango-unused.sgml b/docs/tmpl/pango-unused.sgml
new file mode 100755 (executable)
index 0000000..0151c35
--- /dev/null
@@ -0,0 +1,8 @@
+<!-- ##### FUNCTION pango_atsui_font_get_atsu_font_id ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
diff --git a/docs/tmpl/pango-version.sgml b/docs/tmpl/pango-version.sgml
new file mode 100755 (executable)
index 0000000..230946d
--- /dev/null
@@ -0,0 +1,110 @@
+<!-- ##### SECTION Title ##### -->
+Version Checking
+
+<!-- ##### SECTION Short_Description ##### -->
+Tools for checking Pango version at compile- and run-time.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The capital-letter macros defined here can be used to check the version of
+Pango at compile-time, and to <firstterm>encode</firstterm> Pango versions into
+integers.
+
+The functions can be used to check the version of the linked Pango library
+at run-time.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO PANGO_VERSION_ENCODE ##### -->
+<para>
+This macro encodes the given Pango version into an integer.  The numbers
+returned by %PANGO_VERSION and pango_version() are encoded using this macro.
+Two encoded version numbers can be compared as integers.
+</para>
+
+@major: the major component of the version number
+@minor: the minor component of the version number
+@micro: the micro component of the version number
+
+
+<!-- ##### MACRO PANGO_VERSION ##### -->
+<para>
+The version of Pango available at compile-time, encoded using
+PANGO_VERSION_ENCODE().
+</para>
+
+
+
+<!-- ##### MACRO PANGO_VERSION_MAJOR ##### -->
+<para>
+The major component of the version of Pango available at compile-time.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_VERSION_MINOR ##### -->
+<para>
+The minor component of the version of Pango available at compile-time.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_VERSION_MICRO ##### -->
+<para>
+The micro component of the version of Pango available at compile-time.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_VERSION_STRING ##### -->
+<para>
+A string literal containing the version of Pango available at compile-time.
+</para>
+
+
+
+<!-- ##### MACRO PANGO_VERSION_CHECK ##### -->
+<para>
+Checks that the version of Pango available at compile-time is not older than
+the provided version number.
+</para>
+
+@major: the major component of the version number
+@minor: the minor component of the version number
+@micro: the micro component of the version number
+
+
+<!-- ##### FUNCTION pango_version ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_version_string ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_version_check ##### -->
+<para>
+
+</para>
+
+@required_major: 
+@required_minor: 
+@required_micro: 
+@Returns: 
+
+
diff --git a/docs/tmpl/pangocairo.sgml b/docs/tmpl/pangocairo.sgml
new file mode 100755 (executable)
index 0000000..6a90782
--- /dev/null
@@ -0,0 +1,436 @@
+<!-- ##### SECTION Title ##### -->
+Cairo Rendering
+
+<!-- ##### SECTION Short_Description ##### -->
+Rendering with the Cairo backend
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The <ulink url="http://cairographics.org">Cairo library</ulink> is a
+vector graphics library with a powerful rendering model. It has such
+features as anti-aliased primitives, alpha-compositing, and
+gradients. Multiple backends for Cairo are available, to allow
+rendering to images, to PDF files, and to the screen on X and on other
+windowing systems. The functions in this section allow using Pango
+to render to Cairo surfaces.
+</para>
+<para>
+Using Pango with Cairo is straightforward. A #PangoContext created
+with pango_cairo_font_map_create_context() can be used on any
+Cairo context (cairo_t), but needs to be updated to match the
+current transformation matrix and target surface of the Cairo context
+using pango_cairo_update_context(). The convenience functions
+pango_cairo_create_layout() and pango_cairo_update_layout() handle
+the common case where the program doesn't need to manipulate the
+properties of the #PangoContext.
+</para>
+<para>
+When you get the metrics of a layout or of a piece of a layout using
+functions such as pango_layout_get_extents(), the reported metrics
+are in user-space coordinates. If a piece of text is 10 units long,
+and you call cairo_scale (cr, 2.0), it still is more-or-less 10
+units long. However, the results will be affected by hinting
+(that is, the process of adjusting the text to look good on the
+pixel grid), so you shouldn't assume they are completely independent
+of the current transformation matrix. Note that the basic metrics
+functions in Pango report results in integer Pango units. To get
+to the floating point units used in Cairo divide by %PANGO_SCALE.
+</para>
+<example id="rotated-example">
+<title>Using Pango with Cairo</title>
+<programlisting>
+#<!-- -->include &lt;math.h>
+#<!-- -->include &lt;pango/pangocairo.h>
+
+static void
+draw_text (cairo_t *cr)
+{
+#<!-- -->define RADIUS 150
+#<!-- -->define N_WORDS 10
+#<!-- -->define FONT "Sans Bold 27"
+
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+  int i;
+
+  /* Center coordinates on the middle of the region we are drawing
+   */
+  cairo_translate (cr, RADIUS, RADIUS);
+
+  /* Create a PangoLayout, set the font and text */
+  layout = pango_cairo_create_layout (cr);
+  
+  pango_layout_set_text (layout, "Text", -1);
+  desc = pango_font_description_from_string (FONT);
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+
+  /* Draw the layout N_WORDS times in a circle */
+  for (i = 0; i &lt; N_WORDS; i++)
+    {
+      int width, height;
+      double angle = (360. * i) / N_WORDS;
+      double red;
+
+      cairo_save (cr);
+
+      /* Gradient from red at angle == 60 to blue at angle == 240 */
+      red   = (1 + cos ((angle - 60) * G_PI / 180.)) / 2;
+      cairo_set_source_rgb (cr, red, 0, 1.0 - red);
+
+      cairo_rotate (cr, angle * G_PI / 180.);
+    
+      /* Inform Pango to re-layout the text with the new transformation */
+      pango_cairo_update_layout (cr, layout);
+    
+      pango_layout_get_size (layout, &amp;width, &amp;height);
+      cairo_move_to (cr, - ((double)width / PANGO_SCALE) / 2, - RADIUS);
+      pango_cairo_show_layout (cr, layout);
+
+      cairo_restore (cr);
+    }
+
+  /* free the layout object */
+  g_object_unref (layout);
+}
+
+int main (int argc, char **argv)
+{
+  cairo_t *cr;
+  char *filename;
+  cairo_status_t status;
+  cairo_surface_t *surface;
+
+  if (argc != 2)
+    {
+      g_printerr ("Usage: cairosimple OUTPUT_FILENAME\n");
+      return 1;
+    }
+
+  filename = argv[1];
+
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       2 * RADIUS, 2 * RADIUS);
+  cr = cairo_create (surface);
+                                 
+
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+  draw_text (cr);
+  cairo_destroy (cr);
+  
+  status = cairo_surface_write_to_png (surface, filename);
+  cairo_surface_destroy (surface);
+
+  if (status != CAIRO_STATUS_SUCCESS)
+    {
+      g_printerr ("Could not save png to '%s'\n", filename);
+      return 1;
+    }
+
+  return 0;
+}
+</programlisting>
+</example>
+<figure id="rotated-example-output">
+  <title>Output of <xref linkend="rotated-example"/></title>
+  <graphic fileref="rotated-text.png" format="PNG"/>
+</figure>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoCairoFont ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT PangoCairoFontMap ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_get_default ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_set_default ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_new_for_font_type ##### -->
+<para>
+
+</para>
+
+@fonttype: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_get_font_type ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_set_resolution ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@dpi: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_get_resolution ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_map_create_context ##### -->
+<para>
+
+</para>
+
+@fontmap: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_font_get_scaled_font ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_context_set_resolution ##### -->
+<para>
+
+</para>
+
+@context: 
+@dpi: 
+
+
+<!-- ##### FUNCTION pango_cairo_context_get_resolution ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_context_set_font_options ##### -->
+<para>
+
+</para>
+
+@context: 
+@options: 
+
+
+<!-- ##### FUNCTION pango_cairo_context_get_font_options ##### -->
+<para>
+
+</para>
+
+@context: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION PangoCairoShapeRendererFunc ##### -->
+<para>
+Function type for rendering attributes of type %PANGO_ATTR_SHAPE
+with Pango's Cairo renderer.
+</para>
+
+@cr: a Cairo context with current point set to where the shape should
+     be rendered
+@attr: the %PANGO_ATTR_SHAPE to render
+@do_path: whether only the shape path should be appended to current
+          path of @cr and no filling/stroking done.  This will be set
+         to %TRUE when called from pango_cairo_layout_path() and
+         pango_cairo_layout_line_path() rendering functions.
+@data: user data passed to pango_cairo_context_set_shape_renderer()
+
+
+<!-- ##### FUNCTION pango_cairo_context_set_shape_renderer ##### -->
+<para>
+
+</para>
+
+@context: 
+@func: 
+@data: 
+@dnotify: 
+
+
+<!-- ##### FUNCTION pango_cairo_context_get_shape_renderer ##### -->
+<para>
+
+</para>
+
+@context: 
+@data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_create_context ##### -->
+<para>
+
+</para>
+
+@cr: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_update_context ##### -->
+<para>
+
+</para>
+
+@cr: 
+@context: 
+
+
+<!-- ##### FUNCTION pango_cairo_create_layout ##### -->
+<para>
+
+</para>
+
+@cr: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_cairo_update_layout ##### -->
+<para>
+
+</para>
+
+@cr: 
+@layout: 
+
+
+<!-- ##### FUNCTION pango_cairo_show_glyph_string ##### -->
+<para>
+
+</para>
+
+@cr: 
+@font: 
+@glyphs: 
+
+
+<!-- ##### FUNCTION pango_cairo_show_glyph_item ##### -->
+<para>
+
+</para>
+
+@cr: 
+@text: 
+@glyph_item: 
+
+
+<!-- ##### FUNCTION pango_cairo_show_layout_line ##### -->
+<para>
+
+</para>
+
+@cr: 
+@line: 
+
+
+<!-- ##### FUNCTION pango_cairo_show_layout ##### -->
+<para>
+
+</para>
+
+@cr: 
+@layout: 
+
+
+<!-- ##### FUNCTION pango_cairo_show_error_underline ##### -->
+<para>
+
+</para>
+
+@cr: 
+@x: 
+@y: 
+@width: 
+@height: 
+
+
+<!-- ##### FUNCTION pango_cairo_glyph_string_path ##### -->
+<para>
+
+</para>
+
+@cr: 
+@font: 
+@glyphs: 
+
+
+<!-- ##### FUNCTION pango_cairo_layout_line_path ##### -->
+<para>
+
+</para>
+
+@cr: 
+@line: 
+
+
+<!-- ##### FUNCTION pango_cairo_layout_path ##### -->
+<para>
+
+</para>
+
+@cr: 
+@layout: 
+
+
+<!-- ##### FUNCTION pango_cairo_error_underline_path ##### -->
+<para>
+
+</para>
+
+@cr: 
+@x: 
+@y: 
+@width: 
+@height: 
+
+
diff --git a/docs/tmpl/pangofc-decoder.sgml b/docs/tmpl/pangofc-decoder.sgml
new file mode 100755 (executable)
index 0000000..b8191c7
--- /dev/null
@@ -0,0 +1,55 @@
+<!-- ##### SECTION Title ##### -->
+PangoFcDecoder
+
+<!-- ##### SECTION Short_Description ##### -->
+Custom font encoding handling
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+PangoFcDecoder represents a decoder that an application provides
+for handling a font that is encoded in a custom way.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoFcDecoder ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT PangoFcDecoderClass ##### -->
+<para>
+
+</para>
+
+@get_charset: 
+@get_glyph: 
+
+<!-- ##### FUNCTION pango_fc_decoder_get_charset ##### -->
+<para>
+
+</para>
+
+@decoder: 
+@fcfont: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_decoder_get_glyph ##### -->
+<para>
+
+</para>
+
+@decoder: 
+@fcfont: 
+@wc: 
+@Returns: 
+
+
diff --git a/docs/tmpl/pangofc-font.sgml b/docs/tmpl/pangofc-font.sgml
new file mode 100755 (executable)
index 0000000..a1b055c
--- /dev/null
@@ -0,0 +1,127 @@
+<!-- ##### SECTION Title ##### -->
+PangoFcFont
+
+<!-- ##### SECTION Short_Description ##### -->
+Base font class for Fontconfig-based backends
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#PangoFcFont is a base class for font implementation using the
+Fontconfig and FreeType libraries. It is used in the
+<link linkend="pango-Xft-Fonts-and-Rendering">Xft</link> and
+<link linkend="pango-FreeType-Fonts-and-Rendering">FreeType</link>
+backends shipped with Pango, but can also be used when creating
+new backends. Any backend deriving from this base class will 
+take advantage of the wide range of shapers implemented using
+FreeType that come with Pango.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+
+<varlistentry>
+<term>#PangoFcFontMap</term>
+<listitem><para>The base class for font maps; creating a new
+Fontconfig-based backend involves deriving from both
+#PangoFcFontMap and #PangoFcFont.
+.</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoFcFont ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG PangoFcFont:fontmap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG PangoFcFont:pattern ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT PangoFcFontClass ##### -->
+<para>
+
+</para>
+
+@lock_face: 
+@unlock_face: 
+@has_char: 
+@get_glyph: 
+@get_unknown_glyph: 
+@shutdown: 
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_FC ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION pango_fc_font_lock_face ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_unlock_face ##### -->
+<para>
+
+</para>
+
+@font: 
+
+
+<!-- ##### FUNCTION pango_fc_font_has_char ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_get_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_get_unknown_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_kern_glyphs ##### -->
+<para>
+
+</para>
+
+@font: 
+@glyphs: 
+
+
diff --git a/docs/tmpl/pangofc-fontmap.sgml b/docs/tmpl/pangofc-fontmap.sgml
new file mode 100755 (executable)
index 0000000..ee6cca0
--- /dev/null
@@ -0,0 +1,238 @@
+<!-- ##### SECTION Title ##### -->
+PangoFcFontMap
+
+<!-- ##### SECTION Short_Description ##### -->
+Base fontmap class for Fontconfig-based backends
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+PangoFcFontMap is a base class for font map implementations using the
+Fontconfig and FreeType libraries. It is used in the
+<link linkend="pango-Xft-Fonts-and-Rendering">Xft</link> and
+<link linkend="pango-FreeType-Fonts-and-Rendering">FreeType</link>
+backends shipped with Pango, but can also be used when creating
+new backends. Any backend deriving from this base class will 
+take advantage of the wide range of shapers implemented using
+FreeType that come with Pango.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+<variablelist>
+
+<varlistentry>
+<term>#PangoFcFont</term>
+<listitem><para>The base class for fonts; creating a new
+Fontconfig-based backend involves deriving from both
+#PangoFcFontMap and #PangoFcFont.
+</para></listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoFcFontMap ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT PangoFcFontMapClass ##### -->
+<para>
+
+</para>
+
+@default_substitute: 
+@new_font: 
+@get_resolution: 
+@context_key_get: 
+@context_key_copy: 
+@context_key_free: 
+@context_key_hash: 
+@context_key_equal: 
+@fontset_key_substitute: 
+@create_font: 
+
+<!-- ##### FUNCTION pango_fc_font_map_create_context ##### -->
+<para>
+
+</para>
+
+@fcfontmap: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION PangoFcDecoderFindFunc ##### -->
+<para>
+
+</para>
+
+@pattern: 
+@user_data: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_map_add_decoder_find_func ##### -->
+<para>
+
+</para>
+
+@fcfontmap: 
+@findfunc: 
+@user_data: 
+@dnotify: 
+
+
+<!-- ##### FUNCTION pango_fc_font_map_find_decoder ##### -->
+<para>
+
+</para>
+
+@fcfontmap: 
+@pattern: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_map_cache_clear ##### -->
+<para>
+
+</para>
+
+@fcfontmap: 
+
+
+<!-- ##### FUNCTION pango_fc_font_map_shutdown ##### -->
+<para>
+
+</para>
+
+@fcfontmap: 
+
+
+<!-- ##### FUNCTION pango_fc_font_description_from_pattern ##### -->
+<para>
+
+</para>
+
+@pattern: 
+@include_size: 
+@Returns: 
+
+
+<!-- ##### MACRO PANGO_FC_GRAVITY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO PANGO_FC_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO PANGO_FC_PRGNAME ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### STRUCT PangoFcFontsetKey ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION pango_fc_fontset_key_get_context_key ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_fontset_key_get_description ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_fontset_key_get_language ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_fontset_key_get_matrix ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_fontset_key_get_absolute_size ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_fontset_key_get_resolution ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoFcFontKey ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION pango_fc_font_key_get_context_key ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_key_get_matrix ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_fc_font_key_get_pattern ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
diff --git a/docs/tmpl/scripts.sgml b/docs/tmpl/scripts.sgml
new file mode 100755 (executable)
index 0000000..a87e7fb
--- /dev/null
@@ -0,0 +1,266 @@
+<!-- ##### SECTION Title ##### -->
+Scripts and Languages
+
+<!-- ##### SECTION Short_Description ##### -->
+Identifying writing systems and languages
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The functions in this section are used to identify the writing
+system, or <firstterm>script</firstterm> of individual characters
+and of ranges within a larger text string.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM PangoScript ##### -->
+<para>
+The #PangoScript enumeration identifies different writing
+systems. The values correspond to the names as defined in the
+Unicode standard.
+Note that new types may be added in the future. Applications should be ready
+to handle unknown values.  This enumeration is interchangeable with
+#GUnicodeScript.  See <ulink
+url="http://www.unicode.org/reports/tr24/">Unicode Standard Annex
+#24: Script names</ulink>.
+</para>
+
+@PANGO_SCRIPT_INVALID_CODE: a value never returned from pango_script_for_unichar()
+@PANGO_SCRIPT_COMMON: a character used by multiple different scripts
+@PANGO_SCRIPT_INHERITED: a mark glyph that takes its script from the
+  base glyph to which it is attached
+@PANGO_SCRIPT_ARABIC:  Arabic
+@PANGO_SCRIPT_ARMENIAN: Armenian
+@PANGO_SCRIPT_BENGALI:         Bengali
+@PANGO_SCRIPT_BOPOMOFO: Bopomofo
+@PANGO_SCRIPT_CHEROKEE:        Cherokee
+@PANGO_SCRIPT_COPTIC:  Coptic
+@PANGO_SCRIPT_CYRILLIC:        Cyrillic
+@PANGO_SCRIPT_DESERET:         Deseret
+@PANGO_SCRIPT_DEVANAGARI:      Devanagari
+@PANGO_SCRIPT_ETHIOPIC:        Ethiopic
+@PANGO_SCRIPT_GEORGIAN:        Georgian
+@PANGO_SCRIPT_GOTHIC:  Gothic
+@PANGO_SCRIPT_GREEK:   Greek
+@PANGO_SCRIPT_GUJARATI:        Gujarati
+@PANGO_SCRIPT_GURMUKHI:        Gurmukhi
+@PANGO_SCRIPT_HAN:     Han
+@PANGO_SCRIPT_HANGUL:  Hangul
+@PANGO_SCRIPT_HEBREW:  Hebrew
+@PANGO_SCRIPT_HIRAGANA:        Hiragana
+@PANGO_SCRIPT_KANNADA:         Kannada
+@PANGO_SCRIPT_KATAKANA:        Katakana
+@PANGO_SCRIPT_KHMER:   Khmer
+@PANGO_SCRIPT_LAO:     Lao
+@PANGO_SCRIPT_LATIN:   Latin
+@PANGO_SCRIPT_MALAYALAM:       Malayalam
+@PANGO_SCRIPT_MONGOLIAN:       Mongolian
+@PANGO_SCRIPT_MYANMAR:         Myanmar
+@PANGO_SCRIPT_OGHAM:   Ogham
+@PANGO_SCRIPT_OLD_ITALIC:      Old Italic
+@PANGO_SCRIPT_ORIYA:   Oriya
+@PANGO_SCRIPT_RUNIC:   Runic
+@PANGO_SCRIPT_SINHALA:         Sinhala
+@PANGO_SCRIPT_SYRIAC:  Syriac
+@PANGO_SCRIPT_TAMIL:   Tamil
+@PANGO_SCRIPT_TELUGU:  Telugu
+@PANGO_SCRIPT_THAANA:  Thaana
+@PANGO_SCRIPT_THAI:    Thai
+@PANGO_SCRIPT_TIBETAN:         Tibetan
+@PANGO_SCRIPT_CANADIAN_ABORIGINAL:     Canadian Aboriginal
+@PANGO_SCRIPT_YI:      Yi
+@PANGO_SCRIPT_TAGALOG:         Tagalog
+@PANGO_SCRIPT_HANUNOO:         Hanunoo
+@PANGO_SCRIPT_BUHID:   Buhid
+@PANGO_SCRIPT_TAGBANWA:        Tagbanwa
+@PANGO_SCRIPT_BRAILLE:         Braille
+@PANGO_SCRIPT_CYPRIOT:         Cypriot
+@PANGO_SCRIPT_LIMBU:   Limbu
+@PANGO_SCRIPT_OSMANYA:         Osmanya
+@PANGO_SCRIPT_SHAVIAN:         Shavian
+@PANGO_SCRIPT_LINEAR_B:        Linear B
+@PANGO_SCRIPT_TAI_LE:  Tai Le
+@PANGO_SCRIPT_UGARITIC:        Ugaritic
+@PANGO_SCRIPT_NEW_TAI_LUE:     New Tai Lue. Since 1.10
+@PANGO_SCRIPT_BUGINESE:        Buginese. Since 1.10
+@PANGO_SCRIPT_GLAGOLITIC:      Glagolitic. Since 1.10
+@PANGO_SCRIPT_TIFINAGH:        Tifinagh. Since 1.10
+@PANGO_SCRIPT_SYLOTI_NAGRI:    Syloti Nagri. Since 1.10
+@PANGO_SCRIPT_OLD_PERSIAN:     Old Persian. Since 1.10
+@PANGO_SCRIPT_KHAROSHTHI:      Kharoshthi. Since 1.10
+@PANGO_SCRIPT_UNKNOWN:                 an unassigned code point. Since 1.14
+@PANGO_SCRIPT_BALINESE:                Balinese. Since 1.14
+@PANGO_SCRIPT_CUNEIFORM:       Cuneiform. Since 1.14
+@PANGO_SCRIPT_PHOENICIAN:      Phoenician. Since 1.14
+@PANGO_SCRIPT_PHAGS_PA:                Phags-pa. Since 1.14
+@PANGO_SCRIPT_NKO:             N'Ko. Since 1.14
+@PANGO_SCRIPT_KAYAH_LI:   Kayah Li. Since 1.20.1
+@PANGO_SCRIPT_LEPCHA:     Lepcha. Since 1.20.1
+@PANGO_SCRIPT_REJANG:     Rejang. Since 1.20.1
+@PANGO_SCRIPT_SUNDANESE:  Sundanese. Since 1.20.1
+@PANGO_SCRIPT_SAURASHTRA: Saurashtra. Since 1.20.1
+@PANGO_SCRIPT_CHAM:       Cham. Since 1.20.1
+@PANGO_SCRIPT_OL_CHIKI:   Ol Chiki. Since 1.20.1
+@PANGO_SCRIPT_VAI:        Vai. Since 1.20.1
+@PANGO_SCRIPT_CARIAN:     Carian. Since 1.20.1
+@PANGO_SCRIPT_LYCIAN:     Lycian. Since 1.20.1
+@PANGO_SCRIPT_LYDIAN:     Lydian. Since 1.20.1
+
+<!-- ##### MACRO PANGO_TYPE_SCRIPT ##### -->
+<para>
+The #GObject type for #PangoScript
+</para>
+
+
+
+<!-- ##### STRUCT PangoScriptIter ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION pango_script_for_unichar ##### -->
+<para>
+
+</para>
+
+@ch: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_script_get_sample_language ##### -->
+<para>
+
+</para>
+
+@script: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_script_iter_new ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_script_iter_get_range ##### -->
+<para>
+
+</para>
+
+@iter: 
+@start: 
+@end: 
+@script: 
+
+
+<!-- ##### FUNCTION pango_script_iter_next ##### -->
+<para>
+
+</para>
+
+@iter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_script_iter_free ##### -->
+<para>
+
+</para>
+
+@iter: 
+
+
+<!-- ##### STRUCT PangoLanguage ##### -->
+<para>
+The #PangoLanguage structure is used to
+represent a language.
+</para>
+<para>
+#PangoLanguage pointers can be efficiently 
+copied and compared with each other.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_LANGUAGE ##### -->
+<para>
+The #GObject type for #PangoLanguage. 
+</para>
+
+
+
+<!-- ##### FUNCTION pango_language_from_string ##### -->
+<para>
+
+</para>
+
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_language_to_string ##### -->
+<para>
+
+</para>
+
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_language_matches ##### -->
+<para>
+
+</para>
+
+@language: 
+@range_list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_language_includes_script ##### -->
+<para>
+
+</para>
+
+@language: 
+@script: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_language_get_scripts ##### -->
+<para>
+
+</para>
+
+@language: 
+@num_scripts: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_language_get_default ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_language_get_sample_string ##### -->
+<para>
+
+</para>
+
+@language: 
+@Returns: 
+
+
diff --git a/docs/tmpl/tab-stops.sgml b/docs/tmpl/tab-stops.sgml
new file mode 100755 (executable)
index 0000000..03ae379
--- /dev/null
@@ -0,0 +1,147 @@
+<!-- ##### SECTION Title ##### -->
+Tab Stops
+
+<!-- ##### SECTION Short_Description ##### -->
+Structures for storing tab stops
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Functions in this section are used to deal with #PangoTabArray objects
+that can be used to set tab stop positions in a #PangoLayout.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoTabArray ##### -->
+<para>
+A #PangoTabArray struct contains an array
+of tab stops. Each tab stop has an alignment and a position.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_TAB_ARRAY ##### -->
+<para>
+The #GObject type for #PangoTabArray.
+</para>
+
+
+
+<!-- ##### ENUM PangoTabAlign ##### -->
+<para>
+A #PangoTabAlign specifies where a tab stop appears relative to the text.
+</para>
+
+@PANGO_TAB_LEFT: the tab stop appears to the left of the text.
+
+<!-- ##### MACRO PANGO_TYPE_TAB_ALIGN ##### -->
+<para>
+The #GObject type for #PangoTabAlign.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_tab_array_new ##### -->
+<para>
+
+</para>
+
+@initial_size: 
+@positions_in_pixels: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_tab_array_new_with_positions ##### -->
+<para>
+
+</para>
+
+@size: 
+@positions_in_pixels: 
+@first_alignment: 
+@first_position: 
+@Varargs: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_tab_array_copy ##### -->
+<para>
+
+</para>
+
+@src: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_tab_array_free ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+
+
+<!-- ##### FUNCTION pango_tab_array_get_size ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_tab_array_resize ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+@new_size: 
+
+
+<!-- ##### FUNCTION pango_tab_array_set_tab ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+@tab_index: 
+@alignment: 
+@location: 
+
+
+<!-- ##### FUNCTION pango_tab_array_get_tab ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+@tab_index: 
+@alignment: 
+@location: 
+
+
+<!-- ##### FUNCTION pango_tab_array_get_tabs ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+@alignments: 
+@locations: 
+
+
+<!-- ##### FUNCTION pango_tab_array_get_positions_in_pixels ##### -->
+<para>
+
+</para>
+
+@tab_array: 
+@Returns: 
+
+
diff --git a/docs/tmpl/text-attributes.sgml b/docs/tmpl/text-attributes.sgml
new file mode 100755 (executable)
index 0000000..57469b8
--- /dev/null
@@ -0,0 +1,831 @@
+<!-- ##### SECTION Title ##### -->
+Text Attributes
+
+<!-- ##### SECTION Short_Description ##### -->
+Font and other attributes for annotating text
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Attributed text is used in a number of places in Pango. It
+is used as the input to the itemization process and also when
+creating a #PangoLayout. The data types and functions in
+this section are used to represent and manipulate sets
+of attributes applied to a portion of text.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM PangoAttrType ##### -->
+<para>
+The #PangoAttrType
+distinguishes between different types of attributes. Along with the
+predefined values, it is possible to allocate additional values
+for custom attributes using pango_attr_type_register(). The predefined
+values are given below. The type of structure used to store the
+attribute is listed in parentheses after the description.
+</para>
+
+@PANGO_ATTR_INVALID: does not happen
+@PANGO_ATTR_LANGUAGE: language (#PangoAttrLanguage)
+@PANGO_ATTR_FAMILY: font family name list (#PangoAttrString)
+@PANGO_ATTR_STYLE: font slant style (#PangoAttrInt)
+@PANGO_ATTR_WEIGHT: font weight (#PangoAttrInt)
+@PANGO_ATTR_VARIANT: font variant (normal or small caps) (#PangoAttrInt)
+@PANGO_ATTR_STRETCH: font stretch (#PangoAttrInt)
+@PANGO_ATTR_SIZE: font size in points scaled by %PANGO_SCALE (#PangoAttrInt)
+@PANGO_ATTR_FONT_DESC: font description (#PangoAttrFontDesc)
+@PANGO_ATTR_FOREGROUND: foreground color (#PangoAttrColor)
+@PANGO_ATTR_BACKGROUND: background color (#PangoAttrColor)
+@PANGO_ATTR_UNDERLINE: whether the text has an underline (#PangoAttrInt)
+@PANGO_ATTR_STRIKETHROUGH: whether the text is struck-through (#PangoAttrInt)
+@PANGO_ATTR_RISE: baseline displacement (#PangoAttrInt)
+@PANGO_ATTR_SHAPE: shape (#PangoAttrShape)
+@PANGO_ATTR_SCALE: font size scale factor (#PangoAttrFloat)
+@PANGO_ATTR_FALLBACK: whether fallback is enabled (#PangoAttrInt)
+@PANGO_ATTR_LETTER_SPACING: letter spacing (#PangoAttrInt)
+@PANGO_ATTR_UNDERLINE_COLOR: underline color (#PangoAttrColor)
+@PANGO_ATTR_STRIKETHROUGH_COLOR: strikethrough color (#PangoAttrColor)
+@PANGO_ATTR_ABSOLUTE_SIZE: font size in pixels scaled by %PANGO_SCALE (#PangoAttrInt)
+@PANGO_ATTR_GRAVITY: base text gravity (#PangoAttrInt)
+@PANGO_ATTR_GRAVITY_HINT: gravity hint (#PangoAttrInt)
+
+<!-- ##### MACRO PANGO_TYPE_ATTR_TYPE ##### -->
+<para>
+The #GObject type for #PangoAttrType.
+</para>
+
+
+
+<!-- ##### STRUCT PangoAttrClass ##### -->
+<para>
+The #PangoAttrClass structure stores the type and operations for
+a particular type of attribute. The functions in this structure should
+not be called directly. Instead, one should use the wrapper functions
+provided for #PangoAttribute.
+</para>
+
+@type: the type ID for this attribute
+@copy: function to duplicate an attribute of this type (see pango_attribute_copy())
+@destroy: function to free an attribute of this type (see pango_attribute_destroy())
+@equal: function to check two attributes of this type for equality (see pango_attribute_equal())
+
+<!-- ##### STRUCT PangoAttribute ##### -->
+<para>
+The #PangoAttribute structure represents the common portions of all
+attributes. Particular types of attributes include this structure
+as their initial portion. The common portion of the attribute holds
+the range to which the value in the type-specific part of the attribute
+applies and should be initialized using pango_attribute_init().
+By default an attribute will have an all-inclusive range of [0,%G_MAXUINT].
+</para>
+
+@klass: the class structure holding information about the type of the attribute
+@start_index: the start index of the range (in bytes).
+@end_index: end index of the range (in bytes). The character at this index
+       is not included in the range.
+
+<!-- ##### MACRO PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING ##### -->
+<para>
+This value can be used to set the start_index member of a #PangoAttribute
+such that the attribute covers from the beginning of the text.
+</para>
+
+Since: 1.24
+
+
+
+<!-- ##### MACRO PANGO_ATTR_INDEX_TO_TEXT_END ##### -->
+<para>
+This value can be used to set the end_index member of a #PangoAttribute
+such that the attribute covers to the end of the text.
+</para>
+
+Since: 1.24
+
+
+
+<!-- ##### STRUCT PangoAttrString ##### -->
+<para>
+The #PangoAttrString structure is used to represent attributes with
+a string value.
+</para>
+
+@attr: the common portion of the attribute
+@value: the string which is the value of the attribute
+
+<!-- ##### STRUCT PangoAttrLanguage ##### -->
+<para>
+The #PangoAttrLanguage structure is used to represent attributes that
+are languages.
+</para>
+
+@attr: the common portion of the attribute
+@value: the #PangoLanguage which is the value of the attribute
+
+<!-- ##### STRUCT PangoAttrColor ##### -->
+<para>
+The #PangoAttrColor structure is used to represent attributes that
+are colors.
+</para>
+
+@attr: the common portion of the attribute
+@color: the #PangoColor which is the value of the attribute
+
+<!-- ##### STRUCT PangoAttrInt ##### -->
+<para>
+The #PangoAttrInt structure is used to represent attributes with
+an integer or enumeration value.
+</para>
+
+@attr: the common portion of the attribute
+@value: the value of the attribute
+
+<!-- ##### STRUCT PangoAttrFloat ##### -->
+<para>
+The #PangoAttrFloat structure is used to represent attributes with
+a float or double value.
+</para>
+
+@attr: the common portion of the attribute
+@value: the value of the attribute
+
+<!-- ##### STRUCT PangoAttrFontDesc ##### -->
+<para>
+The #PangoAttrFontDesc structure is used to store an attribute that
+sets all aspects of the font description at once.
+</para>
+
+@attr: the common portion of the attribute
+@desc: the font description which is the value of this attribute
+
+<!-- ##### STRUCT PangoAttrShape ##### -->
+<para>
+The #PangoAttrShape structure is used to represent attributes which 
+impose shape restrictions.
+</para>
+
+@attr: the common portion of the attribute
+@ink_rect: the ink rectangle to restrict to
+@logical_rect: the logical rectangle to restrict to
+@data: user data set (see pango_attr_shape_new_with_data())
+@copy_func: copy function for the user data
+@destroy_func: destroy function for the user data
+
+<!-- ##### STRUCT PangoAttrSize ##### -->
+<para>
+The #PangoAttrShape structure is used to represent attributes which
+set font size.
+</para>
+
+@attr: the common portion of the attribute
+@size: size of font, in units of 1/%PANGO_SCALE of a point (for
+  %PANGO_ATTR_SIZE) or of a device uni (for %PANGO_ATTR_ABSOLUTE_SIZE)
+@absolute: whether the font size is in device units or points.
+   This field is only present for compatibility with Pango-1.8.0
+   (%PANGO_ATTR_ABSOLUTE_SIZE was added in 1.8.1); and always will
+   be %FALSE for %PANGO_ATTR_SIZE and %TRUE for %PANGO_ATTR_ABSOLUTE_SIZE.
+
+<!-- ##### FUNCTION pango_parse_markup ##### -->
+<para>
+
+</para>
+
+@markup_text: 
+@length: 
+@accel_marker: 
+@attr_list: 
+@text: 
+@accel_char: 
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_type_register ##### -->
+<para>
+
+</para>
+
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_type_get_name ##### -->
+<para>
+
+</para>
+
+@type: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attribute_init ##### -->
+<para>
+
+</para>
+
+@attr: 
+@klass: 
+
+
+<!-- ##### FUNCTION pango_attribute_copy ##### -->
+<para>
+
+</para>
+
+@attr: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attribute_equal ##### -->
+<para>
+
+</para>
+
+@attr1: 
+@attr2: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attribute_destroy ##### -->
+<para>
+
+</para>
+
+@attr: 
+
+
+<!-- ##### FUNCTION pango_attr_language_new ##### -->
+<para>
+
+</para>
+
+@language: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_family_new ##### -->
+<para>
+
+</para>
+
+@family: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_style_new ##### -->
+<para>
+
+</para>
+
+@style: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_variant_new ##### -->
+<para>
+
+</para>
+
+@variant: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_stretch_new ##### -->
+<para>
+
+</para>
+
+@stretch: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_weight_new ##### -->
+<para>
+
+</para>
+
+@weight: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_size_new ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_size_new_absolute ##### -->
+<para>
+
+</para>
+
+@size: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_font_desc_new ##### -->
+<para>
+
+</para>
+
+@desc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_foreground_new ##### -->
+<para>
+
+</para>
+
+@red: 
+@green: 
+@blue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_background_new ##### -->
+<para>
+
+</para>
+
+@red: 
+@green: 
+@blue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_strikethrough_new ##### -->
+<para>
+
+</para>
+
+@strikethrough: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_strikethrough_color_new ##### -->
+<para>
+
+</para>
+
+@red: 
+@green: 
+@blue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_underline_new ##### -->
+<para>
+
+</para>
+
+@underline: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_underline_color_new ##### -->
+<para>
+
+</para>
+
+@red: 
+@green: 
+@blue: 
+@Returns: 
+
+
+<!-- ##### ENUM PangoUnderline ##### -->
+<para>
+the #PangoUnderline enumeration is used to specify
+whether text should be underlined, and if so, the type
+of underlining.
+</para>
+
+@PANGO_UNDERLINE_NONE: no underline should be drawn
+@PANGO_UNDERLINE_SINGLE: a single underline should be drawn
+@PANGO_UNDERLINE_DOUBLE: a double underline should be drawn
+@PANGO_UNDERLINE_LOW: a single underline should be drawn at a position
+                      beneath the ink extents of the text being
+                      underlined. This should be used only for underlining
+                      single characters, such as for keyboard
+                      accelerators. %PANGO_UNDERLINE_SINGLE should
+                      be used for extended portions of text.
+@PANGO_UNDERLINE_ERROR: a wavy underline should be drawn below.
+                      This underline is typically used to indicate
+                      an error such as a possilble mispelling; in some
+                      cases a contrasting color may automatically
+                      be used. This type of underlining is available
+                      since Pango 1.4.
+
+<!-- ##### MACRO PANGO_TYPE_UNDERLINE ##### -->
+<para>
+The #GObject type for #PangoUnderline.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_attr_shape_new ##### -->
+<para>
+
+</para>
+
+@ink_rect: 
+@logical_rect: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_shape_new_with_data ##### -->
+<para>
+
+</para>
+
+@ink_rect: 
+@logical_rect: 
+@data: 
+@copy_func: 
+@destroy_func: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION PangoAttrDataCopyFunc ##### -->
+<para>
+A copy function passed to attribute new functions that take
+user data.
+</para>
+
+@data: the user data
+@Returns: a new copy of @data.
+
+
+<!-- ##### FUNCTION pango_attr_scale_new ##### -->
+<para>
+
+</para>
+
+@scale_factor: 
+@Returns: 
+
+
+<!-- ##### MACRO PANGO_SCALE_XX_SMALL ##### -->
+<para>
+The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_SCALE_X_SMALL ##### -->
+<para>
+The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_SCALE_SMALL ##### -->
+<para>
+The scale factor for one shrinking step (1 / 1.2).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_SCALE_MEDIUM ##### -->
+<para>
+The scale factor for normal size (1.0).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_SCALE_LARGE ##### -->
+<para>
+The scale factor for one magnification step (1.2).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_SCALE_X_LARGE ##### -->
+<para>
+The scale factor for two magnification steps (1.2 * 1.2).
+</para>
+
+
+
+<!-- ##### MACRO PANGO_SCALE_XX_LARGE ##### -->
+<para>
+The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
+</para>
+
+
+
+<!-- ##### FUNCTION pango_attr_rise_new ##### -->
+<para>
+
+</para>
+
+@rise: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_letter_spacing_new ##### -->
+<para>
+
+</para>
+
+@letter_spacing: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_fallback_new ##### -->
+<para>
+
+</para>
+
+@enable_fallback: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_gravity_new ##### -->
+<para>
+
+</para>
+
+@gravity: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_gravity_hint_new ##### -->
+<para>
+
+</para>
+
+@hint: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoColor ##### -->
+<para>
+The #PangoColor structure is used to
+represent a color in an uncalibrated RGB color-space.
+</para>
+
+@red: The red component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+@green: The green component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+@blue: The blue component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+
+<!-- ##### MACRO PANGO_TYPE_COLOR ##### -->
+<para>
+The #GObject type for #PangoColor.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_color_parse ##### -->
+<para>
+
+</para>
+
+@color: 
+@spec: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_color_copy ##### -->
+<para>
+
+</para>
+
+@src: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_color_free ##### -->
+<para>
+
+</para>
+
+@color: 
+
+
+<!-- ##### FUNCTION pango_color_to_string ##### -->
+<para>
+
+</para>
+
+@color: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoAttrList ##### -->
+<para>
+The #PangoAttrList structure represents a list of attributes
+that apply to a section of text. The attributes are, in general,
+allowed to overlap in an arbitrary fashion, however, if the
+attributes are manipulated only through pango_attr_list_change(),
+the overlap between properties will meet stricter criteria.
+</para>
+<para>
+Since the #PangoAttrList structure is stored as a linear list,
+it is not suitable for storing attributes for large amounts
+of text. In general, you should not use a single #PangoAttrList
+for more than one paragraph of text.
+</para>
+
+
+<!-- ##### MACRO PANGO_TYPE_ATTR_LIST ##### -->
+<para>
+The #GObject type for #PangoAttrList.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_attr_list_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_list_ref ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_list_unref ##### -->
+<para>
+
+</para>
+
+@list: 
+
+
+<!-- ##### FUNCTION pango_attr_list_copy ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_list_insert ##### -->
+<para>
+
+</para>
+
+@list: 
+@attr: 
+
+
+<!-- ##### FUNCTION pango_attr_list_insert_before ##### -->
+<para>
+
+</para>
+
+@list: 
+@attr: 
+
+
+<!-- ##### FUNCTION pango_attr_list_change ##### -->
+<para>
+
+</para>
+
+@list: 
+@attr: 
+
+
+<!-- ##### FUNCTION pango_attr_list_splice ##### -->
+<para>
+
+</para>
+
+@list: 
+@other: 
+@pos: 
+@len: 
+
+
+<!-- ##### FUNCTION pango_attr_list_filter ##### -->
+<para>
+
+</para>
+
+@list: 
+@func: 
+@data: 
+@Returns: 
+
+
+<!-- ##### USER_FUNCTION PangoAttrFilterFunc ##### -->
+<para>
+A predicate function used by pango_attr_list_filter()
+to filter out a subset of attributes for a list.
+</para>
+
+@attribute: a #PangoAttribute
+@data: callback data passed to pango_attr_list_filter()
+@Returns: %TRUE if the attribute should be filtered out
+
+
+<!-- ##### FUNCTION pango_attr_list_get_iterator ##### -->
+<para>
+
+</para>
+
+@list: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoAttrIterator ##### -->
+<para>
+The #PangoAttrIterator structure is used to represent an
+iterator through a #PangoAttrList. A new iterator is created
+with pango_attr_list_get_iterator(). Once the iterator
+is created, it can be advanced through the style changes
+in the text using pango_attr_iterator_next(). At each
+style change, the range of the current style segment and the
+attributes currently in effect can be queried.
+</para>
+
+
+<!-- ##### FUNCTION pango_attr_iterator_copy ##### -->
+<para>
+
+</para>
+
+@iterator: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_iterator_next ##### -->
+<para>
+
+</para>
+
+@iterator: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_iterator_range ##### -->
+<para>
+
+</para>
+
+@iterator: 
+@start: 
+@end: 
+
+
+<!-- ##### FUNCTION pango_attr_iterator_get ##### -->
+<para>
+
+</para>
+
+@iterator: 
+@type: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_iterator_get_font ##### -->
+<para>
+
+</para>
+
+@iterator: 
+@desc: 
+@language: 
+@extra_attrs: 
+
+
+<!-- ##### FUNCTION pango_attr_iterator_get_attrs ##### -->
+<para>
+
+</para>
+
+@iterator: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_attr_iterator_destroy ##### -->
+<para>
+
+</para>
+
+@iterator: 
+
+
diff --git a/docs/tmpl/utils.sgml b/docs/tmpl/utils.sgml
new file mode 100755 (executable)
index 0000000..6ac6a66
--- /dev/null
@@ -0,0 +1,208 @@
+<!-- ##### SECTION Title ##### -->
+Miscellaneous Utilities
+
+<!-- ##### SECTION Short_Description ##### -->
+Various convenience and utility functions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The functions and utilities in this section are mostly used from Pango
+backends and modules, but may be useful for other purposes too.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### FUNCTION pango_split_file_list ##### -->
+<para>
+
+</para>
+
+@str: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_trim_string ##### -->
+<para>
+
+</para>
+
+@str: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_read_line ##### -->
+<para>
+
+</para>
+
+@stream: 
+@str: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_skip_space ##### -->
+<para>
+
+</para>
+
+@pos: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_scan_word ##### -->
+<para>
+
+</para>
+
+@pos: 
+@out: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_scan_string ##### -->
+<para>
+
+</para>
+
+@pos: 
+@out: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_scan_int ##### -->
+<para>
+
+</para>
+
+@pos: 
+@out: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_config_key_get ##### -->
+<para>
+
+</para>
+
+@key: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_lookup_aliases ##### -->
+<para>
+
+</para>
+
+@fontname: 
+@families: 
+@n_families: 
+
+
+<!-- ##### FUNCTION pango_parse_enum ##### -->
+<para>
+
+</para>
+
+@type: 
+@str: 
+@value: 
+@warn: 
+@possible_values: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_parse_style ##### -->
+<para>
+
+</para>
+
+@str: 
+@style: 
+@warn: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_parse_variant ##### -->
+<para>
+
+</para>
+
+@str: 
+@variant: 
+@warn: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_parse_weight ##### -->
+<para>
+
+</para>
+
+@str: 
+@weight: 
+@warn: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_parse_stretch ##### -->
+<para>
+
+</para>
+
+@str: 
+@stretch: 
+@warn: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_get_sysconf_subdirectory ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_get_lib_subdirectory ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_log2vis_get_embedding_levels ##### -->
+<para>
+
+</para>
+
+@text: 
+@length: 
+@pbase_dir: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_is_zero_width ##### -->
+<para>
+
+</para>
+
+@ch: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_quantize_line_geometry ##### -->
+<para>
+
+</para>
+
+@thickness: 
+@position: 
+
+
diff --git a/docs/tmpl/vertical.sgml b/docs/tmpl/vertical.sgml
new file mode 100755 (executable)
index 0000000..83e33a1
--- /dev/null
@@ -0,0 +1,144 @@
+<!-- ##### SECTION Title ##### -->
+Vertical Text
+
+<!-- ##### SECTION Short_Description ##### -->
+Laying text out in vertical directions
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Since 1.16, Pango is able to correctly lay vertical text out.  In fact, it can
+set layouts of mixed vertical and non-vertical text.  This section describes
+the types used for setting vertical text parameters.
+</para>
+<para>
+The way this is implemented is through the concept of
+<firstterm>gravity</firstterm>.  Gravity of normal Latin text is south.  A
+gravity value of east means that glyphs will be rotated ninety degrees
+counterclockwise.  So, to render vertical text one needs to set the gravity
+and rotate the layout using the matrix machinery already in place.  This has
+the huge advantage that most algorithms working on a #PangoLayout do not need
+any change as the assumption that lines run in the X direction and stack in
+the Y direction holds even for vertical text layouts.
+</para>
+<para>
+Applications should only need to set base gravity on #PangoContext in use, and
+let Pango decide the gravity assigned to each run of text.  This automatically
+handles text with mixed scripts.  A very common use is to set the context base
+gravity to auto using pango_context_set_base_gravity()
+and rotate the layout normally.  Pango will make sure that
+Asian languages take the right form, while other scripts are rotated normally.
+</para>
+<para>
+The correct way to set gravity on a layout is to set it on the context
+associated with it using pango_context_set_base_gravity().  The context
+of a layout can be accessed using pango_layout_get_context().  The currently
+set base gravity of the context can be accessed using
+pango_context_get_base_gravity() and the <firstterm>resolved</firstterm>
+gravity of it using pango_context_get_gravity().  The resolved gravity is
+the same as the base gravity for the most part, except that if the base
+gravity is set to %PANGO_GRAVITY_AUTO, the resolved gravity will depend
+on the current matrix set on context, and is derived using
+pango_gravity_get_for_matrix().
+</para>
+<para>
+The next thing an application may want to set on the context is the
+<firstterm>gravity hint</firstterm>.  A #PangoGravityHint instructs how
+different scripts should react to the set base gravity.
+</para>
+<para>
+Font descriptions have a gravity property too, that can be set using
+pango_font_description_set_gravity() and accessed using
+pango_font_description_get_gravity().  However, those are rarely useful
+from application code and are mainly used by #PangoLayout internally.
+</para>
+<para>
+Last but not least, one can create #PangoAttribute<!---->s for gravity
+and gravity hint using pango_attr_gravity_new() and
+pango_attr_gravity_hint_new().
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+pango_context_get_base_gravity(),
+pango_context_set_base_gravity(),
+pango_context_get_gravity(),
+pango_context_get_gravity_hint(),
+pango_context_set_gravity_hint(),
+pango_font_description_set_gravity(),
+pango_font_description_get_gravity(),
+pango_attr_gravity_new(),
+pango_attr_gravity_hint_new()
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### ENUM PangoGravity ##### -->
+<para>
+
+</para>
+
+@PANGO_GRAVITY_SOUTH: 
+@PANGO_GRAVITY_EAST: 
+@PANGO_GRAVITY_NORTH: 
+@PANGO_GRAVITY_WEST: 
+@PANGO_GRAVITY_AUTO: 
+
+<!-- ##### ENUM PangoGravityHint ##### -->
+<para>
+
+</para>
+
+@PANGO_GRAVITY_HINT_NATURAL: 
+@PANGO_GRAVITY_HINT_STRONG: 
+@PANGO_GRAVITY_HINT_LINE: 
+
+<!-- ##### MACRO PANGO_GRAVITY_IS_VERTICAL ##### -->
+<para>
+
+</para>
+
+@gravity: 
+
+
+<!-- ##### FUNCTION pango_gravity_get_for_matrix ##### -->
+<para>
+
+</para>
+
+@matrix: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_gravity_get_for_script ##### -->
+<para>
+
+</para>
+
+@script: 
+@base_gravity: 
+@hint: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_gravity_get_for_script_and_width ##### -->
+<para>
+
+</para>
+
+@script: 
+@wide: 
+@base_gravity: 
+@hint: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_gravity_to_rotation ##### -->
+<para>
+
+</para>
+
+@gravity: 
+@Returns: 
+
+
diff --git a/docs/tmpl/win32-fonts.sgml b/docs/tmpl/win32-fonts.sgml
new file mode 100755 (executable)
index 0000000..8ead0d0
--- /dev/null
@@ -0,0 +1,258 @@
+<!-- ##### SECTION Title ##### -->
+Win32 Fonts and Rendering
+
+<!-- ##### SECTION Short_Description ##### -->
+Functions for shape engines to manipulate Win32 fonts
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The macros and functions in this section are used to access fonts natively on
+Win32 systems and to render text in conjunction with Win32 APIs.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_WIN32 ##### -->
+<para>
+A string constant identifying the Win32 renderer. The associated quark (see
+g_quark_from_string()) is used to identify the renderer in pango_find_map().
+</para>
+
+
+
+<!-- ##### FUNCTION pango_win32_get_context ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_render ##### -->
+<para>
+
+</para>
+
+@hdc: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_win32_render_transformed ##### -->
+<para>
+
+</para>
+
+@hdc: 
+@matrix: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_win32_render_layout_line ##### -->
+<para>
+
+</para>
+
+@hdc: 
+@line: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_win32_render_layout ##### -->
+<para>
+
+</para>
+
+@hdc: 
+@layout: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_win32_get_unknown_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_get_glyph_index ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_select_font ##### -->
+<para>
+
+</para>
+
+@font: 
+@hdc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_done_font ##### -->
+<para>
+
+</para>
+
+@font: 
+
+
+<!-- ##### FUNCTION pango_win32_font_get_metrics_factor ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_get_debug_flag ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_get_dc ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### STRUCT PangoWin32FontCache ##### -->
+<para>
+A #PangoWin32FontCache caches
+HFONTs by their LOGFONT descriptions. 
+</para>
+
+
+<!-- ##### FUNCTION pango_win32_font_cache_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_cache_free ##### -->
+<para>
+
+</para>
+
+@cache: 
+
+
+<!-- ##### FUNCTION pango_win32_font_cache_load ##### -->
+<para>
+
+</para>
+
+@cache: 
+@logfont: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_cache_loadw ##### -->
+<para>
+
+</para>
+
+@cache: 
+@logfont: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_cache_unload ##### -->
+<para>
+
+</para>
+
+@cache: 
+@hfont: 
+
+
+<!-- ##### FUNCTION pango_win32_font_map_for_display ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_shutdown_display ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION pango_win32_font_map_get_font_cache ##### -->
+<para>
+
+</para>
+
+@font_map: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_logfont ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_logfontw ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_description_from_logfont ##### -->
+<para>
+
+</para>
+
+@lfp: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_win32_font_description_from_logfontw ##### -->
+<para>
+
+</para>
+
+@lfp: 
+@Returns: 
+
+
diff --git a/docs/tmpl/x-fonts.sgml b/docs/tmpl/x-fonts.sgml
new file mode 100755 (executable)
index 0000000..ca76af7
--- /dev/null
@@ -0,0 +1,313 @@
+<!-- ##### SECTION Title ##### -->
+Deprecated X font backend
+
+<!-- ##### SECTION Short_Description ##### -->
+Font handling and rendering with the deprecated X font backend
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The functions and macros in this section are for use with the old
+X font backend which used server-side bitmap fonts. This font backend
+is no longer supported, and attempts to use it will produce
+unpredictable results. Use the <link linkend="pango-Xft-Fonts-and-Rendering">Xft</link>
+or <link linkend="pango-Cairo-Rendering">Cairo</link> backend instead.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_X ##### -->
+<para>
+A string constant identifying the X renderer. The associated quark (see 
+g_quark_from_string()) is used to identify the renderer in pango_find_map(). 
+</para>
+
+
+
+<!-- ##### FUNCTION pango_x_get_context ##### -->
+<para>
+
+</para>
+
+@display: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_context_set_funcs ##### -->
+<para>
+
+</para>
+
+@context: 
+@get_gc_func: 
+@free_gc_func: 
+
+
+<!-- ##### USER_FUNCTION PangoGetGCFunc ##### -->
+<para>
+Specifies the type of the function used to create a new GC for a given
+color. 
+</para>
+
+@context: a #PangoContext.
+@color: the color to create a new GC for.
+@base_gc: the GC to base the new GC on.
+@Returns: the new GC.
+
+
+<!-- ##### USER_FUNCTION PangoFreeGCFunc ##### -->
+<para>
+Specifies the type of the function used to free a GC created with 
+the corresponding #PangoGetGCFunc function.
+</para>
+
+@context: a #PangoContext.
+@gc: the GC to free.
+
+
+<!-- ##### FUNCTION pango_x_render ##### -->
+<para>
+
+</para>
+
+@display: 
+@d: 
+@gc: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_x_render_layout_line ##### -->
+<para>
+
+</para>
+
+@display: 
+@drawable: 
+@gc: 
+@line: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_x_render_layout ##### -->
+<para>
+
+</para>
+
+@display: 
+@drawable: 
+@gc: 
+@layout: 
+@x: 
+@y: 
+
+
+<!-- ##### TYPEDEF PangoXSubfont ##### -->
+<para>
+The #PangoXSubFont type is an integer ID that identifies one
+particular X font within the fonts referenced in a #PangoFont.
+</para>
+
+
+<!-- ##### MACRO PANGO_X_MAKE_GLYPH ##### -->
+<para>
+Make a glyph index from a #PangoXSubFont index and a index
+of a character with the corresponding X font.
+</para>
+
+@subfont: a #PangoXSubfont index
+@index_: the index of a character within an X font.
+
+
+<!-- ##### MACRO PANGO_X_GLYPH_SUBFONT ##### -->
+<para>
+Extract the subfont index from a glyph index.
+</para>
+
+@glyph: a #PangoGlyphIndex
+
+
+<!-- ##### MACRO PANGO_X_GLYPH_INDEX ##### -->
+<para>
+Extract the character index within the X font from a
+glyph index.
+</para>
+
+@glyph: a #PangoGlyphIndex
+
+
+<!-- ##### FUNCTION pango_x_load_font ##### -->
+<para>
+
+</para>
+
+@display: 
+@spec: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_get_unknown_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_has_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@glyph: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_list_subfonts ##### -->
+<para>
+
+</para>
+
+@font: 
+@charsets: 
+@n_charsets: 
+@subfont_ids: 
+@subfont_charsets: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_font_map_for_display ##### -->
+<para>
+
+</para>
+
+@display: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_shutdown_display ##### -->
+<para>
+
+</para>
+
+@display: 
+
+
+<!-- ##### FUNCTION pango_x_font_map_get_font_cache ##### -->
+<para>
+
+</para>
+
+@font_map: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_font_subfont_xlfd ##### -->
+<para>
+
+</para>
+
+@font: 
+@subfont_id: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_find_first_subfont ##### -->
+<para>
+
+</para>
+
+@font: 
+@charsets: 
+@n_charsets: 
+@rfont: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_font_get_unknown_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_apply_ligatures ##### -->
+<para>
+
+</para>
+
+@font: 
+@subfont: 
+@glyphs: 
+@n_glyphs: 
+@clusters: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_fallback_shape ##### -->
+<para>
+
+</para>
+
+@font: 
+@glyphs: 
+@text: 
+@n_chars: 
+
+
+<!-- ##### STRUCT PangoXFontCache ##### -->
+<para>
+A #PangoXFontCache caches
+<type>XFontStructs</type> for a single display by their XLFD name. 
+</para>
+
+
+<!-- ##### FUNCTION pango_x_font_cache_new ##### -->
+<para>
+
+</para>
+
+@display: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_font_cache_free ##### -->
+<para>
+
+</para>
+
+@cache: 
+
+
+<!-- ##### FUNCTION pango_x_font_cache_load ##### -->
+<para>
+
+</para>
+
+@cache: 
+@xlfd: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_x_font_cache_unload ##### -->
+<para>
+
+</para>
+
+@cache: 
+@fs: 
+
+
diff --git a/docs/tmpl/xft-fonts.sgml b/docs/tmpl/xft-fonts.sgml
new file mode 100755 (executable)
index 0000000..76e755a
--- /dev/null
@@ -0,0 +1,308 @@
+<!-- ##### SECTION Title ##### -->
+Xft Fonts and Rendering
+
+<!-- ##### SECTION Short_Description ##### -->
+Font handling and rendering with the Xft backend
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The Xft library is a library for displaying fonts on the X window
+system; internally it uses the fontconfig library to locate font
+files, and the FreeType library to load and render fonts. The
+Xft backend is the recommended Pango font backend for screen
+display with X. (The <link linkend="pango-Cairo-Rendering">Cairo back end</link> is another possibility.)
+</para>
+<para>
+Using the Xft backend is generally straightforward;
+pango_xft_get_context() creates a context for a specified display
+and screen. You can then create a #PangoLayout with that context
+and render it with pango_xft_render_layout(). At a more advanced
+level, the low-level fontconfig options used for rendering fonts
+can be affected using pango_xft_set_default_substitute(), and
+pango_xft_substitute_changed().
+</para>
+<para>
+A range of functions for drawing pieces of a layout, such as
+individual layout lines and glyphs strings are provided.  You can also
+directly create a #PangoXftRenderer. Finally, in some advanced cases, it
+is useful to derive from #PangoXftRenderer. Deriving from
+#PangoXftRenderer is useful for two reasons. One reason is be to
+support custom attributes by overriding #PangoRendererClass virtual
+functions like 'prepare_run' or 'draw_shape'. The reason is to
+customize exactly how the final bits are drawn to the destination by
+overriding the #PangoXftRendererClass virtual functions
+'composite_glyphs' and 'composite_trapezoids'.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### STRUCT PangoXftFont ##### -->
+<para>
+#PangoXftFont is an implementation of #PangoFcFont using the Xft
+library for rendering.  It is used in conjunction with #PangoXftFontMap.
+</para>
+
+
+<!-- ##### STRUCT PangoXftFontMap ##### -->
+<para>
+#PangoXftFontMap is an implementation of #PangoFcFontMap suitable for
+the Xft library as the renderer.  It is used in to create fonts of
+type #PangoXftFont.
+</para>
+
+
+<!-- ##### MACRO PANGO_RENDER_TYPE_XFT ##### -->
+<para>
+A string constant that was used to identify shape engines that work
+with the Xft backend. See %PANGO_RENDER_TYPE_FC for the replacement.
+</para>
+
+
+
+<!-- ##### FUNCTION pango_xft_get_context ##### -->
+<para>
+
+</para>
+
+@display: 
+@screen: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_get_font_map ##### -->
+<para>
+
+</para>
+
+@display: 
+@screen: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_set_default_substitute ##### -->
+<para>
+
+</para>
+
+@display: 
+@screen: 
+@func: 
+@data: 
+@notify: 
+
+
+<!-- ##### USER_FUNCTION PangoXftSubstituteFunc ##### -->
+<para>
+Function type for doing final config tweaking on prepared FcPatterns.
+</para>
+
+@pattern: the FcPattern to tweak.
+@data: user data.
+
+
+<!-- ##### FUNCTION pango_xft_substitute_changed ##### -->
+<para>
+
+</para>
+
+@display: 
+@screen: 
+
+
+<!-- ##### FUNCTION pango_xft_shutdown_display ##### -->
+<para>
+
+</para>
+
+@display: 
+@screen: 
+
+
+<!-- ##### FUNCTION pango_xft_font_get_font ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_font_get_display ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_font_has_char ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_font_lock_face ##### -->
+<para>
+
+</para>
+
+@font: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_font_unlock_face ##### -->
+<para>
+
+</para>
+
+@font: 
+
+
+<!-- ##### FUNCTION pango_xft_font_get_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_font_get_unknown_glyph ##### -->
+<para>
+
+</para>
+
+@font: 
+@wc: 
+@Returns: 
+
+
+<!-- ##### STRUCT PangoXftRenderer ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG PangoXftRenderer:display ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG PangoXftRenderer:screen ##### -->
+<para>
+
+</para>
+
+<!-- ##### STRUCT PangoXftRendererClass ##### -->
+<para>
+
+</para>
+
+@composite_trapezoids: 
+@composite_glyphs: 
+
+<!-- ##### FUNCTION pango_xft_renderer_new ##### -->
+<para>
+
+</para>
+
+@display: 
+@screen: 
+@Returns: 
+
+
+<!-- ##### FUNCTION pango_xft_renderer_set_draw ##### -->
+<para>
+
+</para>
+
+@xftrenderer: 
+@draw: 
+
+
+<!-- ##### FUNCTION pango_xft_renderer_set_default_color ##### -->
+<para>
+
+</para>
+
+@xftrenderer: 
+@default_color: 
+
+
+<!-- ##### FUNCTION pango_xft_render ##### -->
+<para>
+
+</para>
+
+@draw: 
+@color: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_xft_picture_render ##### -->
+<para>
+
+</para>
+
+@display: 
+@src_picture: 
+@dest_picture: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_xft_render_transformed ##### -->
+<para>
+
+</para>
+
+@draw: 
+@color: 
+@matrix: 
+@font: 
+@glyphs: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_xft_render_layout_line ##### -->
+<para>
+
+</para>
+
+@draw: 
+@color: 
+@line: 
+@x: 
+@y: 
+
+
+<!-- ##### FUNCTION pango_xft_render_layout ##### -->
+<para>
+
+</para>
+
+@draw: 
+@color: 
+@layout: 
+@x: 
+@y: 
+
+
diff --git a/docs/version.xml b/docs/version.xml
new file mode 100755 (executable)
index 0000000..dd43a14
--- /dev/null
@@ -0,0 +1 @@
+1.26.1
diff --git a/docs/version.xml.in b/docs/version.xml.in
new file mode 100755 (executable)
index 0000000..8f55647
--- /dev/null
@@ -0,0 +1 @@
+@PANGO_VERSION@
diff --git a/docs/xml/annotation-glossary.xml b/docs/xml/annotation-glossary.xml
new file mode 100755 (executable)
index 0000000..6f0a5a9
--- /dev/null
@@ -0,0 +1,34 @@
+
+<glossary id="annotation-glossary">
+  <title>Annotation Glossary</title>
+<glossdiv><title>E</title>
+    <glossentry>
+      <glossterm><anchor id="annotation-glossterm-element type Pango.Attribute): (transfer"/>element type Pango.Attribute): (transfer</glossterm>
+      <glossdef>
+        <para></para>
+      </glossdef>
+    </glossentry>
+</glossdiv>
+<glossdiv><title>O</title>
+    <glossentry>
+      <glossterm><anchor id="annotation-glossterm-out): (array length=n_ranges):"/>out): (array length=n_ranges):</glossterm>
+      <glossdef>
+        <para></para>
+      </glossdef>
+    </glossentry>
+</glossdiv>
+<glossdiv><title>E</title>
+    <glossentry>
+      <glossterm><anchor id="annotation-glossterm-element-type Pango.LayoutLine): (transfer"/>element-type Pango.LayoutLine): (transfer</glossterm>
+      <glossdef>
+        <para></para>
+      </glossdef>
+    </glossentry>
+    <glossentry>
+      <glossterm><anchor id="annotation-glossterm-element-type Pango.Attribute): (transfer"/>element-type Pango.Attribute): (transfer</glossterm>
+      <glossdef>
+        <para></para>
+      </glossdef>
+    </glossentry>
+</glossdiv>
+</glossary>
diff --git a/docs/xml/api-index-1.10.xml b/docs/xml/api-index-1.10.xml
new file mode 100755 (executable)
index 0000000..bb42a6d
--- /dev/null
@@ -0,0 +1,27 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoCairoFontMap-struct"><link linkend="PangoCairoFontMap-struct">PangoCairoFontMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-ref"><link linkend="pango-attr-list-ref">pango_attr_list_ref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-get-font-options"><link linkend="pango-cairo-context-get-font-options">pango_cairo_context_get_font_options</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-get-resolution"><link linkend="pango-cairo-context-get-resolution">pango_cairo_context_get_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-set-font-options"><link linkend="pango-cairo-context-set-font-options">pango_cairo_context_set_font_options</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-set-resolution"><link linkend="pango-cairo-context-set-resolution">pango_cairo_context_set_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-create-layout"><link linkend="pango-cairo-create-layout">pango_cairo_create_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-create-context"><link linkend="pango-cairo-font-map-create-context">pango_cairo_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-get-default"><link linkend="pango-cairo-font-map-get-default">pango_cairo_font_map_get_default</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-get-resolution"><link linkend="pango-cairo-font-map-get-resolution">pango_cairo_font_map_get_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-new"><link linkend="pango-cairo-font-map-new">pango_cairo_font_map_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-set-resolution"><link linkend="pango-cairo-font-map-set-resolution">pango_cairo_font_map_set_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-glyph-string-path"><link linkend="pango-cairo-glyph-string-path">pango_cairo_glyph_string_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-layout-line-path"><link linkend="pango-cairo-layout-line-path">pango_cairo_layout_line_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-layout-path"><link linkend="pango-cairo-layout-path">pango_cairo_layout_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-glyph-string"><link linkend="pango-cairo-show-glyph-string">pango_cairo_show_glyph_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-layout"><link linkend="pango-cairo-show-layout">pango_cairo_show_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-layout-line"><link linkend="pango-cairo-show-layout-line">pango_cairo_show_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-update-context"><link linkend="pango-cairo-update-context">pango_cairo_update_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-update-layout"><link linkend="pango-cairo-update-layout">pango_cairo_update_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-get-font-map"><link linkend="pango-font-get-font-map">pango_font_get_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-is-zero-width"><link linkend="pango-is-zero-width">pango_is_zero_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-ref"><link linkend="pango-layout-line-ref">pango_layout_line_ref</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.12.xml b/docs/xml/api-index-1.12.xml
new file mode 100755 (executable)
index 0000000..809a526
--- /dev/null
@@ -0,0 +1,7 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-matrix-get-font-scale-factor"><link linkend="pango-matrix-get-font-scale-factor">pango_matrix_get_font_scale_factor</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-quantize-line-geometry"><link linkend="pango-quantize-line-geometry">pango_quantize_line_geometry</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-description-from-logfont"><link linkend="pango-win32-font-description-from-logfont">pango_win32_font_description_from_logfont</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.14.xml b/docs/xml/api-index-1.14.xml
new file mode 100755 (executable)
index 0000000..6d4aaeb
--- /dev/null
@@ -0,0 +1,10 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-cairo-error-underline-path"><link linkend="pango-cairo-error-underline-path">pango_cairo_error_underline_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-error-underline"><link linkend="pango-cairo-show-error-underline">pango_cairo_show_error_underline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-describe-with-absolute-size"><link linkend="pango-font-describe-with-absolute-size">pango_font_describe_with_absolute_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-get-width"><link linkend="pango-glyph-string-get-width">pango_glyph_string_get_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-PIXELS-CEIL--CAPS"><link linkend="PANGO-PIXELS-CEIL--CAPS">PANGO_PIXELS_CEIL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-PIXELS-FLOOR--CAPS"><link linkend="PANGO-PIXELS-FLOOR--CAPS">PANGO_PIXELS_FLOOR</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.16.xml b/docs/xml/api-index-1.16.xml
new file mode 100755 (executable)
index 0000000..9b0da0b
--- /dev/null
@@ -0,0 +1,44 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoGravity"><link linkend="PangoGravity">PangoGravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGravityHint"><link linkend="PangoGravityHint">PangoGravityHint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-gravity-hint-new"><link linkend="pango-attr-gravity-hint-new">pango_attr_gravity_hint_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-gravity-new"><link linkend="pango-attr-gravity-new">pango_attr_gravity_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-color-to-string"><link linkend="pango-color-to-string">pango_color_to_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-base-gravity"><link linkend="pango-context-get-base-gravity">pango_context_get_base_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-gravity"><link linkend="pango-context-get-gravity">pango_context_get_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-gravity-hint"><link linkend="pango-context-get-gravity-hint">pango_context_get_gravity_hint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-base-gravity"><link linkend="pango-context-set-base-gravity">pango_context_set_base_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-gravity-hint"><link linkend="pango-context-set-gravity-hint">pango_context_set_gravity_hint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-extents-to-pixels"><link linkend="pango-extents-to-pixels">pango_extents_to_pixels</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-gravity"><link linkend="pango-font-description-get-gravity">pango_font_description_get_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-gravity"><link linkend="pango-font-description-set-gravity">pango_font_description_set_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-get-for-matrix"><link linkend="pango-gravity-get-for-matrix">pango_gravity_get_for_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-get-for-script"><link linkend="pango-gravity-get-for-script">pango_gravity_get_for_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GRAVITY-IS-VERTICAL--CAPS"><link linkend="PANGO-GRAVITY-IS-VERTICAL--CAPS">PANGO_GRAVITY_IS_VERTICAL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-to-rotation"><link linkend="pango-gravity-to-rotation">pango_gravity_to_rotation</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-get-default"><link linkend="pango-language-get-default">pango_language_get_default</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-lines-readonly"><link linkend="pango-layout-get-lines-readonly">pango_layout_get_lines_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-line-readonly"><link linkend="pango-layout-get-line-readonly">pango_layout_get_line_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-unknown-glyphs-count"><link linkend="pango-layout-get-unknown-glyphs-count">pango_layout_get_unknown_glyphs_count</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-is-ellipsized"><link linkend="pango-layout-is-ellipsized">pango_layout_is_ellipsized</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-is-wrapped"><link linkend="pango-layout-is-wrapped">pango_layout_is_wrapped</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-line-readonly"><link linkend="pango-layout-iter-get-line-readonly">pango_layout_iter_get_line_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-run-readonly"><link linkend="pango-layout-iter-get-run-readonly">pango_layout_iter_get_run_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-distance"><link linkend="pango-matrix-transform-distance">pango_matrix_transform_distance</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-pixel-rectangle"><link linkend="pango-matrix-transform-pixel-rectangle">pango_matrix_transform_pixel_rectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-point"><link linkend="pango-matrix-transform-point">pango_matrix_transform_point</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-rectangle"><link linkend="pango-matrix-transform-rectangle">pango_matrix_transform_rectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-ALL-GLYPHS--CAPS"><link linkend="PANGO-OT-ALL-GLYPHS--CAPS">PANGO_OT_ALL_GLYPHS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-DEFAULT-LANGUAGE--CAPS"><link linkend="PANGO-OT-DEFAULT-LANGUAGE--CAPS">PANGO_OT_DEFAULT_LANGUAGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-enum"><link linkend="pango-parse-enum">pango_parse_enum</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-units-from-double"><link linkend="pango-units-from-double">pango_units_from_double</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-units-to-double"><link linkend="pango-units-to-double">pango_units_to_double</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-version"><link linkend="pango-version">pango_version</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-version-check"><link linkend="pango-version-check">pango_version_check</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-version-string"><link linkend="pango-version-string">pango_version_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-cache-loadw"><link linkend="pango-win32-font-cache-loadw">pango_win32_font_cache_loadw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-description-from-logfontw"><link linkend="pango-win32-font-description-from-logfontw">pango_win32_font_description_from_logfontw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-logfontw"><link linkend="pango-win32-font-logfontw">pango_win32_font_logfontw</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.18.xml b/docs/xml/api-index-1.18.xml
new file mode 100755 (executable)
index 0000000..a8aab82
--- /dev/null
@@ -0,0 +1,33 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoCairoFont-struct"><link linkend="PangoCairoFont-struct">PangoCairoFont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTFeatureMap"><link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTRulesetDescription"><link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-atsui-font-get-cgfont"><link linkend="pango-atsui-font-get-cgfont">pango_atsui_font_get_cgfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-get-shape-renderer"><link linkend="pango-cairo-context-get-shape-renderer">pango_cairo_context_get_shape_renderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-set-shape-renderer"><link linkend="pango-cairo-context-set-shape-renderer">pango_cairo_context_set_shape_renderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-get-scaled-font"><link linkend="pango-cairo-font-get-scaled-font">pango_cairo_font_get_scaled_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-get-font-type"><link linkend="pango-cairo-font-map-get-font-type">pango_cairo_font_map_get_font_type</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-new-for-font-type"><link linkend="pango-cairo-font-map-new-for-font-type">pango_cairo_font_map_new_for_font_type</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-face-is-synthesized"><link linkend="pango-font-face-is-synthesized">pango_font_face_is_synthesized</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-NO-FEATURE--CAPS"><link linkend="PANGO-OT-NO-FEATURE--CAPS">PANGO_OT_NO_FEATURE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-NO-SCRIPT--CAPS"><link linkend="PANGO-OT-NO-SCRIPT--CAPS">PANGO_OT_NO_SCRIPT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-copy"><link linkend="pango-ot-ruleset-description-copy">pango_ot_ruleset_description_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-equal"><link linkend="pango-ot-ruleset-description-equal">pango_ot_ruleset_description_equal</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-free"><link linkend="pango-ot-ruleset-description-free">pango_ot_ruleset_description_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-hash"><link linkend="pango-ot-ruleset-description-hash">pango_ot_ruleset_description_hash</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-get-feature-count"><link linkend="pango-ot-ruleset-get-feature-count">pango_ot_ruleset_get_feature_count</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-get-for-description"><link linkend="pango-ot-ruleset-get-for-description">pango_ot_ruleset_get_for_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-maybe-add-feature"><link linkend="pango-ot-ruleset-maybe-add-feature">pango_ot_ruleset_maybe_add_feature</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-maybe-add-features"><link linkend="pango-ot-ruleset-maybe-add-features">pango_ot_ruleset_maybe_add_features</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-new-for"><link linkend="pango-ot-ruleset-new-for">pango_ot_ruleset_new_for</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-new-from-description"><link linkend="pango-ot-ruleset-new-from-description">pango_ot_ruleset_new_from_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS"><link linkend="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS">PANGO_OT_TAG_DEFAULT_LANGUAGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS"><link linkend="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS">PANGO_OT_TAG_DEFAULT_SCRIPT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-from-language"><link linkend="pango-ot-tag-from-language">pango_ot_tag_from_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-from-script"><link linkend="pango-ot-tag-from-script">pango_ot_tag_from_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-to-language"><link linkend="pango-ot-tag-to-language">pango_ot_tag_to_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-to-script"><link linkend="pango-ot-tag-to-script">pango_ot_tag_to_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-UNITS-ROUND--CAPS"><link linkend="PANGO-UNITS-ROUND--CAPS">PANGO_UNITS_ROUND</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.2.xml b/docs/xml/api-index-1.2.xml
new file mode 100755 (executable)
index 0000000..9440a68
--- /dev/null
@@ -0,0 +1,23 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-attr-iterator-get-attrs"><link linkend="pango-attr-iterator-get-attrs">pango_attr_iterator_get_attrs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-filter"><link linkend="pango-attr-list-filter">pango_attr_list_filter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-create-context"><link linkend="pango-ft2-font-map-create-context">pango_ft2_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-new"><link linkend="pango-ft2-font-map-new">pango_ft2_font_map_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-set-default-substitute"><link linkend="pango-ft2-font-map-set-default-substitute">pango_ft2_font_map_set_default_substitute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-set-resolution"><link linkend="pango-ft2-font-map-set-resolution">pango_ft2_font_map_set_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-substitute-changed"><link linkend="pango-ft2-font-map-substitute-changed">pango_ft2_font_map_substitute_changed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-apply-attrs"><link linkend="pango-glyph-item-apply-attrs">pango_glyph_item_apply_attrs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-split"><link linkend="pango-glyph-item-split">pango_glyph_item_split</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-get"><link linkend="pango-ot-info-get">pango_ot_info_get</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-debug-flag"><link linkend="pango-win32-get-debug-flag">pango_win32_get_debug_flag</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-glyph"><link linkend="pango-xft-font-get-glyph">pango_xft_font_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-has-char"><link linkend="pango-xft-font-has-char">pango_xft_font_has_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-lock-face"><link linkend="pango-xft-font-lock-face">pango_xft_font_lock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-unlock-face"><link linkend="pango-xft-font-unlock-face">pango_xft_font_unlock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-get-font-map"><link linkend="pango-xft-get-font-map">pango_xft_get_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-set-default-substitute"><link linkend="pango-xft-set-default-substitute">pango_xft_set_default_substitute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-shutdown-display"><link linkend="pango-xft-shutdown-display">pango_xft_shutdown_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-substitute-changed"><link linkend="pango-xft-substitute-changed">pango_xft_substitute_changed</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.20.xml b/docs/xml/api-index-1.20.xml
new file mode 100755 (executable)
index 0000000..08669c1
--- /dev/null
@@ -0,0 +1,16 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-attribute-init"><link linkend="pango-attribute-init">pango_attribute_init</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FC-GRAVITY--CAPS"><link linkend="PANGO-FC-GRAVITY--CAPS">PANGO_FC_GRAVITY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FC-VERSION--CAPS"><link linkend="PANGO-FC-VERSION--CAPS">PANGO_FC_VERSION</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GLYPH-INVALID-INPUT--CAPS"><link linkend="PANGO-GLYPH-INVALID-INPUT--CAPS">PANGO_GLYPH_INVALID_INPUT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-copy"><link linkend="pango-glyph-item-copy">pango_glyph_item_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-height"><link linkend="pango-layout-get-height">pango_layout_get_height</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-copy"><link linkend="pango-layout-iter-copy">pango_layout_iter_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-layout"><link linkend="pango-layout-iter-get-layout">pango_layout_iter_get_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-height"><link linkend="pango-layout-set-height">pango_layout_set_height</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-layout"><link linkend="pango-renderer-get-layout">pango_renderer_get_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-layout-line"><link linkend="pango-renderer-get-layout-line">pango_renderer_get_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-GLYPH-ITEM--CAPS"><link linkend="PANGO-TYPE-GLYPH-ITEM--CAPS">PANGO_TYPE_GLYPH_ITEM</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.22.xml b/docs/xml/api-index-1.22.xml
new file mode 100755 (executable)
index 0000000..6dd9947
--- /dev/null
@@ -0,0 +1,22 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoBidiType"><link linkend="PangoBidiType">PangoBidiType</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphItemIter"><link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-type-get-name"><link linkend="pango-attr-type-get-name">pango_attr_type_get_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-bidi-type-for-unichar"><link linkend="pango-bidi-type-for-unichar">pango_bidi_type_for_unichar</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-create-context"><link linkend="pango-cairo-create-context">pango_cairo_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-set-default"><link linkend="pango-cairo-font-map-set-default">pango_cairo_font_map_set_default</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-glyph-item"><link linkend="pango-cairo-show-glyph-item">pango_cairo_show_glyph_item</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-create-context"><link linkend="pango-font-map-create-context">pango_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-copy"><link linkend="pango-glyph-item-iter-copy">pango_glyph_item_iter_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-free"><link linkend="pango-glyph-item-iter-free">pango_glyph_item_iter_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-init-end"><link linkend="pango-glyph-item-iter-init-end">pango_glyph_item_iter_init_end</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-init-start"><link linkend="pango-glyph-item-iter-init-start">pango_glyph_item_iter_init_start</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-next-cluster"><link linkend="pango-glyph-item-iter-next-cluster">pango_glyph_item_iter_next_cluster</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-prev-cluster"><link linkend="pango-glyph-item-iter-prev-cluster">pango_glyph_item_iter_prev_cluster</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-get-scripts"><link linkend="pango-language-get-scripts">pango_language_get_scripts</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-baseline"><link linkend="pango-layout-get-baseline">pango_layout_get_baseline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-glyph-item"><link linkend="pango-renderer-draw-glyph-item">pango_renderer_draw_glyph_item</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS"><link linkend="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS">PANGO_TYPE_GLYPH_ITEM_ITER</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.24.xml b/docs/xml/api-index-1.24.xml
new file mode 100755 (executable)
index 0000000..c2bda4b
--- /dev/null
@@ -0,0 +1,16 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoFcFontKey"><link linkend="PangoFcFontKey">PangoFcFontKey</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFontsetKey"><link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-absolute-size"><link linkend="pango-fc-fontset-key-get-absolute-size">pango_fc_fontset_key_get_absolute_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-context-key"><link linkend="pango-fc-fontset-key-get-context-key">pango_fc_fontset_key_get_context_key</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-description"><link linkend="pango-fc-fontset-key-get-description">pango_fc_fontset_key_get_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-language"><link linkend="pango-fc-fontset-key-get-language">pango_fc_fontset_key_get_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-matrix"><link linkend="pango-fc-fontset-key-get-matrix">pango_fc_fontset_key_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-resolution"><link linkend="pango-fc-fontset-key-get-resolution">pango_fc_fontset_key_get_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-key-get-context-key"><link linkend="pango-fc-font-key-get-context-key">pango_fc_font_key_get_context_key</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-key-get-matrix"><link linkend="pango-fc-font-key-get-matrix">pango_fc_font_key_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-key-get-pattern"><link linkend="pango-fc-font-key-get-pattern">pango_fc_font_key_get_pattern</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FC-PRGNAME--CAPS"><link linkend="PANGO-FC-PRGNAME--CAPS">PANGO_FC_PRGNAME</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.26..xml b/docs/xml/api-index-1.26..xml
new file mode 100755 (executable)
index 0000000..066eeda
--- /dev/null
@@ -0,0 +1,5 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-fc-font-map-find-decoder"><link linkend="pango-fc-font-map-find-decoder">pango_fc_font_map_find_decoder</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.26.xml b/docs/xml/api-index-1.26.xml
new file mode 100755 (executable)
index 0000000..0c3a540
--- /dev/null
@@ -0,0 +1,6 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-glyph-item-get-logical-widths"><link linkend="pango-glyph-item-get-logical-widths">pango_glyph_item_get_logical_widths</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-get-for-script-and-width"><link linkend="pango-gravity-get-for-script-and-width">pango_gravity_get_for_script_and_width</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.4.xml b/docs/xml/api-index-1.4.xml
new file mode 100755 (executable)
index 0000000..8801ece
--- /dev/null
@@ -0,0 +1,42 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoFontsetForeachFunc"><link linkend="PangoFontsetForeachFunc">PangoFontsetForeachFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-fallback-new"><link linkend="pango-attr-fallback-new">pango_attr_fallback_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-description-from-pattern"><link linkend="pango-fc-font-description-from-pattern">pango_fc_font_description_from_pattern</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-get-glyph"><link linkend="pango-fc-font-get-glyph">pango_fc_font_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-get-unknown-glyph"><link linkend="pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-has-char"><link linkend="pango-fc-font-has-char">pango_fc_font_has_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-kern-glyphs"><link linkend="pango-fc-font-kern-glyphs">pango_fc_font_kern_glyphs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-lock-face"><link linkend="pango-fc-font-lock-face">pango_fc_font_lock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-cache-clear"><link linkend="pango-fc-font-map-cache-clear">pango_fc_font_map_cache_clear</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-create-context"><link linkend="pango-fc-font-map-create-context">pango_fc_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-shutdown"><link linkend="pango-fc-font-map-shutdown">pango_fc_font_map_shutdown</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-unlock-face"><link linkend="pango-fc-font-unlock-face">pango_fc_font_unlock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-find-base-dir"><link linkend="pango-find-base-dir">pango_find_base_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-foreach"><link linkend="pango-fontset-foreach">pango_fontset_foreach</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-face-list-sizes"><link linkend="pango-font-face-list-sizes">pango_font_face_list_sizes</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-family-is-monospace"><link linkend="pango-font-family-is-monospace">pango_font_family_is_monospace</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-get-shape-engine-type"><link linkend="pango-font-map-get-shape-engine-type">pango_font_map_get_shape_engine_type</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-itemize-with-base-dir"><link linkend="pango-itemize-with-base-dir">pango_itemize_with_base_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-includes-script"><link linkend="pango-language-includes-script">pango_language_includes_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-auto-dir"><link linkend="pango-layout-get-auto-dir">pango_layout_get_auto_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-auto-dir"><link linkend="pango-layout-set-auto-dir">pango_layout_set_auto_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-log2vis-get-embedding-levels"><link linkend="pango-log2vis-get-embedding-levels">pango_log2vis_get_embedding_levels</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-map-get-engines"><link linkend="pango-map-get-engines">pango_map_get_engines</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-add-glyph"><link linkend="pango-ot-buffer-add-glyph">pango_ot_buffer_add_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-clear"><link linkend="pango-ot-buffer-clear">pango_ot_buffer_clear</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-destroy"><link linkend="pango-ot-buffer-destroy">pango_ot_buffer_destroy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-get-glyphs"><link linkend="pango-ot-buffer-get-glyphs">pango_ot_buffer_get_glyphs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-new"><link linkend="pango-ot-buffer-new">pango_ot_buffer_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-output"><link linkend="pango-ot-buffer-output">pango_ot_buffer_output</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-set-rtl"><link linkend="pango-ot-buffer-set-rtl">pango_ot_buffer_set_rtl</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-position"><link linkend="pango-ot-ruleset-position">pango_ot_ruleset_position</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-substitute"><link linkend="pango-ot-ruleset-substitute">pango_ot_ruleset_substitute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-for-unichar"><link linkend="pango-script-for-unichar">pango_script_for_unichar</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-get-sample-language"><link linkend="pango-script-get-sample-language">pango_script_get_sample_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-free"><link linkend="pango-script-iter-free">pango_script_iter_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-get-range"><link linkend="pango-script-iter-get-range">pango_script_iter_get_range</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-new"><link linkend="pango-script-iter-new">pango_script_iter_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-next"><link linkend="pango-script-iter-next">pango_script_iter_next</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.6..xml b/docs/xml/api-index-1.6..xml
new file mode 100755 (executable)
index 0000000..2cb64de
--- /dev/null
@@ -0,0 +1,5 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="pango-fc-font-map-add-decoder-find-func"><link linkend="pango-fc-font-map-add-decoder-find-func">pango_fc_font_map_add_decoder_find_func</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.6.xml b/docs/xml/api-index-1.6.xml
new file mode 100755 (executable)
index 0000000..e42535a
--- /dev/null
@@ -0,0 +1,32 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoFcDecoder-struct"><link linkend="PangoFcDecoder-struct">PangoFcDecoder</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcDecoderClass"><link linkend="PangoFcDecoderClass">PangoFcDecoderClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoMatrix"><link linkend="PangoMatrix">PangoMatrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-letter-spacing-new"><link linkend="pango-attr-letter-spacing-new">pango_attr_letter_spacing_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-font-map"><link linkend="pango-context-get-font-map">pango_context_get_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-matrix"><link linkend="pango-context-get-matrix">pango_context_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-matrix"><link linkend="pango-context-set-matrix">pango_context_set_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-decoder-get-charset"><link linkend="pango-fc-decoder-get-charset">pango_fc_decoder_get_charset</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-decoder-get-glyph"><link linkend="pango-fc-decoder-get-glyph">pango_fc_decoder_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-strikethrough-position"><link linkend="pango-font-metrics-get-strikethrough-position">pango_font_metrics_get_strikethrough_position</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-strikethrough-thickness"><link linkend="pango-font-metrics-get-strikethrough-thickness">pango_font_metrics_get_strikethrough_thickness</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-underline-position"><link linkend="pango-font-metrics-get-underline-position">pango_font_metrics_get_underline_position</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-underline-thickness"><link linkend="pango-font-metrics-get-underline-thickness">pango_font_metrics_get_underline_thickness</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-layout-line-subpixel"><link linkend="pango-ft2-render-layout-line-subpixel">pango_ft2_render_layout_line_subpixel</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-layout-subpixel"><link linkend="pango-ft2-render-layout-subpixel">pango_ft2_render_layout_subpixel</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-transformed"><link linkend="pango-ft2-render-transformed">pango_ft2_render_transformed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-free"><link linkend="pango-glyph-item-free">pango_glyph_item_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-letter-space"><link linkend="pango-glyph-item-letter-space">pango_glyph_item_letter_space</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-ellipsize"><link linkend="pango-layout-get-ellipsize">pango_layout_get_ellipsize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-ellipsize"><link linkend="pango-layout-set-ellipsize">pango_layout_set_ellipsize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-concat"><link linkend="pango-matrix-concat">pango_matrix_concat</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-copy"><link linkend="pango-matrix-copy">pango_matrix_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-free"><link linkend="pango-matrix-free">pango_matrix_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-MATRIX-INIT--CAPS"><link linkend="PANGO-MATRIX-INIT--CAPS">PANGO_MATRIX_INIT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-rotate"><link linkend="pango-matrix-rotate">pango_matrix_rotate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-scale"><link linkend="pango-matrix-scale">pango_matrix_scale</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-translate"><link linkend="pango-matrix-translate">pango_matrix_translate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-set-zero-width-marks"><link linkend="pango-ot-buffer-set-zero-width-marks">pango_ot_buffer_set_zero_width_marks</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-1.8.xml b/docs/xml/api-index-1.8.xml
new file mode 100755 (executable)
index 0000000..3ea53ea
--- /dev/null
@@ -0,0 +1,36 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoRenderer-struct"><link linkend="PangoRenderer-struct">PangoRenderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoRendererClass"><link linkend="PangoRendererClass">PangoRendererClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoRenderPart"><link linkend="PangoRenderPart">PangoRenderPart</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftRenderer-struct"><link linkend="PangoXftRenderer-struct">PangoXftRenderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftRendererClass"><link linkend="PangoXftRendererClass">PangoXftRendererClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-shape-new-with-data"><link linkend="pango-attr-shape-new-with-data">pango_attr_shape_new_with_data</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-size-new-absolute"><link linkend="pango-attr-size-new-absolute">pango_attr_size_new_absolute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-strikethrough-color-new"><link linkend="pango-attr-strikethrough-color-new">pango_attr_strikethrough_color_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-underline-color-new"><link linkend="pango-attr-underline-color-new">pango_attr_underline_color_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-size-is-absolute"><link linkend="pango-font-description-get-size-is-absolute">pango_font_description_get_size_is_absolute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-absolute-size"><link linkend="pango-font-description-set-absolute-size">pango_font_description_set_absolute_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-font-description"><link linkend="pango-layout-get-font-description">pango_layout_get_font_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-activate"><link linkend="pango-renderer-activate">pango_renderer_activate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-deactivate"><link linkend="pango-renderer-deactivate">pango_renderer_deactivate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-error-underline"><link linkend="pango-renderer-draw-error-underline">pango_renderer_draw_error_underline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-glyph"><link linkend="pango-renderer-draw-glyph">pango_renderer_draw_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-glyphs"><link linkend="pango-renderer-draw-glyphs">pango_renderer_draw_glyphs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-layout"><link linkend="pango-renderer-draw-layout">pango_renderer_draw_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-layout-line"><link linkend="pango-renderer-draw-layout-line">pango_renderer_draw_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-rectangle"><link linkend="pango-renderer-draw-rectangle">pango_renderer_draw_rectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-trapezoid"><link linkend="pango-renderer-draw-trapezoid">pango_renderer_draw_trapezoid</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-color"><link linkend="pango-renderer-get-color">pango_renderer_get_color</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-matrix"><link linkend="pango-renderer-get-matrix">pango_renderer_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-part-changed"><link linkend="pango-renderer-part-changed">pango_renderer_part_changed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-set-color"><link linkend="pango-renderer-set-color">pango_renderer_set_color</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-set-matrix"><link linkend="pango-renderer-set-matrix">pango_renderer_set_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-renderer-new"><link linkend="pango-xft-renderer-new">pango_xft_renderer_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-renderer-set-default-color"><link linkend="pango-xft-renderer-set-default-color">pango_xft_renderer_set_default_color</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-renderer-set-draw"><link linkend="pango-xft-renderer-set-draw">pango_xft_renderer_set_draw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render-layout"><link linkend="pango-xft-render-layout">pango_xft_render_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render-layout-line"><link linkend="pango-xft-render-layout-line">pango_xft_render_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render-transformed"><link linkend="pango-xft-render-transformed">pango_xft_render_transformed</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-deprecated.xml b/docs/xml/api-index-deprecated.xml
new file mode 100755 (executable)
index 0000000..dc28e6b
--- /dev/null
@@ -0,0 +1,55 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoFreeGCFunc"><link linkend="PangoFreeGCFunc">PangoFreeGCFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGetGCFunc"><link linkend="PangoGetGCFunc">PangoGetGCFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXFontCache"><link linkend="PangoXFontCache">PangoXFontCache</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXSubfont"><link linkend="PangoXSubfont">PangoXSubfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-create-context"><link linkend="pango-cairo-font-map-create-context">pango_cairo_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-get-unknown-glyph"><link linkend="pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-create-context"><link linkend="pango-fc-font-map-create-context">pango_fc_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-get-coverage"><link linkend="pango-ft2-font-get-coverage">pango_ft2_font_get_coverage</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-get-face"><link linkend="pango-ft2-font-get-face">pango_ft2_font_get_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-get-kerning"><link linkend="pango-ft2-font-get-kerning">pango_ft2_font_get_kerning</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-create-context"><link linkend="pango-ft2-font-map-create-context">pango_ft2_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-for-display"><link linkend="pango-ft2-font-map-for-display">pango_ft2_font_map_for_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-get-context"><link linkend="pango-ft2-get-context">pango_ft2_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-get-unknown-glyph"><link linkend="pango-ft2-get-unknown-glyph">pango_ft2_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-shutdown-display"><link linkend="pango-ft2-shutdown-display">pango_ft2_shutdown_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-get-mirror-char"><link linkend="pango-get-mirror-char">pango_get_mirror_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-FT2--CAPS"><link linkend="PANGO-RENDER-TYPE-FT2--CAPS">PANGO_RENDER_TYPE_FT2</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-X--CAPS"><link linkend="PANGO-RENDER-TYPE-X--CAPS">PANGO_RENDER_TYPE_X</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-XFT--CAPS"><link linkend="PANGO-RENDER-TYPE-XFT--CAPS">PANGO_RENDER_TYPE_XFT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-context"><link linkend="pango-win32-get-context">pango_win32_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-unknown-glyph"><link linkend="pango-win32-get-unknown-glyph">pango_win32_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-glyph"><link linkend="pango-xft-font-get-glyph">pango_xft_font_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-unknown-glyph"><link linkend="pango-xft-font-get-unknown-glyph">pango_xft_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-has-char"><link linkend="pango-xft-font-has-char">pango_xft_font_has_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-lock-face"><link linkend="pango-xft-font-lock-face">pango_xft_font_lock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-unlock-face"><link linkend="pango-xft-font-unlock-face">pango_xft_font_unlock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-get-context"><link linkend="pango-xft-get-context">pango_xft_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-apply-ligatures"><link linkend="pango-x-apply-ligatures">pango_x_apply_ligatures</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-context-set-funcs"><link linkend="pango-x-context-set-funcs">pango_x_context_set_funcs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-fallback-shape"><link linkend="pango-x-fallback-shape">pango_x_fallback_shape</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-find-first-subfont"><link linkend="pango-x-find-first-subfont">pango_x_find_first_subfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-free"><link linkend="pango-x-font-cache-free">pango_x_font_cache_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-load"><link linkend="pango-x-font-cache-load">pango_x_font_cache_load</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-new"><link linkend="pango-x-font-cache-new">pango_x_font_cache_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-unload"><link linkend="pango-x-font-cache-unload">pango_x_font_cache_unload</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-get-unknown-glyph"><link linkend="pango-x-font-get-unknown-glyph">pango_x_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-map-for-display"><link linkend="pango-x-font-map-for-display">pango_x_font_map_for_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-map-get-font-cache"><link linkend="pango-x-font-map-get-font-cache">pango_x_font_map_get_font_cache</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-subfont-xlfd"><link linkend="pango-x-font-subfont-xlfd">pango_x_font_subfont_xlfd</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-get-context"><link linkend="pango-x-get-context">pango_x_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-get-unknown-glyph"><link linkend="pango-x-get-unknown-glyph">pango_x_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-X-GLYPH-INDEX--CAPS"><link linkend="PANGO-X-GLYPH-INDEX--CAPS">PANGO_X_GLYPH_INDEX</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-X-GLYPH-SUBFONT--CAPS"><link linkend="PANGO-X-GLYPH-SUBFONT--CAPS">PANGO_X_GLYPH_SUBFONT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-has-glyph"><link linkend="pango-x-has-glyph">pango_x_has_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-list-subfonts"><link linkend="pango-x-list-subfonts">pango_x_list_subfonts</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-load-font"><link linkend="pango-x-load-font">pango_x_load_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-X-MAKE-GLYPH--CAPS"><link linkend="PANGO-X-MAKE-GLYPH--CAPS">PANGO_X_MAKE_GLYPH</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-render"><link linkend="pango-x-render">pango_x_render</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-render-layout"><link linkend="pango-x-render-layout">pango_x_render_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-render-layout-line"><link linkend="pango-x-render-layout-line">pango_x_render_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-shutdown-display"><link linkend="pango-x-shutdown-display">pango_x_shutdown_display</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/api-index-full.xml b/docs/xml/api-index-full.xml
new file mode 100755 (executable)
index 0000000..d9231f4
--- /dev/null
@@ -0,0 +1,742 @@
+<indexdiv>
+<indexdiv><title>P</title>
+<indexentry><primaryie linkends="PangoAlignment"><link linkend="PangoAlignment">PangoAlignment</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAnalysis"><link linkend="PangoAnalysis">PangoAnalysis</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrClass"><link linkend="PangoAttrClass">PangoAttrClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrColor"><link linkend="PangoAttrColor">PangoAttrColor</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrDataCopyFunc"><link linkend="PangoAttrDataCopyFunc">PangoAttrDataCopyFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrFilterFunc"><link linkend="PangoAttrFilterFunc">PangoAttrFilterFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrFloat"><link linkend="PangoAttrFloat">PangoAttrFloat</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrFontDesc"><link linkend="PangoAttrFontDesc">PangoAttrFontDesc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttribute"><link linkend="PangoAttribute">PangoAttribute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrInt"><link linkend="PangoAttrInt">PangoAttrInt</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrIterator"><link linkend="PangoAttrIterator">PangoAttrIterator</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrLanguage"><link linkend="PangoAttrLanguage">PangoAttrLanguage</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrList"><link linkend="PangoAttrList">PangoAttrList</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrShape"><link linkend="PangoAttrShape">PangoAttrShape</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrSize"><link linkend="PangoAttrSize">PangoAttrSize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrString"><link linkend="PangoAttrString">PangoAttrString</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoAttrType"><link linkend="PangoAttrType">PangoAttrType</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoBidiType"><link linkend="PangoBidiType">PangoBidiType</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoCairoFont-struct"><link linkend="PangoCairoFont-struct">PangoCairoFont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoCairoFontMap-struct"><link linkend="PangoCairoFontMap-struct">PangoCairoFontMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoCairoShapeRendererFunc"><link linkend="PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoColor"><link linkend="PangoColor">PangoColor</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoContext-struct"><link linkend="PangoContext-struct">PangoContext</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoCoverage"><link linkend="PangoCoverage">PangoCoverage</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoCoverageLevel"><link linkend="PangoCoverageLevel">PangoCoverageLevel</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoDirection"><link linkend="PangoDirection">PangoDirection</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEllipsizeMode"><link linkend="PangoEllipsizeMode">PangoEllipsizeMode</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngine-struct"><link linkend="PangoEngine-struct">PangoEngine</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineClass"><link linkend="PangoEngineClass">PangoEngineClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineInfo"><link linkend="PangoEngineInfo">PangoEngineInfo</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineLang-struct"><link linkend="PangoEngineLang-struct">PangoEngineLang</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineLangClass"><link linkend="PangoEngineLangClass">PangoEngineLangClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineScriptInfo"><link linkend="PangoEngineScriptInfo">PangoEngineScriptInfo</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineShape-struct"><link linkend="PangoEngineShape-struct">PangoEngineShape</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoEngineShapeClass"><link linkend="PangoEngineShapeClass">PangoEngineShapeClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcDecoder-struct"><link linkend="PangoFcDecoder-struct">PangoFcDecoder</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcDecoderClass"><link linkend="PangoFcDecoderClass">PangoFcDecoderClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcDecoderFindFunc"><link linkend="PangoFcDecoderFindFunc">PangoFcDecoderFindFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFont-struct"><link linkend="PangoFcFont-struct">PangoFcFont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFont--fontmap"><link linkend="PangoFcFont--fontmap">PangoFcFont:fontmap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFont--pattern"><link linkend="PangoFcFont--pattern">PangoFcFont:pattern</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFontClass"><link linkend="PangoFcFontClass">PangoFcFontClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFontKey"><link linkend="PangoFcFontKey">PangoFcFontKey</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFontMap-struct"><link linkend="PangoFcFontMap-struct">PangoFcFontMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFontMapClass"><link linkend="PangoFcFontMapClass">PangoFcFontMapClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFcFontsetKey"><link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFont-struct"><link linkend="PangoFont-struct">PangoFont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontDescription"><link linkend="PangoFontDescription">PangoFontDescription</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontFace-struct"><link linkend="PangoFontFace-struct">PangoFontFace</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontFamily-struct"><link linkend="PangoFontFamily-struct">PangoFontFamily</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontMap-struct"><link linkend="PangoFontMap-struct">PangoFontMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontMapClass"><link linkend="PangoFontMapClass">PangoFontMapClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontMask"><link linkend="PangoFontMask">PangoFontMask</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontMetrics"><link linkend="PangoFontMetrics">PangoFontMetrics</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontset-struct"><link linkend="PangoFontset-struct">PangoFontset</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontsetClass"><link linkend="PangoFontsetClass">PangoFontsetClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontsetForeachFunc"><link linkend="PangoFontsetForeachFunc">PangoFontsetForeachFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFontsetSimple-struct"><link linkend="PangoFontsetSimple-struct">PangoFontsetSimple</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFreeGCFunc"><link linkend="PangoFreeGCFunc">PangoFreeGCFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFT2FontMap-struct"><link linkend="PangoFT2FontMap-struct">PangoFT2FontMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoFT2SubstituteFunc"><link linkend="PangoFT2SubstituteFunc">PangoFT2SubstituteFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGetGCFunc"><link linkend="PangoGetGCFunc">PangoGetGCFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyph"><link linkend="PangoGlyph">PangoGlyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphGeometry"><link linkend="PangoGlyphGeometry">PangoGlyphGeometry</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphInfo"><link linkend="PangoGlyphInfo">PangoGlyphInfo</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphItem"><link linkend="PangoGlyphItem">PangoGlyphItem</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphItemIter"><link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphString"><link linkend="PangoGlyphString">PangoGlyphString</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphUnit"><link linkend="PangoGlyphUnit">PangoGlyphUnit</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGlyphVisAttr"><link linkend="PangoGlyphVisAttr">PangoGlyphVisAttr</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGravity"><link linkend="PangoGravity">PangoGravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoGravityHint"><link linkend="PangoGravityHint">PangoGravityHint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoIncludedModule"><link linkend="PangoIncludedModule">PangoIncludedModule</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoItem"><link linkend="PangoItem">PangoItem</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoLanguage"><link linkend="PangoLanguage">PangoLanguage</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoLayout-struct"><link linkend="PangoLayout-struct">PangoLayout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoLayoutIter"><link linkend="PangoLayoutIter">PangoLayoutIter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoLayoutLine"><link linkend="PangoLayoutLine">PangoLayoutLine</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoLayoutRun"><link linkend="PangoLayoutRun">PangoLayoutRun</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoLogAttr"><link linkend="PangoLogAttr">PangoLogAttr</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoMap"><link linkend="PangoMap">PangoMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoMapEntry"><link linkend="PangoMapEntry">PangoMapEntry</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoMatrix"><link linkend="PangoMatrix">PangoMatrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTBuffer"><link linkend="PangoOTBuffer">PangoOTBuffer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTFeatureMap"><link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTGlyph"><link linkend="PangoOTGlyph">PangoOTGlyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTInfo-struct"><link linkend="PangoOTInfo-struct">PangoOTInfo</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTRuleset-struct"><link linkend="PangoOTRuleset-struct">PangoOTRuleset</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTRulesetDescription"><link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTTableType"><link linkend="PangoOTTableType">PangoOTTableType</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoOTTag"><link linkend="PangoOTTag">PangoOTTag</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoRectangle"><link linkend="PangoRectangle">PangoRectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoRenderer-struct"><link linkend="PangoRenderer-struct">PangoRenderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoRendererClass"><link linkend="PangoRendererClass">PangoRendererClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoRenderPart"><link linkend="PangoRenderPart">PangoRenderPart</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoScript"><link linkend="PangoScript">PangoScript</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoScriptIter"><link linkend="PangoScriptIter">PangoScriptIter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoStretch"><link linkend="PangoStretch">PangoStretch</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoStyle"><link linkend="PangoStyle">PangoStyle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoTabAlign"><link linkend="PangoTabAlign">PangoTabAlign</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoTabArray"><link linkend="PangoTabArray">PangoTabArray</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoUnderline"><link linkend="PangoUnderline">PangoUnderline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoVariant"><link linkend="PangoVariant">PangoVariant</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoWeight"><link linkend="PangoWeight">PangoWeight</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoWin32FontCache"><link linkend="PangoWin32FontCache">PangoWin32FontCache</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoWrapMode"><link linkend="PangoWrapMode">PangoWrapMode</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXFontCache"><link linkend="PangoXFontCache">PangoXFontCache</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftFont-struct"><link linkend="PangoXftFont-struct">PangoXftFont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftFontMap-struct"><link linkend="PangoXftFontMap-struct">PangoXftFontMap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftRenderer-struct"><link linkend="PangoXftRenderer-struct">PangoXftRenderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftRenderer--display"><link linkend="PangoXftRenderer--display">PangoXftRenderer:display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftRenderer--screen"><link linkend="PangoXftRenderer--screen">PangoXftRenderer:screen</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftRendererClass"><link linkend="PangoXftRendererClass">PangoXftRendererClass</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXftSubstituteFunc"><link linkend="PangoXftSubstituteFunc">PangoXftSubstituteFunc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PangoXSubfont"><link linkend="PangoXSubfont">PangoXSubfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS"><link linkend="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS">PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ASCENT--CAPS"><link linkend="PANGO-ASCENT--CAPS">PANGO_ASCENT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-atsui-font-get-cgfont"><link linkend="pango-atsui-font-get-cgfont">pango_atsui_font_get_cgfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attribute-copy"><link linkend="pango-attribute-copy">pango_attribute_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attribute-destroy"><link linkend="pango-attribute-destroy">pango_attribute_destroy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attribute-equal"><link linkend="pango-attribute-equal">pango_attribute_equal</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attribute-init"><link linkend="pango-attribute-init">pango_attribute_init</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-background-new"><link linkend="pango-attr-background-new">pango_attr_background_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-fallback-new"><link linkend="pango-attr-fallback-new">pango_attr_fallback_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-family-new"><link linkend="pango-attr-family-new">pango_attr_family_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-font-desc-new"><link linkend="pango-attr-font-desc-new">pango_attr_font_desc_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-foreground-new"><link linkend="pango-attr-foreground-new">pango_attr_foreground_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-gravity-hint-new"><link linkend="pango-attr-gravity-hint-new">pango_attr_gravity_hint_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-gravity-new"><link linkend="pango-attr-gravity-new">pango_attr_gravity_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS"><link linkend="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS">PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS"><link linkend="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS">PANGO_ATTR_INDEX_TO_TEXT_END</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-copy"><link linkend="pango-attr-iterator-copy">pango_attr_iterator_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-destroy"><link linkend="pango-attr-iterator-destroy">pango_attr_iterator_destroy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-get"><link linkend="pango-attr-iterator-get">pango_attr_iterator_get</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-get-attrs"><link linkend="pango-attr-iterator-get-attrs">pango_attr_iterator_get_attrs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-get-font"><link linkend="pango-attr-iterator-get-font">pango_attr_iterator_get_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-next"><link linkend="pango-attr-iterator-next">pango_attr_iterator_next</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-iterator-range"><link linkend="pango-attr-iterator-range">pango_attr_iterator_range</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-language-new"><link linkend="pango-attr-language-new">pango_attr_language_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-letter-spacing-new"><link linkend="pango-attr-letter-spacing-new">pango_attr_letter_spacing_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-change"><link linkend="pango-attr-list-change">pango_attr_list_change</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-copy"><link linkend="pango-attr-list-copy">pango_attr_list_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-filter"><link linkend="pango-attr-list-filter">pango_attr_list_filter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-get-iterator"><link linkend="pango-attr-list-get-iterator">pango_attr_list_get_iterator</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-insert"><link linkend="pango-attr-list-insert">pango_attr_list_insert</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-insert-before"><link linkend="pango-attr-list-insert-before">pango_attr_list_insert_before</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-new"><link linkend="pango-attr-list-new">pango_attr_list_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-ref"><link linkend="pango-attr-list-ref">pango_attr_list_ref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-splice"><link linkend="pango-attr-list-splice">pango_attr_list_splice</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-list-unref"><link linkend="pango-attr-list-unref">pango_attr_list_unref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-rise-new"><link linkend="pango-attr-rise-new">pango_attr_rise_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-scale-new"><link linkend="pango-attr-scale-new">pango_attr_scale_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-shape-new"><link linkend="pango-attr-shape-new">pango_attr_shape_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-shape-new-with-data"><link linkend="pango-attr-shape-new-with-data">pango_attr_shape_new_with_data</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-size-new"><link linkend="pango-attr-size-new">pango_attr_size_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-size-new-absolute"><link linkend="pango-attr-size-new-absolute">pango_attr_size_new_absolute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-stretch-new"><link linkend="pango-attr-stretch-new">pango_attr_stretch_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-strikethrough-color-new"><link linkend="pango-attr-strikethrough-color-new">pango_attr_strikethrough_color_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-strikethrough-new"><link linkend="pango-attr-strikethrough-new">pango_attr_strikethrough_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-style-new"><link linkend="pango-attr-style-new">pango_attr_style_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-type-get-name"><link linkend="pango-attr-type-get-name">pango_attr_type_get_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-type-register"><link linkend="pango-attr-type-register">pango_attr_type_register</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-underline-color-new"><link linkend="pango-attr-underline-color-new">pango_attr_underline_color_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-underline-new"><link linkend="pango-attr-underline-new">pango_attr_underline_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-variant-new"><link linkend="pango-attr-variant-new">pango_attr_variant_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-attr-weight-new"><link linkend="pango-attr-weight-new">pango_attr_weight_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-bidi-type-for-unichar"><link linkend="pango-bidi-type-for-unichar">pango_bidi_type_for_unichar</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-break"><link linkend="pango-break">pango_break</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-get-font-options"><link linkend="pango-cairo-context-get-font-options">pango_cairo_context_get_font_options</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-get-resolution"><link linkend="pango-cairo-context-get-resolution">pango_cairo_context_get_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-get-shape-renderer"><link linkend="pango-cairo-context-get-shape-renderer">pango_cairo_context_get_shape_renderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-set-font-options"><link linkend="pango-cairo-context-set-font-options">pango_cairo_context_set_font_options</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-set-resolution"><link linkend="pango-cairo-context-set-resolution">pango_cairo_context_set_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-context-set-shape-renderer"><link linkend="pango-cairo-context-set-shape-renderer">pango_cairo_context_set_shape_renderer</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-create-context"><link linkend="pango-cairo-create-context">pango_cairo_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-create-layout"><link linkend="pango-cairo-create-layout">pango_cairo_create_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-error-underline-path"><link linkend="pango-cairo-error-underline-path">pango_cairo_error_underline_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-get-scaled-font"><link linkend="pango-cairo-font-get-scaled-font">pango_cairo_font_get_scaled_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-create-context"><link linkend="pango-cairo-font-map-create-context">pango_cairo_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-get-default"><link linkend="pango-cairo-font-map-get-default">pango_cairo_font_map_get_default</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-get-font-type"><link linkend="pango-cairo-font-map-get-font-type">pango_cairo_font_map_get_font_type</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-get-resolution"><link linkend="pango-cairo-font-map-get-resolution">pango_cairo_font_map_get_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-new"><link linkend="pango-cairo-font-map-new">pango_cairo_font_map_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-new-for-font-type"><link linkend="pango-cairo-font-map-new-for-font-type">pango_cairo_font_map_new_for_font_type</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-set-default"><link linkend="pango-cairo-font-map-set-default">pango_cairo_font_map_set_default</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-font-map-set-resolution"><link linkend="pango-cairo-font-map-set-resolution">pango_cairo_font_map_set_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-glyph-string-path"><link linkend="pango-cairo-glyph-string-path">pango_cairo_glyph_string_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-layout-line-path"><link linkend="pango-cairo-layout-line-path">pango_cairo_layout_line_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-layout-path"><link linkend="pango-cairo-layout-path">pango_cairo_layout_path</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-error-underline"><link linkend="pango-cairo-show-error-underline">pango_cairo_show_error_underline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-glyph-item"><link linkend="pango-cairo-show-glyph-item">pango_cairo_show_glyph_item</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-glyph-string"><link linkend="pango-cairo-show-glyph-string">pango_cairo_show_glyph_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-layout"><link linkend="pango-cairo-show-layout">pango_cairo_show_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-show-layout-line"><link linkend="pango-cairo-show-layout-line">pango_cairo_show_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-update-context"><link linkend="pango-cairo-update-context">pango_cairo_update_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-cairo-update-layout"><link linkend="pango-cairo-update-layout">pango_cairo_update_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-color-copy"><link linkend="pango-color-copy">pango_color_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-color-free"><link linkend="pango-color-free">pango_color_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-color-parse"><link linkend="pango-color-parse">pango_color_parse</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-color-to-string"><link linkend="pango-color-to-string">pango_color_to_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-config-key-get"><link linkend="pango-config-key-get">pango_config_key_get</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-base-dir"><link linkend="pango-context-get-base-dir">pango_context_get_base_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-base-gravity"><link linkend="pango-context-get-base-gravity">pango_context_get_base_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-font-description"><link linkend="pango-context-get-font-description">pango_context_get_font_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-font-map"><link linkend="pango-context-get-font-map">pango_context_get_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-gravity"><link linkend="pango-context-get-gravity">pango_context_get_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-gravity-hint"><link linkend="pango-context-get-gravity-hint">pango_context_get_gravity_hint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-language"><link linkend="pango-context-get-language">pango_context_get_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-matrix"><link linkend="pango-context-get-matrix">pango_context_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-get-metrics"><link linkend="pango-context-get-metrics">pango_context_get_metrics</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-list-families"><link linkend="pango-context-list-families">pango_context_list_families</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-load-font"><link linkend="pango-context-load-font">pango_context_load_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-load-fontset"><link linkend="pango-context-load-fontset">pango_context_load_fontset</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-new"><link linkend="pango-context-new">pango_context_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-base-dir"><link linkend="pango-context-set-base-dir">pango_context_set_base_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-base-gravity"><link linkend="pango-context-set-base-gravity">pango_context_set_base_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-font-description"><link linkend="pango-context-set-font-description">pango_context_set_font_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-font-map"><link linkend="pango-context-set-font-map">pango_context_set_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-gravity-hint"><link linkend="pango-context-set-gravity-hint">pango_context_set_gravity_hint</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-language"><link linkend="pango-context-set-language">pango_context_set_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-context-set-matrix"><link linkend="pango-context-set-matrix">pango_context_set_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-copy"><link linkend="pango-coverage-copy">pango_coverage_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-from-bytes"><link linkend="pango-coverage-from-bytes">pango_coverage_from_bytes</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-get"><link linkend="pango-coverage-get">pango_coverage_get</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-max"><link linkend="pango-coverage-max">pango_coverage_max</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-new"><link linkend="pango-coverage-new">pango_coverage_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-ref"><link linkend="pango-coverage-ref">pango_coverage_ref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-set"><link linkend="pango-coverage-set">pango_coverage_set</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-to-bytes"><link linkend="pango-coverage-to-bytes">pango_coverage_to_bytes</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-coverage-unref"><link linkend="pango-coverage-unref">pango_coverage_unref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-default-break"><link linkend="pango-default-break">pango_default_break</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-DESCENT--CAPS"><link linkend="PANGO-DESCENT--CAPS">PANGO_DESCENT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS"><link linkend="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS">PANGO_ENGINE_LANG_DEFINE_TYPE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS"><link linkend="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS">PANGO_ENGINE_SHAPE_DEFINE_TYPE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ENGINE-TYPE-LANG--CAPS"><link linkend="PANGO-ENGINE-TYPE-LANG--CAPS">PANGO_ENGINE_TYPE_LANG</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-ENGINE-TYPE-SHAPE--CAPS"><link linkend="PANGO-ENGINE-TYPE-SHAPE--CAPS">PANGO_ENGINE_TYPE_SHAPE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-extents-to-pixels"><link linkend="pango-extents-to-pixels">pango_extents_to_pixels</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-decoder-get-charset"><link linkend="pango-fc-decoder-get-charset">pango_fc_decoder_get_charset</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-decoder-get-glyph"><link linkend="pango-fc-decoder-get-glyph">pango_fc_decoder_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-absolute-size"><link linkend="pango-fc-fontset-key-get-absolute-size">pango_fc_fontset_key_get_absolute_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-context-key"><link linkend="pango-fc-fontset-key-get-context-key">pango_fc_fontset_key_get_context_key</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-description"><link linkend="pango-fc-fontset-key-get-description">pango_fc_fontset_key_get_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-language"><link linkend="pango-fc-fontset-key-get-language">pango_fc_fontset_key_get_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-matrix"><link linkend="pango-fc-fontset-key-get-matrix">pango_fc_fontset_key_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-fontset-key-get-resolution"><link linkend="pango-fc-fontset-key-get-resolution">pango_fc_fontset_key_get_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-description-from-pattern"><link linkend="pango-fc-font-description-from-pattern">pango_fc_font_description_from_pattern</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-get-glyph"><link linkend="pango-fc-font-get-glyph">pango_fc_font_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-get-unknown-glyph"><link linkend="pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-has-char"><link linkend="pango-fc-font-has-char">pango_fc_font_has_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-kern-glyphs"><link linkend="pango-fc-font-kern-glyphs">pango_fc_font_kern_glyphs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-key-get-context-key"><link linkend="pango-fc-font-key-get-context-key">pango_fc_font_key_get_context_key</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-key-get-matrix"><link linkend="pango-fc-font-key-get-matrix">pango_fc_font_key_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-key-get-pattern"><link linkend="pango-fc-font-key-get-pattern">pango_fc_font_key_get_pattern</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-lock-face"><link linkend="pango-fc-font-lock-face">pango_fc_font_lock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-add-decoder-find-func"><link linkend="pango-fc-font-map-add-decoder-find-func">pango_fc_font_map_add_decoder_find_func</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-cache-clear"><link linkend="pango-fc-font-map-cache-clear">pango_fc_font_map_cache_clear</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-create-context"><link linkend="pango-fc-font-map-create-context">pango_fc_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-find-decoder"><link linkend="pango-fc-font-map-find-decoder">pango_fc_font_map_find_decoder</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-map-shutdown"><link linkend="pango-fc-font-map-shutdown">pango_fc_font_map_shutdown</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fc-font-unlock-face"><link linkend="pango-fc-font-unlock-face">pango_fc_font_unlock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FC-GRAVITY--CAPS"><link linkend="PANGO-FC-GRAVITY--CAPS">PANGO_FC_GRAVITY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FC-PRGNAME--CAPS"><link linkend="PANGO-FC-PRGNAME--CAPS">PANGO_FC_PRGNAME</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FC-VERSION--CAPS"><link linkend="PANGO-FC-VERSION--CAPS">PANGO_FC_VERSION</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-find-base-dir"><link linkend="pango-find-base-dir">pango_find_base_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-find-map"><link linkend="pango-find-map">pango_find_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-find-paragraph-boundary"><link linkend="pango-find-paragraph-boundary">pango_find_paragraph_boundary</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FONT--CAPS"><link linkend="PANGO-FONT--CAPS">PANGO_FONT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-foreach"><link linkend="pango-fontset-foreach">pango_fontset_foreach</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-get-font"><link linkend="pango-fontset-get-font">pango_fontset_get_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-get-metrics"><link linkend="pango-fontset-get-metrics">pango_fontset_get_metrics</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-simple-append"><link linkend="pango-fontset-simple-append">pango_fontset_simple_append</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-simple-new"><link linkend="pango-fontset-simple-new">pango_fontset_simple_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-fontset-simple-size"><link linkend="pango-fontset-simple-size">pango_fontset_simple_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-describe"><link linkend="pango-font-describe">pango_font_describe</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-describe-with-absolute-size"><link linkend="pango-font-describe-with-absolute-size">pango_font_describe_with_absolute_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-descriptions-free"><link linkend="pango-font-descriptions-free">pango_font_descriptions_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-better-match"><link linkend="pango-font-description-better-match">pango_font_description_better_match</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-copy"><link linkend="pango-font-description-copy">pango_font_description_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-copy-static"><link linkend="pango-font-description-copy-static">pango_font_description_copy_static</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-equal"><link linkend="pango-font-description-equal">pango_font_description_equal</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-free"><link linkend="pango-font-description-free">pango_font_description_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-from-string"><link linkend="pango-font-description-from-string">pango_font_description_from_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-family"><link linkend="pango-font-description-get-family">pango_font_description_get_family</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-gravity"><link linkend="pango-font-description-get-gravity">pango_font_description_get_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-set-fields"><link linkend="pango-font-description-get-set-fields">pango_font_description_get_set_fields</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-size"><link linkend="pango-font-description-get-size">pango_font_description_get_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-size-is-absolute"><link linkend="pango-font-description-get-size-is-absolute">pango_font_description_get_size_is_absolute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-stretch"><link linkend="pango-font-description-get-stretch">pango_font_description_get_stretch</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-style"><link linkend="pango-font-description-get-style">pango_font_description_get_style</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-variant"><link linkend="pango-font-description-get-variant">pango_font_description_get_variant</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-get-weight"><link linkend="pango-font-description-get-weight">pango_font_description_get_weight</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-hash"><link linkend="pango-font-description-hash">pango_font_description_hash</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-merge"><link linkend="pango-font-description-merge">pango_font_description_merge</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-merge-static"><link linkend="pango-font-description-merge-static">pango_font_description_merge_static</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-new"><link linkend="pango-font-description-new">pango_font_description_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-absolute-size"><link linkend="pango-font-description-set-absolute-size">pango_font_description_set_absolute_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-family"><link linkend="pango-font-description-set-family">pango_font_description_set_family</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-family-static"><link linkend="pango-font-description-set-family-static">pango_font_description_set_family_static</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-gravity"><link linkend="pango-font-description-set-gravity">pango_font_description_set_gravity</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-size"><link linkend="pango-font-description-set-size">pango_font_description_set_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-stretch"><link linkend="pango-font-description-set-stretch">pango_font_description_set_stretch</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-style"><link linkend="pango-font-description-set-style">pango_font_description_set_style</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-variant"><link linkend="pango-font-description-set-variant">pango_font_description_set_variant</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-set-weight"><link linkend="pango-font-description-set-weight">pango_font_description_set_weight</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-to-filename"><link linkend="pango-font-description-to-filename">pango_font_description_to_filename</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-to-string"><link linkend="pango-font-description-to-string">pango_font_description_to_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-description-unset-fields"><link linkend="pango-font-description-unset-fields">pango_font_description_unset_fields</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FONT-FACE--CAPS"><link linkend="PANGO-FONT-FACE--CAPS">PANGO_FONT_FACE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-face-describe"><link linkend="pango-font-face-describe">pango_font_face_describe</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-face-get-face-name"><link linkend="pango-font-face-get-face-name">pango_font_face_get_face_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-face-is-synthesized"><link linkend="pango-font-face-is-synthesized">pango_font_face_is_synthesized</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-face-list-sizes"><link linkend="pango-font-face-list-sizes">pango_font_face_list_sizes</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FONT-FAMILY--CAPS"><link linkend="PANGO-FONT-FAMILY--CAPS">PANGO_FONT_FAMILY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-family-get-name"><link linkend="pango-font-family-get-name">pango_font_family_get_name</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-family-is-monospace"><link linkend="pango-font-family-is-monospace">pango_font_family_is_monospace</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-family-list-faces"><link linkend="pango-font-family-list-faces">pango_font_family_list_faces</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-find-shaper"><link linkend="pango-font-find-shaper">pango_font_find_shaper</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-get-coverage"><link linkend="pango-font-get-coverage">pango_font_get_coverage</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-get-font-map"><link linkend="pango-font-get-font-map">pango_font_get_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-get-glyph-extents"><link linkend="pango-font-get-glyph-extents">pango_font_get_glyph_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-get-metrics"><link linkend="pango-font-get-metrics">pango_font_get_metrics</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FONT-MAP--CAPS"><link linkend="PANGO-FONT-MAP--CAPS">PANGO_FONT_MAP</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FONT-MAP-CLASS--CAPS"><link linkend="PANGO-FONT-MAP-CLASS--CAPS">PANGO_FONT_MAP_CLASS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-create-context"><link linkend="pango-font-map-create-context">pango_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-FONT-MAP-GET-CLASS--CAPS"><link linkend="PANGO-FONT-MAP-GET-CLASS--CAPS">PANGO_FONT_MAP_GET_CLASS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-get-shape-engine-type"><link linkend="pango-font-map-get-shape-engine-type">pango_font_map_get_shape_engine_type</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-list-families"><link linkend="pango-font-map-list-families">pango_font_map_list_families</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-load-font"><link linkend="pango-font-map-load-font">pango_font_map_load_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-map-load-fontset"><link linkend="pango-font-map-load-fontset">pango_font_map_load_fontset</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-approximate-char-width"><link linkend="pango-font-metrics-get-approximate-char-width">pango_font_metrics_get_approximate_char_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-approximate-digit-width"><link linkend="pango-font-metrics-get-approximate-digit-width">pango_font_metrics_get_approximate_digit_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-ascent"><link linkend="pango-font-metrics-get-ascent">pango_font_metrics_get_ascent</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-descent"><link linkend="pango-font-metrics-get-descent">pango_font_metrics_get_descent</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-strikethrough-position"><link linkend="pango-font-metrics-get-strikethrough-position">pango_font_metrics_get_strikethrough_position</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-strikethrough-thickness"><link linkend="pango-font-metrics-get-strikethrough-thickness">pango_font_metrics_get_strikethrough_thickness</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-underline-position"><link linkend="pango-font-metrics-get-underline-position">pango_font_metrics_get_underline_position</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-get-underline-thickness"><link linkend="pango-font-metrics-get-underline-thickness">pango_font_metrics_get_underline_thickness</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-ref"><link linkend="pango-font-metrics-ref">pango_font_metrics_ref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-font-metrics-unref"><link linkend="pango-font-metrics-unref">pango_font_metrics_unref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-get-coverage"><link linkend="pango-ft2-font-get-coverage">pango_ft2_font_get_coverage</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-get-face"><link linkend="pango-ft2-font-get-face">pango_ft2_font_get_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-get-kerning"><link linkend="pango-ft2-font-get-kerning">pango_ft2_font_get_kerning</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-create-context"><link linkend="pango-ft2-font-map-create-context">pango_ft2_font_map_create_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-for-display"><link linkend="pango-ft2-font-map-for-display">pango_ft2_font_map_for_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-new"><link linkend="pango-ft2-font-map-new">pango_ft2_font_map_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-set-default-substitute"><link linkend="pango-ft2-font-map-set-default-substitute">pango_ft2_font_map_set_default_substitute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-set-resolution"><link linkend="pango-ft2-font-map-set-resolution">pango_ft2_font_map_set_resolution</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-font-map-substitute-changed"><link linkend="pango-ft2-font-map-substitute-changed">pango_ft2_font_map_substitute_changed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-get-context"><link linkend="pango-ft2-get-context">pango_ft2_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-get-unknown-glyph"><link linkend="pango-ft2-get-unknown-glyph">pango_ft2_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render"><link linkend="pango-ft2-render">pango_ft2_render</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-layout"><link linkend="pango-ft2-render-layout">pango_ft2_render_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-layout-line"><link linkend="pango-ft2-render-layout-line">pango_ft2_render_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-layout-line-subpixel"><link linkend="pango-ft2-render-layout-line-subpixel">pango_ft2_render_layout_line_subpixel</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-layout-subpixel"><link linkend="pango-ft2-render-layout-subpixel">pango_ft2_render_layout_subpixel</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-render-transformed"><link linkend="pango-ft2-render-transformed">pango_ft2_render_transformed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ft2-shutdown-display"><link linkend="pango-ft2-shutdown-display">pango_ft2_shutdown_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-get-lib-subdirectory"><link linkend="pango-get-lib-subdirectory">pango_get_lib_subdirectory</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-get-log-attrs"><link linkend="pango-get-log-attrs">pango_get_log_attrs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-get-mirror-char"><link linkend="pango-get-mirror-char">pango_get_mirror_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-get-sysconf-subdirectory"><link linkend="pango-get-sysconf-subdirectory">pango_get_sysconf_subdirectory</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GET-UNKNOWN-GLYPH--CAPS"><link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS">PANGO_GET_UNKNOWN_GLYPH</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GLYPH-EMPTY--CAPS"><link linkend="PANGO-GLYPH-EMPTY--CAPS">PANGO_GLYPH_EMPTY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GLYPH-INVALID-INPUT--CAPS"><link linkend="PANGO-GLYPH-INVALID-INPUT--CAPS">PANGO_GLYPH_INVALID_INPUT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-apply-attrs"><link linkend="pango-glyph-item-apply-attrs">pango_glyph_item_apply_attrs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-copy"><link linkend="pango-glyph-item-copy">pango_glyph_item_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-free"><link linkend="pango-glyph-item-free">pango_glyph_item_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-get-logical-widths"><link linkend="pango-glyph-item-get-logical-widths">pango_glyph_item_get_logical_widths</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-copy"><link linkend="pango-glyph-item-iter-copy">pango_glyph_item_iter_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-free"><link linkend="pango-glyph-item-iter-free">pango_glyph_item_iter_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-init-end"><link linkend="pango-glyph-item-iter-init-end">pango_glyph_item_iter_init_end</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-init-start"><link linkend="pango-glyph-item-iter-init-start">pango_glyph_item_iter_init_start</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-next-cluster"><link linkend="pango-glyph-item-iter-next-cluster">pango_glyph_item_iter_next_cluster</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-iter-prev-cluster"><link linkend="pango-glyph-item-iter-prev-cluster">pango_glyph_item_iter_prev_cluster</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-letter-space"><link linkend="pango-glyph-item-letter-space">pango_glyph_item_letter_space</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-item-split"><link linkend="pango-glyph-item-split">pango_glyph_item_split</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-copy"><link linkend="pango-glyph-string-copy">pango_glyph_string_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-extents"><link linkend="pango-glyph-string-extents">pango_glyph_string_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-extents-range"><link linkend="pango-glyph-string-extents-range">pango_glyph_string_extents_range</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-free"><link linkend="pango-glyph-string-free">pango_glyph_string_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-get-logical-widths"><link linkend="pango-glyph-string-get-logical-widths">pango_glyph_string_get_logical_widths</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-get-width"><link linkend="pango-glyph-string-get-width">pango_glyph_string_get_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-index-to-x"><link linkend="pango-glyph-string-index-to-x">pango_glyph_string_index_to_x</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-new"><link linkend="pango-glyph-string-new">pango_glyph_string_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-set-size"><link linkend="pango-glyph-string-set-size">pango_glyph_string_set_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-glyph-string-x-to-index"><link linkend="pango-glyph-string-x-to-index">pango_glyph_string_x_to_index</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GLYPH-UNKNOWN-FLAG--CAPS"><link linkend="PANGO-GLYPH-UNKNOWN-FLAG--CAPS">PANGO_GLYPH_UNKNOWN_FLAG</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-get-for-matrix"><link linkend="pango-gravity-get-for-matrix">pango_gravity_get_for_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-get-for-script"><link linkend="pango-gravity-get-for-script">pango_gravity_get_for_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-get-for-script-and-width"><link linkend="pango-gravity-get-for-script-and-width">pango_gravity_get_for_script_and_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-GRAVITY-IS-VERTICAL--CAPS"><link linkend="PANGO-GRAVITY-IS-VERTICAL--CAPS">PANGO_GRAVITY_IS_VERTICAL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-gravity-to-rotation"><link linkend="pango-gravity-to-rotation">pango_gravity_to_rotation</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-IS-FONT--CAPS"><link linkend="PANGO-IS-FONT--CAPS">PANGO_IS_FONT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-IS-FONT-FACE--CAPS"><link linkend="PANGO-IS-FONT-FACE--CAPS">PANGO_IS_FONT_FACE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-IS-FONT-FAMILY--CAPS"><link linkend="PANGO-IS-FONT-FAMILY--CAPS">PANGO_IS_FONT_FAMILY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-IS-FONT-MAP--CAPS"><link linkend="PANGO-IS-FONT-MAP--CAPS">PANGO_IS_FONT_MAP</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-IS-FONT-MAP-CLASS--CAPS"><link linkend="PANGO-IS-FONT-MAP-CLASS--CAPS">PANGO_IS_FONT_MAP_CLASS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-is-zero-width"><link linkend="pango-is-zero-width">pango_is_zero_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-itemize"><link linkend="pango-itemize">pango_itemize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-itemize-with-base-dir"><link linkend="pango-itemize-with-base-dir">pango_itemize_with_base_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-item-copy"><link linkend="pango-item-copy">pango_item_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-item-free"><link linkend="pango-item-free">pango_item_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-item-new"><link linkend="pango-item-new">pango_item_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-item-split"><link linkend="pango-item-split">pango_item_split</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-from-string"><link linkend="pango-language-from-string">pango_language_from_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-get-default"><link linkend="pango-language-get-default">pango_language_get_default</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-get-sample-string"><link linkend="pango-language-get-sample-string">pango_language_get_sample_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-get-scripts"><link linkend="pango-language-get-scripts">pango_language_get_scripts</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-includes-script"><link linkend="pango-language-includes-script">pango_language_includes_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-matches"><link linkend="pango-language-matches">pango_language_matches</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-language-to-string"><link linkend="pango-language-to-string">pango_language_to_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-context-changed"><link linkend="pango-layout-context-changed">pango_layout_context_changed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-copy"><link linkend="pango-layout-copy">pango_layout_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-alignment"><link linkend="pango-layout-get-alignment">pango_layout_get_alignment</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-attributes"><link linkend="pango-layout-get-attributes">pango_layout_get_attributes</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-auto-dir"><link linkend="pango-layout-get-auto-dir">pango_layout_get_auto_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-baseline"><link linkend="pango-layout-get-baseline">pango_layout_get_baseline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-context"><link linkend="pango-layout-get-context">pango_layout_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-cursor-pos"><link linkend="pango-layout-get-cursor-pos">pango_layout_get_cursor_pos</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-ellipsize"><link linkend="pango-layout-get-ellipsize">pango_layout_get_ellipsize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-extents"><link linkend="pango-layout-get-extents">pango_layout_get_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-font-description"><link linkend="pango-layout-get-font-description">pango_layout_get_font_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-height"><link linkend="pango-layout-get-height">pango_layout_get_height</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-indent"><link linkend="pango-layout-get-indent">pango_layout_get_indent</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-iter"><link linkend="pango-layout-get-iter">pango_layout_get_iter</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-justify"><link linkend="pango-layout-get-justify">pango_layout_get_justify</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-line"><link linkend="pango-layout-get-line">pango_layout_get_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-lines"><link linkend="pango-layout-get-lines">pango_layout_get_lines</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-lines-readonly"><link linkend="pango-layout-get-lines-readonly">pango_layout_get_lines_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-line-count"><link linkend="pango-layout-get-line-count">pango_layout_get_line_count</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-line-readonly"><link linkend="pango-layout-get-line-readonly">pango_layout_get_line_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-log-attrs"><link linkend="pango-layout-get-log-attrs">pango_layout_get_log_attrs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-pixel-extents"><link linkend="pango-layout-get-pixel-extents">pango_layout_get_pixel_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-pixel-size"><link linkend="pango-layout-get-pixel-size">pango_layout_get_pixel_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-single-paragraph-mode"><link linkend="pango-layout-get-single-paragraph-mode">pango_layout_get_single_paragraph_mode</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-size"><link linkend="pango-layout-get-size">pango_layout_get_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-spacing"><link linkend="pango-layout-get-spacing">pango_layout_get_spacing</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-tabs"><link linkend="pango-layout-get-tabs">pango_layout_get_tabs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-text"><link linkend="pango-layout-get-text">pango_layout_get_text</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-unknown-glyphs-count"><link linkend="pango-layout-get-unknown-glyphs-count">pango_layout_get_unknown_glyphs_count</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-width"><link linkend="pango-layout-get-width">pango_layout_get_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-get-wrap"><link linkend="pango-layout-get-wrap">pango_layout_get_wrap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-index-to-line-x"><link linkend="pango-layout-index-to-line-x">pango_layout_index_to_line_x</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-index-to-pos"><link linkend="pango-layout-index-to-pos">pango_layout_index_to_pos</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-is-ellipsized"><link linkend="pango-layout-is-ellipsized">pango_layout_is_ellipsized</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-is-wrapped"><link linkend="pango-layout-is-wrapped">pango_layout_is_wrapped</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-at-last-line"><link linkend="pango-layout-iter-at-last-line">pango_layout_iter_at_last_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-copy"><link linkend="pango-layout-iter-copy">pango_layout_iter_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-free"><link linkend="pango-layout-iter-free">pango_layout_iter_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-baseline"><link linkend="pango-layout-iter-get-baseline">pango_layout_iter_get_baseline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-char-extents"><link linkend="pango-layout-iter-get-char-extents">pango_layout_iter_get_char_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-cluster-extents"><link linkend="pango-layout-iter-get-cluster-extents">pango_layout_iter_get_cluster_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-index"><link linkend="pango-layout-iter-get-index">pango_layout_iter_get_index</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-layout"><link linkend="pango-layout-iter-get-layout">pango_layout_iter_get_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-layout-extents"><link linkend="pango-layout-iter-get-layout-extents">pango_layout_iter_get_layout_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-line"><link linkend="pango-layout-iter-get-line">pango_layout_iter_get_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-line-extents"><link linkend="pango-layout-iter-get-line-extents">pango_layout_iter_get_line_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-line-readonly"><link linkend="pango-layout-iter-get-line-readonly">pango_layout_iter_get_line_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-line-yrange"><link linkend="pango-layout-iter-get-line-yrange">pango_layout_iter_get_line_yrange</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-run"><link linkend="pango-layout-iter-get-run">pango_layout_iter_get_run</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-run-extents"><link linkend="pango-layout-iter-get-run-extents">pango_layout_iter_get_run_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-get-run-readonly"><link linkend="pango-layout-iter-get-run-readonly">pango_layout_iter_get_run_readonly</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-next-char"><link linkend="pango-layout-iter-next-char">pango_layout_iter_next_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-next-cluster"><link linkend="pango-layout-iter-next-cluster">pango_layout_iter_next_cluster</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-next-line"><link linkend="pango-layout-iter-next-line">pango_layout_iter_next_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-iter-next-run"><link linkend="pango-layout-iter-next-run">pango_layout_iter_next_run</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-get-extents"><link linkend="pango-layout-line-get-extents">pango_layout_line_get_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-get-pixel-extents"><link linkend="pango-layout-line-get-pixel-extents">pango_layout_line_get_pixel_extents</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-get-x-ranges"><link linkend="pango-layout-line-get-x-ranges">pango_layout_line_get_x_ranges</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-index-to-x"><link linkend="pango-layout-line-index-to-x">pango_layout_line_index_to_x</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-ref"><link linkend="pango-layout-line-ref">pango_layout_line_ref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-unref"><link linkend="pango-layout-line-unref">pango_layout_line_unref</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-line-x-to-index"><link linkend="pango-layout-line-x-to-index">pango_layout_line_x_to_index</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-move-cursor-visually"><link linkend="pango-layout-move-cursor-visually">pango_layout_move_cursor_visually</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-new"><link linkend="pango-layout-new">pango_layout_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-alignment"><link linkend="pango-layout-set-alignment">pango_layout_set_alignment</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-attributes"><link linkend="pango-layout-set-attributes">pango_layout_set_attributes</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-auto-dir"><link linkend="pango-layout-set-auto-dir">pango_layout_set_auto_dir</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-ellipsize"><link linkend="pango-layout-set-ellipsize">pango_layout_set_ellipsize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-font-description"><link linkend="pango-layout-set-font-description">pango_layout_set_font_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-height"><link linkend="pango-layout-set-height">pango_layout_set_height</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-indent"><link linkend="pango-layout-set-indent">pango_layout_set_indent</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-justify"><link linkend="pango-layout-set-justify">pango_layout_set_justify</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-markup"><link linkend="pango-layout-set-markup">pango_layout_set_markup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-markup-with-accel"><link linkend="pango-layout-set-markup-with-accel">pango_layout_set_markup_with_accel</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-single-paragraph-mode"><link linkend="pango-layout-set-single-paragraph-mode">pango_layout_set_single_paragraph_mode</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-spacing"><link linkend="pango-layout-set-spacing">pango_layout_set_spacing</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-tabs"><link linkend="pango-layout-set-tabs">pango_layout_set_tabs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-text"><link linkend="pango-layout-set-text">pango_layout_set_text</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-width"><link linkend="pango-layout-set-width">pango_layout_set_width</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-set-wrap"><link linkend="pango-layout-set-wrap">pango_layout_set_wrap</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-layout-xy-to-index"><link linkend="pango-layout-xy-to-index">pango_layout_xy_to_index</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-LBEARING--CAPS"><link linkend="PANGO-LBEARING--CAPS">PANGO_LBEARING</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-log2vis-get-embedding-levels"><link linkend="pango-log2vis-get-embedding-levels">pango_log2vis_get_embedding_levels</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-lookup-aliases"><link linkend="pango-lookup-aliases">pango_lookup_aliases</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-map-get-engine"><link linkend="pango-map-get-engine">pango_map_get_engine</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-map-get-engines"><link linkend="pango-map-get-engines">pango_map_get_engines</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-concat"><link linkend="pango-matrix-concat">pango_matrix_concat</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-copy"><link linkend="pango-matrix-copy">pango_matrix_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-free"><link linkend="pango-matrix-free">pango_matrix_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-get-font-scale-factor"><link linkend="pango-matrix-get-font-scale-factor">pango_matrix_get_font_scale_factor</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-MATRIX-INIT--CAPS"><link linkend="PANGO-MATRIX-INIT--CAPS">PANGO_MATRIX_INIT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-rotate"><link linkend="pango-matrix-rotate">pango_matrix_rotate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-scale"><link linkend="pango-matrix-scale">pango_matrix_scale</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-distance"><link linkend="pango-matrix-transform-distance">pango_matrix_transform_distance</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-pixel-rectangle"><link linkend="pango-matrix-transform-pixel-rectangle">pango_matrix_transform_pixel_rectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-point"><link linkend="pango-matrix-transform-point">pango_matrix_transform_point</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-transform-rectangle"><link linkend="pango-matrix-transform-rectangle">pango_matrix_transform_rectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-matrix-translate"><link linkend="pango-matrix-translate">pango_matrix_translate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-module-register"><link linkend="pango-module-register">pango_module_register</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-ALL-GLYPHS--CAPS"><link linkend="PANGO-OT-ALL-GLYPHS--CAPS">PANGO_OT_ALL_GLYPHS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-add-glyph"><link linkend="pango-ot-buffer-add-glyph">pango_ot_buffer_add_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-clear"><link linkend="pango-ot-buffer-clear">pango_ot_buffer_clear</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-destroy"><link linkend="pango-ot-buffer-destroy">pango_ot_buffer_destroy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-get-glyphs"><link linkend="pango-ot-buffer-get-glyphs">pango_ot_buffer_get_glyphs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-new"><link linkend="pango-ot-buffer-new">pango_ot_buffer_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-output"><link linkend="pango-ot-buffer-output">pango_ot_buffer_output</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-set-rtl"><link linkend="pango-ot-buffer-set-rtl">pango_ot_buffer_set_rtl</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-buffer-set-zero-width-marks"><link linkend="pango-ot-buffer-set-zero-width-marks">pango_ot_buffer_set_zero_width_marks</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-DEFAULT-LANGUAGE--CAPS"><link linkend="PANGO-OT-DEFAULT-LANGUAGE--CAPS">PANGO_OT_DEFAULT_LANGUAGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-find-feature"><link linkend="pango-ot-info-find-feature">pango_ot_info_find_feature</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-find-language"><link linkend="pango-ot-info-find-language">pango_ot_info_find_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-find-script"><link linkend="pango-ot-info-find-script">pango_ot_info_find_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-get"><link linkend="pango-ot-info-get">pango_ot_info_get</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-list-features"><link linkend="pango-ot-info-list-features">pango_ot_info_list_features</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-list-languages"><link linkend="pango-ot-info-list-languages">pango_ot_info_list_languages</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-info-list-scripts"><link linkend="pango-ot-info-list-scripts">pango_ot_info_list_scripts</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-NO-FEATURE--CAPS"><link linkend="PANGO-OT-NO-FEATURE--CAPS">PANGO_OT_NO_FEATURE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-NO-SCRIPT--CAPS"><link linkend="PANGO-OT-NO-SCRIPT--CAPS">PANGO_OT_NO_SCRIPT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-add-feature"><link linkend="pango-ot-ruleset-add-feature">pango_ot_ruleset_add_feature</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-copy"><link linkend="pango-ot-ruleset-description-copy">pango_ot_ruleset_description_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-equal"><link linkend="pango-ot-ruleset-description-equal">pango_ot_ruleset_description_equal</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-free"><link linkend="pango-ot-ruleset-description-free">pango_ot_ruleset_description_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-description-hash"><link linkend="pango-ot-ruleset-description-hash">pango_ot_ruleset_description_hash</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-get-feature-count"><link linkend="pango-ot-ruleset-get-feature-count">pango_ot_ruleset_get_feature_count</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-get-for-description"><link linkend="pango-ot-ruleset-get-for-description">pango_ot_ruleset_get_for_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-maybe-add-feature"><link linkend="pango-ot-ruleset-maybe-add-feature">pango_ot_ruleset_maybe_add_feature</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-maybe-add-features"><link linkend="pango-ot-ruleset-maybe-add-features">pango_ot_ruleset_maybe_add_features</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-new"><link linkend="pango-ot-ruleset-new">pango_ot_ruleset_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-new-for"><link linkend="pango-ot-ruleset-new-for">pango_ot_ruleset_new_for</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-new-from-description"><link linkend="pango-ot-ruleset-new-from-description">pango_ot_ruleset_new_from_description</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-position"><link linkend="pango-ot-ruleset-position">pango_ot_ruleset_position</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-ruleset-substitute"><link linkend="pango-ot-ruleset-substitute">pango_ot_ruleset_substitute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS"><link linkend="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS">PANGO_OT_TAG_DEFAULT_LANGUAGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS"><link linkend="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS">PANGO_OT_TAG_DEFAULT_SCRIPT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-from-language"><link linkend="pango-ot-tag-from-language">pango_ot_tag_from_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-from-script"><link linkend="pango-ot-tag-from-script">pango_ot_tag_from_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-TAG-MAKE--CAPS"><link linkend="PANGO-OT-TAG-MAKE--CAPS">PANGO_OT_TAG_MAKE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS"><link linkend="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS">PANGO_OT_TAG_MAKE_FROM_STRING</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-to-language"><link linkend="pango-ot-tag-to-language">pango_ot_tag_to_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-ot-tag-to-script"><link linkend="pango-ot-tag-to-script">pango_ot_tag_to_script</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-enum"><link linkend="pango-parse-enum">pango_parse_enum</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-markup"><link linkend="pango-parse-markup">pango_parse_markup</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-stretch"><link linkend="pango-parse-stretch">pango_parse_stretch</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-style"><link linkend="pango-parse-style">pango_parse_style</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-variant"><link linkend="pango-parse-variant">pango_parse_variant</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-parse-weight"><link linkend="pango-parse-weight">pango_parse_weight</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-PIXELS--CAPS"><link linkend="PANGO-PIXELS--CAPS">PANGO_PIXELS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-PIXELS-CEIL--CAPS"><link linkend="PANGO-PIXELS-CEIL--CAPS">PANGO_PIXELS_CEIL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-PIXELS-FLOOR--CAPS"><link linkend="PANGO-PIXELS-FLOOR--CAPS">PANGO_PIXELS_FLOOR</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-quantize-line-geometry"><link linkend="pango-quantize-line-geometry">pango_quantize_line_geometry</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RBEARING--CAPS"><link linkend="PANGO-RBEARING--CAPS">PANGO_RBEARING</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-read-line"><link linkend="pango-read-line">pango_read_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-activate"><link linkend="pango-renderer-activate">pango_renderer_activate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-deactivate"><link linkend="pango-renderer-deactivate">pango_renderer_deactivate</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-error-underline"><link linkend="pango-renderer-draw-error-underline">pango_renderer_draw_error_underline</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-glyph"><link linkend="pango-renderer-draw-glyph">pango_renderer_draw_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-glyphs"><link linkend="pango-renderer-draw-glyphs">pango_renderer_draw_glyphs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-glyph-item"><link linkend="pango-renderer-draw-glyph-item">pango_renderer_draw_glyph_item</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-layout"><link linkend="pango-renderer-draw-layout">pango_renderer_draw_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-layout-line"><link linkend="pango-renderer-draw-layout-line">pango_renderer_draw_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-rectangle"><link linkend="pango-renderer-draw-rectangle">pango_renderer_draw_rectangle</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-draw-trapezoid"><link linkend="pango-renderer-draw-trapezoid">pango_renderer_draw_trapezoid</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-color"><link linkend="pango-renderer-get-color">pango_renderer_get_color</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-layout"><link linkend="pango-renderer-get-layout">pango_renderer_get_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-layout-line"><link linkend="pango-renderer-get-layout-line">pango_renderer_get_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-get-matrix"><link linkend="pango-renderer-get-matrix">pango_renderer_get_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-part-changed"><link linkend="pango-renderer-part-changed">pango_renderer_part_changed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-set-color"><link linkend="pango-renderer-set-color">pango_renderer_set_color</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-renderer-set-matrix"><link linkend="pango-renderer-set-matrix">pango_renderer_set_matrix</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-ATSUI--CAPS"><link linkend="PANGO-RENDER-TYPE-ATSUI--CAPS">PANGO_RENDER_TYPE_ATSUI</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-FC--CAPS"><link linkend="PANGO-RENDER-TYPE-FC--CAPS">PANGO_RENDER_TYPE_FC</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-FT2--CAPS"><link linkend="PANGO-RENDER-TYPE-FT2--CAPS">PANGO_RENDER_TYPE_FT2</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-NONE--CAPS"><link linkend="PANGO-RENDER-TYPE-NONE--CAPS">PANGO_RENDER_TYPE_NONE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-WIN32--CAPS"><link linkend="PANGO-RENDER-TYPE-WIN32--CAPS">PANGO_RENDER_TYPE_WIN32</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-X--CAPS"><link linkend="PANGO-RENDER-TYPE-X--CAPS">PANGO_RENDER_TYPE_X</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-RENDER-TYPE-XFT--CAPS"><link linkend="PANGO-RENDER-TYPE-XFT--CAPS">PANGO_RENDER_TYPE_XFT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-reorder-items"><link linkend="pango-reorder-items">pango_reorder_items</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE--CAPS"><link linkend="PANGO-SCALE--CAPS">PANGO_SCALE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-LARGE--CAPS"><link linkend="PANGO-SCALE-LARGE--CAPS">PANGO_SCALE_LARGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-MEDIUM--CAPS"><link linkend="PANGO-SCALE-MEDIUM--CAPS">PANGO_SCALE_MEDIUM</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-SMALL--CAPS"><link linkend="PANGO-SCALE-SMALL--CAPS">PANGO_SCALE_SMALL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-XX-LARGE--CAPS"><link linkend="PANGO-SCALE-XX-LARGE--CAPS">PANGO_SCALE_XX_LARGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-XX-SMALL--CAPS"><link linkend="PANGO-SCALE-XX-SMALL--CAPS">PANGO_SCALE_XX_SMALL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-X-LARGE--CAPS"><link linkend="PANGO-SCALE-X-LARGE--CAPS">PANGO_SCALE_X_LARGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-SCALE-X-SMALL--CAPS"><link linkend="PANGO-SCALE-X-SMALL--CAPS">PANGO_SCALE_X_SMALL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-scan-int"><link linkend="pango-scan-int">pango_scan_int</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-scan-string"><link linkend="pango-scan-string">pango_scan_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-scan-word"><link linkend="pango-scan-word">pango_scan_word</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-for-unichar"><link linkend="pango-script-for-unichar">pango_script_for_unichar</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-get-sample-language"><link linkend="pango-script-get-sample-language">pango_script_get_sample_language</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-free"><link linkend="pango-script-iter-free">pango_script_iter_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-get-range"><link linkend="pango-script-iter-get-range">pango_script_iter_get_range</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-new"><link linkend="pango-script-iter-new">pango_script_iter_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-script-iter-next"><link linkend="pango-script-iter-next">pango_script_iter_next</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-shape"><link linkend="pango-shape">pango_shape</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-skip-space"><link linkend="pango-skip-space">pango_skip_space</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-split-file-list"><link linkend="pango-split-file-list">pango_split_file_list</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-copy"><link linkend="pango-tab-array-copy">pango_tab_array_copy</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-free"><link linkend="pango-tab-array-free">pango_tab_array_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-get-positions-in-pixels"><link linkend="pango-tab-array-get-positions-in-pixels">pango_tab_array_get_positions_in_pixels</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-get-size"><link linkend="pango-tab-array-get-size">pango_tab_array_get_size</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-get-tab"><link linkend="pango-tab-array-get-tab">pango_tab_array_get_tab</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-get-tabs"><link linkend="pango-tab-array-get-tabs">pango_tab_array_get_tabs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-new"><link linkend="pango-tab-array-new">pango_tab_array_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-new-with-positions"><link linkend="pango-tab-array-new-with-positions">pango_tab_array_new_with_positions</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-resize"><link linkend="pango-tab-array-resize">pango_tab_array_resize</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-tab-array-set-tab"><link linkend="pango-tab-array-set-tab">pango_tab_array_set_tab</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-trim-string"><link linkend="pango-trim-string">pango_trim_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-ALIGNMENT--CAPS"><link linkend="PANGO-TYPE-ALIGNMENT--CAPS">PANGO_TYPE_ALIGNMENT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-ATTR-LIST--CAPS"><link linkend="PANGO-TYPE-ATTR-LIST--CAPS">PANGO_TYPE_ATTR_LIST</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-ATTR-TYPE--CAPS"><link linkend="PANGO-TYPE-ATTR-TYPE--CAPS">PANGO_TYPE_ATTR_TYPE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-COLOR--CAPS"><link linkend="PANGO-TYPE-COLOR--CAPS">PANGO_TYPE_COLOR</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-COVERAGE-LEVEL--CAPS"><link linkend="PANGO-TYPE-COVERAGE-LEVEL--CAPS">PANGO_TYPE_COVERAGE_LEVEL</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-DIRECTION--CAPS"><link linkend="PANGO-TYPE-DIRECTION--CAPS">PANGO_TYPE_DIRECTION</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-ELLIPSIZE-MODE--CAPS"><link linkend="PANGO-TYPE-ELLIPSIZE-MODE--CAPS">PANGO_TYPE_ELLIPSIZE_MODE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT--CAPS"><link linkend="PANGO-TYPE-FONT--CAPS">PANGO_TYPE_FONT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONTSET--CAPS"><link linkend="PANGO-TYPE-FONTSET--CAPS">PANGO_TYPE_FONTSET</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONTSET-SIMPLE--CAPS"><link linkend="PANGO-TYPE-FONTSET-SIMPLE--CAPS">PANGO_TYPE_FONTSET_SIMPLE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT-DESCRIPTION--CAPS"><link linkend="PANGO-TYPE-FONT-DESCRIPTION--CAPS">PANGO_TYPE_FONT_DESCRIPTION</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT-FACE--CAPS"><link linkend="PANGO-TYPE-FONT-FACE--CAPS">PANGO_TYPE_FONT_FACE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT-FAMILY--CAPS"><link linkend="PANGO-TYPE-FONT-FAMILY--CAPS">PANGO_TYPE_FONT_FAMILY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT-MAP--CAPS"><link linkend="PANGO-TYPE-FONT-MAP--CAPS">PANGO_TYPE_FONT_MAP</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT-MASK--CAPS"><link linkend="PANGO-TYPE-FONT-MASK--CAPS">PANGO_TYPE_FONT_MASK</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-FONT-METRICS--CAPS"><link linkend="PANGO-TYPE-FONT-METRICS--CAPS">PANGO_TYPE_FONT_METRICS</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-GLYPH-ITEM--CAPS"><link linkend="PANGO-TYPE-GLYPH-ITEM--CAPS">PANGO_TYPE_GLYPH_ITEM</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS"><link linkend="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS">PANGO_TYPE_GLYPH_ITEM_ITER</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-GLYPH-STRING--CAPS"><link linkend="PANGO-TYPE-GLYPH-STRING--CAPS">PANGO_TYPE_GLYPH_STRING</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-LANGUAGE--CAPS"><link linkend="PANGO-TYPE-LANGUAGE--CAPS">PANGO_TYPE_LANGUAGE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-MATRIX--CAPS"><link linkend="PANGO-TYPE-MATRIX--CAPS">PANGO_TYPE_MATRIX</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-RENDER-PART--CAPS"><link linkend="PANGO-TYPE-RENDER-PART--CAPS">PANGO_TYPE_RENDER_PART</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-SCRIPT--CAPS"><link linkend="PANGO-TYPE-SCRIPT--CAPS">PANGO_TYPE_SCRIPT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-STRETCH--CAPS"><link linkend="PANGO-TYPE-STRETCH--CAPS">PANGO_TYPE_STRETCH</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-STYLE--CAPS"><link linkend="PANGO-TYPE-STYLE--CAPS">PANGO_TYPE_STYLE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-TAB-ALIGN--CAPS"><link linkend="PANGO-TYPE-TAB-ALIGN--CAPS">PANGO_TYPE_TAB_ALIGN</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-TAB-ARRAY--CAPS"><link linkend="PANGO-TYPE-TAB-ARRAY--CAPS">PANGO_TYPE_TAB_ARRAY</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-UNDERLINE--CAPS"><link linkend="PANGO-TYPE-UNDERLINE--CAPS">PANGO_TYPE_UNDERLINE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-VARIANT--CAPS"><link linkend="PANGO-TYPE-VARIANT--CAPS">PANGO_TYPE_VARIANT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-WEIGHT--CAPS"><link linkend="PANGO-TYPE-WEIGHT--CAPS">PANGO_TYPE_WEIGHT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-TYPE-WRAP-MODE--CAPS"><link linkend="PANGO-TYPE-WRAP-MODE--CAPS">PANGO_TYPE_WRAP_MODE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-unichar-direction"><link linkend="pango-unichar-direction">pango_unichar_direction</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-units-from-double"><link linkend="pango-units-from-double">pango_units_from_double</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-UNITS-ROUND--CAPS"><link linkend="PANGO-UNITS-ROUND--CAPS">PANGO_UNITS_ROUND</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-units-to-double"><link linkend="pango-units-to-double">pango_units_to_double</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION--CAPS"><link linkend="PANGO-VERSION--CAPS">PANGO_VERSION</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-version"><link linkend="pango-version">pango_version</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION-CHECK--CAPS"><link linkend="PANGO-VERSION-CHECK--CAPS">PANGO_VERSION_CHECK</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-version-check"><link linkend="pango-version-check">pango_version_check</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION-ENCODE--CAPS"><link linkend="PANGO-VERSION-ENCODE--CAPS">PANGO_VERSION_ENCODE</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION-MAJOR--CAPS"><link linkend="PANGO-VERSION-MAJOR--CAPS">PANGO_VERSION_MAJOR</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION-MICRO--CAPS"><link linkend="PANGO-VERSION-MICRO--CAPS">PANGO_VERSION_MICRO</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION-MINOR--CAPS"><link linkend="PANGO-VERSION-MINOR--CAPS">PANGO_VERSION_MINOR</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-version-string"><link linkend="pango-version-string">pango_version_string</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-VERSION-STRING--CAPS"><link linkend="PANGO-VERSION-STRING--CAPS">PANGO_VERSION_STRING</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-cache-free"><link linkend="pango-win32-font-cache-free">pango_win32_font_cache_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-cache-load"><link linkend="pango-win32-font-cache-load">pango_win32_font_cache_load</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-cache-loadw"><link linkend="pango-win32-font-cache-loadw">pango_win32_font_cache_loadw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-cache-new"><link linkend="pango-win32-font-cache-new">pango_win32_font_cache_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-cache-unload"><link linkend="pango-win32-font-cache-unload">pango_win32_font_cache_unload</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-description-from-logfont"><link linkend="pango-win32-font-description-from-logfont">pango_win32_font_description_from_logfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-description-from-logfontw"><link linkend="pango-win32-font-description-from-logfontw">pango_win32_font_description_from_logfontw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-done-font"><link linkend="pango-win32-font-done-font">pango_win32_font_done_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-get-glyph-index"><link linkend="pango-win32-font-get-glyph-index">pango_win32_font_get_glyph_index</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-get-metrics-factor"><link linkend="pango-win32-font-get-metrics-factor">pango_win32_font_get_metrics_factor</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-logfont"><link linkend="pango-win32-font-logfont">pango_win32_font_logfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-logfontw"><link linkend="pango-win32-font-logfontw">pango_win32_font_logfontw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-map-for-display"><link linkend="pango-win32-font-map-for-display">pango_win32_font_map_for_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-map-get-font-cache"><link linkend="pango-win32-font-map-get-font-cache">pango_win32_font_map_get_font_cache</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-font-select-font"><link linkend="pango-win32-font-select-font">pango_win32_font_select_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-context"><link linkend="pango-win32-get-context">pango_win32_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-dc"><link linkend="pango-win32-get-dc">pango_win32_get_dc</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-debug-flag"><link linkend="pango-win32-get-debug-flag">pango_win32_get_debug_flag</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-get-unknown-glyph"><link linkend="pango-win32-get-unknown-glyph">pango_win32_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-render"><link linkend="pango-win32-render">pango_win32_render</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-render-layout"><link linkend="pango-win32-render-layout">pango_win32_render_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-render-layout-line"><link linkend="pango-win32-render-layout-line">pango_win32_render_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-render-transformed"><link linkend="pango-win32-render-transformed">pango_win32_render_transformed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-win32-shutdown-display"><link linkend="pango-win32-shutdown-display">pango_win32_shutdown_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-display"><link linkend="pango-xft-font-get-display">pango_xft_font_get_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-font"><link linkend="pango-xft-font-get-font">pango_xft_font_get_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-glyph"><link linkend="pango-xft-font-get-glyph">pango_xft_font_get_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-get-unknown-glyph"><link linkend="pango-xft-font-get-unknown-glyph">pango_xft_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-has-char"><link linkend="pango-xft-font-has-char">pango_xft_font_has_char</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-lock-face"><link linkend="pango-xft-font-lock-face">pango_xft_font_lock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-font-unlock-face"><link linkend="pango-xft-font-unlock-face">pango_xft_font_unlock_face</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-get-context"><link linkend="pango-xft-get-context">pango_xft_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-get-font-map"><link linkend="pango-xft-get-font-map">pango_xft_get_font_map</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-picture-render"><link linkend="pango-xft-picture-render">pango_xft_picture_render</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render"><link linkend="pango-xft-render">pango_xft_render</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-renderer-new"><link linkend="pango-xft-renderer-new">pango_xft_renderer_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-renderer-set-default-color"><link linkend="pango-xft-renderer-set-default-color">pango_xft_renderer_set_default_color</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-renderer-set-draw"><link linkend="pango-xft-renderer-set-draw">pango_xft_renderer_set_draw</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render-layout"><link linkend="pango-xft-render-layout">pango_xft_render_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render-layout-line"><link linkend="pango-xft-render-layout-line">pango_xft_render_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-render-transformed"><link linkend="pango-xft-render-transformed">pango_xft_render_transformed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-set-default-substitute"><link linkend="pango-xft-set-default-substitute">pango_xft_set_default_substitute</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-shutdown-display"><link linkend="pango-xft-shutdown-display">pango_xft_shutdown_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-xft-substitute-changed"><link linkend="pango-xft-substitute-changed">pango_xft_substitute_changed</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-apply-ligatures"><link linkend="pango-x-apply-ligatures">pango_x_apply_ligatures</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-context-set-funcs"><link linkend="pango-x-context-set-funcs">pango_x_context_set_funcs</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-fallback-shape"><link linkend="pango-x-fallback-shape">pango_x_fallback_shape</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-find-first-subfont"><link linkend="pango-x-find-first-subfont">pango_x_find_first_subfont</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-free"><link linkend="pango-x-font-cache-free">pango_x_font_cache_free</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-load"><link linkend="pango-x-font-cache-load">pango_x_font_cache_load</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-new"><link linkend="pango-x-font-cache-new">pango_x_font_cache_new</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-cache-unload"><link linkend="pango-x-font-cache-unload">pango_x_font_cache_unload</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-get-unknown-glyph"><link linkend="pango-x-font-get-unknown-glyph">pango_x_font_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-map-for-display"><link linkend="pango-x-font-map-for-display">pango_x_font_map_for_display</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-map-get-font-cache"><link linkend="pango-x-font-map-get-font-cache">pango_x_font_map_get_font_cache</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-font-subfont-xlfd"><link linkend="pango-x-font-subfont-xlfd">pango_x_font_subfont_xlfd</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-get-context"><link linkend="pango-x-get-context">pango_x_get_context</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-get-unknown-glyph"><link linkend="pango-x-get-unknown-glyph">pango_x_get_unknown_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-X-GLYPH-INDEX--CAPS"><link linkend="PANGO-X-GLYPH-INDEX--CAPS">PANGO_X_GLYPH_INDEX</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-X-GLYPH-SUBFONT--CAPS"><link linkend="PANGO-X-GLYPH-SUBFONT--CAPS">PANGO_X_GLYPH_SUBFONT</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-has-glyph"><link linkend="pango-x-has-glyph">pango_x_has_glyph</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-list-subfonts"><link linkend="pango-x-list-subfonts">pango_x_list_subfonts</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-load-font"><link linkend="pango-x-load-font">pango_x_load_font</link></primaryie></indexentry>
+<indexentry><primaryie linkends="PANGO-X-MAKE-GLYPH--CAPS"><link linkend="PANGO-X-MAKE-GLYPH--CAPS">PANGO_X_MAKE_GLYPH</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-render"><link linkend="pango-x-render">pango_x_render</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-render-layout"><link linkend="pango-x-render-layout">pango_x_render_layout</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-render-layout-line"><link linkend="pango-x-render-layout-line">pango_x_render_layout_line</link></primaryie></indexentry>
+<indexentry><primaryie linkends="pango-x-shutdown-display"><link linkend="pango-x-shutdown-display">pango_x_shutdown_display</link></primaryie></indexentry>
+</indexdiv>
+<indexdiv><title>S</title>
+<indexentry><primaryie linkends="script-engine-create"><link linkend="script-engine-create">script_engine_create</link></primaryie></indexentry>
+<indexentry><primaryie linkends="script-engine-exit"><link linkend="script-engine-exit">script_engine_exit</link></primaryie></indexentry>
+<indexentry><primaryie linkends="script-engine-init"><link linkend="script-engine-init">script_engine_init</link></primaryie></indexentry>
+<indexentry><primaryie linkends="script-engine-list"><link linkend="script-engine-list">script_engine_list</link></primaryie></indexentry>
+</indexdiv>
+</indexdiv>
diff --git a/docs/xml/atsui-fonts.xml b/docs/xml/atsui-fonts.xml
new file mode 100755 (executable)
index 0000000..008c30a
--- /dev/null
@@ -0,0 +1,68 @@
+<refentry id="pango-ATSUI-Fonts">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-ATSUI-Fonts.top_of_page">ATSUI Fonts</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>ATSUI Fonts</refname>
+<refpurpose>Font handling with ATSUI fonts</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-ATSUI-Fonts.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+#define             <link linkend="PANGO-RENDER-TYPE-ATSUI--CAPS">PANGO_RENDER_TYPE_ATSUI</link>
+<link linkend="CGFontRef">CGFontRef</link>           <link linkend="pango-atsui-font-get-cgfont">pango_atsui_font_get_cgfont</link>         (<link linkend="PangoATSUIFont">PangoATSUIFont</link> *font);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-ATSUI-Fonts.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The macros and functions in this section are used to access fonts natively on
+MacOS systems using the ATSUI text rendering subsystem.
+</para>
+</refsect1>
+
+<refsect1 id="pango-ATSUI-Fonts.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PANGO-RENDER-TYPE-ATSUI--CAPS" role="macro">
+<title>PANGO_RENDER_TYPE_ATSUI</title>
+<indexterm zone="PANGO-RENDER-TYPE-ATSUI--CAPS"><primary sortas="PANGO_RENDER_TYPE_ATSUI">PANGO_RENDER_TYPE_ATSUI</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_ATSUI "PangoRenderATSUI"
+</programlisting>
+<para>
+A string constant identifying the ATSUI renderer. The associated quark (see
+<link linkend="g-quark-from-string"><function>g_quark_from_string()</function></link>) is used to identify the renderer in <link linkend="pango-find-map"><function>pango_find_map()</function></link>.
+</para></refsect2>
+<refsect2 id="pango-atsui-font-get-cgfont" role="function" condition="since:1.18">
+<title>pango_atsui_font_get_cgfont ()</title>
+<indexterm zone="pango-atsui-font-get-cgfont" role="1.18"><primary sortas="pango_atsui_font_get_cgfont">pango_atsui_font_get_cgfont</primary></indexterm><programlisting><link linkend="CGFontRef">CGFontRef</link>           pango_atsui_font_get_cgfont         (<link linkend="PangoATSUIFont">PangoATSUIFont</link> *font);</programlisting>
+<para>
+Returns the CGFontRef of a font.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoATSUIFont"><type>PangoATSUIFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the CGFontRef associated to <parameter>font</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/bidi.xml b/docs/xml/bidi.xml
new file mode 100755 (executable)
index 0000000..402abc8
--- /dev/null
@@ -0,0 +1,354 @@
+<refentry id="pango-Bidirectional-Text">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Bidirectional-Text.top_of_page">Bidirectional Text</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Bidirectional Text</refname>
+<refpurpose>Types and functions to help with handling bidirectional text</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Bidirectional-Text.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+enum                <link linkend="PangoDirection">PangoDirection</link>;
+<link linkend="PangoDirection">PangoDirection</link>      <link linkend="pango-unichar-direction">pango_unichar_direction</link>             (<link linkend="gunichar">gunichar</link> ch);
+<link linkend="PangoDirection">PangoDirection</link>      <link linkend="pango-find-base-dir">pango_find_base_dir</link>                 (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="gint">gint</link> length);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-get-mirror-char">pango_get_mirror_char</link>               (<link linkend="gunichar">gunichar</link> ch,
+                                                         <link linkend="gunichar">gunichar</link> *mirrored_ch);
+enum                <link linkend="PangoBidiType">PangoBidiType</link>;
+<link linkend="PangoBidiType">PangoBidiType</link>       <link linkend="pango-bidi-type-for-unichar">pango_bidi_type_for_unichar</link>         (<link linkend="gunichar">gunichar</link> ch);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Bidirectional-Text.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Pango supports bidirectional text (like Arabic and Hebrew) automatically.
+Some applications however, need some help to correctly handle bidirectional
+text.
+</para>
+<para>
+The <link linkend="PangoDirection"><type>PangoDirection</type></link> type can be used with <link linkend="pango-context-set-base-dir"><function>pango_context_set_base_dir()</function></link> to
+instruct Pango about direction of text, though in most cases Pango detects
+that correctly and automatically.  The rest of the facilities in this section
+are used internally by Pango already, and are provided to help applications
+that need more direct control over bidirectional setting of text.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Bidirectional-Text.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoDirection" role="enum">
+<title>enum PangoDirection</title>
+<indexterm zone="PangoDirection"><primary sortas="PangoDirection">PangoDirection</primary></indexterm><programlisting>typedef enum {
+  PANGO_DIRECTION_LTR,
+  PANGO_DIRECTION_RTL,
+  PANGO_DIRECTION_TTB_LTR,
+  PANGO_DIRECTION_TTB_RTL,
+  PANGO_DIRECTION_WEAK_LTR,
+  PANGO_DIRECTION_WEAK_RTL,
+  PANGO_DIRECTION_NEUTRAL
+} PangoDirection;
+</programlisting>
+<para>
+The <link linkend="PangoDirection"><type>PangoDirection</type></link> type represents a direction in the
+Unicode bidirectional algorithm; not every value in this
+enumeration makes sense for every usage of <link linkend="PangoDirection"><type>PangoDirection</type></link>;
+for example, the return value of <link linkend="pango-unichar-direction"><function>pango_unichar_direction()</function></link>
+and <link linkend="pango-find-base-dir"><function>pango_find_base_dir()</function></link> cannot be <link linkend="PANGO-DIRECTION-WEAK-LTR--CAPS"><literal>PANGO_DIRECTION_WEAK_LTR</literal></link>
+or <link linkend="PANGO-DIRECTION-WEAK-RTL--CAPS"><literal>PANGO_DIRECTION_WEAK_RTL</literal></link>, since every character is either
+neutral or has a strong direction; on the other hand
+<link linkend="PANGO-DIRECTION-NEUTRAL--CAPS"><literal>PANGO_DIRECTION_NEUTRAL</literal></link> doesn't make sense to pass
+to <link linkend="pango-itemize-with-base-dir"><function>pango_itemize_with_base_dir()</function></link>.
+</para>
+<para>
+The <link linkend="PANGO-DIRECTION-TTB-LTR--CAPS"><literal>PANGO_DIRECTION_TTB_LTR</literal></link>, <link linkend="PANGO-DIRECTION-TTB-RTL--CAPS"><literal>PANGO_DIRECTION_TTB_RTL</literal></link>
+values come from an earlier interpretation of this
+enumeration as the writing direction of a block of
+text and are no longer used; See <link linkend="PangoGravity"><type>PangoGravity</type></link> for how
+vertical text is handled in Pango.</para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-DIRECTION-LTR--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_LTR</literal></term>
+<listitem><simpara> A strong left-to-right direction
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-DIRECTION-RTL--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_RTL</literal></term>
+<listitem><simpara> A strong right-to-left direction
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-DIRECTION-TTB-LTR--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_TTB_LTR</literal></term>
+<listitem><simpara> Deprecated value; treated the
+  same as <link linkend="PANGO-DIRECTION-RTL--CAPS"><literal>PANGO_DIRECTION_RTL</literal></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-DIRECTION-TTB-RTL--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_TTB_RTL</literal></term>
+<listitem><simpara> Deprecated value; treated the
+  same as <link linkend="PANGO-DIRECTION-LTR--CAPS"><literal>PANGO_DIRECTION_LTR</literal></link>
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-DIRECTION-WEAK-LTR--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_WEAK_LTR</literal></term>
+<listitem><simpara> A weak left-to-right direction
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-DIRECTION-WEAK-RTL--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_WEAK_RTL</literal></term>
+<listitem><simpara> A weak right-to-left direction
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-DIRECTION-NEUTRAL--CAPS" role="constant">
+<term><literal>PANGO_DIRECTION_NEUTRAL</literal></term>
+<listitem><simpara> No direction specified
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-unichar-direction" role="function">
+<title>pango_unichar_direction ()</title>
+<indexterm zone="pango-unichar-direction"><primary sortas="pango_unichar_direction">pango_unichar_direction</primary></indexterm><programlisting><link linkend="PangoDirection">PangoDirection</link>      pango_unichar_direction             (<link linkend="gunichar">gunichar</link> ch);</programlisting>
+<para>
+Determines the inherent direction of a character; either
+<link linkend="PANGO-DIRECTION-LTR--CAPS"><literal>PANGO_DIRECTION_LTR</literal></link>, <link linkend="PANGO-DIRECTION-RTL--CAPS"><literal>PANGO_DIRECTION_RTL</literal></link>, or
+<link linkend="PANGO-DIRECTION-NEUTRAL--CAPS"><literal>PANGO_DIRECTION_NEUTRAL</literal></link>.
+</para>
+<para>
+This function is useful to categorize characters into left-to-right
+letters, right-to-left letters, and everything else.  If full
+Unicode bidirectional type of a character is needed,
+<link linkend="pango-bidi-type-for-gunichar"><function>pango_bidi_type_for_gunichar()</function></link> can be used instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ch</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the direction of the character.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-find-base-dir" role="function" condition="since:1.4">
+<title>pango_find_base_dir ()</title>
+<indexterm zone="pango-find-base-dir" role="1.4"><primary sortas="pango_find_base_dir">pango_find_base_dir</primary></indexterm><programlisting><link linkend="PangoDirection">PangoDirection</link>      pango_find_base_dir                 (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="gint">gint</link> length);</programlisting>
+<para>
+Searches a string the first character that has a strong
+direction, according to the Unicode bidirectional algorithm.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>   the text to process
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of <parameter>text</parameter> in bytes (may be -1 if <parameter>text</parameter> is nul-terminated)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The direction corresponding to the first strong character.
+If no such character is found, then <link linkend="PANGO-DIRECTION-NEUTRAL--CAPS"><literal>PANGO_DIRECTION_NEUTRAL</literal></link> is returned.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-get-mirror-char" role="function" condition="deprecated:">
+<title>pango_get_mirror_char ()</title>
+<indexterm zone="pango-get-mirror-char" role="deprecated"><primary sortas="pango_get_mirror_char">pango_get_mirror_char</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_get_mirror_char               (<link linkend="gunichar">gunichar</link> ch,
+                                                         <link linkend="gunichar">gunichar</link> *mirrored_ch);</programlisting>
+<warning><para><literal>pango_get_mirror_char</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+If <parameter>ch</parameter> has the Unicode mirrored property and there is another Unicode
+character that typically has a glyph that is the mirror image of <parameter>ch</parameter>'s
+glyph, puts that character in the address pointed to by <parameter>mirrored_ch</parameter>.
+</para>
+<para>
+Use <link linkend="g-unichar-get-mirror-char"><function>g_unichar_get_mirror_char()</function></link> instead; the docs for that function
+provide full details.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ch</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>mirrored_ch</parameter>&#160;:</term>
+<listitem><simpara> location to store the mirrored character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>ch</parameter> has a mirrored character and <parameter>mirrored_ch</parameter> is
+filled in, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoBidiType" role="enum" condition="since:1.22">
+<title>enum PangoBidiType</title>
+<indexterm zone="PangoBidiType" role="1.22"><primary sortas="PangoBidiType">PangoBidiType</primary></indexterm><programlisting>typedef enum {
+  /* Strong types */
+  PANGO_BIDI_TYPE_L,
+  PANGO_BIDI_TYPE_LRE,
+  PANGO_BIDI_TYPE_LRO,
+  PANGO_BIDI_TYPE_R,
+  PANGO_BIDI_TYPE_AL,
+  PANGO_BIDI_TYPE_RLE,
+  PANGO_BIDI_TYPE_RLO,
+
+  /* Weak types */
+  PANGO_BIDI_TYPE_PDF,
+  PANGO_BIDI_TYPE_EN,
+  PANGO_BIDI_TYPE_ES,
+  PANGO_BIDI_TYPE_ET,
+  PANGO_BIDI_TYPE_AN,
+  PANGO_BIDI_TYPE_CS,
+  PANGO_BIDI_TYPE_NSM,
+  PANGO_BIDI_TYPE_BN,
+
+  /* Neutral types */
+  PANGO_BIDI_TYPE_B,
+  PANGO_BIDI_TYPE_S,
+  PANGO_BIDI_TYPE_WS,
+  PANGO_BIDI_TYPE_ON
+} PangoBidiType;
+</programlisting>
+<para>
+The <link linkend="PangoBidiType"><type>PangoBidiType</type></link> type represents the bidirectional character
+type of a Unicode character as specified by the
+<ulink url="http://www.unicode.org/reports/tr9/">Unicode bidirectional algorithm</ulink>.</para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-BIDI-TYPE-L--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_L</literal></term>
+<listitem><simpara> Left-to-Right
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-LRE--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_LRE</literal></term>
+<listitem><simpara> Left-to-Right Embedding
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-LRO--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_LRO</literal></term>
+<listitem><simpara> Left-to-Right Override
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-R--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_R</literal></term>
+<listitem><simpara> Right-to-Left
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-AL--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_AL</literal></term>
+<listitem><simpara> Right-to-Left Arabic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-RLE--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_RLE</literal></term>
+<listitem><simpara> Right-to-Left Embedding
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-RLO--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_RLO</literal></term>
+<listitem><simpara> Right-to-Left Override
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-PDF--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_PDF</literal></term>
+<listitem><simpara> Pop Directional Format
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-EN--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_EN</literal></term>
+<listitem><simpara> European Number
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-ES--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_ES</literal></term>
+<listitem><simpara> European Number Separator
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-ET--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_ET</literal></term>
+<listitem><simpara> European Number Terminator
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-AN--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_AN</literal></term>
+<listitem><simpara> Arabic Number
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-CS--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_CS</literal></term>
+<listitem><simpara> Common Number Separator
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-NSM--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_NSM</literal></term>
+<listitem><simpara> Nonspacing Mark
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-BN--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_BN</literal></term>
+<listitem><simpara> Boundary Neutral
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-B--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_B</literal></term>
+<listitem><simpara> Paragraph Separator
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-S--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_S</literal></term>
+<listitem><simpara> Segment Separator
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-WS--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_WS</literal></term>
+<listitem><simpara> Whitespace
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-BIDI-TYPE-ON--CAPS" role="constant">
+<term><literal>PANGO_BIDI_TYPE_ON</literal></term>
+<listitem><simpara> Other Neutrals
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-bidi-type-for-unichar" role="function" condition="since:1.22">
+<title>pango_bidi_type_for_unichar ()</title>
+<indexterm zone="pango-bidi-type-for-unichar" role="1.22"><primary sortas="pango_bidi_type_for_unichar">pango_bidi_type_for_unichar</primary></indexterm><programlisting><link linkend="PangoBidiType">PangoBidiType</link>       pango_bidi_type_for_unichar         (<link linkend="gunichar">gunichar</link> ch);</programlisting>
+<para>
+Determines the normative bidirectional character type of a
+character, as specified in the Unicode Character Database.
+</para>
+<para>
+A simplified version of this function is available as
+<link linkend="pango-unichar-get-direction"><function>pango_unichar_get_direction()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ch</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the bidirectional character type, as used in the
+Unicode bidirectional algorithm.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+
+</refsect1>
+
+
+
+<refsect1 id="pango-Bidirectional-Text.see-also">
+<title>See Also</title>
+<para>
+<link linkend="pango-context-get-base-dir"><function>pango_context_get_base_dir()</function></link>,
+<link linkend="pango-context-set-base-dir"><function>pango_context_set_base_dir()</function></link>,
+<link linkend="pango-itemize-with-base-dir"><function>pango_itemize_with_base_dir()</function></link>
+</para>
+</refsect1>
+
+</refentry>
diff --git a/docs/xml/coverage-maps.xml b/docs/xml/coverage-maps.xml
new file mode 100755 (executable)
index 0000000..c8d0bb5
--- /dev/null
@@ -0,0 +1,265 @@
+<refentry id="pango-Coverage-Maps">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Coverage-Maps.top_of_page">Coverage Maps</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Coverage Maps</refname>
+<refpurpose>Unicode character range coverage storage</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Coverage-Maps.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+enum                <link linkend="PangoCoverageLevel">PangoCoverageLevel</link>;
+#define             <link linkend="PANGO-TYPE-COVERAGE-LEVEL--CAPS">PANGO_TYPE_COVERAGE_LEVEL</link>
+                    <link linkend="PangoCoverage">PangoCoverage</link>;
+
+<link linkend="PangoCoverage">PangoCoverage</link> *     <link linkend="pango-coverage-new">pango_coverage_new</link>                  (void);
+<link linkend="PangoCoverage">PangoCoverage</link> *     <link linkend="pango-coverage-ref">pango_coverage_ref</link>                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage);
+<link linkend="void">void</link>                <link linkend="pango-coverage-unref">pango_coverage_unref</link>                (<link linkend="PangoCoverage">PangoCoverage</link> *coverage);
+<link linkend="PangoCoverage">PangoCoverage</link> *     <link linkend="pango-coverage-copy">pango_coverage_copy</link>                 (<link linkend="PangoCoverage">PangoCoverage</link> *coverage);
+<link linkend="PangoCoverageLevel">PangoCoverageLevel</link>  <link linkend="pango-coverage-get">pango_coverage_get</link>                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="int">int</link> index_);
+<link linkend="void">void</link>                <link linkend="pango-coverage-max">pango_coverage_max</link>                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="PangoCoverage">PangoCoverage</link> *other);
+<link linkend="void">void</link>                <link linkend="pango-coverage-set">pango_coverage_set</link>                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="PangoCoverageLevel">PangoCoverageLevel</link> level);
+<link linkend="void">void</link>                <link linkend="pango-coverage-to-bytes">pango_coverage_to_bytes</link>             (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="guchar">guchar</link> **bytes,
+                                                         <link linkend="int">int</link> *n_bytes);
+<link linkend="PangoCoverage">PangoCoverage</link> *     <link linkend="pango-coverage-from-bytes">pango_coverage_from_bytes</link>           (<link linkend="guchar">guchar</link> *bytes,
+                                                         <link linkend="int">int</link> n_bytes);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Coverage-Maps.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+It is often necessary in Pango to determine if a particular font can
+represent a particular character, and also how well it can represent
+that character. The <link linkend="PangoCoverage"><type>PangoCoverage</type></link> is a data structure that is used
+to represent that information.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Coverage-Maps.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoCoverageLevel" role="enum">
+<title>enum PangoCoverageLevel</title>
+<indexterm zone="PangoCoverageLevel"><primary sortas="PangoCoverageLevel">PangoCoverageLevel</primary></indexterm><programlisting>typedef enum {
+  PANGO_COVERAGE_NONE,
+  PANGO_COVERAGE_FALLBACK,
+  PANGO_COVERAGE_APPROXIMATE,
+  PANGO_COVERAGE_EXACT
+} PangoCoverageLevel;
+</programlisting>
+<para>
+Used to indicate how well a font can represent a particular Unicode
+character point for a particular script.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-COVERAGE-NONE--CAPS" role="constant">
+<term><literal>PANGO_COVERAGE_NONE</literal></term>
+<listitem><simpara>The character is not representable with the font.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-COVERAGE-FALLBACK--CAPS" role="constant">
+<term><literal>PANGO_COVERAGE_FALLBACK</literal></term>
+<listitem><simpara>The character is represented in a way that may be
+                          comprehensible but is not the correct graphical form.
+                          For instance, a Hangul character represented as a
+                          a sequence of Jamos, or a Latin transliteration of
+                          a Cyrillic word.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-COVERAGE-APPROXIMATE--CAPS" role="constant">
+<term><literal>PANGO_COVERAGE_APPROXIMATE</literal></term>
+<listitem><simpara>The character is represented as basically the correct
+                             graphical form, but with a stylistic variant inappropriate for
+                             the current script.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-COVERAGE-EXACT--CAPS" role="constant">
+<term><literal>PANGO_COVERAGE_EXACT</literal></term>
+<listitem><simpara>The character is represented as the correct graphical form.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-COVERAGE-LEVEL--CAPS" role="macro">
+<title>PANGO_TYPE_COVERAGE_LEVEL</title>
+<indexterm zone="PANGO-TYPE-COVERAGE-LEVEL--CAPS"><primary sortas="PANGO_TYPE_COVERAGE_LEVEL">PANGO_TYPE_COVERAGE_LEVEL</primary></indexterm><programlisting>#define PANGO_TYPE_COVERAGE_LEVEL (pango_coverage_level_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoCoverageLevel"><type>PangoCoverageLevel</type></link>.
+</para></refsect2>
+<refsect2 id="PangoCoverage" role="struct">
+<title>PangoCoverage</title>
+<indexterm zone="PangoCoverage"><primary sortas="PangoCoverage">PangoCoverage</primary></indexterm><programlisting>typedef struct _PangoCoverage PangoCoverage;</programlisting>
+<para>
+The <link linkend="PangoCoverage"><type>PangoCoverage</type></link> structure represents a map from Unicode characters
+to <link linkend="PangoCoverageLevel"><type>PangoCoverageLevel</type></link>. It is an opaque structure with no public fields.
+</para></refsect2>
+<refsect2 id="pango-coverage-new" role="function">
+<title>pango_coverage_new ()</title>
+<indexterm zone="pango-coverage-new"><primary sortas="pango_coverage_new">pango_coverage_new</primary></indexterm><programlisting><link linkend="PangoCoverage">PangoCoverage</link> *     pango_coverage_new                  (void);</programlisting>
+<para>
+Create a new <link linkend="PangoCoverage"><type>PangoCoverage</type></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoCoverage"><type>PangoCoverage</type></link>,
+              initialized to <link linkend="PANGO-COVERAGE-NONE--CAPS"><literal>PANGO_COVERAGE_NONE</literal></link>
+              with a reference count of one, which
+              should be freed with <link linkend="pango-coverage-unref"><function>pango_coverage_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-ref" role="function">
+<title>pango_coverage_ref ()</title>
+<indexterm zone="pango-coverage-ref"><primary sortas="pango_coverage_ref">pango_coverage_ref</primary></indexterm><programlisting><link linkend="PangoCoverage">PangoCoverage</link> *     pango_coverage_ref                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage);</programlisting>
+<para>
+Increase the reference count on the <link linkend="PangoCoverage"><type>PangoCoverage</type></link> by one</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <parameter>coverage</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-unref" role="function">
+<title>pango_coverage_unref ()</title>
+<indexterm zone="pango-coverage-unref"><primary sortas="pango_coverage_unref">pango_coverage_unref</primary></indexterm><programlisting><link linkend="void">void</link>                pango_coverage_unref                (<link linkend="PangoCoverage">PangoCoverage</link> *coverage);</programlisting>
+<para>
+Decrease the reference count on the <link linkend="PangoCoverage"><type>PangoCoverage</type></link> by one.
+If the result is zero, free the coverage and all associated memory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-copy" role="function">
+<title>pango_coverage_copy ()</title>
+<indexterm zone="pango-coverage-copy"><primary sortas="pango_coverage_copy">pango_coverage_copy</primary></indexterm><programlisting><link linkend="PangoCoverage">PangoCoverage</link> *     pango_coverage_copy                 (<link linkend="PangoCoverage">PangoCoverage</link> *coverage);</programlisting>
+<para>
+Copy an existing <link linkend="PangoCoverage"><type>PangoCoverage</type></link>. (This function may now be unnecessary
+since we refcount the structure. File a bug if you use it.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoCoverage"><type>PangoCoverage</type></link>,
+              with a reference count of one, which
+              should be freed with <link linkend="pango-coverage-unref"><function>pango_coverage_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-get" role="function">
+<title>pango_coverage_get ()</title>
+<indexterm zone="pango-coverage-get"><primary sortas="pango_coverage_get">pango_coverage_get</primary></indexterm><programlisting><link linkend="PangoCoverageLevel">PangoCoverageLevel</link>  pango_coverage_get                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="int">int</link> index_);</programlisting>
+<para>
+Determine whether a particular index is covered by <parameter>coverage</parameter></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara> the index to check
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the coverage level of <parameter>coverage</parameter> for character <parameter>index_</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-max" role="function">
+<title>pango_coverage_max ()</title>
+<indexterm zone="pango-coverage-max"><primary sortas="pango_coverage_max">pango_coverage_max</primary></indexterm><programlisting><link linkend="void">void</link>                pango_coverage_max                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="PangoCoverage">PangoCoverage</link> *other);</programlisting>
+<para>
+Set the coverage for each index in <parameter>coverage</parameter> to be the max (better)
+value of the current coverage for the index and the coverage for
+the corresponding index in <parameter>other</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>other</parameter>&#160;:</term>
+<listitem><simpara> another <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-set" role="function">
+<title>pango_coverage_set ()</title>
+<indexterm zone="pango-coverage-set"><primary sortas="pango_coverage_set">pango_coverage_set</primary></indexterm><programlisting><link linkend="void">void</link>                pango_coverage_set                  (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="PangoCoverageLevel">PangoCoverageLevel</link> level);</programlisting>
+<para>
+Modify a particular index within <parameter>coverage</parameter></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara> the index to modify
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>level</parameter>&#160;:</term>
+<listitem><simpara> the new level for <parameter>index_</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-to-bytes" role="function">
+<title>pango_coverage_to_bytes ()</title>
+<indexterm zone="pango-coverage-to-bytes"><primary sortas="pango_coverage_to_bytes">pango_coverage_to_bytes</primary></indexterm><programlisting><link linkend="void">void</link>                pango_coverage_to_bytes             (<link linkend="PangoCoverage">PangoCoverage</link> *coverage,
+                                                         <link linkend="guchar">guchar</link> **bytes,
+                                                         <link linkend="int">int</link> *n_bytes);</programlisting>
+<para>
+Convert a <link linkend="PangoCoverage"><type>PangoCoverage</type></link> structure into a flat binary format</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>coverage</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>bytes</parameter>&#160;:</term>
+<listitem><simpara> location to store result (must be freed with <link linkend="g-free"><function>g_free()</function></link>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_bytes</parameter>&#160;:</term>
+<listitem><simpara> location to store size of result
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-coverage-from-bytes" role="function">
+<title>pango_coverage_from_bytes ()</title>
+<indexterm zone="pango-coverage-from-bytes"><primary sortas="pango_coverage_from_bytes">pango_coverage_from_bytes</primary></indexterm><programlisting><link linkend="PangoCoverage">PangoCoverage</link> *     pango_coverage_from_bytes           (<link linkend="guchar">guchar</link> *bytes,
+                                                         <link linkend="int">int</link> n_bytes);</programlisting>
+<para>
+Convert data generated from <link linkend="pango-converage-to-bytes"><function>pango_converage_to_bytes()</function></link> back
+to a <link linkend="PangoCoverage"><type>PangoCoverage</type></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bytes</parameter>&#160;:</term>
+<listitem><simpara> binary data representing a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_bytes</parameter>&#160;:</term>
+<listitem><simpara> the size of <parameter>bytes</parameter> in bytes
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated <link linkend="PangoCoverage"><type>PangoCoverage</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if
+              the data was invalid.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/engines.xml b/docs/xml/engines.xml
new file mode 100755 (executable)
index 0000000..45faea8
--- /dev/null
@@ -0,0 +1,235 @@
+<refentry id="pango-Engines">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Engines.top_of_page">Engines</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Engines</refname>
+<refpurpose>Language-specific and rendering-system-specific processing</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Engines.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoEngine"/>
+<synopsis>
+                    <link linkend="PangoEngineInfo">PangoEngineInfo</link>;
+                    <link linkend="PangoEngineScriptInfo">PangoEngineScriptInfo</link>;
+                    <link linkend="PangoEngine-struct">PangoEngine</link>;
+                    <link linkend="PangoEngineClass">PangoEngineClass</link>;
+#define             <link linkend="PANGO-RENDER-TYPE-NONE--CAPS">PANGO_RENDER_TYPE_NONE</link>
+<link linkend="void">void</link>                <link linkend="script-engine-list">script_engine_list</link>                  (<link linkend="PangoEngineInfo">PangoEngineInfo</link> **engines,
+                                                         <link linkend="int">int</link> *n_engines);
+<link linkend="void">void</link>                <link linkend="script-engine-init">script_engine_init</link>                  (<link linkend="GTypeModule">GTypeModule</link> *module);
+<link linkend="void">void</link>                <link linkend="script-engine-exit">script_engine_exit</link>                  (void);
+<link linkend="PangoEngine">PangoEngine</link> *       <link linkend="script-engine-create">script_engine_create</link>                (const <link linkend="char">char</link> *id);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-Engines.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoEngine
+         +----<link linkend="PangoEngineLang">PangoEngineLang</link>
+         +----<link linkend="PangoEngineShape">PangoEngineShape</link>
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Engines.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Pango utilizes a module architecture in which the language-specific
+and render-system-specific components are provided by loadable
+modules. Each loadable module supplies one or more
+<firstterm>engines</firstterm>.  Each <firstterm>engine</firstterm>
+has an associated <firstterm>engine type</firstterm> and
+<firstterm>render type</firstterm>. These two types are represented by
+strings.
+</para>
+<para>
+Each dynamically-loaded module exports several functions which provide
+the public API. These functions are <link linkend="script-engine-list"><function>script_engine_list()</function></link>,
+<link linkend="script-engine-init"><function>script_engine_init()</function></link> and script_engine_exit, and
+<link linkend="script-engine-create"><function>script_engine_create()</function></link>. The latter three functions are used when
+creating engines from the module at run time, while the first
+function is used when building a catalog of all available modules.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Engines.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoEngineInfo" role="struct">
+<title>PangoEngineInfo</title>
+<indexterm zone="PangoEngineInfo"><primary sortas="PangoEngineInfo">PangoEngineInfo</primary></indexterm><programlisting>typedef struct {
+  const gchar *id;
+  const gchar *engine_type;
+  const gchar *render_type;
+  PangoEngineScriptInfo *scripts;
+  gint n_scripts;
+} PangoEngineInfo;
+</programlisting>
+<para>
+The <link linkend="PangoEngineInfo"><type>PangoEngineInfo</type></link> structure contains information about a particular
+engine. It contains the following fields:
+</para><variablelist role="struct">
+<varlistentry>
+<term>const&#160;<link linkend="gchar">gchar</link>&#160;*<structfield>id</structfield>;</term>
+<listitem><simpara>a unique string ID for the engine.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="gchar">gchar</link>&#160;*<structfield>engine_type</structfield>;</term>
+<listitem><simpara>a string identifying the engine type.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="gchar">gchar</link>&#160;*<structfield>render_type</structfield>;</term>
+<listitem><simpara>a string identifying the render type.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoEngineScriptInfo">PangoEngineScriptInfo</link>&#160;*<structfield>scripts</structfield>;</term>
+<listitem><simpara>array of scripts this engine supports.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>n_scripts</structfield>;</term>
+<listitem><simpara>number of items in <parameter>scripts</parameter>.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoEngineScriptInfo" role="struct">
+<title>PangoEngineScriptInfo</title>
+<indexterm zone="PangoEngineScriptInfo"><primary sortas="PangoEngineScriptInfo">PangoEngineScriptInfo</primary></indexterm><programlisting>typedef struct {
+  PangoScript script;
+  const gchar *langs;
+} PangoEngineScriptInfo;
+</programlisting>
+<para>
+The <link linkend="PangoEngineScriptInfo"><type>PangoEngineScriptInfo</type></link> structure contains
+information about how the shaper covers a particular
+script.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoScript">PangoScript</link>&#160;<structfield>script</structfield>;</term>
+<listitem><simpara>a <link linkend="PangoScript"><type>PangoScript</type></link>. The value <link linkend="PANGO-SCRIPT-COMMON--CAPS"><literal>PANGO_SCRIPT_COMMON</literal></link> has
+        the special meaning here of "all scripts"
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="gchar">gchar</link>&#160;*<structfield>langs</structfield>;</term>
+<listitem><simpara>a semicolon separated list of languages that this
+        engine handles for this script. This may be empty,
+        in which case the engine is saying that it is a
+        fallback choice for all languages for this range,
+        but should not be used if another engine
+        indicates that it is specific for the language for
+        a given code point. An entry in this list of "*"
+        indicates that this engine is specific to all
+        languages for this range.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoEngine-struct" role="struct">
+<title>PangoEngine</title>
+<indexterm zone="PangoEngine-struct"><primary sortas="PangoEngine">PangoEngine</primary></indexterm><programlisting>typedef struct _PangoEngine PangoEngine;</programlisting>
+<para>
+<link linkend="PangoEngine"><type>PangoEngine</type></link> is the base class for all types of language and
+script specific engines. It has no functionality by itself.</para>
+<para>
+</para></refsect2>
+<refsect2 id="PangoEngineClass" role="struct">
+<title>PangoEngineClass</title>
+<indexterm zone="PangoEngineClass"><primary sortas="PangoEngineClass">PangoEngineClass</primary></indexterm><programlisting>typedef struct {
+} PangoEngineClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoEngine"><type>PangoEngine</type></link></para>
+<para>
+</para></refsect2>
+<refsect2 id="PANGO-RENDER-TYPE-NONE--CAPS" role="macro">
+<title>PANGO_RENDER_TYPE_NONE</title>
+<indexterm zone="PANGO-RENDER-TYPE-NONE--CAPS"><primary sortas="PANGO_RENDER_TYPE_NONE">PANGO_RENDER_TYPE_NONE</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_NONE "PangoRenderNone"
+</programlisting>
+<para>
+A string constant defining the render type
+for engines that are not rendering-system
+specific.
+</para></refsect2>
+<refsect2 id="script-engine-list" role="function">
+<title>script_engine_list ()</title>
+<indexterm zone="script-engine-list"><primary sortas="script_engine_list">script_engine_list</primary></indexterm><programlisting><link linkend="void">void</link>                script_engine_list                  (<link linkend="PangoEngineInfo">PangoEngineInfo</link> **engines,
+                                                         <link linkend="int">int</link> *n_engines);</programlisting>
+<para>
+Function to be provided by a module to list the engines that the
+module supplies. The function stores a pointer to an array
+of <link linkend="PangoEngineInfo"><type>PangoEngineInfo</type></link> structures and the length of that array in
+the given location.
+</para>
+<para>
+Note that <link linkend="script-engine-init"><function>script_engine_init()</function></link> will not be called before this
+function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>engines</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of engines.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_engines</parameter>&#160;:</term>
+<listitem><simpara> location to store the number of elements in <parameter>engines</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="script-engine-init" role="function">
+<title>script_engine_init ()</title>
+<indexterm zone="script-engine-init"><primary sortas="script_engine_init">script_engine_init</primary></indexterm><programlisting><link linkend="void">void</link>                script_engine_init                  (<link linkend="GTypeModule">GTypeModule</link> *module);</programlisting>
+<para>
+Function to be provided by a module to register any
+GObject types in the module.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>module</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="GTypeModule"><type>GTypeModule</type></link> structure used to associate any
+ GObject types created in this module with the module.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="script-engine-exit" role="function">
+<title>script_engine_exit ()</title>
+<indexterm zone="script-engine-exit"><primary sortas="script_engine_exit">script_engine_exit</primary></indexterm><programlisting><link linkend="void">void</link>                script_engine_exit                  (void);</programlisting>
+<para>
+Function to be provided by the module that is called
+when the module is unloading. Frequently does nothing.</para>
+<para>
+</para></refsect2>
+<refsect2 id="script-engine-create" role="function">
+<title>script_engine_create ()</title>
+<indexterm zone="script-engine-create"><primary sortas="script_engine_create">script_engine_create</primary></indexterm><programlisting><link linkend="PangoEngine">PangoEngine</link> *       script_engine_create                (const <link linkend="char">char</link> *id);</programlisting>
+<para>
+Function to be provided by the module to create an instance
+of one of the engines implemented by the module.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>id</parameter>&#160;:</term>
+<listitem><simpara> the ID of an engine as reported by script_engine_list.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly created <link linkend="PangoEngine"><type>PangoEngine</type></link> of the specified
+ type, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if an error occurred. (In normal operation,
+ a module should not return <link linkend="NULL--CAPS"><literal>NULL</literal></link>. A <link linkend="NULL--CAPS"><literal>NULL</literal></link> return is only
+ acceptable in the case where system misconfiguration or
+ bugs in the driver routine are encountered.)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/fonts.xml b/docs/xml/fonts.xml
new file mode 100755 (executable)
index 0000000..5b95a0b
--- /dev/null
@@ -0,0 +1,2244 @@
+<refentry id="pango-Fonts">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Fonts.top_of_page">Fonts</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Fonts</refname>
+<refpurpose>Structures representing abstract fonts</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Fonts.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoFont"/><anchor id="PangoFontFamily"/><anchor id="PangoFontFace"/><anchor id="PangoFontMap"/><anchor id="PangoFontset"/><anchor id="PangoFontsetSimple"/>
+<synopsis>
+                    <link linkend="PangoFontDescription">PangoFontDescription</link>;
+#define             <link linkend="PANGO-TYPE-FONT-DESCRIPTION--CAPS">PANGO_TYPE_FONT_DESCRIPTION</link>
+enum                <link linkend="PangoStyle">PangoStyle</link>;
+#define             <link linkend="PANGO-TYPE-STYLE--CAPS">PANGO_TYPE_STYLE</link>
+enum                <link linkend="PangoWeight">PangoWeight</link>;
+#define             <link linkend="PANGO-TYPE-WEIGHT--CAPS">PANGO_TYPE_WEIGHT</link>
+enum                <link linkend="PangoVariant">PangoVariant</link>;
+#define             <link linkend="PANGO-TYPE-VARIANT--CAPS">PANGO_TYPE_VARIANT</link>
+enum                <link linkend="PangoStretch">PangoStretch</link>;
+#define             <link linkend="PANGO-TYPE-STRETCH--CAPS">PANGO_TYPE_STRETCH</link>
+enum                <link linkend="PangoFontMask">PangoFontMask</link>;
+#define             <link linkend="PANGO-TYPE-FONT-MASK--CAPS">PANGO_TYPE_FONT_MASK</link>
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-description-new">pango_font_description_new</link>       (void);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-description-copy">pango_font_description_copy</link>      (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-description-copy-static">pango_font_description_copy_static</link>
+                                                        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="guint">guint</link>               <link linkend="pango-font-description-hash">pango_font_description_hash</link>         (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-font-description-equal">pango_font_description_equal</link>        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc1,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc2);
+<link linkend="void">void</link>                <link linkend="pango-font-description-free">pango_font_description_free</link>         (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-descriptions-free">pango_font_descriptions_free</link>        (<link linkend="PangoFontDescription">PangoFontDescription</link> **descs,
+                                                         <link linkend="int">int</link> n_descs);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-family">pango_font_description_set_family</link>   (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="char">char</link> *family);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-family-static">pango_font_description_set_family_static</link>
+                                                        (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="char">char</link> *family);
+const <link linkend="char">char</link> *        <link linkend="pango-font-description-get-family">pango_font_description_get_family</link>   (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-style">pango_font_description_set_style</link>    (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoStyle">PangoStyle</link> style);
+<link linkend="PangoStyle">PangoStyle</link>          <link linkend="pango-font-description-get-style">pango_font_description_get_style</link>    (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-variant">pango_font_description_set_variant</link>  (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoVariant">PangoVariant</link> variant);
+<link linkend="PangoVariant">PangoVariant</link>        <link linkend="pango-font-description-get-variant">pango_font_description_get_variant</link>  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-weight">pango_font_description_set_weight</link>   (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoWeight">PangoWeight</link> weight);
+<link linkend="PangoWeight">PangoWeight</link>         <link linkend="pango-font-description-get-weight">pango_font_description_get_weight</link>   (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-stretch">pango_font_description_set_stretch</link>  (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoStretch">PangoStretch</link> stretch);
+<link linkend="PangoStretch">PangoStretch</link>        <link linkend="pango-font-description-get-stretch">pango_font_description_get_stretch</link>  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-size">pango_font_description_set_size</link>     (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="gint">gint</link> size);
+<link linkend="gint">gint</link>                <link linkend="pango-font-description-get-size">pango_font_description_get_size</link>     (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-absolute-size">pango_font_description_set_absolute_size</link>
+                                                        (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="double">double</link> size);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-font-description-get-size-is-absolute">pango_font_description_get_size_is_absolute</link>
+                                                        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-set-gravity">pango_font_description_set_gravity</link>  (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoGravity">PangoGravity</link> gravity);
+<link linkend="PangoGravity">PangoGravity</link>        <link linkend="pango-font-description-get-gravity">pango_font_description_get_gravity</link>  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="PangoFontMask">PangoFontMask</link>       <link linkend="pango-font-description-get-set-fields">pango_font_description_get_set_fields</link>
+                                                        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-font-description-unset-fields">pango_font_description_unset_fields</link> (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoFontMask">PangoFontMask</link> to_unset);
+<link linkend="void">void</link>                <link linkend="pango-font-description-merge">pango_font_description_merge</link>        (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc_to_merge,
+                                                         <link linkend="gboolean">gboolean</link> replace_existing);
+<link linkend="void">void</link>                <link linkend="pango-font-description-merge-static">pango_font_description_merge_static</link> (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc_to_merge,
+                                                         <link linkend="gboolean">gboolean</link> replace_existing);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-font-description-better-match">pango_font_description_better_match</link> (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *old_match,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *new_match);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-description-from-string">pango_font_description_from_string</link>
+                                                        (const <link linkend="char">char</link> *str);
+<link linkend="char">char</link> *              <link linkend="pango-font-description-to-string">pango_font_description_to_string</link>    (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="char">char</link> *              <link linkend="pango-font-description-to-filename">pango_font_description_to_filename</link>  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+
+                    <link linkend="PangoFontMetrics">PangoFontMetrics</link>;
+#define             <link linkend="PANGO-TYPE-FONT-METRICS--CAPS">PANGO_TYPE_FONT_METRICS</link>
+<link linkend="PangoFontMetrics">PangoFontMetrics</link> *  <link linkend="pango-font-metrics-ref">pango_font_metrics_ref</link>              (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="void">void</link>                <link linkend="pango-font-metrics-unref">pango_font_metrics_unref</link>            (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-ascent">pango_font_metrics_get_ascent</link>       (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-descent">pango_font_metrics_get_descent</link>      (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-approximate-char-width">pango_font_metrics_get_approximate_char_width</link>
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-approximate-digit-width">pango_font_metrics_get_approximate_digit_width</link>
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-underline-thickness">pango_font_metrics_get_underline_thickness</link>
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-underline-position">pango_font_metrics_get_underline_position</link>
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-strikethrough-thickness">pango_font_metrics_get_strikethrough_thickness</link>
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+<link linkend="int">int</link>                 <link linkend="pango-font-metrics-get-strikethrough-position">pango_font_metrics_get_strikethrough_position</link>
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);
+
+                    <link linkend="PangoFont-struct">PangoFont</link>;
+#define             <link linkend="PANGO-TYPE-FONT--CAPS">PANGO_TYPE_FONT</link>
+#define             <link linkend="PANGO-FONT--CAPS">PANGO_FONT</link>                          (object)
+#define             <link linkend="PANGO-IS-FONT--CAPS">PANGO_IS_FONT</link>                       (object)
+<link linkend="PangoEngineShape">PangoEngineShape</link> *  <link linkend="pango-font-find-shaper">pango_font_find_shaper</link>              (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="guint32">guint32</link> ch);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-describe">pango_font_describe</link>              (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-describe-with-absolute-size">pango_font_describe_with_absolute_size</link>
+                                                        (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="PangoCoverage">PangoCoverage</link> *     <link linkend="pango-font-get-coverage">pango_font_get_coverage</link>             (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="void">void</link>                <link linkend="pango-font-get-glyph-extents">pango_font_get_glyph_extents</link>        (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> glyph,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="PangoFontMetrics">PangoFontMetrics</link> *  <link linkend="pango-font-get-metrics">pango_font_get_metrics</link>              (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-font-get-font-map">pango_font_get_font_map</link>             (<link linkend="PangoFont">PangoFont</link> *font);
+
+                    <link linkend="PangoFontFamily-struct">PangoFontFamily</link>;
+#define             <link linkend="PANGO-TYPE-FONT-FAMILY--CAPS">PANGO_TYPE_FONT_FAMILY</link>
+#define             <link linkend="PANGO-FONT-FAMILY--CAPS">PANGO_FONT_FAMILY</link>                   (object)
+#define             <link linkend="PANGO-IS-FONT-FAMILY--CAPS">PANGO_IS_FONT_FAMILY</link>                (object)
+const <link linkend="char">char</link> *        <link linkend="pango-font-family-get-name">pango_font_family_get_name</link>          (<link linkend="PangoFontFamily">PangoFontFamily</link> *family);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-font-family-is-monospace">pango_font_family_is_monospace</link>      (<link linkend="PangoFontFamily">PangoFontFamily</link> *family);
+<link linkend="void">void</link>                <link linkend="pango-font-family-list-faces">pango_font_family_list_faces</link>        (<link linkend="PangoFontFamily">PangoFontFamily</link> *family,
+                                                         <link linkend="PangoFontFace">PangoFontFace</link> ***faces,
+                                                         <link linkend="int">int</link> *n_faces);
+
+                    <link linkend="PangoFontFace-struct">PangoFontFace</link>;
+#define             <link linkend="PANGO-TYPE-FONT-FACE--CAPS">PANGO_TYPE_FONT_FACE</link>
+#define             <link linkend="PANGO-FONT-FACE--CAPS">PANGO_FONT_FACE</link>                     (object)
+#define             <link linkend="PANGO-IS-FONT-FACE--CAPS">PANGO_IS_FONT_FACE</link>                  (object)
+const <link linkend="char">char</link> *        <link linkend="pango-font-face-get-face-name">pango_font_face_get_face_name</link>       (<link linkend="PangoFontFace">PangoFontFace</link> *face);
+<link linkend="void">void</link>                <link linkend="pango-font-face-list-sizes">pango_font_face_list_sizes</link>          (<link linkend="PangoFontFace">PangoFontFace</link> *face,
+                                                         <link linkend="int">int</link> **sizes,
+                                                         <link linkend="int">int</link> *n_sizes);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-font-face-describe">pango_font_face_describe</link>         (<link linkend="PangoFontFace">PangoFontFace</link> *face);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-font-face-is-synthesized">pango_font_face_is_synthesized</link>      (<link linkend="PangoFontFace">PangoFontFace</link> *face);
+
+                    <link linkend="PangoFontMap-struct">PangoFontMap</link>;
+#define             <link linkend="PANGO-TYPE-FONT-MAP--CAPS">PANGO_TYPE_FONT_MAP</link>
+#define             <link linkend="PANGO-FONT-MAP--CAPS">PANGO_FONT_MAP</link>                      (object)
+#define             <link linkend="PANGO-IS-FONT-MAP--CAPS">PANGO_IS_FONT_MAP</link>                   (object)
+                    <link linkend="PangoFontMapClass">PangoFontMapClass</link>;
+#define             <link linkend="PANGO-FONT-MAP-CLASS--CAPS">PANGO_FONT_MAP_CLASS</link>                (klass)
+#define             <link linkend="PANGO-IS-FONT-MAP-CLASS--CAPS">PANGO_IS_FONT_MAP_CLASS</link>             (klass)
+#define             <link linkend="PANGO-FONT-MAP-GET-CLASS--CAPS">PANGO_FONT_MAP_GET_CLASS</link>            (obj)
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-font-map-create-context">pango_font_map_create_context</link>       (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap);
+<link linkend="PangoFont">PangoFont</link> *         <link linkend="pango-font-map-load-font">pango_font_map_load_font</link>            (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap,
+                                                         <link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="PangoFontset">PangoFontset</link> *      <link linkend="pango-font-map-load-fontset">pango_font_map_load_fontset</link>         (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap,
+                                                         <link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="void">void</link>                <link linkend="pango-font-map-list-families">pango_font_map_list_families</link>        (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap,
+                                                         <link linkend="PangoFontFamily">PangoFontFamily</link> ***families,
+                                                         <link linkend="int">int</link> *n_families);
+const <link linkend="char">char</link> *        <link linkend="pango-font-map-get-shape-engine-type">pango_font_map_get_shape_engine_type</link>
+                                                        (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap);
+
+                    <link linkend="PangoFontset-struct">PangoFontset</link>;
+#define             <link linkend="PANGO-TYPE-FONTSET--CAPS">PANGO_TYPE_FONTSET</link>
+                    <link linkend="PangoFontsetClass">PangoFontsetClass</link>;
+<link linkend="PangoFont">PangoFont</link> *         <link linkend="pango-fontset-get-font">pango_fontset_get_font</link>              (<link linkend="PangoFontset">PangoFontset</link> *fontset,
+                                                         <link linkend="guint">guint</link> wc);
+<link linkend="PangoFontMetrics">PangoFontMetrics</link> *  <link linkend="pango-fontset-get-metrics">pango_fontset_get_metrics</link>           (<link linkend="PangoFontset">PangoFontset</link> *fontset);
+<link linkend="gboolean">gboolean</link>            (<link linkend="PangoFontsetForeachFunc">*PangoFontsetForeachFunc</link>)          (<link linkend="PangoFontset">PangoFontset</link> *fontset,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gpointer">gpointer</link> data);
+<link linkend="void">void</link>                <link linkend="pango-fontset-foreach">pango_fontset_foreach</link>               (<link linkend="PangoFontset">PangoFontset</link> *fontset,
+                                                         <link linkend="PangoFontsetForeachFunc">PangoFontsetForeachFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data);
+                    <link linkend="PangoFontsetSimple-struct">PangoFontsetSimple</link>;
+#define             <link linkend="PANGO-TYPE-FONTSET-SIMPLE--CAPS">PANGO_TYPE_FONTSET_SIMPLE</link>
+<link linkend="PangoFontsetSimple">PangoFontsetSimple</link> * <link linkend="pango-fontset-simple-new">pango_fontset_simple_new</link>           (<link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="void">void</link>                <link linkend="pango-fontset-simple-append">pango_fontset_simple_append</link>         (<link linkend="PangoFontsetSimple">PangoFontsetSimple</link> *fontset,
+                                                         <link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="int">int</link>                 <link linkend="pango-fontset-simple-size">pango_fontset_simple_size</link>           (<link linkend="PangoFontsetSimple">PangoFontsetSimple</link> *fontset);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-Fonts.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoFont
+         +----<link linkend="PangoFcFont">PangoFcFont</link>
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoFontFamily
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoFontFace
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoFontMap
+         +----<link linkend="PangoFcFontMap">PangoFcFontMap</link>
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoFontset
+         +----<link linkend="PangoFontsetSimple">PangoFontsetSimple</link>
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoFontset">PangoFontset</link>
+         +----PangoFontsetSimple
+</synopsis>
+</refsect1>
+
+
+<refsect1 id="pango-Fonts.derived-interfaces" role="derived_interfaces">
+<title role="derived_interfaces.title">Known Derived Interfaces</title>
+<para>
+PangoFont is required by
+ <link linkend="PangoCairoFont">PangoCairoFont</link>.</para>
+<para>
+PangoFontMap is required by
+ <link linkend="PangoCairoFontMap">PangoCairoFontMap</link>.</para>
+</refsect1>
+
+
+
+
+
+
+<refsect1 id="pango-Fonts.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Pango supports a flexible architecture where a
+particular rendering architecture can supply an
+implementation of fonts. The <link linkend="PangoFont"><type>PangoFont</type></link> structure
+represents an abstract rendering-system-independent font.
+Pango provides routines to list available fonts, and
+to load a font of a given description.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Fonts.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoFontDescription" role="struct">
+<title>PangoFontDescription</title>
+<indexterm zone="PangoFontDescription"><primary sortas="PangoFontDescription">PangoFontDescription</primary></indexterm><programlisting>typedef struct _PangoFontDescription PangoFontDescription;</programlisting>
+<para>
+The <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> structure represents the description
+of an ideal font. These structures are used both to list
+what fonts are available on the system and also for specifying
+the characteristics of a font to load.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONT-DESCRIPTION--CAPS" role="macro">
+<title>PANGO_TYPE_FONT_DESCRIPTION</title>
+<indexterm zone="PANGO-TYPE-FONT-DESCRIPTION--CAPS"><primary sortas="PANGO_TYPE_FONT_DESCRIPTION">PANGO_TYPE_FONT_DESCRIPTION</primary></indexterm><programlisting>#define PANGO_TYPE_FONT_DESCRIPTION (pango_font_description_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.
+</para></refsect2>
+<refsect2 id="PangoStyle" role="enum">
+<title>enum PangoStyle</title>
+<indexterm zone="PangoStyle"><primary sortas="PangoStyle">PangoStyle</primary></indexterm><programlisting>typedef enum {
+  PANGO_STYLE_NORMAL,
+  PANGO_STYLE_OBLIQUE,
+  PANGO_STYLE_ITALIC
+} PangoStyle;
+</programlisting>
+<para>
+An enumeration specifying the various slant styles possible for a font.</para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-STYLE-NORMAL--CAPS" role="constant">
+<term><literal>PANGO_STYLE_NORMAL</literal></term>
+<listitem><simpara> the font is upright.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STYLE-OBLIQUE--CAPS" role="constant">
+<term><literal>PANGO_STYLE_OBLIQUE</literal></term>
+<listitem><simpara> the font is slanted, but in a roman style.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STYLE-ITALIC--CAPS" role="constant">
+<term><literal>PANGO_STYLE_ITALIC</literal></term>
+<listitem><simpara> the font is slanted in an italic style.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-STYLE--CAPS" role="macro">
+<title>PANGO_TYPE_STYLE</title>
+<indexterm zone="PANGO-TYPE-STYLE--CAPS"><primary sortas="PANGO_TYPE_STYLE">PANGO_TYPE_STYLE</primary></indexterm><programlisting>#define PANGO_TYPE_STYLE (pango_style_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoStyle"><type>PangoStyle</type></link>.
+</para></refsect2>
+<refsect2 id="PangoWeight" role="enum">
+<title>enum PangoWeight</title>
+<indexterm zone="PangoWeight"><primary sortas="PangoWeight">PangoWeight</primary></indexterm><programlisting>typedef enum {
+  PANGO_WEIGHT_THIN = 100,
+  PANGO_WEIGHT_ULTRALIGHT = 200,
+  PANGO_WEIGHT_LIGHT = 300,
+  PANGO_WEIGHT_BOOK = 380,
+  PANGO_WEIGHT_NORMAL = 400,
+  PANGO_WEIGHT_MEDIUM = 500,
+  PANGO_WEIGHT_SEMIBOLD = 600,
+  PANGO_WEIGHT_BOLD = 700,
+  PANGO_WEIGHT_ULTRABOLD = 800,
+  PANGO_WEIGHT_HEAVY = 900,
+  PANGO_WEIGHT_ULTRAHEAVY = 1000
+} PangoWeight;
+</programlisting>
+<para>
+An enumeration specifying the weight (boldness) of a font. This is a numerical
+value ranging from 100 to 900, but there are some predefined values:
+</para><variablelist role="enum">
+<varlistentry id="PANGO-WEIGHT-THIN--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_THIN</literal></term>
+<listitem><simpara>the thin weight (= 100; Since: 1.24)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-ULTRALIGHT--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_ULTRALIGHT</literal></term>
+<listitem><simpara>the ultralight weight (= 200)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-LIGHT--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_LIGHT</literal></term>
+<listitem><simpara>the light weight (= 300)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-BOOK--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_BOOK</literal></term>
+<listitem><simpara>the book weight (= 380; Since: 1.24)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-NORMAL--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_NORMAL</literal></term>
+<listitem><simpara>the default weight (= 400)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-MEDIUM--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_MEDIUM</literal></term>
+<listitem><simpara>the normal weight (= 500; Since: 1.24)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-SEMIBOLD--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_SEMIBOLD</literal></term>
+<listitem><simpara>the semibold weight (= 600)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-BOLD--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_BOLD</literal></term>
+<listitem><simpara>the bold weight (= 700)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-ULTRABOLD--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_ULTRABOLD</literal></term>
+<listitem><simpara>the ultrabold weight (= 800)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-HEAVY--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_HEAVY</literal></term>
+<listitem><simpara>the heavy weight (= 900)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WEIGHT-ULTRAHEAVY--CAPS" role="constant">
+<term><literal>PANGO_WEIGHT_ULTRAHEAVY</literal></term>
+<listitem><simpara>the ultraheavy weight (= 1000; Since: 1.24)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-WEIGHT--CAPS" role="macro">
+<title>PANGO_TYPE_WEIGHT</title>
+<indexterm zone="PANGO-TYPE-WEIGHT--CAPS"><primary sortas="PANGO_TYPE_WEIGHT">PANGO_TYPE_WEIGHT</primary></indexterm><programlisting>#define PANGO_TYPE_WEIGHT (pango_weight_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoWeight"><type>PangoWeight</type></link>.
+</para></refsect2>
+<refsect2 id="PangoVariant" role="enum">
+<title>enum PangoVariant</title>
+<indexterm zone="PangoVariant"><primary sortas="PangoVariant">PangoVariant</primary></indexterm><programlisting>typedef enum {
+  PANGO_VARIANT_NORMAL,
+  PANGO_VARIANT_SMALL_CAPS
+} PangoVariant;
+</programlisting>
+<para>
+An enumeration specifying capitalization variant of the font.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-VARIANT-NORMAL--CAPS" role="constant">
+<term><literal>PANGO_VARIANT_NORMAL</literal></term>
+<listitem><simpara>A normal font.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-VARIANT-SMALL-CAPS--CAPS" role="constant">
+<term><literal>PANGO_VARIANT_SMALL_CAPS</literal></term>
+<listitem><simpara>A font with the lower case characters
+  replaced by smaller variants of the capital characters.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-VARIANT--CAPS" role="macro">
+<title>PANGO_TYPE_VARIANT</title>
+<indexterm zone="PANGO-TYPE-VARIANT--CAPS"><primary sortas="PANGO_TYPE_VARIANT">PANGO_TYPE_VARIANT</primary></indexterm><programlisting>#define PANGO_TYPE_VARIANT (pango_variant_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoVariant"><type>PangoVariant</type></link>.
+</para></refsect2>
+<refsect2 id="PangoStretch" role="enum">
+<title>enum PangoStretch</title>
+<indexterm zone="PangoStretch"><primary sortas="PangoStretch">PangoStretch</primary></indexterm><programlisting>typedef enum {
+  PANGO_STRETCH_ULTRA_CONDENSED,
+  PANGO_STRETCH_EXTRA_CONDENSED,
+  PANGO_STRETCH_CONDENSED,
+  PANGO_STRETCH_SEMI_CONDENSED,
+  PANGO_STRETCH_NORMAL,
+  PANGO_STRETCH_SEMI_EXPANDED,
+  PANGO_STRETCH_EXPANDED,
+  PANGO_STRETCH_EXTRA_EXPANDED,
+  PANGO_STRETCH_ULTRA_EXPANDED
+} PangoStretch;
+</programlisting>
+<para>
+An enumeration specifying the width of the font relative to other designs
+within a family.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-STRETCH-ULTRA-CONDENSED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_ULTRA_CONDENSED</literal></term>
+<listitem><simpara>ultra condensed width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-EXTRA-CONDENSED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_EXTRA_CONDENSED</literal></term>
+<listitem><simpara>extra condensed width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-CONDENSED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_CONDENSED</literal></term>
+<listitem><simpara>condensed width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-SEMI-CONDENSED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_SEMI_CONDENSED</literal></term>
+<listitem><simpara>semi condensed width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-NORMAL--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_NORMAL</literal></term>
+<listitem><simpara>the normal width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-SEMI-EXPANDED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_SEMI_EXPANDED</literal></term>
+<listitem><simpara>semi expanded width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-EXPANDED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_EXPANDED</literal></term>
+<listitem><simpara>expanded width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-EXTRA-EXPANDED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_EXTRA_EXPANDED</literal></term>
+<listitem><simpara>extra expanded width
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-STRETCH-ULTRA-EXPANDED--CAPS" role="constant">
+<term><literal>PANGO_STRETCH_ULTRA_EXPANDED</literal></term>
+<listitem><simpara>ultra expanded width
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-STRETCH--CAPS" role="macro">
+<title>PANGO_TYPE_STRETCH</title>
+<indexterm zone="PANGO-TYPE-STRETCH--CAPS"><primary sortas="PANGO_TYPE_STRETCH">PANGO_TYPE_STRETCH</primary></indexterm><programlisting>#define PANGO_TYPE_STRETCH (pango_stretch_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoStretch"><type>PangoStretch</type></link>.
+</para></refsect2>
+<refsect2 id="PangoFontMask" role="enum">
+<title>enum PangoFontMask</title>
+<indexterm zone="PangoFontMask"><primary sortas="PangoFontMask">PangoFontMask</primary></indexterm><programlisting>typedef enum {
+  PANGO_FONT_MASK_FAMILY  = 1 &lt;&lt; 0,
+  PANGO_FONT_MASK_STYLE   = 1 &lt;&lt; 1,
+  PANGO_FONT_MASK_VARIANT = 1 &lt;&lt; 2,
+  PANGO_FONT_MASK_WEIGHT  = 1 &lt;&lt; 3,
+  PANGO_FONT_MASK_STRETCH = 1 &lt;&lt; 4,
+  PANGO_FONT_MASK_SIZE    = 1 &lt;&lt; 5,
+  PANGO_FONT_MASK_GRAVITY = 1 &lt;&lt; 6
+} PangoFontMask;
+</programlisting>
+<para>
+The bits in a <link linkend="PangoFontMask"><type>PangoFontMask</type></link> correspond to fields in a
+<link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> that have been set.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-FONT-MASK-FAMILY--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_FAMILY</literal></term>
+<listitem><simpara>the font family is specified.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-FONT-MASK-STYLE--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_STYLE</literal></term>
+<listitem><simpara>the font style is specified.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-FONT-MASK-VARIANT--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_VARIANT</literal></term>
+<listitem><simpara>the font variant is specified.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-FONT-MASK-WEIGHT--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_WEIGHT</literal></term>
+<listitem><simpara>the font weight is specified.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-FONT-MASK-STRETCH--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_STRETCH</literal></term>
+<listitem><simpara>the font stretch is specified.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-FONT-MASK-SIZE--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_SIZE</literal></term>
+<listitem><simpara>the font size is specified.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-FONT-MASK-GRAVITY--CAPS" role="constant">
+<term><literal>PANGO_FONT_MASK_GRAVITY</literal></term>
+<listitem><simpara>the font gravity is specified (Since: 1.16.)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-FONT-MASK--CAPS" role="macro">
+<title>PANGO_TYPE_FONT_MASK</title>
+<indexterm zone="PANGO-TYPE-FONT-MASK--CAPS"><primary sortas="PANGO_TYPE_FONT_MASK">PANGO_TYPE_FONT_MASK</primary></indexterm><programlisting>#define PANGO_TYPE_FONT_MASK (pango_font_mask_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontMask"><type>PangoFontMask</type></link>.
+</para></refsect2>
+<refsect2 id="pango-font-description-new" role="function">
+<title>pango_font_description_new ()</title>
+<indexterm zone="pango-font-description-new"><primary sortas="pango_font_description_new">pango_font_description_new</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_description_new       (void);</programlisting>
+<para>
+Creates a new font description structure with all fields unset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, which
+              should be freed using <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-copy" role="function">
+<title>pango_font_description_copy ()</title>
+<indexterm zone="pango-font-description-copy"><primary sortas="pango_font_description_copy">pango_font_description_copy</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_description_copy      (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Make a copy of a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, which should
+              be freed with <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if <parameter>desc</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-copy-static" role="function">
+<title>pango_font_description_copy_static ()</title>
+<indexterm zone="pango-font-description-copy-static"><primary sortas="pango_font_description_copy_static">pango_font_description_copy_static</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_description_copy_static
+                                                        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Like <link linkend="pango-font-description-copy"><function>pango_font_description_copy()</function></link>, but only a shallow copy is made
+of the family name and other allocated fields. The result can only
+be used until <parameter>desc</parameter> is modified or freed. This is meant to be used
+when the copy is only needed temporarily.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, which should
+              be freed with <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if <parameter>desc</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-hash" role="function">
+<title>pango_font_description_hash ()</title>
+<indexterm zone="pango-font-description-hash"><primary sortas="pango_font_description_hash">pango_font_description_hash</primary></indexterm><programlisting><link linkend="guint">guint</link>               pango_font_description_hash         (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Computes a hash of a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> structure suitable
+to be used, for example, as an argument to <link linkend="g-hash-table-new"><function>g_hash_table_new()</function></link>.
+The hash value is independent of <parameter>desc->mask</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the hash value.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-equal" role="function">
+<title>pango_font_description_equal ()</title>
+<indexterm zone="pango-font-description-equal"><primary sortas="pango_font_description_equal">pango_font_description_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_font_description_equal        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc1,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc2);</programlisting>
+<para>
+Compares two font descriptions for equality. Two font descriptions
+are considered equal if the fonts they describe are provably identical.
+This means that their masks do not have to match, as long as other fields
+are all the same. (Two font descriptions may result in identical fonts
+being loaded, but still compare <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc1</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc2</parameter>&#160;:</term>
+<listitem><simpara> another <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the two font descriptions are identical,
+        <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-free" role="function">
+<title>pango_font_description_free ()</title>
+<indexterm zone="pango-font-description-free"><primary sortas="pango_font_description_free">pango_font_description_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_free         (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Frees a font description.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-descriptions-free" role="function">
+<title>pango_font_descriptions_free ()</title>
+<indexterm zone="pango-font-descriptions-free"><primary sortas="pango_font_descriptions_free">pango_font_descriptions_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_descriptions_free        (<link linkend="PangoFontDescription">PangoFontDescription</link> **descs,
+                                                         <link linkend="int">int</link> n_descs);</programlisting>
+<para>
+Frees an array of font descriptions.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>descs</parameter>&#160;:</term>
+<listitem><simpara> a pointer to an array of <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_descs</parameter>&#160;:</term>
+<listitem><simpara> number of font descriptions in <parameter>descs</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-family" role="function">
+<title>pango_font_description_set_family ()</title>
+<indexterm zone="pango-font-description-set-family"><primary sortas="pango_font_description_set_family">pango_font_description_set_family</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_family   (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="char">char</link> *family);</programlisting>
+<para>
+Sets the family name field of a font description. The family
+name represents a family of related font styles, and will
+resolve to a particular <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>. In some uses of
+<link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, it is also possible to use a comma
+separated list of family names for this field.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>family</parameter>&#160;:</term>
+<listitem><simpara> a string representing the family name.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-family-static" role="function">
+<title>pango_font_description_set_family_static ()</title>
+<indexterm zone="pango-font-description-set-family-static"><primary sortas="pango_font_description_set_family_static">pango_font_description_set_family_static</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_family_static
+                                                        (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="char">char</link> *family);</programlisting>
+<para>
+Like <link linkend="pango-font-description-set-family"><function>pango_font_description_set_family()</function></link>, except that no
+copy of <parameter>family</parameter> is made. The caller must make sure that the
+string passed in stays around until <parameter>desc</parameter> has been freed
+or the name is set again. This function can be used if
+<parameter>family</parameter> is a static string such as a C string literal, or
+if <parameter>desc</parameter> is only needed temporarily.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>family</parameter>&#160;:</term>
+<listitem><simpara> a string representing the family name.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-get-family" role="function">
+<title>pango_font_description_get_family ()</title>
+<indexterm zone="pango-font-description-get-family"><primary sortas="pango_font_description_get_family">pango_font_description_get_family</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_font_description_get_family   (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the family name field of a font description. See
+<link linkend="pango-font-description-set-family"><function>pango_font_description_set_family()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the family name field for the font description, or
+              <link linkend="NULL--CAPS"><literal>NULL</literal></link> if not previously set.  This has the same life-time
+              as the font description itself and should not be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-style" role="function">
+<title>pango_font_description_set_style ()</title>
+<indexterm zone="pango-font-description-set-style"><primary sortas="pango_font_description_set_style">pango_font_description_set_style</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_style    (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoStyle">PangoStyle</link> style);</programlisting>
+<para>
+Sets the style field of a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>. The
+<link linkend="PangoStyle"><type>PangoStyle</type></link> enumeration describes whether the font is slanted and
+the manner in which it is slanted; it can be either
+<link linkend="PANGO-STYLE-NORMAL--CAPS"><type>PANGO_STYLE_NORMAL</type></link>, <link linkend="PANGO-STYLE-ITALIC--CAPS"><type>PANGO_STYLE_ITALIC</type></link>, or <link linkend="PANGO-STYLE-OBLIQUE--CAPS"><type>PANGO_STYLE_OBLIQUE</type></link>.
+Most fonts will either have a italic style or an oblique
+style, but not both, and font matching in Pango will
+match italic specifications with oblique fonts and vice-versa
+if an exact match is not found.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>style</parameter>&#160;:</term>
+<listitem><simpara> the style for the font description
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-get-style" role="function">
+<title>pango_font_description_get_style ()</title>
+<indexterm zone="pango-font-description-get-style"><primary sortas="pango_font_description_get_style">pango_font_description_get_style</primary></indexterm><programlisting><link linkend="PangoStyle">PangoStyle</link>          pango_font_description_get_style    (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the style field of a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>. See
+<link linkend="pango-font-description-set-style"><function>pango_font_description_set_style()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the style field for the font description.
+  Use <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to find out if
+  the field was explicitly set or not.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-variant" role="function">
+<title>pango_font_description_set_variant ()</title>
+<indexterm zone="pango-font-description-set-variant"><primary sortas="pango_font_description_set_variant">pango_font_description_set_variant</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_variant  (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoVariant">PangoVariant</link> variant);</programlisting>
+<para>
+Sets the variant field of a font description. The <link linkend="PangoVariant"><type>PangoVariant</type></link>
+can either be <link linkend="PANGO-VARIANT-NORMAL--CAPS"><literal>PANGO_VARIANT_NORMAL</literal></link> or <link linkend="PANGO-VARIANT-SMALL-CAPS--CAPS"><literal>PANGO_VARIANT_SMALL_CAPS</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>variant</parameter>&#160;:</term>
+<listitem><simpara> the variant type for the font description.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-get-variant" role="function">
+<title>pango_font_description_get_variant ()</title>
+<indexterm zone="pango-font-description-get-variant"><primary sortas="pango_font_description_get_variant">pango_font_description_get_variant</primary></indexterm><programlisting><link linkend="PangoVariant">PangoVariant</link>        pango_font_description_get_variant  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the variant field of a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>. See
+<link linkend="pango-font-description-set-variant"><function>pango_font_description_set_variant()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the variant field for the font description. Use
+  <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to find out if
+  the field was explicitly set or not.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-weight" role="function">
+<title>pango_font_description_set_weight ()</title>
+<indexterm zone="pango-font-description-set-weight"><primary sortas="pango_font_description_set_weight">pango_font_description_set_weight</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_weight   (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoWeight">PangoWeight</link> weight);</programlisting>
+<para>
+Sets the weight field of a font description. The weight field
+specifies how bold or light the font should be. In addition
+to the values of the <link linkend="PangoWeight"><type>PangoWeight</type></link> enumeration, other intermediate
+numeric values are possible.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>weight</parameter>&#160;:</term>
+<listitem><simpara> the weight for the font description.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-get-weight" role="function">
+<title>pango_font_description_get_weight ()</title>
+<indexterm zone="pango-font-description-get-weight"><primary sortas="pango_font_description_get_weight">pango_font_description_get_weight</primary></indexterm><programlisting><link linkend="PangoWeight">PangoWeight</link>         pango_font_description_get_weight   (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the weight field of a font description. See
+<link linkend="pango-font-description-set-weight"><function>pango_font_description_set_weight()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the weight field for the font description. Use
+  <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to find out if
+  the field was explicitly set or not.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-stretch" role="function">
+<title>pango_font_description_set_stretch ()</title>
+<indexterm zone="pango-font-description-set-stretch"><primary sortas="pango_font_description_set_stretch">pango_font_description_set_stretch</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_stretch  (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoStretch">PangoStretch</link> stretch);</programlisting>
+<para>
+Sets the stretch field of a font description. The stretch field
+specifies how narrow or wide the font should be.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>stretch</parameter>&#160;:</term>
+<listitem><simpara> the stretch for the font description
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-get-stretch" role="function">
+<title>pango_font_description_get_stretch ()</title>
+<indexterm zone="pango-font-description-get-stretch"><primary sortas="pango_font_description_get_stretch">pango_font_description_get_stretch</primary></indexterm><programlisting><link linkend="PangoStretch">PangoStretch</link>        pango_font_description_get_stretch  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the stretch field of a font description.
+See <link linkend="pango-font-description-set-stretch"><function>pango_font_description_set_stretch()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the stretch field for the font description. Use
+  <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to find out if
+  the field was explicitly set or not.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-size" role="function">
+<title>pango_font_description_set_size ()</title>
+<indexterm zone="pango-font-description-set-size"><primary sortas="pango_font_description_set_size">pango_font_description_set_size</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_size     (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="gint">gint</link> size);</programlisting>
+<para>
+Sets the size field of a font description in fractional points. This is mutually
+exclusive with <link linkend="pango-font-description-set-absolute-size"><function>pango_font_description_set_absolute_size()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>size</parameter>&#160;:</term>
+<listitem><simpara> the size of the font in points, scaled by PANGO_SCALE. (That is,
+       a <parameter>size</parameter> value of 10 * PANGO_SCALE is a 10 point font. The conversion
+       factor between points and device units depends on system configuration
+       and the output device. For screen display, a logical DPI of 96 is
+       common, in which case a 10 point font corresponds to a 10 * (96 / 72) = 13.3
+       pixel font. Use <link linkend="pango-font-description-set-absolute-size"><function>pango_font_description_set_absolute_size()</function></link> if you need
+       a particular size in device units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-get-size" role="function">
+<title>pango_font_description_get_size ()</title>
+<indexterm zone="pango-font-description-get-size"><primary sortas="pango_font_description_get_size">pango_font_description_get_size</primary></indexterm><programlisting><link linkend="gint">gint</link>                pango_font_description_get_size     (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the size field of a font description.
+See <link linkend="pango-font-description-set-size"><function>pango_font_description_set_size()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the size field for the font description in points or device units.
+  You must call <link linkend="pango-font-description-get-size-is-absolute"><function>pango_font_description_get_size_is_absolute()</function></link>
+  to find out which is the case. Returns 0 if the size field has not
+  previously been set or it has been set to 0 explicitly.
+  Use <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to
+  find out if the field was explicitly set or not.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-set-absolute-size" role="function" condition="since:1.8">
+<title>pango_font_description_set_absolute_size ()</title>
+<indexterm zone="pango-font-description-set-absolute-size" role="1.8"><primary sortas="pango_font_description_set_absolute_size">pango_font_description_set_absolute_size</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_absolute_size
+                                                        (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="double">double</link> size);</programlisting>
+<para>
+Sets the size field of a font description, in device units. This is mutually
+exclusive with <link linkend="pango-font-description-set-size"><function>pango_font_description_set_size()</function></link> which sets the font size
+in points.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>size</parameter>&#160;:</term>
+<listitem><simpara> the new size, in Pango units. There are <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> Pango units in one
+  device unit. For an output backend where a device unit is a pixel, a <parameter>size</parameter>
+  value of 10 * PANGO_SCALE gives a 10 pixel font.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-font-description-get-size-is-absolute" role="function" condition="since:1.8">
+<title>pango_font_description_get_size_is_absolute ()</title>
+<indexterm zone="pango-font-description-get-size-is-absolute" role="1.8"><primary sortas="pango_font_description_get_size_is_absolute">pango_font_description_get_size_is_absolute</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_font_description_get_size_is_absolute
+                                                        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Determines whether the size of the font is in points (not absolute) or device units (absolute).
+See <link linkend="pango-font-description-set-size"><function>pango_font_description_set_size()</function></link> and <link linkend="pango-font-description-set-absolute-size"><function>pango_font_description_set_absolute_size()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether the size for the font description is in
+  points or device units.  Use <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to
+  find out if the size field of the font description was explicitly set or not.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-font-description-set-gravity" role="function" condition="since:1.16">
+<title>pango_font_description_set_gravity ()</title>
+<indexterm zone="pango-font-description-set-gravity" role="1.16"><primary sortas="pango_font_description_set_gravity">pango_font_description_set_gravity</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_set_gravity  (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoGravity">PangoGravity</link> gravity);</programlisting>
+<para>
+Sets the gravity field of a font description. The gravity field
+specifies how the glyphs should be rotated.  If <parameter>gravity</parameter> is
+<link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>, this actually unsets the gravity mask on
+the font description.
+</para>
+<para>
+This function is seldom useful to the user.  Gravity should normally
+be set on a <link linkend="PangoContext"><type>PangoContext</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>gravity</parameter>&#160;:</term>
+<listitem><simpara> the gravity for the font description.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-font-description-get-gravity" role="function" condition="since:1.16">
+<title>pango_font_description_get_gravity ()</title>
+<indexterm zone="pango-font-description-get-gravity" role="1.16"><primary sortas="pango_font_description_get_gravity">pango_font_description_get_gravity</primary></indexterm><programlisting><link linkend="PangoGravity">PangoGravity</link>        pango_font_description_get_gravity  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Gets the gravity field of a font description. See
+<link linkend="pango-font-description-set-gravity"><function>pango_font_description_set_gravity()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the gravity field for the font description. Use
+  <link linkend="pango-font-description-get-set-fields"><function>pango_font_description_get_set_fields()</function></link> to find out if
+  the field was explicitly set or not.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-font-description-get-set-fields" role="function">
+<title>pango_font_description_get_set_fields ()</title>
+<indexterm zone="pango-font-description-get-set-fields"><primary sortas="pango_font_description_get_set_fields">pango_font_description_get_set_fields</primary></indexterm><programlisting><link linkend="PangoFontMask">PangoFontMask</link>       pango_font_description_get_set_fields
+                                                        (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Determines which fields in a font description have been set.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a bitmask with bits set corresponding to the
+  fields in <parameter>desc</parameter> that have been set.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-unset-fields" role="function">
+<title>pango_font_description_unset_fields ()</title>
+<indexterm zone="pango-font-description-unset-fields"><primary sortas="pango_font_description_unset_fields">pango_font_description_unset_fields</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_unset_fields (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoFontMask">PangoFontMask</link> to_unset);</programlisting>
+<para>
+Unsets some of the fields in a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.  The unset
+fields will get back to their default values.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>to_unset</parameter>&#160;:</term>
+<listitem><simpara> bitmask of fields in the <parameter>desc</parameter> to unset.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-merge" role="function">
+<title>pango_font_description_merge ()</title>
+<indexterm zone="pango-font-description-merge"><primary sortas="pango_font_description_merge">pango_font_description_merge</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_merge        (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc_to_merge,
+                                                         <link linkend="gboolean">gboolean</link> replace_existing);</programlisting>
+<para>
+Merges the fields that are set in <parameter>desc_to_merge</parameter> into the fields in
+<parameter>desc</parameter>.  If <parameter>replace_existing</parameter> is <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>, only fields in <parameter>desc</parameter> that
+are not already set are affected. If <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, then fields that are
+already set will be replaced as well.
+</para>
+<para>
+If <parameter>desc_to_merge</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, this function performs nothing.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc_to_merge</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> to merge from, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>replace_existing</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, replace fields in <parameter>desc</parameter> with the
+  corresponding values from <parameter>desc_to_merge</parameter>, even if they
+  are already exist.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-merge-static" role="function">
+<title>pango_font_description_merge_static ()</title>
+<indexterm zone="pango-font-description-merge-static"><primary sortas="pango_font_description_merge_static">pango_font_description_merge_static</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_description_merge_static (<link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc_to_merge,
+                                                         <link linkend="gboolean">gboolean</link> replace_existing);</programlisting>
+<para>
+Like <link linkend="pango-font-description-merge"><function>pango_font_description_merge()</function></link>, but only a shallow copy is made
+of the family name and other allocated fields. <parameter>desc</parameter> can only be
+used until <parameter>desc_to_merge</parameter> is modified or freed. This is meant
+to be used when the merged font description is only needed temporarily.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc_to_merge</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> to merge from
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>replace_existing</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, replace fields in <parameter>desc</parameter> with the
+  corresponding values from <parameter>desc_to_merge</parameter>, even if they
+  are already exist.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-better-match" role="function">
+<title>pango_font_description_better_match ()</title>
+<indexterm zone="pango-font-description-better-match"><primary sortas="pango_font_description_better_match">pango_font_description_better_match</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_font_description_better_match (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *old_match,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *new_match);</programlisting>
+<para>
+Determines if the style attributes of <parameter>new_match</parameter> are a closer match
+for <parameter>desc</parameter> than those of <parameter>old_match</parameter> are, or if <parameter>old_match</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>,
+determines if <parameter>new_match</parameter> is a match at all.
+Approximate matching is done for
+weight and style; other style attributes must match exactly.
+Style attributes are all attributes other than family and size-related
+attributes.  Approximate matching for style considers PANGO_STYLE_OBLIQUE
+and PANGO_STYLE_ITALIC as matches, but not as good a match as when the
+styles are equal.
+</para>
+<para>
+Note that <parameter>old_match</parameter> must match <parameter>desc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>old_match</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>new_match</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>new_match</parameter> is a better match
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-from-string" role="function">
+<title>pango_font_description_from_string ()</title>
+<indexterm zone="pango-font-description-from-string"><primary sortas="pango_font_description_from_string">pango_font_description_from_string</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_description_from_string
+                                                        (const <link linkend="char">char</link> *str);</programlisting>
+<para>
+Creates a new font description from a string representation in the
+form "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]", where FAMILY-LIST is a
+comma separated list of families optionally terminated by a comma,
+STYLE_OPTIONS is a whitespace separated list of words where each WORD
+describes one of style, variant, weight, stretch, or gravity, and SIZE
+is a decimal number (size in points) or optionally followed by the
+unit modifier "px" for absolute size. Any one of the options may
+be absent.  If FAMILY-LIST is absent, then the family_name field of
+the resulting font description will be initialized to <link linkend="NULL--CAPS"><literal>NULL</literal></link>.  If
+STYLE-OPTIONS is missing, then all style options will be set to the
+default values. If SIZE is missing, the size in the resulting font
+description will be set to 0.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> string representation of a font description.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-to-string" role="function">
+<title>pango_font_description_to_string ()</title>
+<indexterm zone="pango-font-description-to-string"><primary sortas="pango_font_description_to_string">pango_font_description_to_string</primary></indexterm><programlisting><link linkend="char">char</link> *              pango_font_description_to_string    (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Creates a string representation of a font description. See
+<link linkend="pango-font-description-from-string"><function>pango_font_description_from_string()</function></link> for a description of the
+format of the string representation. The family list in the
+string description will only have a terminating comma if the
+last word of the list is a valid style option.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new string that must be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-description-to-filename" role="function">
+<title>pango_font_description_to_filename ()</title>
+<indexterm zone="pango-font-description-to-filename"><primary sortas="pango_font_description_to_filename">pango_font_description_to_filename</primary></indexterm><programlisting><link linkend="char">char</link> *              pango_font_description_to_filename  (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Creates a filename representation of a font description. The
+filename is identical to the result from calling
+<link linkend="pango-font-description-to-string"><function>pango_font_description_to_string()</function></link>, but with underscores instead of
+characters that are untypical in filenames, and in lower case only.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new string that must be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoFontMetrics" role="struct">
+<title>PangoFontMetrics</title>
+<indexterm zone="PangoFontMetrics"><primary sortas="PangoFontMetrics">PangoFontMetrics</primary></indexterm><programlisting>typedef struct {
+  guint ref_count;
+
+  int ascent;
+  int descent;
+  int approximate_char_width;
+  int approximate_digit_width;
+  int underline_position;
+  int underline_thickness;
+  int strikethrough_position;
+  int strikethrough_thickness;
+} PangoFontMetrics;
+</programlisting>
+<para>
+A <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure holds the overall metric information
+for a font (possibly restricted to a script). The fields of this
+structure are private to implementations of a font backend. See
+the documentation of the corresponding getters for documentation
+of their meaning.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>ref_count</structfield>;</term>
+<listitem><simpara>reference count.  Used internally.  See <link linkend="pango-font-metrics-ref"><function>pango_font_metrics_ref()</function></link>
+            and <link linkend="pango-font-metrics-unref"><function>pango_font_metrics_unref()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>ascent</structfield>;</term>
+<listitem><simpara>the distance from the baseline to the highest point of the glyphs of
+        the font. This is positive in practically all fonts.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>descent</structfield>;</term>
+<listitem><simpara>the distance from the baseline to the lowest point of the glyphs of
+        the font. This is positive in practically all fonts.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>approximate_char_width</structfield>;</term>
+<listitem><simpara>approximate average width of the regular glyphs of
+         the font.  Note that for this calculation, East Asian characters
+        (those passing <link linkend="g-unichar-iswide"><function>g_unichar_iswide()</function></link>) are counted as double-width.
+        This produces a more uniform value for this measure across languages
+        and results in more uniform and more expected UI sizes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>approximate_digit_width</structfield>;</term>
+<listitem><simpara>approximate average width of the glyphs for digits
+         of the font.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>underline_position</structfield>;</term>
+<listitem><simpara>position of the underline. This is normally negative.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>underline_thickness</structfield>;</term>
+<listitem><simpara>thickness of the underline.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>strikethrough_position</structfield>;</term>
+<listitem><simpara>position of the strikethrough line. This is
+        normally positive.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>strikethrough_thickness</structfield>;</term>
+<listitem><simpara>thickness of the strikethrough line.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-FONT-METRICS--CAPS" role="macro">
+<title>PANGO_TYPE_FONT_METRICS</title>
+<indexterm zone="PANGO-TYPE-FONT-METRICS--CAPS"><primary sortas="PANGO_TYPE_FONT_METRICS">PANGO_TYPE_FONT_METRICS</primary></indexterm><programlisting>#define PANGO_TYPE_FONT_METRICS  (pango_font_metrics_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link>.
+</para></refsect2>
+<refsect2 id="pango-font-metrics-ref" role="function">
+<title>pango_font_metrics_ref ()</title>
+<indexterm zone="pango-font-metrics-ref"><primary sortas="pango_font_metrics_ref">pango_font_metrics_ref</primary></indexterm><programlisting><link linkend="PangoFontMetrics">PangoFontMetrics</link> *  pango_font_metrics_ref              (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Increase the reference count of a font metrics structure by one.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <parameter>metrics</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-metrics-unref" role="function">
+<title>pango_font_metrics_unref ()</title>
+<indexterm zone="pango-font-metrics-unref"><primary sortas="pango_font_metrics_unref">pango_font_metrics_unref</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_metrics_unref            (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Decrease the reference count of a font metrics structure by one. If
+the result is zero, frees the structure and any associated
+memory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-metrics-get-ascent" role="function">
+<title>pango_font_metrics_get_ascent ()</title>
+<indexterm zone="pango-font-metrics-get-ascent"><primary sortas="pango_font_metrics_get_ascent">pango_font_metrics_get_ascent</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_ascent       (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the ascent from a font metrics structure. The ascent is
+the distance from the baseline to the logical top of a line
+of text. (The logical top may be above or below the top of the
+actual drawn ink. It is necessary to lay out the text to figure
+where the ink will be.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the ascent, in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-metrics-get-descent" role="function">
+<title>pango_font_metrics_get_descent ()</title>
+<indexterm zone="pango-font-metrics-get-descent"><primary sortas="pango_font_metrics_get_descent">pango_font_metrics_get_descent</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_descent      (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the descent from a font metrics structure. The descent is
+the distance from the baseline to the logical bottom of a line
+of text. (The logical bottom may be above or below the bottom of the
+actual drawn ink. It is necessary to lay out the text to figure
+where the ink will be.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the descent, in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-metrics-get-approximate-char-width" role="function">
+<title>pango_font_metrics_get_approximate_char_width ()</title>
+<indexterm zone="pango-font-metrics-get-approximate-char-width"><primary sortas="pango_font_metrics_get_approximate_char_width">pango_font_metrics_get_approximate_char_width</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_approximate_char_width
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the approximate character width for a font metrics structure.
+This is merely a representative value useful, for example, for
+determining the initial size for a window. Actual characters in
+text will be wider and narrower than this.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the character width, in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-metrics-get-approximate-digit-width" role="function">
+<title>pango_font_metrics_get_approximate_digit_width ()</title>
+<indexterm zone="pango-font-metrics-get-approximate-digit-width"><primary sortas="pango_font_metrics_get_approximate_digit_width">pango_font_metrics_get_approximate_digit_width</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_approximate_digit_width
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the approximate digit width for a font metrics structure.
+This is merely a representative value useful, for example, for
+determining the initial size for a window. Actual digits in
+text can be wider or narrower than this, though this value
+is generally somewhat more accurate than the result of
+<link linkend="pango-font-metrics-get-approximate-char-width"><function>pango_font_metrics_get_approximate_char_width()</function></link> for digits.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the digit width, in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-metrics-get-underline-thickness" role="function" condition="since:1.6">
+<title>pango_font_metrics_get_underline_thickness ()</title>
+<indexterm zone="pango-font-metrics-get-underline-thickness" role="1.6"><primary sortas="pango_font_metrics_get_underline_thickness">pango_font_metrics_get_underline_thickness</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_underline_thickness
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the suggested thickness to draw for the underline.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the suggested underline thickness, in Pango units.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-font-metrics-get-underline-position" role="function" condition="since:1.6">
+<title>pango_font_metrics_get_underline_position ()</title>
+<indexterm zone="pango-font-metrics-get-underline-position" role="1.6"><primary sortas="pango_font_metrics_get_underline_position">pango_font_metrics_get_underline_position</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_underline_position
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the suggested position to draw the underline.
+The value returned is the distance <emphasis>above</emphasis> the
+baseline of the top of the underline. Since most fonts have
+underline positions beneath the baseline, this value is typically
+negative.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the suggested underline position, in Pango units.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-font-metrics-get-strikethrough-thickness" role="function" condition="since:1.6">
+<title>pango_font_metrics_get_strikethrough_thickness ()</title>
+<indexterm zone="pango-font-metrics-get-strikethrough-thickness" role="1.6"><primary sortas="pango_font_metrics_get_strikethrough_thickness">pango_font_metrics_get_strikethrough_thickness</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_strikethrough_thickness
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the suggested thickness to draw for the strikethrough.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the suggested strikethrough thickness, in Pango units.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-font-metrics-get-strikethrough-position" role="function" condition="since:1.6">
+<title>pango_font_metrics_get_strikethrough_position ()</title>
+<indexterm zone="pango-font-metrics-get-strikethrough-position" role="1.6"><primary sortas="pango_font_metrics_get_strikethrough_position">pango_font_metrics_get_strikethrough_position</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_font_metrics_get_strikethrough_position
+                                                        (<link linkend="PangoFontMetrics">PangoFontMetrics</link> *metrics);</programlisting>
+<para>
+Gets the suggested position to draw the strikethrough.
+The value returned is the distance <emphasis>above</emphasis> the
+baseline of the top of the strikethrough.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>metrics</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> structure
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the suggested strikethrough position, in Pango units.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="PangoFont-struct" role="struct">
+<title>PangoFont</title>
+<indexterm zone="PangoFont-struct"><primary sortas="PangoFont">PangoFont</primary></indexterm><programlisting>typedef struct _PangoFont PangoFont;</programlisting>
+<para>
+The <link linkend="PangoFont"><type>PangoFont</type></link> structure is used to represent
+a font in a rendering-system-independent matter.
+To create an implementation of a <link linkend="PangoFont"><type>PangoFont</type></link>,
+the rendering-system specific code should allocate
+a larger structure that contains a nested
+<link linkend="PangoFont"><type>PangoFont</type></link>, fill in the <structfield>klass</structfield> member of
+the nested <link linkend="PangoFont"><type>PangoFont</type></link> with a pointer to
+a appropriate <link linkend="PangoFontClass"><type>PangoFontClass</type></link>, then call
+<link linkend="pango-font-init"><function>pango_font_init()</function></link> on the structure.
+</para>
+<para>
+The <link linkend="PangoFont"><type>PangoFont</type></link> structure contains one member
+which the implementation fills in.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONT--CAPS" role="macro">
+<title>PANGO_TYPE_FONT</title>
+<indexterm zone="PANGO-TYPE-FONT--CAPS"><primary sortas="PANGO_TYPE_FONT">PANGO_TYPE_FONT</primary></indexterm><programlisting>#define PANGO_TYPE_FONT              (pango_font_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFont"><type>PangoFont</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-FONT--CAPS" role="macro">
+<title>PANGO_FONT()</title>
+<indexterm zone="PANGO-FONT--CAPS"><primary sortas="PANGO_FONT">PANGO_FONT</primary></indexterm><programlisting>#define PANGO_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT, PangoFont))
+</programlisting>
+<para>
+Casts a <link linkend="GObject"><type>GObject</type></link> to a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-IS-FONT--CAPS" role="macro">
+<title>PANGO_IS_FONT()</title>
+<indexterm zone="PANGO-IS-FONT--CAPS"><primary sortas="PANGO_IS_FONT">PANGO_IS_FONT</primary></indexterm><programlisting>#define PANGO_IS_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT))
+</programlisting>
+<para>
+Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>object</parameter> is a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-find-shaper" role="function">
+<title>pango_font_find_shaper ()</title>
+<indexterm zone="pango-font-find-shaper"><primary sortas="pango_font_find_shaper">pango_font_find_shaper</primary></indexterm><programlisting><link linkend="PangoEngineShape">PangoEngineShape</link> *  pango_font_find_shaper              (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="guint32">guint32</link> ch);</programlisting>
+<para>
+Finds the best matching shaper for a font for a particular
+language tag and character point.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> the language tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ch</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the best matching shaper.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-describe" role="function">
+<title>pango_font_describe ()</title>
+<indexterm zone="pango-font-describe"><primary sortas="pango_font_describe">pango_font_describe</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_describe              (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Returns a description of the font, with font size set in points.
+Use <link linkend="pango-font-describe-with-absolute-size"><function>pango_font_describe_with_absolute_size()</function></link> if you want the font
+size in device units.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> object.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-describe-with-absolute-size" role="function" condition="since:1.14">
+<title>pango_font_describe_with_absolute_size ()</title>
+<indexterm zone="pango-font-describe-with-absolute-size" role="1.14"><primary sortas="pango_font_describe_with_absolute_size">pango_font_describe_with_absolute_size</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_describe_with_absolute_size
+                                                        (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Returns a description of the font, with absolute font size set
+(in device units). Use <link linkend="pango-font-describe"><function>pango_font_describe()</function></link> if you want the font
+size in points.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> object.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.14</para></refsect2>
+<refsect2 id="pango-font-get-coverage" role="function">
+<title>pango_font_get_coverage ()</title>
+<indexterm zone="pango-font-get-coverage"><primary sortas="pango_font_get_coverage">pango_font_get_coverage</primary></indexterm><programlisting><link linkend="PangoCoverage">PangoCoverage</link> *     pango_font_get_coverage             (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Computes the coverage map for a given font and language tag.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> the language tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated <link linkend="PangoCoverage"><type>PangoCoverage</type></link> object.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-get-glyph-extents" role="function">
+<title>pango_font_get_glyph_extents ()</title>
+<indexterm zone="pango-font-get-glyph-extents"><primary sortas="pango_font_get_glyph_extents">pango_font_get_glyph_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_get_glyph_extents        (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> glyph,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Gets the logical and ink extents of a glyph within a font. The
+coordinate system for each rectangle has its origin at the
+base line and horizontal origin of the character with increasing
+coordinates extending to the right and down. The macros <link linkend="PANGO-ASCENT--CAPS"><function>PANGO_ASCENT()</function></link>,
+<link linkend="PANGO-DESCENT--CAPS"><function>PANGO_DESCENT()</function></link>, <link linkend="PANGO-LBEARING--CAPS"><function>PANGO_LBEARING()</function></link>, and <link linkend="PANGO-RBEARING--CAPS"><function>PANGO_RBEARING()</function></link> can be used to convert
+from the extents rectangle to more traditional font metrics. The units
+of the rectangles are in 1/PANGO_SCALE of a device unit.
+</para>
+<para>
+If <parameter>font</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, this function gracefully sets some sane values in the
+output variables and returns.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph</parameter>&#160;:</term>
+<listitem><simpara> the glyph index
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the extents of the glyph as drawn
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the glyph
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-get-metrics" role="function">
+<title>pango_font_get_metrics ()</title>
+<indexterm zone="pango-font-get-metrics"><primary sortas="pango_font_get_metrics">pango_font_get_metrics</primary></indexterm><programlisting><link linkend="PangoFontMetrics">PangoFontMetrics</link> *  pango_font_get_metrics              (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Gets overall metric information for a font. Since the metrics may be
+substantially different for different scripts, a language tag can
+be provided to indicate that the metrics should be retrieved that
+correspond to the script(s) used by that language.
+</para>
+<para>
+If <parameter>font</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, this function gracefully sets some sane values in the
+output variables and returns.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> language tag used to determine which script to get the metrics
+           for, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate to get the metrics for the entire
+           font.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> object. The caller must call <link linkend="pango-font-metrics-unref"><function>pango_font_metrics_unref()</function></link>
+  when finished using the object.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-get-font-map" role="function" condition="since:1.10">
+<title>pango_font_get_font_map ()</title>
+<indexterm zone="pango-font-get-font-map" role="1.10"><primary sortas="pango_font_get_font_map">pango_font_get_font_map</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_font_get_font_map             (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Gets the font map for which the font was created.
+</para>
+<para>
+Note that the font maintains a <firstterm>weak</firstterm> reference
+to the font map, so if all references to font map are dropped, the font
+map will be finalized even if there are fonts created with the font
+map that are still alive.  In that case this function will return <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+It is the responsibility of the user to ensure that the font map is kept
+alive.  In most uses this is not an issue as a <link linkend="PangoContext"><type>PangoContext</type></link> holds
+a reference to the font map.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoFontMap"><type>PangoFontMap</type></link> for the font, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>font</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="PangoFontFamily-struct" role="struct">
+<title>PangoFontFamily</title>
+<indexterm zone="PangoFontFamily-struct"><primary sortas="PangoFontFamily">PangoFontFamily</primary></indexterm><programlisting>typedef struct _PangoFontFamily PangoFontFamily;</programlisting>
+<para>
+The <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link> structure is used to represent a family of related
+font faces. The faces in a family share a common design, but differ in
+slant, weight, width and other aspects.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONT-FAMILY--CAPS" role="macro">
+<title>PANGO_TYPE_FONT_FAMILY</title>
+<indexterm zone="PANGO-TYPE-FONT-FAMILY--CAPS"><primary sortas="PANGO_TYPE_FONT_FAMILY">PANGO_TYPE_FONT_FAMILY</primary></indexterm><programlisting>#define PANGO_TYPE_FONT_FAMILY              (pango_font_family_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-FONT-FAMILY--CAPS" role="macro">
+<title>PANGO_FONT_FAMILY()</title>
+<indexterm zone="PANGO-FONT-FAMILY--CAPS"><primary sortas="PANGO_FONT_FAMILY">PANGO_FONT_FAMILY</primary></indexterm><programlisting>#define PANGO_FONT_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FAMILY, PangoFontFamily))
+</programlisting>
+<para>
+Casts a <link linkend="GObject"><type>GObject</type></link> to a <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-IS-FONT-FAMILY--CAPS" role="macro">
+<title>PANGO_IS_FONT_FAMILY()</title>
+<indexterm zone="PANGO-IS-FONT-FAMILY--CAPS"><primary sortas="PANGO_IS_FONT_FAMILY">PANGO_IS_FONT_FAMILY</primary></indexterm><programlisting>#define PANGO_IS_FONT_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FAMILY))
+</programlisting>
+<para>
+Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>object</parameter> is a <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-family-get-name" role="function">
+<title>pango_font_family_get_name ()</title>
+<indexterm zone="pango-font-family-get-name"><primary sortas="pango_font_family_get_name">pango_font_family_get_name</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_font_family_get_name          (<link linkend="PangoFontFamily">PangoFontFamily</link> *family);</programlisting>
+<para>
+Gets the name of the family. The name is unique among all
+fonts for the font backend and can be used in a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>
+to specify that a face from this family is desired.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>family</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the name of the family. This string is owned
+  by the family object and must not be modified or freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-family-is-monospace" role="function" condition="since:1.4">
+<title>pango_font_family_is_monospace ()</title>
+<indexterm zone="pango-font-family-is-monospace" role="1.4"><primary sortas="pango_font_family_is_monospace">pango_font_family_is_monospace</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_font_family_is_monospace      (<link linkend="PangoFontFamily">PangoFontFamily</link> *family);</programlisting>
+<para>
+A monospace font is a font designed for text display where the the
+characters form a regular grid. For Western languages this would
+mean that the advance width of all characters are the same, but
+this categorization also includes Asian fonts which include
+double-width characters: characters that occupy two grid cells.
+<link linkend="g-unichar-iswide"><function>g_unichar_iswide()</function></link> returns a result that indicates whether a
+character is typically double-width in a monospace font.
+</para>
+<para>
+The best way to find out the grid-cell size is to call
+<link linkend="pango-font-metrics-get-approximate-digit-width"><function>pango_font_metrics_get_approximate_digit_width()</function></link>, since the results
+of <link linkend="pango-font-metrics-get-approximate-char-width"><function>pango_font_metrics_get_approximate_char_width()</function></link> may be affected
+by double-width characters.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>family</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the family is monospace.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-font-family-list-faces" role="function">
+<title>pango_font_family_list_faces ()</title>
+<indexterm zone="pango-font-family-list-faces"><primary sortas="pango_font_family_list_faces">pango_font_family_list_faces</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_family_list_faces        (<link linkend="PangoFontFamily">PangoFontFamily</link> *family,
+                                                         <link linkend="PangoFontFace">PangoFontFace</link> ***faces,
+                                                         <link linkend="int">int</link> *n_faces);</programlisting>
+<para>
+Lists the different font faces that make up <parameter>family</parameter>. The faces
+in a family share a common design, but differ in slant, weight,
+width and other aspects.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>family</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>faces</parameter>&#160;:</term>
+<listitem><simpara> location to store an array of pointers to <link linkend="PangoFontFace"><type>PangoFontFace</type></link>
+  objects, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>. This array should be freed with <link linkend="g-free"><function>g_free()</function></link>
+  when it is no longer needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_faces</parameter>&#160;:</term>
+<listitem><simpara> location to store number of elements in <parameter>faces</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoFontFace-struct" role="struct">
+<title>PangoFontFace</title>
+<indexterm zone="PangoFontFace-struct"><primary sortas="PangoFontFace">PangoFontFace</primary></indexterm><programlisting>typedef struct _PangoFontFace PangoFontFace;</programlisting>
+<para>
+The <link linkend="PangoFontFace"><type>PangoFontFace</type></link> structure is used to represent a group of fonts with
+the same family, slant, weight, width, but varying sizes.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONT-FACE--CAPS" role="macro">
+<title>PANGO_TYPE_FONT_FACE</title>
+<indexterm zone="PANGO-TYPE-FONT-FACE--CAPS"><primary sortas="PANGO_TYPE_FONT_FACE">PANGO_TYPE_FONT_FACE</primary></indexterm><programlisting>#define PANGO_TYPE_FONT_FACE              (pango_font_face_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontFace"><type>PangoFontFace</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-FONT-FACE--CAPS" role="macro">
+<title>PANGO_FONT_FACE()</title>
+<indexterm zone="PANGO-FONT-FACE--CAPS"><primary sortas="PANGO_FONT_FACE">PANGO_FONT_FACE</primary></indexterm><programlisting>#define PANGO_FONT_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FACE, PangoFontFace))
+</programlisting>
+<para>
+Casts a <link linkend="GObject"><type>GObject</type></link> to a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-IS-FONT-FACE--CAPS" role="macro">
+<title>PANGO_IS_FONT_FACE()</title>
+<indexterm zone="PANGO-IS-FONT-FACE--CAPS"><primary sortas="PANGO_IS_FONT_FACE">PANGO_IS_FONT_FACE</primary></indexterm><programlisting>#define PANGO_IS_FONT_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FACE))
+</programlisting>
+<para>
+Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>object</parameter> is a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-face-get-face-name" role="function">
+<title>pango_font_face_get_face_name ()</title>
+<indexterm zone="pango-font-face-get-face-name"><primary sortas="pango_font_face_get_face_name">pango_font_face_get_face_name</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_font_face_get_face_name       (<link linkend="PangoFontFace">PangoFontFace</link> *face);</programlisting>
+<para>
+Gets a name representing the style of this face among the
+different faces in the <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link> for the face. This
+name is unique among all faces in the family and is suitable
+for displaying to users.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>face</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the face name for the face. This string is
+  owned by the face object and must not be modified or freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-face-list-sizes" role="function" condition="since:1.4">
+<title>pango_font_face_list_sizes ()</title>
+<indexterm zone="pango-font-face-list-sizes" role="1.4"><primary sortas="pango_font_face_list_sizes">pango_font_face_list_sizes</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_face_list_sizes          (<link linkend="PangoFontFace">PangoFontFace</link> *face,
+                                                         <link linkend="int">int</link> **sizes,
+                                                         <link linkend="int">int</link> *n_sizes);</programlisting>
+<para>
+List the available sizes for a font. This is only applicable to bitmap
+fonts. For scalable fonts, stores <link linkend="NULL--CAPS"><literal>NULL</literal></link> at the location pointed to by
+<parameter>sizes</parameter> and 0 at the location pointed to by <parameter>n_sizes</parameter>. The sizes returned
+are in Pango units and are sorted in ascending order.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>face</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>sizes</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of int. This array
+        should be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_sizes</parameter>&#160;:</term>
+<listitem><simpara> location to store the number of elements in <parameter>sizes</parameter>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-font-face-describe" role="function">
+<title>pango_font_face_describe ()</title>
+<indexterm zone="pango-font-face-describe"><primary sortas="pango_font_face_describe">pango_font_face_describe</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_font_face_describe         (<link linkend="PangoFontFace">PangoFontFace</link> *face);</programlisting>
+<para>
+Returns the family, style, variant, weight and stretch of
+a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>. The size field of the resulting font description
+will be unset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>face</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-created <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> structure
+ holding the description of the face. Use <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>
+ to free the result.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-face-is-synthesized" role="function" condition="since:1.18">
+<title>pango_font_face_is_synthesized ()</title>
+<indexterm zone="pango-font-face-is-synthesized" role="1.18"><primary sortas="pango_font_face_is_synthesized">pango_font_face_is_synthesized</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_font_face_is_synthesized      (<link linkend="PangoFontFace">PangoFontFace</link> *face);</programlisting>
+<para>
+Returns whether a <link linkend="PangoFontFace"><type>PangoFontFace</type></link> is synthesized by the underlying
+font rendering engine from another face, perhaps by shearing, emboldening,
+or lightening it.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>face</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontFace"><type>PangoFontFace</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether <parameter>face</parameter> is synthesized.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PangoFontMap-struct" role="struct">
+<title>PangoFontMap</title>
+<indexterm zone="PangoFontMap-struct"><primary sortas="PangoFontMap">PangoFontMap</primary></indexterm><programlisting>typedef struct _PangoFontMap PangoFontMap;</programlisting>
+<para>
+The <link linkend="PangoFontMap"><type>PangoFontMap</type></link> represents the set of fonts available for a
+particular rendering system. This is a virtual object with
+implementations being specific to particular rendering systems.  To
+create an implementation of a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>, the rendering-system
+specific code should allocate a larger structure that contains a nested
+<link linkend="PangoFontMap"><type>PangoFontMap</type></link>, fill in the <structfield>klass</structfield> member of the nested <link linkend="PangoFontMap"><type>PangoFontMap</type></link> with a
+pointer to a appropriate <link linkend="PangoFontMapClass"><type>PangoFontMapClass</type></link>, then call
+<link linkend="pango-font-map-init"><function>pango_font_map_init()</function></link> on the structure.
+</para>
+<para>
+The <link linkend="PangoFontMap"><type>PangoFontMap</type></link> structure contains one member which the implementation
+fills in.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONT-MAP--CAPS" role="macro">
+<title>PANGO_TYPE_FONT_MAP</title>
+<indexterm zone="PANGO-TYPE-FONT-MAP--CAPS"><primary sortas="PANGO_TYPE_FONT_MAP">PANGO_TYPE_FONT_MAP</primary></indexterm><programlisting>#define PANGO_TYPE_FONT_MAP              (pango_font_map_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontMap"><type>PangoFontMap</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-FONT-MAP--CAPS" role="macro">
+<title>PANGO_FONT_MAP()</title>
+<indexterm zone="PANGO-FONT-MAP--CAPS"><primary sortas="PANGO_FONT_MAP">PANGO_FONT_MAP</primary></indexterm><programlisting>#define PANGO_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_MAP, PangoFontMap))
+</programlisting>
+<para>
+Casts a <link linkend="GObject"><type>GObject</type></link> to a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-IS-FONT-MAP--CAPS" role="macro">
+<title>PANGO_IS_FONT_MAP()</title>
+<indexterm zone="PANGO-IS-FONT-MAP--CAPS"><primary sortas="PANGO_IS_FONT_MAP">PANGO_IS_FONT_MAP</primary></indexterm><programlisting>#define PANGO_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_MAP))
+</programlisting>
+<para>
+Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>object</parameter> is a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>object</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoFontMapClass" role="struct">
+<title>PangoFontMapClass</title>
+<indexterm zone="PangoFontMapClass"><primary sortas="PangoFontMapClass">PangoFontMapClass</primary></indexterm><programlisting>typedef struct {
+  GObjectClass parent_class;
+
+
+  PangoFont *   (*load_font)     (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc);
+  void          (*list_families) (PangoFontMap               *fontmap,
+                                 PangoFontFamily          ***families,
+                                 int                        *n_families);
+  PangoFontset *(*load_fontset)  (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc,
+                                 PangoLanguage              *language);
+
+  const char *shape_engine_type;
+} PangoFontMapClass;
+</programlisting>
+<para>
+The <link linkend="PangoFontMapClass"><type>PangoFontMapClass</type></link> structure holds the virtual functions for
+a particular <link linkend="PangoFontMap"><type>PangoFontMap</type></link> implementation.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="GObjectClass">GObjectClass</link>&#160;<structfield>parent_class</structfield>;</term>
+<listitem><simpara>parent <link linkend="GObjectClass"><type>GObjectClass</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>load_font</structfield>&#160;()</term>
+<listitem><simpara>a function to load a font with a given description. See
+            <link linkend="pango-font-map-load-font"><function>pango_font_map_load_font()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>list_families</structfield>&#160;()</term>
+<listitem><simpara>A function to list available font families. See
+                <link linkend="pango-font-map-list-families"><function>pango_font_map_list_families()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>load_fontset</structfield>&#160;()</term>
+<listitem><simpara>a function to load a fontset with a given given description
+             suitable for a particular language. See
+            <link linkend="pango-font-map-load-fontset"><function>pango_font_map_load_fontset()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="char">char</link>&#160;*<structfield>shape_engine_type</structfield>;</term>
+<listitem><simpara>the type of rendering-system-dependent engines that
+             can handle fonts of this fonts loaded with this fontmap.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-FONT-MAP-CLASS--CAPS" role="macro">
+<title>PANGO_FONT_MAP_CLASS()</title>
+<indexterm zone="PANGO-FONT-MAP-CLASS--CAPS"><primary sortas="PANGO_FONT_MAP_CLASS">PANGO_FONT_MAP_CLASS</primary></indexterm><programlisting>#define PANGO_FONT_MAP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_MAP, PangoFontMapClass))
+</programlisting>
+<para>
+Casts a <link linkend="GObject"><type>GObject</type></link> to a <link linkend="PangoFontMapClass"><type>PangoFontMapClass</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>klass</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-IS-FONT-MAP-CLASS--CAPS" role="macro">
+<title>PANGO_IS_FONT_MAP_CLASS()</title>
+<indexterm zone="PANGO-IS-FONT-MAP-CLASS--CAPS"><primary sortas="PANGO_IS_FONT_MAP_CLASS">PANGO_IS_FONT_MAP_CLASS</primary></indexterm><programlisting>#define PANGO_IS_FONT_MAP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_MAP))
+</programlisting>
+<para>
+Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>klass</parameter> is a subtype of <link linkend="PangoFontMapClass"><type>PangoFontMapClass</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>klass</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="GObject"><type>GObject</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-FONT-MAP-GET-CLASS--CAPS" role="macro">
+<title>PANGO_FONT_MAP_GET_CLASS()</title>
+<indexterm zone="PANGO-FONT-MAP-GET-CLASS--CAPS"><primary sortas="PANGO_FONT_MAP_GET_CLASS">PANGO_FONT_MAP_GET_CLASS</primary></indexterm><programlisting>#define PANGO_FONT_MAP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_MAP, PangoFontMapClass))
+</programlisting>
+<para>
+Returns the type of a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>.
+</para><variablelist role="params">
+<varlistentry><term><parameter>obj</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-map-create-context" role="function" condition="since:1.22">
+<title>pango_font_map_create_context ()</title>
+<indexterm zone="pango-font-map-create-context" role="1.22"><primary sortas="pango_font_map_create_context">pango_font_map_create_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_font_map_create_context       (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap);</programlisting>
+<para>
+Creates a <link linkend="PangoContext"><type>PangoContext</type></link> connected to <parameter>fontmap</parameter>.  This is equivalent
+to <link linkend="pango-context-new"><function>pango_context_new()</function></link> followed by <link linkend="pango-context-set-font-map"><function>pango_context_set_font_map()</function></link>.
+</para>
+<para>
+If you are using Pango as part of a higher-level system,
+that system may have it's own way of create a <link linkend="PangoContext"><type>PangoContext</type></link>.
+For instance, the GTK+ toolkit has, among others,
+<link linkend="gdk-pango-context-get-for-screen"><function>gdk_pango_context_get_for_screen()</function></link>, and
+<link linkend="gtk-widget-get-pango-context"><function>gtk_widget_get_pango_context()</function></link>.  Use those instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoContext"><type>PangoContext</type></link>, which should
+              be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-font-map-load-font" role="function">
+<title>pango_font_map_load_font ()</title>
+<indexterm zone="pango-font-map-load-font"><primary sortas="pango_font_map_load_font">pango_font_map_load_font</primary></indexterm><programlisting><link linkend="PangoFont">PangoFont</link> *         pango_font_map_load_font            (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap,
+                                                         <link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Load the font in the fontmap that is the closest match for <parameter>desc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoContext"><type>PangoContext</type></link> the font will be used with
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> describing the font to load
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the font loaded, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no font matched.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-map-load-fontset" role="function">
+<title>pango_font_map_load_fontset ()</title>
+<indexterm zone="pango-font-map-load-fontset"><primary sortas="pango_font_map_load_fontset">pango_font_map_load_fontset</primary></indexterm><programlisting><link linkend="PangoFontset">PangoFontset</link> *      pango_font_map_load_fontset         (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap,
+                                                         <link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Load a set of fonts in the fontmap that can be used to render
+a font matching <parameter>desc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoContext"><type>PangoContext</type></link> the font will be used with
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> describing the font to load
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link> the fonts will be used for
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the fontset, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no font matched.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-map-list-families" role="function">
+<title>pango_font_map_list_families ()</title>
+<indexterm zone="pango-font-map-list-families"><primary sortas="pango_font_map_list_families">pango_font_map_list_families</primary></indexterm><programlisting><link linkend="void">void</link>                pango_font_map_list_families        (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap,
+                                                         <link linkend="PangoFontFamily">PangoFontFamily</link> ***families,
+                                                         <link linkend="int">int</link> *n_families);</programlisting>
+<para>
+List all families for a fontmap.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>families</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link> *.
+           This array should be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_families</parameter>&#160;:</term>
+<listitem><simpara> location to store the number of elements in <parameter>families</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-font-map-get-shape-engine-type" role="function" condition="since:1.4">
+<title>pango_font_map_get_shape_engine_type ()</title>
+<indexterm zone="pango-font-map-get-shape-engine-type" role="1.4"><primary sortas="pango_font_map_get_shape_engine_type">pango_font_map_get_shape_engine_type</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_font_map_get_shape_engine_type
+                                                        (<link linkend="PangoFontMap">PangoFontMap</link> *fontmap);</programlisting>
+<para>
+Returns the render ID for shape engines for this fontmap.
+See the <structfield>render_type</structfield> field of
+<link linkend="PangoEngineInfo"><type>PangoEngineInfo</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the ID string for shape engines for
+ this fontmap. Owned by Pango, should not be modified
+ or freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="PangoFontset-struct" role="struct">
+<title>PangoFontset</title>
+<indexterm zone="PangoFontset-struct"><primary sortas="PangoFontset">PangoFontset</primary></indexterm><programlisting>typedef struct _PangoFontset PangoFontset;</programlisting>
+<para>
+A <link linkend="PangoFontset"><type>PangoFontset</type></link> represents a set of <link linkend="PangoFont"><type>PangoFont</type></link> to use
+when rendering text. It is the result of resolving a
+<link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> against a particular <link linkend="PangoContext"><type>PangoContext</type></link>.
+It has operations for finding the component font for
+a particular Unicode character, and for finding a composite
+set of metrics for the entire fontset.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONTSET--CAPS" role="macro">
+<title>PANGO_TYPE_FONTSET</title>
+<indexterm zone="PANGO-TYPE-FONTSET--CAPS"><primary sortas="PANGO_TYPE_FONTSET">PANGO_TYPE_FONTSET</primary></indexterm><programlisting>#define PANGO_TYPE_FONTSET              (pango_fontset_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontset"><type>PangoFontset</type></link>.
+</para></refsect2>
+<refsect2 id="PangoFontsetClass" role="struct">
+<title>PangoFontsetClass</title>
+<indexterm zone="PangoFontsetClass"><primary sortas="PangoFontsetClass">PangoFontsetClass</primary></indexterm><programlisting>typedef struct {
+  GObjectClass parent_class;
+
+
+  PangoFont *       (*get_font)     (PangoFontset     *fontset,
+                                    guint             wc);
+
+  PangoFontMetrics *(*get_metrics)  (PangoFontset     *fontset);
+  PangoLanguage *   (*get_language) (PangoFontset     *fontset);
+  void              (*foreach)      (PangoFontset           *fontset,
+                                    PangoFontsetForeachFunc func,
+                                    gpointer                data);
+} PangoFontsetClass;
+</programlisting>
+<para>
+The <link linkend="PangoFontsetClass"><type>PangoFontsetClass</type></link> structure holds the virtual functions for
+a particular <link linkend="PangoFontset"><type>PangoFontset</type></link> implementation.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="GObjectClass">GObjectClass</link>&#160;<structfield>parent_class</structfield>;</term>
+<listitem><simpara>parent <link linkend="GObjectClass"><type>GObjectClass</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_font</structfield>&#160;()</term>
+<listitem><simpara>a function to get the font in the fontset that contains the 
+   best glyph for the given Unicode character; see <link linkend="pango-fontset-get-font"><function>pango_fontset_get_font()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_metrics</structfield>&#160;()</term>
+<listitem><simpara>a function to get overall metric information for the fonts 
+   in the fontset; see <link linkend="pango-fontset-get-metrics"><function>pango_fontset_get_metrics()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_language</structfield>&#160;()</term>
+<listitem><simpara>a function to get the language of the fontset.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>foreach</structfield>&#160;()</term>
+<listitem><simpara>a function to loop over the fonts in the fontset. See
+   <link linkend="pango-fontset-foreach"><function>pango_fontset_foreach()</function></link>.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-fontset-get-font" role="function">
+<title>pango_fontset_get_font ()</title>
+<indexterm zone="pango-fontset-get-font"><primary sortas="pango_fontset_get_font">pango_fontset_get_font</primary></indexterm><programlisting><link linkend="PangoFont">PangoFont</link> *         pango_fontset_get_font              (<link linkend="PangoFontset">PangoFontset</link> *fontset,
+                                                         <link linkend="guint">guint</link> wc);</programlisting>
+<para>
+Returns the font in the fontset that contains the best glyph for the
+Unicode character <parameter>wc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontset"><type>PangoFontset</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>. The caller must call g_object_unref when finished
+         with the font.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-fontset-get-metrics" role="function">
+<title>pango_fontset_get_metrics ()</title>
+<indexterm zone="pango-fontset-get-metrics"><primary sortas="pango_fontset_get_metrics">pango_fontset_get_metrics</primary></indexterm><programlisting><link linkend="PangoFontMetrics">PangoFontMetrics</link> *  pango_fontset_get_metrics           (<link linkend="PangoFontset">PangoFontset</link> *fontset);</programlisting>
+<para>
+Get overall metric information for the fonts in the fontset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontset"><type>PangoFontset</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> object. The caller must call <link linkend="pango-font-metrics-unref"><function>pango_font_metrics_unref()</function></link>
+  when finished using the object.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoFontsetForeachFunc" role="function" condition="since:1.4">
+<title>PangoFontsetForeachFunc ()</title>
+<indexterm zone="PangoFontsetForeachFunc" role="1.4"><primary sortas="PangoFontsetForeachFunc">PangoFontsetForeachFunc</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            (*PangoFontsetForeachFunc)          (<link linkend="PangoFontset">PangoFontset</link> *fontset,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+A callback function used by <link linkend="pango-fontset-foreach"><function>pango_fontset_foreach()</function></link> when enumerating
+the fonts in a fontset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontset"><type>PangoFontset</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a font from <parameter>fontset</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> callback data
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, stop iteration and return immediately.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fontset-foreach" role="function" condition="since:1.4">
+<title>pango_fontset_foreach ()</title>
+<indexterm zone="pango-fontset-foreach" role="1.4"><primary sortas="pango_fontset_foreach">pango_fontset_foreach</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fontset_foreach               (<link linkend="PangoFontset">PangoFontset</link> *fontset,
+                                                         <link linkend="PangoFontsetForeachFunc">PangoFontsetForeachFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+Iterates through all the fonts in a fontset, calling <parameter>func</parameter> for
+each one. If <parameter>func</parameter> returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, that stops the iteration.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontset"><type>PangoFontset</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>func</parameter>&#160;:</term>
+<listitem><simpara> Callback function
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> data to pass to the callback function
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="PangoFontsetSimple-struct" role="struct">
+<title>PangoFontsetSimple</title>
+<indexterm zone="PangoFontsetSimple-struct"><primary sortas="PangoFontsetSimple">PangoFontsetSimple</primary></indexterm><programlisting>typedef struct _PangoFontsetSimple PangoFontsetSimple;</programlisting>
+<para>
+<link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link> is a implementation of the abstract
+<link linkend="PangoFontset"><type>PangoFontset</type></link> base class in terms of an array of fonts,
+which the creator provides when constructing the
+<link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-FONTSET-SIMPLE--CAPS" role="macro">
+<title>PANGO_TYPE_FONTSET_SIMPLE</title>
+<indexterm zone="PANGO-TYPE-FONTSET-SIMPLE--CAPS"><primary sortas="PANGO_TYPE_FONTSET_SIMPLE">PANGO_TYPE_FONTSET_SIMPLE</primary></indexterm><programlisting>#define PANGO_TYPE_FONTSET_SIMPLE       (pango_fontset_simple_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link>.
+</para></refsect2>
+<refsect2 id="pango-fontset-simple-new" role="function">
+<title>pango_fontset_simple_new ()</title>
+<indexterm zone="pango-fontset-simple-new"><primary sortas="pango_fontset_simple_new">pango_fontset_simple_new</primary></indexterm><programlisting><link linkend="PangoFontsetSimple">PangoFontsetSimple</link> * pango_fontset_simple_new           (<link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Creates a new <link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link> for the given language.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link> tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link>, which should
+              be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-fontset-simple-append" role="function">
+<title>pango_fontset_simple_append ()</title>
+<indexterm zone="pango-fontset-simple-append"><primary sortas="pango_fontset_simple_append">pango_fontset_simple_append</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fontset_simple_append         (<link linkend="PangoFontsetSimple">PangoFontsetSimple</link> *fontset,
+                                                         <link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Adds a font to the fontset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-fontset-simple-size" role="function">
+<title>pango_fontset_simple_size ()</title>
+<indexterm zone="pango-fontset-simple-size"><primary sortas="pango_fontset_simple_size">pango_fontset_simple_size</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_fontset_simple_size           (<link linkend="PangoFontsetSimple">PangoFontsetSimple</link> *fontset);</programlisting>
+<para>
+Returns the number of fonts in the fontset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontsetSimple"><type>PangoFontsetSimple</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the size of <parameter>fontset</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/freetype-fonts.xml b/docs/xml/freetype-fonts.xml
new file mode 100755 (executable)
index 0000000..bfc77e5
--- /dev/null
@@ -0,0 +1,528 @@
+<refentry id="pango-FreeType-Fonts-and-Rendering">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-FreeType-Fonts-and-Rendering.top_of_page">FreeType Fonts and Rendering</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>FreeType Fonts and Rendering</refname>
+<refpurpose>Functions for shape engines to manipulate FreeType fonts</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-FreeType-Fonts-and-Rendering.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoFT2FontMap"/>
+<synopsis>
+                    <link linkend="PangoFT2FontMap-struct">PangoFT2FontMap</link>;
+#define             <link linkend="PANGO-RENDER-TYPE-FT2--CAPS">PANGO_RENDER_TYPE_FT2</link>
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-ft2-font-map-new">pango_ft2_font_map_new</link>              (void);
+<link linkend="void">void</link>                <link linkend="pango-ft2-font-map-set-resolution">pango_ft2_font_map_set_resolution</link>   (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap,
+                                                         <link linkend="double">double</link> dpi_x,
+                                                         <link linkend="double">double</link> dpi_y);
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-ft2-font-map-create-context">pango_ft2_font_map_create_context</link>   (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap);
+<link linkend="void">void</link>                (<link linkend="PangoFT2SubstituteFunc">*PangoFT2SubstituteFunc</link>)           (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gpointer">gpointer</link> data);
+<link linkend="void">void</link>                <link linkend="pango-ft2-font-map-set-default-substitute">pango_ft2_font_map_set_default_substitute</link>
+                                                        (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap,
+                                                         <link linkend="PangoFT2SubstituteFunc">PangoFT2SubstituteFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> notify);
+<link linkend="void">void</link>                <link linkend="pango-ft2-font-map-substitute-changed">pango_ft2_font_map_substitute_changed</link>
+                                                        (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap);
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-ft2-get-context">pango_ft2_get_context</link>               (<link linkend="double">double</link> dpi_x,
+                                                         <link linkend="double">double</link> dpi_y);
+<link linkend="void">void</link>                <link linkend="pango-ft2-render">pango_ft2_render</link>                    (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);
+<link linkend="void">void</link>                <link linkend="pango-ft2-render-transformed">pango_ft2_render_transformed</link>        (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-ft2-render-layout-line">pango_ft2_render_layout_line</link>        (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-ft2-render-layout-line-subpixel">pango_ft2_render_layout_line_subpixel</link>
+                                                        (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-ft2-render-layout">pango_ft2_render_layout</link>             (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-ft2-render-layout-subpixel">pango_ft2_render_layout_subpixel</link>    (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-ft2-get-unknown-glyph">pango_ft2_get_unknown_glyph</link>         (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="int">int</link>                 <link linkend="pango-ft2-font-get-kerning">pango_ft2_font_get_kerning</link>          (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> left,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> right);
+<link linkend="FT-Face">FT_Face</link>             <link linkend="pango-ft2-font-get-face">pango_ft2_font_get_face</link>             (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="PangoCoverage">PangoCoverage</link> *     <link linkend="pango-ft2-font-get-coverage">pango_ft2_font_get_coverage</link>         (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-ft2-font-map-for-display">pango_ft2_font_map_for_display</link>      (void);
+<link linkend="void">void</link>                <link linkend="pango-ft2-shutdown-display">pango_ft2_shutdown_display</link>          (void);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-FreeType-Fonts-and-Rendering.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoFontMap">PangoFontMap</link>
+         +----<link linkend="PangoFcFontMap">PangoFcFontMap</link>
+               +----PangoFT2FontMap
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="pango-FreeType-Fonts-and-Rendering.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The macros and functions in this section are used to access fonts and render
+text to bitmaps using the FreeType 2 library.
+</para>
+</refsect1>
+
+<refsect1 id="pango-FreeType-Fonts-and-Rendering.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoFT2FontMap-struct" role="struct">
+<title>PangoFT2FontMap</title>
+<indexterm zone="PangoFT2FontMap-struct"><primary sortas="PangoFT2FontMap">PangoFT2FontMap</primary></indexterm><programlisting>typedef struct _PangoFT2FontMap PangoFT2FontMap;</programlisting>
+<para>
+The <link linkend="PangoFT2FontMap"><type>PangoFT2FontMap</type></link> is the <link linkend="PangoFontMap"><type>PangoFontMap</type></link> implementation for FreeType fonts.
+</para></refsect2>
+<refsect2 id="PANGO-RENDER-TYPE-FT2--CAPS" role="macro" condition="deprecated:">
+<title>PANGO_RENDER_TYPE_FT2</title>
+<indexterm zone="PANGO-RENDER-TYPE-FT2--CAPS" role="deprecated"><primary sortas="PANGO_RENDER_TYPE_FT2">PANGO_RENDER_TYPE_FT2</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_FT2 "PangoRenderFT2"
+</programlisting>
+<warning><para><literal>PANGO_RENDER_TYPE_FT2</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+A string constant that was used to identify shape engines that work
+with the FreeType backend. See <link linkend="PANGO-RENDER-TYPE-FC--CAPS"><literal>PANGO_RENDER_TYPE_FC</literal></link> for the replacement.
+</para></refsect2>
+<refsect2 id="pango-ft2-font-map-new" role="function" condition="since:1.2">
+<title>pango_ft2_font_map_new ()</title>
+<indexterm zone="pango-ft2-font-map-new" role="1.2"><primary sortas="pango_ft2_font_map_new">pango_ft2_font_map_new</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_ft2_font_map_new              (void);</programlisting>
+<para>
+Create a new <link linkend="PangoFT2FontMap"><type>PangoFT2FontMap</type></link> object; a fontmap is used
+to cache information about available fonts, and holds
+certain global parameters such as the resolution and
+the default substitute function (see
+<link linkend="pango-ft2-font-map-set-default-substitute"><function>pango_ft2_font_map_set_default_substitute()</function></link>).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created fontmap object. Unref
+with <link linkend="g-object-unref"><function>g_object_unref()</function></link> when you are finished with it.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-ft2-font-map-set-resolution" role="function" condition="since:1.2">
+<title>pango_ft2_font_map_set_resolution ()</title>
+<indexterm zone="pango-ft2-font-map-set-resolution" role="1.2"><primary sortas="pango_ft2_font_map_set_resolution">pango_ft2_font_map_set_resolution</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_font_map_set_resolution   (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap,
+                                                         <link linkend="double">double</link> dpi_x,
+                                                         <link linkend="double">double</link> dpi_y);</programlisting>
+<para>
+Sets the horizontal and vertical resolutions for the fontmap.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFT2Fontmap"><type>PangoFT2Fontmap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dpi_x</parameter>&#160;:</term>
+<listitem><simpara> dots per inch in the X direction
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dpi_y</parameter>&#160;:</term>
+<listitem><simpara> dots per inch in the Y direction
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-ft2-font-map-create-context" role="function" condition="deprecated:1.22: Use pango_font_map_create_context() instead.|since:1.2">
+<title>pango_ft2_font_map_create_context ()</title>
+<indexterm zone="pango-ft2-font-map-create-context" role="deprecated"><primary sortas="pango_ft2_font_map_create_context">pango_ft2_font_map_create_context</primary></indexterm><indexterm zone="pango-ft2-font-map-create-context" role="1.2"><primary sortas="pango_ft2_font_map_create_context">pango_ft2_font_map_create_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_ft2_font_map_create_context   (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap);</programlisting>
+<warning><para><literal>pango_ft2_font_map_create_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Create a <link linkend="PangoContext"><type>PangoContext</type></link> for the given fontmap.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFT2Fontmap"><type>PangoFT2Fontmap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created context; free with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="PangoFT2SubstituteFunc" role="function">
+<title>PangoFT2SubstituteFunc ()</title>
+<indexterm zone="PangoFT2SubstituteFunc"><primary sortas="PangoFT2SubstituteFunc">PangoFT2SubstituteFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*PangoFT2SubstituteFunc)           (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+Function type for doing final config tweaking on prepared FcPatterns.
+</para><variablelist role="params">
+<varlistentry><term><parameter>pattern</parameter>&#160;:</term>
+<listitem><simpara>the <type>FcPattern</type> to tweak.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara>user data.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-font-map-set-default-substitute" role="function" condition="since:1.2">
+<title>pango_ft2_font_map_set_default_substitute ()</title>
+<indexterm zone="pango-ft2-font-map-set-default-substitute" role="1.2"><primary sortas="pango_ft2_font_map_set_default_substitute">pango_ft2_font_map_set_default_substitute</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_font_map_set_default_substitute
+                                                        (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap,
+                                                         <link linkend="PangoFT2SubstituteFunc">PangoFT2SubstituteFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> notify);</programlisting>
+<para>
+Sets a function that will be called to do final configuration
+substitution on a <link linkend="FcPattern"><type>FcPattern</type></link> before it is used to load
+the font. This function can be used to do things like set
+hinting and antialiasing options.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFT2FontMap"><type>PangoFT2FontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>func</parameter>&#160;:</term>
+<listitem><simpara> function to call to to do final config tweaking
+       on <link linkend="FcPattern"><type>FcPattern</type></link> objects.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> data to pass to <parameter>func</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>notify</parameter>&#160;:</term>
+<listitem><simpara> function to call when <parameter>data</parameter> is no longer used.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-ft2-font-map-substitute-changed" role="function" condition="since:1.2">
+<title>pango_ft2_font_map_substitute_changed ()</title>
+<indexterm zone="pango-ft2-font-map-substitute-changed" role="1.2"><primary sortas="pango_ft2_font_map_substitute_changed">pango_ft2_font_map_substitute_changed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_font_map_substitute_changed
+                                                        (<link linkend="PangoFT2FontMap">PangoFT2FontMap</link> *fontmap);</programlisting>
+<para>
+Call this function any time the results of the
+default substitution function set with
+<link linkend="pango-ft2-font-map-set-default-substitute"><function>pango_ft2_font_map_set_default_substitute()</function></link> change.
+That is, if your substitution function will return different
+results for the same input pattern, you must call this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFT2Fontmap"><type>PangoFT2Fontmap</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-ft2-get-context" role="function" condition="deprecated:1.22: Use pango_font_map_create_context() instead.">
+<title>pango_ft2_get_context ()</title>
+<indexterm zone="pango-ft2-get-context" role="deprecated"><primary sortas="pango_ft2_get_context">pango_ft2_get_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_ft2_get_context               (<link linkend="double">double</link> dpi_x,
+                                                         <link linkend="double">double</link> dpi_y);</programlisting>
+<warning><para><literal>pango_ft2_get_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Retrieves a <link linkend="PangoContext"><type>PangoContext</type></link> for the default PangoFT2 fontmap
+(see <link linkend="pango-ft2-fontmap-get-for-display"><function>pango_ft2_fontmap_get_for_display()</function></link>) and sets the resolution
+for the default fontmap to <parameter>dpi_x</parameter> by <parameter>dpi_y</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>dpi_x</parameter>&#160;:</term>
+<listitem><simpara>  the horizontal DPI of the target device
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dpi_y</parameter>&#160;:</term>
+<listitem><simpara>  the vertical DPI of the target device
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new <link linkend="PangoContext"><type>PangoContext</type></link>
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-render" role="function">
+<title>pango_ft2_render ()</title>
+<indexterm zone="pango-ft2-render"><primary sortas="pango_ft2_render">pango_ft2_render</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_render                    (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);</programlisting>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto a FreeType2 bitmap.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
+<listitem><simpara>  the FreeType2 bitmap onto which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of the start of the string (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of the baseline (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-render-transformed" role="function" condition="since:1.6">
+<title>pango_ft2_render_transformed ()</title>
+<indexterm zone="pango-ft2-render-transformed" role="1.6"><primary sortas="pango_ft2_render_transformed">pango_ft2_render_transformed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_render_transformed        (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto a FreeType2 bitmap, possibly
+transforming the layed-out coordinates through a transformation
+matrix. Note that the transformation matrix for <parameter>font</parameter> is not
+changed, so to produce correct rendering results, the <parameter>font</parameter>
+must have been loaded using a <link linkend="PangoContext"><type>PangoContext</type></link> with an identical
+transformation matrix to that passed in to this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
+<listitem><simpara>  the FreeType2 bitmap onto which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara>  a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to use an identity transformation
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of the start of the string (in Pango
+          units in user space coordinates)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of the baseline (in Pango units
+          in user space coordinates)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-ft2-render-layout-line" role="function">
+<title>pango_ft2_render_layout_line ()</title>
+<indexterm zone="pango-ft2-render-layout-line"><primary sortas="pango_ft2_render_layout_line">pango_ft2_render_layout_line</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_render_layout_line        (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> onto a FreeType2 bitmap</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
+<listitem><simpara>    a <type>FT_Bitmap</type> to render the line onto
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the x position of start of string (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the y position of baseline (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-render-layout-line-subpixel" role="function" condition="since:1.6">
+<title>pango_ft2_render_layout_line_subpixel ()</title>
+<indexterm zone="pango-ft2-render-layout-line-subpixel" role="1.6"><primary sortas="pango_ft2_render_layout_line_subpixel">pango_ft2_render_layout_line_subpixel</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_render_layout_line_subpixel
+                                                        (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> onto a FreeType2 bitmap, with he
+location specified in fixed-point Pango units rather than
+pixels. (Using this will avoid extra inaccuracies from
+rounding to integer pixels multiple times, even if the
+final glyph positions are integers.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
+<listitem><simpara>    a <type>FT_Bitmap</type> to render the line onto
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the x position of start of string (in Pango units)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the y position of baseline (in Pango units)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-ft2-render-layout" role="function">
+<title>pango_ft2_render_layout ()</title>
+<indexterm zone="pango-ft2-render-layout"><primary sortas="pango_ft2_render_layout">pango_ft2_render_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_render_layout             (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayout"><type>PangoLayout</type></link> onto a FreeType2 bitmap</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
+<listitem><simpara>    a <type>FT_Bitmap</type> to render the layout onto
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the X position of the left of the layout (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the Y position of the top of the layout (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-render-layout-subpixel" role="function" condition="since:1.6">
+<title>pango_ft2_render_layout_subpixel ()</title>
+<indexterm zone="pango-ft2-render-layout-subpixel" role="1.6"><primary sortas="pango_ft2_render_layout_subpixel">pango_ft2_render_layout_subpixel</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_render_layout_subpixel    (<link linkend="FT-Bitmap">FT_Bitmap</link> *bitmap,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayout"><type>PangoLayout</type></link> onto a FreeType2 bitmap, with he
+location specified in fixed-point Pango units rather than
+pixels. (Using this will avoid extra inaccuracies from
+rounding to integer pixels multiple times, even if the
+final glyph positions are integers.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>bitmap</parameter>&#160;:</term>
+<listitem><simpara>    a <type>FT_Bitmap</type> to render the layout onto
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the X position of the left of the layout (in Pango units)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the Y position of the top of the layout (in Pango units)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-ft2-get-unknown-glyph" role="function" condition="deprecated:">
+<title>pango_ft2_get_unknown_glyph ()</title>
+<indexterm zone="pango-ft2-get-unknown-glyph" role="deprecated"><primary sortas="pango_ft2_get_unknown_glyph">pango_ft2_get_unknown_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_ft2_get_unknown_glyph         (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<warning><para><literal>pango_ft2_get_unknown_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Return the index of a glyph suitable for drawing unknown characters with
+<parameter>font</parameter>, or <link linkend="PANGO-GLYPH-EMPTY--CAPS"><literal>PANGO_GLYPH_EMPTY</literal></link> if no suitable glyph found.
+</para>
+<para>
+If you want to draw an unknown-box for a character that is not covered
+by the font,
+use <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS"><function>PANGO_GET_UNKNOWN_GLYPH()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a glyph index into <parameter>font</parameter>, or <link linkend="PANGO-GLYPH-EMPTY--CAPS"><literal>PANGO_GLYPH_EMPTY</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-font-get-kerning" role="function" condition="deprecated:">
+<title>pango_ft2_font_get_kerning ()</title>
+<indexterm zone="pango-ft2-font-get-kerning" role="deprecated"><primary sortas="pango_ft2_font_get_kerning">pango_ft2_font_get_kerning</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_ft2_font_get_kerning          (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> left,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> right);</programlisting>
+<warning><para><literal>pango_ft2_font_get_kerning</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Retrieves kerning information for a combination of two glyphs.
+</para>
+<para>
+Use <link linkend="pango-fc-font-kern-glyphs"><function>pango_fc_font_kern_glyphs()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>left</parameter>&#160;:</term>
+<listitem><simpara> the left <link linkend="PangoGlyph"><type>PangoGlyph</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>right</parameter>&#160;:</term>
+<listitem><simpara> the right <link linkend="PangoGlyph"><type>PangoGlyph</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The amount of kerning (in Pango units) to apply for
+the given combination of glyphs.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-font-get-face" role="function" condition="deprecated:">
+<title>pango_ft2_font_get_face ()</title>
+<indexterm zone="pango-ft2-font-get-face" role="deprecated"><primary sortas="pango_ft2_font_get_face">pango_ft2_font_get_face</primary></indexterm><programlisting><link linkend="FT-Face">FT_Face</link>             pango_ft2_font_get_face             (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<warning><para><literal>pango_ft2_font_get_face</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns the native FreeType2 <type>FT_Face</type> structure used for this <link linkend="PangoFont"><type>PangoFont</type></link>.
+This may be useful if you want to use FreeType2 functions directly.
+</para>
+<para>
+Use <link linkend="pango-fc-font-lock-face"><function>pango_fc_font_lock_face()</function></link> instead; when you are done with a
+face from <link linkend="pango-fc-font-lock-face"><function>pango_fc_font_lock_face()</function></link> you must call
+<link linkend="pango-fc-font-unlock-face"><function>pango_fc_font_unlock_face()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to a <type>FT_Face</type> structure, with the size set correctly,
+              or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>font</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-font-get-coverage" role="function" condition="deprecated:">
+<title>pango_ft2_font_get_coverage ()</title>
+<indexterm zone="pango-ft2-font-get-coverage" role="deprecated"><primary sortas="pango_ft2_font_get_coverage">pango_ft2_font_get_coverage</primary></indexterm><programlisting><link linkend="PangoCoverage">PangoCoverage</link> *     pango_ft2_font_get_coverage         (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<warning><para><literal>pango_ft2_font_get_coverage</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Gets the <link linkend="PangoCoverage"><type>PangoCoverage</type></link> for a <link linkend="PangoFT2Font"><type>PangoFT2Font</type></link>. Use
+<link linkend="pango-font-get-coverage"><function>pango_font_get_coverage()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFT2Font"><type>PangoFT2Font</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a language tag.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoCoverage"><type>PangoCoverage</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-font-map-for-display" role="function" condition="deprecated:">
+<title>pango_ft2_font_map_for_display ()</title>
+<indexterm zone="pango-ft2-font-map-for-display" role="deprecated"><primary sortas="pango_ft2_font_map_for_display">pango_ft2_font_map_for_display</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_ft2_font_map_for_display      (void);</programlisting>
+<warning><para><literal>pango_ft2_font_map_for_display</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns a <link linkend="PangoFT2FontMap"><type>PangoFT2FontMap</type></link>. This font map is cached and should
+not be freed. If the font map is no longer needed, it can
+be released with <link linkend="pango-ft2-shutdown-display"><function>pango_ft2_shutdown_display()</function></link>. Use of the
+global PangoFT2 fontmap is deprecated; use <link linkend="pango-ft2-font-map-new"><function>pango_ft2_font_map_new()</function></link>
+instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFT2FontMap"><type>PangoFT2FontMap</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ft2-shutdown-display" role="function" condition="deprecated:">
+<title>pango_ft2_shutdown_display ()</title>
+<indexterm zone="pango-ft2-shutdown-display" role="deprecated"><primary sortas="pango_ft2_shutdown_display">pango_ft2_shutdown_display</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ft2_shutdown_display          (void);</programlisting>
+<warning><para><literal>pango_ft2_shutdown_display</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Free the global fontmap. (See <link linkend="pango-ft2-font-map-for-display"><function>pango_ft2_font_map_for_display()</function></link>)
+Use of the global PangoFT2 fontmap is deprecated.</para>
+<para>
+</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/glyphs.xml b/docs/xml/glyphs.xml
new file mode 100755 (executable)
index 0000000..9e5f495
--- /dev/null
@@ -0,0 +1,1538 @@
+<refentry id="pango-Glyph-Storage">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Glyph-Storage.top_of_page">Glyph Storage</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Glyph Storage</refname>
+<refpurpose>Structures for storing information about glyphs</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Glyph-Storage.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+#define             <link linkend="PANGO-SCALE--CAPS">PANGO_SCALE</link>
+#define             <link linkend="PANGO-PIXELS--CAPS">PANGO_PIXELS</link>                        (d)
+#define             <link linkend="PANGO-PIXELS-FLOOR--CAPS">PANGO_PIXELS_FLOOR</link>                  (d)
+#define             <link linkend="PANGO-PIXELS-CEIL--CAPS">PANGO_PIXELS_CEIL</link>                   (d)
+#define             <link linkend="PANGO-UNITS-ROUND--CAPS">PANGO_UNITS_ROUND</link>                   (d)
+<link linkend="double">double</link>              <link linkend="pango-units-to-double">pango_units_to_double</link>               (<link linkend="int">int</link> i);
+<link linkend="int">int</link>                 <link linkend="pango-units-from-double">pango_units_from_double</link>             (<link linkend="double">double</link> d);
+                    <link linkend="PangoRectangle">PangoRectangle</link>;
+#define             <link linkend="PANGO-ASCENT--CAPS">PANGO_ASCENT</link>                        (rect)
+#define             <link linkend="PANGO-DESCENT--CAPS">PANGO_DESCENT</link>                       (rect)
+#define             <link linkend="PANGO-LBEARING--CAPS">PANGO_LBEARING</link>                      (rect)
+#define             <link linkend="PANGO-RBEARING--CAPS">PANGO_RBEARING</link>                      (rect)
+<link linkend="void">void</link>                <link linkend="pango-extents-to-pixels">pango_extents_to_pixels</link>             (<link linkend="PangoRectangle">PangoRectangle</link> *inclusive,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *nearest);
+                    <link linkend="PangoMatrix">PangoMatrix</link>;
+#define             <link linkend="PANGO-TYPE-MATRIX--CAPS">PANGO_TYPE_MATRIX</link>
+#define             <link linkend="PANGO-MATRIX-INIT--CAPS">PANGO_MATRIX_INIT</link>
+<link linkend="PangoMatrix">PangoMatrix</link> *       <link linkend="pango-matrix-copy">pango_matrix_copy</link>                   (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);
+<link linkend="void">void</link>                <link linkend="pango-matrix-free">pango_matrix_free</link>                   (<link linkend="PangoMatrix">PangoMatrix</link> *matrix);
+<link linkend="void">void</link>                <link linkend="pango-matrix-translate">pango_matrix_translate</link>              (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> tx,
+                                                         <link linkend="double">double</link> ty);
+<link linkend="void">void</link>                <link linkend="pango-matrix-scale">pango_matrix_scale</link>                  (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> scale_x,
+                                                         <link linkend="double">double</link> scale_y);
+<link linkend="void">void</link>                <link linkend="pango-matrix-rotate">pango_matrix_rotate</link>                 (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> degrees);
+<link linkend="void">void</link>                <link linkend="pango-matrix-concat">pango_matrix_concat</link>                 (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *new_matrix);
+<link linkend="void">void</link>                <link linkend="pango-matrix-transform-point">pango_matrix_transform_point</link>        (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> *x,
+                                                         <link linkend="double">double</link> *y);
+<link linkend="void">void</link>                <link linkend="pango-matrix-transform-distance">pango_matrix_transform_distance</link>     (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> *dx,
+                                                         <link linkend="double">double</link> *dy);
+<link linkend="void">void</link>                <link linkend="pango-matrix-transform-rectangle">pango_matrix_transform_rectangle</link>    (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *rect);
+<link linkend="void">void</link>                <link linkend="pango-matrix-transform-pixel-rectangle">pango_matrix_transform_pixel_rectangle</link>
+                                                        (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *rect);
+<link linkend="double">double</link>              <link linkend="pango-matrix-get-font-scale-factor">pango_matrix_get_font_scale_factor</link>  (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);
+typedef             <link linkend="PangoGlyph">PangoGlyph</link>;
+#define             <link linkend="PANGO-GLYPH-EMPTY--CAPS">PANGO_GLYPH_EMPTY</link>
+#define             <link linkend="PANGO-GLYPH-INVALID-INPUT--CAPS">PANGO_GLYPH_INVALID_INPUT</link>
+#define             <link linkend="PANGO-GLYPH-UNKNOWN-FLAG--CAPS">PANGO_GLYPH_UNKNOWN_FLAG</link>
+#define             <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS">PANGO_GET_UNKNOWN_GLYPH</link>             (wc)
+                    <link linkend="PangoGlyphInfo">PangoGlyphInfo</link>;
+                    <link linkend="PangoGlyphGeometry">PangoGlyphGeometry</link>;
+typedef             <link linkend="PangoGlyphUnit">PangoGlyphUnit</link>;
+                    <link linkend="PangoGlyphVisAttr">PangoGlyphVisAttr</link>;
+                    <link linkend="PangoGlyphString">PangoGlyphString</link>;
+                    <link linkend="PangoGlyphItem">PangoGlyphItem</link>;
+                    <link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link>;
+#define             <link linkend="PANGO-TYPE-GLYPH-STRING--CAPS">PANGO_TYPE_GLYPH_STRING</link>
+<link linkend="PangoGlyphString">PangoGlyphString</link> *  <link linkend="pango-glyph-string-new">pango_glyph_string_new</link>              (void);
+<link linkend="PangoGlyphString">PangoGlyphString</link> *  <link linkend="pango-glyph-string-copy">pango_glyph_string_copy</link>             (<link linkend="PangoGlyphString">PangoGlyphString</link> *string);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-set-size">pango_glyph_string_set_size</link>         (<link linkend="PangoGlyphString">PangoGlyphString</link> *string,
+                                                         <link linkend="gint">gint</link> new_len);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-free">pango_glyph_string_free</link>             (<link linkend="PangoGlyphString">PangoGlyphString</link> *string);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-extents">pango_glyph_string_extents</link>          (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-extents-range">pango_glyph_string_extents_range</link>    (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> start,
+                                                         <link linkend="int">int</link> end,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="int">int</link>                 <link linkend="pango-glyph-string-get-width">pango_glyph_string_get_width</link>        (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-index-to-x">pango_glyph_string_index_to_x</link>       (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="gboolean">gboolean</link> trailing,
+                                                         <link linkend="int">int</link> *x_pos);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-x-to-index">pango_glyph_string_x_to_index</link>       (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="int">int</link> x_pos,
+                                                         <link linkend="int">int</link> *index_,
+                                                         <link linkend="int">int</link> *trailing);
+<link linkend="void">void</link>                <link linkend="pango-glyph-string-get-logical-widths">pango_glyph_string_get_logical_widths</link>
+                                                        (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="int">int</link> embedding_level,
+                                                         <link linkend="int">int</link> *logical_widths);
+#define             <link linkend="PANGO-TYPE-GLYPH-ITEM--CAPS">PANGO_TYPE_GLYPH_ITEM</link>
+<link linkend="PangoGlyphItem">PangoGlyphItem</link> *    <link linkend="pango-glyph-item-copy">pango_glyph_item_copy</link>               (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *orig);
+<link linkend="void">void</link>                <link linkend="pango-glyph-item-free">pango_glyph_item_free</link>               (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item);
+<link linkend="PangoGlyphItem">PangoGlyphItem</link> *    <link linkend="pango-glyph-item-split">pango_glyph_item_split</link>              (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *orig,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> split_index);
+<link linkend="GSList">GSList</link> *            <link linkend="pango-glyph-item-apply-attrs">pango_glyph_item_apply_attrs</link>        (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *list);
+<link linkend="void">void</link>                <link linkend="pango-glyph-item-letter-space">pango_glyph_item_letter_space</link>       (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *log_attrs,
+                                                         <link linkend="int">int</link> letter_spacing);
+<link linkend="void">void</link>                <link linkend="pango-glyph-item-get-logical-widths">pango_glyph_item_get_logical_widths</link> (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> *logical_widths);
+#define             <link linkend="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS">PANGO_TYPE_GLYPH_ITEM_ITER</link>
+<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> * <link linkend="pango-glyph-item-iter-copy">pango_glyph_item_iter_copy</link>         (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *orig);
+<link linkend="void">void</link>                <link linkend="pango-glyph-item-iter-free">pango_glyph_item_iter_free</link>          (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-glyph-item-iter-init-start">pango_glyph_item_iter_init_start</link>    (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-glyph-item-iter-init-end">pango_glyph_item_iter_init_end</link>      (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-glyph-item-iter-next-cluster">pango_glyph_item_iter_next_cluster</link>  (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-glyph-item-iter-prev-cluster">pango_glyph_item_iter_prev_cluster</link>  (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Glyph-Storage.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+<link linkend="pango-shape"><function>pango_shape()</function></link> produces a string of glyphs which
+can be measured or drawn to the screen. The following
+structures are used to store information about
+glyphs.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Glyph-Storage.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PANGO-SCALE--CAPS" role="macro">
+<title>PANGO_SCALE</title>
+<indexterm zone="PANGO-SCALE--CAPS"><primary sortas="PANGO_SCALE">PANGO_SCALE</primary></indexterm><programlisting>#define PANGO_SCALE 1024
+</programlisting>
+<para>
+The <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> macro represents the scale between dimensions used
+for Pango distances and device units. (The definition of device
+units is dependent on the output device; it will typically be pixels
+for a screen, and points for a printer.) <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> is currently
+1024, but this may be changed in the future.
+</para>
+<para>
+When setting font sizes, device units are always considered to be
+points (as in "12 point font"), rather than pixels.
+</para></refsect2>
+<refsect2 id="PANGO-PIXELS--CAPS" role="macro">
+<title>PANGO_PIXELS()</title>
+<indexterm zone="PANGO-PIXELS--CAPS"><primary sortas="PANGO_PIXELS">PANGO_PIXELS</primary></indexterm><programlisting>#define PANGO_PIXELS(d) (((int)(d) + 512) &gt;&gt; 10)
+</programlisting>
+<para>
+Converts a dimension to device units by rounding.
+</para><variablelist role="params">
+<varlistentry><term><parameter>d</parameter>&#160;:</term>
+<listitem><simpara>a dimension in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>rounded dimension in device units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-PIXELS-FLOOR--CAPS" role="macro" condition="since:1.14">
+<title>PANGO_PIXELS_FLOOR()</title>
+<indexterm zone="PANGO-PIXELS-FLOOR--CAPS" role="1.14"><primary sortas="PANGO_PIXELS_FLOOR">PANGO_PIXELS_FLOOR</primary></indexterm><programlisting>#define PANGO_PIXELS_FLOOR(d) (((int)(d)) &gt;&gt; 10)
+</programlisting>
+<para>
+Converts a dimension to device units by flooring.
+</para><variablelist role="params">
+<varlistentry><term><parameter>d</parameter>&#160;:</term>
+<listitem><simpara>a dimension in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>floored dimension in device units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.14</para></refsect2>
+<refsect2 id="PANGO-PIXELS-CEIL--CAPS" role="macro" condition="since:1.14">
+<title>PANGO_PIXELS_CEIL()</title>
+<indexterm zone="PANGO-PIXELS-CEIL--CAPS" role="1.14"><primary sortas="PANGO_PIXELS_CEIL">PANGO_PIXELS_CEIL</primary></indexterm><programlisting>#define PANGO_PIXELS_CEIL(d) (((int)(d) + 1023) &gt;&gt; 10)
+</programlisting>
+<para>
+Converts a dimension to device units by ceiling.
+</para><variablelist role="params">
+<varlistentry><term><parameter>d</parameter>&#160;:</term>
+<listitem><simpara>a dimension in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>ceiled dimension in device units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.14</para></refsect2>
+<refsect2 id="PANGO-UNITS-ROUND--CAPS" role="macro" condition="since:1.18">
+<title>PANGO_UNITS_ROUND()</title>
+<indexterm zone="PANGO-UNITS-ROUND--CAPS" role="1.18"><primary sortas="PANGO_UNITS_ROUND">PANGO_UNITS_ROUND</primary></indexterm><programlisting>#define             PANGO_UNITS_ROUND(d)</programlisting>
+<para>
+Rounds a dimension to whole device units, but does not
+convert it to device units.
+</para><variablelist role="params">
+<varlistentry><term><parameter>d</parameter>&#160;:</term>
+<listitem><simpara>a dimension in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>rounded dimension in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-units-to-double" role="function" condition="since:1.16">
+<title>pango_units_to_double ()</title>
+<indexterm zone="pango-units-to-double" role="1.16"><primary sortas="pango_units_to_double">pango_units_to_double</primary></indexterm><programlisting><link linkend="double">double</link>              pango_units_to_double               (<link linkend="int">int</link> i);</programlisting>
+<para>
+Converts a number in Pango units to floating-point: divides
+it by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>i</parameter>&#160;:</term>
+<listitem><simpara> value in Pango units
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the double value.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-units-from-double" role="function" condition="since:1.16">
+<title>pango_units_from_double ()</title>
+<indexterm zone="pango-units-from-double" role="1.16"><primary sortas="pango_units_from_double">pango_units_from_double</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_units_from_double             (<link linkend="double">double</link> d);</programlisting>
+<para>
+Converts a floating-point number to Pango units: multiplies
+it by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> and rounds to nearest integer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>d</parameter>&#160;:</term>
+<listitem><simpara> double floating-point value
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the value in Pango units.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoRectangle" role="struct">
+<title>PangoRectangle</title>
+<indexterm zone="PangoRectangle"><primary sortas="PangoRectangle">PangoRectangle</primary></indexterm><programlisting>typedef struct {
+  int x;
+  int y;
+  int width;
+  int height;
+} PangoRectangle;
+</programlisting>
+<para>
+The <link linkend="PangoRectangle"><type>PangoRectangle</type></link> structure represents a rectangle. It is frequently
+used to represent the logical or ink extents of a single glyph or section
+of text. (See, for instance, <link linkend="pango-font-get-glyph-extents"><function>pango_font_get_glyph_extents()</function></link>)
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>x</structfield>;</term>
+<listitem><simpara>X coordinate of the left side of the rectangle.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>y</structfield>;</term>
+<listitem><simpara>Y coordinate of the the top side of the rectangle.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>width</structfield>;</term>
+<listitem><simpara>width of the rectangle.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>height</structfield>;</term>
+<listitem><simpara>height of the rectangle.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-ASCENT--CAPS" role="macro">
+<title>PANGO_ASCENT()</title>
+<indexterm zone="PANGO-ASCENT--CAPS"><primary sortas="PANGO_ASCENT">PANGO_ASCENT</primary></indexterm><programlisting>#define PANGO_ASCENT(rect) (-(rect).y)
+</programlisting>
+<para>
+Extracts the <firstterm>ascent</firstterm> from a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+representing glyph extents. The ascent is the distance from the
+baseline to the highest point of the character. This is positive if the
+glyph ascends above the baseline.
+</para><variablelist role="params">
+<varlistentry><term><parameter>rect</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-DESCENT--CAPS" role="macro">
+<title>PANGO_DESCENT()</title>
+<indexterm zone="PANGO-DESCENT--CAPS"><primary sortas="PANGO_DESCENT">PANGO_DESCENT</primary></indexterm><programlisting>#define PANGO_DESCENT(rect) ((rect).y + (rect).height)
+</programlisting>
+<para>
+Extracts the <firstterm>descent</firstterm> from a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+representing glyph extents. The descent is the distance from the
+baseline to the lowest point of the character. This is positive if the
+glyph descends below the baseline.
+</para><variablelist role="params">
+<varlistentry><term><parameter>rect</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-LBEARING--CAPS" role="macro">
+<title>PANGO_LBEARING()</title>
+<indexterm zone="PANGO-LBEARING--CAPS"><primary sortas="PANGO_LBEARING">PANGO_LBEARING</primary></indexterm><programlisting>#define PANGO_LBEARING(rect) ((rect).x)
+</programlisting>
+<para>
+Extracts the <firstterm>left bearing</firstterm> from a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+representing glyph extents. The left bearing is the distance from the
+horizontal origin to the farthest left point of the character.
+This is positive for characters drawn completely to the right of the
+glyph origin.
+</para><variablelist role="params">
+<varlistentry><term><parameter>rect</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-RBEARING--CAPS" role="macro">
+<title>PANGO_RBEARING()</title>
+<indexterm zone="PANGO-RBEARING--CAPS"><primary sortas="PANGO_RBEARING">PANGO_RBEARING</primary></indexterm><programlisting>#define PANGO_RBEARING(rect) ((rect).x + (rect).width)
+</programlisting>
+<para>
+Extracts the <firstterm>right bearing</firstterm> from a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+representing glyph extents. The right bearing is the distance from the
+horizontal origin to the farthest right point of the character.
+This is positive except for characters drawn completely to the left of the
+horizontal origin.
+</para><variablelist role="params">
+<varlistentry><term><parameter>rect</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoRectangle"><type>PangoRectangle</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-extents-to-pixels" role="function" condition="since:1.16">
+<title>pango_extents_to_pixels ()</title>
+<indexterm zone="pango-extents-to-pixels" role="1.16"><primary sortas="pango_extents_to_pixels">pango_extents_to_pixels</primary></indexterm><programlisting><link linkend="void">void</link>                pango_extents_to_pixels             (<link linkend="PangoRectangle">PangoRectangle</link> *inclusive,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *nearest);</programlisting>
+<para>
+Converts extents from Pango units to device units, dividing by the
+<link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> factor and performing rounding.
+</para>
+<para>
+The <parameter>inclusive</parameter> rectangle is converted by flooring the x/y coordinates and extending
+width/height, such that the final rectangle completely includes the original
+rectangle.
+</para>
+<para>
+The <parameter>nearest</parameter> rectangle is converted by rounding the coordinates
+of the rectangle to the nearest device unit (pixel).
+</para>
+<para>
+The rule to which argument to use is: if you want the resulting device-space
+rectangle to completely contain the original rectangle, pass it in as <parameter>inclusive</parameter>.
+If you want two touching-but-not-overlapping rectangles stay
+touching-but-not-overlapping after rounding to device units, pass them in
+as <parameter>nearest</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>inclusive</parameter>&#160;:</term>
+<listitem><simpara> rectangle to round to pixels inclusively, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>nearest</parameter>&#160;:</term>
+<listitem><simpara> rectangle to round to nearest pixels, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoMatrix" role="struct" condition="since:1.6">
+<title>PangoMatrix</title>
+<indexterm zone="PangoMatrix" role="1.6"><primary sortas="PangoMatrix">PangoMatrix</primary></indexterm><programlisting>typedef struct {
+  double xx;
+  double xy;
+  double yx;
+  double yy;
+  double x0;
+  double y0;
+} PangoMatrix;
+</programlisting>
+<para>
+A structure specifying a transformation between user-space
+coordinates and device coordinates. The transformation
+is given by
+</para>
+<para>
+<programlisting>
+x_device = x_user * matrix->xx + y_user * matrix->xy + matrix->x0;
+y_device = x_user * matrix->yx + y_user * matrix->yy + matrix->y0;
+</programlisting></para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>xx</structfield>;</term>
+<listitem><simpara> 1st component of the transformation matrix
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>xy</structfield>;</term>
+<listitem><simpara> 2nd component of the transformation matrix
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>yx</structfield>;</term>
+<listitem><simpara> 3rd component of the transformation matrix
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>yy</structfield>;</term>
+<listitem><simpara> 4th component of the transformation matrix
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>x0</structfield>;</term>
+<listitem><simpara> x translation
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>y0</structfield>;</term>
+<listitem><simpara> y translation
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="PANGO-TYPE-MATRIX--CAPS" role="macro">
+<title>PANGO_TYPE_MATRIX</title>
+<indexterm zone="PANGO-TYPE-MATRIX--CAPS"><primary sortas="PANGO_TYPE_MATRIX">PANGO_TYPE_MATRIX</primary></indexterm><programlisting>#define PANGO_TYPE_MATRIX (pango_matrix_get_type ())
+</programlisting>
+<para>
+The GObject type for <link linkend="PangoMatrix"><type>PangoMatrix</type></link></para>
+<para>
+</para></refsect2>
+<refsect2 id="PANGO-MATRIX-INIT--CAPS" role="macro" condition="since:1.6">
+<title>PANGO_MATRIX_INIT</title>
+<indexterm zone="PANGO-MATRIX-INIT--CAPS" role="1.6"><primary sortas="PANGO_MATRIX_INIT">PANGO_MATRIX_INIT</primary></indexterm><programlisting>#define PANGO_MATRIX_INIT { 1., 0., 0., 1., 0., 0. }
+</programlisting>
+<para>
+Constant that can be used to initialize a PangoMatrix to
+the identity transform.
+</para>
+<para>
+<informalexample><programlisting>
+PangoMatrix matrix = PANGO_MATRIX_INIT;
+pango_matrix_rotate (&amp;matrix, 45.);
+</programlisting></informalexample></para>
+<para>
+</para><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-copy" role="function" condition="since:1.6">
+<title>pango_matrix_copy ()</title>
+<indexterm zone="pango-matrix-copy" role="1.6"><primary sortas="pango_matrix_copy">pango_matrix_copy</primary></indexterm><programlisting><link linkend="PangoMatrix">PangoMatrix</link> *       pango_matrix_copy                   (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);</programlisting>
+<para>
+Copies a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, which should
+              be freed with <link linkend="pango-matrix-free"><function>pango_matrix_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if
+              <parameter>matrix</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-free" role="function" condition="since:1.6">
+<title>pango_matrix_free ()</title>
+<indexterm zone="pango-matrix-free" role="1.6"><primary sortas="pango_matrix_free">pango_matrix_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_free                   (<link linkend="PangoMatrix">PangoMatrix</link> *matrix);</programlisting>
+<para>
+Free a <link linkend="PangoMatrix"><type>PangoMatrix</type></link> created with <link linkend="pango-matrix-copy"><function>pango_matrix_copy()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-translate" role="function" condition="since:1.6">
+<title>pango_matrix_translate ()</title>
+<indexterm zone="pango-matrix-translate" role="1.6"><primary sortas="pango_matrix_translate">pango_matrix_translate</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_translate              (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> tx,
+                                                         <link linkend="double">double</link> ty);</programlisting>
+<para>
+Changes the transformation represented by <parameter>matrix</parameter> to be the
+transformation given by first translating by (<parameter>tx</parameter>, <parameter>ty</parameter>)
+then applying the original transformation.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>tx</parameter>&#160;:</term>
+<listitem><simpara> amount to translate in the X direction
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ty</parameter>&#160;:</term>
+<listitem><simpara> amount to translate in the Y direction
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-scale" role="function" condition="since:1.6">
+<title>pango_matrix_scale ()</title>
+<indexterm zone="pango-matrix-scale" role="1.6"><primary sortas="pango_matrix_scale">pango_matrix_scale</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_scale                  (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> scale_x,
+                                                         <link linkend="double">double</link> scale_y);</programlisting>
+<para>
+Changes the transformation represented by <parameter>matrix</parameter> to be the
+transformation given by first scaling by <parameter>sx</parameter> in the X direction
+and <parameter>sy</parameter> in the Y direction then applying the original
+transformation.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>scale_x</parameter>&#160;:</term>
+<listitem><simpara> amount to scale by in X direction
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>scale_y</parameter>&#160;:</term>
+<listitem><simpara> amount to scale by in Y direction
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-rotate" role="function" condition="since:1.6">
+<title>pango_matrix_rotate ()</title>
+<indexterm zone="pango-matrix-rotate" role="1.6"><primary sortas="pango_matrix_rotate">pango_matrix_rotate</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_rotate                 (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> degrees);</programlisting>
+<para>
+Changes the transformation represented by <parameter>matrix</parameter> to be the
+transformation given by first rotating by <parameter>degrees</parameter> degrees
+counter-clockwise then applying the original transformation.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>degrees</parameter>&#160;:</term>
+<listitem><simpara> degrees to rotate counter-clockwise
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-concat" role="function" condition="since:1.6">
+<title>pango_matrix_concat ()</title>
+<indexterm zone="pango-matrix-concat" role="1.6"><primary sortas="pango_matrix_concat">pango_matrix_concat</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_concat                 (<link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *new_matrix);</programlisting>
+<para>
+Changes the transformation represented by <parameter>matrix</parameter> to be the
+transformation given by first applying transformation
+given by <parameter>new_matrix</parameter> then applying the original transformation.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>new_matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-matrix-transform-point" role="function" condition="since:1.16">
+<title>pango_matrix_transform_point ()</title>
+<indexterm zone="pango-matrix-transform-point" role="1.16"><primary sortas="pango_matrix_transform_point">pango_matrix_transform_point</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_transform_point        (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> *x,
+                                                         <link linkend="double">double</link> *y);</programlisting>
+<para>
+Transforms the point (<parameter>x</parameter>, <parameter>y</parameter>) by <parameter>matrix</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> in/out X position
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> in/out Y position
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-matrix-transform-distance" role="function" condition="since:1.16">
+<title>pango_matrix_transform_distance ()</title>
+<indexterm zone="pango-matrix-transform-distance" role="1.16"><primary sortas="pango_matrix_transform_distance">pango_matrix_transform_distance</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_transform_distance     (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="double">double</link> *dx,
+                                                         <link linkend="double">double</link> *dy);</programlisting>
+<para>
+Transforms the distance vector (<parameter>dx</parameter>,<parameter>dy</parameter>) by <parameter>matrix</parameter>. This is
+similar to <link linkend="pango-matrix-transform-point"><function>pango_matrix_transform_point()</function></link> except that the translation
+components of the transformation are ignored. The calculation of
+the returned vector is as follows:
+</para>
+<para>
+<programlisting>
+dx2 = dx1 * xx + dy1 * xy;
+dy2 = dx1 * yx + dy1 * yy;
+</programlisting>
+</para>
+<para>
+Affine transformations are position invariant, so the same vector
+always transforms to the same vector. If (<parameter>x1</parameter>,<parameter>y1</parameter>) transforms
+to (<parameter>x2</parameter>,<parameter>y2</parameter>) then (<parameter>x1</parameter>+<parameter>dx1</parameter>,<parameter>y1</parameter>+<parameter>dy1</parameter>) will transform to
+(<parameter>x1</parameter>+<parameter>dx2</parameter>,<parameter>y1</parameter>+<parameter>dy2</parameter>) for all values of <parameter>x1</parameter> and <parameter>x2</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dx</parameter>&#160;:</term>
+<listitem><simpara> in/out X component of a distance vector
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dy</parameter>&#160;:</term>
+<listitem><simpara> yn/out Y component of a distance vector
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-matrix-transform-rectangle" role="function" condition="since:1.16">
+<title>pango_matrix_transform_rectangle ()</title>
+<indexterm zone="pango-matrix-transform-rectangle" role="1.16"><primary sortas="pango_matrix_transform_rectangle">pango_matrix_transform_rectangle</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_transform_rectangle    (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *rect);</programlisting>
+<para>
+First transforms <parameter>rect</parameter> using <parameter>matrix</parameter>, then calculates the bounding box
+of the transformed rectangle.  The rectangle should be in Pango units.
+</para>
+<para>
+This function is useful for example when you want to draw a rotated
+<parameter>PangoLayout</parameter> to an image buffer, and want to know how large the image
+should be and how much you should shift the layout when rendering.
+</para>
+<para>
+If you have a rectangle in device units (pixels), use
+<link linkend="pango-matrix-transform-pixel-rectangle"><function>pango_matrix_transform_pixel_rectangle()</function></link>.
+</para>
+<para>
+If you have the rectangle in Pango units and want to convert to
+transformed pixel bounding box, it is more accurate to transform it first
+(using this function) and pass the result to <link linkend="pango-extents-to-pixels"><function>pango_extents_to_pixels()</function></link>,
+first argument, for an inclusive rounded rectangle.
+However, there are valid reasons that you may want to convert
+to pixels first and then transform, for example when the transformed
+coordinates may overflow in Pango units (large matrix translation for
+example).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>rect</parameter>&#160;:</term>
+<listitem><simpara> in/out bounding box in Pango units, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-matrix-transform-pixel-rectangle" role="function" condition="since:1.16">
+<title>pango_matrix_transform_pixel_rectangle ()</title>
+<indexterm zone="pango-matrix-transform-pixel-rectangle" role="1.16"><primary sortas="pango_matrix_transform_pixel_rectangle">pango_matrix_transform_pixel_rectangle</primary></indexterm><programlisting><link linkend="void">void</link>                pango_matrix_transform_pixel_rectangle
+                                                        (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *rect);</programlisting>
+<para>
+First transforms the <parameter>rect</parameter> using <parameter>matrix</parameter>, then calculates the bounding box
+of the transformed rectangle.  The rectangle should be in device units
+(pixels).
+</para>
+<para>
+This function is useful for example when you want to draw a rotated
+<parameter>PangoLayout</parameter> to an image buffer, and want to know how large the image
+should be and how much you should shift the layout when rendering.
+</para>
+<para>
+For better accuracy, you should use <link linkend="pango-matrix-transform-rectangle"><function>pango_matrix_transform_rectangle()</function></link> on
+original rectangle in Pango units and convert to pixels afterward
+using <link linkend="pango-extents-to-pixels"><function>pango_extents_to_pixels()</function></link>'s first argument.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>rect</parameter>&#160;:</term>
+<listitem><simpara> in/out bounding box in device units, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-matrix-get-font-scale-factor" role="function" condition="since:1.12">
+<title>pango_matrix_get_font_scale_factor ()</title>
+<indexterm zone="pango-matrix-get-font-scale-factor" role="1.12"><primary sortas="pango_matrix_get_font_scale_factor">pango_matrix_get_font_scale_factor</primary></indexterm><programlisting><link linkend="double">double</link>              pango_matrix_get_font_scale_factor  (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);</programlisting>
+<para>
+Returns the scale factor of a matrix on the height of the font.
+That is, the scale factor in the direction perpendicular to the
+vector that the X coordinate is mapped to.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the scale factor of <parameter>matrix</parameter> on the height of the font,
+or 1.0 if <parameter>matrix</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.12</para></refsect2>
+<refsect2 id="PangoGlyph" role="typedef">
+<title>PangoGlyph</title>
+<indexterm zone="PangoGlyph"><primary sortas="PangoGlyph">PangoGlyph</primary></indexterm><programlisting>typedef guint32 PangoGlyph;
+</programlisting>
+<para>
+A <link linkend="PangoGlyph"><type>PangoGlyph</type></link> represents a single glyph in the output form of a string.
+</para></refsect2>
+<refsect2 id="PANGO-GLYPH-EMPTY--CAPS" role="macro">
+<title>PANGO_GLYPH_EMPTY</title>
+<indexterm zone="PANGO-GLYPH-EMPTY--CAPS"><primary sortas="PANGO_GLYPH_EMPTY">PANGO_GLYPH_EMPTY</primary></indexterm><programlisting>#define PANGO_GLYPH_EMPTY           ((PangoGlyph)0x0FFFFFFF)
+</programlisting>
+<para>
+The <link linkend="PANGO-GLYPH-EMPTY--CAPS"><literal>PANGO_GLYPH_EMPTY</literal></link> macro represents a <link linkend="PangoGlyph"><type>PangoGlyph</type></link> value that has a
+special meaning, which is a zero-width empty glyph.  This is useful for
+example in shaper modules, to use as the glyph for various zero-width
+Unicode characters (those passing <link linkend="pango-is-zero-width"><function>pango_is_zero_width()</function></link>).
+</para></refsect2>
+<refsect2 id="PANGO-GLYPH-INVALID-INPUT--CAPS" role="macro" condition="since:1.20">
+<title>PANGO_GLYPH_INVALID_INPUT</title>
+<indexterm zone="PANGO-GLYPH-INVALID-INPUT--CAPS" role="1.20"><primary sortas="PANGO_GLYPH_INVALID_INPUT">PANGO_GLYPH_INVALID_INPUT</primary></indexterm><programlisting>#define PANGO_GLYPH_INVALID_INPUT   ((PangoGlyph)0xFFFFFFFF)
+</programlisting>
+<para>
+The <link linkend="PANGO-GLYPH-EMPTY--CAPS"><literal>PANGO_GLYPH_EMPTY</literal></link> macro represents a <link linkend="PangoGlyph"><type>PangoGlyph</type></link> value that has a
+special meaning of invalid input.  <link linkend="PangoLayout"><type>PangoLayout</type></link> produces one such glyph
+per invalid input UTF-8 byte and such a glyph is rendered as a crossed
+box.
+Note that this value is defined such that it has the <link linkend="PANGO-GLYPH-UNKNOWN-FLAG--CAPS"><literal>PANGO_GLYPH_UNKNOWN_FLAG</literal></link>
+on.
+</para><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="PANGO-GLYPH-UNKNOWN-FLAG--CAPS" role="macro">
+<title>PANGO_GLYPH_UNKNOWN_FLAG</title>
+<indexterm zone="PANGO-GLYPH-UNKNOWN-FLAG--CAPS"><primary sortas="PANGO_GLYPH_UNKNOWN_FLAG">PANGO_GLYPH_UNKNOWN_FLAG</primary></indexterm><programlisting>#define PANGO_GLYPH_UNKNOWN_FLAG    ((PangoGlyph)0x10000000)
+</programlisting>
+<para>
+The <link linkend="PANGO-GLYPH-UNKNOWN-FLAG--CAPS"><literal>PANGO_GLYPH_UNKNOWN_FLAG</literal></link> macro is a flag value that can be added to
+a <link linkend="gunichar"><type>gunichar</type></link> value of a valid Unicode character, to produce a <link linkend="PangoGlyph"><type>PangoGlyph</type></link>
+value, representing an unknown-character glyph for the respective <link linkend="gunichar"><type>gunichar</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-GET-UNKNOWN-GLYPH--CAPS" role="macro">
+<title>PANGO_GET_UNKNOWN_GLYPH()</title>
+<indexterm zone="PANGO-GET-UNKNOWN-GLYPH--CAPS"><primary sortas="PANGO_GET_UNKNOWN_GLYPH">PANGO_GET_UNKNOWN_GLYPH</primary></indexterm><programlisting>#define PANGO_GET_UNKNOWN_GLYPH(wc) ((PangoGlyph)(wc)|PANGO_GLYPH_UNKNOWN_FLAG)
+</programlisting>
+<para>
+Returns a <link linkend="PangoGlyph"><type>PangoGlyph</type></link> value that means no glyph was found for <parameter>wc</parameter>.
+The way this unknown glyphs are rendered is backend specific.  For example,
+a box with the hexadecimal Unicode code-point of the character written in it
+is what is done in the most common backends.
+</para><variablelist role="params">
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara>a Unicode character
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGlyphInfo" role="struct">
+<title>PangoGlyphInfo</title>
+<indexterm zone="PangoGlyphInfo"><primary sortas="PangoGlyphInfo">PangoGlyphInfo</primary></indexterm><programlisting>typedef struct {
+  PangoGlyph    glyph;
+  PangoGlyphGeometry geometry;
+  PangoGlyphVisAttr  attr;
+} PangoGlyphInfo;
+</programlisting>
+<para>
+The <link linkend="PangoGlyphInfo"><type>PangoGlyphInfo</type></link> structure represents a single glyph together with
+positioning information and visual attributes.
+It contains the following fields.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoGlyph">PangoGlyph</link>&#160;<structfield>glyph</structfield>;</term>
+<listitem><simpara>the glyph itself.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoGlyphGeometry">PangoGlyphGeometry</link>&#160;<structfield>geometry</structfield>;</term>
+<listitem><simpara>the positional information about the glyph.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoGlyphVisAttr">PangoGlyphVisAttr</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the visual attributes of the glyph.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGlyphGeometry" role="struct">
+<title>PangoGlyphGeometry</title>
+<indexterm zone="PangoGlyphGeometry"><primary sortas="PangoGlyphGeometry">PangoGlyphGeometry</primary></indexterm><programlisting>typedef struct {
+  PangoGlyphUnit width;
+  PangoGlyphUnit x_offset;
+  PangoGlyphUnit y_offset;
+} PangoGlyphGeometry;
+</programlisting>
+<para>
+The <link linkend="PangoGlyphGeometry"><type>PangoGlyphGeometry</type></link> structure contains width and positioning
+information for a single glyph.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoGlyphUnit">PangoGlyphUnit</link>&#160;<structfield>width</structfield>;</term>
+<listitem><simpara>the logical width to use for the the character.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoGlyphUnit">PangoGlyphUnit</link>&#160;<structfield>x_offset</structfield>;</term>
+<listitem><simpara>horizontal offset from nominal character position.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoGlyphUnit">PangoGlyphUnit</link>&#160;<structfield>y_offset</structfield>;</term>
+<listitem><simpara>vertical offset from nominal character position.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGlyphUnit" role="typedef">
+<title>PangoGlyphUnit</title>
+<indexterm zone="PangoGlyphUnit"><primary sortas="PangoGlyphUnit">PangoGlyphUnit</primary></indexterm><programlisting>typedef gint32 PangoGlyphUnit;
+</programlisting>
+<para>
+The <link linkend="PangoGlyphUnit"><type>PangoGlyphUnit</type></link> type is used to store dimensions within
+Pango. Dimensions are stored in 1/<link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> of a device unit.
+(A device unit might be a pixel for screen display, or
+a point on a printer.) <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> is currently 1024, and
+may change in the future (unlikely though), but you should not
+depend on its exact value. The <link linkend="PANGO-PIXELS--CAPS"><function>PANGO_PIXELS()</function></link> macro can be used
+to convert from glyph units into device units with correct rounding.
+</para></refsect2>
+<refsect2 id="PangoGlyphVisAttr" role="struct">
+<title>PangoGlyphVisAttr</title>
+<indexterm zone="PangoGlyphVisAttr"><primary sortas="PangoGlyphVisAttr">PangoGlyphVisAttr</primary></indexterm><programlisting>typedef struct {
+  guint is_cluster_start : 1;
+} PangoGlyphVisAttr;
+</programlisting>
+<para>
+The PangoGlyphVisAttr is used to communicate information between
+the shaping phase and the rendering phase.  More attributes may be
+added in the future.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_cluster_start</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>set for the first logical glyph in each cluster. (Clusters
+                  are stored in visual order, within the cluster, glyphs
+                  are always ordered in logical order, since visual
+                  order is meaningless; that is, in Arabic text, accent glyphs
+                  follow the glyphs for the base character.)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGlyphString" role="struct">
+<title>PangoGlyphString</title>
+<indexterm zone="PangoGlyphString"><primary sortas="PangoGlyphString">PangoGlyphString</primary></indexterm><programlisting>typedef struct {
+  gint num_glyphs;
+
+  PangoGlyphInfo *glyphs;
+
+  /* This is a memory inefficient way of representing the information
+   * here - each value gives the byte index within the text
+   * corresponding to the glyph string of the start of the cluster to
+   * which the glyph belongs.
+   */
+  gint *log_clusters;
+} PangoGlyphString;
+</programlisting>
+<para>
+The <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> structure is used to store strings
+of glyphs with geometry and visual attribute information.
+The storage for the glyph information is owned
+by the structure which simplifies memory management.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>num_glyphs</structfield>;</term>
+<listitem><simpara>the number of glyphs in the string.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoGlyphInfo">PangoGlyphInfo</link>&#160;*<structfield>glyphs</structfield>;</term>
+<listitem><simpara>an array of <link linkend="PangoGlyphInfo"><type>PangoGlyphInfo</type></link> structures of length <structfield>num_glyphs</structfield>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;*<structfield>log_clusters</structfield>;</term>
+<listitem><simpara>for each glyph, byte index of the starting character for the
+cluster. The indices are relative to the start of the text
+corresponding to the PangoGlyphString.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGlyphItem" role="struct">
+<title>PangoGlyphItem</title>
+<indexterm zone="PangoGlyphItem"><primary sortas="PangoGlyphItem">PangoGlyphItem</primary></indexterm><programlisting>typedef struct {
+  PangoItem        *item;
+  PangoGlyphString *glyphs;
+} PangoGlyphItem;
+</programlisting>
+<para>
+A <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link> is a pair of a <link linkend="PangoItem"><type>PangoItem</type></link> and the glyphs
+resulting from shaping the text corresponding to an item.
+As an example of the usage of <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>, the results
+of shaping text with <link linkend="PangoLayout"><type>PangoLayout</type></link> is a list of <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>,
+each of which contains a list of <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoItem">PangoItem</link>&#160;*<structfield>item</structfield>;</term>
+<listitem><simpara>a <link linkend="PangoItem"><type>PangoItem</type></link> structure that provides information
+       about a segment of text.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoGlyphString">PangoGlyphString</link>&#160;*<structfield>glyphs</structfield>;</term>
+<listitem><simpara>the glyphs obtained by shaping the text
+         corresponding to <parameter>item</parameter>.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGlyphItemIter" role="struct" condition="since:1.22">
+<title>PangoGlyphItemIter</title>
+<indexterm zone="PangoGlyphItemIter" role="1.22"><primary sortas="PangoGlyphItemIter">PangoGlyphItemIter</primary></indexterm><programlisting>typedef struct {
+  PangoGlyphItem *glyph_item;
+  const gchar *text;
+
+  int start_glyph;
+  int start_index;
+  int start_char;
+
+  int end_glyph;
+  int end_index;
+  int end_char;
+} PangoGlyphItemIter;
+</programlisting>
+<para>
+A <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> is an iterator over the clusters in a
+<link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>.  The <firstterm>forward direction</firstterm> of the
+iterator is the logical direction of text.  That is, with increasing
+<parameter>start_index</parameter> and <parameter>start_char</parameter> values.  If <parameter>glyph_item</parameter> is right-to-left
+(that is, if <literal><parameter>glyph_item->item->analysis.level</parameter></literal> is odd),
+then <parameter>start_glyph</parameter> decreases as the iterator moves forward.  Moreover,
+in right-to-left cases, <parameter>start_glyph</parameter> is greater than <parameter>end_glyph</parameter>.
+An iterator should be initialized using either of
+<link linkend="pango-glyph-item-iter-init-start"><function>pango_glyph_item_iter_init_start()</function></link> and
+<link linkend="pango-glyph-item-iter-init-end"><function>pango_glyph_item_iter_init_end()</function></link>, for forward and backward iteration
+respectively, and walked over using any desired mixture of
+<link linkend="pango-glyph-item-iter-next-cluster"><function>pango_glyph_item_iter_next_cluster()</function></link> and
+<link linkend="pango-glyph-item-iter-prev-cluster"><function>pango_glyph_item_iter_prev_cluster()</function></link>.  A common idiom for doing a
+forward iteration over the clusters is:
+<programlisting>
+PangoGlyphItemIter cluster_iter;
+gboolean have_cluster;
+for (have_cluster = pango_glyph_item_iter_init_start (&amp;cluster_iter,
+                                                      glyph_item, text);
+     have_cluster;
+     have_cluster = pango_glyph_item_iter_next_cluster (&amp;cluster_iter))
+{
+  ...
+}
+</programlisting>
+Note that <parameter>text</parameter> is the start of the text for layout, which is then
+indexed by <literal><parameter>glyph_item->item->offset</parameter></literal> to get to the
+text of <parameter>glyph_item</parameter>.  The <parameter>start_index</parameter> and <parameter>end_index</parameter> values can directly
+index into <parameter>text</parameter>.  The <parameter>start_glyph</parameter>, <parameter>end_glyph</parameter>, <parameter>start_char</parameter>, and <parameter>end_char</parameter>
+values however are zero-based for the <parameter>glyph_item</parameter>.  For each cluster, the
+item pointed at by the start variables is included in the cluster while
+the one pointed at by end variables is not.
+None of the members of a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> should be modified manually.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoGlyphItem">PangoGlyphItem</link>&#160;*<structfield>glyph_item</structfield>;</term>
+<listitem><simpara>the <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link> this iterator iterates over
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="gchar">gchar</link>&#160;*<structfield>text</structfield>;</term>
+<listitem><simpara>the UTF-8 text that <parameter>glyph_item</parameter> refers to
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>start_glyph</structfield>;</term>
+<listitem><simpara>starting glyph of the cluster
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>start_index</structfield>;</term>
+<listitem><simpara>starting text index of the cluster
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>start_char</structfield>;</term>
+<listitem><simpara>starting number of characters of the cluster
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>end_glyph</structfield>;</term>
+<listitem><simpara>ending glyph of the cluster
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>end_index</structfield>;</term>
+<listitem><simpara>ending text index of the cluster
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>end_char</structfield>;</term>
+<listitem><simpara>ending number of characters of the cluster
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="PANGO-TYPE-GLYPH-STRING--CAPS" role="macro">
+<title>PANGO_TYPE_GLYPH_STRING</title>
+<indexterm zone="PANGO-TYPE-GLYPH-STRING--CAPS"><primary sortas="PANGO_TYPE_GLYPH_STRING">PANGO_TYPE_GLYPH_STRING</primary></indexterm><programlisting>#define PANGO_TYPE_GLYPH_STRING (pango_glyph_string_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>.
+</para></refsect2>
+<refsect2 id="pango-glyph-string-new" role="function">
+<title>pango_glyph_string_new ()</title>
+<indexterm zone="pango-glyph-string-new"><primary sortas="pango_glyph_string_new">pango_glyph_string_new</primary></indexterm><programlisting><link linkend="PangoGlyphString">PangoGlyphString</link> *  pango_glyph_string_new              (void);</programlisting>
+<para>
+Create a new <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>, which
+              should be freed with <link linkend="pango-glyph-string-free"><function>pango_glyph_string_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-copy" role="function">
+<title>pango_glyph_string_copy ()</title>
+<indexterm zone="pango-glyph-string-copy"><primary sortas="pango_glyph_string_copy">pango_glyph_string_copy</primary></indexterm><programlisting><link linkend="PangoGlyphString">PangoGlyphString</link> *  pango_glyph_string_copy             (<link linkend="PangoGlyphString">PangoGlyphString</link> *string);</programlisting>
+<para>
+Copy a glyph string and associated storage.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>string</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>, which
+              should be freed with <link linkend="pango-glyph-string-free"><function>pango_glyph_string_free()</function></link>,
+              or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>string</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-set-size" role="function">
+<title>pango_glyph_string_set_size ()</title>
+<indexterm zone="pango-glyph-string-set-size"><primary sortas="pango_glyph_string_set_size">pango_glyph_string_set_size</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_set_size         (<link linkend="PangoGlyphString">PangoGlyphString</link> *string,
+                                                         <link linkend="gint">gint</link> new_len);</programlisting>
+<para>
+Resize a glyph string to the given length.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>string</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>new_len</parameter>&#160;:</term>
+<listitem><simpara>   the new length of the string.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-free" role="function">
+<title>pango_glyph_string_free ()</title>
+<indexterm zone="pango-glyph-string-free"><primary sortas="pango_glyph_string_free">pango_glyph_string_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_free             (<link linkend="PangoGlyphString">PangoGlyphString</link> *string);</programlisting>
+<para>
+Free a glyph string and associated storage.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>string</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-extents" role="function">
+<title>pango_glyph_string_extents ()</title>
+<indexterm zone="pango-glyph-string-extents"><primary sortas="pango_glyph_string_extents">pango_glyph_string_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_extents          (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Compute the logical and ink extents of a glyph string. See the documentation
+for <link linkend="pango-font-get-glyph-extents"><function>pango_font_get_glyph_extents()</function></link> for details about the interpretation
+of the rectangles.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>   a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>     a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the extents of the glyph string as drawn
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the glyph string
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-extents-range" role="function">
+<title>pango_glyph_string_extents_range ()</title>
+<indexterm zone="pango-glyph-string-extents-range"><primary sortas="pango_glyph_string_extents_range">pango_glyph_string_extents_range</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_extents_range    (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> start,
+                                                         <link linkend="int">int</link> end,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Computes the extents of a sub-portion of a glyph string. The extents are
+relative to the start of the glyph string range (the origin of their
+coordinate system is at the start of the range, not at the start of the entire
+glyph string).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>   a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>start</parameter>&#160;:</term>
+<listitem><simpara>    start index
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>end</parameter>&#160;:</term>
+<listitem><simpara>      end index (the range is the set of bytes with
+             indices such that start &lt;= index &lt; end)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>     a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the extents of the glyph string range as drawn
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the glyph string range
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-get-width" role="function" condition="since:1.14">
+<title>pango_glyph_string_get_width ()</title>
+<indexterm zone="pango-glyph-string-get-width" role="1.14"><primary sortas="pango_glyph_string_get_width">pango_glyph_string_get_width</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_glyph_string_get_width        (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);</programlisting>
+<para>
+Computes the logical width of the glyph string as can also be computed
+using <link linkend="pango-glyph-string-extents"><function>pango_glyph_string_extents()</function></link>.  However, since this only computes the
+width, it's much faster.  This is in fact only a convenience function that
+computes the sum of geometry.width for each glyph in the <parameter>glyphs</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>   a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the logical width of the glyph string.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.14</para></refsect2>
+<refsect2 id="pango-glyph-string-index-to-x" role="function">
+<title>pango_glyph_string_index_to_x ()</title>
+<indexterm zone="pango-glyph-string-index-to-x"><primary sortas="pango_glyph_string_index_to_x">pango_glyph_string_index_to_x</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_index_to_x       (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="gboolean">gboolean</link> trailing,
+                                                         <link linkend="int">int</link> *x_pos);</programlisting>
+<para>
+Converts from character position to x position. (X position
+is measured from the left edge of the run). Character positions
+are computed by dividing up each cluster into equal portions.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>    the glyphs return from <link linkend="pango-shape"><function>pango_shape()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text for the run
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    the number of bytes (not characters) in <parameter>text</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>analysis</parameter>&#160;:</term>
+<listitem><simpara>  the analysis information return from <link linkend="pango-itemize"><function>pango_itemize()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>    the byte index within <parameter>text</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>trailing</parameter>&#160;:</term>
+<listitem><simpara>  whether we should compute the result for the beginning (<link linkend="FALSE--CAPS"><literal>FALSE</literal></link>)
+            or end (<link linkend="TRUE--CAPS"><literal>TRUE</literal></link>) of the character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x_pos</parameter>&#160;:</term>
+<listitem><simpara>     location to store result
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-x-to-index" role="function">
+<title>pango_glyph_string_x_to_index ()</title>
+<indexterm zone="pango-glyph-string-x-to-index"><primary sortas="pango_glyph_string_x_to_index">pango_glyph_string_x_to_index</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_x_to_index       (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="int">int</link> x_pos,
+                                                         <link linkend="int">int</link> *index_,
+                                                         <link linkend="int">int</link> *trailing);</programlisting>
+<para>
+Convert from x offset to character position. Character positions
+are computed by dividing up each cluster into equal portions.
+In scripts where positioning within a cluster is not allowed
+(such as Thai), the returned value may not be a valid cursor
+position; the caller must combine the result with the logical
+attributes for the text to compute the valid cursor position.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>    the glyphs returned from <link linkend="pango-shape"><function>pango_shape()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text for the run
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    the number of bytes (not characters) in text.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>analysis</parameter>&#160;:</term>
+<listitem><simpara>  the analysis information return from <link linkend="pango-itemize"><function>pango_itemize()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x_pos</parameter>&#160;:</term>
+<listitem><simpara>     the x offset (in Pango units)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>    location to store calculated byte index within <parameter>text</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>trailing</parameter>&#160;:</term>
+<listitem><simpara>  location to store a boolean indicating
+            whether the user clicked on the leading or trailing
+            edge of the character.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-glyph-string-get-logical-widths" role="function">
+<title>pango_glyph_string_get_logical_widths ()</title>
+<indexterm zone="pango-glyph-string-get-logical-widths"><primary sortas="pango_glyph_string_get_logical_widths">pango_glyph_string_get_logical_widths</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_string_get_logical_widths
+                                                        (<link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="int">int</link> embedding_level,
+                                                         <link linkend="int">int</link> *logical_widths);</programlisting>
+<para>
+Given a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> resulting from <link linkend="pango-shape"><function>pango_shape()</function></link> and the corresponding
+text, determine the screen width corresponding to each character. When
+multiple characters compose a single cluster, the width of the entire
+cluster is divided equally among the characters.
+</para>
+<para>
+See also <link linkend="pango-glyph-item-get-logical-widths"><function>pango_glyph_item_get_logical_widths()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> the text corresponding to the glyphs
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> the length of <parameter>text</parameter>, in bytes
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>embedding_level</parameter>&#160;:</term>
+<listitem><simpara> the embedding level of the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_widths</parameter>&#160;:</term>
+<listitem><simpara> an array whose length is the number of characters in
+                 text (equal to g_utf8_strlen (text, length) unless
+                 text has NUL bytes)
+                 to be filled in with the resulting character widths.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-GLYPH-ITEM--CAPS" role="macro" condition="since:1.20">
+<title>PANGO_TYPE_GLYPH_ITEM</title>
+<indexterm zone="PANGO-TYPE-GLYPH-ITEM--CAPS" role="1.20"><primary sortas="PANGO_TYPE_GLYPH_ITEM">PANGO_TYPE_GLYPH_ITEM</primary></indexterm><programlisting>#define PANGO_TYPE_GLYPH_ITEM (pango_glyph_item_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>.
+</para><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-glyph-item-copy" role="function" condition="since:1.20">
+<title>pango_glyph_item_copy ()</title>
+<indexterm zone="pango-glyph-item-copy" role="1.20"><primary sortas="pango_glyph_item_copy">pango_glyph_item_copy</primary></indexterm><programlisting><link linkend="PangoGlyphItem">PangoGlyphItem</link> *    pango_glyph_item_copy               (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *orig);</programlisting>
+<para>
+Make a deep copy of an existing <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>, which should
+              be freed with <link linkend="pango-glyph-item-free"><function>pango_glyph_item_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if <parameter>orig</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-glyph-item-free" role="function" condition="since:1.6">
+<title>pango_glyph_item_free ()</title>
+<indexterm zone="pango-glyph-item-free" role="1.6"><primary sortas="pango_glyph_item_free">pango_glyph_item_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_item_free               (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item);</programlisting>
+<para>
+Frees a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link> and resources to which it points.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-glyph-item-split" role="function" condition="since:1.2">
+<title>pango_glyph_item_split ()</title>
+<indexterm zone="pango-glyph-item-split" role="1.2"><primary sortas="pango_glyph_item_split">pango_glyph_item_split</primary></indexterm><programlisting><link linkend="PangoGlyphItem">PangoGlyphItem</link> *    pango_glyph_item_split              (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *orig,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> split_index);</programlisting>
+<para>
+Modifies <parameter>orig</parameter> to cover only the text after <parameter>split_index</parameter>, and
+returns a new item that covers the text before <parameter>split_index</parameter> that
+used to be in <parameter>orig</parameter>. You can think of <parameter>split_index</parameter> as the length of
+the returned item. <parameter>split_index</parameter> may not be 0, and it may not be
+greater than or equal to the length of <parameter>orig</parameter> (that is, there must
+be at least one byte assigned to each item, you can't create a
+zero-length item).
+</para>
+<para>
+This function is similar in function to <link linkend="pango-item-split"><function>pango_item_split()</function></link> (and uses
+it internally.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoItem"><type>PangoItem</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text to which positions in <parameter>orig</parameter> apply
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>split_index</parameter>&#160;:</term>
+<listitem><simpara> byte index of position to split item, relative to the start of the item
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated item representing text before
+              <parameter>split_index</parameter>, which should be freed
+              with <link linkend="pango-glyph-item-free"><function>pango_glyph_item_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-glyph-item-apply-attrs" role="function" condition="since:1.2">
+<title>pango_glyph_item_apply_attrs ()</title>
+<indexterm zone="pango-glyph-item-apply-attrs" role="1.2"><primary sortas="pango_glyph_item_apply_attrs">pango_glyph_item_apply_attrs</primary></indexterm><programlisting><link linkend="GSList">GSList</link> *            pango_glyph_item_apply_attrs        (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *list);</programlisting>
+<para>
+Splits a shaped item (PangoGlyphItem) into multiple items based
+on an attribute list. The idea is that if you have attributes
+that don't affect shaping, such as color or underline, to avoid
+affecting shaping, you filter them out (<link linkend="pango-attr-list-filter"><function>pango_attr_list_filter()</function></link>),
+apply the shaping process and then reapply them to the result using
+this function.
+</para>
+<para>
+All attributes that start or end inside a cluster are applied
+to that cluster; for instance, if half of a cluster is underlined
+and the other-half strikethrough, then the cluster will end
+up with both underline and strikethrough attributes. In these
+cases, it may happen that item->extra_attrs for some of the
+result items can have multiple attributes of the same type.
+</para>
+<para>
+This function takes ownership of <parameter>glyph_item</parameter>; it will be reused
+as one of the elements in the list.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> a shaped item
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text that <parameter>list</parameter> applies to
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of glyph items resulting from splitting
+  <parameter>glyph_item</parameter>. Free the elements using <link linkend="pango-glyph-item-free"><function>pango_glyph_item_free()</function></link>,
+  the list using <link linkend="g-slist-free"><function>g_slist_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-glyph-item-letter-space" role="function" condition="since:1.6">
+<title>pango_glyph_item_letter_space ()</title>
+<indexterm zone="pango-glyph-item-letter-space" role="1.6"><primary sortas="pango_glyph_item_letter_space">pango_glyph_item_letter_space</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_item_letter_space       (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *log_attrs,
+                                                         <link linkend="int">int</link> letter_spacing);</programlisting>
+<para>
+Adds spacing between the graphemes of <parameter>glyph_item</parameter> to
+give the effect of typographic letter spacing.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text that <parameter>glyph_item</parameter> corresponds to
+  (glyph_item->item->offset is an offset from the
+   start of <parameter>text</parameter>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>log_attrs</parameter>&#160;:</term>
+<listitem><simpara> logical attributes for the item (the
+  first logical attribute refers to the position
+  before the first character in the item)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>letter_spacing</parameter>&#160;:</term>
+<listitem><simpara> amount of letter spacing to add
+  in Pango units. May be negative, though too large
+  negative values will give ugly results.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-glyph-item-get-logical-widths" role="function" condition="since:1.26">
+<title>pango_glyph_item_get_logical_widths ()</title>
+<indexterm zone="pango-glyph-item-get-logical-widths" role="1.26"><primary sortas="pango_glyph_item_get_logical_widths">pango_glyph_item_get_logical_widths</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_item_get_logical_widths (<link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> *logical_widths);</programlisting>
+<para>
+Given a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link> and the corresponding
+text, determine the screen width corresponding to each character. When
+multiple characters compose a single cluster, the width of the entire
+cluster is divided equally among the characters.
+</para>
+<para>
+See also <link linkend="pango-glyph-string-get-logical-widths"><function>pango_glyph_string_get_logical_widths()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text that <parameter>glyph_item</parameter> corresponds to
+  (glyph_item->item->offset is an offset from the
+   start of <parameter>text</parameter>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_widths</parameter>&#160;:</term>
+<listitem><simpara> an array whose length is the number of characters in
+                 glyph_item (equal to glyph_item->item->num_chars)
+                 to be filled in with the resulting character widths.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.26</para></refsect2>
+<refsect2 id="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS" role="macro" condition="since:1.22">
+<title>PANGO_TYPE_GLYPH_ITEM_ITER</title>
+<indexterm zone="PANGO-TYPE-GLYPH-ITEM-ITER--CAPS" role="1.22"><primary sortas="PANGO_TYPE_GLYPH_ITEM_ITER">PANGO_TYPE_GLYPH_ITEM_ITER</primary></indexterm><programlisting>#define PANGO_TYPE_GLYPH_ITEM_ITER (pango_glyph_item_iter_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>.
+</para><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-glyph-item-iter-copy" role="function" condition="since:1.22">
+<title>pango_glyph_item_iter_copy ()</title>
+<indexterm zone="pango-glyph-item-iter-copy" role="1.22"><primary sortas="pango_glyph_item_iter_copy">pango_glyph_item_iter_copy</primary></indexterm><programlisting><link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> * pango_glyph_item_iter_copy         (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *orig);</programlisting>
+<para>
+Make a shallow copy of an existing <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>, which should
+              be freed with <link linkend="pango-glyph-item-iter-free"><function>pango_glyph_item_iter_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if <parameter>orig</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-glyph-item-iter-free" role="function" condition="since:1.22">
+<title>pango_glyph_item_iter_free ()</title>
+<indexterm zone="pango-glyph-item-iter-free" role="1.22"><primary sortas="pango_glyph_item_iter_free">pango_glyph_item_iter_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_glyph_item_iter_free          (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter);</programlisting>
+<para>
+Frees a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> created by <link linkend="pango-glyph-item-iter-copy"><function>pango_glyph_item_iter_copy()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-glyph-item-iter-init-start" role="function" condition="since:1.22">
+<title>pango_glyph_item_iter_init_start ()</title>
+<indexterm zone="pango-glyph-item-iter-init-start" role="1.22"><primary sortas="pango_glyph_item_iter_init_start">pango_glyph_item_iter_init_start</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_glyph_item_iter_init_start    (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text);</programlisting>
+<para>
+Initializes a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> structure to point to the
+first cluster in a glyph item.
+See <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> for details of cluster orders.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> the glyph item to iterate over
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text corresponding to the glyph item
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if there are no clusters in the glyph item
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-glyph-item-iter-init-end" role="function" condition="since:1.22">
+<title>pango_glyph_item_iter_init_end ()</title>
+<indexterm zone="pango-glyph-item-iter-init-end" role="1.22"><primary sortas="pango_glyph_item_iter_init_end">pango_glyph_item_iter_init_end</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_glyph_item_iter_init_end      (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         const <link linkend="char">char</link> *text);</programlisting>
+<para>
+Initializes a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> structure to point to the
+last cluster in a glyph item.
+See <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> for details of cluster orders.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> the glyph item to iterate over
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text corresponding to the glyph item
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if there are no clusters in the glyph item
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-glyph-item-iter-next-cluster" role="function" condition="since:1.22">
+<title>pango_glyph_item_iter_next_cluster ()</title>
+<indexterm zone="pango-glyph-item-iter-next-cluster" role="1.22"><primary sortas="pango_glyph_item_iter_next_cluster">pango_glyph_item_iter_next_cluster</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_glyph_item_iter_next_cluster  (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter);</programlisting>
+<para>
+Advances the iterator to the next cluster in the glyph item.
+See <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> for details of cluster orders.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the iterator was advanced, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if we were already on the
+ last cluster.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-glyph-item-iter-prev-cluster" role="function" condition="since:1.22">
+<title>pango_glyph_item_iter_prev_cluster ()</title>
+<indexterm zone="pango-glyph-item-iter-prev-cluster" role="1.22"><primary sortas="pango_glyph_item_iter_prev_cluster">pango_glyph_item_iter_prev_cluster</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_glyph_item_iter_prev_cluster  (<link linkend="PangoGlyphItemIter">PangoGlyphItemIter</link> *iter);</programlisting>
+<para>
+Moves the iterator to the preceding cluster in the glyph item.
+See <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link> for details of cluster orders.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItemIter"><type>PangoGlyphItemIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the iterator was moved, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if we were already on the
+ first cluster.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/layout.xml b/docs/xml/layout.xml
new file mode 100755 (executable)
index 0000000..8c1f300
--- /dev/null
@@ -0,0 +1,2127 @@
+<refentry id="pango-Layout-Objects">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Layout-Objects.top_of_page">Layout Objects</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Layout Objects</refname>
+<refpurpose>High-level layout driver objects</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Layout-Objects.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoLayout"/>
+<synopsis>
+                    <link linkend="PangoLayout-struct">PangoLayout</link>;
+                    <link linkend="PangoLayoutIter">PangoLayoutIter</link>;
+<link linkend="PangoLayout">PangoLayout</link> *       <link linkend="pango-layout-new">pango_layout_new</link>                    (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="PangoLayout">PangoLayout</link> *       <link linkend="pango-layout-copy">pango_layout_copy</link>                   (<link linkend="PangoLayout">PangoLayout</link> *src);
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-layout-get-context">pango_layout_get_context</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-context-changed">pango_layout_context_changed</link>        (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-text">pango_layout_set_text</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length);
+const <link linkend="char">char</link> *        <link linkend="pango-layout-get-text">pango_layout_get_text</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-markup">pango_layout_set_markup</link>             (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="char">char</link> *markup,
+                                                         <link linkend="int">int</link> length);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-markup-with-accel">pango_layout_set_markup_with_accel</link>  (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="char">char</link> *markup,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="gunichar">gunichar</link> accel_marker,
+                                                         <link linkend="gunichar">gunichar</link> *accel_char);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-attributes">pango_layout_set_attributes</link>         (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *attrs);
+<link linkend="PangoAttrList">PangoAttrList</link> *     <link linkend="pango-layout-get-attributes">pango_layout_get_attributes</link>         (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-font-description">pango_layout_set_font_description</link>   (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+const <link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-layout-get-font-description">pango_layout_get_font_description</link>
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-width">pango_layout_set_width</link>              (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> width);
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-width">pango_layout_get_width</link>              (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-height">pango_layout_set_height</link>             (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> height);
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-height">pango_layout_get_height</link>             (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-wrap">pango_layout_set_wrap</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoWrapMode">PangoWrapMode</link> wrap);
+<link linkend="PangoWrapMode">PangoWrapMode</link>       <link linkend="pango-layout-get-wrap">pango_layout_get_wrap</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-is-wrapped">pango_layout_is_wrapped</link>             (<link linkend="PangoLayout">PangoLayout</link> *layout);
+enum                <link linkend="PangoWrapMode">PangoWrapMode</link>;
+#define             <link linkend="PANGO-TYPE-WRAP-MODE--CAPS">PANGO_TYPE_WRAP_MODE</link>
+<link linkend="void">void</link>                <link linkend="pango-layout-set-ellipsize">pango_layout_set_ellipsize</link>          (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoEllipsizeMode">PangoEllipsizeMode</link> ellipsize);
+<link linkend="PangoEllipsizeMode">PangoEllipsizeMode</link>  <link linkend="pango-layout-get-ellipsize">pango_layout_get_ellipsize</link>          (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-is-ellipsized">pango_layout_is_ellipsized</link>          (<link linkend="PangoLayout">PangoLayout</link> *layout);
+enum                <link linkend="PangoEllipsizeMode">PangoEllipsizeMode</link>;
+#define             <link linkend="PANGO-TYPE-ELLIPSIZE-MODE--CAPS">PANGO_TYPE_ELLIPSIZE_MODE</link>
+<link linkend="void">void</link>                <link linkend="pango-layout-set-indent">pango_layout_set_indent</link>             (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> indent);
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-indent">pango_layout_get_indent</link>             (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-spacing">pango_layout_get_spacing</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-spacing">pango_layout_set_spacing</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> spacing);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-justify">pango_layout_set_justify</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> justify);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-get-justify">pango_layout_get_justify</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-auto-dir">pango_layout_set_auto_dir</link>           (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> auto_dir);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-get-auto-dir">pango_layout_get_auto_dir</link>           (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-alignment">pango_layout_set_alignment</link>          (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoAlignment">PangoAlignment</link> alignment);
+<link linkend="PangoAlignment">PangoAlignment</link>      <link linkend="pango-layout-get-alignment">pango_layout_get_alignment</link>          (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-tabs">pango_layout_set_tabs</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoTabArray">PangoTabArray</link> *tabs);
+<link linkend="PangoTabArray">PangoTabArray</link>*      <link linkend="pango-layout-get-tabs">pango_layout_get_tabs</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-set-single-paragraph-mode">pango_layout_set_single_paragraph_mode</link>
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> setting);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-get-single-paragraph-mode">pango_layout_get_single_paragraph_mode</link>
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout);
+enum                <link linkend="PangoAlignment">PangoAlignment</link>;
+#define             <link linkend="PANGO-TYPE-ALIGNMENT--CAPS">PANGO_TYPE_ALIGNMENT</link>
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-unknown-glyphs-count">pango_layout_get_unknown_glyphs_count</link>
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-layout-get-log-attrs">pango_layout_get_log_attrs</link>          (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> **attrs,
+                                                         <link linkend="gint">gint</link> *n_attrs);
+<link linkend="void">void</link>                <link linkend="pango-layout-index-to-pos">pango_layout_index_to_pos</link>           (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *pos);
+<link linkend="void">void</link>                <link linkend="pango-layout-index-to-line-x">pango_layout_index_to_line_x</link>        (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="gboolean">gboolean</link> trailing,
+                                                         <link linkend="int">int</link> *line,
+                                                         <link linkend="int">int</link> *x_pos);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-xy-to-index">pango_layout_xy_to_index</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y,
+                                                         <link linkend="int">int</link> *index_,
+                                                         <link linkend="int">int</link> *trailing);
+<link linkend="void">void</link>                <link linkend="pango-layout-get-cursor-pos">pango_layout_get_cursor_pos</link>         (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *strong_pos,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *weak_pos);
+<link linkend="void">void</link>                <link linkend="pango-layout-move-cursor-visually">pango_layout_move_cursor_visually</link>   (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> strong,
+                                                         <link linkend="int">int</link> old_index,
+                                                         <link linkend="int">int</link> old_trailing,
+                                                         <link linkend="int">int</link> direction,
+                                                         <link linkend="int">int</link> *new_index,
+                                                         <link linkend="int">int</link> *new_trailing);
+<link linkend="void">void</link>                <link linkend="pango-layout-get-extents">pango_layout_get_extents</link>            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-get-pixel-extents">pango_layout_get_pixel_extents</link>      (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-get-size">pango_layout_get_size</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> *width,
+                                                         <link linkend="int">int</link> *height);
+<link linkend="void">void</link>                <link linkend="pango-layout-get-pixel-size">pango_layout_get_pixel_size</link>         (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> *width,
+                                                         <link linkend="int">int</link> *height);
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-baseline">pango_layout_get_baseline</link>           (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="int">int</link>                 <link linkend="pango-layout-get-line-count">pango_layout_get_line_count</link>         (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="PangoLayoutLine">PangoLayoutLine</link> *   <link linkend="pango-layout-get-line">pango_layout_get_line</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> line);
+<link linkend="PangoLayoutLine">PangoLayoutLine</link> *   <link linkend="pango-layout-get-line-readonly">pango_layout_get_line_readonly</link>      (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> line);
+<link linkend="GSList">GSList</link> *            <link linkend="pango-layout-get-lines">pango_layout_get_lines</link>              (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="GSList">GSList</link> *            <link linkend="pango-layout-get-lines-readonly">pango_layout_get_lines_readonly</link>     (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="PangoLayoutIter">PangoLayoutIter</link> *   <link linkend="pango-layout-get-iter">pango_layout_get_iter</link>               (<link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="PangoLayoutIter">PangoLayoutIter</link> *   <link linkend="pango-layout-iter-copy">pango_layout_iter_copy</link>              (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-free">pango_layout_iter_free</link>              (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-iter-next-run">pango_layout_iter_next_run</link>          (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-iter-next-char">pango_layout_iter_next_char</link>         (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-iter-next-cluster">pango_layout_iter_next_cluster</link>      (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-iter-next-line">pango_layout_iter_next_line</link>         (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-iter-at-last-line">pango_layout_iter_at_last_line</link>      (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="int">int</link>                 <link linkend="pango-layout-iter-get-index">pango_layout_iter_get_index</link>         (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="int">int</link>                 <link linkend="pango-layout-iter-get-baseline">pango_layout_iter_get_baseline</link>      (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="PangoLayoutRun">PangoLayoutRun</link> *    <link linkend="pango-layout-iter-get-run">pango_layout_iter_get_run</link>           (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="PangoLayoutRun">PangoLayoutRun</link> *    <link linkend="pango-layout-iter-get-run-readonly">pango_layout_iter_get_run_readonly</link>  (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="PangoLayoutLine">PangoLayoutLine</link> *   <link linkend="pango-layout-iter-get-line">pango_layout_iter_get_line</link>          (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="PangoLayoutLine">PangoLayoutLine</link> *   <link linkend="pango-layout-iter-get-line-readonly">pango_layout_iter_get_line_readonly</link> (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="PangoLayout">PangoLayout</link> *       <link linkend="pango-layout-iter-get-layout">pango_layout_iter_get_layout</link>        (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-get-char-extents">pango_layout_iter_get_char_extents</link>  (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-get-cluster-extents">pango_layout_iter_get_cluster_extents</link>
+                                                        (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-get-run-extents">pango_layout_iter_get_run_extents</link>   (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-get-line-yrange">pango_layout_iter_get_line_yrange</link>   (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="int">int</link> *y0_,
+                                                         <link linkend="int">int</link> *y1_);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-get-line-extents">pango_layout_iter_get_line_extents</link>  (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-iter-get-layout-extents">pango_layout_iter_get_layout_extents</link>
+                                                        (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+
+                    <link linkend="PangoLayoutLine">PangoLayoutLine</link>;
+typedef             <link linkend="PangoLayoutRun">PangoLayoutRun</link>;
+<link linkend="PangoLayoutLine">PangoLayoutLine</link> *   <link linkend="pango-layout-line-ref">pango_layout_line_ref</link>               (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);
+<link linkend="void">void</link>                <link linkend="pango-layout-line-unref">pango_layout_line_unref</link>             (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);
+<link linkend="void">void</link>                <link linkend="pango-layout-line-get-extents">pango_layout_line_get_extents</link>       (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-line-get-pixel-extents">pango_layout_line_get_pixel_extents</link> (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *layout_line,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="void">void</link>                <link linkend="pango-layout-line-index-to-x">pango_layout_line_index_to_x</link>        (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="gboolean">gboolean</link> trailing,
+                                                         <link linkend="int">int</link> *x_pos);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-layout-line-x-to-index">pango_layout_line_x_to_index</link>        (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x_pos,
+                                                         <link linkend="int">int</link> *index_,
+                                                         <link linkend="int">int</link> *trailing);
+<link linkend="void">void</link>                <link linkend="pango-layout-line-get-x-ranges">pango_layout_line_get_x_ranges</link>      (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> start_index,
+                                                         <link linkend="int">int</link> end_index,
+                                                         <link linkend="int">int</link> **ranges,
+                                                         <link linkend="int">int</link> *n_ranges);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-Layout-Objects.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoLayout
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Layout-Objects.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+While complete access to the layout capabilities of Pango is provided
+using the detailed interfaces for itemization and shaping, using
+that functionality directly involves writing a fairly large amount
+of code. The objects and functions in this section provide a
+high-level driver for formatting entire paragraphs of text
+at once.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Layout-Objects.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoLayout-struct" role="struct">
+<title>PangoLayout</title>
+<indexterm zone="PangoLayout-struct"><primary sortas="PangoLayout">PangoLayout</primary></indexterm><programlisting>typedef struct _PangoLayout PangoLayout;</programlisting>
+<para>
+The <link linkend="PangoLayout"><type>PangoLayout</type></link> structure represents an entire paragraph
+of text. It is initialized with a <link linkend="PangoContext"><type>PangoContext</type></link>, UTF-8 string
+and set of attributes for that string. Once that is done, the
+set of formatted lines can be extracted from the object,
+the layout can be rendered, and conversion between logical
+character positions within the layout's text, and the physical
+position of the resulting glyphs can be made.
+</para>
+<para>
+There are also a number of parameters to adjust the formatting
+of a <link linkend="PangoLayout"><type>PangoLayout</type></link>, which are illustrated in <xref linkend="parameters"/>.
+It is possible, as well, to ignore the 2-D setup, and simply
+treat the results of a <link linkend="PangoLayout"><type>PangoLayout</type></link> as a list of lines.
+</para>
+<figure id="parameters">
+<title>Adjustable parameters for a PangoLayout</title>
+<graphic fileref="layout.gif" format="GIF"></graphic>
+</figure>
+<para>
+The <link linkend="PangoLayout"><type>PangoLayout</type></link> structure is opaque, and has no user-visible
+fields.
+</para></refsect2>
+<refsect2 id="PangoLayoutIter" role="struct">
+<title>PangoLayoutIter</title>
+<indexterm zone="PangoLayoutIter"><primary sortas="PangoLayoutIter">PangoLayoutIter</primary></indexterm><programlisting>typedef struct _PangoLayoutIter PangoLayoutIter;</programlisting>
+<para>
+A <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link> structure can be used to
+iterate over the visual extents of a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</para>
+<para>
+The <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link> structure is opaque, and
+has no user-visible fields.
+</para></refsect2>
+<refsect2 id="pango-layout-new" role="function">
+<title>pango_layout_new ()</title>
+<indexterm zone="pango-layout-new"><primary sortas="pango_layout_new">pango_layout_new</primary></indexterm><programlisting><link linkend="PangoLayout">PangoLayout</link> *       pango_layout_new                    (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Create a new <link linkend="PangoLayout"><type>PangoLayout</type></link> object with attributes initialized to
+default values for a particular <link linkend="PangoContext"><type>PangoContext</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoLayout"><type>PangoLayout</type></link>, with a reference
+              count of one, which should be freed with
+              <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-copy" role="function">
+<title>pango_layout_copy ()</title>
+<indexterm zone="pango-layout-copy"><primary sortas="pango_layout_copy">pango_layout_copy</primary></indexterm><programlisting><link linkend="PangoLayout">PangoLayout</link> *       pango_layout_copy                   (<link linkend="PangoLayout">PangoLayout</link> *src);</programlisting>
+<para>
+Does a deep copy-by-value of the <parameter>src</parameter> layout. The attribute list,
+tab array, and text from the original layout are all copied by
+value.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>src</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoLayout"><type>PangoLayout</type></link>, with a reference
+              count of one, which should be freed with
+              <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-context" role="function">
+<title>pango_layout_get_context ()</title>
+<indexterm zone="pango-layout-get-context"><primary sortas="pango_layout_get_context">pango_layout_get_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_layout_get_context            (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Retrieves the <link linkend="PangoContext"><type>PangoContext</type></link> used for this layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoContext"><type>PangoContext</type></link> for the layout. This does not
+have an additional refcount added, so if you want to keep
+a copy of this around, you must reference it yourself.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-context-changed" role="function">
+<title>pango_layout_context_changed ()</title>
+<indexterm zone="pango-layout-context-changed"><primary sortas="pango_layout_context_changed">pango_layout_context_changed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_context_changed        (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Forces recomputation of any state in the <link linkend="PangoLayout"><type>PangoLayout</type></link> that
+might depend on the layout's context. This function should
+be called if you make changes to the context subsequent
+to creating the layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-text" role="function">
+<title>pango_layout_set_text ()</title>
+<indexterm zone="pango-layout-set-text"><primary sortas="pango_layout_set_text">pango_layout_set_text</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_text               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length);</programlisting>
+<para>
+Sets the text of the layout.
+</para>
+<para>
+Note that if you have used
+<link linkend="pango-layout-set-markup"><function>pango_layout_set_markup()</function></link> or <link linkend="pango-layout-set-markup-with-accel"><function>pango_layout_set_markup_with_accel()</function></link> on
+<parameter>layout</parameter> before, you may want to call <link linkend="pango-layout-set-attributes"><function>pango_layout_set_attributes()</function></link> to clear
+the attributes set on the layout from the markup as this function does not
+clear attributes.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> a valid UTF-8 string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> maximum length of <parameter>text</parameter>, in bytes. -1 indicates that
+         the string is nul-terminated and the length should be
+         calculated.  The text will also be truncated on
+         encountering a nul-termination even when <parameter>length</parameter> is
+         positive.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-text" role="function">
+<title>pango_layout_get_text ()</title>
+<indexterm zone="pango-layout-get-text"><primary sortas="pango_layout_get_text">pango_layout_get_text</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_layout_get_text               (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the text in the layout. The returned text should not
+be freed or modified.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the text in the <parameter>layout</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-markup" role="function">
+<title>pango_layout_set_markup ()</title>
+<indexterm zone="pango-layout-set-markup"><primary sortas="pango_layout_set_markup">pango_layout_set_markup</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_markup             (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="char">char</link> *markup,
+                                                         <link linkend="int">int</link> length);</programlisting>
+<para>
+Same as <link linkend="pango-layout-set-markup-with-accel"><function>pango_layout_set_markup_with_accel()</function></link>, but
+the markup text isn't scanned for accelerators.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>markup</parameter>&#160;:</term>
+<listitem><simpara> marked-up text
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of marked-up text in bytes, or -1 if <parameter>markup</parameter> is
+nul-terminated
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-markup-with-accel" role="function">
+<title>pango_layout_set_markup_with_accel ()</title>
+<indexterm zone="pango-layout-set-markup-with-accel"><primary sortas="pango_layout_set_markup_with_accel">pango_layout_set_markup_with_accel</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_markup_with_accel  (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="char">char</link> *markup,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="gunichar">gunichar</link> accel_marker,
+                                                         <link linkend="gunichar">gunichar</link> *accel_char);</programlisting>
+<para>
+Sets the layout text and attribute list from marked-up text (see
+<link linkend="PangoMarkupFormat">markup format</link>). Replaces
+the current text and attribute list.
+</para>
+<para>
+If <parameter>accel_marker</parameter> is nonzero, the given character will mark the
+character following it as an accelerator. For example, <parameter>accel_marker</parameter>
+might be an ampersand or underscore. All characters marked
+as an accelerator will receive a <link linkend="PANGO-UNDERLINE-LOW--CAPS"><literal>PANGO_UNDERLINE_LOW</literal></link> attribute,
+and the first character so marked will be returned in <parameter>accel_char</parameter>.
+Two <parameter>accel_marker</parameter> characters following each other produce a single
+literal <parameter>accel_marker</parameter> character.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>markup</parameter>&#160;:</term>
+<listitem><simpara> marked-up text
+(see <link linkend="PangoMarkupFormat">markup format</link>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of marked-up text in bytes, or -1 if <parameter>markup</parameter> is
+nul-terminated
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>accel_marker</parameter>&#160;:</term>
+<listitem><simpara> marker for accelerators in the text
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>accel_char</parameter>&#160;:</term>
+<listitem><simpara> return location for first located accelerator, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-attributes" role="function">
+<title>pango_layout_set_attributes ()</title>
+<indexterm zone="pango-layout-set-attributes"><primary sortas="pango_layout_set_attributes">pango_layout_set_attributes</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_attributes         (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *attrs);</programlisting>
+<para>
+Sets the text attributes for a layout object.
+References <parameter>attrs</parameter>, so the caller can unref its reference.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, can be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-attributes" role="function">
+<title>pango_layout_get_attributes ()</title>
+<indexterm zone="pango-layout-get-attributes"><primary sortas="pango_layout_get_attributes">pango_layout_get_attributes</primary></indexterm><programlisting><link linkend="PangoAttrList">PangoAttrList</link> *     pango_layout_get_attributes         (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the attribute list for the layout, if any.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-font-description" role="function">
+<title>pango_layout_set_font_description ()</title>
+<indexterm zone="pango-layout-set-font-description"><primary sortas="pango_layout_set_font_description">pango_layout_set_font_description</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_font_description   (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Sets the default font description for the layout. If no font
+description is set on the layout, the font description from
+the layout's context is used.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> the new <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to unset the
+       current font description
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-font-description" role="function" condition="since:1.8">
+<title>pango_layout_get_font_description ()</title>
+<indexterm zone="pango-layout-get-font-description" role="1.8"><primary sortas="pango_layout_get_font_description">pango_layout_get_font_description</primary></indexterm><programlisting>const <link linkend="PangoFontDescription">PangoFontDescription</link> * pango_layout_get_font_description
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the font description for the layout, if any.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to the layout's font description,
+ or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the font description from the layout's
+ context is inherited. This value is owned by the layout
+ and must not be modified or freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-layout-set-width" role="function">
+<title>pango_layout_set_width ()</title>
+<indexterm zone="pango-layout-set-width"><primary sortas="pango_layout_set_width">pango_layout_set_width</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_width              (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> width);</programlisting>
+<para>
+Sets the width to which the lines of the <link linkend="PangoLayout"><type>PangoLayout</type></link> should wrap or
+ellipsized.  The default value is -1: no width set.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> the desired width in Pango units, or -1 to indicate that no
+        wrapping or ellipsization should be performed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-width" role="function">
+<title>pango_layout_get_width ()</title>
+<indexterm zone="pango-layout-get-width"><primary sortas="pango_layout_get_width">pango_layout_get_width</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_width              (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the width to which the lines of the <link linkend="PangoLayout"><type>PangoLayout</type></link> should wrap.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the width in Pango units, or -1 if no width set.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-height" role="function" condition="since:1.20">
+<title>pango_layout_set_height ()</title>
+<indexterm zone="pango-layout-set-height" role="1.20"><primary sortas="pango_layout_set_height">pango_layout_set_height</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_height             (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> height);</programlisting>
+<para>
+Sets the height to which the <link linkend="PangoLayout"><type>PangoLayout</type></link> should be ellipsized at.  There
+are two different behaviors, based on whether <parameter>height</parameter> is positive or
+negative.
+</para>
+<para>
+If <parameter>height</parameter> is positive, it will be the maximum height of the layout.  Only
+lines would be shown that would fit, and if there is any text omitted,
+an ellipsis added.  At least one line is included in each paragraph regardless
+of how small the height value is.  A value of zero will render exactly one
+line for the entire layout.
+</para>
+<para>
+If <parameter>height</parameter> is negative, it will be the (negative of) maximum number of lines per
+paragraph.  That is, the total number of lines shown may well be more than
+this value if the layout contains multiple paragraphs of text.
+The default value of -1 means that first line of each paragraph is ellipsized.
+This behvaior may be changed in the future to act per layout instead of per
+paragraph.  File a bug against pango at <ulink
+url="http://bugzilla.gnome.org/">http://bugzilla.gnome.org/</ulink> if your
+code relies on this behavior.
+</para>
+<para>
+Height setting only has effect if a positive width is set on
+<parameter>layout</parameter> and ellipsization mode of <parameter>layout</parameter> is not <link linkend="PANGO-ELLIPSIZE-NONE--CAPS"><literal>PANGO_ELLIPSIZE_NONE</literal></link>.
+The behavior is undefined if a height other than -1 is set and
+ellipsization mode is set to <link linkend="PANGO-ELLIPSIZE-NONE--CAPS"><literal>PANGO_ELLIPSIZE_NONE</literal></link>, and may change in the
+future.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> the desired height of the layout in Pango units if positive,
+         or desired number of lines if negative.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-layout-get-height" role="function" condition="since:1.20">
+<title>pango_layout_get_height ()</title>
+<indexterm zone="pango-layout-get-height" role="1.20"><primary sortas="pango_layout_get_height">pango_layout_get_height</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_height             (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the height of layout used for ellipsization.  See
+<link linkend="pango-layout-set-height"><function>pango_layout_set_height()</function></link> for details.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the height, in Pango units if positive, or
+number of lines if negative.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-layout-set-wrap" role="function">
+<title>pango_layout_set_wrap ()</title>
+<indexterm zone="pango-layout-set-wrap"><primary sortas="pango_layout_set_wrap">pango_layout_set_wrap</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_wrap               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoWrapMode">PangoWrapMode</link> wrap);</programlisting>
+<para>
+Sets the wrap mode; the wrap mode only has effect if a width
+is set on the layout with <link linkend="pango-layout-set-width"><function>pango_layout_set_width()</function></link>.
+To turn off wrapping, set the width to -1.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wrap</parameter>&#160;:</term>
+<listitem><simpara> the wrap mode
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-wrap" role="function">
+<title>pango_layout_get_wrap ()</title>
+<indexterm zone="pango-layout-get-wrap"><primary sortas="pango_layout_get_wrap">pango_layout_get_wrap</primary></indexterm><programlisting><link linkend="PangoWrapMode">PangoWrapMode</link>       pango_layout_get_wrap               (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the wrap mode for the layout.
+</para>
+<para>
+Use <link linkend="pango-layout-is-wrapped"><function>pango_layout_is_wrapped()</function></link> to query whether any paragraphs
+were actually wrapped.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> active wrap mode.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-is-wrapped" role="function" condition="since:1.16">
+<title>pango_layout_is_wrapped ()</title>
+<indexterm zone="pango-layout-is-wrapped" role="1.16"><primary sortas="pango_layout_is_wrapped">pango_layout_is_wrapped</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_is_wrapped             (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Queries whether the layout had to wrap any paragraphs.
+</para>
+<para>
+This returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if a positive width is set on <parameter>layout</parameter>,
+ellipsization mode of <parameter>layout</parameter> is set to <link linkend="PANGO-ELLIPSIZE-NONE--CAPS"><literal>PANGO_ELLIPSIZE_NONE</literal></link>,
+and there are paragraphs exceeding the layout width that have
+to be wrapped.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if any paragraphs had to be wrapped, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>
+otherwise.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoWrapMode" role="enum">
+<title>enum PangoWrapMode</title>
+<indexterm zone="PangoWrapMode"><primary sortas="PangoWrapMode">PangoWrapMode</primary></indexterm><programlisting>typedef enum {
+  PANGO_WRAP_WORD,
+  PANGO_WRAP_CHAR,
+  PANGO_WRAP_WORD_CHAR
+} PangoWrapMode;
+</programlisting>
+<para>
+A <link linkend="PangoWrapMode"><type>PangoWrapMode</type></link> describes how to wrap the lines of a <link linkend="PangoLayout"><type>PangoLayout</type></link> to the desired width.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-WRAP-WORD--CAPS" role="constant">
+<term><literal>PANGO_WRAP_WORD</literal></term>
+<listitem><simpara>wrap lines at word boundaries.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WRAP-CHAR--CAPS" role="constant">
+<term><literal>PANGO_WRAP_CHAR</literal></term>
+<listitem><simpara>wrap lines at character boundaries.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-WRAP-WORD-CHAR--CAPS" role="constant">
+<term><literal>PANGO_WRAP_WORD_CHAR</literal></term>
+<listitem><simpara>wrap lines at word boundaries, but fall back to character boundaries if there is not 
+enough space for a full word.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-WRAP-MODE--CAPS" role="macro">
+<title>PANGO_TYPE_WRAP_MODE</title>
+<indexterm zone="PANGO-TYPE-WRAP-MODE--CAPS"><primary sortas="PANGO_TYPE_WRAP_MODE">PANGO_TYPE_WRAP_MODE</primary></indexterm><programlisting>#define PANGO_TYPE_WRAP_MODE (pango_wrap_mode_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoWrapMode"><type>PangoWrapMode</type></link>.
+</para></refsect2>
+<refsect2 id="pango-layout-set-ellipsize" role="function" condition="since:1.6">
+<title>pango_layout_set_ellipsize ()</title>
+<indexterm zone="pango-layout-set-ellipsize" role="1.6"><primary sortas="pango_layout_set_ellipsize">pango_layout_set_ellipsize</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_ellipsize          (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoEllipsizeMode">PangoEllipsizeMode</link> ellipsize);</programlisting>
+<para>
+Sets the type of ellipsization being performed for <parameter>layout</parameter>.
+Depending on the ellipsization mode <parameter>ellipsize</parameter> text is
+removed from the start, middle, or end of text so they
+fit within the width and height of layout set with
+<link linkend="pango-layout-set-width"><function>pango_layout_set_width()</function></link> and <link linkend="pango-layout-set-height"><function>pango_layout_set_height()</function></link>.
+</para>
+<para>
+If the layout contains characters such as newlines that
+force it to be layed out in multiple paragraphs, then whether
+each paragraph is ellipsized separately or the entire layout
+is ellipsized as a whole depends on the set height of the layout.
+See <link linkend="pango-layout-set-height"><function>pango_layout_set_height()</function></link> for details.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ellipsize</parameter>&#160;:</term>
+<listitem><simpara> the new ellipsization mode for <parameter>layout</parameter>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-layout-get-ellipsize" role="function" condition="since:1.6">
+<title>pango_layout_get_ellipsize ()</title>
+<indexterm zone="pango-layout-get-ellipsize" role="1.6"><primary sortas="pango_layout_get_ellipsize">pango_layout_get_ellipsize</primary></indexterm><programlisting><link linkend="PangoEllipsizeMode">PangoEllipsizeMode</link>  pango_layout_get_ellipsize          (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the type of ellipsization being performed for <parameter>layout</parameter>.
+See <link linkend="pango-layout-set-ellipsize"><function>pango_layout_set_ellipsize()</function></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the current ellipsization mode for <parameter>layout</parameter>.
+
+Use <link linkend="pango-layout-is-ellipsized"><function>pango_layout_is_ellipsized()</function></link> to query whether any paragraphs
+were actually ellipsized.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-layout-is-ellipsized" role="function" condition="since:1.16">
+<title>pango_layout_is_ellipsized ()</title>
+<indexterm zone="pango-layout-is-ellipsized" role="1.16"><primary sortas="pango_layout_is_ellipsized">pango_layout_is_ellipsized</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_is_ellipsized          (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Queries whether the layout had to ellipsize any paragraphs.
+</para>
+<para>
+This returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the ellipsization mode for <parameter>layout</parameter>
+is not <link linkend="PANGO-ELLIPSIZE-NONE--CAPS"><literal>PANGO_ELLIPSIZE_NONE</literal></link>, a positive width is set on <parameter>layout</parameter>,
+and there are paragraphs exceeding that width that have to be
+ellipsized.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if any paragraphs had to be ellipsized, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>
+otherwise.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoEllipsizeMode" role="enum">
+<title>enum PangoEllipsizeMode</title>
+<indexterm zone="PangoEllipsizeMode"><primary sortas="PangoEllipsizeMode">PangoEllipsizeMode</primary></indexterm><programlisting>typedef enum {
+  PANGO_ELLIPSIZE_NONE,
+  PANGO_ELLIPSIZE_START,
+  PANGO_ELLIPSIZE_MIDDLE,
+  PANGO_ELLIPSIZE_END
+} PangoEllipsizeMode;
+</programlisting>
+<para>
+The <link linkend="PangoEllipsizeMode"><type>PangoEllipsizeMode</type></link> type describes what sort of (if any)
+ellipsization should be applied to a line of text. In
+the ellipsization process characters are removed from the
+text in order to make it fit to a given width and replaced
+with an ellipsis.</para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-ELLIPSIZE-NONE--CAPS" role="constant">
+<term><literal>PANGO_ELLIPSIZE_NONE</literal></term>
+<listitem><simpara> No ellipsization
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ELLIPSIZE-START--CAPS" role="constant">
+<term><literal>PANGO_ELLIPSIZE_START</literal></term>
+<listitem><simpara> Omit characters at the start of the text
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ELLIPSIZE-MIDDLE--CAPS" role="constant">
+<term><literal>PANGO_ELLIPSIZE_MIDDLE</literal></term>
+<listitem><simpara> Omit characters in the middle of the text
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ELLIPSIZE-END--CAPS" role="constant">
+<term><literal>PANGO_ELLIPSIZE_END</literal></term>
+<listitem><simpara> Omit characters at the end of the text
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-ELLIPSIZE-MODE--CAPS" role="macro">
+<title>PANGO_TYPE_ELLIPSIZE_MODE</title>
+<indexterm zone="PANGO-TYPE-ELLIPSIZE-MODE--CAPS"><primary sortas="PANGO_TYPE_ELLIPSIZE_MODE">PANGO_TYPE_ELLIPSIZE_MODE</primary></indexterm><programlisting>#define PANGO_TYPE_ELLIPSIZE_MODE (pango_ellipsize_mode_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoEllipsizeMode"><type>PangoEllipsizeMode</type></link>.
+</para></refsect2>
+<refsect2 id="pango-layout-set-indent" role="function">
+<title>pango_layout_set_indent ()</title>
+<indexterm zone="pango-layout-set-indent"><primary sortas="pango_layout_set_indent">pango_layout_set_indent</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_indent             (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> indent);</programlisting>
+<para>
+Sets the width in Pango units to indent each paragraph. A negative value
+of <parameter>indent</parameter> will produce a hanging indentation. That is, the first line will
+have the full width, and subsequent lines will be indented by the
+absolute value of <parameter>indent</parameter>.
+</para>
+<para>
+The indent setting is ignored if layout alignment is set to
+<link linkend="PANGO-ALIGN-CENTER--CAPS"><literal>PANGO_ALIGN_CENTER</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>indent</parameter>&#160;:</term>
+<listitem><simpara> the amount by which to indent.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-indent" role="function">
+<title>pango_layout_get_indent ()</title>
+<indexterm zone="pango-layout-get-indent"><primary sortas="pango_layout_get_indent">pango_layout_get_indent</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_indent             (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the paragraph indent width in Pango units. A negative value
+indicates a hanging indentation.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the indent in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-spacing" role="function">
+<title>pango_layout_get_spacing ()</title>
+<indexterm zone="pango-layout-get-spacing"><primary sortas="pango_layout_get_spacing">pango_layout_get_spacing</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_spacing            (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the amount of spacing between the lines of the layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the spacing in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-spacing" role="function">
+<title>pango_layout_set_spacing ()</title>
+<indexterm zone="pango-layout-set-spacing"><primary sortas="pango_layout_set_spacing">pango_layout_set_spacing</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_spacing            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> spacing);</programlisting>
+<para>
+Sets the amount of spacing in Pango unit between the lines of the
+layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>spacing</parameter>&#160;:</term>
+<listitem><simpara> the amount of spacing
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-justify" role="function">
+<title>pango_layout_set_justify ()</title>
+<indexterm zone="pango-layout-set-justify"><primary sortas="pango_layout_set_justify">pango_layout_set_justify</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_justify            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> justify);</programlisting>
+<para>
+Sets whether each complete line should be stretched to
+fill the entire width of the layout. This stretching is typically
+done by adding whitespace, but for some scripts (such as Arabic),
+the justification may be done in more complex ways, like extending
+the characters.
+</para>
+<para>
+Note that this setting is not implemented and so is ignored in Pango
+older than 1.18.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>justify</parameter>&#160;:</term>
+<listitem><simpara> whether the lines in the layout should be justified.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-justify" role="function">
+<title>pango_layout_get_justify ()</title>
+<indexterm zone="pango-layout-get-justify"><primary sortas="pango_layout_get_justify">pango_layout_get_justify</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_get_justify            (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets whether each complete line should be stretched to fill the entire
+width of the layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the justify.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-auto-dir" role="function" condition="since:1.4">
+<title>pango_layout_set_auto_dir ()</title>
+<indexterm zone="pango-layout-set-auto-dir" role="1.4"><primary sortas="pango_layout_set_auto_dir">pango_layout_set_auto_dir</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_auto_dir           (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> auto_dir);</programlisting>
+<para>
+Sets whether to calculate the bidirectional base direction
+for the layout according to the contents of the layout;
+when this flag is on (the default), then paragraphs in
+   <parameter>layout</parameter> that begin with strong right-to-left characters
+(Arabic and Hebrew principally), will have right-to-left
+layout, paragraphs with letters from other scripts will
+have left-to-right layout. Paragraphs with only neutral
+characters get their direction from the surrounding paragraphs.
+</para>
+<para>
+When <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>, the choice between left-to-right and
+right-to-left layout is done according to the base direction
+of the layout's <link linkend="PangoContext"><type>PangoContext</type></link>. (See <link linkend="pango-context-set-base-dir"><function>pango_context_set_base_dir()</function></link>).
+</para>
+<para>
+When the auto-computed direction of a paragraph differs from the
+base direction of the context, the interpretation of
+<link linkend="PANGO-ALIGN-LEFT--CAPS"><literal>PANGO_ALIGN_LEFT</literal></link> and <link linkend="PANGO-ALIGN-RIGHT--CAPS"><literal>PANGO_ALIGN_RIGHT</literal></link> are swapped.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>auto_dir</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, compute the bidirectional base direction
+  from the layout's contents.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-layout-get-auto-dir" role="function" condition="since:1.4">
+<title>pango_layout_get_auto_dir ()</title>
+<indexterm zone="pango-layout-get-auto-dir" role="1.4"><primary sortas="pango_layout_get_auto_dir">pango_layout_get_auto_dir</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_get_auto_dir           (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets whether to calculate the bidirectional base direction
+for the layout according to the contents of the layout.
+See <link linkend="pango-layout-set-auto-dir"><function>pango_layout_set_auto_dir()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the bidirectional base direction
+  is computed from the layout's contents, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-layout-set-alignment" role="function">
+<title>pango_layout_set_alignment ()</title>
+<indexterm zone="pango-layout-set-alignment"><primary sortas="pango_layout_set_alignment">pango_layout_set_alignment</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_alignment          (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoAlignment">PangoAlignment</link> alignment);</programlisting>
+<para>
+Sets the alignment for the layout: how partial lines are
+positioned within the horizontal space available.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>alignment</parameter>&#160;:</term>
+<listitem><simpara> the alignment
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-alignment" role="function">
+<title>pango_layout_get_alignment ()</title>
+<indexterm zone="pango-layout-get-alignment"><primary sortas="pango_layout_get_alignment">pango_layout_get_alignment</primary></indexterm><programlisting><link linkend="PangoAlignment">PangoAlignment</link>      pango_layout_get_alignment          (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the alignment for the layout: how partial lines are
+positioned within the horizontal space available.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the alignment.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-tabs" role="function">
+<title>pango_layout_set_tabs ()</title>
+<indexterm zone="pango-layout-set-tabs"><primary sortas="pango_layout_set_tabs">pango_layout_set_tabs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_tabs               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoTabArray">PangoTabArray</link> *tabs);</programlisting>
+<para>
+Sets the tabs to use for <parameter>layout</parameter>, overriding the default tabs
+(by default, tabs are every 8 spaces). If <parameter>tabs</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, the default
+tabs are reinstated. <parameter>tabs</parameter> is copied into the layout; you must
+free your copy of <parameter>tabs</parameter> yourself.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>tabs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-tabs" role="function">
+<title>pango_layout_get_tabs ()</title>
+<indexterm zone="pango-layout-get-tabs"><primary sortas="pango_layout_get_tabs">pango_layout_get_tabs</primary></indexterm><programlisting><link linkend="PangoTabArray">PangoTabArray</link>*      pango_layout_get_tabs               (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the current <link linkend="PangoTabArray"><type>PangoTabArray</type></link> used by this layout. If no
+<link linkend="PangoTabArray"><type>PangoTabArray</type></link> has been set, then the default tabs are in use
+and <link linkend="NULL--CAPS"><literal>NULL</literal></link> is returned. Default tabs are every 8 spaces.
+The return value should be freed with <link linkend="pango-tab-array-free"><function>pango_tab_array_free()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a copy of the tabs for this layout, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-set-single-paragraph-mode" role="function">
+<title>pango_layout_set_single_paragraph_mode ()</title>
+<indexterm zone="pango-layout-set-single-paragraph-mode"><primary sortas="pango_layout_set_single_paragraph_mode">pango_layout_set_single_paragraph_mode</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_set_single_paragraph_mode
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> setting);</programlisting>
+<para>
+If <parameter>setting</parameter> is <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, do not treat newlines and similar characters
+as paragraph separators; instead, keep all text in a single paragraph,
+and display a glyph for paragraph separator characters. Used when
+you want to allow editing of newlines on a single text line.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>setting</parameter>&#160;:</term>
+<listitem><simpara> new setting
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-single-paragraph-mode" role="function">
+<title>pango_layout_get_single_paragraph_mode ()</title>
+<indexterm zone="pango-layout-get-single-paragraph-mode"><primary sortas="pango_layout_get_single_paragraph_mode">pango_layout_get_single_paragraph_mode</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_get_single_paragraph_mode
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Obtains the value set by <link linkend="pango-layout-set-single-paragraph-mode"><function>pango_layout_set_single_paragraph_mode()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the layout does not break paragraphs at
+paragraph separator characters, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAlignment" role="enum">
+<title>enum PangoAlignment</title>
+<indexterm zone="PangoAlignment"><primary sortas="PangoAlignment">PangoAlignment</primary></indexterm><programlisting>typedef enum {
+  PANGO_ALIGN_LEFT,
+  PANGO_ALIGN_CENTER,
+  PANGO_ALIGN_RIGHT
+} PangoAlignment;
+</programlisting>
+<para>
+A <link linkend="PangoAlignment"><type>PangoAlignment</type></link> describes how to align the lines of a <link linkend="PangoLayout"><type>PangoLayout</type></link> within the
+available space. If the <link linkend="PangoLayout"><type>PangoLayout</type></link> is set to justify
+using <link linkend="pango-layout-set-justify"><function>pango_layout_set_justify()</function></link>, this only has effect for partial lines.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-ALIGN-LEFT--CAPS" role="constant">
+<term><literal>PANGO_ALIGN_LEFT</literal></term>
+<listitem><simpara>Put all available space on the right
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ALIGN-CENTER--CAPS" role="constant">
+<term><literal>PANGO_ALIGN_CENTER</literal></term>
+<listitem><simpara>Center the line within the available space
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ALIGN-RIGHT--CAPS" role="constant">
+<term><literal>PANGO_ALIGN_RIGHT</literal></term>
+<listitem><simpara>Put all available space on the left
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-ALIGNMENT--CAPS" role="macro">
+<title>PANGO_TYPE_ALIGNMENT</title>
+<indexterm zone="PANGO-TYPE-ALIGNMENT--CAPS"><primary sortas="PANGO_TYPE_ALIGNMENT">PANGO_TYPE_ALIGNMENT</primary></indexterm><programlisting>#define PANGO_TYPE_ALIGNMENT (pango_alignment_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoAlignment"><type>PangoAlignment</type></link>.
+</para></refsect2>
+<refsect2 id="pango-layout-get-unknown-glyphs-count" role="function" condition="since:1.16">
+<title>pango_layout_get_unknown_glyphs_count ()</title>
+<indexterm zone="pango-layout-get-unknown-glyphs-count" role="1.16"><primary sortas="pango_layout_get_unknown_glyphs_count">pango_layout_get_unknown_glyphs_count</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_unknown_glyphs_count
+                                                        (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Counts the number unknown glyphs in <parameter>layout</parameter>.  That is, zero if
+glyphs for all characters in the layout text were found, or more
+than zero otherwise.
+</para>
+<para>
+This function can be used to determine if there are any fonts
+available to render all characters in a certain string, or when
+used in combination with <link linkend="PANGO-ATTR-FALLBACK--CAPS"><literal>PANGO_ATTR_FALLBACK</literal></link>, to check if a
+certain font supports all the characters in the string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The number of unknown glyphs in <parameter>layout</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-layout-get-log-attrs" role="function">
+<title>pango_layout_get_log_attrs ()</title>
+<indexterm zone="pango-layout-get-log-attrs"><primary sortas="pango_layout_get_log_attrs">pango_layout_get_log_attrs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_get_log_attrs          (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> **attrs,
+                                                         <link linkend="gint">gint</link> *n_attrs);</programlisting>
+<para>
+Retrieves an array of logical attributes for each character in
+the <parameter>layout</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of logical attributes
+        This value must be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_attrs</parameter>&#160;:</term>
+<listitem><simpara> location to store the number of the attributes in the
+          array. (The stored value will be one more than the total number
+          of characters in the layout, since there need to be attributes
+          corresponding to both the position before the first character
+          and the position after the last character.)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-index-to-pos" role="function">
+<title>pango_layout_index_to_pos ()</title>
+<indexterm zone="pango-layout-index-to-pos"><primary sortas="pango_layout_index_to_pos">pango_layout_index_to_pos</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_index_to_pos           (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *pos);</programlisting>
+<para>
+Converts from an index within a <link linkend="PangoLayout"><type>PangoLayout</type></link> to the onscreen position
+corresponding to the grapheme at that index, which is represented
+as rectangle.  Note that <literal>pos->x</literal> is always the leading
+edge of the grapheme and <literal>pos->x + pos->width</literal> the trailing
+edge of the grapheme. If the directionality of the grapheme is right-to-left,
+then <literal>pos->width</literal> will be negative.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara> byte index within <parameter>layout</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>pos</parameter>&#160;:</term>
+<listitem><simpara> rectangle in which to store the position of the grapheme
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-index-to-line-x" role="function">
+<title>pango_layout_index_to_line_x ()</title>
+<indexterm zone="pango-layout-index-to-line-x"><primary sortas="pango_layout_index_to_line_x">pango_layout_index_to_line_x</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_index_to_line_x        (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="gboolean">gboolean</link> trailing,
+                                                         <link linkend="int">int</link> *line,
+                                                         <link linkend="int">int</link> *x_pos);</programlisting>
+<para>
+Converts from byte <parameter>index_</parameter> within the <parameter>layout</parameter> to line and X position.
+(X position is measured from the left edge of the line)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>    the byte index of a grapheme within the layout.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>trailing</parameter>&#160;:</term>
+<listitem><simpara>  an integer indicating the edge of the grapheme to retrieve the
+            position of. If 0, the trailing edge of the grapheme, if &gt; 0,
+            the leading of the grapheme.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      location to store resulting line index. (which will
+            between 0 and pango_layout_get_line_count(layout) - 1)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x_pos</parameter>&#160;:</term>
+<listitem><simpara>     location to store resulting position within line
+            (<link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> units per device unit)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-xy-to-index" role="function">
+<title>pango_layout_xy_to_index ()</title>
+<indexterm zone="pango-layout-xy-to-index"><primary sortas="pango_layout_xy_to_index">pango_layout_xy_to_index</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_xy_to_index            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y,
+                                                         <link linkend="int">int</link> *index_,
+                                                         <link linkend="int">int</link> *trailing);</programlisting>
+<para>
+Converts from X and Y position within a layout to the byte
+index to the character at that logical position. If the
+Y position is not inside the layout, the closest position is chosen
+(the position will be clamped inside the layout). If the
+X position is not within the layout, then the start or the
+end of the line is chosen as  described for <link linkend="pango-layout-x-to-index"><function>pango_layout_x_to_index()</function></link>.
+If either the X or Y positions were not inside the layout, then the
+function returns <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>; on an exact hit, it returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the X offset (in Pango units)
+            from the left edge of the layout.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the Y offset (in Pango units)
+            from the top edge of the layout
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>    location to store calculated byte index
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>trailing</parameter>&#160;:</term>
+<listitem><simpara>  location to store a integer indicating where
+            in the grapheme the user clicked. It will either
+            be zero, or the number of characters in the
+            grapheme. 0 represents the trailing edge of the grapheme.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the coordinates were inside text, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-cursor-pos" role="function">
+<title>pango_layout_get_cursor_pos ()</title>
+<indexterm zone="pango-layout-get-cursor-pos"><primary sortas="pango_layout_get_cursor_pos">pango_layout_get_cursor_pos</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_get_cursor_pos         (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *strong_pos,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *weak_pos);</programlisting>
+<para>
+Given an index within a layout, determines the positions that of the
+strong and weak cursors if the insertion point is at that
+index. The position of each cursor is stored as a zero-width
+rectangle. The strong cursor location is the location where
+characters of the directionality equal to the base direction of the
+layout are inserted.  The weak cursor location is the location
+where characters of the directionality opposite to the base
+direction of the layout are inserted.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara> the byte index of the cursor
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>strong_pos</parameter>&#160;:</term>
+<listitem><simpara> location to store the strong cursor position (may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>weak_pos</parameter>&#160;:</term>
+<listitem><simpara> location to store the weak cursor position (may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-move-cursor-visually" role="function">
+<title>pango_layout_move_cursor_visually ()</title>
+<indexterm zone="pango-layout-move-cursor-visually"><primary sortas="pango_layout_move_cursor_visually">pango_layout_move_cursor_visually</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_move_cursor_visually   (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="gboolean">gboolean</link> strong,
+                                                         <link linkend="int">int</link> old_index,
+                                                         <link linkend="int">int</link> old_trailing,
+                                                         <link linkend="int">int</link> direction,
+                                                         <link linkend="int">int</link> *new_index,
+                                                         <link linkend="int">int</link> *new_trailing);</programlisting>
+<para>
+Computes a new cursor position from an old position and
+a count of positions to move visually. If <parameter>direction</parameter> is positive,
+then the new strong cursor position will be one position
+to the right of the old cursor position. If <parameter>direction</parameter> is negative,
+then the new strong cursor position will be one position
+to the left of the old cursor position.
+</para>
+<para>
+In the presence of bidirectional text, the correspondence
+between logical and visual order will depend on the direction
+of the current run, and there may be jumps when the cursor
+is moved off of the end of a run.
+</para>
+<para>
+Motion here is in cursor positions, not in characters, so a
+single call to <link linkend="pango-layout-move-cursor-visually"><function>pango_layout_move_cursor_visually()</function></link> may move the
+cursor over multiple characters when multiple characters combine
+to form a single grapheme.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>       a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>strong</parameter>&#160;:</term>
+<listitem><simpara>       whether the moving cursor is the strong cursor or the
+               weak cursor. The strong cursor is the cursor corresponding
+               to text insertion in the base direction for the layout.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>old_index</parameter>&#160;:</term>
+<listitem><simpara>    the byte index of the grapheme for the old index
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>old_trailing</parameter>&#160;:</term>
+<listitem><simpara> if 0, the cursor was at the trailing edge of the
+               grapheme indicated by <parameter>old_index</parameter>, if &gt; 0, the cursor
+               was at the leading edge.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>direction</parameter>&#160;:</term>
+<listitem><simpara>    direction to move cursor. A negative
+               value indicates motion to the left.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>new_index</parameter>&#160;:</term>
+<listitem><simpara>    location to store the new cursor byte index. A value of -1
+               indicates that the cursor has been moved off the beginning
+               of the layout. A value of <link linkend="G-MAXINT--CAPS"><literal>G_MAXINT</literal></link> indicates that
+               the cursor has been moved off the end of the layout.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>new_trailing</parameter>&#160;:</term>
+<listitem><simpara> number of characters to move forward from the location returned
+               for <parameter>new_index</parameter> to get the position where the cursor should
+               be displayed. This allows distinguishing the position at
+               the beginning of one line from the position at the end
+               of the preceding line. <parameter>new_index</parameter> is always on the line
+               where the cursor should be displayed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-extents" role="function">
+<title>pango_layout_get_extents ()</title>
+<indexterm zone="pango-layout-get-extents"><primary sortas="pango_layout_get_extents">pango_layout_get_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_get_extents            (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Computes the logical and ink extents of <parameter>layout</parameter>. Logical extents
+are usually what you want for positioning things.  Note that both extents
+may have non-zero x and y.  You may want to use those to offset where you
+render the layout.  Not doing that is a very typical bug that shows up as
+right-to-left layouts not being correctly positioned in a layout with
+a set width.
+</para>
+<para>
+The extents are given in layout coordinates and in Pango units; layout
+coordinates begin at the top left corner of the layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>   a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the extents of the layout as drawn
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the layout
+                or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-pixel-extents" role="function">
+<title>pango_layout_get_pixel_extents ()</title>
+<indexterm zone="pango-layout-get-pixel-extents"><primary sortas="pango_layout_get_pixel_extents">pango_layout_get_pixel_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_get_pixel_extents      (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Computes the logical and ink extents of <parameter>layout</parameter> in device units.
+This function just calls <link linkend="pango-layout-get-extents"><function>pango_layout_get_extents()</function></link> followed by
+two <link linkend="pango-extents-to-pixels"><function>pango_extents_to_pixels()</function></link> calls, rounding <parameter>ink_rect</parameter> and <parameter>logical_rect</parameter>
+such that the rounded rectangles fully contain the unrounded one (that is,
+passes them as first argument to <link linkend="pango-extents-to-pixels"><function>pango_extents_to_pixels()</function></link>).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>   a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the extents of the layout as drawn
+           or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the
+             layout or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to indicate that the result is not needed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-size" role="function">
+<title>pango_layout_get_size ()</title>
+<indexterm zone="pango-layout-get-size"><primary sortas="pango_layout_get_size">pango_layout_get_size</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_get_size               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> *width,
+                                                         <link linkend="int">int</link> *height);</programlisting>
+<para>
+Determines the logical width and height of a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+in Pango units (device units scaled by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link>). This
+is simply a convenience function around <link linkend="pango-layout-get-extents"><function>pango_layout_get_extents()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> location to store the logical width, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> location to store the logical height, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-pixel-size" role="function">
+<title>pango_layout_get_pixel_size ()</title>
+<indexterm zone="pango-layout-get-pixel-size"><primary sortas="pango_layout_get_pixel_size">pango_layout_get_pixel_size</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_get_pixel_size         (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> *width,
+                                                         <link linkend="int">int</link> *height);</programlisting>
+<para>
+Determines the logical width and height of a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+in device units. (<link linkend="pango-layout-get-size"><function>pango_layout_get_size()</function></link> returns the width
+and height scaled by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link>.) This
+is simply a convenience function around
+<link linkend="pango-layout-get-pixel-extents"><function>pango_layout_get_pixel_extents()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> location to store the logical width, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> location to store the logical height, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-baseline" role="function" condition="since:1.22">
+<title>pango_layout_get_baseline ()</title>
+<indexterm zone="pango-layout-get-baseline" role="1.22"><primary sortas="pango_layout_get_baseline">pango_layout_get_baseline</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_baseline           (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Gets the Y position of baseline of the first line in <parameter>layout</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> baseline of first line, from top of <parameter>layout</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-layout-get-line-count" role="function">
+<title>pango_layout_get_line_count ()</title>
+<indexterm zone="pango-layout-get-line-count"><primary sortas="pango_layout_get_line_count">pango_layout_get_line_count</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_get_line_count         (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Retrieves the count of lines for the <parameter>layout</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the line count.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-line" role="function">
+<title>pango_layout_get_line ()</title>
+<indexterm zone="pango-layout-get-line"><primary sortas="pango_layout_get_line">pango_layout_get_line</primary></indexterm><programlisting><link linkend="PangoLayoutLine">PangoLayoutLine</link> *   pango_layout_get_line               (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> line);</programlisting>
+<para>
+Retrieves a particular line from a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</para>
+<para>
+Use the faster <link linkend="pango-layout-get-line-readonly"><function>pango_layout_get_line_readonly()</function></link> if you do not plan
+to modify the contents of the line (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> the index of a line, which must be between 0 and
+       <literal>pango_layout_get_line_count(layout) - 1</literal>, inclusive.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the requested <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the
+              index is out of range. This layout line can
+              be ref'ed and retained, but will become invalid
+              if changes are made to the <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-line-readonly" role="function" condition="since:1.16">
+<title>pango_layout_get_line_readonly ()</title>
+<indexterm zone="pango-layout-get-line-readonly" role="1.16"><primary sortas="pango_layout_get_line_readonly">pango_layout_get_line_readonly</primary></indexterm><programlisting><link linkend="PangoLayoutLine">PangoLayoutLine</link> *   pango_layout_get_line_readonly      (<link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> line);</programlisting>
+<para>
+Retrieves a particular line from a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</para>
+<para>
+This is a faster alternative to <link linkend="pango-layout-get-line"><function>pango_layout_get_line()</function></link>,
+but the user is not expected
+to modify the contents of the line (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> the index of a line, which must be between 0 and
+       <literal>pango_layout_get_line_count(layout) - 1</literal>, inclusive.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the requested <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the
+              index is out of range. This layout line can
+              be ref'ed and retained, but will become invalid
+              if changes are made to the <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+              No changes should be made to the line.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-layout-get-lines" role="function">
+<title>pango_layout_get_lines ()</title>
+<indexterm zone="pango-layout-get-lines"><primary sortas="pango_layout_get_lines">pango_layout_get_lines</primary></indexterm><programlisting><link linkend="GSList">GSList</link> *            pango_layout_get_lines              (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Returns the lines of the <parameter>layout</parameter> as a list.
+</para>
+<para>
+Use the faster <link linkend="pango-layout-get-lines-readonly"><function>pango_layout_get_lines_readonly()</function></link> if you do not plan
+to modify the contents of the lines (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>element-type Pango.LayoutLine): (transfer none. <acronym>element-type Pango.LayoutLine): (transfer</acronym> none. </simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-get-lines-readonly" role="function" condition="since:1.16">
+<title>pango_layout_get_lines_readonly ()</title>
+<indexterm zone="pango-layout-get-lines-readonly" role="1.16"><primary sortas="pango_layout_get_lines_readonly">pango_layout_get_lines_readonly</primary></indexterm><programlisting><link linkend="GSList">GSList</link> *            pango_layout_get_lines_readonly     (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Returns the lines of the <parameter>layout</parameter> as a list.
+</para>
+<para>
+This is a faster alternative to <link linkend="pango-layout-get-lines"><function>pango_layout_get_lines()</function></link>,
+but the user is not expected
+to modify the contents of the lines (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>element-type Pango.LayoutLine): (transfer none. <acronym>element-type Pango.LayoutLine): (transfer</acronym> none. </simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-layout-get-iter" role="function">
+<title>pango_layout_get_iter ()</title>
+<indexterm zone="pango-layout-get-iter"><primary sortas="pango_layout_get_iter">pango_layout_get_iter</primary></indexterm><programlisting><link linkend="PangoLayoutIter">PangoLayoutIter</link> *   pango_layout_get_iter               (<link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Returns an iterator to iterate over the visual extents of the layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link> that should be freed using
+              <link linkend="pango-layout-iter-free"><function>pango_layout_iter_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-copy" role="function" condition="since:1.20">
+<title>pango_layout_iter_copy ()</title>
+<indexterm zone="pango-layout-iter-copy" role="1.20"><primary sortas="pango_layout_iter_copy">pango_layout_iter_copy</primary></indexterm><programlisting><link linkend="PangoLayoutIter">PangoLayoutIter</link> *   pango_layout_iter_copy              (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Copies a <link linkend="PangLayoutIter"><type>PangLayoutIter</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>, which should
+              be freed with <link linkend="pango-layout-iter-free"><function>pango_layout_iter_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if
+              <parameter>iter</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-layout-iter-free" role="function">
+<title>pango_layout_iter_free ()</title>
+<indexterm zone="pango-layout-iter-free"><primary sortas="pango_layout_iter_free">pango_layout_iter_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_free              (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Frees an iterator that's no longer in use.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-next-run" role="function">
+<title>pango_layout_iter_next_run ()</title>
+<indexterm zone="pango-layout-iter-next-run"><primary sortas="pango_layout_iter_next_run">pango_layout_iter_next_run</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_iter_next_run          (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Moves <parameter>iter</parameter> forward to the next run in visual order. If <parameter>iter</parameter> was
+already at the end of the layout, returns <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether motion was possible.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-next-char" role="function">
+<title>pango_layout_iter_next_char ()</title>
+<indexterm zone="pango-layout-iter-next-char"><primary sortas="pango_layout_iter_next_char">pango_layout_iter_next_char</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_iter_next_char         (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Moves <parameter>iter</parameter> forward to the next character in visual order. If <parameter>iter</parameter> was already at
+the end of the layout, returns <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether motion was possible.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-next-cluster" role="function">
+<title>pango_layout_iter_next_cluster ()</title>
+<indexterm zone="pango-layout-iter-next-cluster"><primary sortas="pango_layout_iter_next_cluster">pango_layout_iter_next_cluster</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_iter_next_cluster      (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Moves <parameter>iter</parameter> forward to the next cluster in visual order. If <parameter>iter</parameter>
+was already at the end of the layout, returns <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether motion was possible.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-next-line" role="function">
+<title>pango_layout_iter_next_line ()</title>
+<indexterm zone="pango-layout-iter-next-line"><primary sortas="pango_layout_iter_next_line">pango_layout_iter_next_line</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_iter_next_line         (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Moves <parameter>iter</parameter> forward to the start of the next line. If <parameter>iter</parameter> is
+already on the last line, returns <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether motion was possible.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-at-last-line" role="function">
+<title>pango_layout_iter_at_last_line ()</title>
+<indexterm zone="pango-layout-iter-at-last-line"><primary sortas="pango_layout_iter_at_last_line">pango_layout_iter_at_last_line</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_iter_at_last_line      (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Determines whether <parameter>iter</parameter> is on the last line of the layout.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>iter</parameter> is on the last line.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-index" role="function">
+<title>pango_layout_iter_get_index ()</title>
+<indexterm zone="pango-layout-iter-get-index"><primary sortas="pango_layout_iter_get_index">pango_layout_iter_get_index</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_iter_get_index         (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the current byte index. Note that iterating forward by char
+moves in visual order, not logical order, so indexes may not be
+sequential. Also, the index may be equal to the length of the text
+in the layout, if on the <link linkend="NULL--CAPS"><literal>NULL</literal></link> run (see <link linkend="pango-layout-iter-get-run"><function>pango_layout_iter_get_run()</function></link>).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> current byte index.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-baseline" role="function">
+<title>pango_layout_iter_get_baseline ()</title>
+<indexterm zone="pango-layout-iter-get-baseline"><primary sortas="pango_layout_iter_get_baseline">pango_layout_iter_get_baseline</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_layout_iter_get_baseline      (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the Y position of the current line's baseline, in layout
+coordinates (origin at top left of the entire layout).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> baseline of current line.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-run" role="function">
+<title>pango_layout_iter_get_run ()</title>
+<indexterm zone="pango-layout-iter-get-run"><primary sortas="pango_layout_iter_get_run">pango_layout_iter_get_run</primary></indexterm><programlisting><link linkend="PangoLayoutRun">PangoLayoutRun</link> *    pango_layout_iter_get_run           (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the current run. When iterating by run, at the end of each
+line, there's a position with a <link linkend="NULL--CAPS"><literal>NULL</literal></link> run, so this function can return
+<link linkend="NULL--CAPS"><literal>NULL</literal></link>. The <link linkend="NULL--CAPS"><literal>NULL</literal></link> run at the end of each line ensures that all lines have
+at least one run, even lines consisting of only a newline.
+</para>
+<para>
+Use the faster <link linkend="pango-layout-iter-get-run-readonly"><function>pango_layout_iter_get_run_readonly()</function></link> if you do not plan
+to modify the contents of the run (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the current run.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-run-readonly" role="function" condition="since:1.16">
+<title>pango_layout_iter_get_run_readonly ()</title>
+<indexterm zone="pango-layout-iter-get-run-readonly" role="1.16"><primary sortas="pango_layout_iter_get_run_readonly">pango_layout_iter_get_run_readonly</primary></indexterm><programlisting><link linkend="PangoLayoutRun">PangoLayoutRun</link> *    pango_layout_iter_get_run_readonly  (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the current run. When iterating by run, at the end of each
+line, there's a position with a <link linkend="NULL--CAPS"><literal>NULL</literal></link> run, so this function can return
+<link linkend="NULL--CAPS"><literal>NULL</literal></link>. The <link linkend="NULL--CAPS"><literal>NULL</literal></link> run at the end of each line ensures that all lines have
+at least one run, even lines consisting of only a newline.
+</para>
+<para>
+This is a faster alternative to <link linkend="pango-layout-iter-get-run"><function>pango_layout_iter_get_run()</function></link>,
+but the user is not expected
+to modify the contents of the run (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the current run, that should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-layout-iter-get-line" role="function">
+<title>pango_layout_iter_get_line ()</title>
+<indexterm zone="pango-layout-iter-get-line"><primary sortas="pango_layout_iter_get_line">pango_layout_iter_get_line</primary></indexterm><programlisting><link linkend="PangoLayoutLine">PangoLayoutLine</link> *   pango_layout_iter_get_line          (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the current line.
+</para>
+<para>
+Use the faster <link linkend="pango-layout-iter-get-line-readonly"><function>pango_layout_iter_get_line_readonly()</function></link> if you do not plan
+to modify the contents of the line (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the current line.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-line-readonly" role="function" condition="since:1.16">
+<title>pango_layout_iter_get_line_readonly ()</title>
+<indexterm zone="pango-layout-iter-get-line-readonly" role="1.16"><primary sortas="pango_layout_iter_get_line_readonly">pango_layout_iter_get_line_readonly</primary></indexterm><programlisting><link linkend="PangoLayoutLine">PangoLayoutLine</link> *   pango_layout_iter_get_line_readonly (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the current line for read-only access.
+</para>
+<para>
+This is a faster alternative to <link linkend="pango-layout-iter-get-line"><function>pango_layout_iter_get_line()</function></link>,
+but the user is not expected
+to modify the contents of the line (glyphs, glyph widths, etc.).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the current line, that should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-layout-iter-get-layout" role="function" condition="since:1.20">
+<title>pango_layout_iter_get_layout ()</title>
+<indexterm zone="pango-layout-iter-get-layout" role="1.20"><primary sortas="pango_layout_iter_get_layout">pango_layout_iter_get_layout</primary></indexterm><programlisting><link linkend="PangoLayout">PangoLayout</link> *       pango_layout_iter_get_layout        (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter);</programlisting>
+<para>
+Gets the layout associated with a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the layout associated with <parameter>iter</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-layout-iter-get-char-extents" role="function">
+<title>pango_layout_iter_get_char_extents ()</title>
+<indexterm zone="pango-layout-iter-get-char-extents"><primary sortas="pango_layout_iter_get_char_extents">pango_layout_iter_get_char_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_get_char_extents  (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Gets the extents of the current character, in layout coordinates
+(origin is the top left of the entire layout). Only logical extents
+can sensibly be obtained for characters; ink extents make sense only
+down to the level of clusters.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with logical extents
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-cluster-extents" role="function">
+<title>pango_layout_iter_get_cluster_extents ()</title>
+<indexterm zone="pango-layout-iter-get-cluster-extents"><primary sortas="pango_layout_iter_get_cluster_extents">pango_layout_iter_get_cluster_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_get_cluster_extents
+                                                        (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Gets the extents of the current cluster, in layout coordinates
+(origin is the top left of the entire layout).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with ink extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with logical extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-run-extents" role="function">
+<title>pango_layout_iter_get_run_extents ()</title>
+<indexterm zone="pango-layout-iter-get-run-extents"><primary sortas="pango_layout_iter_get_run_extents">pango_layout_iter_get_run_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_get_run_extents   (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Gets the extents of the current run in layout coordinates
+(origin is the top left of the entire layout).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with ink extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with logical extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-line-yrange" role="function">
+<title>pango_layout_iter_get_line_yrange ()</title>
+<indexterm zone="pango-layout-iter-get-line-yrange"><primary sortas="pango_layout_iter_get_line_yrange">pango_layout_iter_get_line_yrange</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_get_line_yrange   (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="int">int</link> *y0_,
+                                                         <link linkend="int">int</link> *y1_);</programlisting>
+<para>
+Divides the vertical space in the <link linkend="PangoLayout"><type>PangoLayout</type></link> being iterated over
+between the lines in the layout, and returns the space belonging to
+the current line.  A line's range includes the line's logical
+extents, plus half of the spacing above and below the line, if
+<link linkend="pango-layout-set-spacing"><function>pango_layout_set_spacing()</function></link> has been called to set layout spacing.
+The Y positions are in layout coordinates (origin at top left of the
+entire layout).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y0_</parameter>&#160;:</term>
+<listitem><simpara> start of line
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y1_</parameter>&#160;:</term>
+<listitem><simpara> end of line
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-line-extents" role="function">
+<title>pango_layout_iter_get_line_extents ()</title>
+<indexterm zone="pango-layout-iter-get-line-extents"><primary sortas="pango_layout_iter_get_line_extents">pango_layout_iter_get_line_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_get_line_extents  (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Obtains the extents of the current line. <parameter>ink_rect</parameter> or <parameter>logical_rect</parameter>
+can be <link linkend="NULL--CAPS"><literal>NULL</literal></link> if you aren't interested in them. Extents are in layout
+coordinates (origin is the top-left corner of the entire
+<link linkend="PangoLayout"><type>PangoLayout</type></link>).  Thus the extents returned by this function will be
+the same width/height but not at the same x/y as the extents
+returned from <link linkend="pango-layout-line-get-extents"><function>pango_layout_line_get_extents()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with ink extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with logical extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-iter-get-layout-extents" role="function">
+<title>pango_layout_iter_get_layout_extents ()</title>
+<indexterm zone="pango-layout-iter-get-layout-extents"><primary sortas="pango_layout_iter_get_layout_extents">pango_layout_iter_get_layout_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_iter_get_layout_extents
+                                                        (<link linkend="PangoLayoutIter">PangoLayoutIter</link> *iter,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Obtains the extents of the <link linkend="PangoLayout"><type>PangoLayout</type></link> being iterated
+over. <parameter>ink_rect</parameter> or <parameter>logical_rect</parameter> can be <link linkend="NULL--CAPS"><literal>NULL</literal></link> if you
+aren't interested in them.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutIter"><type>PangoLayoutIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with ink extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle to fill with logical extents, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoLayoutLine" role="struct">
+<title>PangoLayoutLine</title>
+<indexterm zone="PangoLayoutLine"><primary sortas="PangoLayoutLine">PangoLayoutLine</primary></indexterm><programlisting>typedef struct {
+  PangoLayout *layout;
+  gint         start_index;     /* start of line as byte index into layout-&gt;text */
+  gint         length;         /* length of line in bytes */
+  GSList      *runs;
+  guint        is_paragraph_start : 1;  /* TRUE if this is the first line of the paragraph */
+  guint        resolved_dir : 3;  /* Resolved PangoDirection of line */
+} PangoLayoutLine;
+</programlisting>
+<para>
+The <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> structure represents one of the lines resulting
+from laying out a paragraph via <link linkend="PangoLayout"><type>PangoLayout</type></link>. <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+structures are obtained by calling <link linkend="pango-layout-get-line"><function>pango_layout_get_line()</function></link> and
+are only valid until the text, attributes, or settings of the
+parent <link linkend="PangoLayout"><type>PangoLayout</type></link> are modified.
+</para>
+<para>
+Routines for rendering PangoLayout objects are provided in
+code specific to each rendering system.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoLayout">PangoLayout</link>&#160;*<structfield>layout</structfield>;</term>
+<listitem><simpara>the parent layout for this line
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>start_index</structfield>;</term>
+<listitem><simpara>the start of the line as byte index into <parameter>layout->text</parameter>
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>length</structfield>;</term>
+<listitem><simpara>the length of the line in bytes
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GSList">GSList</link>&#160;*<structfield>runs</structfield>;</term>
+<listitem><simpara>a list containing the runs of the line in visual order
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_paragraph_start</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>%TRUE if this is the first line of the paragraph
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>resolved_dir</structfield>&#160;:&#160;3;</term>
+<listitem><simpara>the resolved <link linkend="PangoDirection"><type>PangoDirection</type></link> of the line
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoLayoutRun" role="typedef">
+<title>PangoLayoutRun</title>
+<indexterm zone="PangoLayoutRun"><primary sortas="PangoLayoutRun">PangoLayoutRun</primary></indexterm><programlisting>typedef PangoGlyphItem PangoLayoutRun;
+</programlisting>
+<para>
+The <link linkend="PangoLayoutRun"><type>PangoLayoutRun</type></link> structure represents a single run within
+a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>; it is simply an alternate name for
+<link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>.
+See the <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link> docs for details on the fields.
+</para></refsect2>
+<refsect2 id="pango-layout-line-ref" role="function" condition="since:1.10">
+<title>pango_layout_line_ref ()</title>
+<indexterm zone="pango-layout-line-ref" role="1.10"><primary sortas="pango_layout_line_ref">pango_layout_line_ref</primary></indexterm><programlisting><link linkend="PangoLayoutLine">PangoLayoutLine</link> *   pango_layout_line_ref               (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);</programlisting>
+<para>
+Increase the reference count of a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> by one.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the line passed in.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-layout-line-unref" role="function">
+<title>pango_layout_line_unref ()</title>
+<indexterm zone="pango-layout-line-unref"><primary sortas="pango_layout_line_unref">pango_layout_line_unref</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_line_unref             (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);</programlisting>
+<para>
+Decrease the reference count of a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> by one.
+If the result is zero, the line and all associated memory
+will be freed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-line-get-extents" role="function">
+<title>pango_layout_line_get_extents ()</title>
+<indexterm zone="pango-layout-line-get-extents"><primary sortas="pango_layout_line_get_extents">pango_layout_line_get_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_line_get_extents       (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Computes the logical and ink extents of a layout line. See
+<link linkend="pango-font-get-glyph-extents"><function>pango_font_get_glyph_extents()</function></link> for details about the interpretation
+of the rectangles.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>     a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the extents of the glyph string
+           as drawn, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the glyph
+           string, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-line-get-pixel-extents" role="function">
+<title>pango_layout_line_get_pixel_extents ()</title>
+<indexterm zone="pango-layout-line-get-pixel-extents"><primary sortas="pango_layout_line_get_pixel_extents">pango_layout_line_get_pixel_extents</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_line_get_pixel_extents (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *layout_line,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Computes the logical and ink extents of <parameter>layout_line</parameter> in device units.
+This function just calls <link linkend="pango-layout-line-get-extents"><function>pango_layout_line_get_extents()</function></link> followed by
+two <link linkend="pango-extents-to-pixels"><function>pango_extents_to_pixels()</function></link> calls, rounding <parameter>ink_rect</parameter> and <parameter>logical_rect</parameter>
+such that the rounded rectangles fully contain the unrounded one (that is,
+passes them as first argument to <link linkend="pango-extents-to-pixels"><function>pango_extents_to_pixels()</function></link>).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>layout_line</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara>    rectangle used to store the extents of the glyph string
+              as drawn, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> rectangle used to store the logical extents of the glyph
+              string, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-line-index-to-x" role="function">
+<title>pango_layout_line_index_to_x ()</title>
+<indexterm zone="pango-layout-line-index-to-x"><primary sortas="pango_layout_line_index_to_x">pango_layout_line_index_to_x</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_line_index_to_x        (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> index_,
+                                                         <link linkend="gboolean">gboolean</link> trailing,
+                                                         <link linkend="int">int</link> *x_pos);</programlisting>
+<para>
+Converts an index within a line to a X position.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>     a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>   byte offset of a grapheme within the layout
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>trailing</parameter>&#160;:</term>
+<listitem><simpara> an integer indicating the edge of the grapheme to retrieve
+           the position of. If &gt; 0, the trailing edge of the grapheme,
+           if 0, the leading of the grapheme.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x_pos</parameter>&#160;:</term>
+<listitem><simpara> location to store the x_offset (in Pango unit)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-line-x-to-index" role="function">
+<title>pango_layout_line_x_to_index ()</title>
+<indexterm zone="pango-layout-line-x-to-index"><primary sortas="pango_layout_line_x_to_index">pango_layout_line_x_to_index</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_layout_line_x_to_index        (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x_pos,
+                                                         <link linkend="int">int</link> *index_,
+                                                         <link linkend="int">int</link> *trailing);</programlisting>
+<para>
+Converts from x offset to the byte index of the corresponding
+character within the text of the layout. If <parameter>x_pos</parameter> is outside the line,
+<parameter>index_</parameter> and <parameter>trailing</parameter> will point to the very first or very last position
+in the line. This determination is based on the resolved direction
+of the paragraph; for example, if the resolved direction is
+right-to-left, then an X position to the right of the line (after it)
+results in 0 being stored in <parameter>index_</parameter> and <parameter>trailing</parameter>. An X position to the
+left of the line results in <parameter>index_</parameter> pointing to the (logical) last
+grapheme in the line and <parameter>trailing</parameter> being set to the number of characters
+in that grapheme. The reverse is true for a left-to-right line.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x_pos</parameter>&#160;:</term>
+<listitem><simpara>     the X offset (in Pango units)
+            from the left edge of the line.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>    location to store calculated byte index for
+            the grapheme in which the user clicked.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>trailing</parameter>&#160;:</term>
+<listitem><simpara>  location to store an integer indicating where
+            in the grapheme the user clicked. It will either
+            be zero, or the number of characters in the
+            grapheme. 0 represents the leading edge of the grapheme.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if <parameter>x_pos</parameter> was outside the line, <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if inside
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-layout-line-get-x-ranges" role="function">
+<title>pango_layout_line_get_x_ranges ()</title>
+<indexterm zone="pango-layout-line-get-x-ranges"><primary sortas="pango_layout_line_get_x_ranges">pango_layout_line_get_x_ranges</primary></indexterm><programlisting><link linkend="void">void</link>                pango_layout_line_get_x_ranges      (<link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> start_index,
+                                                         <link linkend="int">int</link> end_index,
+                                                         <link linkend="int">int</link> **ranges,
+                                                         <link linkend="int">int</link> *n_ranges);</programlisting>
+<para>
+Gets a list of visual ranges corresponding to a given logical range.
+This list is not necessarily minimal - there may be consecutive
+ranges which are adjacent. The ranges will be sorted from left to
+right. The ranges are with respect to the left edge of the entire
+layout, not with respect to the line.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>        a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>start_index</parameter>&#160;:</term>
+<listitem><simpara> Start byte index of the logical range. If this value
+              is less than the start index for the line, then
+              the first range will extend all the way to the leading
+              edge of the layout. Otherwise it will start at the
+              leading edge of the first character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>end_index</parameter>&#160;:</term>
+<listitem><simpara>   Ending byte index of the logical range. If this value
+              is greater than the end index for the line, then
+              the last range will extend all the way to the trailing
+              edge of the layout. Otherwise, it will end at the
+              trailing edge of the last character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>ranges</parameter>&#160;:</term>
+<listitem><simpara>out): (array length=n_ranges): (transfer=full. <acronym>out): (array length=n_ranges):</acronym> (transfer=full. </simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_ranges</parameter>&#160;:</term>
+<listitem><simpara> The number of ranges stored in <parameter>ranges</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/main.xml b/docs/xml/main.xml
new file mode 100755 (executable)
index 0000000..387ba48
--- /dev/null
@@ -0,0 +1,1138 @@
+<refentry id="pango-Text-Processing">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Text-Processing.top_of_page">Rendering</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Rendering</refname>
+<refpurpose>Functions to run the rendering pipeline</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Text-Processing.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoContext"/>
+<synopsis>
+                    <link linkend="PangoContext-struct">PangoContext</link>;
+                    <link linkend="PangoItem">PangoItem</link>;
+                    <link linkend="PangoAnalysis">PangoAnalysis</link>;
+#define             <link linkend="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS">PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</link>
+#define             <link linkend="PANGO-TYPE-DIRECTION--CAPS">PANGO_TYPE_DIRECTION</link>
+
+<link linkend="GList">GList</link> *             <link linkend="pango-itemize">pango_itemize</link>                       (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> start_index,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *attrs,
+                                                         <link linkend="PangoAttrIterator">PangoAttrIterator</link> *cached_iter);
+<link linkend="GList">GList</link> *             <link linkend="pango-itemize-with-base-dir">pango_itemize_with_base_dir</link>         (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoDirection">PangoDirection</link> base_dir,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> start_index,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *attrs,
+                                                         <link linkend="PangoAttrIterator">PangoAttrIterator</link> *cached_iter);
+<link linkend="void">void</link>                <link linkend="pango-item-free">pango_item_free</link>                     (<link linkend="PangoItem">PangoItem</link> *item);
+<link linkend="PangoItem">PangoItem</link> *         <link linkend="pango-item-copy">pango_item_copy</link>                     (<link linkend="PangoItem">PangoItem</link> *item);
+<link linkend="PangoItem">PangoItem</link> *         <link linkend="pango-item-new">pango_item_new</link>                      (void);
+<link linkend="PangoItem">PangoItem</link> *         <link linkend="pango-item-split">pango_item_split</link>                    (<link linkend="PangoItem">PangoItem</link> *orig,
+                                                         <link linkend="int">int</link> split_index,
+                                                         <link linkend="int">int</link> split_offset);
+<link linkend="GList">GList</link> *             <link linkend="pango-reorder-items">pango_reorder_items</link>                 (<link linkend="GList">GList</link> *logical_items);
+
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-context-new">pango_context_new</link>                   (void);
+<link linkend="void">void</link>                <link linkend="pango-context-set-font-map">pango_context_set_font_map</link>          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoFontMap">PangoFontMap</link> *font_map);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-context-get-font-map">pango_context_get_font_map</link>          (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-context-get-font-description">pango_context_get_font_description</link>
+                                                        (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-context-set-font-description">pango_context_set_font_description</link>  (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="PangoLanguage">PangoLanguage</link> *     <link linkend="pango-context-get-language">pango_context_get_language</link>          (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-context-set-language">pango_context_set_language</link>          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoDirection">PangoDirection</link>      <link linkend="pango-context-get-base-dir">pango_context_get_base_dir</link>          (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-context-set-base-dir">pango_context_set_base_dir</link>          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoDirection">PangoDirection</link> direction);
+<link linkend="PangoGravity">PangoGravity</link>        <link linkend="pango-context-get-base-gravity">pango_context_get_base_gravity</link>      (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-context-set-base-gravity">pango_context_set_base_gravity</link>      (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoGravity">PangoGravity</link> gravity);
+<link linkend="PangoGravity">PangoGravity</link>        <link linkend="pango-context-get-gravity">pango_context_get_gravity</link>           (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="PangoGravityHint">PangoGravityHint</link>    <link linkend="pango-context-get-gravity-hint">pango_context_get_gravity_hint</link>      (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-context-set-gravity-hint">pango_context_set_gravity_hint</link>      (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoGravityHint">PangoGravityHint</link> hint);
+const <link linkend="PangoMatrix">PangoMatrix</link> * <link linkend="pango-context-get-matrix">pango_context_get_matrix</link>            (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-context-set-matrix">pango_context_set_matrix</link>            (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);
+<link linkend="PangoFont">PangoFont</link> *         <link linkend="pango-context-load-font">pango_context_load_font</link>             (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="PangoFontset">PangoFontset</link> *      <link linkend="pango-context-load-fontset">pango_context_load_fontset</link>          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoFontMetrics">PangoFontMetrics</link> *  <link linkend="pango-context-get-metrics">pango_context_get_metrics</link>           (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="void">void</link>                <link linkend="pango-context-list-families">pango_context_list_families</link>         (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoFontFamily">PangoFontFamily</link> ***families,
+                                                         <link linkend="int">int</link> *n_families);
+
+
+<link linkend="void">void</link>                <link linkend="pango-break">pango_break</link>                         (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *attrs,
+                                                         <link linkend="int">int</link> attrs_len);
+<link linkend="void">void</link>                <link linkend="pango-get-log-attrs">pango_get_log_attrs</link>                 (const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="int">int</link> level,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *log_attrs,
+                                                         <link linkend="int">int</link> attrs_len);
+<link linkend="void">void</link>                <link linkend="pango-find-paragraph-boundary">pango_find_paragraph_boundary</link>       (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="gint">gint</link> length,
+                                                         <link linkend="gint">gint</link> *paragraph_delimiter_index,
+                                                         <link linkend="gint">gint</link> *next_paragraph_start);
+<link linkend="void">void</link>                <link linkend="pango-default-break">pango_default_break</link>                 (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *attrs,
+                                                         <link linkend="int">int</link> attrs_len);
+                    <link linkend="PangoLogAttr">PangoLogAttr</link>;
+
+<link linkend="void">void</link>                <link linkend="pango-shape">pango_shape</link>                         (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="gint">gint</link> length,
+                                                         const <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-Text-Processing.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoContext
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Text-Processing.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The Pango rendering pipeline takes a string of
+Unicode characters and converts it into glyphs.
+The functions described in this section accomplish
+various steps of this process.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Text-Processing.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoContext-struct" role="struct">
+<title>PangoContext</title>
+<indexterm zone="PangoContext-struct"><primary sortas="PangoContext">PangoContext</primary></indexterm><programlisting>typedef struct _PangoContext PangoContext;</programlisting>
+<para>
+The <link linkend="PangoContext"><type>PangoContext</type></link> structure stores global information
+used to control the itemization process.
+</para></refsect2>
+<refsect2 id="PangoItem" role="struct">
+<title>PangoItem</title>
+<indexterm zone="PangoItem"><primary sortas="PangoItem">PangoItem</primary></indexterm><programlisting>typedef struct {
+  gint offset;
+  gint length;
+  gint num_chars;
+  PangoAnalysis analysis;
+} PangoItem;
+</programlisting>
+<para>
+The <link linkend="PangoItem"><type>PangoItem</type></link> structure stores information about
+a segment of text. It contains the following fields:
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>offset</structfield>;</term>
+<listitem><simpara>the offset of the segment from the beginning of the
+         string in bytes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>length</structfield>;</term>
+<listitem><simpara>the length of the segment in bytes.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gint">gint</link>&#160;<structfield>num_chars</structfield>;</term>
+<listitem><simpara>the length of the segment in characters.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoAnalysis">PangoAnalysis</link>&#160;<structfield>analysis</structfield>;</term>
+<listitem><simpara>the properties of the segment.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAnalysis" role="struct">
+<title>PangoAnalysis</title>
+<indexterm zone="PangoAnalysis"><primary sortas="PangoAnalysis">PangoAnalysis</primary></indexterm><programlisting>typedef struct {
+  PangoEngineShape *shape_engine;
+  PangoEngineLang  *lang_engine;
+  PangoFont *font;
+
+  guint8 level;
+  guint8 gravity; /* PangoGravity */
+  guint8 flags;
+
+  guint8 script; /* PangoScript */
+  PangoLanguage *language;
+
+  GSList *extra_attrs;
+} PangoAnalysis;
+</programlisting>
+<para>
+The <link linkend="PangoAnalysis"><type>PangoAnalysis</type></link> structure stores information about
+the properties of a segment of text. It has the following
+fields:
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoEngineShape">PangoEngineShape</link>&#160;*<structfield>shape_engine</structfield>;</term>
+<listitem><simpara>the engine for doing rendering-system-dependent processing.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoEngineLang">PangoEngineLang</link>&#160;*<structfield>lang_engine</structfield>;</term>
+<listitem><simpara>the engine for doing rendering-system-independent processing.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoFont">PangoFont</link>&#160;*<structfield>font</structfield>;</term>
+<listitem><simpara>the font for this segment.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint8">guint8</link>&#160;<structfield>level</structfield>;</term>
+<listitem><simpara>the bidirectional level for this segment.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint8">guint8</link>&#160;<structfield>gravity</structfield>;</term>
+<listitem><simpara>the glyph orientation for this segment (A <link linkend="PangoGravity"><type>PangoGravity</type></link>).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint8">guint8</link>&#160;<structfield>flags</structfield>;</term>
+<listitem><simpara>boolean flags for this segment (currently only one) (Since: 1.16).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint8">guint8</link>&#160;<structfield>script</structfield>;</term>
+<listitem><simpara>the detected script for this segment (A <link linkend="PangoScript"><type>PangoScript</type></link>) (Since: 1.18).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoLanguage">PangoLanguage</link>&#160;*<structfield>language</structfield>;</term>
+<listitem><simpara>the detected language for this segment.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GSList">GSList</link>&#160;*<structfield>extra_attrs</structfield>;</term>
+<listitem><simpara>extra attributes for this segment.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS" role="macro">
+<title>PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</title>
+<indexterm zone="PANGO-ANALYSIS-FLAG-CENTERED-BASELINE--CAPS"><primary sortas="PANGO_ANALYSIS_FLAG_CENTERED_BASELINE">PANGO_ANALYSIS_FLAG_CENTERED_BASELINE</primary></indexterm><programlisting>#define PANGO_ANALYSIS_FLAG_CENTERED_BASELINE (1 &lt;&lt; 0)
+</programlisting>
+<para>
+Whether the segment should be shifted to center around the baseline.
+Used in vertical writing directions mostly.
+Since: 1.16
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-DIRECTION--CAPS" role="macro">
+<title>PANGO_TYPE_DIRECTION</title>
+<indexterm zone="PANGO-TYPE-DIRECTION--CAPS"><primary sortas="PANGO_TYPE_DIRECTION">PANGO_TYPE_DIRECTION</primary></indexterm><programlisting>#define PANGO_TYPE_DIRECTION (pango_direction_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoDirection"><type>PangoDirection</type></link>.
+</para></refsect2>
+<refsect2 id="pango-itemize" role="function">
+<title>pango_itemize ()</title>
+<indexterm zone="pango-itemize"><primary sortas="pango_itemize">pango_itemize</primary></indexterm><programlisting><link linkend="GList">GList</link> *             pango_itemize                       (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> start_index,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *attrs,
+                                                         <link linkend="PangoAttrIterator">PangoAttrIterator</link> *cached_iter);</programlisting>
+<para>
+Breaks a piece of text into segments with consistent
+directional level and shaping engine. Each byte of <parameter>text</parameter> will
+be contained in exactly one of the items in the returned list;
+the generated list of items will be in logical order (the start
+offsets of the items are ascending).
+</para>
+<para>
+<parameter>cached_iter</parameter> should be an iterator over <parameter>attrs</parameter> currently positioned at a
+range before or containing <parameter>start_index</parameter>; <parameter>cached_iter</parameter> will be advanced to
+the range covering the position just after <parameter>start_index</parameter> + <parameter>length</parameter>.
+(i.e. if itemizing in a loop, just keep passing in the same <parameter>cached_iter</parameter>).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara>   a structure holding information that affects
+              the itemization process.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text to itemize.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>start_index</parameter>&#160;:</term>
+<listitem><simpara> first byte in <parameter>text</parameter> to process
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    the number of bytes (not characters) to process
+            after <parameter>start_index</parameter>.
+            This must be &gt;= 0.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs</parameter>&#160;:</term>
+<listitem><simpara>     the set of attributes that apply to <parameter>text</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>cached_iter</parameter>&#160;:</term>
+<listitem><simpara>      Cached attribute iterator, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="GList"><type>GList</type></link> of <link linkend="PangoItem"><type>PangoItem</type></link> structures.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-itemize-with-base-dir" role="function" condition="since:1.4">
+<title>pango_itemize_with_base_dir ()</title>
+<indexterm zone="pango-itemize-with-base-dir" role="1.4"><primary sortas="pango_itemize_with_base_dir">pango_itemize_with_base_dir</primary></indexterm><programlisting><link linkend="GList">GList</link> *             pango_itemize_with_base_dir         (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoDirection">PangoDirection</link> base_dir,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> start_index,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *attrs,
+                                                         <link linkend="PangoAttrIterator">PangoAttrIterator</link> *cached_iter);</programlisting>
+<para>
+Like <link linkend="pango-itemize"><function>pango_itemize()</function></link>, but the base direction to use when
+computing bidirectional levels (see <link linkend="pango-context-set-base-dir"><function>pango_context_set_base_dir()</function></link>),
+is specified explicitly rather than gotten from the <link linkend="PangoContext"><type>PangoContext</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara>   a structure holding information that affects
+              the itemization process.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>base_dir</parameter>&#160;:</term>
+<listitem><simpara>  base direction to use for bidirectional processing
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text to itemize.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>start_index</parameter>&#160;:</term>
+<listitem><simpara> first byte in <parameter>text</parameter> to process
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    the number of bytes (not characters) to process
+            after <parameter>start_index</parameter>.
+            This must be &gt;= 0.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs</parameter>&#160;:</term>
+<listitem><simpara>     the set of attributes that apply to <parameter>text</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>cached_iter</parameter>&#160;:</term>
+<listitem><simpara>      Cached attribute iterator, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="GList"><type>GList</type></link> of <link linkend="PangoItem"><type>PangoItem</type></link> structures.  The items should be
+freed using <link linkend="pango-item-free"><function>pango_item_free()</function></link> probably in combination with <link linkend="g-list-foreach"><function>g_list_foreach()</function></link>,
+and the list itself using <link linkend="g-list-free"><function>g_list_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-item-free" role="function">
+<title>pango_item_free ()</title>
+<indexterm zone="pango-item-free"><primary sortas="pango_item_free">pango_item_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_item_free                     (<link linkend="PangoItem">PangoItem</link> *item);</programlisting>
+<para>
+Free a <link linkend="PangoItem"><type>PangoItem</type></link> and all associated memory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoItem"><type>PangoItem</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-item-copy" role="function">
+<title>pango_item_copy ()</title>
+<indexterm zone="pango-item-copy"><primary sortas="pango_item_copy">pango_item_copy</primary></indexterm><programlisting><link linkend="PangoItem">PangoItem</link> *         pango_item_copy                     (<link linkend="PangoItem">PangoItem</link> *item);</programlisting>
+<para>
+Copy an existing <link linkend="PangoItem"><type>PangoItem</type></link> structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoItem"><type>PangoItem</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoItem"><type>PangoItem</type></link>, which should
+              be freed with <link linkend="pango-item-free"><function>pango_item_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if
+              <parameter>item</parameter> was NULL.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-item-new" role="function">
+<title>pango_item_new ()</title>
+<indexterm zone="pango-item-new"><primary sortas="pango_item_new">pango_item_new</primary></indexterm><programlisting><link linkend="PangoItem">PangoItem</link> *         pango_item_new                      (void);</programlisting>
+<para>
+Creates a new <link linkend="PangoItem"><type>PangoItem</type></link> structure initialized to default values.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoItem"><type>PangoItem</type></link>, which should
+              be freed with <link linkend="pango-item-free"><function>pango_item_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-item-split" role="function">
+<title>pango_item_split ()</title>
+<indexterm zone="pango-item-split"><primary sortas="pango_item_split">pango_item_split</primary></indexterm><programlisting><link linkend="PangoItem">PangoItem</link> *         pango_item_split                    (<link linkend="PangoItem">PangoItem</link> *orig,
+                                                         <link linkend="int">int</link> split_index,
+                                                         <link linkend="int">int</link> split_offset);</programlisting>
+<para>
+Modifies <parameter>orig</parameter> to cover only the text after <parameter>split_index</parameter>, and
+returns a new item that covers the text before <parameter>split_index</parameter> that
+used to be in <parameter>orig</parameter>. You can think of <parameter>split_index</parameter> as the length of
+the returned item. <parameter>split_index</parameter> may not be 0, and it may not be
+greater than or equal to the length of <parameter>orig</parameter> (that is, there must
+be at least one byte assigned to each item, you can't create a
+zero-length item). <parameter>split_offset</parameter> is the length of the first item in
+chars, and must be provided because the text used to generate the
+item isn't available, so <link linkend="pango-item-split"><function>pango_item_split()</function></link> can't count the char
+length of the split items itself.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>orig</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoItem"><type>PangoItem</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>split_index</parameter>&#160;:</term>
+<listitem><simpara> byte index of position to split item, relative to the start of the item
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>split_offset</parameter>&#160;:</term>
+<listitem><simpara> number of chars between start of <parameter>orig</parameter> and <parameter>split_index</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> new item representing text before <parameter>split_index</parameter>, which
+              should be freed with <link linkend="pango-item-free"><function>pango_item_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-reorder-items" role="function">
+<title>pango_reorder_items ()</title>
+<indexterm zone="pango-reorder-items"><primary sortas="pango_reorder_items">pango_reorder_items</primary></indexterm><programlisting><link linkend="GList">GList</link> *             pango_reorder_items                 (<link linkend="GList">GList</link> *logical_items);</programlisting>
+<para>
+From a list of items in logical order and the associated
+directional levels, produce a list in visual order.
+The original list is unmodified.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>logical_items</parameter>&#160;:</term>
+<listitem><simpara>  a <link linkend="GList"><type>GList</type></link> of <link linkend="PangoItem"><type>PangoItem</type></link> in logical order.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="GList"><type>GList</type></link> of <link linkend="PangoItem"><type>PangoItem</type></link> structures in visual order.
+
+(Please open a bug if you use this function.
+ It is not a particularly convenient interface, and the code
+ is duplicated elsewhere in Pango for that reason.)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-new" role="function">
+<title>pango_context_new ()</title>
+<indexterm zone="pango-context-new"><primary sortas="pango_context_new">pango_context_new</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_context_new                   (void);</programlisting>
+<para>
+Creates a new <link linkend="PangoContext"><type>PangoContext</type></link> initialized to default values.
+</para>
+<para>
+This function is not particularly useful as it should always
+be followed by a <link linkend="pango-context-set-font-map"><function>pango_context_set_font_map()</function></link> call, and the
+function <link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> does these two steps
+together and hence users are recommended to use that.
+</para>
+<para>
+If you are using Pango as part of a higher-level system,
+that system may have it's own way of create a <link linkend="PangoContext"><type>PangoContext</type></link>.
+For instance, the GTK+ toolkit has, among others,
+<link linkend="gdk-pango-context-get-for-screen"><function>gdk_pango_context_get_for_screen()</function></link>, and
+<link linkend="gtk-widget-get-pango-context"><function>gtk_widget_get_pango_context()</function></link>.  Use those instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoContext"><type>PangoContext</type></link>, which should
+              be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-set-font-map" role="function">
+<title>pango_context_set_font_map ()</title>
+<indexterm zone="pango-context-set-font-map"><primary sortas="pango_context_set_font_map">pango_context_set_font_map</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_font_map          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoFontMap">PangoFontMap</link> *font_map);</programlisting>
+<para>
+Sets the font map to be searched when fonts are looked-up in this context.
+This is only for internal use by Pango backends, a <link linkend="PangoContext"><type>PangoContext</type></link> obtained
+via one of the recommended methods should already have a suitable font map.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font_map</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoFontMap"><type>PangoFontMap</type></link> to set.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-get-font-map" role="function" condition="since:1.6">
+<title>pango_context_get_font_map ()</title>
+<indexterm zone="pango-context-get-font-map" role="1.6"><primary sortas="pango_context_get_font_map">pango_context_get_font_map</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_context_get_font_map          (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Gets the <link linkend="PangoFontmap"><type>PangoFontmap</type></link> used to look up fonts for this context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the font map for the <link linkend="PangoContext"><type>PangoContext</type></link>. This value
+ is owned by Pango and should not be unreferenced.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-context-get-font-description" role="function">
+<title>pango_context_get_font_description ()</title>
+<indexterm zone="pango-context-get-font-description"><primary sortas="pango_context_get_font_description">pango_context_get_font_description</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_context_get_font_description
+                                                        (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieve the default font description for the context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a pointer to the context's default font description.
+              This value must not be modified or freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-set-font-description" role="function">
+<title>pango_context_set_font_description ()</title>
+<indexterm zone="pango-context-set-font-description"><primary sortas="pango_context_set_font_description">pango_context_set_font_description</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_font_description  (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Set the default font description for the context</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> the new pango font description
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-get-language" role="function">
+<title>pango_context_get_language ()</title>
+<indexterm zone="pango-context-get-language"><primary sortas="pango_context_get_language">pango_context_get_language</primary></indexterm><programlisting><link linkend="PangoLanguage">PangoLanguage</link> *     pango_context_get_language          (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieves the global language tag for the context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the global language tag.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-set-language" role="function">
+<title>pango_context_set_language ()</title>
+<indexterm zone="pango-context-set-language"><primary sortas="pango_context_set_language">pango_context_set_language</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_language          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Sets the global language tag for the context.  The default language
+for the locale of the running process can be found using
+<link linkend="pango-language-get-default"><function>pango_language_get_default()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> the new language tag.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-get-base-dir" role="function">
+<title>pango_context_get_base_dir ()</title>
+<indexterm zone="pango-context-get-base-dir"><primary sortas="pango_context_get_base_dir">pango_context_get_base_dir</primary></indexterm><programlisting><link linkend="PangoDirection">PangoDirection</link>      pango_context_get_base_dir          (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieves the base direction for the context. See
+<link linkend="pango-context-set-base-dir"><function>pango_context_set_base_dir()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the base direction for the context.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-set-base-dir" role="function">
+<title>pango_context_set_base_dir ()</title>
+<indexterm zone="pango-context-set-base-dir"><primary sortas="pango_context_set_base_dir">pango_context_set_base_dir</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_base_dir          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoDirection">PangoDirection</link> direction);</programlisting>
+<para>
+Sets the base direction for the context.
+</para>
+<para>
+The base direction is used in applying the Unicode bidirectional
+algorithm; if the <parameter>direction</parameter> is <link linkend="PANGO-DIRECTION-LTR--CAPS"><literal>PANGO_DIRECTION_LTR</literal></link> or
+<link linkend="PANGO-DIRECTION-RTL--CAPS"><literal>PANGO_DIRECTION_RTL</literal></link>, then the value will be used as the paragraph
+direction in the Unicode bidirectional algorithm.  A value of
+<link linkend="PANGO-DIRECTION-WEAK-LTR--CAPS"><literal>PANGO_DIRECTION_WEAK_LTR</literal></link> or <link linkend="PANGO-DIRECTION-WEAK-RTL--CAPS"><literal>PANGO_DIRECTION_WEAK_RTL</literal></link> is used only
+for paragraphs that do not contain any strong characters themselves.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>direction</parameter>&#160;:</term>
+<listitem><simpara> the new base direction
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-get-base-gravity" role="function" condition="since:1.16">
+<title>pango_context_get_base_gravity ()</title>
+<indexterm zone="pango-context-get-base-gravity" role="1.16"><primary sortas="pango_context_get_base_gravity">pango_context_get_base_gravity</primary></indexterm><programlisting><link linkend="PangoGravity">PangoGravity</link>        pango_context_get_base_gravity      (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieves the base gravity for the context. See
+<link linkend="pango-context-set-base-gravity"><function>pango_context_set_base_gravity()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the base gravity for the context.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-context-set-base-gravity" role="function" condition="since:1.16">
+<title>pango_context_set_base_gravity ()</title>
+<indexterm zone="pango-context-set-base-gravity" role="1.16"><primary sortas="pango_context_set_base_gravity">pango_context_set_base_gravity</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_base_gravity      (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoGravity">PangoGravity</link> gravity);</programlisting>
+<para>
+Sets the base gravity for the context.
+</para>
+<para>
+The base gravity is used in laying vertical text out.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>gravity</parameter>&#160;:</term>
+<listitem><simpara> the new base gravity
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-context-get-gravity" role="function" condition="since:1.16">
+<title>pango_context_get_gravity ()</title>
+<indexterm zone="pango-context-get-gravity" role="1.16"><primary sortas="pango_context_get_gravity">pango_context_get_gravity</primary></indexterm><programlisting><link linkend="PangoGravity">PangoGravity</link>        pango_context_get_gravity           (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieves the gravity for the context. This is similar to
+<link linkend="pango-context-get-base-gravity"><function>pango_context_get_base_gravity()</function></link>, except for when the base gravity
+is <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link> for which <link linkend="pango-gravity-get-for-matrix"><function>pango_gravity_get_for_matrix()</function></link> is used
+to return the gravity from the current context matrix.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the resolved gravity for the context.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-context-get-gravity-hint" role="function" condition="since:1.16">
+<title>pango_context_get_gravity_hint ()</title>
+<indexterm zone="pango-context-get-gravity-hint" role="1.16"><primary sortas="pango_context_get_gravity_hint">pango_context_get_gravity_hint</primary></indexterm><programlisting><link linkend="PangoGravityHint">PangoGravityHint</link>    pango_context_get_gravity_hint      (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieves the gravity hint for the context. See
+<link linkend="pango-context-set-gravity-hint"><function>pango_context_set_gravity_hint()</function></link> for details.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the gravity hint for the context.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-context-set-gravity-hint" role="function" condition="since:1.16">
+<title>pango_context_set_gravity_hint ()</title>
+<indexterm zone="pango-context-set-gravity-hint" role="1.16"><primary sortas="pango_context_set_gravity_hint">pango_context_set_gravity_hint</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_gravity_hint      (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoGravityHint">PangoGravityHint</link> hint);</programlisting>
+<para>
+Sets the gravity hint for the context.
+</para>
+<para>
+The gravity hint is used in laying vertical text out, and is only relevant
+if gravity of the context as returned by <link linkend="pango-context-get-gravity"><function>pango_context_get_gravity()</function></link>
+is set <link linkend="PANGO-GRAVITY-EAST--CAPS"><literal>PANGO_GRAVITY_EAST</literal></link> or <link linkend="PANGO-GRAVITY-WEST--CAPS"><literal>PANGO_GRAVITY_WEST</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>hint</parameter>&#160;:</term>
+<listitem><simpara> the new gravity hint
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-context-get-matrix" role="function" condition="since:1.6">
+<title>pango_context_get_matrix ()</title>
+<indexterm zone="pango-context-get-matrix" role="1.6"><primary sortas="pango_context_get_matrix">pango_context_get_matrix</primary></indexterm><programlisting>const <link linkend="PangoMatrix">PangoMatrix</link> * pango_context_get_matrix            (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Gets the transformation matrix that will be applied when
+rendering with this context. See <link linkend="pango-context-set-matrix"><function>pango_context_set_matrix()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the matrix, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no matrix has been set
+ (which is the same as the identity matrix). The returned
+ matrix is owned by Pango and must not be modified or
+ freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-context-set-matrix" role="function" condition="since:1.6">
+<title>pango_context_set_matrix ()</title>
+<indexterm zone="pango-context-set-matrix" role="1.6"><primary sortas="pango_context_set_matrix">pango_context_set_matrix</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_set_matrix            (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);</programlisting>
+<para>
+Sets the transformation matrix that will be applied when rendering
+with this context. Note that reported metrics are in the user space
+coordinates before the application of the matrix, not device-space
+coordinates after the application of the matrix. So, they don't scale
+with the matrix, though they may change slightly for different
+matrices, depending on how the text is fit to the pixel grid.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to unset any existing matrix.
+ (No matrix set is the same as setting the identity matrix.)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-context-load-font" role="function">
+<title>pango_context_load_font ()</title>
+<indexterm zone="pango-context-load-font"><primary sortas="pango_context_load_font">pango_context_load_font</primary></indexterm><programlisting><link linkend="PangoFont">PangoFont</link> *         pango_context_load_font             (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Loads the font in one of the fontmaps in the context
+that is the closest match for <parameter>desc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> describing the font to load
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the font loaded, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no font matched.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-load-fontset" role="function">
+<title>pango_context_load_fontset ()</title>
+<indexterm zone="pango-context-load-fontset"><primary sortas="pango_context_load_fontset">pango_context_load_fontset</primary></indexterm><programlisting><link linkend="PangoFontset">PangoFontset</link> *      pango_context_load_fontset          (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Load a set of fonts in the context that can be used to render
+a font matching <parameter>desc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> describing the fonts to load
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link> the fonts will be used for
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the fontset, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no font matched.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-get-metrics" role="function">
+<title>pango_context_get_metrics ()</title>
+<indexterm zone="pango-context-get-metrics"><primary sortas="pango_context_get_metrics">pango_context_get_metrics</primary></indexterm><programlisting><link linkend="PangoFontMetrics">PangoFontMetrics</link> *  pango_context_get_metrics           (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Get overall metric information for a particular font
+description.  Since the metrics may be substantially different for
+different scripts, a language tag can be provided to indicate that
+the metrics should be retrieved that correspond to the script(s)
+used by that language.
+</para>
+<para>
+The <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> is interpreted in the same way as
+by <link linkend="pango-itemize"><function>pango_itemize()</function></link>, and the family name may be a comma separated
+list of figures. If characters from multiple of these families
+would be used to render the string, then the returned fonts would
+be a composite of the metrics for the fonts loaded for the
+individual families.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> structure.  <link linkend="NULL--CAPS"><literal>NULL</literal></link> means that the font
+             description from the context will be used.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> language tag used to determine which script to get the metrics
+           for. <link linkend="NULL--CAPS"><literal>NULL</literal></link> means that the language tag from the context will
+           be used. If no language tag is set on the context, metrics
+           for the default language (as determined by
+           <link linkend="pango-language-get-default"><function>pango_language_get_default()</function></link>) will be returned.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFontMetrics"><type>PangoFontMetrics</type></link> object. The caller must call <link linkend="pango-font-metrics-unref"><function>pango_font_metrics_unref()</function></link>
+  when finished using the object.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-context-list-families" role="function">
+<title>pango_context_list_families ()</title>
+<indexterm zone="pango-context-list-families"><primary sortas="pango_context_list_families">pango_context_list_families</primary></indexterm><programlisting><link linkend="void">void</link>                pango_context_list_families         (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoFontFamily">PangoFontFamily</link> ***families,
+                                                         <link linkend="int">int</link> *n_families);</programlisting>
+<para>
+List all families for a context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>families</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of <link linkend="PangoFontFamily"><type>PangoFontFamily</type></link> *.
+           This array should be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_families</parameter>&#160;:</term>
+<listitem><simpara> location to store the number of elements in <parameter>descs</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-break" role="function">
+<title>pango_break ()</title>
+<indexterm zone="pango-break"><primary sortas="pango_break">pango_break</primary></indexterm><programlisting><link linkend="void">void</link>                pango_break                         (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *attrs,
+                                                         <link linkend="int">int</link> attrs_len);</programlisting>
+<para>
+Determines possible line, word, and character breaks
+for a string of Unicode text with a single analysis.  For most
+purposes you may want to use <link linkend="pango-get-log-attrs"><function>pango_get_log_attrs()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text to process
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    length of <parameter>text</parameter> in bytes (may be -1 if <parameter>text</parameter> is nul-terminated)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>analysis</parameter>&#160;:</term>
+<listitem><simpara>  <link linkend="PangoAnalysis"><type>PangoAnalysis</type></link> structure from <link linkend="pango-itemize"><function>pango_itemize()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs</parameter>&#160;:</term>
+<listitem><simpara>     an array to store character information in
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs_len</parameter>&#160;:</term>
+<listitem><simpara> size of the array passed as <parameter>attrs</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-get-log-attrs" role="function">
+<title>pango_get_log_attrs ()</title>
+<indexterm zone="pango-get-log-attrs"><primary sortas="pango_get_log_attrs">pango_get_log_attrs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_get_log_attrs                 (const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="int">int</link> level,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *log_attrs,
+                                                         <link linkend="int">int</link> attrs_len);</programlisting>
+<para>
+Computes a <link linkend="PangoLogAttr"><type>PangoLogAttr</type></link> for each character in <parameter>text</parameter>. The <parameter>log_attrs</parameter>
+array must have one <link linkend="PangoLogAttr"><type>PangoLogAttr</type></link> for each position in <parameter>text</parameter>; if
+<parameter>text</parameter> contains N characters, it has N+1 positions, including the
+last position at the end of the text. <parameter>text</parameter> should be an entire
+paragraph; logical attributes can't be computed without context
+(for example you need to see spaces on either side of a word to know
+the word is a word).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text to process
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length in bytes of <parameter>text</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>level</parameter>&#160;:</term>
+<listitem><simpara> embedding level, or -1 if unknown
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> language tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>log_attrs</parameter>&#160;:</term>
+<listitem><simpara> array with one <link linkend="PangoLogAttr"><type>PangoLogAttr</type></link> per character in <parameter>text</parameter>, plus one extra, to be filled in
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs_len</parameter>&#160;:</term>
+<listitem><simpara> length of <parameter>log_attrs</parameter> array
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-find-paragraph-boundary" role="function">
+<title>pango_find_paragraph_boundary ()</title>
+<indexterm zone="pango-find-paragraph-boundary"><primary sortas="pango_find_paragraph_boundary">pango_find_paragraph_boundary</primary></indexterm><programlisting><link linkend="void">void</link>                pango_find_paragraph_boundary       (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="gint">gint</link> length,
+                                                         <link linkend="gint">gint</link> *paragraph_delimiter_index,
+                                                         <link linkend="gint">gint</link> *next_paragraph_start);</programlisting>
+<para>
+Locates a paragraph boundary in <parameter>text</parameter>. A boundary is caused by
+delimiter characters, such as a newline, carriage return, carriage
+return-newline pair, or Unicode paragraph separator character.  The
+index of the run of delimiters is returned in
+<parameter>paragraph_delimiter_index</parameter>. The index of the start of the paragraph
+(index after all delimiters) is stored in <parameter>next_paragraph_start</parameter>.
+</para>
+<para>
+If no delimiters are found, both <parameter>paragraph_delimiter_index</parameter> and
+<parameter>next_paragraph_start</parameter> are filled with the length of <parameter>text</parameter> (an index one
+off the end).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> UTF-8 text
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of <parameter>text</parameter> in bytes, or -1 if nul-terminated
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>paragraph_delimiter_index</parameter>&#160;:</term>
+<listitem><simpara> return location for index of delimiter
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>next_paragraph_start</parameter>&#160;:</term>
+<listitem><simpara> return location for start of next paragraph
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-default-break" role="function">
+<title>pango_default_break ()</title>
+<indexterm zone="pango-default-break"><primary sortas="pango_default_break">pango_default_break</primary></indexterm><programlisting><link linkend="void">void</link>                pango_default_break                 (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="PangoLogAttr">PangoLogAttr</link> *attrs,
+                                                         <link linkend="int">int</link> attrs_len);</programlisting>
+<para>
+This is the default break algorithm, used if no language
+engine overrides it. Normally you should use <link linkend="pango-break"><function>pango_break()</function></link>
+instead. Unlike <link linkend="pango-break"><function>pango_break()</function></link>,
+<parameter>analysis</parameter> can be <link linkend="NULL--CAPS"><literal>NULL</literal></link>, but only do that if you know what
+you're doing. If you need an analysis to pass to <link linkend="pango-break"><function>pango_break()</function></link>,
+you need to <link linkend="pango-itemize"><function>pango_itemize()</function></link>.  In most cases however you should
+simply use <link linkend="pango-get-log-attrs"><function>pango_get_log_attrs()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> text to break
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of text in bytes (may be -1 if <parameter>text</parameter> is nul-terminated)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>analysis</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAnalysis"><type>PangoAnalysis</type></link> for the <parameter>text</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs</parameter>&#160;:</term>
+<listitem><simpara> logical attributes to fill in
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attrs_len</parameter>&#160;:</term>
+<listitem><simpara> size of the array passed as <parameter>attrs</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoLogAttr" role="struct">
+<title>PangoLogAttr</title>
+<indexterm zone="PangoLogAttr"><primary sortas="PangoLogAttr">PangoLogAttr</primary></indexterm><programlisting>typedef struct {
+  guint is_line_break : 1;      /* Can break line in front of character */
+
+  guint is_mandatory_break : 1; /* Must break line in front of character */
+
+  guint is_char_break : 1;      /* Can break here when doing char wrap */
+
+  guint is_white : 1;           /* Whitespace character */
+
+  /* Cursor can appear in front of character (i.e. this is a grapheme
+   * boundary, or the first character in the text).
+   */
+  guint is_cursor_position : 1;
+
+  /* Note that in degenerate cases, you could have both start/end set on
+   * some text, most likely for sentences (e.g. no space after a period, so
+   * the next sentence starts right away).
+   */
+
+  guint is_word_start : 1;      /* first character in a word */
+  guint is_word_end   : 1;      /* is first non-word char after a word */
+
+  /* There are two ways to divide sentences. The first assigns all
+   * intersentence whitespace/control/format chars to some sentence,
+   * so all chars are in some sentence; is_sentence_boundary denotes
+   * the boundaries there. The second way doesn't assign
+   * between-sentence spaces, etc. to any sentence, so
+   * is_sentence_start/is_sentence_end mark the boundaries of those
+   * sentences.
+   */
+  guint is_sentence_boundary : 1;
+  guint is_sentence_start : 1;  /* first character in a sentence */
+  guint is_sentence_end : 1;    /* first non-sentence char after a sentence */
+
+  /* If set, backspace deletes one character rather than
+   * the entire grapheme cluster.
+   */
+  guint backspace_deletes_character : 1;
+
+  /* Only few space variants (U+0020 and U+00A0) have variable
+   * width during justification.
+   */
+  guint is_expandable_space : 1;
+
+  /* Word boundary as defined by UAX#29 */
+  guint is_word_boundary : 1;  /* is NOT in the middle of a word */
+} PangoLogAttr;
+</programlisting>
+<para>
+The <link linkend="PangoLogAttr"><type>PangoLogAttr</type></link> structure stores information
+about the attributes of a single character.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_line_break</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>if set, can break line in front of character
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_mandatory_break</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>if set, must break line in front of character
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_char_break</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>if set, can break here when doing character wrapping
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_white</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is whitespace character
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_cursor_position</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>if set, cursor can appear in front of character.
+       i.e. this is a grapheme boundary, or the first character
+        in the text.
+       This flag implements Unicode's
+       <ulink url="http://www.unicode.org/reports/tr29/">Grapheme
+       Cluster Boundaries</ulink> semantics.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_word_start</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is first character in a word
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_word_end</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is first non-word char after a word
+       Note that in degenerate cases, you could have both <parameter>is_word_start</parameter>
+       and <parameter>is_word_end</parameter> set for some character.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_sentence_boundary</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is a sentence boundary.
+        There are two ways to divide sentences. The first assigns all
+       inter-sentence whitespace/control/format chars to some sentence,
+       so all chars are in some sentence; <parameter>is_sentence_boundary</parameter> denotes
+       the boundaries there. The second way doesn't assign
+       between-sentence spaces, etc. to any sentence, so
+       <parameter>is_sentence_start</parameter>/<parameter>is_sentence_end</parameter> mark the boundaries
+       of those sentences.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_sentence_start</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is first character in a sentence
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_sentence_end</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is first char after a sentence.
+       Note that in degenerate cases, you could have both <parameter>is_sentence_start</parameter>
+       and <parameter>is_sentence_end</parameter> set for some character. (e.g. no space after a
+       period, so the next sentence starts right away)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>backspace_deletes_character</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>if set, backspace deletes one character
+                              rather than the entire grapheme cluster. This
+                              field is only meaningful on grapheme
+                              boundaries (where <parameter>is_cursor_position</parameter> is
+                              set).  In some languages, the full grapheme
+                              (e.g.  letter + diacritics) is considered a
+                              unit, while in others, each decomposed
+                              character in the grapheme is a unit. In the
+                              default implementation of <link linkend="pango-break"><function>pango_break()</function></link>, this
+                              bit is set on all grapheme boundaries except
+                              those following Latin, Cyrillic or Greek base
+                              characters.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_expandable_space</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is a whitespace character that can possibly be
+                      expanded for justification purposes. (Since: 1.18)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>is_word_boundary</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>is a word boundary.
+       More specifically, means that this is not a position in the middle
+       of a word.  For example, both sides of a punctuation mark are
+       considered word boundaries.  This flag is particularly useful when
+       selecting text word-by-word.
+       This flag implements Unicode's
+       <ulink url="http://www.unicode.org/reports/tr29/">Word
+       Boundaries</ulink> semantics.
+       (Since: 1.22)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-shape" role="function">
+<title>pango_shape ()</title>
+<indexterm zone="pango-shape"><primary sortas="pango_shape">pango_shape</primary></indexterm><programlisting><link linkend="void">void</link>                pango_shape                         (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="gint">gint</link> length,
+                                                         const <link linkend="PangoAnalysis">PangoAnalysis</link> *analysis,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);</programlisting>
+<para>
+Given a segment of text and the corresponding
+<link linkend="PangoAnalysis"><type>PangoAnalysis</type></link> structure returned from <link linkend="pango-itemize"><function>pango_itemize()</function></link>,
+convert the characters into glyphs. You may also pass
+in only a substring of the item from <link linkend="pango-itemize"><function>pango_itemize()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text to process
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    the length (in bytes) of <parameter>text</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>analysis</parameter>&#160;:</term>
+<listitem><simpara>  <link linkend="PangoAnalysis"><type>PangoAnalysis</type></link> structure from <link linkend="pango-itemize"><function>pango_itemize()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>    glyph string in which to store results
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/modules.xml b/docs/xml/modules.xml
new file mode 100755 (executable)
index 0000000..87d0d7d
--- /dev/null
@@ -0,0 +1,194 @@
+<refentry id="pango-Modules">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Modules.top_of_page">Modules</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Modules</refname>
+<refpurpose>Support for loadable modules</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Modules.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoIncludedModule">PangoIncludedModule</link>;
+                    <link linkend="PangoMap">PangoMap</link>;
+                    <link linkend="PangoMapEntry">PangoMapEntry</link>;
+<link linkend="PangoMap">PangoMap</link> *          <link linkend="pango-find-map">pango_find_map</link>                      (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="guint">guint</link> engine_type_id,
+                                                         <link linkend="guint">guint</link> render_type_id);
+<link linkend="PangoEngine">PangoEngine</link> *       <link linkend="pango-map-get-engine">pango_map_get_engine</link>                (<link linkend="PangoMap">PangoMap</link> *map,
+                                                         <link linkend="PangoScript">PangoScript</link> script);
+<link linkend="void">void</link>                <link linkend="pango-map-get-engines">pango_map_get_engines</link>               (<link linkend="PangoMap">PangoMap</link> *map,
+                                                         <link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="GSList">GSList</link> **exact_engines,
+                                                         <link linkend="GSList">GSList</link> **fallback_engines);
+<link linkend="void">void</link>                <link linkend="pango-module-register">pango_module_register</link>               (<link linkend="PangoIncludedModule">PangoIncludedModule</link> *module);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Modules.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Functions and macros in this section are used to support loading dynamic
+modules that add engines to Pango at run time.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Modules.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoIncludedModule" role="struct">
+<title>PangoIncludedModule</title>
+<indexterm zone="PangoIncludedModule"><primary sortas="PangoIncludedModule">PangoIncludedModule</primary></indexterm><programlisting>typedef struct {
+  void (*list) (PangoEngineInfo **engines,
+               int              *n_engines);
+  void (*init) (GTypeModule      *module);
+  void (*exit) (void);
+  PangoEngine *(*create) (const char       *id);
+} PangoIncludedModule;
+</programlisting>
+<para>
+The <link linkend="PangoIncludedModule"><type>PangoIncludedModule</type></link> structure for a statically linked module
+contains the functions that would otherwise be loaded from a dynamically
+loaded module.
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>list</structfield>&#160;()</term>
+<listitem><simpara>a function that lists the engines defined in this module.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>init</structfield>&#160;()</term>
+<listitem><simpara>a function to initialize the module.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>exit</structfield>&#160;()</term>
+<listitem><simpara>a function to finalize the module.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>create</structfield>&#160;()</term>
+<listitem><simpara>a function to create an engine, given the engine name.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoMap" role="struct">
+<title>PangoMap</title>
+<indexterm zone="PangoMap"><primary sortas="PangoMap">PangoMap</primary></indexterm><programlisting>typedef struct _PangoMap PangoMap;</programlisting>
+<para>
+A <link linkend="PangoMap"><type>PangoMap</type></link> structure can be used to determine the engine to
+use for each character.
+</para></refsect2>
+<refsect2 id="PangoMapEntry" role="struct">
+<title>PangoMapEntry</title>
+<indexterm zone="PangoMapEntry"><primary sortas="PangoMapEntry">PangoMapEntry</primary></indexterm><programlisting>typedef struct _PangoMapEntry PangoMapEntry;</programlisting>
+<para>
+A <link linkend="PangoMapEntry"><type>PangoMapEntry</type></link> contains information about the engine that should be used
+for the codepoint to which this entry belongs and also whether the engine
+matches the language tag for this entry's map exactly or just approximately.
+</para></refsect2>
+<refsect2 id="pango-find-map" role="function">
+<title>pango_find_map ()</title>
+<indexterm zone="pango-find-map"><primary sortas="pango_find_map">pango_find_map</primary></indexterm><programlisting><link linkend="PangoMap">PangoMap</link> *          pango_find_map                      (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="guint">guint</link> engine_type_id,
+                                                         <link linkend="guint">guint</link> render_type_id);</programlisting>
+<para>
+Locate a <link linkend="PangoMap"><type>PangoMap</type></link> for a particular engine type and render
+type. The resulting map can be used to determine the engine
+for each character.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> the language tag for which to find the map
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>engine_type_id</parameter>&#160;:</term>
+<listitem><simpara> the engine type for the map to find
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>render_type_id</parameter>&#160;:</term>
+<listitem><simpara> the render type for the map to find
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the suitable <link linkend="PangoMap"><type>PangoMap</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-map-get-engine" role="function">
+<title>pango_map_get_engine ()</title>
+<indexterm zone="pango-map-get-engine"><primary sortas="pango_map_get_engine">pango_map_get_engine</primary></indexterm><programlisting><link linkend="PangoEngine">PangoEngine</link> *       pango_map_get_engine                (<link linkend="PangoMap">PangoMap</link> *map,
+                                                         <link linkend="PangoScript">PangoScript</link> script);</programlisting>
+<para>
+Returns the best engine listed in the map for a given script</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>map</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMap"><type>PangoMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScript"><type>PangoScript</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the best engine, if one is listed for the script,
+   or <link linkend="NULL--CAPS"><literal>NULL</literal></link>. The lookup may cause the engine to be loaded;
+   once an engine is loaded, it won't be unloaded. If multiple
+   engines are exact for the script, the choice of which is
+   returned is arbitrary.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-map-get-engines" role="function" condition="since:1.4">
+<title>pango_map_get_engines ()</title>
+<indexterm zone="pango-map-get-engines" role="1.4"><primary sortas="pango_map_get_engines">pango_map_get_engines</primary></indexterm><programlisting><link linkend="void">void</link>                pango_map_get_engines               (<link linkend="PangoMap">PangoMap</link> *map,
+                                                         <link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="GSList">GSList</link> **exact_engines,
+                                                         <link linkend="GSList">GSList</link> **fallback_engines);</programlisting>
+<para>
+Finds engines in the map that handle the given script. The returned
+lists should be freed with g_slist_free, but the engines in the
+lists are owned by GLib and will be kept around permanently, so
+they should not be unref'ed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>map</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMap"><type>PangoMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScript"><type>PangoScript</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>exact_engines</parameter>&#160;:</term>
+<listitem><simpara> location to store list of engines that exactly
+ handle this script.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>fallback_engines</parameter>&#160;:</term>
+<listitem><simpara> location to store list of engines that approximately
+ handle this script.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-module-register" role="function">
+<title>pango_module_register ()</title>
+<indexterm zone="pango-module-register"><primary sortas="pango_module_register">pango_module_register</primary></indexterm><programlisting><link linkend="void">void</link>                pango_module_register               (<link linkend="PangoIncludedModule">PangoIncludedModule</link> *module);</programlisting>
+<para>
+Registers a statically linked module with Pango. The
+<link linkend="PangoIncludedModule"><type>PangoIncludedModule</type></link> structure that is passed in contains the
+functions that would otherwise be loaded from a dynamically loaded
+module.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>module</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoIncludedModule"><type>PangoIncludedModule</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/opentype.xml b/docs/xml/opentype.xml
new file mode 100755 (executable)
index 0000000..acca09c
--- /dev/null
@@ -0,0 +1,1243 @@
+<refentry id="pango-OpenType-Font-Handling">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-OpenType-Font-Handling.top_of_page">OpenType Font Handling</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>OpenType Font Handling</refname>
+<refpurpose>Obtaining information from OpenType tables</refpurpose>
+</refnamediv>
+<refsect1 id="pango-OpenType-Font-Handling.stability-level">
+<title>Stability Level</title>
+Unstable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv id="pango-OpenType-Font-Handling.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoOTInfo"/><anchor id="PangoOTRuleset"/>
+<synopsis>
+typedef             <link linkend="PangoOTTag">PangoOTTag</link>;
+                    <link linkend="PangoOTInfo-struct">PangoOTInfo</link>;
+                    <link linkend="PangoOTBuffer">PangoOTBuffer</link>;
+                    <link linkend="PangoOTGlyph">PangoOTGlyph</link>;
+                    <link linkend="PangoOTRuleset-struct">PangoOTRuleset</link>;
+                    <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link>;
+enum                <link linkend="PangoOTTableType">PangoOTTableType</link>;
+                    <link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link>;
+#define             <link linkend="PANGO-OT-TAG-MAKE--CAPS">PANGO_OT_TAG_MAKE</link>                   (c1,c2,c3,c4)
+#define             <link linkend="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS">PANGO_OT_TAG_MAKE_FROM_STRING</link>       (s)
+#define             <link linkend="PANGO-OT-ALL-GLYPHS--CAPS">PANGO_OT_ALL_GLYPHS</link>
+#define             <link linkend="PANGO-OT-NO-FEATURE--CAPS">PANGO_OT_NO_FEATURE</link>
+#define             <link linkend="PANGO-OT-NO-SCRIPT--CAPS">PANGO_OT_NO_SCRIPT</link>
+#define             <link linkend="PANGO-OT-DEFAULT-LANGUAGE--CAPS">PANGO_OT_DEFAULT_LANGUAGE</link>
+#define             <link linkend="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS">PANGO_OT_TAG_DEFAULT_LANGUAGE</link>
+#define             <link linkend="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS">PANGO_OT_TAG_DEFAULT_SCRIPT</link>
+<link linkend="PangoOTInfo">PangoOTInfo</link> *       <link linkend="pango-ot-info-get">pango_ot_info_get</link>                   (<link linkend="FT-Face">FT_Face</link> face);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-ot-info-find-script">pango_ot_info_find_script</link>           (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> script_tag,
+                                                         <link linkend="guint">guint</link> *script_index);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-ot-info-find-language">pango_ot_info_find_language</link>         (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> language_tag,
+                                                         <link linkend="guint">guint</link> *language_index,
+                                                         <link linkend="guint">guint</link> *required_feature_index);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-ot-info-find-feature">pango_ot_info_find_feature</link>          (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> feature_tag,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="guint">guint</link> language_index,
+                                                         <link linkend="guint">guint</link> *feature_index);
+<link linkend="PangoOTTag">PangoOTTag</link> *        <link linkend="pango-ot-info-list-scripts">pango_ot_info_list_scripts</link>          (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type);
+<link linkend="PangoOTTag">PangoOTTag</link> *        <link linkend="pango-ot-info-list-languages">pango_ot_info_list_languages</link>        (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> language_tag);
+<link linkend="PangoOTTag">PangoOTTag</link> *        <link linkend="pango-ot-info-list-features">pango_ot_info_list_features</link>         (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> tag,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="guint">guint</link> language_index);
+<link linkend="PangoOTBuffer">PangoOTBuffer</link> *     <link linkend="pango-ot-buffer-new">pango_ot_buffer_new</link>                 (<link linkend="PangoFcFont">PangoFcFont</link> *font);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-destroy">pango_ot_buffer_destroy</link>             (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-clear">pango_ot_buffer_clear</link>               (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-add-glyph">pango_ot_buffer_add_glyph</link>           (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="guint">guint</link> glyph,
+                                                         <link linkend="guint">guint</link> properties,
+                                                         <link linkend="guint">guint</link> cluster);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-set-rtl">pango_ot_buffer_set_rtl</link>             (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="gboolean">gboolean</link> rtl);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-set-zero-width-marks">pango_ot_buffer_set_zero_width_marks</link>
+                                                        (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="gboolean">gboolean</link> zero_width_marks);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-get-glyphs">pango_ot_buffer_get_glyphs</link>          (const <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="PangoOTGlyph">PangoOTGlyph</link> **glyphs,
+                                                         <link linkend="int">int</link> *n_glyphs);
+<link linkend="void">void</link>                <link linkend="pango-ot-buffer-output">pango_ot_buffer_output</link>              (const <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);
+const <link linkend="PangoOTRuleset">PangoOTRuleset</link> * <link linkend="pango-ot-ruleset-get-for-description">pango_ot_ruleset_get_for_description</link>
+                                                        (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);
+<link linkend="PangoOTRuleset">PangoOTRuleset</link> *    <link linkend="pango-ot-ruleset-new">pango_ot_ruleset_new</link>                (<link linkend="PangoOTInfo">PangoOTInfo</link> *info);
+<link linkend="PangoOTRuleset">PangoOTRuleset</link> *    <link linkend="pango-ot-ruleset-new-for">pango_ot_ruleset_new_for</link>            (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoOTRuleset">PangoOTRuleset</link> *    <link linkend="pango-ot-ruleset-new-from-description">pango_ot_ruleset_new_from_description</link>
+                                                        (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);
+<link linkend="void">void</link>                <link linkend="pango-ot-ruleset-add-feature">pango_ot_ruleset_add_feature</link>        (<link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="guint">guint</link> feature_index,
+                                                         <link linkend="gulong">gulong</link> property_bit);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-ot-ruleset-maybe-add-feature">pango_ot_ruleset_maybe_add_feature</link>  (<link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> feature_tag,
+                                                         <link linkend="gulong">gulong</link> property_bit);
+<link linkend="guint">guint</link>               <link linkend="pango-ot-ruleset-maybe-add-features">pango_ot_ruleset_maybe_add_features</link> (<link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         const <link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link> *features,
+                                                         <link linkend="guint">guint</link> n_features);
+<link linkend="guint">guint</link>               <link linkend="pango-ot-ruleset-get-feature-count">pango_ot_ruleset_get_feature_count</link>  (const <link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="guint">guint</link> *n_gsub_features,
+                                                         <link linkend="guint">guint</link> *n_gpos_features);
+<link linkend="void">void</link>                <link linkend="pango-ot-ruleset-substitute">pango_ot_ruleset_substitute</link>         (const <link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);
+<link linkend="void">void</link>                <link linkend="pango-ot-ruleset-position">pango_ot_ruleset_position</link>           (const <link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);
+<link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> * <link linkend="pango-ot-ruleset-description-copy">pango_ot_ruleset_description_copy</link>
+                                                        (const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-ot-ruleset-description-equal">pango_ot_ruleset_description_equal</link>  (const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc1,
+                                                         const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc2);
+<link linkend="void">void</link>                <link linkend="pango-ot-ruleset-description-free">pango_ot_ruleset_description_free</link>   (<link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);
+<link linkend="guint">guint</link>               <link linkend="pango-ot-ruleset-description-hash">pango_ot_ruleset_description_hash</link>   (const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);
+<link linkend="PangoOTTag">PangoOTTag</link>          <link linkend="pango-ot-tag-from-language">pango_ot_tag_from_language</link>          (<link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoOTTag">PangoOTTag</link>          <link linkend="pango-ot-tag-from-script">pango_ot_tag_from_script</link>            (<link linkend="PangoScript">PangoScript</link> script);
+<link linkend="PangoLanguage">PangoLanguage</link> *     <link linkend="pango-ot-tag-to-language">pango_ot_tag_to_language</link>            (<link linkend="PangoOTTag">PangoOTTag</link> language_tag);
+<link linkend="PangoScript">PangoScript</link>         <link linkend="pango-ot-tag-to-script">pango_ot_tag_to_script</link>              (<link linkend="PangoOTTag">PangoOTTag</link> script_tag);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-OpenType-Font-Handling.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoOTInfo
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoOTRuleset
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="pango-OpenType-Font-Handling.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Functions and macros in this section are used to implement the OpenType Layout
+features and algorithms.  These are mostly useful when writing Fontconfig-based
+shaping engines
+</para>
+</refsect1>
+
+<refsect1 id="pango-OpenType-Font-Handling.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoOTTag" role="typedef">
+<title>PangoOTTag</title>
+<indexterm zone="PangoOTTag"><primary sortas="PangoOTTag">PangoOTTag</primary></indexterm><programlisting>typedef guint32 PangoOTTag;
+</programlisting>
+<para>
+The <type>PangoOTTag</type> typedef is used to represent TrueType and OpenType
+four letter tags inside Pango. Use <link linkend="PANGO-OT-TAG-MAKE--CAPS"><function>PANGO_OT_TAG_MAKE()</function></link>
+or <link linkend="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS"><function>PANGO_OT_TAG_MAKE_FROM_STRING()</function></link> macros to create <type>PangoOTTag</type>s manually.
+</para></refsect2>
+<refsect2 id="PangoOTInfo-struct" role="struct">
+<title>PangoOTInfo</title>
+<indexterm zone="PangoOTInfo-struct"><primary sortas="PangoOTInfo">PangoOTInfo</primary></indexterm><programlisting>typedef struct _PangoOTInfo PangoOTInfo;</programlisting>
+<para>
+The <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link> struct contains the various
+tables associated with an OpenType font. It contains only private fields and
+should only be accessed via the <function>pango_ot_info_*</function> functions
+which are documented below. To obtain a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>,
+use <link linkend="pango-ot-info-new"><function>pango_ot_info_new()</function></link>.
+</para></refsect2>
+<refsect2 id="PangoOTBuffer" role="struct">
+<title>PangoOTBuffer</title>
+<indexterm zone="PangoOTBuffer"><primary sortas="PangoOTBuffer">PangoOTBuffer</primary></indexterm><programlisting>typedef struct _PangoOTBuffer PangoOTBuffer;</programlisting>
+<para>
+The <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link> structure is used to store strings of glyphs associated
+with a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>, suitable for OpenType layout processing.  It contains
+only private fields and should only be accessed via the
+<function>pango_ot_buffer_*</function> functions which are documented below.
+To obtain a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>, use <link linkend="pango-ot-buffer-new"><function>pango_ot_buffer_new()</function></link>.
+</para></refsect2>
+<refsect2 id="PangoOTGlyph" role="struct">
+<title>PangoOTGlyph</title>
+<indexterm zone="PangoOTGlyph"><primary sortas="PangoOTGlyph">PangoOTGlyph</primary></indexterm><programlisting>typedef struct {
+  guint32  glyph;
+  guint    properties;
+  guint    cluster;
+  gushort  component;
+  gushort  ligID;
+
+  guint    internal;
+} PangoOTGlyph;
+</programlisting>
+<para>
+The <link linkend="PangoOTGlyph"><type>PangoOTGlyph</type></link> structure represents a single glyph together with
+information used for OpenType layout processing of the glyph.
+It contains the following fields.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="guint32">guint32</link>&#160;<structfield>glyph</structfield>;</term>
+<listitem><simpara>the glyph itself.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>properties</structfield>;</term>
+<listitem><simpara>the properties value, identifying which features should be
+            applied on this glyph.  See <link linkend="pango-ruleset-add-feature"><function>pango_ruleset_add_feature()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>cluster</structfield>;</term>
+<listitem><simpara>the cluster that this glyph belongs to.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gushort">gushort</link>&#160;<structfield>component</structfield>;</term>
+<listitem><simpara>a component value, set by the OpenType layout engine.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gushort">gushort</link>&#160;<structfield>ligID</structfield>;</term>
+<listitem><simpara>a ligature index value, set by the OpenType layout engine.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>internal</structfield>;</term>
+<listitem><simpara>for Pango internal use
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoOTRuleset-struct" role="struct">
+<title>PangoOTRuleset</title>
+<indexterm zone="PangoOTRuleset-struct"><primary sortas="PangoOTRuleset">PangoOTRuleset</primary></indexterm><programlisting>typedef struct _PangoOTRuleset PangoOTRuleset;</programlisting>
+<para>
+The <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> structure holds a
+set of features selected from the tables in an OpenType font.
+(A feature is an operation such as adjusting glyph positioning
+that should be applied to a text feature such as a certain
+type of accent.) A <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>
+is created with <link linkend="pango-ot-ruleset-new"><function>pango_ot_ruleset_new()</function></link>, features are added
+to it with <link linkend="pango-ot-ruleset-add-feature"><function>pango_ot_ruleset_add_feature()</function></link>, then it is
+applied to a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> with <link linkend="pango-ot-ruleset-shape"><function>pango_ot_ruleset_shape()</function></link>.
+</para></refsect2>
+<refsect2 id="PangoOTRulesetDescription" role="struct" condition="since:1.18">
+<title>PangoOTRulesetDescription</title>
+<indexterm zone="PangoOTRulesetDescription" role="1.18"><primary sortas="PangoOTRulesetDescription">PangoOTRulesetDescription</primary></indexterm><programlisting>typedef struct {
+  PangoScript               script;
+  PangoLanguage            *language;
+  const PangoOTFeatureMap  *static_gsub_features;
+  guint                   n_static_gsub_features;
+  const PangoOTFeatureMap  *static_gpos_features;
+  guint                   n_static_gpos_features;
+  const PangoOTFeatureMap  *other_features;
+  guint                   n_other_features;
+} PangoOTRulesetDescription;
+</programlisting>
+<para>
+The <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> structure holds all the information needed
+to build a complete <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> from an OpenType font.
+The main use of this struct is to act as the key for a per-font
+hash of rulesets.  The user populates a ruleset description and
+gets the ruleset using <link linkend="pango-ot-ruleset-get-for-description"><function>pango_ot_ruleset_get_for_description()</function></link>
+or create a new one using <link linkend="pango-ot-ruleset-new-from-description"><function>pango_ot_ruleset_new_from_description()</function></link>.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoScript">PangoScript</link>&#160;<structfield>script</structfield>;</term>
+<listitem><simpara>a <link linkend="PangoScript"><type>PangoScript</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoLanguage">PangoLanguage</link>&#160;*<structfield>language</structfield>;</term>
+<listitem><simpara>a <link linkend="PangoLanguage"><type>PangoLanguage</type></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link>&#160;*<structfield>static_gsub_features</structfield>;</term>
+<listitem><simpara>static map of GSUB features, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>n_static_gsub_features</structfield>;</term>
+<listitem><simpara>length of <parameter>static_gsub_features</parameter>, or 0.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link>&#160;*<structfield>static_gpos_features</structfield>;</term>
+<listitem><simpara>static map of GPOS features, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>n_static_gpos_features</structfield>;</term>
+<listitem><simpara>length of <parameter>static_gpos_features</parameter>, or 0.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term>const&#160;<link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link>&#160;*<structfield>other_features</structfield>;</term>
+<listitem><simpara>map of extra features to add to both GSUB and GPOS, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+                 Unlike the static maps, this pointer need not live beyond
+                the life of function calls taking this struct.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>n_other_features</structfield>;</term>
+<listitem><simpara>length of <parameter>other_features</parameter>, or 0.
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PangoOTTableType" role="enum">
+<title>enum PangoOTTableType</title>
+<indexterm zone="PangoOTTableType"><primary sortas="PangoOTTableType">PangoOTTableType</primary></indexterm><programlisting>typedef enum
+{
+  PANGO_OT_TABLE_GSUB,
+  PANGO_OT_TABLE_GPOS
+} PangoOTTableType;
+</programlisting>
+<para>
+The <type>PangoOTTableType</type> enumeration values are used to
+identify the various OpenType tables in the
+<function>pango_ot_info_*</function> functions.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-OT-TABLE-GSUB--CAPS" role="constant">
+<term><literal>PANGO_OT_TABLE_GSUB</literal></term>
+<listitem><simpara>The GSUB table.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-OT-TABLE-GPOS--CAPS" role="constant">
+<term><literal>PANGO_OT_TABLE_GPOS</literal></term>
+<listitem><simpara>The GPOS table.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoOTFeatureMap" role="struct" condition="since:1.18">
+<title>PangoOTFeatureMap</title>
+<indexterm zone="PangoOTFeatureMap" role="1.18"><primary sortas="PangoOTFeatureMap">PangoOTFeatureMap</primary></indexterm><programlisting>typedef struct {
+  char     feature_name[5];
+  gulong   property_bit;
+} PangoOTFeatureMap;
+</programlisting>
+<para>
+The <type>PangoOTFeatureMap</type> typedef is used to represent an OpenType
+feature with the property bit associated with it.  The feature tag is
+represented as a char array instead of a <link linkend="PangoOTTag"><type>PangoOTTag</type></link> for convenience.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="char">char</link>&#160;<structfield>feature_name</structfield>[5];</term>
+<listitem><simpara>feature tag in represented as four-letter ASCII string.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gulong">gulong</link>&#160;<structfield>property_bit</structfield>;</term>
+<listitem><simpara>the property bit to use for this feature.  See
+              <link linkend="pango-ot-ruleset-add-feature"><function>pango_ot_ruleset_add_feature()</function></link> for details.
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PANGO-OT-TAG-MAKE--CAPS" role="macro">
+<title>PANGO_OT_TAG_MAKE()</title>
+<indexterm zone="PANGO-OT-TAG-MAKE--CAPS"><primary sortas="PANGO_OT_TAG_MAKE">PANGO_OT_TAG_MAKE</primary></indexterm><programlisting>#define PANGO_OT_TAG_MAKE(c1,c2,c3,c4)            ((PangoOTTag) FT_MAKE_TAG (c1, c2, c3, c4))
+</programlisting>
+<para>
+Creates a <link linkend="PangoOTTag"><type>PangoOTTag</type></link> from four characters.  This is similar and
+compatible with the <function><link linkend="FT-MAKE-TAG--CAPS"><function>FT_MAKE_TAG()</function></link></function> macro from
+FreeType.
+</para><variablelist role="params">
+<varlistentry><term><parameter>c1</parameter>&#160;:</term>
+<listitem><simpara>First character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>c2</parameter>&#160;:</term>
+<listitem><simpara>Second character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>c3</parameter>&#160;:</term>
+<listitem><simpara>Third character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>c4</parameter>&#160;:</term>
+<listitem><simpara>Fourth character.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS" role="macro">
+<title>PANGO_OT_TAG_MAKE_FROM_STRING()</title>
+<indexterm zone="PANGO-OT-TAG-MAKE-FROM-STRING--CAPS"><primary sortas="PANGO_OT_TAG_MAKE_FROM_STRING">PANGO_OT_TAG_MAKE_FROM_STRING</primary></indexterm><programlisting>#define             PANGO_OT_TAG_MAKE_FROM_STRING(s)</programlisting>
+<para>
+Creates a <link linkend="PangoOTTag"><type>PangoOTTag</type></link> from a string. The string should be at least
+four characters long (pad with space characters if needed), and need
+not be nul-terminated.  This is a convenience wrapper around
+<link linkend="PANGO-OT-TAG-MAKE--CAPS"><function>PANGO_OT_TAG_MAKE()</function></link>, but cannot be used in certain situations, for
+example, as a switch expression, as it dereferences pointers.
+</para><variablelist role="params">
+<varlistentry><term><parameter>s</parameter>&#160;:</term>
+<listitem><simpara>The string representation of the tag.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-OT-ALL-GLYPHS--CAPS" role="macro" condition="since:1.16">
+<title>PANGO_OT_ALL_GLYPHS</title>
+<indexterm zone="PANGO-OT-ALL-GLYPHS--CAPS" role="1.16"><primary sortas="PANGO_OT_ALL_GLYPHS">PANGO_OT_ALL_GLYPHS</primary></indexterm><programlisting>#define PANGO_OT_ALL_GLYPHS                     ((guint) 0xFFFF)
+</programlisting>
+<para>
+This is used as the property bit in <link linkend="pango-ot-ruleset-add-feature"><function>pango_ot_ruleset_add_feature()</function></link> when a
+feature should be applied to all glyphs.
+</para><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PANGO-OT-NO-FEATURE--CAPS" role="macro" condition="since:1.18">
+<title>PANGO_OT_NO_FEATURE</title>
+<indexterm zone="PANGO-OT-NO-FEATURE--CAPS" role="1.18"><primary sortas="PANGO_OT_NO_FEATURE">PANGO_OT_NO_FEATURE</primary></indexterm><programlisting>#define PANGO_OT_NO_FEATURE                     ((guint) 0xFFFF)
+</programlisting>
+<para>
+This is used as a feature index that represent no feature, that is, should be
+skipped.  It may be returned as feature index by <link linkend="pango-ot-info-find-feature"><function>pango_ot_info_find_feature()</function></link>
+if the feature is not found, and <link linkend="pango-ot-rulset-add-feature"><function>pango_ot_rulset_add_feature()</function></link> function
+automatically skips this value, so no special handling is required by the
+user.
+</para><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PANGO-OT-NO-SCRIPT--CAPS" role="macro" condition="since:1.18">
+<title>PANGO_OT_NO_SCRIPT</title>
+<indexterm zone="PANGO-OT-NO-SCRIPT--CAPS" role="1.18"><primary sortas="PANGO_OT_NO_SCRIPT">PANGO_OT_NO_SCRIPT</primary></indexterm><programlisting>#define PANGO_OT_NO_SCRIPT                 ((guint) 0xFFFF)
+</programlisting>
+<para>
+This is used as a script index that represent no script, that is, when the
+requested script was not found, and a default ('DFLT') script was not found
+either.  It may be returned as script index by <link linkend="pango-ot-info-find-script"><function>pango_ot_info_find_script()</function></link>
+if the script or a default script are not found, all other functions
+taking a script index essentially return if the input script index is
+this value, so no special handling is required by the user.
+</para><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PANGO-OT-DEFAULT-LANGUAGE--CAPS" role="macro" condition="since:1.16">
+<title>PANGO_OT_DEFAULT_LANGUAGE</title>
+<indexterm zone="PANGO-OT-DEFAULT-LANGUAGE--CAPS" role="1.16"><primary sortas="PANGO_OT_DEFAULT_LANGUAGE">PANGO_OT_DEFAULT_LANGUAGE</primary></indexterm><programlisting>#define PANGO_OT_DEFAULT_LANGUAGE             ((guint) 0xFFFF)
+</programlisting>
+<para>
+This is used as the language index in <link linkend="pango-ot-info-find-feature"><function>pango_ot_info_find_feature()</function></link> when
+the default language system of the script is desired.
+It is also returned by <link linkend="pango-ot-info-find-language"><function>pango_ot_info_find_language()</function></link> if the requested language
+is not found, or the requested language tag was PANGO_OT_TAG_DEFAULT_LANGUAGE.
+The end result is that one can always call <link linkend="pango-ot-tag-from-language"><function>pango_ot_tag_from_language()</function></link>
+followed by <link linkend="pango-ot-info-find-language"><function>pango_ot_info_find_language()</function></link> and pass the result to
+<link linkend="pango-ot-info-find-feature"><function>pango_ot_info_find_feature()</function></link> without having to worry about falling back to
+default language system explicitly.
+</para><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS" role="macro" condition="since:1.18">
+<title>PANGO_OT_TAG_DEFAULT_LANGUAGE</title>
+<indexterm zone="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS" role="1.18"><primary sortas="PANGO_OT_TAG_DEFAULT_LANGUAGE">PANGO_OT_TAG_DEFAULT_LANGUAGE</primary></indexterm><programlisting>#define PANGO_OT_TAG_DEFAULT_LANGUAGE             PANGO_OT_TAG_MAKE ('d', 'f', 'l', 't')
+</programlisting>
+<para>
+This is a <link linkend="PangoOTTag"><type>PangoOTTag</type></link> representing a special language tag 'dflt'.  It is
+returned as language tag by <link linkend="pango-ot-tag-from-language"><function>pango_ot_tag_from_language()</function></link> if the requested
+language is not found.  It is safe to pass this value to
+<link linkend="pango-ot-info-find-language"><function>pango_ot_info_find_language()</function></link> as that function falls back to returning default
+language-system if the requested language tag is not found.
+</para><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" role="macro" condition="since:1.18">
+<title>PANGO_OT_TAG_DEFAULT_SCRIPT</title>
+<indexterm zone="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS" role="1.18"><primary sortas="PANGO_OT_TAG_DEFAULT_SCRIPT">PANGO_OT_TAG_DEFAULT_SCRIPT</primary></indexterm><programlisting>#define PANGO_OT_TAG_DEFAULT_SCRIPT             PANGO_OT_TAG_MAKE ('D', 'F', 'L', 'T')
+</programlisting>
+<para>
+This is a <link linkend="PangoOTTag"><type>PangoOTTag</type></link> representing the special script tag 'DFLT'.  It is
+returned as script tag by <link linkend="pango-ot-tag-from-script"><function>pango_ot_tag_from_script()</function></link> if the requested script
+is not found.
+</para><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-info-get" role="function" condition="since:1.2">
+<title>pango_ot_info_get ()</title>
+<indexterm zone="pango-ot-info-get" role="1.2"><primary sortas="pango_ot_info_get">pango_ot_info_get</primary></indexterm><programlisting><link linkend="PangoOTInfo">PangoOTInfo</link> *       pango_ot_info_get                   (<link linkend="FT-Face">FT_Face</link> face);</programlisting>
+<para>
+Returns the <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link> structure for the given FreeType font face.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>face</parameter>&#160;:</term>
+<listitem><simpara> a <type>FT_Face</type>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link> for <parameter>face</parameter>. This object will have
+the same lifetime as <parameter>face</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-ot-info-find-script" role="function">
+<title>pango_ot_info_find_script ()</title>
+<indexterm zone="pango-ot-info-find-script"><primary sortas="pango_ot_info_find_script">pango_ot_info_find_script</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_ot_info_find_script           (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> script_tag,
+                                                         <link linkend="guint">guint</link> *script_index);</programlisting>
+<para>
+Finds the index of a script.  If not found, tries to find the 'DFLT'
+and then 'dflt' scripts and return the index of that in <parameter>script_index</parameter>.
+If none of those is found either, <link linkend="PANGO-OT-NO-SCRIPT--CAPS"><literal>PANGO_OT_NO_SCRIPT</literal></link> is placed in
+<parameter>script_index</parameter>.
+</para>
+<para>
+All other functions taking an input script_index parameter know
+how to handle <link linkend="PANGO-OT-NO-SCRIPT--CAPS"><literal>PANGO_OT_NO_SCRIPT</literal></link>, so one can ignore the return
+value of this function completely and proceed, to enjoy the automatic
+fallback to the 'DFLT'/'dflt' script.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script_tag</parameter>&#160;:</term>
+<listitem><simpara> the tag of the script to find.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script_index</parameter>&#160;:</term>
+<listitem><simpara> location to store the index of the script, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the script was found.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-info-find-language" role="function">
+<title>pango_ot_info_find_language ()</title>
+<indexterm zone="pango-ot-info-find-language"><primary sortas="pango_ot_info_find_language">pango_ot_info_find_language</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_ot_info_find_language         (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> language_tag,
+                                                         <link linkend="guint">guint</link> *language_index,
+                                                         <link linkend="guint">guint</link> *required_feature_index);</programlisting>
+<para>
+Finds the index of a language and its required feature index.
+If the language is not found, sets <parameter>language_index</parameter> to
+PANGO_OT_DEFAULT_LANGUAGE and the required feature of the default language
+system is returned in required_feature_index.  For best compatibility with
+some fonts, also searches the language system tag 'dflt' before falling
+back to the default language system, but that is transparent to the user.
+The user can simply ignore the return value of this function to
+automatically fall back to the default language system.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the script whose languages are searched.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language_tag</parameter>&#160;:</term>
+<listitem><simpara> the tag of the language to find.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language_index</parameter>&#160;:</term>
+<listitem><simpara> location to store the index of the language, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>required_feature_index</parameter>&#160;:</term>
+<listitem><simpara> location to store the required feature index of
+   the language, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the language was found.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-info-find-feature" role="function">
+<title>pango_ot_info_find_feature ()</title>
+<indexterm zone="pango-ot-info-find-feature"><primary sortas="pango_ot_info_find_feature">pango_ot_info_find_feature</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_ot_info_find_feature          (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> feature_tag,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="guint">guint</link> language_index,
+                                                         <link linkend="guint">guint</link> *feature_index);</programlisting>
+<para>
+Finds the index of a feature.  If the feature is not found, sets
+<parameter>feature_index</parameter> to PANGO_OT_NO_FEATURE, which is safe to pass to
+<link linkend="pango-ot-ruleset-add-feature"><function>pango_ot_ruleset_add_feature()</function></link> and similar functions.
+</para>
+<para>
+In the future, this may set <parameter>feature_index</parameter> to an special value that if used
+in <link linkend="pango-ot-ruleset-add-feature"><function>pango_ot_ruleset_add_feature()</function></link> will ask Pango to synthesize the
+requested feature based on Unicode properties and data.  However, this
+function will still return <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> in those cases.  So, users may want to
+ignore the return value of this function in certain cases.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>feature_tag</parameter>&#160;:</term>
+<listitem><simpara> the tag of the feature to find.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the script.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the language whose features are searched,
+    or <link linkend="PANGO-OT-DEFAULT-LANGUAGE--CAPS"><literal>PANGO_OT_DEFAULT_LANGUAGE</literal></link> to use the default language of the script.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>feature_index</parameter>&#160;:</term>
+<listitem><simpara> location to store the index of the feature, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the feature was found.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-info-list-scripts" role="function">
+<title>pango_ot_info_list_scripts ()</title>
+<indexterm zone="pango-ot-info-list-scripts"><primary sortas="pango_ot_info_list_scripts">pango_ot_info_list_scripts</primary></indexterm><programlisting><link linkend="PangoOTTag">PangoOTTag</link> *        pango_ot_info_list_scripts          (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type);</programlisting>
+<para>
+Obtains the list of available scripts.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated zero-terminated array containing the tags of the
+  available scripts.  Should be freed using <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-info-list-languages" role="function">
+<title>pango_ot_info_list_languages ()</title>
+<indexterm zone="pango-ot-info-list-languages"><primary sortas="pango_ot_info_list_languages">pango_ot_info_list_languages</primary></indexterm><programlisting><link linkend="PangoOTTag">PangoOTTag</link> *        pango_ot_info_list_languages        (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> language_tag);</programlisting>
+<para>
+Obtains the list of available languages for a given script.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the script to list languages for.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language_tag</parameter>&#160;:</term>
+<listitem><simpara> unused parameter.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated zero-terminated array containing the tags of the
+  available languages.  Should be freed using <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-info-list-features" role="function">
+<title>pango_ot_info_list_features ()</title>
+<indexterm zone="pango-ot-info-list-features"><primary sortas="pango_ot_info_list_features">pango_ot_info_list_features</primary></indexterm><programlisting><link linkend="PangoOTTag">PangoOTTag</link> *        pango_ot_info_list_features         (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> tag,
+                                                         <link linkend="guint">guint</link> script_index,
+                                                         <link linkend="guint">guint</link> language_index);</programlisting>
+<para>
+Obtains the list of features for the given language of the given script.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>tag</parameter>&#160;:</term>
+<listitem><simpara> unused parameter.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the script to obtain information about.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the language to list features for, or
+    <link linkend="PANGO-OT-DEFAULT-LANGUAGE--CAPS"><literal>PANGO_OT_DEFAULT_LANGUAGE</literal></link>, to list features for the default
+    language of the script.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated zero-terminated array containing the tags of the
+available features.  Should be freed using <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-buffer-new" role="function" condition="since:1.4">
+<title>pango_ot_buffer_new ()</title>
+<indexterm zone="pango-ot-buffer-new" role="1.4"><primary sortas="pango_ot_buffer_new">pango_ot_buffer_new</primary></indexterm><programlisting><link linkend="PangoOTBuffer">PangoOTBuffer</link> *     pango_ot_buffer_new                 (<link linkend="PangoFcFont">PangoFcFont</link> *font);</programlisting>
+<para>
+Creates a new <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link> for the given OpenType font.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>, which should
+              be freed with <link linkend="pango-ot-buffer-destroy"><function>pango_ot_buffer_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-buffer-destroy" role="function" condition="since:1.4">
+<title>pango_ot_buffer_destroy ()</title>
+<indexterm zone="pango-ot-buffer-destroy" role="1.4"><primary sortas="pango_ot_buffer_destroy">pango_ot_buffer_destroy</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_destroy             (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);</programlisting>
+<para>
+Destroys a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link> and free all associated memory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-buffer-clear" role="function" condition="since:1.4">
+<title>pango_ot_buffer_clear ()</title>
+<indexterm zone="pango-ot-buffer-clear" role="1.4"><primary sortas="pango_ot_buffer_clear">pango_ot_buffer_clear</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_clear               (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);</programlisting>
+<para>
+Empties a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>, make it ready to add glyphs to.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-buffer-add-glyph" role="function" condition="since:1.4">
+<title>pango_ot_buffer_add_glyph ()</title>
+<indexterm zone="pango-ot-buffer-add-glyph" role="1.4"><primary sortas="pango_ot_buffer_add_glyph">pango_ot_buffer_add_glyph</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_add_glyph           (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="guint">guint</link> glyph,
+                                                         <link linkend="guint">guint</link> properties,
+                                                         <link linkend="guint">guint</link> cluster);</programlisting>
+<para>
+Appends a glyph to a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>, with <parameter>properties</parameter> identifying which
+features should be applied on this glyph.  See <link linkend="pango-ruleset-add-feature"><function>pango_ruleset_add_feature()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph</parameter>&#160;:</term>
+<listitem><simpara> the glyph index to add, like a <link linkend="PangoGlyph"><type>PangoGlyph</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>properties</parameter>&#160;:</term>
+<listitem><simpara> the glyph properties
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>cluster</parameter>&#160;:</term>
+<listitem><simpara> the cluster that this glyph belongs to
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-buffer-set-rtl" role="function" condition="since:1.4">
+<title>pango_ot_buffer_set_rtl ()</title>
+<indexterm zone="pango-ot-buffer-set-rtl" role="1.4"><primary sortas="pango_ot_buffer_set_rtl">pango_ot_buffer_set_rtl</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_set_rtl             (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="gboolean">gboolean</link> rtl);</programlisting>
+<para>
+Sets whether glyphs will be rendered right-to-left.  This setting
+is needed for proper horizontal positioning of right-to-left scripts.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>rtl</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> for right-to-left text
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-buffer-set-zero-width-marks" role="function" condition="since:1.6">
+<title>pango_ot_buffer_set_zero_width_marks ()</title>
+<indexterm zone="pango-ot-buffer-set-zero-width-marks" role="1.6"><primary sortas="pango_ot_buffer_set_zero_width_marks">pango_ot_buffer_set_zero_width_marks</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_set_zero_width_marks
+                                                        (<link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="gboolean">gboolean</link> zero_width_marks);</programlisting>
+<para>
+Sets whether characters with a mark class should be forced to zero width.
+This setting is needed for proper positioning of Arabic accents,
+but will produce incorrect results with standard OpenType Indic
+fonts.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>zero_width_marks</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if characters with a mark class should
+ be forced to zero width.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-ot-buffer-get-glyphs" role="function" condition="since:1.4">
+<title>pango_ot_buffer_get_glyphs ()</title>
+<indexterm zone="pango-ot-buffer-get-glyphs" role="1.4"><primary sortas="pango_ot_buffer_get_glyphs">pango_ot_buffer_get_glyphs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_get_glyphs          (const <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="PangoOTGlyph">PangoOTGlyph</link> **glyphs,
+                                                         <link linkend="int">int</link> *n_glyphs);</programlisting>
+<para>
+Gets the glyph array contained in a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>.  The glyphs are
+owned by the buffer and should not be freed, and are only valid as long
+as buffer is not modified.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> location to store the array of glyphs, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_glyphs</parameter>&#160;:</term>
+<listitem><simpara> location to store the number of glyphs, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-buffer-output" role="function" condition="since:1.4">
+<title>pango_ot_buffer_output ()</title>
+<indexterm zone="pango-ot-buffer-output" role="1.4"><primary sortas="pango_ot_buffer_output">pango_ot_buffer_output</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_buffer_output              (const <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);</programlisting>
+<para>
+Exports the glyphs in a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link> into a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>.  This is
+typically used after the OpenType layout processing is over, to convert the
+resulting glyphs into a generic Pango glyph string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-ruleset-get-for-description" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_get_for_description ()</title>
+<indexterm zone="pango-ot-ruleset-get-for-description" role="1.18"><primary sortas="pango_ot_ruleset_get_for_description">pango_ot_ruleset_get_for_description</primary></indexterm><programlisting>const <link linkend="PangoOTRuleset">PangoOTRuleset</link> * pango_ot_ruleset_get_for_description
+                                                        (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);</programlisting>
+<para>
+Returns a ruleset for the given OpenType info and ruleset
+description.  Rulesets are created on demand using
+<link linkend="pango-ot-ruleset-new-from-description"><function>pango_ot_ruleset_new_from_description()</function></link>.
+The returned ruleset should not be modified or destroyed.
+</para>
+<para>
+The static feature map members of <parameter>desc</parameter> should be alive as
+long as <parameter>info</parameter> is.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRulesetDescription"><type>PangoOTRulesetDescription</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> for <parameter>desc</parameter>. This object will have
+the same lifetime as <parameter>info</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-new" role="function">
+<title>pango_ot_ruleset_new ()</title>
+<indexterm zone="pango-ot-ruleset-new"><primary sortas="pango_ot_ruleset_new">pango_ot_ruleset_new</primary></indexterm><programlisting><link linkend="PangoOTRuleset">PangoOTRuleset</link> *    pango_ot_ruleset_new                (<link linkend="PangoOTInfo">PangoOTInfo</link> *info);</programlisting>
+<para>
+Creates a new <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> for the given OpenType info.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>, which
+              should be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-ruleset-new-for" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_new_for ()</title>
+<indexterm zone="pango-ot-ruleset-new-for" role="1.18"><primary sortas="pango_ot_ruleset_new_for">pango_ot_ruleset_new_for</primary></indexterm><programlisting><link linkend="PangoOTRuleset">PangoOTRuleset</link> *    pango_ot_ruleset_new_for            (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         <link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Creates a new <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> for the given OpenType info, script, and
+language.
+</para>
+<para>
+This function is part of a convenience scheme that highly simplifies
+using a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> to represent features for a specific pair of script
+and language.  So one can use this function passing in the script and
+language of interest, and later try to add features to the ruleset by just
+specifying the feature name or tag, without having to deal with finding
+script, language, or feature indices manually.
+</para>
+<para>
+In excess to what <link linkend="pango-ot-ruleset-new"><function>pango_ot_ruleset_new()</function></link> does, this function will:
+<itemizedlist>
+  <listitem>
+  Find the <link linkend="PangoOTTag"><type>PangoOTTag</type></link> script and language tags associated with
+  <parameter>script</parameter> and <parameter>language</parameter> using <link linkend="pango-ot-tag-from-script"><function>pango_ot_tag_from_script()</function></link> and
+  <link linkend="pango-ot-tag-from-language"><function>pango_ot_tag_from_language()</function></link>,
+  </listitem>
+  <listitem>
+  For each of table types <link linkend="PANGO-OT-TABLE-GSUB--CAPS"><literal>PANGO_OT_TABLE_GSUB</literal></link> and <link linkend="PANGO-OT-TABLE-GPOS--CAPS"><literal>PANGO_OT_TABLE_GPOS</literal></link>,
+  find the script index of the script tag found and the language
+  system index of the language tag found in that script system, using
+  <link linkend="pango-ot-info-find-script"><function>pango_ot_info_find_script()</function></link> and <link linkend="pango-ot-info-find-language"><function>pango_ot_info_find_language()</function></link>,
+  </listitem>
+  <listitem>
+  For found language-systems, if they have required feature
+  index, add that feature to the ruleset using
+  <link linkend="pango-ot-ruleset-add-feature"><function>pango_ot_ruleset_add_feature()</function></link>,
+  </listitem>
+  <listitem>
+  Remember found script and language indices for both table types,
+  and use them in future <link linkend="pango-ot-ruleset-maybe-add-feature"><function>pango_ot_ruleset_maybe_add_feature()</function></link> and
+  <link linkend="pango-ot-ruleset-maybe-add-features"><function>pango_ot_ruleset_maybe_add_features()</function></link>.
+  </listitem>
+</itemizedlist>
+</para>
+<para>
+Because of the way return values of <link linkend="pango-ot-info-find-script"><function>pango_ot_info_find_script()</function></link> and
+<link linkend="pango-ot-info-find-language"><function>pango_ot_info_find_language()</function></link> are ignored, this function automatically
+finds and uses the 'DFLT' script and the default language-system.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScript"><type>PangoScript</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>, which
+              should be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-new-from-description" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_new_from_description ()</title>
+<indexterm zone="pango-ot-ruleset-new-from-description" role="1.18"><primary sortas="pango_ot_ruleset_new_from_description">pango_ot_ruleset_new_from_description</primary></indexterm><programlisting><link linkend="PangoOTRuleset">PangoOTRuleset</link> *    pango_ot_ruleset_new_from_description
+                                                        (<link linkend="PangoOTInfo">PangoOTInfo</link> *info,
+                                                         const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);</programlisting>
+<para>
+Creates a new <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link> for the given OpenType infor and
+matching the given ruleset description.
+</para>
+<para>
+This is a convenience function that calls <link linkend="pango-ot-ruleset-new-for"><function>pango_ot_ruleset_new_for()</function></link> and
+adds the static GSUB/GPOS features to the resulting ruleset, followed by
+adding other features to both GSUB and GPOS.
+</para>
+<para>
+The static feature map members of <parameter>desc</parameter> should be alive as
+long as <parameter>info</parameter> is.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>info</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTInfo"><type>PangoOTInfo</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRulesetDescription"><type>PangoOTRulesetDescription</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>, which
+              should be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-add-feature" role="function">
+<title>pango_ot_ruleset_add_feature ()</title>
+<indexterm zone="pango-ot-ruleset-add-feature"><primary sortas="pango_ot_ruleset_add_feature">pango_ot_ruleset_add_feature</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_ruleset_add_feature        (<link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="guint">guint</link> feature_index,
+                                                         <link linkend="gulong">gulong</link> property_bit);</programlisting>
+<para>
+Adds a feature to the ruleset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ruleset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to add a feature to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>feature_index</parameter>&#160;:</term>
+<listitem><simpara> the index of the feature to add.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property_bit</parameter>&#160;:</term>
+<listitem><simpara> the property bit to use for this feature. Used to identify
+               the glyphs that this feature should be applied to, or
+               <link linkend="PANGO-OT-ALL-GLYPHS--CAPS"><literal>PANGO_OT_ALL_GLYPHS</literal></link> if it should be applied to all glyphs.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-ot-ruleset-maybe-add-feature" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_maybe_add_feature ()</title>
+<indexterm zone="pango-ot-ruleset-maybe-add-feature" role="1.18"><primary sortas="pango_ot_ruleset_maybe_add_feature">pango_ot_ruleset_maybe_add_feature</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_ot_ruleset_maybe_add_feature  (<link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         <link linkend="PangoOTTag">PangoOTTag</link> feature_tag,
+                                                         <link linkend="gulong">gulong</link> property_bit);</programlisting>
+<para>
+This is a convenience function that first tries to find the feature
+using <link linkend="pango-ot-info-find-feature"><function>pango_ot_info_find_feature()</function></link> and the ruleset script and language
+passed to <link linkend="pango-ot-ruleset-new-for"><function>pango_ot_ruleset_new_for()</function></link>,
+and if the feature is found, adds it to the ruleset.
+</para>
+<para>
+If <parameter>ruleset</parameter> was not created using <link linkend="pango-ot-ruleset-new-for"><function>pango_ot_ruleset_new_for()</function></link>, this function
+does nothing.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ruleset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to add a feature to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>feature_tag</parameter>&#160;:</term>
+<listitem><simpara> the tag of the feature to add.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>property_bit</parameter>&#160;:</term>
+<listitem><simpara> the property bit to use for this feature. Used to identify
+               the glyphs that this feature should be applied to, or
+               <link linkend="PANGO-OT-ALL-GLYPHS--CAPS"><literal>PANGO_OT_ALL_GLYPHS</literal></link> if it should be applied to all glyphs.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the feature was found and added to ruleset,
+              <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-maybe-add-features" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_maybe_add_features ()</title>
+<indexterm zone="pango-ot-ruleset-maybe-add-features" role="1.18"><primary sortas="pango_ot_ruleset_maybe_add_features">pango_ot_ruleset_maybe_add_features</primary></indexterm><programlisting><link linkend="guint">guint</link>               pango_ot_ruleset_maybe_add_features (<link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTTableType">PangoOTTableType</link> table_type,
+                                                         const <link linkend="PangoOTFeatureMap">PangoOTFeatureMap</link> *features,
+                                                         <link linkend="guint">guint</link> n_features);</programlisting>
+<para>
+This is a convenience function that 
+for each feature in the feature map array <parameter>features</parameter>
+converts the feature name to a <link linkend="PangoOTTag"><type>PangoOTTag</type></link> feature tag using <link linkend="PANGO-OT-TAG-MAKE--CAPS"><function>PANGO_OT_TAG_MAKE()</function></link>
+and calls <link linkend="pango-ot-ruleset-maybe-add-feature"><function>pango_ot_ruleset_maybe_add_feature()</function></link> on it.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ruleset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>table_type</parameter>&#160;:</term>
+<listitem><simpara> the table type to add features to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>features</parameter>&#160;:</term>
+<listitem><simpara> array of feature name and property bits to add.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_features</parameter>&#160;:</term>
+<listitem><simpara> number of feature records in <parameter>features</parameter> array.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The number of features in <parameter>features</parameter> that were found
+              and added to <parameter>ruleset</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-get-feature-count" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_get_feature_count ()</title>
+<indexterm zone="pango-ot-ruleset-get-feature-count" role="1.18"><primary sortas="pango_ot_ruleset_get_feature_count">pango_ot_ruleset_get_feature_count</primary></indexterm><programlisting><link linkend="guint">guint</link>               pango_ot_ruleset_get_feature_count  (const <link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="guint">guint</link> *n_gsub_features,
+                                                         <link linkend="guint">guint</link> *n_gpos_features);</programlisting>
+<para>
+Gets the number of GSUB and GPOS features in the ruleset.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ruleset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_gsub_features</parameter>&#160;:</term>
+<listitem><simpara> location to store number of GSUB features, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_gpos_features</parameter>&#160;:</term>
+<listitem><simpara> location to store number of GPOS features, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> Total number of features in the <parameter>ruleset</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-substitute" role="function" condition="since:1.4">
+<title>pango_ot_ruleset_substitute ()</title>
+<indexterm zone="pango-ot-ruleset-substitute" role="1.4"><primary sortas="pango_ot_ruleset_substitute">pango_ot_ruleset_substitute</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_ruleset_substitute         (const <link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);</programlisting>
+<para>
+Performs the OpenType GSUB substitution on <parameter>buffer</parameter> using the features
+in <parameter>ruleset</parameter></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ruleset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-ruleset-position" role="function" condition="since:1.4">
+<title>pango_ot_ruleset_position ()</title>
+<indexterm zone="pango-ot-ruleset-position" role="1.4"><primary sortas="pango_ot_ruleset_position">pango_ot_ruleset_position</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_ruleset_position           (const <link linkend="PangoOTRuleset">PangoOTRuleset</link> *ruleset,
+                                                         <link linkend="PangoOTBuffer">PangoOTBuffer</link> *buffer);</programlisting>
+<para>
+Performs the OpenType GPOS positioning on <parameter>buffer</parameter> using the features
+in <parameter>ruleset</parameter></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ruleset</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTRuleset"><type>PangoOTRuleset</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>buffer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoOTBuffer"><type>PangoOTBuffer</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-ot-ruleset-description-copy" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_description_copy ()</title>
+<indexterm zone="pango-ot-ruleset-description-copy" role="1.18"><primary sortas="pango_ot_ruleset_description_copy">pango_ot_ruleset_description_copy</primary></indexterm><programlisting><link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> * pango_ot_ruleset_description_copy
+                                                        (const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);</programlisting>
+<para>
+Creates a copy of <parameter>desc</parameter>, which should be freed with
+<link linkend="pango-ot-ruleset-description-free"><function>pango_ot_ruleset_description_free()</function></link>. Primarily used internally
+by <link linkend="pango-ot-ruleset-get-for-description"><function>pango_ot_ruleset_get_for_description()</function></link> to cache rulesets for
+ruleset descriptions.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> ruleset description to copy
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoOTRulesetDescription"><type>PangoOTRulesetDescription</type></link>, which
+              should be freed with <link linkend="pango-ot-ruleset-description-free"><function>pango_ot_ruleset_description_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-description-equal" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_description_equal ()</title>
+<indexterm zone="pango-ot-ruleset-description-equal" role="1.18"><primary sortas="pango_ot_ruleset_description_equal">pango_ot_ruleset_description_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_ot_ruleset_description_equal  (const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc1,
+                                                         const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc2);</programlisting>
+<para>
+Compares two ruleset descriptions for equality.
+Two ruleset descriptions are considered equal if the rulesets
+they describe are provably identical.  This means that their
+script, language, and all feature sets should be equal.  For static feature
+sets, the array addresses are compared directly, while for other
+features, the list of features is compared one by one.
+(Two ruleset descriptions may result in identical rulesets
+being created, but still compare <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc1</parameter>&#160;:</term>
+<listitem><simpara> a ruleset description
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc2</parameter>&#160;:</term>
+<listitem><simpara> a ruleset description
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if two ruleset descriptions are identical,
+              <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-description-free" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_description_free ()</title>
+<indexterm zone="pango-ot-ruleset-description-free" role="1.18"><primary sortas="pango_ot_ruleset_description_free">pango_ot_ruleset_description_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_ot_ruleset_description_free   (<link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);</programlisting>
+<para>
+Frees a ruleset description allocated by 
+<link linkend="pango-ot-ruleset-description-copy"><function>pango_ot_ruleset_description_copy()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> an allocated <link linkend="PangoOTRulesetDescription"><type>PangoOTRulesetDescription</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-ruleset-description-hash" role="function" condition="since:1.18">
+<title>pango_ot_ruleset_description_hash ()</title>
+<indexterm zone="pango-ot-ruleset-description-hash" role="1.18"><primary sortas="pango_ot_ruleset_description_hash">pango_ot_ruleset_description_hash</primary></indexterm><programlisting><link linkend="guint">guint</link>               pango_ot_ruleset_description_hash   (const <link linkend="PangoOTRulesetDescription">PangoOTRulesetDescription</link> *desc);</programlisting>
+<para>
+Computes a hash of a <link linkend="PangoOTRulesetDescription"><type>PangoOTRulesetDescription</type></link> structure suitable
+to be used, for example, as an argument to <link linkend="g-hash-table-new"><function>g_hash_table_new()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a ruleset description
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the hash value.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-tag-from-language" role="function" condition="since:1.18">
+<title>pango_ot_tag_from_language ()</title>
+<indexterm zone="pango-ot-tag-from-language" role="1.18"><primary sortas="pango_ot_tag_from_language">pango_ot_tag_from_language</primary></indexterm><programlisting><link linkend="PangoOTTag">PangoOTTag</link>          pango_ot_tag_from_language          (<link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Finds the OpenType language-system tag best describing <parameter>language</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoLanguage"><type>PangoLanguage</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="PangoOTTag"><type>PangoOTTag</type></link> best matching <parameter>language</parameter> or
+<link linkend="PANGO-OT-TAG-DEFAULT-LANGUAGE--CAPS"><literal>PANGO_OT_TAG_DEFAULT_LANGUAGE</literal></link> if none found or if <parameter>language</parameter>
+is <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-tag-from-script" role="function" condition="since:1.18">
+<title>pango_ot_tag_from_script ()</title>
+<indexterm zone="pango-ot-tag-from-script" role="1.18"><primary sortas="pango_ot_tag_from_script">pango_ot_tag_from_script</primary></indexterm><programlisting><link linkend="PangoOTTag">PangoOTTag</link>          pango_ot_tag_from_script            (<link linkend="PangoScript">PangoScript</link> script);</programlisting>
+<para>
+Finds the OpenType script tag corresponding to <parameter>script</parameter>.
+</para>
+<para>
+The <link linkend="PANGO-SCRIPT-COMMON--CAPS"><literal>PANGO_SCRIPT_COMMON</literal></link>, <link linkend="PANGO-SCRIPT-INHERITED--CAPS"><literal>PANGO_SCRIPT_INHERITED</literal></link>, and
+<link linkend="PANGO-SCRIPT-UNKNOWN--CAPS"><literal>PANGO_SCRIPT_UNKNOWN</literal></link> scripts are mapped to the OpenType
+'DFLT' script tag that is also defined as
+<link linkend="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS"><literal>PANGO_OT_TAG_DEFAULT_SCRIPT</literal></link>.
+</para>
+<para>
+Note that multiple <link linkend="PangoScript"><type>PangoScript</type></link> values may map to the same
+OpenType script tag.  In particular, <link linkend="PANGO-SCRIPT-HIRAGANA--CAPS"><literal>PANGO_SCRIPT_HIRAGANA</literal></link>
+and <link linkend="PANGO-SCRIPT-KATAKANA--CAPS"><literal>PANGO_SCRIPT_KATAKANA</literal></link> both map to the OT tag 'kana'.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoScript"><type>PangoScript</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="PangoOTTag"><type>PangoOTTag</type></link> corresponding to <parameter>script</parameter> or
+<link linkend="PANGO-OT-TAG-DEFAULT-SCRIPT--CAPS"><literal>PANGO_OT_TAG_DEFAULT_SCRIPT</literal></link> if none found.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-tag-to-language" role="function" condition="since:1.18">
+<title>pango_ot_tag_to_language ()</title>
+<indexterm zone="pango-ot-tag-to-language" role="1.18"><primary sortas="pango_ot_tag_to_language">pango_ot_tag_to_language</primary></indexterm><programlisting><link linkend="PangoLanguage">PangoLanguage</link> *     pango_ot_tag_to_language            (<link linkend="PangoOTTag">PangoOTTag</link> language_tag);</programlisting>
+<para>
+Finds a <link linkend="PangoLanguage"><type>PangoLanguage</type></link> corresponding to <parameter>language_tag</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language_tag</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoOTTag"><type>PangoOTTag</type></link> OpenType language-system tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="PangoLanguage"><type>PangoLanguage</type></link> best matching <parameter>language_tag</parameter> or
+<link linkend="PangoLanguage"><type>PangoLanguage</type></link> corresponding to the string "xx" if none found.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-ot-tag-to-script" role="function" condition="since:1.18">
+<title>pango_ot_tag_to_script ()</title>
+<indexterm zone="pango-ot-tag-to-script" role="1.18"><primary sortas="pango_ot_tag_to_script">pango_ot_tag_to_script</primary></indexterm><programlisting><link linkend="PangoScript">PangoScript</link>         pango_ot_tag_to_script              (<link linkend="PangoOTTag">PangoOTTag</link> script_tag);</programlisting>
+<para>
+Finds the <link linkend="PangoScript"><type>PangoScript</type></link> corresponding to <parameter>script_tag</parameter>.
+</para>
+<para>
+The 'DFLT' script tag is mapped to <link linkend="PANGO-SCRIPT-COMMON--CAPS"><literal>PANGO_SCRIPT_COMMON</literal></link>.
+</para>
+<para>
+Note that an OpenType script tag may correspond to multiple
+<link linkend="PangoScript"><type>PangoScript</type></link> values.  In such cases, the <link linkend="PangoScript"><type>PangoScript</type></link> value
+with the smallest value is returned.
+In particular, <link linkend="PANGO-SCRIPT-HIRAGANA--CAPS"><literal>PANGO_SCRIPT_HIRAGANA</literal></link>
+and <link linkend="PANGO-SCRIPT-KATAKANA--CAPS"><literal>PANGO_SCRIPT_KATAKANA</literal></link> both map to the OT tag 'kana'.
+This function will return <link linkend="PANGO-SCRIPT-HIRAGANA--CAPS"><literal>PANGO_SCRIPT_HIRAGANA</literal></link> for
+'kana'.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>script_tag</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoOTTag"><type>PangoOTTag</type></link> OpenType script tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="PangoScript"><type>PangoScript</type></link> corresponding to <parameter>script_tag</parameter> or
+<link linkend="PANGO-SCRIPT-UNKNOWN--CAPS"><literal>PANGO_SCRIPT_UNKNOWN</literal></link> if none found.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pango-engine-lang.xml b/docs/xml/pango-engine-lang.xml
new file mode 100755 (executable)
index 0000000..bfc1c97
--- /dev/null
@@ -0,0 +1,147 @@
+<refentry id="PangoEngineLang">
+<refmeta>
+<refentrytitle role="top_of_page" id="PangoEngineLang.top_of_page">PangoEngineLang</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>PangoEngineLang</refname>
+<refpurpose>Rendering-system independent script engines</refpurpose>
+</refnamediv>
+<refsect1 id="PangoEngineLang.stability-level">
+<title>Stability Level</title>
+Unstable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv id="PangoEngineLang.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoEngineLang-struct">PangoEngineLang</link>;
+                    <link linkend="PangoEngineLangClass">PangoEngineLangClass</link>;
+#define             <link linkend="PANGO-ENGINE-TYPE-LANG--CAPS">PANGO_ENGINE_TYPE_LANG</link>
+#define             <link linkend="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS">PANGO_ENGINE_LANG_DEFINE_TYPE</link>       (name, prefix, class_init, instance_init)
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="PangoEngineLang.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoEngine">PangoEngine</link>
+         +----PangoEngineLang
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="PangoEngineLang.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The <firstterm>language engines</firstterm> are rendering-system independent
+engines that determine line, word, and character breaks for character strings.
+These engines are used in <link linkend="pango-break"><function>pango_break()</function></link>.
+</para>
+</refsect1>
+
+<refsect1 id="PangoEngineLang.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoEngineLang-struct" role="struct">
+<title>PangoEngineLang</title>
+<indexterm zone="PangoEngineLang-struct"><primary sortas="PangoEngineLang">PangoEngineLang</primary></indexterm><programlisting>typedef struct _PangoEngineLang PangoEngineLang;</programlisting>
+<para>
+The <link linkend="PangoEngineLang"><type>PangoEngineLang</type></link> class is implemented by engines that
+customize the rendering-system independent part of the
+Pango pipeline for a particular script or language. For
+instance, a custom <link linkend="PangoEngineLang"><type>PangoEngineLang</type></link> could be provided for
+Thai to implement the dictionary-based word boundary
+lookups needed for that language.</para>
+<para>
+</para></refsect2>
+<refsect2 id="PangoEngineLangClass" role="struct">
+<title>PangoEngineLangClass</title>
+<indexterm zone="PangoEngineLangClass"><primary sortas="PangoEngineLangClass">PangoEngineLangClass</primary></indexterm><programlisting>typedef struct {
+  void (*script_break) (PangoEngineLang *engine,
+                       const char    *text,
+                       int            len,
+                       PangoAnalysis *analysis,
+                       PangoLogAttr  *attrs,
+                       int            attrs_len);
+} PangoEngineLangClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoEngineLang"><type>PangoEngineLang</type></link></para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>script_break</structfield>&#160;()</term>
+<listitem><simpara> Provides a custom implementation of <link linkend="pango-break"><function>pango_break()</function></link>.
+If <link linkend="NULL--CAPS"><literal>NULL</literal></link>, <link linkend="pango-default-break"><function>pango_default_break()</function></link> is used instead. If not <link linkend="NULL--CAPS"><literal>NULL</literal></link>, for
+Pango versions before 1.16 (module interface version before 1.6.0),
+this was called instead of <link linkend="pango-default-break"><function>pango_default_break()</function></link>, but in newer versions,
+<link linkend="pango-default-break"><function>pango_default_break()</function></link> is always called and this is called after that to
+allow tailoring the breaking results.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-ENGINE-TYPE-LANG--CAPS" role="macro">
+<title>PANGO_ENGINE_TYPE_LANG</title>
+<indexterm zone="PANGO-ENGINE-TYPE-LANG--CAPS"><primary sortas="PANGO_ENGINE_TYPE_LANG">PANGO_ENGINE_TYPE_LANG</primary></indexterm><programlisting>#define PANGO_ENGINE_TYPE_LANG "PangoEngineLang"
+</programlisting>
+<para>
+A string constant defining the engine type
+for language engines.
+These engines derive from <link linkend="PangoEngineLang"><type>PangoEngineLang</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS" role="macro">
+<title>PANGO_ENGINE_LANG_DEFINE_TYPE()</title>
+<indexterm zone="PANGO-ENGINE-LANG-DEFINE-TYPE--CAPS"><primary sortas="PANGO_ENGINE_LANG_DEFINE_TYPE">PANGO_ENGINE_LANG_DEFINE_TYPE</primary></indexterm><programlisting>#define             PANGO_ENGINE_LANG_DEFINE_TYPE(name, prefix, class_init, instance_init)</programlisting>
+<para>
+Outputs the necessary code for GObject type registration for a
+<link linkend="PangoEngineLang"><type>PangoEngineLang</type></link> class defined in a module. Two static symbols
+are defined.
+</para>
+<para>
+<programlisting>
+ static GType <replaceable>prefix</replaceable>_type;
+ static void <replaceable>prefix</replaceable>_register_type (GTypeModule module);
+</programlisting>
+</para>
+<para>
+The <function><replaceable>prefix</replaceable><link linkend="register-type"><function>_register_type()</function></link></function>
+function should be called in your <link linkend="script-engine-init"><function>script_engine_init()</function></link> function for
+each type that your module implements, and then your <link linkend="script-engine-create"><function>script_engine_create()</function></link>
+function can create instances of the object as follows:
+</para>
+<para>
+<informalexample><programlisting>
+ PangoEngine *engine = g_object_new (<replaceable>prefix</replaceable>_type, NULL);
+</programlisting></informalexample></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> Name of the the type to register (for example:, <literal>ArabicEngineFc</literal>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>prefix</parameter>&#160;:</term>
+<listitem><simpara> Prefix for symbols that will be defined (for example:, <literal>arabic_engine_fc</literal>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>class_init</parameter>&#160;:</term>
+<listitem><simpara> Class initialization function for the new type, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>instance_init</parameter>&#160;:</term>
+<listitem><simpara> Instance initialization function for the new type, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pango-engine-shape.xml b/docs/xml/pango-engine-shape.xml
new file mode 100755 (executable)
index 0000000..b1229be
--- /dev/null
@@ -0,0 +1,171 @@
+<refentry id="PangoEngineShape">
+<refmeta>
+<refentrytitle role="top_of_page" id="PangoEngineShape.top_of_page">PangoEngineShape</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>PangoEngineShape</refname>
+<refpurpose>Rendering-system dependent script engines</refpurpose>
+</refnamediv>
+<refsect1 id="PangoEngineShape.stability-level">
+<title>Stability Level</title>
+Unstable, unless otherwise indicated
+</refsect1>
+
+<refsynopsisdiv id="PangoEngineShape.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoEngineShape-struct">PangoEngineShape</link>;
+                    <link linkend="PangoEngineShapeClass">PangoEngineShapeClass</link>;
+#define             <link linkend="PANGO-ENGINE-TYPE-SHAPE--CAPS">PANGO_ENGINE_TYPE_SHAPE</link>
+#define             <link linkend="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS">PANGO_ENGINE_SHAPE_DEFINE_TYPE</link>      (name, prefix, class_init, instance_init)
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="PangoEngineShape.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoEngine">PangoEngine</link>
+         +----PangoEngineShape
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="PangoEngineShape.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The <firstterm>shape engines</firstterm> are rendering-system dependent
+engines that convert character strings into glyph strings.
+These engines are used in <link linkend="pango-shape"><function>pango_shape()</function></link>.
+</para>
+</refsect1>
+
+<refsect1 id="PangoEngineShape.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoEngineShape-struct" role="struct">
+<title>PangoEngineShape</title>
+<indexterm zone="PangoEngineShape-struct"><primary sortas="PangoEngineShape">PangoEngineShape</primary></indexterm><programlisting>typedef struct _PangoEngineShape PangoEngineShape;</programlisting>
+<para>
+The <link linkend="PangoEngineShape"><type>PangoEngineShape</type></link> class is implemented by engines that
+customize the rendering-system dependent part of the
+Pango pipeline for a particular script or language.
+A <link linkend="PangoEngineShape"><type>PangoEngineShape</type></link> implementation is then specific to both
+a particular rendering system or group of rendering systems
+and to a particular script. For instance, there is one
+<link linkend="PangoEngineShape"><type>PangoEngineShape</type></link> implementation to handle shaping Arabic
+for Fontconfig-based backends.</para>
+<para>
+</para></refsect2>
+<refsect2 id="PangoEngineShapeClass" role="struct">
+<title>PangoEngineShapeClass</title>
+<indexterm zone="PangoEngineShapeClass"><primary sortas="PangoEngineShapeClass">PangoEngineShapeClass</primary></indexterm><programlisting>typedef struct {
+  void (*script_shape) (PangoEngineShape *engine,
+                       PangoFont        *font,
+                       const char       *text,
+                       int               length,
+                       const PangoAnalysis *analysis,
+                       PangoGlyphString *glyphs);
+  PangoCoverageLevel (*covers)   (PangoEngineShape *engine,
+                                 PangoFont        *font,
+                                 PangoLanguage    *language,
+                                 gunichar          wc);
+} PangoEngineShapeClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoEngineShape"><type>PangoEngineShape</type></link></para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>script_shape</structfield>&#160;()</term>
+<listitem><simpara> Given a font, a piece of text, and a <link linkend="PangoAnalysis"><type>PangoAnalysis</type></link>
+  structure, converts characters to glyphs and positions the
+  resulting glyphs. The results are stored in the <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+  that is passed in. (The implementation should resize it
+  appropriately using <link linkend="pango-glyph-string-set-size"><function>pango_glyph_string_set_size()</function></link>). All fields
+  of the <parameter>log_clusters</parameter> and <parameter>glyphs</parameter> array must be filled in, with
+  the exception that Pango will automatically generate
+  <literal>glyphs->glyphs[i].attr.is_cluster_start</literal>
+  using the <parameter>log_clusters</parameter> array. Each input character must occur in one
+  of the output logical clusters;
+  if no rendering is desired for a character, this may involve
+  inserting glyphs with the <link linkend="PangoGlyph"><type>PangoGlyph</type></link> ID <link linkend="PANGO-GLYPH-EMPTY--CAPS"><type>PANGO_GLYPH_EMPTY</type></link>, which
+  is guaranteed never to render. If the shaping fails for any reason,
+  the shaper should return with an empty (zero-size) glyph string.
+  If the shaper has not set the size on the glyph string yet, simply
+  returning signals the failure too.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>covers</structfield>&#160;()</term>
+<listitem><simpara> Returns the characters that this engine can cover
+  with a given font for a given language. If not overridden, the default
+  implementation simply returns the coverage information for the
+  font itself unmodified.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-ENGINE-TYPE-SHAPE--CAPS" role="macro">
+<title>PANGO_ENGINE_TYPE_SHAPE</title>
+<indexterm zone="PANGO-ENGINE-TYPE-SHAPE--CAPS"><primary sortas="PANGO_ENGINE_TYPE_SHAPE">PANGO_ENGINE_TYPE_SHAPE</primary></indexterm><programlisting>#define PANGO_ENGINE_TYPE_SHAPE "PangoEngineShape"
+</programlisting>
+<para>
+A string constant defining the engine type
+for shaping engines.
+These engines derive from <link linkend="PangoEngineShape"><type>PangoEngineShape</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS" role="macro">
+<title>PANGO_ENGINE_SHAPE_DEFINE_TYPE()</title>
+<indexterm zone="PANGO-ENGINE-SHAPE-DEFINE-TYPE--CAPS"><primary sortas="PANGO_ENGINE_SHAPE_DEFINE_TYPE">PANGO_ENGINE_SHAPE_DEFINE_TYPE</primary></indexterm><programlisting>#define             PANGO_ENGINE_SHAPE_DEFINE_TYPE(name, prefix, class_init, instance_init)</programlisting>
+<para>
+Outputs the necessary code for GObject type registration for a
+<link linkend="PangoEngineShape"><type>PangoEngineShape</type></link> class defined in a module. Two static symbols
+are defined.
+</para>
+<para>
+<programlisting>
+ static GType <replaceable>prefix</replaceable>_type;
+ static void <replaceable>prefix</replaceable>_register_type (GTypeModule module);
+</programlisting>
+</para>
+<para>
+The <function><replaceable>prefix</replaceable><link linkend="register-type"><function>_register_type()</function></link></function>
+function should be called in your <link linkend="script-engine-init"><function>script_engine_init()</function></link> function for
+each type that your module implements, and then your <link linkend="script-engine-create"><function>script_engine_create()</function></link>
+function can create instances of the object as follows:
+</para>
+<para>
+<informalexample><programlisting>
+ PangoEngine *engine = g_object_new (<replaceable>prefix</replaceable>_type, NULL);
+</programlisting></informalexample></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> Name of the the type to register (for example:, <literal>ArabicEngineFc</literal>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>prefix</parameter>&#160;:</term>
+<listitem><simpara> Prefix for symbols that will be defined (for example:, <literal>arabic_engine_fc</literal>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>class_init</parameter>&#160;:</term>
+<listitem><simpara> Class initialization function for the new type, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>instance_init</parameter>&#160;:</term>
+<listitem><simpara> Instance initialization function for the new type, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pango-renderer.xml b/docs/xml/pango-renderer.xml
new file mode 100755 (executable)
index 0000000..2035f3a
--- /dev/null
@@ -0,0 +1,745 @@
+<refentry id="PangoRenderer">
+<refmeta>
+<refentrytitle role="top_of_page" id="PangoRenderer.top_of_page">PangoRenderer</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>PangoRenderer</refname>
+<refpurpose>Rendering driver base class</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="PangoRenderer.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoRenderer-struct">PangoRenderer</link>;
+enum                <link linkend="PangoRenderPart">PangoRenderPart</link>;
+#define             <link linkend="PANGO-TYPE-RENDER-PART--CAPS">PANGO_TYPE_RENDER_PART</link>
+                    <link linkend="PangoRendererClass">PangoRendererClass</link>;
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-layout">pango_renderer_draw_layout</link>          (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-layout-line">pango_renderer_draw_layout_line</link>     (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-glyphs">pango_renderer_draw_glyphs</link>          (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-glyph-item">pango_renderer_draw_glyph_item</link>      (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-rectangle">pango_renderer_draw_rectangle</link>       (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y,
+                                                         <link linkend="int">int</link> width,
+                                                         <link linkend="int">int</link> height);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-error-underline">pango_renderer_draw_error_underline</link> (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y,
+                                                         <link linkend="int">int</link> width,
+                                                         <link linkend="int">int</link> height);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-trapezoid">pango_renderer_draw_trapezoid</link>       (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part,
+                                                         <link linkend="double">double</link> y1_,
+                                                         <link linkend="double">double</link> x11,
+                                                         <link linkend="double">double</link> x21,
+                                                         <link linkend="double">double</link> y2,
+                                                         <link linkend="double">double</link> x12,
+                                                         <link linkend="double">double</link> x22);
+<link linkend="void">void</link>                <link linkend="pango-renderer-draw-glyph">pango_renderer_draw_glyph</link>           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> glyph,
+                                                         <link linkend="double">double</link> x,
+                                                         <link linkend="double">double</link> y);
+<link linkend="void">void</link>                <link linkend="pango-renderer-activate">pango_renderer_activate</link>             (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);
+<link linkend="void">void</link>                <link linkend="pango-renderer-deactivate">pango_renderer_deactivate</link>           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);
+<link linkend="void">void</link>                <link linkend="pango-renderer-part-changed">pango_renderer_part_changed</link>         (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part);
+<link linkend="void">void</link>                <link linkend="pango-renderer-set-color">pango_renderer_set_color</link>            (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part,
+                                                         const <link linkend="PangoColor">PangoColor</link> *color);
+<link linkend="PangoColor">PangoColor</link> *        <link linkend="pango-renderer-get-color">pango_renderer_get_color</link>            (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part);
+<link linkend="void">void</link>                <link linkend="pango-renderer-set-matrix">pango_renderer_set_matrix</link>           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);
+const <link linkend="PangoMatrix">PangoMatrix</link> * <link linkend="pango-renderer-get-matrix">pango_renderer_get_matrix</link>           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);
+<link linkend="PangoLayout">PangoLayout</link> *       <link linkend="pango-renderer-get-layout">pango_renderer_get_layout</link>           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);
+<link linkend="PangoLayoutLine">PangoLayoutLine</link> *   <link linkend="pango-renderer-get-layout-line">pango_renderer_get_layout_line</link>      (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="PangoRenderer.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoRenderer
+         +----<link linkend="PangoXftRenderer">PangoXftRenderer</link>
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="PangoRenderer.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+<link linkend="PangoRenderer"><type>PangoRenderer</type></link> is a base class that contains the necessary logic for
+rendering a <link linkend="PangoLayout"><type>PangoLayout</type></link> or <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>. By subclassing
+<link linkend="PangoRenderer"><type>PangoRenderer</type></link> and overriding operations such as <parameter>draw_glyphs</parameter> and
+<parameter>draw_rectangle</parameter>, renderers for particular font backends and
+destinations can be created.
+</para>
+</refsect1>
+
+<refsect1 id="PangoRenderer.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoRenderer-struct" role="struct">
+<title>PangoRenderer</title>
+<indexterm zone="PangoRenderer-struct" role="1.8"><primary sortas="PangoRenderer">PangoRenderer</primary></indexterm><programlisting>typedef struct {
+  PangoMatrix *matrix;         /* May be NULL */
+} PangoRenderer;
+</programlisting>
+<para>
+<link linkend="PangoRenderer"><type>PangoRenderer</type></link> is a base class for objects that are used to
+render Pango objects such as <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> and
+<link linkend="PangoLayout"><type>PangoLayout</type></link>.</para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoMatrix">PangoMatrix</link>&#160;*<structfield>matrix</structfield>;</term>
+<listitem><simpara> the current transformation matrix for the Renderer; may
+   be <link linkend="NULL--CAPS"><literal>NULL</literal></link>, which should be treated the same as the identity matrix.
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="PangoRenderPart" role="enum" condition="since:1.8">
+<title>enum PangoRenderPart</title>
+<indexterm zone="PangoRenderPart" role="1.8"><primary sortas="PangoRenderPart">PangoRenderPart</primary></indexterm><programlisting>typedef enum
+{
+  PANGO_RENDER_PART_FOREGROUND,
+  PANGO_RENDER_PART_BACKGROUND,
+  PANGO_RENDER_PART_UNDERLINE,
+  PANGO_RENDER_PART_STRIKETHROUGH
+} PangoRenderPart;
+</programlisting>
+<para>
+<link linkend="PangoRenderPart"><type>PangoRenderPart</type></link> defines different items to render for such
+purposes as setting colors.</para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-RENDER-PART-FOREGROUND--CAPS" role="constant">
+<term><literal>PANGO_RENDER_PART_FOREGROUND</literal></term>
+<listitem><simpara> the text itself
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-RENDER-PART-BACKGROUND--CAPS" role="constant">
+<term><literal>PANGO_RENDER_PART_BACKGROUND</literal></term>
+<listitem><simpara> the area behind the text
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-RENDER-PART-UNDERLINE--CAPS" role="constant">
+<term><literal>PANGO_RENDER_PART_UNDERLINE</literal></term>
+<listitem><simpara> underlines
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-RENDER-PART-STRIKETHROUGH--CAPS" role="constant">
+<term><literal>PANGO_RENDER_PART_STRIKETHROUGH</literal></term>
+<listitem><simpara> strikethrough lines
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="PANGO-TYPE-RENDER-PART--CAPS" role="macro">
+<title>PANGO_TYPE_RENDER_PART</title>
+<indexterm zone="PANGO-TYPE-RENDER-PART--CAPS"><primary sortas="PANGO_TYPE_RENDER_PART">PANGO_TYPE_RENDER_PART</primary></indexterm><programlisting>#define PANGO_TYPE_RENDER_PART (pango_render_part_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoRenderPart"><type>PangoRenderPart</type></link>.
+</para></refsect2>
+<refsect2 id="PangoRendererClass" role="struct" condition="since:1.8">
+<title>PangoRendererClass</title>
+<indexterm zone="PangoRendererClass" role="1.8"><primary sortas="PangoRendererClass">PangoRendererClass</primary></indexterm><programlisting>typedef struct {
+  /* All of the following have default implementations
+   * and take as coordinates user coordinates in Pango units
+   */
+  void (*draw_glyphs) (PangoRenderer     *renderer,
+                      PangoFont         *font,
+                      PangoGlyphString  *glyphs,
+                      int                x,
+                      int                y);
+  void (*draw_rectangle) (PangoRenderer     *renderer,
+                         PangoRenderPart    part,
+                         int                x,
+                         int                y,
+                         int                width,
+                         int                height);
+  void (*draw_error_underline) (PangoRenderer     *renderer,
+                               int                x,
+                               int                y,
+                               int                width,
+                               int                height);
+
+  /* Nothing is drawn for shaped glyphs unless this is implemented */
+  void (*draw_shape) (PangoRenderer  *renderer,
+                     PangoAttrShape *attr,
+                     int             x,
+                     int             y);
+
+  /* These two must be implemented and take coordinates in
+   * device space as doubles.
+   */
+  void (*draw_trapezoid) (PangoRenderer  *renderer,
+                         PangoRenderPart part,
+                         double          y1_,
+                         double          x11,
+                         double          x21,
+                         double          y2,
+                         double          x12,
+                         double          x22);
+  void (*draw_glyph) (PangoRenderer *renderer,
+                     PangoFont     *font,
+                     PangoGlyph     glyph,
+                     double         x,
+                     double         y);
+
+  /* Notification of change in rendering attributes
+   */
+  void (*part_changed) (PangoRenderer   *renderer,
+                       PangoRenderPart  part);
+
+  /* Paired around drawing operations
+   */
+  void (*begin) (PangoRenderer *renderer);
+  void (*end)   (PangoRenderer *renderer);
+
+  /* Hooks into the details of layout rendering
+   */
+  void (*prepare_run) (PangoRenderer  *renderer,
+                      PangoLayoutRun *run);
+
+  /* All of the following have default implementations
+   * and take as coordinates user coordinates in Pango units
+   */
+  void (*draw_glyph_item) (PangoRenderer     *renderer,
+                          const char        *text,
+                          PangoGlyphItem    *glyph_item,
+                          int                x,
+                          int                y);
+} PangoRendererClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoRenderer"><type>PangoRenderer</type></link>.</para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>draw_glyphs</structfield>&#160;()</term>
+<listitem><simpara> draws a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>draw_rectangle</structfield>&#160;()</term>
+<listitem><simpara> draws a rectangle
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>draw_error_underline</structfield>&#160;()</term>
+<listitem><simpara> draws a squiggly line that approximately
+covers the given rectangle in the style of an underline used to
+indicate a spelling error.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>draw_shape</structfield>&#160;()</term>
+<listitem><simpara> draw content for a glyph shaped with <link linkend="PangoAttrShape"><type>PangoAttrShape</type></link>.
+  <parameter>x</parameter>, <parameter>y</parameter> are the coordinates of the left edge of the baseline,
+  in user coordinates.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>draw_trapezoid</structfield>&#160;()</term>
+<listitem><simpara> draws a trapezoidal filled area
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>draw_glyph</structfield>&#160;()</term>
+<listitem><simpara> draws a single glyph
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>part_changed</structfield>&#160;()</term>
+<listitem><simpara> do renderer specific processing when rendering
+ attributes change
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>begin</structfield>&#160;()</term>
+<listitem><simpara> Do renderer-specific initialization before drawing
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>end</structfield>&#160;()</term>
+<listitem><simpara> Do renderer-specific cleanup after drawing
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>prepare_run</structfield>&#160;()</term>
+<listitem><simpara> updates the renderer for a new run
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>draw_glyph_item</structfield>&#160;()</term>
+<listitem><simpara> draws a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-layout" role="function" condition="since:1.8">
+<title>pango_renderer_draw_layout ()</title>
+<indexterm zone="pango-renderer-draw-layout" role="1.8"><primary sortas="pango_renderer_draw_layout">pango_renderer_draw_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_layout          (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Draws <parameter>layout</parameter> with the specified <link linkend="PangoRenderer"><type>PangoRenderer</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-layout-line" role="function" condition="since:1.8">
+<title>pango_renderer_draw_layout_line ()</title>
+<indexterm zone="pango-renderer-draw-layout-line" role="1.8"><primary sortas="pango_renderer_draw_layout_line">pango_renderer_draw_layout_line</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_layout_line     (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Draws <parameter>line</parameter> with the specified <link linkend="PangoRenderer"><type>PangoRenderer</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-glyphs" role="function" condition="since:1.8">
+<title>pango_renderer_draw_glyphs ()</title>
+<indexterm zone="pango-renderer-draw-glyphs" role="1.8"><primary sortas="pango_renderer_draw_glyphs">pango_renderer_draw_glyphs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_glyphs          (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Draws the glyphs in <parameter>glyphs</parameter> with the specified <link linkend="PangoRenderer"><type>PangoRenderer</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-glyph-item" role="function" condition="since:1.22">
+<title>pango_renderer_draw_glyph_item ()</title>
+<indexterm zone="pango-renderer-draw-glyph-item" role="1.22"><primary sortas="pango_renderer_draw_glyph_item">pango_renderer_draw_glyph_item</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_glyph_item      (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Draws the glyphs in <parameter>glyph_item</parameter> with the specified <link linkend="PangoRenderer"><type>PangoRenderer</type></link>,
+embedding the text associated with the glyphs in the output if the
+output format supports it (PDF for example).
+</para>
+<para>
+Note that <parameter>text</parameter> is the start of the text for layout, which is then
+indexed by <literal><parameter>glyph_item->item->offset</parameter></literal>.
+</para>
+<para>
+If <parameter>text</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, this simply calls <link linkend="pango-renderer-draw-glyphs"><function>pango_renderer_draw_glyphs()</function></link>.
+</para>
+<para>
+The default implementation of this method simply falls back to
+<link linkend="pango-renderer-draw-glyphs"><function>pango_renderer_draw_glyphs()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> the UTF-8 text that <parameter>glyph_item</parameter> refers to, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X position of left edge of baseline, in user space coordinates
+  in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y position of left edge of baseline, in user space coordinates
+   in Pango units.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-renderer-draw-rectangle" role="function" condition="since:1.8">
+<title>pango_renderer_draw_rectangle ()</title>
+<indexterm zone="pango-renderer-draw-rectangle" role="1.8"><primary sortas="pango_renderer_draw_rectangle">pango_renderer_draw_rectangle</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_rectangle       (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y,
+                                                         <link linkend="int">int</link> width,
+                                                         <link linkend="int">int</link> height);</programlisting>
+<para>
+Draws an axis-aligned rectangle in user space coordinates with the
+specified <link linkend="PangoRenderer"><type>PangoRenderer</type></link>.
+</para>
+<para>
+This should be called while <parameter>renderer</parameter> is already active.  Use
+<link linkend="pango-renderer-activate"><function>pango_renderer_activate()</function></link> to activate a renderer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara> type of object this rectangle is part of
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X position at which to draw rectangle, in user space coordinates in Pango units
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y position at which to draw rectangle, in user space coordinates in Pango units
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> width of rectangle in Pango units in user space coordinates
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> height of rectangle in Pango units in user space coordinates
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-error-underline" role="function" condition="since:1.8">
+<title>pango_renderer_draw_error_underline ()</title>
+<indexterm zone="pango-renderer-draw-error-underline" role="1.8"><primary sortas="pango_renderer_draw_error_underline">pango_renderer_draw_error_underline</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_error_underline (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y,
+                                                         <link linkend="int">int</link> width,
+                                                         <link linkend="int">int</link> height);</programlisting>
+<para>
+Draw a squiggly line that approximately covers the given rectangle
+in the style of an underline used to indicate a spelling error.
+(The width of the underline is rounded to an integer number
+of up/down segments and the resulting rectangle is centered
+in the original rectangle)
+</para>
+<para>
+This should be called while <parameter>renderer</parameter> is already active.  Use
+<link linkend="pango-renderer-activate"><function>pango_renderer_activate()</function></link> to activate a renderer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X coordinate of underline, in Pango units in user coordinate system
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y coordinate of underline, in Pango units in user coordinate system
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> width of underline, in Pango units in user coordinate system
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> height of underline, in Pango units in user coordinate system
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-trapezoid" role="function" condition="since:1.8">
+<title>pango_renderer_draw_trapezoid ()</title>
+<indexterm zone="pango-renderer-draw-trapezoid" role="1.8"><primary sortas="pango_renderer_draw_trapezoid">pango_renderer_draw_trapezoid</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_trapezoid       (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part,
+                                                         <link linkend="double">double</link> y1_,
+                                                         <link linkend="double">double</link> x11,
+                                                         <link linkend="double">double</link> x21,
+                                                         <link linkend="double">double</link> y2,
+                                                         <link linkend="double">double</link> x12,
+                                                         <link linkend="double">double</link> x22);</programlisting>
+<para>
+Draws a trapezoid with the parallel sides aligned with the X axis
+using the given <link linkend="PangoRenderer"><type>PangoRenderer</type></link>; coordinates are in device space.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara> type of object this trapezoid is part of
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y1_</parameter>&#160;:</term>
+<listitem><simpara> Y coordinate of top of trapezoid
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x11</parameter>&#160;:</term>
+<listitem><simpara> X coordinate of left end of top of trapezoid
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x21</parameter>&#160;:</term>
+<listitem><simpara> X coordinate of right end of top of trapezoid
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y2</parameter>&#160;:</term>
+<listitem><simpara> Y coordinate of bottom of trapezoid
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x12</parameter>&#160;:</term>
+<listitem><simpara> X coordinate of left end of bottom of trapezoid
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x22</parameter>&#160;:</term>
+<listitem><simpara> X coordinate of right end of bottom of trapezoid
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-draw-glyph" role="function" condition="since:1.8">
+<title>pango_renderer_draw_glyph ()</title>
+<indexterm zone="pango-renderer-draw-glyph" role="1.8"><primary sortas="pango_renderer_draw_glyph">pango_renderer_draw_glyph</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_draw_glyph           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> glyph,
+                                                         <link linkend="double">double</link> x,
+                                                         <link linkend="double">double</link> y);</programlisting>
+<para>
+Draws a single glyph with coordinates in device space.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph</parameter>&#160;:</term>
+<listitem><simpara> the glyph index of a single glyph
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> X coordinate of left edge of baseline of glyph
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> Y coordinate of left edge of baseline of glyph
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-activate" role="function" condition="since:1.8">
+<title>pango_renderer_activate ()</title>
+<indexterm zone="pango-renderer-activate" role="1.8"><primary sortas="pango_renderer_activate">pango_renderer_activate</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_activate             (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);</programlisting>
+<para>
+Does initial setup before rendering operations on <parameter>renderer</parameter>.
+<link linkend="pango-renderer-deactivate"><function>pango_renderer_deactivate()</function></link> should be called when done drawing.
+Calls such as <link linkend="pango-renderer-draw-layout"><function>pango_renderer_draw_layout()</function></link> automatically
+activate the layout before drawing on it. Calls to
+<link linkend="pango-renderer-activate"><function>pango_renderer_activate()</function></link> and <link linkend="pango-renderer-deactivate"><function>pango_renderer_deactivate()</function></link> can
+be nested and the renderer will only be initialized and
+deinitialized once.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-deactivate" role="function" condition="since:1.8">
+<title>pango_renderer_deactivate ()</title>
+<indexterm zone="pango-renderer-deactivate" role="1.8"><primary sortas="pango_renderer_deactivate">pango_renderer_deactivate</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_deactivate           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);</programlisting>
+<para>
+Cleans up after rendering operations on <parameter>renderer</parameter>. See
+docs for <link linkend="pango-renderer-activate"><function>pango_renderer_activate()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-part-changed" role="function" condition="since:1.8">
+<title>pango_renderer_part_changed ()</title>
+<indexterm zone="pango-renderer-part-changed" role="1.8"><primary sortas="pango_renderer_part_changed">pango_renderer_part_changed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_part_changed         (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part);</programlisting>
+<para>
+Informs Pango that the way that the rendering is done
+for <parameter>part</parameter> has changed in a way that would prevent multiple
+pieces being joined together into one drawing call. For
+instance, if a subclass of <link linkend="PangoRenderer"><type>PangoRenderer</type></link> was to add a stipple
+option for drawing underlines, it needs to call
+</para>
+<para>
+<informalexample><programlisting>
+pango_renderer_part_changed (render, PANGO_RENDER_PART_UNDERLINE);
+</programlisting></informalexample>
+</para>
+<para>
+When the stipple changes or underlines with different stipples
+might be joined together. Pango automatically calls this for
+changes to colors. (See <link linkend="pango-renderer-set-color"><function>pango_renderer_set_color()</function></link>)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara> the part for which rendering has changed.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-set-color" role="function" condition="since:1.8">
+<title>pango_renderer_set_color ()</title>
+<indexterm zone="pango-renderer-set-color" role="1.8"><primary sortas="pango_renderer_set_color">pango_renderer_set_color</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_set_color            (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part,
+                                                         const <link linkend="PangoColor">PangoColor</link> *color);</programlisting>
+<para>
+Sets the color for part of the rendering.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara> the part to change the color of
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara> the new color or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to unset the current color
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-get-color" role="function" condition="since:1.8">
+<title>pango_renderer_get_color ()</title>
+<indexterm zone="pango-renderer-get-color" role="1.8"><primary sortas="pango_renderer_get_color">pango_renderer_get_color</primary></indexterm><programlisting><link linkend="PangoColor">PangoColor</link> *        pango_renderer_get_color            (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         <link linkend="PangoRenderPart">PangoRenderPart</link> part);</programlisting>
+<para>
+Gets the current rendering color for the specified part.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>part</parameter>&#160;:</term>
+<listitem><simpara> the part to get the color for
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the color for the specified part, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+ if it hasn't been set and should be inherited from the
+ environment.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-set-matrix" role="function" condition="since:1.8">
+<title>pango_renderer_set_matrix ()</title>
+<indexterm zone="pango-renderer-set-matrix" role="1.8"><primary sortas="pango_renderer_set_matrix">pango_renderer_set_matrix</primary></indexterm><programlisting><link linkend="void">void</link>                pango_renderer_set_matrix           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);</programlisting>
+<para>
+Sets the transformation matrix that will be applied when rendering.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to unset any existing matrix.
+ (No matrix set is the same as setting the identity matrix.)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-get-matrix" role="function" condition="since:1.8">
+<title>pango_renderer_get_matrix ()</title>
+<indexterm zone="pango-renderer-get-matrix" role="1.8"><primary sortas="pango_renderer_get_matrix">pango_renderer_get_matrix</primary></indexterm><programlisting>const <link linkend="PangoMatrix">PangoMatrix</link> * pango_renderer_get_matrix           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);</programlisting>
+<para>
+Gets the transformation matrix that will be applied when
+rendering. See <link linkend="pango-renderer-set-matrix"><function>pango_renderer_set_matrix()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the matrix, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no matrix has been set
+ (which is the same as the identity matrix). The returned
+ matrix is owned by Pango and must not be modified or
+ freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-renderer-get-layout" role="function" condition="since:1.20">
+<title>pango_renderer_get_layout ()</title>
+<indexterm zone="pango-renderer-get-layout" role="1.20"><primary sortas="pango_renderer_get_layout">pango_renderer_get_layout</primary></indexterm><programlisting><link linkend="PangoLayout">PangoLayout</link> *       pango_renderer_get_layout           (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);</programlisting>
+<para>
+Gets the layout currently being rendered using <parameter>renderer</parameter>.
+Calling this function only makes sense from inside a subclass's
+methods, like in its draw_shape<!---->() for example.
+</para>
+<para>
+The returned layout should not be modified while still being
+rendered.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the layout, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no layout is being
+ rendered using <parameter>renderer</parameter> at this time.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-renderer-get-layout-line" role="function" condition="since:1.20">
+<title>pango_renderer_get_layout_line ()</title>
+<indexterm zone="pango-renderer-get-layout-line" role="1.20"><primary sortas="pango_renderer_get_layout_line">pango_renderer_get_layout_line</primary></indexterm><programlisting><link linkend="PangoLayoutLine">PangoLayoutLine</link> *   pango_renderer_get_layout_line      (<link linkend="PangoRenderer">PangoRenderer</link> *renderer);</programlisting>
+<para>
+Gets the layout line currently being rendered using <parameter>renderer</parameter>.
+Calling this function only makes sense from inside a subclass's
+methods, like in its draw_shape<!---->() for example.
+</para>
+<para>
+The returned layout line should not be modified while still being
+rendered.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>renderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoRenderer"><type>PangoRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the layout line, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no layout line is being
+ rendered using <parameter>renderer</parameter> at this time.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pango-version.xml b/docs/xml/pango-version.xml
new file mode 100755 (executable)
index 0000000..7690b32
--- /dev/null
@@ -0,0 +1,204 @@
+<refentry id="pango-Version-Checking">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Version-Checking.top_of_page">Version Checking</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Version Checking</refname>
+<refpurpose>Tools for checking Pango version at compile- and run-time.</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Version-Checking.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+#define             <link linkend="PANGO-VERSION-ENCODE--CAPS">PANGO_VERSION_ENCODE</link>                (major, minor, micro)
+#define             <link linkend="PANGO-VERSION--CAPS">PANGO_VERSION</link>
+#define             <link linkend="PANGO-VERSION-MAJOR--CAPS">PANGO_VERSION_MAJOR</link>
+#define             <link linkend="PANGO-VERSION-MINOR--CAPS">PANGO_VERSION_MINOR</link>
+#define             <link linkend="PANGO-VERSION-MICRO--CAPS">PANGO_VERSION_MICRO</link>
+#define             <link linkend="PANGO-VERSION-STRING--CAPS">PANGO_VERSION_STRING</link>
+#define             <link linkend="PANGO-VERSION-CHECK--CAPS">PANGO_VERSION_CHECK</link>                 (major,minor,micro)
+<link linkend="int">int</link>                 <link linkend="pango-version">pango_version</link>                       (void);
+const <link linkend="char">char</link> *        <link linkend="pango-version-string">pango_version_string</link>                (void);
+const <link linkend="char">char</link> *        <link linkend="pango-version-check">pango_version_check</link>                 (<link linkend="int">int</link> required_major,
+                                                         <link linkend="int">int</link> required_minor,
+                                                         <link linkend="int">int</link> required_micro);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Version-Checking.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The capital-letter macros defined here can be used to check the version of
+Pango at compile-time, and to <firstterm>encode</firstterm> Pango versions into
+integers.
+The functions can be used to check the version of the linked Pango library
+at run-time.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Version-Checking.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PANGO-VERSION-ENCODE--CAPS" role="macro">
+<title>PANGO_VERSION_ENCODE()</title>
+<indexterm zone="PANGO-VERSION-ENCODE--CAPS"><primary sortas="PANGO_VERSION_ENCODE">PANGO_VERSION_ENCODE</primary></indexterm><programlisting>#define             PANGO_VERSION_ENCODE(major, minor, micro)</programlisting>
+<para>
+This macro encodes the given Pango version into an integer.  The numbers
+returned by <link linkend="PANGO-VERSION--CAPS"><literal>PANGO_VERSION</literal></link> and <link linkend="pango-version"><function>pango_version()</function></link> are encoded using this macro.
+Two encoded version numbers can be compared as integers.
+</para><variablelist role="params">
+<varlistentry><term><parameter>major</parameter>&#160;:</term>
+<listitem><simpara>the major component of the version number
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>minor</parameter>&#160;:</term>
+<listitem><simpara>the minor component of the version number
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>micro</parameter>&#160;:</term>
+<listitem><simpara>the micro component of the version number
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-VERSION--CAPS" role="macro">
+<title>PANGO_VERSION</title>
+<indexterm zone="PANGO-VERSION--CAPS"><primary sortas="PANGO_VERSION">PANGO_VERSION</primary></indexterm><programlisting>#define             PANGO_VERSION</programlisting>
+<para>
+The version of Pango available at compile-time, encoded using
+<link linkend="PANGO-VERSION-ENCODE--CAPS"><function>PANGO_VERSION_ENCODE()</function></link>.
+</para></refsect2>
+<refsect2 id="PANGO-VERSION-MAJOR--CAPS" role="macro">
+<title>PANGO_VERSION_MAJOR</title>
+<indexterm zone="PANGO-VERSION-MAJOR--CAPS"><primary sortas="PANGO_VERSION_MAJOR">PANGO_VERSION_MAJOR</primary></indexterm><programlisting>#define PANGO_VERSION_MAJOR 1
+</programlisting>
+<para>
+The major component of the version of Pango available at compile-time.
+</para></refsect2>
+<refsect2 id="PANGO-VERSION-MINOR--CAPS" role="macro">
+<title>PANGO_VERSION_MINOR</title>
+<indexterm zone="PANGO-VERSION-MINOR--CAPS"><primary sortas="PANGO_VERSION_MINOR">PANGO_VERSION_MINOR</primary></indexterm><programlisting>#define PANGO_VERSION_MINOR 26
+</programlisting>
+<para>
+The minor component of the version of Pango available at compile-time.
+</para></refsect2>
+<refsect2 id="PANGO-VERSION-MICRO--CAPS" role="macro">
+<title>PANGO_VERSION_MICRO</title>
+<indexterm zone="PANGO-VERSION-MICRO--CAPS"><primary sortas="PANGO_VERSION_MICRO">PANGO_VERSION_MICRO</primary></indexterm><programlisting>#define PANGO_VERSION_MICRO 1
+</programlisting>
+<para>
+The micro component of the version of Pango available at compile-time.
+</para></refsect2>
+<refsect2 id="PANGO-VERSION-STRING--CAPS" role="macro">
+<title>PANGO_VERSION_STRING</title>
+<indexterm zone="PANGO-VERSION-STRING--CAPS"><primary sortas="PANGO_VERSION_STRING">PANGO_VERSION_STRING</primary></indexterm><programlisting>#define PANGO_VERSION_STRING "1.26.1"
+</programlisting>
+<para>
+A string literal containing the version of Pango available at compile-time.
+</para></refsect2>
+<refsect2 id="PANGO-VERSION-CHECK--CAPS" role="macro">
+<title>PANGO_VERSION_CHECK()</title>
+<indexterm zone="PANGO-VERSION-CHECK--CAPS"><primary sortas="PANGO_VERSION_CHECK">PANGO_VERSION_CHECK</primary></indexterm><programlisting>#define             PANGO_VERSION_CHECK(major,minor,micro)</programlisting>
+<para>
+Checks that the version of Pango available at compile-time is not older than
+the provided version number.
+</para><variablelist role="params">
+<varlistentry><term><parameter>major</parameter>&#160;:</term>
+<listitem><simpara>the major component of the version number
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>minor</parameter>&#160;:</term>
+<listitem><simpara>the minor component of the version number
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>micro</parameter>&#160;:</term>
+<listitem><simpara>the micro component of the version number
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-version" role="function" condition="since:1.16">
+<title>pango_version ()</title>
+<indexterm zone="pango-version" role="1.16"><primary sortas="pango_version">pango_version</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_version                       (void);</programlisting>
+<para>
+This is similar to the macro <link linkend="PANGO-VERSION--CAPS"><literal>PANGO_VERSION</literal></link> except that
+it returns the encoded version of Pango available at run-time,
+as opposed to the version available at compile-time.
+</para>
+<para>
+A version number can be encoded into an integer using
+<link linkend="PANGO-VERSION-ENCODE--CAPS"><function>PANGO_VERSION_ENCODE()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The encoded version of Pango library
+  available at run time.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-version-string" role="function" condition="since:1.16">
+<title>pango_version_string ()</title>
+<indexterm zone="pango-version-string" role="1.16"><primary sortas="pango_version_string">pango_version_string</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_version_string                (void);</programlisting>
+<para>
+This is similar to the macro <link linkend="PANGO-VERSION-STRING--CAPS"><literal>PANGO_VERSION_STRING</literal></link> except that
+it returns the version of Pango available at run-time, as opposed to
+the version available at compile-time.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A string containing the version of Pango library
+  available at run time.
+  The returned string is owned by Pango and should not be modified
+  or freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-version-check" role="function" condition="since:1.16">
+<title>pango_version_check ()</title>
+<indexterm zone="pango-version-check" role="1.16"><primary sortas="pango_version_check">pango_version_check</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_version_check                 (<link linkend="int">int</link> required_major,
+                                                         <link linkend="int">int</link> required_minor,
+                                                         <link linkend="int">int</link> required_micro);</programlisting>
+<para>
+Checks that the Pango library in use is compatible with the
+given version. Generally you would pass in the constants
+<link linkend="PANGO-VERSION-MAJOR--CAPS"><literal>PANGO_VERSION_MAJOR</literal></link>, <link linkend="PANGO-VERSION-MINOR--CAPS"><literal>PANGO_VERSION_MINOR</literal></link>, <link linkend="PANGO-VERSION-MICRO--CAPS"><literal>PANGO_VERSION_MICRO</literal></link>
+as the three arguments to this function; that produces
+a check that the library in use at run-time is compatible with
+the version of Pango the application or module was compiled against.
+</para>
+<para>
+Compatibility is defined by two things: first the version
+of the running library is newer than the version
+<parameter>required_major.required_minor</parameter>.<parameter>required_micro</parameter>. Second
+the running library must be binary compatible with the
+version <parameter>required_major.required_minor</parameter>.<parameter>required_micro</parameter>
+(same major version.)
+</para>
+<para>
+For compile-time version checking use <link linkend="PANGO-VERSION-CHECK--CAPS"><function>PANGO_VERSION_CHECK()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>required_major</parameter>&#160;:</term>
+<listitem><simpara> the required major version.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>required_minor</parameter>&#160;:</term>
+<listitem><simpara> the required minor version.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>required_micro</parameter>&#160;:</term>
+<listitem><simpara> the required major version.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the Pango library is compatible with the
+  given version, or a string describing the version mismatch.
+  The returned string is owned by Pango and should not be modified
+  or freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pangocairo.xml b/docs/xml/pangocairo.xml
new file mode 100755 (executable)
index 0000000..9e8275b
--- /dev/null
@@ -0,0 +1,865 @@
+<refentry id="pango-Cairo-Rendering">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Cairo-Rendering.top_of_page">Cairo Rendering</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Cairo Rendering</refname>
+<refpurpose>Rendering with the Cairo backend</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Cairo-Rendering.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoCairoFont"/><anchor id="PangoCairoFontMap"/>
+<synopsis>
+                    <link linkend="PangoCairoFont-struct">PangoCairoFont</link>;
+                    <link linkend="PangoCairoFontMap-struct">PangoCairoFontMap</link>;
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-cairo-font-map-get-default">pango_cairo_font_map_get_default</link>    (void);
+<link linkend="void">void</link>                <link linkend="pango-cairo-font-map-set-default">pango_cairo_font_map_set_default</link>    (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-cairo-font-map-new">pango_cairo_font_map_new</link>            (void);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-cairo-font-map-new-for-font-type">pango_cairo_font_map_new_for_font_type</link>
+                                                        (<link linkend="cairo-font-type-t">cairo_font_type_t</link> fonttype);
+<link linkend="cairo-font-type-t">cairo_font_type_t</link>   <link linkend="pango-cairo-font-map-get-font-type">pango_cairo_font_map_get_font_type</link>  (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);
+<link linkend="void">void</link>                <link linkend="pango-cairo-font-map-set-resolution">pango_cairo_font_map_set_resolution</link> (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap,
+                                                         <link linkend="double">double</link> dpi);
+<link linkend="double">double</link>              <link linkend="pango-cairo-font-map-get-resolution">pango_cairo_font_map_get_resolution</link> (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-cairo-font-map-create-context">pango_cairo_font_map_create_context</link> (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);
+<link linkend="cairo-scaled-font-t">cairo_scaled_font_t</link> * <link linkend="pango-cairo-font-get-scaled-font">pango_cairo_font_get_scaled_font</link>  (<link linkend="PangoCairoFont">PangoCairoFont</link> *font);
+<link linkend="void">void</link>                <link linkend="pango-cairo-context-set-resolution">pango_cairo_context_set_resolution</link>  (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="double">double</link> dpi);
+<link linkend="double">double</link>              <link linkend="pango-cairo-context-get-resolution">pango_cairo_context_get_resolution</link>  (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                <link linkend="pango-cairo-context-set-font-options">pango_cairo_context_set_font_options</link>
+                                                        (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="cairo-font-options-t">cairo_font_options_t</link> *options);
+const <link linkend="cairo-font-options-t">cairo_font_options_t</link> * <link linkend="pango-cairo-context-get-font-options">pango_cairo_context_get_font_options</link>
+                                                        (<link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="void">void</link>                (<link linkend="PangoCairoShapeRendererFunc">*PangoCairoShapeRendererFunc</link>)      (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoAttrShape">PangoAttrShape</link> *attr,
+                                                         <link linkend="gboolean">gboolean</link> do_path,
+                                                         <link linkend="gpointer">gpointer</link> data);
+<link linkend="void">void</link>                <link linkend="pango-cairo-context-set-shape-renderer">pango_cairo_context_set_shape_renderer</link>
+                                                        (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> dnotify);
+<link linkend="PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc</link>  <link linkend="pango-cairo-context-get-shape-renderer">pango_cairo_context_get_shape_renderer</link>
+                                                        (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="gpointer">gpointer</link> *data);
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-cairo-create-context">pango_cairo_create_context</link>          (<link linkend="cairo-t">cairo_t</link> *cr);
+<link linkend="void">void</link>                <link linkend="pango-cairo-update-context">pango_cairo_update_context</link>          (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoContext">PangoContext</link> *context);
+<link linkend="PangoLayout">PangoLayout</link> *       <link linkend="pango-cairo-create-layout">pango_cairo_create_layout</link>           (<link linkend="cairo-t">cairo_t</link> *cr);
+<link linkend="void">void</link>                <link linkend="pango-cairo-update-layout">pango_cairo_update_layout</link>           (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-cairo-show-glyph-string">pango_cairo_show_glyph_string</link>       (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);
+<link linkend="void">void</link>                <link linkend="pango-cairo-show-glyph-item">pango_cairo_show_glyph_item</link>         (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item);
+<link linkend="void">void</link>                <link linkend="pango-cairo-show-layout-line">pango_cairo_show_layout_line</link>        (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);
+<link linkend="void">void</link>                <link linkend="pango-cairo-show-layout">pango_cairo_show_layout</link>             (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-cairo-show-error-underline">pango_cairo_show_error_underline</link>    (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="double">double</link> x,
+                                                         <link linkend="double">double</link> y,
+                                                         <link linkend="double">double</link> width,
+                                                         <link linkend="double">double</link> height);
+<link linkend="void">void</link>                <link linkend="pango-cairo-glyph-string-path">pango_cairo_glyph_string_path</link>       (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);
+<link linkend="void">void</link>                <link linkend="pango-cairo-layout-line-path">pango_cairo_layout_line_path</link>        (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);
+<link linkend="void">void</link>                <link linkend="pango-cairo-layout-path">pango_cairo_layout_path</link>             (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout);
+<link linkend="void">void</link>                <link linkend="pango-cairo-error-underline-path">pango_cairo_error_underline_path</link>    (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="double">double</link> x,
+                                                         <link linkend="double">double</link> y,
+                                                         <link linkend="double">double</link> width,
+                                                         <link linkend="double">double</link> height);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-Cairo-Rendering.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GInterface">GInterface</link>
+   +----PangoCairoFont
+</synopsis>
+<synopsis>
+  <link linkend="GInterface">GInterface</link>
+   +----PangoCairoFontMap
+</synopsis>
+</refsect1>
+
+<refsect1 id="pango-Cairo-Rendering.prerequisites" role="prerequisites">
+<title role="prerequisites.title">Prerequisites</title>
+<para>
+PangoCairoFont requires
+ <link linkend="PangoFont">PangoFont</link>.</para>
+<para>
+PangoCairoFontMap requires
+ <link linkend="PangoFontMap">PangoFontMap</link>.</para>
+</refsect1>
+
+
+
+
+
+
+
+<refsect1 id="pango-Cairo-Rendering.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The <ulink url="http://cairographics.org">Cairo library</ulink> is a
+vector graphics library with a powerful rendering model. It has such
+features as anti-aliased primitives, alpha-compositing, and
+gradients. Multiple backends for Cairo are available, to allow
+rendering to images, to PDF files, and to the screen on X and on other
+windowing systems. The functions in this section allow using Pango
+to render to Cairo surfaces.
+</para>
+<para>
+Using Pango with Cairo is straightforward. A <link linkend="PangoContext"><type>PangoContext</type></link> created
+with <link linkend="pango-cairo-font-map-create-context"><function>pango_cairo_font_map_create_context()</function></link> can be used on any
+Cairo context (cairo_t), but needs to be updated to match the
+current transformation matrix and target surface of the Cairo context
+using <link linkend="pango-cairo-update-context"><function>pango_cairo_update_context()</function></link>. The convenience functions
+<link linkend="pango-cairo-create-layout"><function>pango_cairo_create_layout()</function></link> and <link linkend="pango-cairo-update-layout"><function>pango_cairo_update_layout()</function></link> handle
+the common case where the program doesn't need to manipulate the
+properties of the <link linkend="PangoContext"><type>PangoContext</type></link>.
+</para>
+<para>
+When you get the metrics of a layout or of a piece of a layout using
+functions such as <link linkend="pango-layout-get-extents"><function>pango_layout_get_extents()</function></link>, the reported metrics
+are in user-space coordinates. If a piece of text is 10 units long,
+and you call cairo_scale (cr, 2.0), it still is more-or-less 10
+units long. However, the results will be affected by hinting
+(that is, the process of adjusting the text to look good on the
+pixel grid), so you shouldn't assume they are completely independent
+of the current transformation matrix. Note that the basic metrics
+functions in Pango report results in integer Pango units. To get
+to the floating point units used in Cairo divide by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link>.
+</para>
+<example id="rotated-example">
+<title>Using Pango with Cairo</title>
+<programlisting>
+#<!-- -->include &lt;math.h>
+#<!-- -->include &lt;pango/pangocairo.h>
+static void
+draw_text (cairo_t *cr)
+{
+#<!-- -->define RADIUS 150
+#<!-- -->define N_WORDS 10
+#<!-- -->define FONT "Sans Bold 27"
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+  int i;
+  /* Center coordinates on the middle of the region we are drawing
+   */
+  cairo_translate (cr, RADIUS, RADIUS);
+  /* Create a PangoLayout, set the font and text */
+  layout = pango_cairo_create_layout (cr);
+  pango_layout_set_text (layout, "Text", -1);
+  desc = pango_font_description_from_string (FONT);
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+  /* Draw the layout N_WORDS times in a circle */
+  for (i = 0; i &lt; N_WORDS; i++)
+    {
+      int width, height;
+      double angle = (360. * i) / N_WORDS;
+      double red;
+      cairo_save (cr);
+      /* Gradient from red at angle == 60 to blue at angle == 240 */
+      red   = (1 + cos ((angle - 60) * G_PI / 180.)) / 2;
+      cairo_set_source_rgb (cr, red, 0, 1.0 - red);
+      cairo_rotate (cr, angle * G_PI / 180.);
+      /* Inform Pango to re-layout the text with the new transformation */
+      pango_cairo_update_layout (cr, layout);
+      pango_layout_get_size (layout, &amp;width, &amp;height);
+      cairo_move_to (cr, - ((double)width / PANGO_SCALE) / 2, - RADIUS);
+      pango_cairo_show_layout (cr, layout);
+      cairo_restore (cr);
+    }
+  /* free the layout object */
+  g_object_unref (layout);
+}
+int main (int argc, char **argv)
+{
+  cairo_t *cr;
+  char *filename;
+  cairo_status_t status;
+  cairo_surface_t *surface;
+  if (argc != 2)
+    {
+      g_printerr ("Usage: cairosimple OUTPUT_FILENAME\n");
+      return 1;
+    }
+  filename = argv[1];
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       2 * RADIUS, 2 * RADIUS);
+  cr = cairo_create (surface);
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+  draw_text (cr);
+  cairo_destroy (cr);
+  status = cairo_surface_write_to_png (surface, filename);
+  cairo_surface_destroy (surface);
+  if (status != CAIRO_STATUS_SUCCESS)
+    {
+      g_printerr ("Could not save png to '%s'\n", filename);
+      return 1;
+    }
+  return 0;
+}
+</programlisting>
+</example>
+<figure id="rotated-example-output">
+  <title>Output of <xref linkend="rotated-example"/></title>
+  <graphic fileref="rotated-text.png" format="PNG"/>
+</figure>
+</refsect1>
+
+<refsect1 id="pango-Cairo-Rendering.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoCairoFont-struct" role="struct">
+<title>PangoCairoFont</title>
+<indexterm zone="PangoCairoFont-struct" role="1.18"><primary sortas="PangoCairoFont">PangoCairoFont</primary></indexterm><programlisting>typedef struct _PangoCairoFont PangoCairoFont;</programlisting>
+<para>
+<link linkend="PangoCairoFont"><type>PangoCairoFont</type></link> is an interface exported by fonts for
+use with Cairo. The actual type of the font will depend
+on the particular font technology Cairo was compiled to use.</para>
+<para>
+</para><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="PangoCairoFontMap-struct" role="struct">
+<title>PangoCairoFontMap</title>
+<indexterm zone="PangoCairoFontMap-struct" role="1.10"><primary sortas="PangoCairoFontMap">PangoCairoFontMap</primary></indexterm><programlisting>typedef struct _PangoCairoFontMap PangoCairoFontMap;</programlisting>
+<para>
+<link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> is an interface exported by font maps for
+use with Cairo. The actual type of the font map will depend
+on the particular font technology Cairo was compiled to use.</para>
+<para>
+</para><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-font-map-get-default" role="function" condition="since:1.10">
+<title>pango_cairo_font_map_get_default ()</title>
+<indexterm zone="pango-cairo-font-map-get-default" role="1.10"><primary sortas="pango_cairo_font_map_get_default">pango_cairo_font_map_get_default</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_cairo_font_map_get_default    (void);</programlisting>
+<para>
+Gets a default <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> to use with Cairo.
+</para>
+<para>
+Note that the type of the returned object will depend
+on the particular font backend Cairo was compiled to use;
+You generally should only use the <link linkend="PangoFontMap"><type>PangoFontMap</type></link> and
+<link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> interfaces on the returned object.
+</para>
+<para>
+The default Cairo fontmap can be changed by using
+<link linkend="pango-cairo-font-map-set-default"><function>pango_cairo_font_map_set_default()</function></link>.  This can be used to
+change the Cairo font backend that the default fontmap
+uses for example.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the default Cairo fontmap for Pango. This
+ object is owned by Pango and must not be freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-font-map-set-default" role="function" condition="since:1.22">
+<title>pango_cairo_font_map_set_default ()</title>
+<indexterm zone="pango-cairo-font-map-set-default" role="1.22"><primary sortas="pango_cairo_font_map_set_default">pango_cairo_font_map_set_default</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_font_map_set_default    (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);</programlisting>
+<para>
+Sets a default <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> to use with Cairo.
+</para>
+<para>
+This can be used to change the Cairo font backend that the
+default fontmap uses for example.  The old default font map
+is unreffed and the new font map referenced.
+</para>
+<para>
+A value of <link linkend="NULL--CAPS"><literal>NULL</literal></link> for <parameter>fontmap</parameter> will cause the current default
+font map to be released and a new default font
+map to be created on demand, using <link linkend="pango-cairo-font-map-new"><function>pango_cairo_font_map_new()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> The new default font map, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-cairo-font-map-new" role="function" condition="since:1.10">
+<title>pango_cairo_font_map_new ()</title>
+<indexterm zone="pango-cairo-font-map-new" role="1.10"><primary sortas="pango_cairo_font_map_new">pango_cairo_font_map_new</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_cairo_font_map_new            (void);</programlisting>
+<para>
+Creates a new <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> object; a fontmap is used
+to cache information about available fonts, and holds
+certain global parameters such as the resolution.
+In most cases, you can use <link linkend="pango-cairo-font-map-get-default"><function>pango_cairo_font_map_get_default()</function></link>
+instead.
+</para>
+<para>
+Note that the type of the returned object will depend
+on the particular font backend Cairo was compiled to use;
+You generally should only use the <link linkend="PangoFontMap"><type>PangoFontMap</type></link> and
+<link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> interfaces on the returned object.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontMap"><type>PangoFontMap</type></link>, which should
+              be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-font-map-new-for-font-type" role="function" condition="since:1.18">
+<title>pango_cairo_font_map_new_for_font_type ()</title>
+<indexterm zone="pango-cairo-font-map-new-for-font-type" role="1.18"><primary sortas="pango_cairo_font_map_new_for_font_type">pango_cairo_font_map_new_for_font_type</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_cairo_font_map_new_for_font_type
+                                                        (<link linkend="cairo-font-type-t">cairo_font_type_t</link> fonttype);</programlisting>
+<para>
+Creates a new <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link> object of the type suitable
+to be used with cairo font backend of type <parameter>fonttype</parameter>.
+</para>
+<para>
+In most cases one should simply use @<link linkend="pango-cairo-font-map-new"><function>pango_cairo_font_map_new()</function></link>,
+or in fact in most of those cases, just use
+@<link linkend="pango-cairo-font-map-get-default"><function>pango_cairo_font_map_get_default()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fonttype</parameter>&#160;:</term>
+<listitem><simpara> desired <link linkend="cairo-font-type-t"><type>cairo_font_type_t</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontMap"><type>PangoFontMap</type></link> of suitable type
+              which should be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>,
+              or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the requested cairo font backend is
+              not supported / compiled in.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-cairo-font-map-get-font-type" role="function" condition="since:1.18">
+<title>pango_cairo_font_map_get_font_type ()</title>
+<indexterm zone="pango-cairo-font-map-get-font-type" role="1.18"><primary sortas="pango_cairo_font_map_get_font_type">pango_cairo_font_map_get_font_type</primary></indexterm><programlisting><link linkend="cairo-font-type-t">cairo_font_type_t</link>   pango_cairo_font_map_get_font_type  (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);</programlisting>
+<para>
+Gets the type of Cairo font backend that <parameter>fontmap</parameter> uses.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="cairo-font-type-t"><type>cairo_font_type_t</type></link> cairo font backend type
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-cairo-font-map-set-resolution" role="function" condition="since:1.10">
+<title>pango_cairo_font_map_set_resolution ()</title>
+<indexterm zone="pango-cairo-font-map-set-resolution" role="1.10"><primary sortas="pango_cairo_font_map_set_resolution">pango_cairo_font_map_set_resolution</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_font_map_set_resolution (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap,
+                                                         <link linkend="double">double</link> dpi);</programlisting>
+<para>
+Sets the resolution for the fontmap. This is a scale factor between
+points specified in a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> and Cairo units. The
+default value is 96, meaning that a 10 point font will be 13
+units high. (10 * 96. / 72. = 13.3).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dpi</parameter>&#160;:</term>
+<listitem><simpara> the resolution in "dots per inch". (Physical inches aren't actually
+  involved; the terminology is conventional.)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-font-map-get-resolution" role="function" condition="since:1.10">
+<title>pango_cairo_font_map_get_resolution ()</title>
+<indexterm zone="pango-cairo-font-map-get-resolution" role="1.10"><primary sortas="pango_cairo_font_map_get_resolution">pango_cairo_font_map_get_resolution</primary></indexterm><programlisting><link linkend="double">double</link>              pango_cairo_font_map_get_resolution (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);</programlisting>
+<para>
+Gets the resolution for the fontmap. See <link linkend="pango-cairo-font-map-set-resolution"><function>pango_cairo_font_map_set_resolution()</function></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the resolution in "dots per inch"
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-font-map-create-context" role="function" condition="deprecated:1.22: Use pango_font_map_create_context() instead.|since:1.10">
+<title>pango_cairo_font_map_create_context ()</title>
+<indexterm zone="pango-cairo-font-map-create-context" role="deprecated"><primary sortas="pango_cairo_font_map_create_context">pango_cairo_font_map_create_context</primary></indexterm><indexterm zone="pango-cairo-font-map-create-context" role="1.10"><primary sortas="pango_cairo_font_map_create_context">pango_cairo_font_map_create_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_cairo_font_map_create_context (<link linkend="PangoCairoFontMap">PangoCairoFontMap</link> *fontmap);</programlisting>
+<warning><para><literal>pango_cairo_font_map_create_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Create a <link linkend="PangoContext"><type>PangoContext</type></link> for the given fontmap.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created context; free with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-font-get-scaled-font" role="function" condition="since:1.18">
+<title>pango_cairo_font_get_scaled_font ()</title>
+<indexterm zone="pango-cairo-font-get-scaled-font" role="1.18"><primary sortas="pango_cairo_font_get_scaled_font">pango_cairo_font_get_scaled_font</primary></indexterm><programlisting><link linkend="cairo-scaled-font-t">cairo_scaled_font_t</link> * pango_cairo_font_get_scaled_font  (<link linkend="PangoCairoFont">PangoCairoFont</link> *font);</programlisting>
+<para>
+Gets the <link linkend="cairo-scaled-font-t"><type>cairo_scaled_font_t</type></link> used by <parameter>font</parameter>.
+The scaled font can be referenced and kept using
+<link linkend="cairo-scaled-font-reference"><function>cairo_scaled_font_reference()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> from a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="cairo-scaled-font-t"><type>cairo_scaled_font_t</type></link> used by <parameter>font</parameter>,
+              or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>font</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-cairo-context-set-resolution" role="function" condition="since:1.10">
+<title>pango_cairo_context_set_resolution ()</title>
+<indexterm zone="pango-cairo-context-set-resolution" role="1.10"><primary sortas="pango_cairo_context_set_resolution">pango_cairo_context_set_resolution</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_context_set_resolution  (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="double">double</link> dpi);</programlisting>
+<para>
+Sets the resolution for the context. This is a scale factor between
+points specified in a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> and Cairo units. The
+default value is 96, meaning that a 10 point font will be 13
+units high. (10 * 96. / 72. = 13.3).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dpi</parameter>&#160;:</term>
+<listitem><simpara> the resolution in "dots per inch". (Physical inches aren't actually
+  involved; the terminology is conventional.) A 0 or negative value
+  means to use the resolution from the font map.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-context-get-resolution" role="function" condition="since:1.10">
+<title>pango_cairo_context_get_resolution ()</title>
+<indexterm zone="pango-cairo-context-get-resolution" role="1.10"><primary sortas="pango_cairo_context_get_resolution">pango_cairo_context_get_resolution</primary></indexterm><programlisting><link linkend="double">double</link>              pango_cairo_context_get_resolution  (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Gets the resolution for the context. See <link linkend="pango-cairo-context-set-resolution"><function>pango_cairo_context_set_resolution()</function></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the resolution in "dots per inch". A negative value will
+ be returned if no resolution has previously been set.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-context-set-font-options" role="function" condition="since:1.10">
+<title>pango_cairo_context_set_font_options ()</title>
+<indexterm zone="pango-cairo-context-set-font-options" role="1.10"><primary sortas="pango_cairo_context_set_font_options">pango_cairo_context_set_font_options</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_context_set_font_options
+                                                        (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         const <link linkend="cairo-font-options-t">cairo_font_options_t</link> *options);</programlisting>
+<para>
+Sets the font options used when rendering text with this context.
+These options override any options that <link linkend="pango-cairo-update-context"><function>pango_cairo_update_context()</function></link>
+derives from the target surface.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>options</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="cairo-font-options-t"><type>cairo_font_options_t</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to unset any previously set
+          options. A copy is made.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-context-get-font-options" role="function" condition="since:1.10">
+<title>pango_cairo_context_get_font_options ()</title>
+<indexterm zone="pango-cairo-context-get-font-options" role="1.10"><primary sortas="pango_cairo_context_get_font_options">pango_cairo_context_get_font_options</primary></indexterm><programlisting>const <link linkend="cairo-font-options-t">cairo_font_options_t</link> * pango_cairo_context_get_font_options
+                                                        (<link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Retrieves any font rendering options previously set with
+<link linkend="pango-cairo-font-map-set-font-options"><function>pango_cairo_font_map_set_font_options()</function></link>. This function does not report options
+that are derived from the target surface by <link linkend="pango-cairo-update-context"><function>pango_cairo_update_context()</function></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the font options previously set on the context, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+  if no options have been set. This value is owned by the context
+  and must not be modified or freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="PangoCairoShapeRendererFunc" role="function">
+<title>PangoCairoShapeRendererFunc ()</title>
+<indexterm zone="PangoCairoShapeRendererFunc"><primary sortas="PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*PangoCairoShapeRendererFunc)      (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoAttrShape">PangoAttrShape</link> *attr,
+                                                         <link linkend="gboolean">gboolean</link> do_path,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+Function type for rendering attributes of type <link linkend="PANGO-ATTR-SHAPE--CAPS"><literal>PANGO_ATTR_SHAPE</literal></link>
+with Pango's Cairo renderer.
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara>a Cairo context with current point set to where the shape should
+     be rendered
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara>the <link linkend="PANGO-ATTR-SHAPE--CAPS"><literal>PANGO_ATTR_SHAPE</literal></link> to render
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>do_path</parameter>&#160;:</term>
+<listitem><simpara>whether only the shape path should be appended to current
+          path of <parameter>cr</parameter> and no filling/stroking done.  This will be set
+         to <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> when called from <link linkend="pango-cairo-layout-path"><function>pango_cairo_layout_path()</function></link> and
+         <link linkend="pango-cairo-layout-line-path"><function>pango_cairo_layout_line_path()</function></link> rendering functions.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara>user data passed to <link linkend="pango-cairo-context-set-shape-renderer"><function>pango_cairo_context_set_shape_renderer()</function></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-cairo-context-set-shape-renderer" role="function" condition="since:1.18">
+<title>pango_cairo_context_set_shape_renderer ()</title>
+<indexterm zone="pango-cairo-context-set-shape-renderer" role="1.18"><primary sortas="pango_cairo_context_set_shape_renderer">pango_cairo_context_set_shape_renderer</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_context_set_shape_renderer
+                                                        (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> dnotify);</programlisting>
+<para>
+Sets callback function for context to use for rendering attributes
+of type <link linkend="PANGO-ATTR-SHAPE--CAPS"><literal>PANGO_ATTR_SHAPE</literal></link>.  See <link linkend="PangoCairoShapeRendererFunc"><type>PangoCairoShapeRendererFunc</type></link> for
+details.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>func</parameter>&#160;:</term>
+<listitem><simpara> Callback function for rendering attributes of type
+<link linkend="PANGO-ATTR-SHAPE--CAPS"><literal>PANGO_ATTR_SHAPE</literal></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to disable shape rendering.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> User data that will be passed to <parameter>func</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dnotify</parameter>&#160;:</term>
+<listitem><simpara> Callback that will be called when the
+          context is freed to release <parameter>data</parameter>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-cairo-context-get-shape-renderer" role="function" condition="since:1.18">
+<title>pango_cairo_context_get_shape_renderer ()</title>
+<indexterm zone="pango-cairo-context-get-shape-renderer" role="1.18"><primary sortas="pango_cairo_context_get_shape_renderer">pango_cairo_context_get_shape_renderer</primary></indexterm><programlisting><link linkend="PangoCairoShapeRendererFunc">PangoCairoShapeRendererFunc</link>  pango_cairo_context_get_shape_renderer
+                                                        (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="gpointer">gpointer</link> *data);</programlisting>
+<para>
+Sets callback function for context to use for rendering attributes
+of type <link linkend="PANGO-ATTR-SHAPE--CAPS"><literal>PANGO_ATTR_SHAPE</literal></link>.  See <link linkend="PangoCairoShapeRendererFunc"><type>PangoCairoShapeRendererFunc</type></link> for
+details.
+</para>
+<para>
+Retrieves callback function and associated user data for rendering
+attributes of type <link linkend="PANGO-ATTR-SHAPE--CAPS"><literal>PANGO_ATTR_SHAPE</literal></link> as set by
+<link linkend="pango-cairo-context-set-shape-renderer"><function>pango_cairo_context_set_shape_renderer()</function></link>, if any.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> Pointer to <link linkend="gpointer"><type>gpointer</type></link> to return user data
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the shape rendering callback previously set on the context, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+  if no shape rendering callback have been set.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.18</para></refsect2>
+<refsect2 id="pango-cairo-create-context" role="function" condition="since:1.22">
+<title>pango_cairo_create_context ()</title>
+<indexterm zone="pango-cairo-create-context" role="1.22"><primary sortas="pango_cairo_create_context">pango_cairo_create_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_cairo_create_context          (<link linkend="cairo-t">cairo_t</link> *cr);</programlisting>
+<para>
+Creates a context object set up to match the current transformation
+and target surface of the Cairo context.  This context can then be
+used to create a layout using <link linkend="pango-layout-new"><function>pango_layout_new()</function></link>.
+</para>
+<para>
+This function is a convenience function that creates a context using
+the default font map, then updates it to <parameter>cr</parameter>.  If you just need to
+create a layout for use with <parameter>cr</parameter> and do not need to access <link linkend="PangoContext"><type>PangoContext</type></link>
+directly, you can use <link linkend="pango-cairo-create-layout"><function>pango_cairo_create_layout()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created <link linkend="PangoContext"><type>PangoContext</type></link>. Free with
+  <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-cairo-update-context" role="function" condition="since:1.10">
+<title>pango_cairo_update_context ()</title>
+<indexterm zone="pango-cairo-update-context" role="1.10"><primary sortas="pango_cairo_update_context">pango_cairo_update_context</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_update_context          (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoContext">PangoContext</link> *context);</programlisting>
+<para>
+Updates a <link linkend="PangoContext"><type>PangoContext</type></link> previously created for use with Cairo to
+match the current transformation and target surface of a Cairo
+context. If any layouts have been created for the context,
+it's necessary to call <link linkend="pango-layout-context-changed"><function>pango_layout_context_changed()</function></link> on those
+layouts.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>, from a pangocairo font map
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-create-layout" role="function" condition="since:1.10">
+<title>pango_cairo_create_layout ()</title>
+<indexterm zone="pango-cairo-create-layout" role="1.10"><primary sortas="pango_cairo_create_layout">pango_cairo_create_layout</primary></indexterm><programlisting><link linkend="PangoLayout">PangoLayout</link> *       pango_cairo_create_layout           (<link linkend="cairo-t">cairo_t</link> *cr);</programlisting>
+<para>
+Creates a layout object set up to match the current transformation
+and target surface of the Cairo context.  This layout can then be
+used for text measurement with functions like
+<link linkend="pango-layout-get-size"><function>pango_layout_get_size()</function></link> or drawing with functions like
+<link linkend="pango-cairo-show-layout"><function>pango_cairo_show_layout()</function></link>. If you change the transformation
+or target surface for <parameter>cr</parameter>, you need to call <link linkend="pango-cairo-update-layout"><function>pango_cairo_update_layout()</function></link>
+</para>
+<para>
+This function is the most convenient way to use Cairo with Pango,
+however it is slightly inefficient since it creates a separate
+<link linkend="PangoContext"><type>PangoContext</type></link> object for each layout. This might matter in an
+application that was laying out large amounts of text.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created <link linkend="PangoLayout"><type>PangoLayout</type></link>. Free with
+  <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-update-layout" role="function" condition="since:1.10">
+<title>pango_cairo_update_layout ()</title>
+<indexterm zone="pango-cairo-update-layout" role="1.10"><primary sortas="pango_cairo_update_layout">pango_cairo_update_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_update_layout           (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Updates the private <link linkend="PangoContext"><type>PangoContext</type></link> of a <link linkend="PangoLayout"><type>PangoLayout</type></link> created with
+<link linkend="pango-cairo-create-layout"><function>pango_cairo_create_layout()</function></link> to match the current transformation
+and target surface of a Cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayout"><type>PangoLayout</type></link>, from <link linkend="pango-cairo-create-layout"><function>pango_cairo_create_layout()</function></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-show-glyph-string" role="function" condition="since:1.10">
+<title>pango_cairo_show_glyph_string ()</title>
+<indexterm zone="pango-cairo-show-glyph-string" role="1.10"><primary sortas="pango_cairo_show_glyph_string">pango_cairo_show_glyph_string</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_show_glyph_string       (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);</programlisting>
+<para>
+Draws the glyphs in <parameter>glyphs</parameter> in the specified cairo context.
+The origin of the glyphs (the left edge of the baseline) will
+be drawn at the current point of the cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> from a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-show-glyph-item" role="function" condition="since:1.22">
+<title>pango_cairo_show_glyph_item ()</title>
+<indexterm zone="pango-cairo-show-glyph-item" role="1.22"><primary sortas="pango_cairo_show_glyph_item">pango_cairo_show_glyph_item</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_show_glyph_item         (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="PangoGlyphItem">PangoGlyphItem</link> *glyph_item);</programlisting>
+<para>
+Draws the glyphs in <parameter>glyph_item</parameter> in the specified cairo context,
+embedding the text associated with the glyphs in the output if the
+output format supports it (PDF for example), otherwise it acts
+similar to <link linkend="pango-cairo-show-glyph-string"><function>pango_cairo_show_glyph_string()</function></link>.
+</para>
+<para>
+The origin of the glyphs (the left edge of the baseline) will
+be drawn at the current point of the cairo context.
+</para>
+<para>
+Note that <parameter>text</parameter> is the start of the text for layout, which is then
+indexed by <literal><parameter>glyph_item->item->offset</parameter></literal>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> the UTF-8 text that <parameter>glyph_item</parameter> refers to
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph_item</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphItem"><type>PangoGlyphItem</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-cairo-show-layout-line" role="function" condition="since:1.10">
+<title>pango_cairo_show_layout_line ()</title>
+<indexterm zone="pango-cairo-show-layout-line" role="1.10"><primary sortas="pango_cairo_show_layout_line">pango_cairo_show_layout_line</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_show_layout_line        (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);</programlisting>
+<para>
+Draws a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> in the specified cairo context.
+The origin of the glyphs (the left edge of the line) will
+be drawn at the current point of the cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-show-layout" role="function" condition="since:1.10">
+<title>pango_cairo_show_layout ()</title>
+<indexterm zone="pango-cairo-show-layout" role="1.10"><primary sortas="pango_cairo_show_layout">pango_cairo_show_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_show_layout             (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Draws a <link linkend="PangoLayout"><type>PangoLayout</type></link> in the specified cairo context.
+The top-left corner of the <link linkend="PangoLayout"><type>PangoLayout</type></link> will be drawn
+at the current point of the cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a Pango layout
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-show-error-underline" role="function" condition="since:1.14">
+<title>pango_cairo_show_error_underline ()</title>
+<indexterm zone="pango-cairo-show-error-underline" role="1.14"><primary sortas="pango_cairo_show_error_underline">pango_cairo_show_error_underline</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_show_error_underline    (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="double">double</link> x,
+                                                         <link linkend="double">double</link> y,
+                                                         <link linkend="double">double</link> width,
+                                                         <link linkend="double">double</link> height);</programlisting>
+<para>
+Draw a squiggly line in the specified cairo context that approximately
+covers the given rectangle in the style of an underline used to indicate a
+spelling error.  (The width of the underline is rounded to an integer
+number of up/down segments and the resulting rectangle is centered in the
+original rectangle)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> The X coordinate of one corner of the rectangle
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> The Y coordinate of one corner of the rectangle
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> Non-negative width of the rectangle
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> Non-negative height of the rectangle
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.14</para></refsect2>
+<refsect2 id="pango-cairo-glyph-string-path" role="function" condition="since:1.10">
+<title>pango_cairo_glyph_string_path ()</title>
+<indexterm zone="pango-cairo-glyph-string-path" role="1.10"><primary sortas="pango_cairo_glyph_string_path">pango_cairo_glyph_string_path</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_glyph_string_path       (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);</programlisting>
+<para>
+Adds the glyphs in <parameter>glyphs</parameter> to the current path in the specified
+cairo context. The origin of the glyphs (the left edge of the baseline)
+will be at the current point of the cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> from a <link linkend="PangoCairoFontMap"><type>PangoCairoFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-layout-line-path" role="function" condition="since:1.10">
+<title>pango_cairo_layout_line_path ()</title>
+<indexterm zone="pango-cairo-layout-line-path" role="1.10"><primary sortas="pango_cairo_layout_line_path">pango_cairo_layout_line_path</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_layout_line_path        (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line);</programlisting>
+<para>
+Adds the text in <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> to the current path in the
+specified cairo context.  The origin of the glyphs (the left edge
+of the line) will be at the current point of the cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-layout-path" role="function" condition="since:1.10">
+<title>pango_cairo_layout_path ()</title>
+<indexterm zone="pango-cairo-layout-path" role="1.10"><primary sortas="pango_cairo_layout_path">pango_cairo_layout_path</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_layout_path             (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout);</programlisting>
+<para>
+Adds the text in a <link linkend="PangoLayout"><type>PangoLayout</type></link> to the current path in the
+specified cairo context.  The top-left corner of the <link linkend="PangoLayout"><type>PangoLayout</type></link>
+will be at the current point of the cairo context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara> a Pango layout
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-cairo-error-underline-path" role="function" condition="since:1.14">
+<title>pango_cairo_error_underline_path ()</title>
+<indexterm zone="pango-cairo-error-underline-path" role="1.14"><primary sortas="pango_cairo_error_underline_path">pango_cairo_error_underline_path</primary></indexterm><programlisting><link linkend="void">void</link>                pango_cairo_error_underline_path    (<link linkend="cairo-t">cairo_t</link> *cr,
+                                                         <link linkend="double">double</link> x,
+                                                         <link linkend="double">double</link> y,
+                                                         <link linkend="double">double</link> width,
+                                                         <link linkend="double">double</link> height);</programlisting>
+<para>
+Add a squiggly line to the current path in the specified cairo context that
+approximately covers the given rectangle in the style of an underline used
+to indicate a spelling error.  (The width of the underline is rounded to an
+integer number of up/down segments and the resulting rectangle is centered
+in the original rectangle)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cr</parameter>&#160;:</term>
+<listitem><simpara> a Cairo context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara> The X coordinate of one corner of the rectangle
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara> The Y coordinate of one corner of the rectangle
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>width</parameter>&#160;:</term>
+<listitem><simpara> Non-negative width of the rectangle
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>height</parameter>&#160;:</term>
+<listitem><simpara> Non-negative height of the rectangle
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.14</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pangofc-decoder.xml b/docs/xml/pangofc-decoder.xml
new file mode 100755 (executable)
index 0000000..ef41a09
--- /dev/null
@@ -0,0 +1,153 @@
+<refentry id="PangoFcDecoder">
+<refmeta>
+<refentrytitle role="top_of_page" id="PangoFcDecoder.top_of_page">PangoFcDecoder</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>PangoFcDecoder</refname>
+<refpurpose>Custom font encoding handling</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="PangoFcDecoder.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoFcDecoder-struct">PangoFcDecoder</link>;
+                    <link linkend="PangoFcDecoderClass">PangoFcDecoderClass</link>;
+<link linkend="FcCharSet">FcCharSet</link> *         <link linkend="pango-fc-decoder-get-charset">pango_fc_decoder_get_charset</link>        (<link linkend="PangoFcDecoder">PangoFcDecoder</link> *decoder,
+                                                         <link linkend="PangoFcFont">PangoFcFont</link> *fcfont);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-fc-decoder-get-glyph">pango_fc_decoder_get_glyph</link>          (<link linkend="PangoFcDecoder">PangoFcDecoder</link> *decoder,
+                                                         <link linkend="PangoFcFont">PangoFcFont</link> *fcfont,
+                                                         <link linkend="guint32">guint32</link> wc);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="PangoFcDecoder.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----PangoFcDecoder
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="PangoFcDecoder.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+PangoFcDecoder represents a decoder that an application provides
+for handling a font that is encoded in a custom way.
+</para>
+</refsect1>
+
+<refsect1 id="PangoFcDecoder.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoFcDecoder-struct" role="struct">
+<title>PangoFcDecoder</title>
+<indexterm zone="PangoFcDecoder-struct" role="1.6"><primary sortas="PangoFcDecoder">PangoFcDecoder</primary></indexterm><programlisting>typedef struct _PangoFcDecoder PangoFcDecoder;</programlisting>
+<para>
+<link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link> is a virtual base class that implementations will
+inherit from.  It's the interface that is used to define a custom
+encoding for a font.  These objects are created in your code from a
+function callback that was originally registered with
+<link linkend="pango-fc-font-map-add-decoder-find-func"><function>pango_fc_font_map_add_decoder_find_func()</function></link>.  Pango requires
+information about the supported charset for a font as well as the
+individual character to glyph conversions.  Pango gets that
+information via the <link linkend="get-charset"><type>get_charset</type></link> and <link linkend="get-glyph"><type>get_glyph</type></link> callbacks into your
+object implementation.</para>
+<para>
+</para><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="PangoFcDecoderClass" role="struct" condition="since:1.6">
+<title>PangoFcDecoderClass</title>
+<indexterm zone="PangoFcDecoderClass" role="1.6"><primary sortas="PangoFcDecoderClass">PangoFcDecoderClass</primary></indexterm><programlisting>typedef struct {
+  FcCharSet  *(*get_charset) (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont);
+  PangoGlyph  (*get_glyph)   (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont,
+                             guint32         wc);
+} PangoFcDecoderClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link>.</para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>get_charset</structfield>&#160;()</term>
+<listitem><simpara> This returns an <link linkend="FcCharset"><type>FcCharset</type></link> given a <link linkend="PangoFcFont"><type>PangoFcFont</type></link> that
+ includes a list of supported characters in the font.  The
+ <link linkend="FcCharSet"><type>FcCharSet</type></link> that is returned should be an internal reference to your
+ code.  Pango will not free this structure.  It is important that
+ you make this callback fast because this callback is called
+ separately for each character to determine Unicode coverage.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_glyph</structfield>&#160;()</term>
+<listitem><simpara> This returns a single <link linkend="PangoGlyph"><type>PangoGlyph</type></link> for a given Unicode
+ code point.
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-fc-decoder-get-charset" role="function" condition="since:1.6">
+<title>pango_fc_decoder_get_charset ()</title>
+<indexterm zone="pango-fc-decoder-get-charset" role="1.6"><primary sortas="pango_fc_decoder_get_charset">pango_fc_decoder_get_charset</primary></indexterm><programlisting><link linkend="FcCharSet">FcCharSet</link> *         pango_fc_decoder_get_charset        (<link linkend="PangoFcDecoder">PangoFcDecoder</link> *decoder,
+                                                         <link linkend="PangoFcFont">PangoFcFont</link> *fcfont);</programlisting>
+<para>
+Generates an <link linkend="FcCharSet"><type>FcCharSet</type></link> of supported characters for the fcfont
+given.  The returned <link linkend="FcCharSet"><type>FcCharSet</type></link> will be a reference to an
+internal value stored by the <link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link> and must not
+be modified or freed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>decoder</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>fcfont</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoFcFont"><type>PangoFcFont</type></link> to query.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="FcCharset"><type>FcCharset</type></link> for <parameter>fcfont</parameter>; must not be modified
+  or freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-fc-decoder-get-glyph" role="function" condition="since:1.6">
+<title>pango_fc_decoder_get_glyph ()</title>
+<indexterm zone="pango-fc-decoder-get-glyph" role="1.6"><primary sortas="pango_fc_decoder_get_glyph">pango_fc_decoder_get_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_fc_decoder_get_glyph          (<link linkend="PangoFcDecoder">PangoFcDecoder</link> *decoder,
+                                                         <link linkend="PangoFcFont">PangoFcFont</link> *fcfont,
+                                                         <link linkend="guint32">guint32</link> wc);</programlisting>
+<para>
+Generates a <link linkend="PangoGlyph"><type>PangoGlyph</type></link> for the given Unicode point using the
+custom decoder. For complex scripts where there can be multiple
+glyphs for a single character, the decoder will return whatever
+glyph is most convenient for it. (Usually whatever glyph is directly
+in the fonts character map table.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>decoder</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>fcfont</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link> to query.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> the Unicode code point to convert to a single <link linkend="PangoGlyph"><type>PangoGlyph</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the glyph index, or 0 if the glyph isn't
+covered by the font.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/pangofc-font.xml b/docs/xml/pangofc-font.xml
new file mode 100755 (executable)
index 0000000..904c721
--- /dev/null
@@ -0,0 +1,290 @@
+<refentry id="PangoFcFont">
+<refmeta>
+<refentrytitle role="top_of_page" id="PangoFcFont.top_of_page">PangoFcFont</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>PangoFcFont</refname>
+<refpurpose>Base font class for Fontconfig-based backends</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="PangoFcFont.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoFcFont-struct">PangoFcFont</link>;
+                    <link linkend="PangoFcFontClass">PangoFcFontClass</link>;
+#define             <link linkend="PANGO-RENDER-TYPE-FC--CAPS">PANGO_RENDER_TYPE_FC</link>
+<link linkend="FT-Face">FT_Face</link>             <link linkend="pango-fc-font-lock-face">pango_fc_font_lock_face</link>             (<link linkend="PangoFcFont">PangoFcFont</link> *font);
+<link linkend="void">void</link>                <link linkend="pango-fc-font-unlock-face">pango_fc_font_unlock_face</link>           (<link linkend="PangoFcFont">PangoFcFont</link> *font);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-fc-font-has-char">pango_fc_font_has_char</link>              (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="guint">guint</link>               <link linkend="pango-fc-font-get-glyph">pango_fc_font_get_glyph</link>             (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-fc-font-get-unknown-glyph">pango_fc_font_get_unknown_glyph</link>     (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="void">void</link>                <link linkend="pango-fc-font-kern-glyphs">pango_fc_font_kern_glyphs</link>           (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="PangoFcFont.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoFont">PangoFont</link>
+         +----PangoFcFont
+               +----<link linkend="PangoXftFont">PangoXftFont</link>
+</synopsis>
+</refsect1>
+
+
+
+
+
+<refsect1 id="PangoFcFont.properties" role="properties">
+<title role="properties.title">Properties</title>
+<synopsis>
+  &quot;<link linkend="PangoFcFont--fontmap">fontmap</link>&quot;                  <link linkend="PangoFcFontMap">PangoFcFontMap</link>*       : Read / Write
+  &quot;<link linkend="PangoFcFont--pattern">pattern</link>&quot;                  <link linkend="gpointer">gpointer</link>              : Read / Write / Construct Only
+</synopsis>
+</refsect1>
+
+
+
+<refsect1 id="PangoFcFont.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+<link linkend="PangoFcFont"><type>PangoFcFont</type></link> is a base class for font implementation using the
+Fontconfig and FreeType libraries. It is used in the
+<link linkend="pango-Xft-Fonts-and-Rendering">Xft</link> and
+<link linkend="pango-FreeType-Fonts-and-Rendering">FreeType</link>
+backends shipped with Pango, but can also be used when creating
+new backends. Any backend deriving from this base class will
+take advantage of the wide range of shapers implemented using
+FreeType that come with Pango.
+</para>
+</refsect1>
+
+<refsect1 id="PangoFcFont.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoFcFont-struct" role="struct">
+<title>PangoFcFont</title>
+<indexterm zone="PangoFcFont-struct"><primary sortas="PangoFcFont">PangoFcFont</primary></indexterm><programlisting>typedef struct _PangoFcFont PangoFcFont;</programlisting>
+<para>
+<link linkend="PangoFcFont"><type>PangoFcFont</type></link> is a base class for font implementations
+using the Fontconfig and FreeType libraries and is used in
+conjunction with <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link>. When deriving from this
+class, you need to implement all of its virtual functions
+other than <link linkend="shutdown"><function>shutdown()</function></link> along with the <link linkend="get-glyph-extents"><function>get_glyph_extents()</function></link>
+virtual function from <link linkend="PangoFont"><type>PangoFont</type></link>.</para>
+<para>
+</para></refsect2>
+<refsect2 id="PangoFcFontClass" role="struct">
+<title>PangoFcFontClass</title>
+<indexterm zone="PangoFcFontClass"><primary sortas="PangoFcFontClass">PangoFcFontClass</primary></indexterm><programlisting>typedef struct {
+  FT_Face    (*lock_face)         (PangoFcFont      *font);
+  void       (*unlock_face)       (PangoFcFont      *font);
+  gboolean   (*has_char)          (PangoFcFont      *font,
+                                  gunichar          wc);
+  guint      (*get_glyph)         (PangoFcFont      *font,
+                                  gunichar          wc);
+  PangoGlyph (*get_unknown_glyph) (PangoFcFont      *font,
+                                  gunichar          wc);
+  void       (*shutdown)          (PangoFcFont      *font);
+} PangoFcFontClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.</para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>lock_face</structfield>&#160;()</term>
+<listitem><simpara> Returns the FT_Face of the font and increases
+ the reference count for the face by one.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>unlock_face</structfield>&#160;()</term>
+<listitem><simpara> Decreases the reference count for the
+ FT_Face of the font by one. When the count is zero,
+ the <link linkend="PangoFcFont"><type>PangoFcFont</type></link> subclass is allowed to free the
+ FT_Face.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>has_char</structfield>&#160;()</term>
+<listitem><simpara> Return <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the the font contains a glyph
+  corresponding to the specified character.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_glyph</structfield>&#160;()</term>
+<listitem><simpara> Gets the glyph that corresponds to the given
+  Unicode character.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_unknown_glyph</structfield>&#160;()</term>
+<listitem><simpara> Gets the glyph that should be used to
+  display an unknown-glyph indication for the specified
+  Unicode character.
+  May be <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>shutdown</structfield>&#160;()</term>
+<listitem><simpara> Performs any font-specific shutdown code that
+  needs to be done when pango_fc_font_map_shutdown is called.
+  May be <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-RENDER-TYPE-FC--CAPS" role="macro">
+<title>PANGO_RENDER_TYPE_FC</title>
+<indexterm zone="PANGO-RENDER-TYPE-FC--CAPS"><primary sortas="PANGO_RENDER_TYPE_FC">PANGO_RENDER_TYPE_FC</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_FC "PangoRenderFc"
+</programlisting>
+<para>
+A string constant used to identify shape engines that work
+with the fontconfig based backends. See the <parameter>engine_type</parameter> field
+of <link linkend="PangoEngineInfo"><type>PangoEngineInfo</type></link>.</para>
+<para>
+</para></refsect2>
+<refsect2 id="pango-fc-font-lock-face" role="function" condition="since:1.4">
+<title>pango_fc_font_lock_face ()</title>
+<indexterm zone="pango-fc-font-lock-face" role="1.4"><primary sortas="pango_fc_font_lock_face">pango_fc_font_lock_face</primary></indexterm><programlisting><link linkend="FT-Face">FT_Face</link>             pango_fc_font_lock_face             (<link linkend="PangoFcFont">PangoFcFont</link> *font);</programlisting>
+<para>
+Gets the FreeType <type>FT_Face</type> associated with a font,
+This face will be kept around until you call
+<link linkend="pango-fc-font-unlock-face"><function>pango_fc_font_unlock_face()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the FreeType <type>FT_Face</type> associated with <parameter>font</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-unlock-face" role="function" condition="since:1.4">
+<title>pango_fc_font_unlock_face ()</title>
+<indexterm zone="pango-fc-font-unlock-face" role="1.4"><primary sortas="pango_fc_font_unlock_face">pango_fc_font_unlock_face</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fc_font_unlock_face           (<link linkend="PangoFcFont">PangoFcFont</link> *font);</programlisting>
+<para>
+Releases a font previously obtained with
+<link linkend="pango-fc-font-lock-face"><function>pango_fc_font_lock_face()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-has-char" role="function" condition="since:1.4">
+<title>pango_fc_font_has_char ()</title>
+<indexterm zone="pango-fc-font-has-char" role="1.4"><primary sortas="pango_fc_font_has_char">pango_fc_font_has_char</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_fc_font_has_char              (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<para>
+Determines whether <parameter>font</parameter> has a glyph for the codepoint <parameter>wc</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> Unicode codepoint to look up
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>font</parameter> has the requested codepoint.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-get-glyph" role="function" condition="since:1.4">
+<title>pango_fc_font_get_glyph ()</title>
+<indexterm zone="pango-fc-font-get-glyph" role="1.4"><primary sortas="pango_fc_font_get_glyph">pango_fc_font_get_glyph</primary></indexterm><programlisting><link linkend="guint">guint</link>               pango_fc_font_get_glyph             (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<para>
+Gets the glyph index for a given Unicode character
+for <parameter>font</parameter>. If you only want to determine
+whether the font has the glyph, use <link linkend="pango-fc-font-has-char"><function>pango_fc_font_has_char()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> Unicode character to look up
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the glyph index, or 0, if the Unicode
+  character doesn't exist in the font.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-get-unknown-glyph" role="function" condition="deprecated:|since:1.4">
+<title>pango_fc_font_get_unknown_glyph ()</title>
+<indexterm zone="pango-fc-font-get-unknown-glyph" role="deprecated"><primary sortas="pango_fc_font_get_unknown_glyph">pango_fc_font_get_unknown_glyph</primary></indexterm><indexterm zone="pango-fc-font-get-unknown-glyph" role="1.4"><primary sortas="pango_fc_font_get_unknown_glyph">pango_fc_font_get_unknown_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_fc_font_get_unknown_glyph     (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<warning><para><literal>pango_fc_font_get_unknown_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns the index of a glyph suitable for drawing <parameter>wc</parameter> as an
+unknown character.
+</para>
+<para>
+Use <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS"><function>PANGO_GET_UNKNOWN_GLYPH()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> the Unicode character for which a glyph is needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a glyph index into <parameter>font</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-kern-glyphs" role="function" condition="since:1.4">
+<title>pango_fc_font_kern_glyphs ()</title>
+<indexterm zone="pango-fc-font-kern-glyphs" role="1.4"><primary sortas="pango_fc_font_kern_glyphs">pango_fc_font_kern_glyphs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fc_font_kern_glyphs           (<link linkend="PangoFcFont">PangoFcFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs);</programlisting>
+<para>
+Adjust each adjacent pair of glyphs in <parameter>glyphs</parameter> according to
+kerning information in <parameter>font</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFont"><type>PangoFcFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+
+</refsect1>
+<refsect1 id="PangoFcFont.property-details" role="property_details">
+<title role="property_details.title">Property Details</title>
+<refsect2 id="PangoFcFont--fontmap" role="property"><title>The <literal>&quot;fontmap&quot;</literal> property</title>
+<indexterm zone="PangoFcFont--fontmap"><primary sortas="PangoFcFont:fontmap">PangoFcFont:fontmap</primary></indexterm><programlisting>  &quot;fontmap&quot;                  <link linkend="PangoFcFontMap">PangoFcFontMap</link>*       : Read / Write</programlisting>
+<para>The PangoFc font map this font is associated with (Since: 1.26).</para></refsect2>
+<refsect2 id="PangoFcFont--pattern" role="property"><title>The <literal>&quot;pattern&quot;</literal> property</title>
+<indexterm zone="PangoFcFont--pattern"><primary sortas="PangoFcFont:pattern">PangoFcFont:pattern</primary></indexterm><programlisting>  &quot;pattern&quot;                  <link linkend="gpointer">gpointer</link>              : Read / Write / Construct Only</programlisting>
+<para>The fontconfig pattern for this font.</para></refsect2>
+</refsect1>
+
+
+
+<refsect1 id="PangoFcFont.see-also">
+<title>See Also</title>
+<para>
+<variablelist>
+<varlistentry>
+<term><link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link></term>
+<listitem><para>The base class for font maps; creating a new
+Fontconfig-based backend involves deriving from both
+<link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> and <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.
+.</para></listitem>
+</varlistentry>
+</variablelist>
+</para>
+</refsect1>
+
+</refentry>
diff --git a/docs/xml/pangofc-fontmap.xml b/docs/xml/pangofc-fontmap.xml
new file mode 100755 (executable)
index 0000000..7a490e7
--- /dev/null
@@ -0,0 +1,571 @@
+<refentry id="PangoFcFontMap">
+<refmeta>
+<refentrytitle role="top_of_page" id="PangoFcFontMap.top_of_page">PangoFcFontMap</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>PangoFcFontMap</refname>
+<refpurpose>Base fontmap class for Fontconfig-based backends</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="PangoFcFontMap.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoFcFontMap-struct">PangoFcFontMap</link>;
+                    <link linkend="PangoFcFontMapClass">PangoFcFontMapClass</link>;
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-fc-font-map-create-context">pango_fc_font_map_create_context</link>    (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap);
+<link linkend="PangoFcDecoder">PangoFcDecoder</link> *    (<link linkend="PangoFcDecoderFindFunc">*PangoFcDecoderFindFunc</link>)           (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gpointer">gpointer</link> user_data);
+<link linkend="void">void</link>                <link linkend="pango-fc-font-map-add-decoder-find-func">pango_fc_font_map_add_decoder_find_func</link>
+                                                        (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap,
+                                                         <link linkend="PangoFcDecoderFindFunc">PangoFcDecoderFindFunc</link> findfunc,
+                                                         <link linkend="gpointer">gpointer</link> user_data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> dnotify);
+<link linkend="PangoFcDecoder">PangoFcDecoder</link> *    <link linkend="pango-fc-font-map-find-decoder">pango_fc_font_map_find_decoder</link>      (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap,
+                                                         <link linkend="FcPattern">FcPattern</link> *pattern);
+<link linkend="void">void</link>                <link linkend="pango-fc-font-map-cache-clear">pango_fc_font_map_cache_clear</link>       (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap);
+<link linkend="void">void</link>                <link linkend="pango-fc-font-map-shutdown">pango_fc_font_map_shutdown</link>          (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-fc-font-description-from-pattern">pango_fc_font_description_from_pattern</link>
+                                                        (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gboolean">gboolean</link> include_size);
+#define             <link linkend="PANGO-FC-GRAVITY--CAPS">PANGO_FC_GRAVITY</link>
+#define             <link linkend="PANGO-FC-VERSION--CAPS">PANGO_FC_VERSION</link>
+#define             <link linkend="PANGO-FC-PRGNAME--CAPS">PANGO_FC_PRGNAME</link>
+
+
+                    <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link>;
+<link linkend="gpointer">gpointer</link>            <link linkend="pango-fc-fontset-key-get-context-key">pango_fc_fontset_key_get_context_key</link>
+                                                        (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);
+const <link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-fc-fontset-key-get-description">pango_fc_fontset_key_get_description</link>
+                                                        (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);
+<link linkend="PangoLanguage">PangoLanguage</link> *     <link linkend="pango-fc-fontset-key-get-language">pango_fc_fontset_key_get_language</link>   (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);
+const <link linkend="PangoMatrix">PangoMatrix</link> * <link linkend="pango-fc-fontset-key-get-matrix">pango_fc_fontset_key_get_matrix</link>     (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);
+<link linkend="double">double</link>              <link linkend="pango-fc-fontset-key-get-absolute-size">pango_fc_fontset_key_get_absolute_size</link>
+                                                        (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);
+<link linkend="double">double</link>              <link linkend="pango-fc-fontset-key-get-resolution">pango_fc_fontset_key_get_resolution</link> (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);
+                    <link linkend="PangoFcFontKey">PangoFcFontKey</link>;
+<link linkend="gpointer">gpointer</link>            <link linkend="pango-fc-font-key-get-context-key">pango_fc_font_key_get_context_key</link>   (const <link linkend="PangoFcFontKey">PangoFcFontKey</link> *key);
+const <link linkend="PangoMatrix">PangoMatrix</link> * <link linkend="pango-fc-font-key-get-matrix">pango_fc_font_key_get_matrix</link>        (const <link linkend="PangoFcFontKey">PangoFcFontKey</link> *key);
+const <link linkend="FcPattern">FcPattern</link> *   <link linkend="pango-fc-font-key-get-pattern">pango_fc_font_key_get_pattern</link>       (const <link linkend="PangoFcFontKey">PangoFcFontKey</link> *key);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="PangoFcFontMap.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoFontMap">PangoFontMap</link>
+         +----PangoFcFontMap
+               +----<link linkend="PangoFT2FontMap">PangoFT2FontMap</link>
+               +----<link linkend="PangoXftFontMap">PangoXftFontMap</link>
+</synopsis>
+</refsect1>
+
+
+
+
+
+
+
+
+<refsect1 id="PangoFcFontMap.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+PangoFcFontMap is a base class for font map implementations using the
+Fontconfig and FreeType libraries. It is used in the
+<link linkend="pango-Xft-Fonts-and-Rendering">Xft</link> and
+<link linkend="pango-FreeType-Fonts-and-Rendering">FreeType</link>
+backends shipped with Pango, but can also be used when creating
+new backends. Any backend deriving from this base class will
+take advantage of the wide range of shapers implemented using
+FreeType that come with Pango.
+</para>
+</refsect1>
+
+<refsect1 id="PangoFcFontMap.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoFcFontMap-struct" role="struct">
+<title>PangoFcFontMap</title>
+<indexterm zone="PangoFcFontMap-struct"><primary sortas="PangoFcFontMap">PangoFcFontMap</primary></indexterm><programlisting>typedef struct _PangoFcFontMap PangoFcFontMap;</programlisting>
+<para>
+<link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> is a base class for font map implementations
+using the Fontconfig and FreeType libraries. To create a new
+backend using Fontconfig and FreeType, you derive from this class
+and implement a <link linkend="new-font"><function>new_font()</function></link> virtual function that creates an
+instance deriving from <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.</para>
+<para>
+</para></refsect2>
+<refsect2 id="PangoFcFontMapClass" role="struct">
+<title>PangoFcFontMapClass</title>
+<indexterm zone="PangoFcFontMapClass"><primary sortas="PangoFcFontMapClass">PangoFcFontMapClass</primary></indexterm><programlisting>typedef struct {
+  /* Deprecated in favor of fontset_key_substitute */
+  void         (*default_substitute) (PangoFcFontMap   *fontmap,
+                                     FcPattern        *pattern);
+  /* Deprecated in favor of create_font */
+  PangoFcFont  *(*new_font)          (PangoFcFontMap  *fontmap,
+                                     FcPattern       *pattern);
+
+  double       (*get_resolution)     (PangoFcFontMap             *fcfontmap,
+                                     PangoContext               *context);
+
+  gconstpointer (*context_key_get)   (PangoFcFontMap             *fcfontmap,
+                                     PangoContext               *context);
+  gpointer     (*context_key_copy)   (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key);
+  void         (*context_key_free)   (PangoFcFontMap             *fcfontmap,
+                                     gpointer                    key);
+  guint32      (*context_key_hash)   (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key);
+  gboolean     (*context_key_equal)  (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key_a,
+                                     gconstpointer               key_b);
+
+  void         (*fontset_key_substitute)(PangoFcFontMap             *fontmap,
+                                     PangoFcFontsetKey          *fontsetkey,
+                                     FcPattern                  *pattern);
+  PangoFcFont  *(*create_font)       (PangoFcFontMap             *fontmap,
+                                     PangoFcFontKey             *fontkey);
+} PangoFcFontMapClass;
+</programlisting>
+<para>
+Class structure for <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link>.</para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>default_substitute</structfield>&#160;()</term>
+<listitem><simpara> Substitutes in default values for
+ unspecified fields in a <link linkend="FcPattern"><type>FcPattern</type></link>. This will be called
+ prior to creating a font for the pattern. May be <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+ Deprecated in favor of @<link linkend="font-key-substitute"><function>font_key_substitute()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>new_font</structfield>&#160;()</term>
+<listitem><simpara> Creates a new <link linkend="PangoFcFont"><type>PangoFcFont</type></link> for the specified
+ pattern of the appropriate type for this font map. The
+ <parameter>pattern</parameter> argument must be passed to the "pattern" property
+ of <link linkend="PangoFcFont"><type>PangoFcFont</type></link> when you call <link linkend="g-object-new"><function>g_object_new()</function></link>. Deprecated
+ in favor of @<link linkend="create-font"><function>create_font()</function></link>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>get_resolution</structfield>&#160;()</term>
+<listitem><simpara> Gets the resolution (the scale factor
+ between logical and absolute font sizes) that the backend
+ will use for a particular fontmap and context. <parameter>context</parameter>
+ may be null.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>context_key_get</structfield>&#160;()</term>
+<listitem><simpara> Gets an opaque key holding backend
+ specific options for the context that will affect
+ fonts created by <link linkend="create-font"><function>create_font()</function></link>. The result must point to
+ persistant storage owned by the fontmap. This key
+ is used to index hash tables used to look up fontsets
+ and fonts.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>context_key_copy</structfield>&#160;()</term>
+<listitem><simpara> Copies a context key. Pango uses this
+ to make a persistant copy of the value returned from
+ <parameter>context_key_get</parameter>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>context_key_free</structfield>&#160;()</term>
+<listitem><simpara> Frees a context key copied with
+ <parameter>context_key_copy</parameter>.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>context_key_hash</structfield>&#160;()</term>
+<listitem><simpara> Gets a hash value for a context key
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>context_key_equal</structfield>&#160;()</term>
+<listitem><simpara> Compares two context keys for equality.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>fontset_key_substitute</structfield>&#160;()</term>
+<listitem><simpara> Substitutes in default values for
+ unspecified fields in a <link linkend="FcPattern"><type>FcPattern</type></link>. This will be called
+ prior to creating a font for the pattern. May be <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+ (Since: 1.24)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>create_font</structfield>&#160;()</term>
+<listitem><simpara> Creates a new <link linkend="PangoFcFont"><type>PangoFcFont</type></link> for the specified
+ pattern of the appropriate type for this font map using
+ information from the font key that is passed in. The
+ <parameter>pattern</parameter> member of <parameter>font_key</parameter> can be retrieved using
+ <link linkend="pango-fc-font-key-get-pattern"><function>pango_fc_font_key_get_pattern()</function></link> and must be passed to
+ the "pattern" property of <link linkend="PangoFcFont"><type>PangoFcFont</type></link> when you call
+ <link linkend="g-object-new"><function>g_object_new()</function></link>.  If <link linkend="NULL--CAPS"><literal>NULL</literal></link>, <link linkend="new-font"><function>new_font()</function></link> is used.
+ (Since: 1.24)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-fc-font-map-create-context" role="function" condition="deprecated:1.22: Use pango_font_map_create_context() instead.|since:1.4">
+<title>pango_fc_font_map_create_context ()</title>
+<indexterm zone="pango-fc-font-map-create-context" role="deprecated"><primary sortas="pango_fc_font_map_create_context">pango_fc_font_map_create_context</primary></indexterm><indexterm zone="pango-fc-font-map-create-context" role="1.4"><primary sortas="pango_fc_font_map_create_context">pango_fc_font_map_create_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_fc_font_map_create_context    (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap);</programlisting>
+<warning><para><literal>pango_fc_font_map_create_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Creates a new context for this fontmap. This function is intended
+only for backend implementations deriving from <link linkend="PangoFcFontmap"><type>PangoFcFontmap</type></link>;
+it is possible that a backend will store additional information
+needed for correct operation on the <link linkend="PangoContext"><type>PangoContext</type></link> after calling
+this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fcfontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new <link linkend="PangoContext"><type>PangoContext</type></link>
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="PangoFcDecoderFindFunc" role="function">
+<title>PangoFcDecoderFindFunc ()</title>
+<indexterm zone="PangoFcDecoderFindFunc"><primary sortas="PangoFcDecoderFindFunc">PangoFcDecoderFindFunc</primary></indexterm><programlisting><link linkend="PangoFcDecoder">PangoFcDecoder</link> *    (*PangoFcDecoderFindFunc)           (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gpointer">gpointer</link> user_data);</programlisting>
+<para>
+Callback function passed to <link linkend="pango-fc-font-map-add-decoder-find-func"><function>pango_fc_font_map_add_decoder_find_func()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>pattern</parameter>&#160;:</term>
+<listitem><simpara> a fully resolved <link linkend="FcPattern"><type>FcPattern</type></link> specifying the font on the system
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&#160;:</term>
+<listitem><simpara> user data passed to <link linkend="pango-fc-font-map-add-decoder-find-func"><function>pango_fc_font_map_add_decoder_find_func()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new reference to a custom decoder for this pattern,
+ or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the default decoder handling should be used.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-fc-font-map-add-decoder-find-func" role="function" condition="since:1.6.">
+<title>pango_fc_font_map_add_decoder_find_func ()</title>
+<indexterm zone="pango-fc-font-map-add-decoder-find-func" role="1.6."><primary sortas="pango_fc_font_map_add_decoder_find_func">pango_fc_font_map_add_decoder_find_func</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fc_font_map_add_decoder_find_func
+                                                        (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap,
+                                                         <link linkend="PangoFcDecoderFindFunc">PangoFcDecoderFindFunc</link> findfunc,
+                                                         <link linkend="gpointer">gpointer</link> user_data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> dnotify);</programlisting>
+<para>
+This function saves a callback method in the <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> that
+will be called whenever new fonts are created.  If the
+function returns a <link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link>, that decoder will be used to
+determine both coverage via a <link linkend="FcCharSet"><type>FcCharSet</type></link> and a one-to-one mapping of
+characters to glyphs.  This will allow applications to have
+application-specific encodings for various fonts.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fcfontmap</parameter>&#160;:</term>
+<listitem><simpara> The <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> to add this method to.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>findfunc</parameter>&#160;:</term>
+<listitem><simpara> The <link linkend="PangoFcDecoderFindFunc"><type>PangoFcDecoderFindFunc</type></link> callback function
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>user_data</parameter>&#160;:</term>
+<listitem><simpara> User data.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dnotify</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="GDestroyNotify"><type>GDestroyNotify</type></link> callback that will be called when the
+ fontmap is finalized and the decoder is released.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6.</para></refsect2>
+<refsect2 id="pango-fc-font-map-find-decoder" role="function" condition="since:1.26.">
+<title>pango_fc_font_map_find_decoder ()</title>
+<indexterm zone="pango-fc-font-map-find-decoder" role="1.26."><primary sortas="pango_fc_font_map_find_decoder">pango_fc_font_map_find_decoder</primary></indexterm><programlisting><link linkend="PangoFcDecoder">PangoFcDecoder</link> *    pango_fc_font_map_find_decoder      (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap,
+                                                         <link linkend="FcPattern">FcPattern</link> *pattern);</programlisting>
+<para>
+Finds the decoder to use for <parameter>pattern</parameter>.  Decoders can be added to
+a font map using <link linkend="pango-fc-font-map-add-decoder-find-func"><function>pango_fc_font_map_add_decoder_find_func()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fcfontmap</parameter>&#160;:</term>
+<listitem><simpara> The <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> to use.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>pattern</parameter>&#160;:</term>
+<listitem><simpara> The <link linkend="FcPattern"><type>FcPattern</type></link> to find the decoder for.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly created <link linkend="PangoFcDecoder"><type>PangoFcDecoder</type></link> object or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if
+         no decoder is set for <parameter>pattern</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.26.</para></refsect2>
+<refsect2 id="pango-fc-font-map-cache-clear" role="function" condition="since:1.4">
+<title>pango_fc_font_map_cache_clear ()</title>
+<indexterm zone="pango-fc-font-map-cache-clear" role="1.4"><primary sortas="pango_fc_font_map_cache_clear">pango_fc_font_map_cache_clear</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fc_font_map_cache_clear       (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap);</programlisting>
+<para>
+Clear all cached information and fontsets for this font map;
+this should be called whenever there is a change in the
+output of the <link linkend="default-substitute"><function>default_substitute()</function></link> virtual function of the
+font map, or if fontconfig has been reinitialized to new
+configuration.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fcfontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFontmap"><type>PangoFcFontmap</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-map-shutdown" role="function" condition="since:1.4">
+<title>pango_fc_font_map_shutdown ()</title>
+<indexterm zone="pango-fc-font-map-shutdown" role="1.4"><primary sortas="pango_fc_font_map_shutdown">pango_fc_font_map_shutdown</primary></indexterm><programlisting><link linkend="void">void</link>                pango_fc_font_map_shutdown          (<link linkend="PangoFcFontMap">PangoFcFontMap</link> *fcfontmap);</programlisting>
+<para>
+Clears all cached information for the fontmap and marks
+all fonts open for the fontmap as dead. (See the <link linkend="shutdown"><function>shutdown()</function></link>
+virtual function of <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.) This function might be used
+by a backend when the underlying windowing system for the font
+map exits. This function is only intended to be called
+only for backend implementations deriving from <link linkend="PangoFcFontmap"><type>PangoFcFontmap</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fcfontmap</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFcFontmap"><type>PangoFcFontmap</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-fc-font-description-from-pattern" role="function" condition="since:1.4">
+<title>pango_fc_font_description_from_pattern ()</title>
+<indexterm zone="pango-fc-font-description-from-pattern" role="1.4"><primary sortas="pango_fc_font_description_from_pattern">pango_fc_font_description_from_pattern</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_fc_font_description_from_pattern
+                                                        (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gboolean">gboolean</link> include_size);</programlisting>
+<para>
+Creates a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> that matches the specified
+Fontconfig pattern as closely as possible. Many possible Fontconfig
+pattern values, such as <link linkend="FC-RASTERIZER--CAPS"><literal>FC_RASTERIZER</literal></link> or <link linkend="FC-DPI--CAPS"><literal>FC_DPI</literal></link>, don't make sense in
+the context of <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, so will be ignored.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>pattern</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="FcPattern"><type>FcPattern</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>include_size</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, the pattern will include the size from
+  the <parameter>pattern</parameter>; otherwise the resulting pattern will be unsized.
+  (only <link linkend="FC-SIZE--CAPS"><literal>FC_SIZE</literal></link> is examined, not <link linkend="FC-PIXEL-SIZE--CAPS"><literal>FC_PIXEL_SIZE</literal></link>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>. Free with
+ <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="PANGO-FC-GRAVITY--CAPS" role="macro" condition="since:1.20">
+<title>PANGO_FC_GRAVITY</title>
+<indexterm zone="PANGO-FC-GRAVITY--CAPS" role="1.20"><primary sortas="PANGO_FC_GRAVITY">PANGO_FC_GRAVITY</primary></indexterm><programlisting>#define PANGO_FC_GRAVITY "pangogravity"
+</programlisting>
+<para>
+String representing a fontconfig property name that Pango sets on any
+fontconfig pattern it passes to fontconfig if a <link linkend="PangoGravity"><type>PangoGravity</type></link> other
+than <link linkend="PangoGravitySouth"><literal>PangoGravitySouth</literal></link> is desired.
+</para>
+<para>
+The property will have a <link linkend="PangoGravity"><type>PangoGravity</type></link> value as a string, like "east".
+This can be used to write fontconfig configuration rules to choose
+different fonts for horizontal and vertical writing directions.</para>
+<para>
+</para><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="PANGO-FC-VERSION--CAPS" role="macro" condition="since:1.20">
+<title>PANGO_FC_VERSION</title>
+<indexterm zone="PANGO-FC-VERSION--CAPS" role="1.20"><primary sortas="PANGO_FC_VERSION">PANGO_FC_VERSION</primary></indexterm><programlisting>#define PANGO_FC_VERSION "pangoversion"
+</programlisting>
+<para>
+String representing a fontconfig property name that Pango sets on any
+fontconfig pattern it passes to fontconfig.
+</para>
+<para>
+The property will have an integer value equal to what
+<link linkend="pango-version"><function>pango_version()</function></link> returns.
+This can be used to write fontconfig configuration rules that only affect
+certain pango versions (or only pango-using applications, or only
+non-pango-using applications).</para>
+<para>
+</para><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="PANGO-FC-PRGNAME--CAPS" role="macro" condition="since:1.24">
+<title>PANGO_FC_PRGNAME</title>
+<indexterm zone="PANGO-FC-PRGNAME--CAPS" role="1.24"><primary sortas="PANGO_FC_PRGNAME">PANGO_FC_PRGNAME</primary></indexterm><programlisting>#define PANGO_FC_PRGNAME "pangoprgname"
+</programlisting>
+<para>
+String representing a fontconfig property name that Pango sets on any
+fontconfig pattern it passes to fontconfig.
+</para>
+<para>
+The property will have a string equal to what
+<link linkend="g-get-prgname"><function>g_get_prgname()</function></link> returns.
+This can be used to write fontconfig configuration rules that only affect
+certain applications.</para>
+<para>
+</para><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="PangoFcFontsetKey" role="struct" condition="since:1.24">
+<title>PangoFcFontsetKey</title>
+<indexterm zone="PangoFcFontsetKey" role="1.24"><primary sortas="PangoFcFontsetKey">PangoFcFontsetKey</primary></indexterm><programlisting>typedef struct _PangoFcFontsetKey PangoFcFontsetKey;</programlisting>
+<para>
+An opaque structure containing all the information needed for
+loading a fontset with the PangoFc fontmap.</para>
+<para>
+</para><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-fontset-key-get-context-key" role="function" condition="since:1.24">
+<title>pango_fc_fontset_key_get_context_key ()</title>
+<indexterm zone="pango-fc-fontset-key-get-context-key" role="1.24"><primary sortas="pango_fc_fontset_key_get_context_key">pango_fc_fontset_key_get_context_key</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link>            pango_fc_fontset_key_get_context_key
+                                                        (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);</programlisting>
+<para>
+Gets the context key member of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the font key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the context key, which is owned by <parameter>key</parameter> and should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-fontset-key-get-description" role="function" condition="since:1.24">
+<title>pango_fc_fontset_key_get_description ()</title>
+<indexterm zone="pango-fc-fontset-key-get-description" role="1.24"><primary sortas="pango_fc_fontset_key_get_description">pango_fc_fontset_key_get_description</primary></indexterm><programlisting>const <link linkend="PangoFontDescription">PangoFontDescription</link> * pango_fc_fontset_key_get_description
+                                                        (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);</programlisting>
+<para>
+Gets the font description of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the fontset key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the font description, which is owned by <parameter>key</parameter> and should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-fontset-key-get-language" role="function" condition="since:1.24">
+<title>pango_fc_fontset_key_get_language ()</title>
+<indexterm zone="pango-fc-fontset-key-get-language" role="1.24"><primary sortas="pango_fc_fontset_key_get_language">pango_fc_fontset_key_get_language</primary></indexterm><programlisting><link linkend="PangoLanguage">PangoLanguage</link> *     pango_fc_fontset_key_get_language   (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);</programlisting>
+<para>
+Gets the language member of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the fontset key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the language
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-fontset-key-get-matrix" role="function" condition="since:1.24">
+<title>pango_fc_fontset_key_get_matrix ()</title>
+<indexterm zone="pango-fc-fontset-key-get-matrix" role="1.24"><primary sortas="pango_fc_fontset_key_get_matrix">pango_fc_fontset_key_get_matrix</primary></indexterm><programlisting>const <link linkend="PangoMatrix">PangoMatrix</link> * pango_fc_fontset_key_get_matrix     (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);</programlisting>
+<para>
+Gets the matrix member of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the fontset key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the matrix, which is owned by <parameter>key</parameter> and should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-fontset-key-get-absolute-size" role="function" condition="since:1.24">
+<title>pango_fc_fontset_key_get_absolute_size ()</title>
+<indexterm zone="pango-fc-fontset-key-get-absolute-size" role="1.24"><primary sortas="pango_fc_fontset_key_get_absolute_size">pango_fc_fontset_key_get_absolute_size</primary></indexterm><programlisting><link linkend="double">double</link>              pango_fc_fontset_key_get_absolute_size
+                                                        (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);</programlisting>
+<para>
+Gets the absolute font size of <parameter>key</parameter> in Pango units.  This is adjusted
+for both resolution and transformation matrix.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the fontset key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the pixel size of <parameter>key</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-fontset-key-get-resolution" role="function" condition="since:1.24">
+<title>pango_fc_fontset_key_get_resolution ()</title>
+<indexterm zone="pango-fc-fontset-key-get-resolution" role="1.24"><primary sortas="pango_fc_fontset_key_get_resolution">pango_fc_fontset_key_get_resolution</primary></indexterm><programlisting><link linkend="double">double</link>              pango_fc_fontset_key_get_resolution (const <link linkend="PangoFcFontsetKey">PangoFcFontsetKey</link> *key);</programlisting>
+<para>
+Gets the resolution of <parameter>key</parameter></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the fontset key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the resolution of <parameter>key</parameter>
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="PangoFcFontKey" role="struct" condition="since:1.24">
+<title>PangoFcFontKey</title>
+<indexterm zone="PangoFcFontKey" role="1.24"><primary sortas="PangoFcFontKey">PangoFcFontKey</primary></indexterm><programlisting>typedef struct _PangoFcFontKey PangoFcFontKey;</programlisting>
+<para>
+An opaque structure containing all the information needed for
+loading a font with the PangoFc fontmap.</para>
+<para>
+</para><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-font-key-get-context-key" role="function" condition="since:1.24">
+<title>pango_fc_font_key_get_context_key ()</title>
+<indexterm zone="pango-fc-font-key-get-context-key" role="1.24"><primary sortas="pango_fc_font_key_get_context_key">pango_fc_font_key_get_context_key</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link>            pango_fc_font_key_get_context_key   (const <link linkend="PangoFcFontKey">PangoFcFontKey</link> *key);</programlisting>
+<para>
+Gets the context key member of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the font key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the context key, which is owned by <parameter>key</parameter> and should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-font-key-get-matrix" role="function" condition="since:1.24">
+<title>pango_fc_font_key_get_matrix ()</title>
+<indexterm zone="pango-fc-font-key-get-matrix" role="1.24"><primary sortas="pango_fc_font_key_get_matrix">pango_fc_font_key_get_matrix</primary></indexterm><programlisting>const <link linkend="PangoMatrix">PangoMatrix</link> * pango_fc_font_key_get_matrix        (const <link linkend="PangoFcFontKey">PangoFcFontKey</link> *key);</programlisting>
+<para>
+Gets the matrix member of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the font key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the matrix, which is owned by <parameter>key</parameter> and should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+<refsect2 id="pango-fc-font-key-get-pattern" role="function" condition="since:1.24">
+<title>pango_fc_font_key_get_pattern ()</title>
+<indexterm zone="pango-fc-font-key-get-pattern" role="1.24"><primary sortas="pango_fc_font_key_get_pattern">pango_fc_font_key_get_pattern</primary></indexterm><programlisting>const <link linkend="FcPattern">FcPattern</link> *   pango_fc_font_key_get_pattern       (const <link linkend="PangoFcFontKey">PangoFcFontKey</link> *key);</programlisting>
+<para>
+Gets the fontconfig pattern member of <parameter>key</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> the font key
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the pattern, which is owned by <parameter>key</parameter> and should not be modified.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.24</para></refsect2>
+
+</refsect1>
+
+
+
+<refsect1 id="PangoFcFontMap.see-also">
+<title>See Also</title>
+<para>
+<variablelist>
+<varlistentry>
+<term><link linkend="PangoFcFont"><type>PangoFcFont</type></link></term>
+<listitem><para>The base class for fonts; creating a new
+Fontconfig-based backend involves deriving from both
+<link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> and <link linkend="PangoFcFont"><type>PangoFcFont</type></link>.
+</para></listitem>
+</varlistentry>
+</variablelist>
+</para>
+</refsect1>
+
+</refentry>
diff --git a/docs/xml/scripts.xml b/docs/xml/scripts.xml
new file mode 100755 (executable)
index 0000000..563c4cc
--- /dev/null
@@ -0,0 +1,962 @@
+<refentry id="pango-Scripts-and-Languages">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Scripts-and-Languages.top_of_page">Scripts and Languages</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Scripts and Languages</refname>
+<refpurpose>Identifying writing systems and languages</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Scripts-and-Languages.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+enum                <link linkend="PangoScript">PangoScript</link>;
+#define             <link linkend="PANGO-TYPE-SCRIPT--CAPS">PANGO_TYPE_SCRIPT</link>
+                    <link linkend="PangoScriptIter">PangoScriptIter</link>;
+<link linkend="PangoScript">PangoScript</link>         <link linkend="pango-script-for-unichar">pango_script_for_unichar</link>            (<link linkend="gunichar">gunichar</link> ch);
+<link linkend="PangoLanguage">PangoLanguage</link> *     <link linkend="pango-script-get-sample-language">pango_script_get_sample_language</link>    (<link linkend="PangoScript">PangoScript</link> script);
+<link linkend="PangoScriptIter">PangoScriptIter</link> *   <link linkend="pango-script-iter-new">pango_script_iter_new</link>               (const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length);
+<link linkend="void">void</link>                <link linkend="pango-script-iter-get-range">pango_script_iter_get_range</link>         (<link linkend="PangoScriptIter">PangoScriptIter</link> *iter,
+                                                         G_CONST_RETURN <link linkend="char">char</link> **start,
+                                                         G_CONST_RETURN <link linkend="char">char</link> **end,
+                                                         <link linkend="PangoScript">PangoScript</link> *script);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-script-iter-next">pango_script_iter_next</link>              (<link linkend="PangoScriptIter">PangoScriptIter</link> *iter);
+<link linkend="void">void</link>                <link linkend="pango-script-iter-free">pango_script_iter_free</link>              (<link linkend="PangoScriptIter">PangoScriptIter</link> *iter);
+                    <link linkend="PangoLanguage">PangoLanguage</link>;
+#define             <link linkend="PANGO-TYPE-LANGUAGE--CAPS">PANGO_TYPE_LANGUAGE</link>
+<link linkend="PangoLanguage">PangoLanguage</link> *     <link linkend="pango-language-from-string">pango_language_from_string</link>          (const <link linkend="char">char</link> *language);
+const <link linkend="char">char</link> *        <link linkend="pango-language-to-string">pango_language_to_string</link>            (<link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-language-matches">pango_language_matches</link>              (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         const <link linkend="char">char</link> *range_list);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-language-includes-script">pango_language_includes_script</link>      (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="PangoScript">PangoScript</link> script);
+const <link linkend="PangoScript">PangoScript</link> * <link linkend="pango-language-get-scripts">pango_language_get_scripts</link>          (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="int">int</link> *num_scripts);
+<link linkend="PangoLanguage">PangoLanguage</link> *     <link linkend="pango-language-get-default">pango_language_get_default</link>          (void);
+const <link linkend="char">char</link> *        <link linkend="pango-language-get-sample-string">pango_language_get_sample_string</link>    (<link linkend="PangoLanguage">PangoLanguage</link> *language);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Scripts-and-Languages.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The functions in this section are used to identify the writing
+system, or <firstterm>script</firstterm> of individual characters
+and of ranges within a larger text string.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Scripts-and-Languages.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoScript" role="enum">
+<title>enum PangoScript</title>
+<indexterm zone="PangoScript"><primary sortas="PangoScript">PangoScript</primary></indexterm><programlisting>typedef enum {                         /* ISO 15924 code */
+      PANGO_SCRIPT_INVALID_CODE = -1,
+      PANGO_SCRIPT_COMMON       = 0,   /* Zyyy */
+      PANGO_SCRIPT_INHERITED,          /* Qaai */
+      PANGO_SCRIPT_ARABIC,             /* Arab */
+      PANGO_SCRIPT_ARMENIAN,           /* Armn */
+      PANGO_SCRIPT_BENGALI,            /* Beng */
+      PANGO_SCRIPT_BOPOMOFO,           /* Bopo */
+      PANGO_SCRIPT_CHEROKEE,           /* Cher */
+      PANGO_SCRIPT_COPTIC,             /* Qaac */
+      PANGO_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
+      PANGO_SCRIPT_DESERET,            /* Dsrt */
+      PANGO_SCRIPT_DEVANAGARI,         /* Deva */
+      PANGO_SCRIPT_ETHIOPIC,           /* Ethi */
+      PANGO_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
+      PANGO_SCRIPT_GOTHIC,             /* Goth */
+      PANGO_SCRIPT_GREEK,              /* Grek */
+      PANGO_SCRIPT_GUJARATI,           /* Gujr */
+      PANGO_SCRIPT_GURMUKHI,           /* Guru */
+      PANGO_SCRIPT_HAN,                /* Hani */
+      PANGO_SCRIPT_HANGUL,             /* Hang */
+      PANGO_SCRIPT_HEBREW,             /* Hebr */
+      PANGO_SCRIPT_HIRAGANA,           /* Hira */
+      PANGO_SCRIPT_KANNADA,            /* Knda */
+      PANGO_SCRIPT_KATAKANA,           /* Kana */
+      PANGO_SCRIPT_KHMER,              /* Khmr */
+      PANGO_SCRIPT_LAO,                /* Laoo */
+      PANGO_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
+      PANGO_SCRIPT_MALAYALAM,          /* Mlym */
+      PANGO_SCRIPT_MONGOLIAN,          /* Mong */
+      PANGO_SCRIPT_MYANMAR,            /* Mymr */
+      PANGO_SCRIPT_OGHAM,              /* Ogam */
+      PANGO_SCRIPT_OLD_ITALIC,         /* Ital */
+      PANGO_SCRIPT_ORIYA,              /* Orya */
+      PANGO_SCRIPT_RUNIC,              /* Runr */
+      PANGO_SCRIPT_SINHALA,            /* Sinh */
+      PANGO_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
+      PANGO_SCRIPT_TAMIL,              /* Taml */
+      PANGO_SCRIPT_TELUGU,             /* Telu */
+      PANGO_SCRIPT_THAANA,             /* Thaa */
+      PANGO_SCRIPT_THAI,               /* Thai */
+      PANGO_SCRIPT_TIBETAN,            /* Tibt */
+      PANGO_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
+      PANGO_SCRIPT_YI,                 /* Yiii */
+      PANGO_SCRIPT_TAGALOG,            /* Tglg */
+      PANGO_SCRIPT_HANUNOO,            /* Hano */
+      PANGO_SCRIPT_BUHID,              /* Buhd */
+      PANGO_SCRIPT_TAGBANWA,           /* Tagb */
+
+      /* Unicode-4.0 additions */
+      PANGO_SCRIPT_BRAILLE,            /* Brai */
+      PANGO_SCRIPT_CYPRIOT,            /* Cprt */
+      PANGO_SCRIPT_LIMBU,              /* Limb */
+      PANGO_SCRIPT_OSMANYA,            /* Osma */
+      PANGO_SCRIPT_SHAVIAN,            /* Shaw */
+      PANGO_SCRIPT_LINEAR_B,           /* Linb */
+      PANGO_SCRIPT_TAI_LE,             /* Tale */
+      PANGO_SCRIPT_UGARITIC,           /* Ugar */
+
+      /* Unicode-4.1 additions */
+      PANGO_SCRIPT_NEW_TAI_LUE,        /* Talu */
+      PANGO_SCRIPT_BUGINESE,           /* Bugi */
+      PANGO_SCRIPT_GLAGOLITIC,         /* Glag */
+      PANGO_SCRIPT_TIFINAGH,           /* Tfng */
+      PANGO_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
+      PANGO_SCRIPT_OLD_PERSIAN,        /* Xpeo */
+      PANGO_SCRIPT_KHAROSHTHI,         /* Khar */
+
+      /* Unicode-5.0 additions */
+      PANGO_SCRIPT_UNKNOWN,            /* Zzzz */
+      PANGO_SCRIPT_BALINESE,           /* Bali */
+      PANGO_SCRIPT_CUNEIFORM,          /* Xsux */
+      PANGO_SCRIPT_PHOENICIAN,         /* Phnx */
+      PANGO_SCRIPT_PHAGS_PA,           /* Phag */
+      PANGO_SCRIPT_NKO,                /* Nkoo */
+
+      /* Unicode-5.1 additions */
+      PANGO_SCRIPT_KAYAH_LI,           /* Kali */
+      PANGO_SCRIPT_LEPCHA,             /* Lepc */
+      PANGO_SCRIPT_REJANG,             /* Rjng */
+      PANGO_SCRIPT_SUNDANESE,          /* Sund */
+      PANGO_SCRIPT_SAURASHTRA,         /* Saur */
+      PANGO_SCRIPT_CHAM,               /* Cham */
+      PANGO_SCRIPT_OL_CHIKI,           /* Olck */
+      PANGO_SCRIPT_VAI,                /* Vaii */
+      PANGO_SCRIPT_CARIAN,             /* Cari */
+      PANGO_SCRIPT_LYCIAN,             /* Lyci */
+      PANGO_SCRIPT_LYDIAN              /* Lydi */
+} PangoScript;
+</programlisting>
+<para>
+The <link linkend="PangoScript"><type>PangoScript</type></link> enumeration identifies different writing
+systems. The values correspond to the names as defined in the
+Unicode standard.
+Note that new types may be added in the future. Applications should be ready
+to handle unknown values.  This enumeration is interchangeable with
+<link linkend="GUnicodeScript"><type>GUnicodeScript</type></link>.  See <ulink
+url="http://www.unicode.org/reports/tr24/">Unicode Standard Annex
+#24: Script names</ulink>.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-SCRIPT-INVALID-CODE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_INVALID_CODE</literal></term>
+<listitem><simpara>a value never returned from <link linkend="pango-script-for-unichar"><function>pango_script_for_unichar()</function></link>
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-COMMON--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_COMMON</literal></term>
+<listitem><simpara>a character used by multiple different scripts
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-INHERITED--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_INHERITED</literal></term>
+<listitem><simpara>a mark glyph that takes its script from the
+  base glyph to which it is attached
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-ARABIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_ARABIC</literal></term>
+<listitem><simpara>    Arabic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-ARMENIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_ARMENIAN</literal></term>
+<listitem><simpara>Armenian
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-BENGALI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_BENGALI</literal></term>
+<listitem><simpara>    Bengali
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-BOPOMOFO--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_BOPOMOFO</literal></term>
+<listitem><simpara>Bopomofo
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CHEROKEE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CHEROKEE</literal></term>
+<listitem><simpara>    Cherokee
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-COPTIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_COPTIC</literal></term>
+<listitem><simpara>    Coptic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CYRILLIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CYRILLIC</literal></term>
+<listitem><simpara>    Cyrillic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-DESERET--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_DESERET</literal></term>
+<listitem><simpara>    Deseret
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-DEVANAGARI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_DEVANAGARI</literal></term>
+<listitem><simpara>    Devanagari
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-ETHIOPIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_ETHIOPIC</literal></term>
+<listitem><simpara>    Ethiopic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-GEORGIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_GEORGIAN</literal></term>
+<listitem><simpara>    Georgian
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-GOTHIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_GOTHIC</literal></term>
+<listitem><simpara>    Gothic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-GREEK--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_GREEK</literal></term>
+<listitem><simpara>    Greek
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-GUJARATI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_GUJARATI</literal></term>
+<listitem><simpara>    Gujarati
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-GURMUKHI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_GURMUKHI</literal></term>
+<listitem><simpara>    Gurmukhi
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-HAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_HAN</literal></term>
+<listitem><simpara>    Han
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-HANGUL--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_HANGUL</literal></term>
+<listitem><simpara>    Hangul
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-HEBREW--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_HEBREW</literal></term>
+<listitem><simpara>    Hebrew
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-HIRAGANA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_HIRAGANA</literal></term>
+<listitem><simpara>    Hiragana
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-KANNADA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_KANNADA</literal></term>
+<listitem><simpara>    Kannada
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-KATAKANA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_KATAKANA</literal></term>
+<listitem><simpara>    Katakana
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-KHMER--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_KHMER</literal></term>
+<listitem><simpara>    Khmer
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LAO--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LAO</literal></term>
+<listitem><simpara>    Lao
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LATIN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LATIN</literal></term>
+<listitem><simpara>    Latin
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-MALAYALAM--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_MALAYALAM</literal></term>
+<listitem><simpara>    Malayalam
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-MONGOLIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_MONGOLIAN</literal></term>
+<listitem><simpara>    Mongolian
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-MYANMAR--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_MYANMAR</literal></term>
+<listitem><simpara>    Myanmar
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-OGHAM--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_OGHAM</literal></term>
+<listitem><simpara>    Ogham
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-OLD-ITALIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_OLD_ITALIC</literal></term>
+<listitem><simpara>    Old Italic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-ORIYA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_ORIYA</literal></term>
+<listitem><simpara>    Oriya
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-RUNIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_RUNIC</literal></term>
+<listitem><simpara>    Runic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-SINHALA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_SINHALA</literal></term>
+<listitem><simpara>    Sinhala
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-SYRIAC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_SYRIAC</literal></term>
+<listitem><simpara>    Syriac
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TAMIL--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TAMIL</literal></term>
+<listitem><simpara>    Tamil
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TELUGU--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TELUGU</literal></term>
+<listitem><simpara>    Telugu
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-THAANA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_THAANA</literal></term>
+<listitem><simpara>    Thaana
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-THAI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_THAI</literal></term>
+<listitem><simpara>    Thai
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TIBETAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TIBETAN</literal></term>
+<listitem><simpara>    Tibetan
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CANADIAN-ABORIGINAL--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CANADIAN_ABORIGINAL</literal></term>
+<listitem><simpara>    Canadian Aboriginal
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-YI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_YI</literal></term>
+<listitem><simpara>    Yi
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TAGALOG--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TAGALOG</literal></term>
+<listitem><simpara>    Tagalog
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-HANUNOO--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_HANUNOO</literal></term>
+<listitem><simpara>    Hanunoo
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-BUHID--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_BUHID</literal></term>
+<listitem><simpara>    Buhid
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TAGBANWA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TAGBANWA</literal></term>
+<listitem><simpara>    Tagbanwa
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-BRAILLE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_BRAILLE</literal></term>
+<listitem><simpara>    Braille
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CYPRIOT--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CYPRIOT</literal></term>
+<listitem><simpara>    Cypriot
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LIMBU--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LIMBU</literal></term>
+<listitem><simpara>    Limbu
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-OSMANYA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_OSMANYA</literal></term>
+<listitem><simpara>    Osmanya
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-SHAVIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_SHAVIAN</literal></term>
+<listitem><simpara>    Shavian
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LINEAR-B--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LINEAR_B</literal></term>
+<listitem><simpara>    Linear B
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TAI-LE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TAI_LE</literal></term>
+<listitem><simpara>    Tai Le
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-UGARITIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_UGARITIC</literal></term>
+<listitem><simpara>    Ugaritic
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-NEW-TAI-LUE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_NEW_TAI_LUE</literal></term>
+<listitem><simpara>    New Tai Lue. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-BUGINESE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_BUGINESE</literal></term>
+<listitem><simpara>    Buginese. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-GLAGOLITIC--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_GLAGOLITIC</literal></term>
+<listitem><simpara>    Glagolitic. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-TIFINAGH--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_TIFINAGH</literal></term>
+<listitem><simpara>    Tifinagh. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-SYLOTI-NAGRI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_SYLOTI_NAGRI</literal></term>
+<listitem><simpara>    Syloti Nagri. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-OLD-PERSIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_OLD_PERSIAN</literal></term>
+<listitem><simpara>    Old Persian. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-KHAROSHTHI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_KHAROSHTHI</literal></term>
+<listitem><simpara>    Kharoshthi. Since 1.10
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-UNKNOWN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_UNKNOWN</literal></term>
+<listitem><simpara>            an unassigned code point. Since 1.14
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-BALINESE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_BALINESE</literal></term>
+<listitem><simpara>            Balinese. Since 1.14
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CUNEIFORM--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CUNEIFORM</literal></term>
+<listitem><simpara>    Cuneiform. Since 1.14
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-PHOENICIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_PHOENICIAN</literal></term>
+<listitem><simpara>    Phoenician. Since 1.14
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-PHAGS-PA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_PHAGS_PA</literal></term>
+<listitem><simpara>            Phags-pa. Since 1.14
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-NKO--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_NKO</literal></term>
+<listitem><simpara>            N'Ko. Since 1.14
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-KAYAH-LI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_KAYAH_LI</literal></term>
+<listitem><simpara>  Kayah Li. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LEPCHA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LEPCHA</literal></term>
+<listitem><simpara>    Lepcha. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-REJANG--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_REJANG</literal></term>
+<listitem><simpara>    Rejang. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-SUNDANESE--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_SUNDANESE</literal></term>
+<listitem><simpara> Sundanese. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-SAURASHTRA--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_SAURASHTRA</literal></term>
+<listitem><simpara>Saurashtra. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CHAM--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CHAM</literal></term>
+<listitem><simpara>      Cham. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-OL-CHIKI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_OL_CHIKI</literal></term>
+<listitem><simpara>  Ol Chiki. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-VAI--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_VAI</literal></term>
+<listitem><simpara>       Vai. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-CARIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_CARIAN</literal></term>
+<listitem><simpara>    Carian. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LYCIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LYCIAN</literal></term>
+<listitem><simpara>    Lycian. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-SCRIPT-LYDIAN--CAPS" role="constant">
+<term><literal>PANGO_SCRIPT_LYDIAN</literal></term>
+<listitem><simpara>    Lydian. Since 1.20.1
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-SCRIPT--CAPS" role="macro">
+<title>PANGO_TYPE_SCRIPT</title>
+<indexterm zone="PANGO-TYPE-SCRIPT--CAPS"><primary sortas="PANGO_TYPE_SCRIPT">PANGO_TYPE_SCRIPT</primary></indexterm><programlisting>#define PANGO_TYPE_SCRIPT (pango_script_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoScript"><type>PangoScript</type></link>
+</para></refsect2>
+<refsect2 id="PangoScriptIter" role="struct">
+<title>PangoScriptIter</title>
+<indexterm zone="PangoScriptIter"><primary sortas="PangoScriptIter">PangoScriptIter</primary></indexterm><programlisting>typedef struct _PangoScriptIter PangoScriptIter;</programlisting>
+<para>
+A <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link> is used to iterate through a string
+and identify ranges in different scripts.</para>
+<para>
+</para></refsect2>
+<refsect2 id="pango-script-for-unichar" role="function" condition="since:1.4">
+<title>pango_script_for_unichar ()</title>
+<indexterm zone="pango-script-for-unichar" role="1.4"><primary sortas="pango_script_for_unichar">pango_script_for_unichar</primary></indexterm><programlisting><link linkend="PangoScript">PangoScript</link>         pango_script_for_unichar            (<link linkend="gunichar">gunichar</link> ch);</programlisting>
+<para>
+Looks up the <link linkend="PangoScript"><type>PangoScript</type></link> for a particular character (as defined by
+Unicode Standard Annex <link linkend="24--CAPS"><type>24</type></link>). No check is made for <parameter>ch</parameter> being a
+valid Unicode character; if you pass in invalid character, the
+result is undefined.
+</para>
+<para>
+As of Pango 1.18, this function simply returns the return value of
+<link linkend="g-unichar-get-script"><function>g_unichar_get_script()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ch</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoScript"><type>PangoScript</type></link> for the character.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-script-get-sample-language" role="function" condition="since:1.4">
+<title>pango_script_get_sample_language ()</title>
+<indexterm zone="pango-script-get-sample-language" role="1.4"><primary sortas="pango_script_get_sample_language">pango_script_get_sample_language</primary></indexterm><programlisting><link linkend="PangoLanguage">PangoLanguage</link> *     pango_script_get_sample_language    (<link linkend="PangoScript">PangoScript</link> script);</programlisting>
+<para>
+Given a script, finds a language tag that is reasonably
+representative of that script. This will usually be the
+most widely spoken or used language written in that script:
+for instance, the sample language for <link linkend="PANGO-SCRIPT-CYRILLIC--CAPS"><literal>PANGO_SCRIPT_CYRILLIC</literal></link>
+is <literal>ru</literal> (Russian), the sample language
+for <link linkend="PANGO-SCRIPT-ARABIC--CAPS"><literal>PANGO_SCRIPT_ARABIC</literal></link> is <literal>ar</literal>.
+</para>
+<para>
+For some
+scripts, no sample language will be returned because there
+is no language that is sufficiently representative. The best
+example of this is <link linkend="PANGO-SCRIPT-HAN--CAPS"><literal>PANGO_SCRIPT_HAN</literal></link>, where various different
+variants of written Chinese, Japanese, and Korean all use
+significantly different sets of Han characters and forms
+of shared characters. No sample language can be provided
+for many historical scripts as well.
+</para>
+<para>
+As of 1.18, this function checks the environment variables
+PANGO_LANGUAGE and LANGUAGE (checked in that order) first.
+If one of them is set, it is parsed as a list of language tags
+separated by colons or other separators.  This function
+will return the first language in the parsed list that Pango
+believes may use <parameter>script</parameter> for writing.  This last predicate
+is tested using <link linkend="pango-language-includes-script"><function>pango_language_includes_script()</function></link>.  This can
+be used to control Pango's font selection for non-primary
+languages.  For example, a PANGO_LANGUAGE enviroment variable
+set to "en:fa" makes Pango choose fonts suitable for Persian (fa) 
+instead of Arabic (ar) when a segment of Arabic text is found
+in an otherwise non-Arabic text.  The same trick can be used to
+choose a default language for <link linkend="PANGO-SCRIPT-HAN--CAPS"><literal>PANGO_SCRIPT_HAN</literal></link> when setting
+context language is not feasible.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScript"><type>PangoScript</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link> that is representative
+of the script, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no such language exists.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-script-iter-new" role="function" condition="since:1.4">
+<title>pango_script_iter_new ()</title>
+<indexterm zone="pango-script-iter-new" role="1.4"><primary sortas="pango_script_iter_new">pango_script_iter_new</primary></indexterm><programlisting><link linkend="PangoScriptIter">PangoScriptIter</link> *   pango_script_iter_new               (const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> length);</programlisting>
+<para>
+Create a new <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link>, used to break a string of
+Unicode into runs by text. No copy is made of <parameter>text</parameter>, so
+the caller needs to make sure it remains valid until
+the iterator is freed with <link linkend="pango-script-iter-free"><function>pango_script_iter_free()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> a UTF-8 string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of <parameter>text</parameter>, or -1 if <parameter>text</parameter> is nul-terminated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new script iterator, initialized
+ to point at the first range in the text, which should be
+ freed with <link linkend="pango-script-iter-free"><function>pango_script_iter_free()</function></link>. If the string is
+ empty, it will point at an empty range.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-script-iter-get-range" role="function" condition="since:1.4">
+<title>pango_script_iter_get_range ()</title>
+<indexterm zone="pango-script-iter-get-range" role="1.4"><primary sortas="pango_script_iter_get_range">pango_script_iter_get_range</primary></indexterm><programlisting><link linkend="void">void</link>                pango_script_iter_get_range         (<link linkend="PangoScriptIter">PangoScriptIter</link> *iter,
+                                                         G_CONST_RETURN <link linkend="char">char</link> **start,
+                                                         G_CONST_RETURN <link linkend="char">char</link> **end,
+                                                         <link linkend="PangoScript">PangoScript</link> *script);</programlisting>
+<para>
+Gets information about the range to which <parameter>iter</parameter> currently points.
+The range is the set of locations p where *start &lt;= p &lt; *end.
+(That is, it doesn't include the character stored at *end)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>start</parameter>&#160;:</term>
+<listitem><simpara> location to store start position of the range, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>end</parameter>&#160;:</term>
+<listitem><simpara> location to store end position of the range, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> location to store script for range, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-script-iter-next" role="function" condition="since:1.4">
+<title>pango_script_iter_next ()</title>
+<indexterm zone="pango-script-iter-next" role="1.4"><primary sortas="pango_script_iter_next">pango_script_iter_next</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_script_iter_next              (<link linkend="PangoScriptIter">PangoScriptIter</link> *iter);</programlisting>
+<para>
+Advances a <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link> to the next range. If <parameter>iter</parameter>
+is already at the end, it is left unchanged and <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>
+is returned.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>iter</parameter> was successfully advanced.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-script-iter-free" role="function" condition="since:1.4">
+<title>pango_script_iter_free ()</title>
+<indexterm zone="pango-script-iter-free" role="1.4"><primary sortas="pango_script_iter_free">pango_script_iter_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_script_iter_free              (<link linkend="PangoScriptIter">PangoScriptIter</link> *iter);</programlisting>
+<para>
+Frees a <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link> created with <link linkend="pango-script-iter-new"><function>pango_script_iter_new()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iter</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScriptIter"><type>PangoScriptIter</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="PangoLanguage" role="struct">
+<title>PangoLanguage</title>
+<indexterm zone="PangoLanguage"><primary sortas="PangoLanguage">PangoLanguage</primary></indexterm><programlisting>typedef struct _PangoLanguage PangoLanguage;</programlisting>
+<para>
+The <link linkend="PangoLanguage"><type>PangoLanguage</type></link> structure is used to
+represent a language.
+</para>
+<para>
+<link linkend="PangoLanguage"><type>PangoLanguage</type></link> pointers can be efficiently
+copied and compared with each other.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-LANGUAGE--CAPS" role="macro">
+<title>PANGO_TYPE_LANGUAGE</title>
+<indexterm zone="PANGO-TYPE-LANGUAGE--CAPS"><primary sortas="PANGO_TYPE_LANGUAGE">PANGO_TYPE_LANGUAGE</primary></indexterm><programlisting>#define PANGO_TYPE_LANGUAGE (pango_language_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoLanguage"><type>PangoLanguage</type></link>.
+</para></refsect2>
+<refsect2 id="pango-language-from-string" role="function">
+<title>pango_language_from_string ()</title>
+<indexterm zone="pango-language-from-string"><primary sortas="pango_language_from_string">pango_language_from_string</primary></indexterm><programlisting><link linkend="PangoLanguage">PangoLanguage</link> *     pango_language_from_string          (const <link linkend="char">char</link> *language);</programlisting>
+<para>
+Take a RFC-3066 format language tag as a string and convert it to a
+<link linkend="PangoLanguage"><type>PangoLanguage</type></link> pointer that can be efficiently copied (copy the
+pointer) and compared with other language tags (compare the
+pointer.)
+</para>
+<para>
+This function first canonicalizes the string by converting it to
+lowercase, mapping '_' to '-', and stripping all characters other
+than letters and '-'.
+</para>
+<para>
+Use <link linkend="pango-language-get-default"><function>pango_language_get_default()</function></link> if you want to get the <link linkend="PangoLanguage"><type>PangoLanguage</type></link> for
+the current locale of the process.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a string representing a language tag, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> an opaque pointer to a <link linkend="PangoLanguage"><type>PangoLanguage</type></link> structure, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if <parameter>language</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.  The returned pointer will be valid
+              forever after, and should not be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-language-to-string" role="function">
+<title>pango_language_to_string ()</title>
+<indexterm zone="pango-language-to-string"><primary sortas="pango_language_to_string">pango_language_to_string</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_language_to_string            (<link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Gets the RFC-3066 format string representing the given language tag.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a language tag.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a string representing the language tag.  This is owned by
+         Pango and should not be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-language-matches" role="function">
+<title>pango_language_matches ()</title>
+<indexterm zone="pango-language-matches"><primary sortas="pango_language_matches">pango_language_matches</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_language_matches              (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         const <link linkend="char">char</link> *range_list);</programlisting>
+<para>
+Checks if a language tag matches one of the elements in a list of
+language ranges. A language tag is considered to match a range
+in the list if the range is '*', the range is exactly the tag,
+or the range is a prefix of the tag, and the character after it
+in the tag is '-'.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a language tag (see <link linkend="pango-language-from-string"><function>pango_language_from_string()</function></link>),
+           <link linkend="NULL--CAPS"><literal>NULL</literal></link> is allowed and matches nothing but '*'
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>range_list</parameter>&#160;:</term>
+<listitem><simpara> a list of language ranges, separated by ';', ':',
+  ',', or space characters.
+  Each element must either be '*', or a RFC 3066 language range
+  canonicalized as by <link linkend="pango-language-from-string"><function>pango_language_from_string()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if a match was found.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-language-includes-script" role="function" condition="since:1.4">
+<title>pango_language_includes_script ()</title>
+<indexterm zone="pango-language-includes-script" role="1.4"><primary sortas="pango_language_includes_script">pango_language_includes_script</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_language_includes_script      (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="PangoScript">PangoScript</link> script);</programlisting>
+<para>
+Determines if <parameter>script</parameter> is one of the scripts used to
+write <parameter>language</parameter>. The returned value is conservative;
+if nothing is known about the language tag <parameter>language</parameter>,
+<link linkend="TRUE--CAPS"><literal>TRUE</literal></link> will be returned, since, as far as Pango knows,
+<parameter>script</parameter> might be used to write <parameter>language</parameter>.
+</para>
+<para>
+This routine is used in Pango's itemization process when
+determining if a supplied language tag is relevant to
+a particular section of text. It probably is not useful for
+applications in most circumstances.
+</para>
+<para>
+This function uses <link linkend="pango-language-get-scripts"><function>pango_language_get_scripts()</function></link> internally.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoScript"><type>PangoScript</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>script</parameter> is one of the scripts used
+to write <parameter>language</parameter> or if nothing is known about <parameter>language</parameter>
+(including the case that <parameter>language</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>),
+<link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-language-get-scripts" role="function" condition="since:1.22">
+<title>pango_language_get_scripts ()</title>
+<indexterm zone="pango-language-get-scripts" role="1.22"><primary sortas="pango_language_get_scripts">pango_language_get_scripts</primary></indexterm><programlisting>const <link linkend="PangoScript">PangoScript</link> * pango_language_get_scripts          (<link linkend="PangoLanguage">PangoLanguage</link> *language,
+                                                         <link linkend="int">int</link> *num_scripts);</programlisting>
+<para>
+Determines the scripts used to to write <parameter>language</parameter>.
+If nothing is known about the language tag <parameter>language</parameter>,
+or if <parameter>language</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, then <link linkend="NULL--CAPS"><literal>NULL</literal></link> is returned.
+The list of scripts returned starts with the script that the
+language uses most and continues to the one it uses least.
+</para>
+<para>
+The value <parameter>num_script</parameter> points at will be set to the number
+of scripts in the returned array (or zero if <link linkend="NULL--CAPS"><literal>NULL</literal></link> is returned).
+</para>
+<para>
+Most languages use only one script for writing, but there are
+some that use two (Latin and Cyrillic for example), and a few
+use three (Japanese for example).  Applications should not make
+any assumptions on the maximum number of scripts returned
+though, except that it is positive if the return value is not
+<link linkend="NULL--CAPS"><literal>NULL</literal></link>, and it is a small number.
+</para>
+<para>
+The <link linkend="pango-language-includes-script"><function>pango_language_includes_script()</function></link> function uses this function
+internally.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>num_scripts</parameter>&#160;:</term>
+<listitem><simpara> location to return number of scripts, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> An array of <link linkend="PangoScript"><type>PangoScript</type></link> values, with the
+number of entries in the array stored in <parameter>num_scripts</parameter>, or
+<link linkend="NULL--CAPS"><literal>NULL</literal></link> if Pango does not have any information about this
+particular language tag (also the case if <parameter>language</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>).
+The returned array is owned by Pango and should not be modified
+or freed.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-language-get-default" role="function" condition="since:1.16">
+<title>pango_language_get_default ()</title>
+<indexterm zone="pango-language-get-default" role="1.16"><primary sortas="pango_language_get_default">pango_language_get_default</primary></indexterm><programlisting><link linkend="PangoLanguage">PangoLanguage</link> *     pango_language_get_default          (void);</programlisting>
+<para>
+Returns the <link linkend="PangoLanguage"><type>PangoLanguage</type></link> for the current locale of the process.
+Note that this can change over the life of an application.
+</para>
+<para>
+On Unix systems, this is the return value is derived from
+<literal>setlocale(LC_CTYPE, NULL)</literal>, and the user can
+affect this through the environment variables LC_ALL, LC_CTYPE or
+LANG (checked in that order). The locale string typically is in
+the form lang_COUNTRY, where lang is an ISO-639 language code, and
+COUNTRY is an ISO-3166 country code. For instance, sv_FI for
+Swedish as written in Finland or pt_BR for Portuguese as written in
+Brazil.
+</para>
+<para>
+On Windows, the C library does not use any such environment
+variables, and setting them won't affect the behavior of functions
+like <link linkend="ctime"><function>ctime()</function></link>. The user sets the locale through the Regional Options
+in the Control Panel. The C library (in the <link linkend="setlocale"><function>setlocale()</function></link> function)
+does not use country and language codes, but country and language
+names spelled out in English.
+However, this function does check the above environment
+variables, and does return a Unix-style locale string based on
+either said environment variables or the thread's current locale.
+</para>
+<para>
+Your application should call <literal>setlocale(LC_ALL, "");</literal>
+for the user settings to take effect.  Gtk+ does this in its initialization
+functions automatically (by calling <link linkend="gtk-set-locale"><function>gtk_set_locale()</function></link>).
+See <literal>man setlocale</literal> for more details.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the default language as a <link linkend="PangoLanguage"><type>PangoLanguage</type></link>, must not be
+              freed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-language-get-sample-string" role="function">
+<title>pango_language_get_sample_string ()</title>
+<indexterm zone="pango-language-get-sample-string"><primary sortas="pango_language_get_sample_string">pango_language_get_sample_string</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_language_get_sample_string    (<link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Get a string that is representative of the characters needed to
+render a particular language.
+</para>
+<para>
+The sample text may be a pangram, but is not necessarily.  It is chosen to
+be demonstrative of normal text in the language, as well as exposing font
+feature requirements unique to the language.  It is suitable for use
+as sample text in a font selection dialog.
+</para>
+<para>
+If <parameter>language</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>, the default language as found by
+<link linkend="pango-language-get-default"><function>pango_language_get_default()</function></link> is used.
+</para>
+<para>
+If Pango does not have a sample string for <parameter>language</parameter>, the classic
+"The quick brown fox..." is returned.  This can be detected by
+comparing the returned pointer value to that returned for (non-existent)
+language code "xx".  That is, compare to:
+<informalexample><programlisting>
+pango_language_get_sample_string (pango_language_from_string ("xx"))
+</programlisting></informalexample></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoLanguage"><type>PangoLanguage</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the sample string. This value is owned by Pango
+  and should not be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/tab-stops.xml b/docs/xml/tab-stops.xml
new file mode 100755 (executable)
index 0000000..227cc7e
--- /dev/null
@@ -0,0 +1,309 @@
+<refentry id="pango-Tab-Stops">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Tab-Stops.top_of_page">Tab Stops</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Tab Stops</refname>
+<refpurpose>Structures for storing tab stops</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Tab-Stops.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+                    <link linkend="PangoTabArray">PangoTabArray</link>;
+#define             <link linkend="PANGO-TYPE-TAB-ARRAY--CAPS">PANGO_TYPE_TAB_ARRAY</link>
+enum                <link linkend="PangoTabAlign">PangoTabAlign</link>;
+#define             <link linkend="PANGO-TYPE-TAB-ALIGN--CAPS">PANGO_TYPE_TAB_ALIGN</link>
+<link linkend="PangoTabArray">PangoTabArray</link> *     <link linkend="pango-tab-array-new">pango_tab_array_new</link>                 (<link linkend="gint">gint</link> initial_size,
+                                                         <link linkend="gboolean">gboolean</link> positions_in_pixels);
+<link linkend="PangoTabArray">PangoTabArray</link> *     <link linkend="pango-tab-array-new-with-positions">pango_tab_array_new_with_positions</link>  (<link linkend="gint">gint</link> size,
+                                                         <link linkend="gboolean">gboolean</link> positions_in_pixels,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> first_alignment,
+                                                         <link linkend="gint">gint</link> first_position,
+                                                         ...);
+<link linkend="PangoTabArray">PangoTabArray</link> *     <link linkend="pango-tab-array-copy">pango_tab_array_copy</link>                (<link linkend="PangoTabArray">PangoTabArray</link> *src);
+<link linkend="void">void</link>                <link linkend="pango-tab-array-free">pango_tab_array_free</link>                (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array);
+<link linkend="gint">gint</link>                <link linkend="pango-tab-array-get-size">pango_tab_array_get_size</link>            (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array);
+<link linkend="void">void</link>                <link linkend="pango-tab-array-resize">pango_tab_array_resize</link>              (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="gint">gint</link> new_size);
+<link linkend="void">void</link>                <link linkend="pango-tab-array-set-tab">pango_tab_array_set_tab</link>             (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="gint">gint</link> tab_index,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> alignment,
+                                                         <link linkend="gint">gint</link> location);
+<link linkend="void">void</link>                <link linkend="pango-tab-array-get-tab">pango_tab_array_get_tab</link>             (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="gint">gint</link> tab_index,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> *alignment,
+                                                         <link linkend="gint">gint</link> *location);
+<link linkend="void">void</link>                <link linkend="pango-tab-array-get-tabs">pango_tab_array_get_tabs</link>            (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> **alignments,
+                                                         <link linkend="gint">gint</link> **locations);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-tab-array-get-positions-in-pixels">pango_tab_array_get_positions_in_pixels</link>
+                                                        (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Tab-Stops.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Functions in this section are used to deal with <link linkend="PangoTabArray"><type>PangoTabArray</type></link> objects
+that can be used to set tab stop positions in a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Tab-Stops.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoTabArray" role="struct">
+<title>PangoTabArray</title>
+<indexterm zone="PangoTabArray"><primary sortas="PangoTabArray">PangoTabArray</primary></indexterm><programlisting>typedef struct _PangoTabArray PangoTabArray;</programlisting>
+<para>
+A <link linkend="PangoTabArray"><type>PangoTabArray</type></link> struct contains an array
+of tab stops. Each tab stop has an alignment and a position.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-TAB-ARRAY--CAPS" role="macro">
+<title>PANGO_TYPE_TAB_ARRAY</title>
+<indexterm zone="PANGO-TYPE-TAB-ARRAY--CAPS"><primary sortas="PANGO_TYPE_TAB_ARRAY">PANGO_TYPE_TAB_ARRAY</primary></indexterm><programlisting>#define PANGO_TYPE_TAB_ARRAY (pango_tab_array_get_type ())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoTabArray"><type>PangoTabArray</type></link>.
+</para></refsect2>
+<refsect2 id="PangoTabAlign" role="enum">
+<title>enum PangoTabAlign</title>
+<indexterm zone="PangoTabAlign"><primary sortas="PangoTabAlign">PangoTabAlign</primary></indexterm><programlisting>typedef enum
+{
+  PANGO_TAB_LEFT
+
+  /* These are not supported now, but may be in the
+   * future.
+   *
+   *  PANGO_TAB_RIGHT,
+   *  PANGO_TAB_CENTER,
+   *  PANGO_TAB_NUMERIC
+   */
+} PangoTabAlign;
+</programlisting>
+<para>
+A <link linkend="PangoTabAlign"><type>PangoTabAlign</type></link> specifies where a tab stop appears relative to the text.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-TAB-LEFT--CAPS" role="constant">
+<term><literal>PANGO_TAB_LEFT</literal></term>
+<listitem><simpara>the tab stop appears to the left of the text.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-TAB-ALIGN--CAPS" role="macro">
+<title>PANGO_TYPE_TAB_ALIGN</title>
+<indexterm zone="PANGO-TYPE-TAB-ALIGN--CAPS"><primary sortas="PANGO_TYPE_TAB_ALIGN">PANGO_TYPE_TAB_ALIGN</primary></indexterm><programlisting>#define PANGO_TYPE_TAB_ALIGN (pango_tab_align_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoTabAlign"><type>PangoTabAlign</type></link>.
+</para></refsect2>
+<refsect2 id="pango-tab-array-new" role="function">
+<title>pango_tab_array_new ()</title>
+<indexterm zone="pango-tab-array-new"><primary sortas="pango_tab_array_new">pango_tab_array_new</primary></indexterm><programlisting><link linkend="PangoTabArray">PangoTabArray</link> *     pango_tab_array_new                 (<link linkend="gint">gint</link> initial_size,
+                                                         <link linkend="gboolean">gboolean</link> positions_in_pixels);</programlisting>
+<para>
+Creates an array of <parameter>initial_size</parameter> tab stops. Tab stops are specified in
+pixel units if <parameter>positions_in_pixels</parameter> is <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, otherwise in Pango
+units. All stops are initially at position 0.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>initial_size</parameter>&#160;:</term>
+<listitem><simpara> Initial number of tab stops to allocate, can be 0
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>positions_in_pixels</parameter>&#160;:</term>
+<listitem><simpara> whether positions are in pixel units
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoTabArray"><type>PangoTabArray</type></link>, which should
+              be freed with <link linkend="pango-tab-array-free"><function>pango_tab_array_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-new-with-positions" role="function">
+<title>pango_tab_array_new_with_positions ()</title>
+<indexterm zone="pango-tab-array-new-with-positions"><primary sortas="pango_tab_array_new_with_positions">pango_tab_array_new_with_positions</primary></indexterm><programlisting><link linkend="PangoTabArray">PangoTabArray</link> *     pango_tab_array_new_with_positions  (<link linkend="gint">gint</link> size,
+                                                         <link linkend="gboolean">gboolean</link> positions_in_pixels,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> first_alignment,
+                                                         <link linkend="gint">gint</link> first_position,
+                                                         ...);</programlisting>
+<para>
+This is a convenience function that creates a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+and allows you to specify the alignment and position of each
+tab stop. You <emphasis>must</emphasis> provide an alignment
+and position for <parameter>size</parameter> tab stops.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>size</parameter>&#160;:</term>
+<listitem><simpara> number of tab stops in the array
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>positions_in_pixels</parameter>&#160;:</term>
+<listitem><simpara> whether positions are in pixel units
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>first_alignment</parameter>&#160;:</term>
+<listitem><simpara> alignment of first tab stop
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>first_position</parameter>&#160;:</term>
+<listitem><simpara> position of first tab stop
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>...</parameter>&#160;:</term>
+<listitem><simpara> additional alignment/position pairs
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoTabArray"><type>PangoTabArray</type></link>, which should
+              be freed with <link linkend="pango-tab-array-free"><function>pango_tab_array_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-copy" role="function">
+<title>pango_tab_array_copy ()</title>
+<indexterm zone="pango-tab-array-copy"><primary sortas="pango_tab_array_copy">pango_tab_array_copy</primary></indexterm><programlisting><link linkend="PangoTabArray">PangoTabArray</link> *     pango_tab_array_copy                (<link linkend="PangoTabArray">PangoTabArray</link> *src);</programlisting>
+<para>
+Copies a <link linkend="PangoTabArray"><type>PangoTabArray</type></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>src</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="PangoTabArray"><type>PangoTabArray</type></link> to copy
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoTabArray"><type>PangoTabArray</type></link>, which should
+              be freed with <link linkend="pango-tab-array-free"><function>pango_tab_array_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-free" role="function">
+<title>pango_tab_array_free ()</title>
+<indexterm zone="pango-tab-array-free"><primary sortas="pango_tab_array_free">pango_tab_array_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_tab_array_free                (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array);</programlisting>
+<para>
+Frees a tab array and associated resources.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-get-size" role="function">
+<title>pango_tab_array_get_size ()</title>
+<indexterm zone="pango-tab-array-get-size"><primary sortas="pango_tab_array_get_size">pango_tab_array_get_size</primary></indexterm><programlisting><link linkend="gint">gint</link>                pango_tab_array_get_size            (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array);</programlisting>
+<para>
+Gets the number of tab stops in <parameter>tab_array</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the number of tab stops in the array.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-resize" role="function">
+<title>pango_tab_array_resize ()</title>
+<indexterm zone="pango-tab-array-resize"><primary sortas="pango_tab_array_resize">pango_tab_array_resize</primary></indexterm><programlisting><link linkend="void">void</link>                pango_tab_array_resize              (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="gint">gint</link> new_size);</programlisting>
+<para>
+Resizes a tab array. You must subsequently initialize any tabs that
+were added as a result of growing the array.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>new_size</parameter>&#160;:</term>
+<listitem><simpara> new size of the array
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-set-tab" role="function">
+<title>pango_tab_array_set_tab ()</title>
+<indexterm zone="pango-tab-array-set-tab"><primary sortas="pango_tab_array_set_tab">pango_tab_array_set_tab</primary></indexterm><programlisting><link linkend="void">void</link>                pango_tab_array_set_tab             (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="gint">gint</link> tab_index,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> alignment,
+                                                         <link linkend="gint">gint</link> location);</programlisting>
+<para>
+Sets the alignment and location of a tab stop.
+<parameter>alignment</parameter> must always be <link linkend="PANGO-TAB-LEFT--CAPS"><type>PANGO_TAB_LEFT</type></link> in the current
+implementation.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>tab_index</parameter>&#160;:</term>
+<listitem><simpara> the index of a tab stop
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>alignment</parameter>&#160;:</term>
+<listitem><simpara> tab alignment
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>location</parameter>&#160;:</term>
+<listitem><simpara> tab location in Pango units
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-get-tab" role="function">
+<title>pango_tab_array_get_tab ()</title>
+<indexterm zone="pango-tab-array-get-tab"><primary sortas="pango_tab_array_get_tab">pango_tab_array_get_tab</primary></indexterm><programlisting><link linkend="void">void</link>                pango_tab_array_get_tab             (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="gint">gint</link> tab_index,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> *alignment,
+                                                         <link linkend="gint">gint</link> *location);</programlisting>
+<para>
+Gets the alignment and position of a tab stop.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>tab_index</parameter>&#160;:</term>
+<listitem><simpara> tab stop index
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>alignment</parameter>&#160;:</term>
+<listitem><simpara> location to store alignment, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>location</parameter>&#160;:</term>
+<listitem><simpara> location to store tab position, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-get-tabs" role="function">
+<title>pango_tab_array_get_tabs ()</title>
+<indexterm zone="pango-tab-array-get-tabs"><primary sortas="pango_tab_array_get_tabs">pango_tab_array_get_tabs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_tab_array_get_tabs            (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array,
+                                                         <link linkend="PangoTabAlign">PangoTabAlign</link> **alignments,
+                                                         <link linkend="gint">gint</link> **locations);</programlisting>
+<para>
+If non-<link linkend="NULL--CAPS"><literal>NULL</literal></link>, <parameter>alignments</parameter> and <parameter>locations</parameter> are filled with allocated
+arrays of length <link linkend="pango-tab-array-get-size"><function>pango_tab_array_get_size()</function></link>. You must free the
+returned array.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>alignments</parameter>&#160;:</term>
+<listitem><simpara> location to store an array of tab stop alignments, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>locations</parameter>&#160;:</term>
+<listitem><simpara> location to store an array of tab positions, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-tab-array-get-positions-in-pixels" role="function">
+<title>pango_tab_array_get_positions_in_pixels ()</title>
+<indexterm zone="pango-tab-array-get-positions-in-pixels"><primary sortas="pango_tab_array_get_positions_in_pixels">pango_tab_array_get_positions_in_pixels</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_tab_array_get_positions_in_pixels
+                                                        (<link linkend="PangoTabArray">PangoTabArray</link> *tab_array);</programlisting>
+<para>
+Returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the tab positions are in pixels, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if they are
+in Pango units.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>tab_array</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoTabArray"><type>PangoTabArray</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> whether positions are in pixels.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/text-attributes.xml b/docs/xml/text-attributes.xml
new file mode 100755 (executable)
index 0000000..079607f
--- /dev/null
@@ -0,0 +1,1776 @@
+<refentry id="pango-Text-Attributes">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Text-Attributes.top_of_page">Text Attributes</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Text Attributes</refname>
+<refpurpose>Font and other attributes for annotating text</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Text-Attributes.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+enum                <link linkend="PangoAttrType">PangoAttrType</link>;
+#define             <link linkend="PANGO-TYPE-ATTR-TYPE--CAPS">PANGO_TYPE_ATTR_TYPE</link>
+                    <link linkend="PangoAttrClass">PangoAttrClass</link>;
+                    <link linkend="PangoAttribute">PangoAttribute</link>;
+#define             <link linkend="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS">PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</link>
+#define             <link linkend="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS">PANGO_ATTR_INDEX_TO_TEXT_END</link>
+                    <link linkend="PangoAttrString">PangoAttrString</link>;
+                    <link linkend="PangoAttrLanguage">PangoAttrLanguage</link>;
+                    <link linkend="PangoAttrColor">PangoAttrColor</link>;
+                    <link linkend="PangoAttrInt">PangoAttrInt</link>;
+                    <link linkend="PangoAttrFloat">PangoAttrFloat</link>;
+                    <link linkend="PangoAttrFontDesc">PangoAttrFontDesc</link>;
+                    <link linkend="PangoAttrShape">PangoAttrShape</link>;
+                    <link linkend="PangoAttrSize">PangoAttrSize</link>;
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-parse-markup">pango_parse_markup</link>                  (const <link linkend="char">char</link> *markup_text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="gunichar">gunichar</link> accel_marker,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> **attr_list,
+                                                         <link linkend="char">char</link> **text,
+                                                         <link linkend="gunichar">gunichar</link> *accel_char,
+                                                         <link linkend="GError">GError</link> **error);
+<link linkend="PangoAttrType">PangoAttrType</link>       <link linkend="pango-attr-type-register">pango_attr_type_register</link>            (const <link linkend="gchar">gchar</link> *name);
+const <link linkend="char">char</link> *        <link linkend="pango-attr-type-get-name">pango_attr_type_get_name</link>            (<link linkend="PangoAttrType">PangoAttrType</link> type);
+<link linkend="void">void</link>                <link linkend="pango-attribute-init">pango_attribute_init</link>                (<link linkend="PangoAttribute">PangoAttribute</link> *attr,
+                                                         const <link linkend="PangoAttrClass">PangoAttrClass</link> *klass);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attribute-copy">pango_attribute_copy</link>                (const <link linkend="PangoAttribute">PangoAttribute</link> *attr);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-attribute-equal">pango_attribute_equal</link>               (const <link linkend="PangoAttribute">PangoAttribute</link> *attr1,
+                                                         const <link linkend="PangoAttribute">PangoAttribute</link> *attr2);
+<link linkend="void">void</link>                <link linkend="pango-attribute-destroy">pango_attribute_destroy</link>             (<link linkend="PangoAttribute">PangoAttribute</link> *attr);
+
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-language-new">pango_attr_language_new</link>             (<link linkend="PangoLanguage">PangoLanguage</link> *language);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-family-new">pango_attr_family_new</link>               (const <link linkend="char">char</link> *family);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-style-new">pango_attr_style_new</link>                (<link linkend="PangoStyle">PangoStyle</link> style);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-variant-new">pango_attr_variant_new</link>              (<link linkend="PangoVariant">PangoVariant</link> variant);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-stretch-new">pango_attr_stretch_new</link>              (<link linkend="PangoStretch">PangoStretch</link> stretch);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-weight-new">pango_attr_weight_new</link>               (<link linkend="PangoWeight">PangoWeight</link> weight);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-size-new">pango_attr_size_new</link>                 (<link linkend="int">int</link> size);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-size-new-absolute">pango_attr_size_new_absolute</link>        (<link linkend="int">int</link> size);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-font-desc-new">pango_attr_font_desc_new</link>            (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-foreground-new">pango_attr_foreground_new</link>           (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-background-new">pango_attr_background_new</link>           (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-strikethrough-new">pango_attr_strikethrough_new</link>        (<link linkend="gboolean">gboolean</link> strikethrough);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-strikethrough-color-new">pango_attr_strikethrough_color_new</link>  (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-underline-new">pango_attr_underline_new</link>            (<link linkend="PangoUnderline">PangoUnderline</link> underline);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-underline-color-new">pango_attr_underline_color_new</link>      (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);
+enum                <link linkend="PangoUnderline">PangoUnderline</link>;
+#define             <link linkend="PANGO-TYPE-UNDERLINE--CAPS">PANGO_TYPE_UNDERLINE</link>
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-shape-new">pango_attr_shape_new</link>                (const <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         const <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-shape-new-with-data">pango_attr_shape_new_with_data</link>      (const <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         const <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="PangoAttrDataCopyFunc">PangoAttrDataCopyFunc</link> copy_func,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> destroy_func);
+<link linkend="gpointer">gpointer</link>            (<link linkend="PangoAttrDataCopyFunc">*PangoAttrDataCopyFunc</link>)            (<link linkend="gconstpointer">gconstpointer</link> data);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-scale-new">pango_attr_scale_new</link>                (<link linkend="double">double</link> scale_factor);
+#define             <link linkend="PANGO-SCALE-XX-SMALL--CAPS">PANGO_SCALE_XX_SMALL</link>
+#define             <link linkend="PANGO-SCALE-X-SMALL--CAPS">PANGO_SCALE_X_SMALL</link>
+#define             <link linkend="PANGO-SCALE-SMALL--CAPS">PANGO_SCALE_SMALL</link>
+#define             <link linkend="PANGO-SCALE-MEDIUM--CAPS">PANGO_SCALE_MEDIUM</link>
+#define             <link linkend="PANGO-SCALE-LARGE--CAPS">PANGO_SCALE_LARGE</link>
+#define             <link linkend="PANGO-SCALE-X-LARGE--CAPS">PANGO_SCALE_X_LARGE</link>
+#define             <link linkend="PANGO-SCALE-XX-LARGE--CAPS">PANGO_SCALE_XX_LARGE</link>
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-rise-new">pango_attr_rise_new</link>                 (<link linkend="int">int</link> rise);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-letter-spacing-new">pango_attr_letter_spacing_new</link>       (<link linkend="int">int</link> letter_spacing);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-fallback-new">pango_attr_fallback_new</link>             (<link linkend="gboolean">gboolean</link> enable_fallback);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-gravity-new">pango_attr_gravity_new</link>              (<link linkend="PangoGravity">PangoGravity</link> gravity);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-gravity-hint-new">pango_attr_gravity_hint_new</link>         (<link linkend="PangoGravityHint">PangoGravityHint</link> hint);
+                    <link linkend="PangoColor">PangoColor</link>;
+#define             <link linkend="PANGO-TYPE-COLOR--CAPS">PANGO_TYPE_COLOR</link>
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-color-parse">pango_color_parse</link>                   (<link linkend="PangoColor">PangoColor</link> *color,
+                                                         const <link linkend="char">char</link> *spec);
+<link linkend="PangoColor">PangoColor</link> *        <link linkend="pango-color-copy">pango_color_copy</link>                    (const <link linkend="PangoColor">PangoColor</link> *src);
+<link linkend="void">void</link>                <link linkend="pango-color-free">pango_color_free</link>                    (<link linkend="PangoColor">PangoColor</link> *color);
+<link linkend="gchar">gchar</link> *             <link linkend="pango-color-to-string">pango_color_to_string</link>               (const <link linkend="PangoColor">PangoColor</link> *color);
+
+                    <link linkend="PangoAttrList">PangoAttrList</link>;
+#define             <link linkend="PANGO-TYPE-ATTR-LIST--CAPS">PANGO_TYPE_ATTR_LIST</link>
+<link linkend="PangoAttrList">PangoAttrList</link> *     <link linkend="pango-attr-list-new">pango_attr_list_new</link>                 (void);
+<link linkend="PangoAttrList">PangoAttrList</link> *     <link linkend="pango-attr-list-ref">pango_attr_list_ref</link>                 (<link linkend="PangoAttrList">PangoAttrList</link> *list);
+<link linkend="void">void</link>                <link linkend="pango-attr-list-unref">pango_attr_list_unref</link>               (<link linkend="PangoAttrList">PangoAttrList</link> *list);
+<link linkend="PangoAttrList">PangoAttrList</link> *     <link linkend="pango-attr-list-copy">pango_attr_list_copy</link>                (<link linkend="PangoAttrList">PangoAttrList</link> *list);
+<link linkend="void">void</link>                <link linkend="pango-attr-list-insert">pango_attr_list_insert</link>              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttribute">PangoAttribute</link> *attr);
+<link linkend="void">void</link>                <link linkend="pango-attr-list-insert-before">pango_attr_list_insert_before</link>       (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttribute">PangoAttribute</link> *attr);
+<link linkend="void">void</link>                <link linkend="pango-attr-list-change">pango_attr_list_change</link>              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttribute">PangoAttribute</link> *attr);
+<link linkend="void">void</link>                <link linkend="pango-attr-list-splice">pango_attr_list_splice</link>              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *other,
+                                                         <link linkend="gint">gint</link> pos,
+                                                         <link linkend="gint">gint</link> len);
+<link linkend="PangoAttrList">PangoAttrList</link> *     <link linkend="pango-attr-list-filter">pango_attr_list_filter</link>              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttrFilterFunc">PangoAttrFilterFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data);
+<link linkend="gboolean">gboolean</link>            (<link linkend="PangoAttrFilterFunc">*PangoAttrFilterFunc</link>)              (<link linkend="PangoAttribute">PangoAttribute</link> *attribute,
+                                                         <link linkend="gpointer">gpointer</link> data);
+<link linkend="PangoAttrIterator">PangoAttrIterator</link> * <link linkend="pango-attr-list-get-iterator">pango_attr_list_get_iterator</link>        (<link linkend="PangoAttrList">PangoAttrList</link> *list);
+                    <link linkend="PangoAttrIterator">PangoAttrIterator</link>;
+<link linkend="PangoAttrIterator">PangoAttrIterator</link> * <link linkend="pango-attr-iterator-copy">pango_attr_iterator_copy</link>            (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-attr-iterator-next">pango_attr_iterator_next</link>            (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);
+<link linkend="void">void</link>                <link linkend="pango-attr-iterator-range">pango_attr_iterator_range</link>           (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator,
+                                                         <link linkend="gint">gint</link> *start,
+                                                         <link linkend="gint">gint</link> *end);
+<link linkend="PangoAttribute">PangoAttribute</link> *    <link linkend="pango-attr-iterator-get">pango_attr_iterator_get</link>             (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator,
+                                                         <link linkend="PangoAttrType">PangoAttrType</link> type);
+<link linkend="void">void</link>                <link linkend="pango-attr-iterator-get-font">pango_attr_iterator_get_font</link>        (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator,
+                                                         <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> **language,
+                                                         <link linkend="GSList">GSList</link> **extra_attrs);
+<link linkend="GSList">GSList</link> *            <link linkend="pango-attr-iterator-get-attrs">pango_attr_iterator_get_attrs</link>       (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);
+<link linkend="void">void</link>                <link linkend="pango-attr-iterator-destroy">pango_attr_iterator_destroy</link>         (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Text-Attributes.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Attributed text is used in a number of places in Pango. It
+is used as the input to the itemization process and also when
+creating a <link linkend="PangoLayout"><type>PangoLayout</type></link>. The data types and functions in
+this section are used to represent and manipulate sets
+of attributes applied to a portion of text.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Text-Attributes.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoAttrType" role="enum">
+<title>enum PangoAttrType</title>
+<indexterm zone="PangoAttrType"><primary sortas="PangoAttrType">PangoAttrType</primary></indexterm><programlisting>typedef enum
+{
+  PANGO_ATTR_INVALID,           /* 0 is an invalid attribute type */
+  PANGO_ATTR_LANGUAGE,         /* PangoAttrLanguage */
+  PANGO_ATTR_FAMILY,           /* PangoAttrString */
+  PANGO_ATTR_STYLE,            /* PangoAttrInt */
+  PANGO_ATTR_WEIGHT,           /* PangoAttrInt */
+  PANGO_ATTR_VARIANT,          /* PangoAttrInt */
+  PANGO_ATTR_STRETCH,          /* PangoAttrInt */
+  PANGO_ATTR_SIZE,             /* PangoAttrSize */
+  PANGO_ATTR_FONT_DESC,                /* PangoAttrFontDesc */
+  PANGO_ATTR_FOREGROUND,       /* PangoAttrColor */
+  PANGO_ATTR_BACKGROUND,       /* PangoAttrColor */
+  PANGO_ATTR_UNDERLINE,                /* PangoAttrInt */
+  PANGO_ATTR_STRIKETHROUGH,    /* PangoAttrInt */
+  PANGO_ATTR_RISE,             /* PangoAttrInt */
+  PANGO_ATTR_SHAPE,            /* PangoAttrShape */
+  PANGO_ATTR_SCALE,             /* PangoAttrFloat */
+  PANGO_ATTR_FALLBACK,          /* PangoAttrInt */
+  PANGO_ATTR_LETTER_SPACING,    /* PangoAttrInt */
+  PANGO_ATTR_UNDERLINE_COLOR,  /* PangoAttrColor */
+  PANGO_ATTR_STRIKETHROUGH_COLOR,/* PangoAttrColor */
+  PANGO_ATTR_ABSOLUTE_SIZE,    /* PangoAttrSize */
+  PANGO_ATTR_GRAVITY,          /* PangoAttrInt */
+  PANGO_ATTR_GRAVITY_HINT      /* PangoAttrInt */
+} PangoAttrType;
+</programlisting>
+<para>
+The <link linkend="PangoAttrType"><type>PangoAttrType</type></link>
+distinguishes between different types of attributes. Along with the
+predefined values, it is possible to allocate additional values
+for custom attributes using <link linkend="pango-attr-type-register"><function>pango_attr_type_register()</function></link>. The predefined
+values are given below. The type of structure used to store the
+attribute is listed in parentheses after the description.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-ATTR-INVALID--CAPS" role="constant">
+<term><literal>PANGO_ATTR_INVALID</literal></term>
+<listitem><simpara>does not happen
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-LANGUAGE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_LANGUAGE</literal></term>
+<listitem><simpara>language (<link linkend="PangoAttrLanguage"><type>PangoAttrLanguage</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-FAMILY--CAPS" role="constant">
+<term><literal>PANGO_ATTR_FAMILY</literal></term>
+<listitem><simpara>font family name list (<link linkend="PangoAttrString"><type>PangoAttrString</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-STYLE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_STYLE</literal></term>
+<listitem><simpara>font slant style (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-WEIGHT--CAPS" role="constant">
+<term><literal>PANGO_ATTR_WEIGHT</literal></term>
+<listitem><simpara>font weight (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-VARIANT--CAPS" role="constant">
+<term><literal>PANGO_ATTR_VARIANT</literal></term>
+<listitem><simpara>font variant (normal or small caps) (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-STRETCH--CAPS" role="constant">
+<term><literal>PANGO_ATTR_STRETCH</literal></term>
+<listitem><simpara>font stretch (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-SIZE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_SIZE</literal></term>
+<listitem><simpara>font size in points scaled by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-FONT-DESC--CAPS" role="constant">
+<term><literal>PANGO_ATTR_FONT_DESC</literal></term>
+<listitem><simpara>font description (<link linkend="PangoAttrFontDesc"><type>PangoAttrFontDesc</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-FOREGROUND--CAPS" role="constant">
+<term><literal>PANGO_ATTR_FOREGROUND</literal></term>
+<listitem><simpara>foreground color (<link linkend="PangoAttrColor"><type>PangoAttrColor</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-BACKGROUND--CAPS" role="constant">
+<term><literal>PANGO_ATTR_BACKGROUND</literal></term>
+<listitem><simpara>background color (<link linkend="PangoAttrColor"><type>PangoAttrColor</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-UNDERLINE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_UNDERLINE</literal></term>
+<listitem><simpara>whether the text has an underline (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-STRIKETHROUGH--CAPS" role="constant">
+<term><literal>PANGO_ATTR_STRIKETHROUGH</literal></term>
+<listitem><simpara>whether the text is struck-through (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-RISE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_RISE</literal></term>
+<listitem><simpara>baseline displacement (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-SHAPE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_SHAPE</literal></term>
+<listitem><simpara>shape (<link linkend="PangoAttrShape"><type>PangoAttrShape</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-SCALE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_SCALE</literal></term>
+<listitem><simpara>font size scale factor (<link linkend="PangoAttrFloat"><type>PangoAttrFloat</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-FALLBACK--CAPS" role="constant">
+<term><literal>PANGO_ATTR_FALLBACK</literal></term>
+<listitem><simpara>whether fallback is enabled (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-LETTER-SPACING--CAPS" role="constant">
+<term><literal>PANGO_ATTR_LETTER_SPACING</literal></term>
+<listitem><simpara>letter spacing (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-UNDERLINE-COLOR--CAPS" role="constant">
+<term><literal>PANGO_ATTR_UNDERLINE_COLOR</literal></term>
+<listitem><simpara>underline color (<link linkend="PangoAttrColor"><type>PangoAttrColor</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-STRIKETHROUGH-COLOR--CAPS" role="constant">
+<term><literal>PANGO_ATTR_STRIKETHROUGH_COLOR</literal></term>
+<listitem><simpara>strikethrough color (<link linkend="PangoAttrColor"><type>PangoAttrColor</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-ABSOLUTE-SIZE--CAPS" role="constant">
+<term><literal>PANGO_ATTR_ABSOLUTE_SIZE</literal></term>
+<listitem><simpara>font size in pixels scaled by <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-GRAVITY--CAPS" role="constant">
+<term><literal>PANGO_ATTR_GRAVITY</literal></term>
+<listitem><simpara>base text gravity (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-ATTR-GRAVITY-HINT--CAPS" role="constant">
+<term><literal>PANGO_ATTR_GRAVITY_HINT</literal></term>
+<listitem><simpara>gravity hint (<link linkend="PangoAttrInt"><type>PangoAttrInt</type></link>)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-ATTR-TYPE--CAPS" role="macro">
+<title>PANGO_TYPE_ATTR_TYPE</title>
+<indexterm zone="PANGO-TYPE-ATTR-TYPE--CAPS"><primary sortas="PANGO_TYPE_ATTR_TYPE">PANGO_TYPE_ATTR_TYPE</primary></indexterm><programlisting>#define PANGO_TYPE_ATTR_TYPE (pango_attr_type_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoAttrType"><type>PangoAttrType</type></link>.
+</para></refsect2>
+<refsect2 id="PangoAttrClass" role="struct">
+<title>PangoAttrClass</title>
+<indexterm zone="PangoAttrClass"><primary sortas="PangoAttrClass">PangoAttrClass</primary></indexterm><programlisting>typedef struct {
+  PangoAttrType type;
+  PangoAttribute * (*copy) (const PangoAttribute *attr);
+  void             (*destroy) (PangoAttribute *attr);
+  gboolean         (*equal) (const PangoAttribute *attr1, const PangoAttribute *attr2);
+} PangoAttrClass;
+</programlisting>
+<para>
+The <link linkend="PangoAttrClass"><type>PangoAttrClass</type></link> structure stores the type and operations for
+a particular type of attribute. The functions in this structure should
+not be called directly. Instead, one should use the wrapper functions
+provided for <link linkend="PangoAttribute"><type>PangoAttribute</type></link>.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttrType">PangoAttrType</link>&#160;<structfield>type</structfield>;</term>
+<listitem><simpara>the type ID for this attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>copy</structfield>&#160;()</term>
+<listitem><simpara>function to duplicate an attribute of this type (see <link linkend="pango-attribute-copy"><function>pango_attribute_copy()</function></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>destroy</structfield>&#160;()</term>
+<listitem><simpara>function to free an attribute of this type (see <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>equal</structfield>&#160;()</term>
+<listitem><simpara>function to check two attributes of this type for equality (see <link linkend="pango-attribute-equal"><function>pango_attribute_equal()</function></link>)
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttribute" role="struct">
+<title>PangoAttribute</title>
+<indexterm zone="PangoAttribute"><primary sortas="PangoAttribute">PangoAttribute</primary></indexterm><programlisting>typedef struct {
+  const PangoAttrClass *klass;
+  guint start_index;   /* in bytes */
+  guint end_index;     /* in bytes. The character at this index is not included */
+} PangoAttribute;
+</programlisting>
+<para>
+The <link linkend="PangoAttribute"><type>PangoAttribute</type></link> structure represents the common portions of all
+attributes. Particular types of attributes include this structure
+as their initial portion. The common portion of the attribute holds
+the range to which the value in the type-specific part of the attribute
+applies and should be initialized using <link linkend="pango-attribute-init"><function>pango_attribute_init()</function></link>.
+By default an attribute will have an all-inclusive range of [0,<link linkend="G-MAXUINT--CAPS"><literal>G_MAXUINT</literal></link>].
+</para><variablelist role="struct">
+<varlistentry>
+<term>const&#160;<link linkend="PangoAttrClass">PangoAttrClass</link>&#160;*<structfield>klass</structfield>;</term>
+<listitem><simpara>the class structure holding information about the type of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>start_index</structfield>;</term>
+<listitem><simpara>the start index of the range (in bytes).
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>end_index</structfield>;</term>
+<listitem><simpara>end index of the range (in bytes). The character at this index
+       is not included in the range.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS" role="macro">
+<title>PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</title>
+<indexterm zone="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS"><primary sortas="PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING">PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</primary></indexterm><programlisting>#define PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING     0
+</programlisting>
+<para>
+This value can be used to set the start_index member of a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+such that the attribute covers from the beginning of the text.
+</para>
+Since: 1.24</refsect2>
+<refsect2 id="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS" role="macro">
+<title>PANGO_ATTR_INDEX_TO_TEXT_END</title>
+<indexterm zone="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS"><primary sortas="PANGO_ATTR_INDEX_TO_TEXT_END">PANGO_ATTR_INDEX_TO_TEXT_END</primary></indexterm><programlisting>#define PANGO_ATTR_INDEX_TO_TEXT_END             G_MAXUINT
+</programlisting>
+<para>
+This value can be used to set the end_index member of a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+such that the attribute covers to the end of the text.
+</para>
+Since: 1.24</refsect2>
+<refsect2 id="PangoAttrString" role="struct">
+<title>PangoAttrString</title>
+<indexterm zone="PangoAttrString"><primary sortas="PangoAttrString">PangoAttrString</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  char *value;
+} PangoAttrString;
+</programlisting>
+<para>
+The <link linkend="PangoAttrString"><type>PangoAttrString</type></link> structure is used to represent attributes with
+a string value.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="char">char</link>&#160;*<structfield>value</structfield>;</term>
+<listitem><simpara>the string which is the value of the attribute
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrLanguage" role="struct">
+<title>PangoAttrLanguage</title>
+<indexterm zone="PangoAttrLanguage"><primary sortas="PangoAttrLanguage">PangoAttrLanguage</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  PangoLanguage *value;
+} PangoAttrLanguage;
+</programlisting>
+<para>
+The <link linkend="PangoAttrLanguage"><type>PangoAttrLanguage</type></link> structure is used to represent attributes that
+are languages.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoLanguage">PangoLanguage</link>&#160;*<structfield>value</structfield>;</term>
+<listitem><simpara>the <link linkend="PangoLanguage"><type>PangoLanguage</type></link> which is the value of the attribute
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrColor" role="struct">
+<title>PangoAttrColor</title>
+<indexterm zone="PangoAttrColor"><primary sortas="PangoAttrColor">PangoAttrColor</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  PangoColor color;
+} PangoAttrColor;
+</programlisting>
+<para>
+The <link linkend="PangoAttrColor"><type>PangoAttrColor</type></link> structure is used to represent attributes that
+are colors.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoColor">PangoColor</link>&#160;<structfield>color</structfield>;</term>
+<listitem><simpara>the <link linkend="PangoColor"><type>PangoColor</type></link> which is the value of the attribute
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrInt" role="struct">
+<title>PangoAttrInt</title>
+<indexterm zone="PangoAttrInt"><primary sortas="PangoAttrInt">PangoAttrInt</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  int value;
+} PangoAttrInt;
+</programlisting>
+<para>
+The <link linkend="PangoAttrInt"><type>PangoAttrInt</type></link> structure is used to represent attributes with
+an integer or enumeration value.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>value</structfield>;</term>
+<listitem><simpara>the value of the attribute
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrFloat" role="struct">
+<title>PangoAttrFloat</title>
+<indexterm zone="PangoAttrFloat"><primary sortas="PangoAttrFloat">PangoAttrFloat</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  double value;
+} PangoAttrFloat;
+</programlisting>
+<para>
+The <link linkend="PangoAttrFloat"><type>PangoAttrFloat</type></link> structure is used to represent attributes with
+a float or double value.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="double">double</link>&#160;<structfield>value</structfield>;</term>
+<listitem><simpara>the value of the attribute
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrFontDesc" role="struct">
+<title>PangoAttrFontDesc</title>
+<indexterm zone="PangoAttrFontDesc"><primary sortas="PangoAttrFontDesc">PangoAttrFontDesc</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  PangoFontDescription *desc;
+} PangoAttrFontDesc;
+</programlisting>
+<para>
+The <link linkend="PangoAttrFontDesc"><type>PangoAttrFontDesc</type></link> structure is used to store an attribute that
+sets all aspects of the font description at once.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoFontDescription">PangoFontDescription</link>&#160;*<structfield>desc</structfield>;</term>
+<listitem><simpara>the font description which is the value of this attribute
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrShape" role="struct">
+<title>PangoAttrShape</title>
+<indexterm zone="PangoAttrShape"><primary sortas="PangoAttrShape">PangoAttrShape</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  PangoRectangle ink_rect;
+  PangoRectangle logical_rect;
+
+  gpointer              data;
+  PangoAttrDataCopyFunc copy_func;
+  GDestroyNotify        destroy_func;
+} PangoAttrShape;
+</programlisting>
+<para>
+The <link linkend="PangoAttrShape"><type>PangoAttrShape</type></link> structure is used to represent attributes which
+impose shape restrictions.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoRectangle">PangoRectangle</link>&#160;<structfield>ink_rect</structfield>;</term>
+<listitem><simpara>the ink rectangle to restrict to
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoRectangle">PangoRectangle</link>&#160;<structfield>logical_rect</structfield>;</term>
+<listitem><simpara>the logical rectangle to restrict to
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="gpointer">gpointer</link>&#160;<structfield>data</structfield>;</term>
+<listitem><simpara>user data set (see <link linkend="pango-attr-shape-new-with-data"><function>pango_attr_shape_new_with_data()</function></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="PangoAttrDataCopyFunc">PangoAttrDataCopyFunc</link>&#160;<structfield>copy_func</structfield>;</term>
+<listitem><simpara>copy function for the user data
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="GDestroyNotify">GDestroyNotify</link>&#160;<structfield>destroy_func</structfield>;</term>
+<listitem><simpara>destroy function for the user data
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrSize" role="struct">
+<title>PangoAttrSize</title>
+<indexterm zone="PangoAttrSize"><primary sortas="PangoAttrSize">PangoAttrSize</primary></indexterm><programlisting>typedef struct {
+  PangoAttribute attr;
+  int size;
+  guint absolute : 1;
+} PangoAttrSize;
+</programlisting>
+<para>
+The <link linkend="PangoAttrShape"><type>PangoAttrShape</type></link> structure is used to represent attributes which
+set font size.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="PangoAttribute">PangoAttribute</link>&#160;<structfield>attr</structfield>;</term>
+<listitem><simpara>the common portion of the attribute
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="int">int</link>&#160;<structfield>size</structfield>;</term>
+<listitem><simpara>size of font, in units of 1/<link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link> of a point (for
+  <link linkend="PANGO-ATTR-SIZE--CAPS"><literal>PANGO_ATTR_SIZE</literal></link>) or of a device uni (for <link linkend="PANGO-ATTR-ABSOLUTE-SIZE--CAPS"><literal>PANGO_ATTR_ABSOLUTE_SIZE</literal></link>)
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint">guint</link>&#160;<structfield>absolute</structfield>&#160;:&#160;1;</term>
+<listitem><simpara>whether the font size is in device units or points.
+   This field is only present for compatibility with Pango-1.8.0
+   (<link linkend="PANGO-ATTR-ABSOLUTE-SIZE--CAPS"><literal>PANGO_ATTR_ABSOLUTE_SIZE</literal></link> was added in 1.8.1); and always will
+   be <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> for <link linkend="PANGO-ATTR-SIZE--CAPS"><literal>PANGO_ATTR_SIZE</literal></link> and <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> for <link linkend="PANGO-ATTR-ABSOLUTE-SIZE--CAPS"><literal>PANGO_ATTR_ABSOLUTE_SIZE</literal></link>.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-parse-markup" role="function">
+<title>pango_parse_markup ()</title>
+<indexterm zone="pango-parse-markup"><primary sortas="pango_parse_markup">pango_parse_markup</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_parse_markup                  (const <link linkend="char">char</link> *markup_text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="gunichar">gunichar</link> accel_marker,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> **attr_list,
+                                                         <link linkend="char">char</link> **text,
+                                                         <link linkend="gunichar">gunichar</link> *accel_char,
+                                                         <link linkend="GError">GError</link> **error);</programlisting>
+<para>
+Parses marked-up text (see
+<link linkend="PangoMarkupFormat">markup format</link>) to create
+a plain-text string and an attribute list.
+</para>
+<para>
+If <parameter>accel_marker</parameter> is nonzero, the given character will mark the
+character following it as an accelerator. For example, <parameter>accel_marker</parameter>
+might be an ampersand or underscore. All characters marked
+as an accelerator will receive a <link linkend="PANGO-UNDERLINE-LOW--CAPS"><literal>PANGO_UNDERLINE_LOW</literal></link> attribute,
+and the first character so marked will be returned in <parameter>accel_char</parameter>.
+Two <parameter>accel_marker</parameter> characters following each other produce a single
+literal <parameter>accel_marker</parameter> character.
+</para>
+<para>
+If any error happens, none of the output arguments are touched except
+for <parameter>error</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>markup_text</parameter>&#160;:</term>
+<listitem><simpara> markup to parse (see <link linkend="PangoMarkupFormat">markup format</link>)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara> length of <parameter>markup_text</parameter>, or -1 if nul-terminated
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>accel_marker</parameter>&#160;:</term>
+<listitem><simpara> character that precedes an accelerator, or 0 for none
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attr_list</parameter>&#160;:</term>
+<listitem><simpara> address of return location for a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> address of return location for text with tags stripped, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>accel_char</parameter>&#160;:</term>
+<listitem><simpara> address of return location for accelerator char, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>error</parameter>&#160;:</term>
+<listitem><simpara> address of return location for errors, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if <parameter>error</parameter> is set, otherwise <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-type-register" role="function">
+<title>pango_attr_type_register ()</title>
+<indexterm zone="pango-attr-type-register"><primary sortas="pango_attr_type_register">pango_attr_type_register</primary></indexterm><programlisting><link linkend="PangoAttrType">PangoAttrType</link>       pango_attr_type_register            (const <link linkend="gchar">gchar</link> *name);</programlisting>
+<para>
+Allocate a new attribute type ID.  The attribute type name can be accessed
+later by using <link linkend="pango-attr-type-get-name"><function>pango_attr_type_get_name()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>name</parameter>&#160;:</term>
+<listitem><simpara> an identifier for the type
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new type ID.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-type-get-name" role="function" condition="since:1.22">
+<title>pango_attr_type_get_name ()</title>
+<indexterm zone="pango-attr-type-get-name" role="1.22"><primary sortas="pango_attr_type_get_name">pango_attr_type_get_name</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_attr_type_get_name            (<link linkend="PangoAttrType">PangoAttrType</link> type);</programlisting>
+<para>
+Fetches the attribute type name passed in when registering the type using
+<link linkend="pango-attr-type-register"><function>pango_attr_type_register()</function></link>.
+</para>
+<para>
+The returned value is an interned string (see <link linkend="g-intern-string"><function>g_intern_string()</function></link> for what
+that means) that should not be modified or freed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>type</parameter>&#160;:</term>
+<listitem><simpara> an attribute type ID to fetch the name for
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the type ID name (which may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>), or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>type</parameter> is
+a built-in Pango attribute type or invalid. 
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.22</para></refsect2>
+<refsect2 id="pango-attribute-init" role="function" condition="since:1.20">
+<title>pango_attribute_init ()</title>
+<indexterm zone="pango-attribute-init" role="1.20"><primary sortas="pango_attribute_init">pango_attribute_init</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attribute_init                (<link linkend="PangoAttribute">PangoAttribute</link> *attr,
+                                                         const <link linkend="PangoAttrClass">PangoAttrClass</link> *klass);</programlisting>
+<para>
+Initializes <parameter>attr</parameter>'s klass to <parameter>klass</parameter>,
+it's start_index to <link linkend="PANGO-ATTR-INDEX-FROM-TEXT-BEGINNING--CAPS"><literal>PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING</literal></link>
+and end_index to <link linkend="PANGO-ATTR-INDEX-TO-TEXT-END--CAPS"><literal>PANGO_ATTR_INDEX_TO_TEXT_END</literal></link>
+such that the attribute applies
+to the entire text by default.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>klass</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttributeClass"><type>PangoAttributeClass</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.20</para></refsect2>
+<refsect2 id="pango-attribute-copy" role="function">
+<title>pango_attribute_copy ()</title>
+<indexterm zone="pango-attribute-copy"><primary sortas="pango_attribute_copy">pango_attribute_copy</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attribute_copy                (const <link linkend="PangoAttribute">PangoAttribute</link> *attr);</programlisting>
+<para>
+Make a copy of an attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attribute-equal" role="function">
+<title>pango_attribute_equal ()</title>
+<indexterm zone="pango-attribute-equal"><primary sortas="pango_attribute_equal">pango_attribute_equal</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_attribute_equal               (const <link linkend="PangoAttribute">PangoAttribute</link> *attr1,
+                                                         const <link linkend="PangoAttribute">PangoAttribute</link> *attr2);</programlisting>
+<para>
+Compare two attributes for equality. This compares only the
+actual value of the two attributes and not the ranges that the
+attributes apply to.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>attr1</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attr2</parameter>&#160;:</term>
+<listitem><simpara> another <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the two attributes have the same value.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attribute-destroy" role="function">
+<title>pango_attribute_destroy ()</title>
+<indexterm zone="pango-attribute-destroy"><primary sortas="pango_attribute_destroy">pango_attribute_destroy</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attribute_destroy             (<link linkend="PangoAttribute">PangoAttribute</link> *attr);</programlisting>
+<para>
+Destroy a <link linkend="PangoAttribute"><type>PangoAttribute</type></link> and free all associated memory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-language-new" role="function">
+<title>pango_attr_language_new ()</title>
+<indexterm zone="pango-attr-language-new"><primary sortas="pango_attr_language_new">pango_attr_language_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_language_new             (<link linkend="PangoLanguage">PangoLanguage</link> *language);</programlisting>
+<para>
+Create a new language tag attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> language tag
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-family-new" role="function">
+<title>pango_attr_family_new ()</title>
+<indexterm zone="pango-attr-family-new"><primary sortas="pango_attr_family_new">pango_attr_family_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_family_new               (const <link linkend="char">char</link> *family);</programlisting>
+<para>
+Create a new font family attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>family</parameter>&#160;:</term>
+<listitem><simpara> the family or comma separated list of families
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-style-new" role="function">
+<title>pango_attr_style_new ()</title>
+<indexterm zone="pango-attr-style-new"><primary sortas="pango_attr_style_new">pango_attr_style_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_style_new                (<link linkend="PangoStyle">PangoStyle</link> style);</programlisting>
+<para>
+Create a new font slant style attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>style</parameter>&#160;:</term>
+<listitem><simpara> the slant style
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-variant-new" role="function">
+<title>pango_attr_variant_new ()</title>
+<indexterm zone="pango-attr-variant-new"><primary sortas="pango_attr_variant_new">pango_attr_variant_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_variant_new              (<link linkend="PangoVariant">PangoVariant</link> variant);</programlisting>
+<para>
+Create a new font variant attribute (normal or small caps)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>variant</parameter>&#160;:</term>
+<listitem><simpara> the variant
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-stretch-new" role="function">
+<title>pango_attr_stretch_new ()</title>
+<indexterm zone="pango-attr-stretch-new"><primary sortas="pango_attr_stretch_new">pango_attr_stretch_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_stretch_new              (<link linkend="PangoStretch">PangoStretch</link> stretch);</programlisting>
+<para>
+Create a new font stretch attribute</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>stretch</parameter>&#160;:</term>
+<listitem><simpara> the stretch
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-weight-new" role="function">
+<title>pango_attr_weight_new ()</title>
+<indexterm zone="pango-attr-weight-new"><primary sortas="pango_attr_weight_new">pango_attr_weight_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_weight_new               (<link linkend="PangoWeight">PangoWeight</link> weight);</programlisting>
+<para>
+Create a new font weight attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>weight</parameter>&#160;:</term>
+<listitem><simpara> the weight
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-size-new" role="function">
+<title>pango_attr_size_new ()</title>
+<indexterm zone="pango-attr-size-new"><primary sortas="pango_attr_size_new">pango_attr_size_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_size_new                 (<link linkend="int">int</link> size);</programlisting>
+<para>
+Create a new font-size attribute in fractional points.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>size</parameter>&#160;:</term>
+<listitem><simpara> the font size, in <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link><!-- -->ths of a point.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-size-new-absolute" role="function" condition="since:1.8">
+<title>pango_attr_size_new_absolute ()</title>
+<indexterm zone="pango-attr-size-new-absolute" role="1.8"><primary sortas="pango_attr_size_new_absolute">pango_attr_size_new_absolute</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_size_new_absolute        (<link linkend="int">int</link> size);</programlisting>
+<para>
+Create a new font-size attribute in device units.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>size</parameter>&#160;:</term>
+<listitem><simpara> the font size, in <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link><!-- -->ths of a device unit.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-attr-font-desc-new" role="function">
+<title>pango_attr_font_desc_new ()</title>
+<indexterm zone="pango-attr-font-desc-new"><primary sortas="pango_attr_font_desc_new">pango_attr_font_desc_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_font_desc_new            (const <link linkend="PangoFontDescription">PangoFontDescription</link> *desc);</programlisting>
+<para>
+Create a new font description attribute. This attribute
+allows setting family, style, weight, variant, stretch,
+and size simultaneously.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> the font description
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>  the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-foreground-new" role="function">
+<title>pango_attr_foreground_new ()</title>
+<indexterm zone="pango-attr-foreground-new"><primary sortas="pango_attr_foreground_new">pango_attr_foreground_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_foreground_new           (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);</programlisting>
+<para>
+Create a new foreground color attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>red</parameter>&#160;:</term>
+<listitem><simpara> the red value (ranging from 0 to 65535)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>green</parameter>&#160;:</term>
+<listitem><simpara> the green value
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>blue</parameter>&#160;:</term>
+<listitem><simpara> the blue value
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-background-new" role="function">
+<title>pango_attr_background_new ()</title>
+<indexterm zone="pango-attr-background-new"><primary sortas="pango_attr_background_new">pango_attr_background_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_background_new           (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);</programlisting>
+<para>
+Create a new background color attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>red</parameter>&#160;:</term>
+<listitem><simpara> the red value (ranging from 0 to 65535)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>green</parameter>&#160;:</term>
+<listitem><simpara> the green value
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>blue</parameter>&#160;:</term>
+<listitem><simpara> the blue value
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-strikethrough-new" role="function">
+<title>pango_attr_strikethrough_new ()</title>
+<indexterm zone="pango-attr-strikethrough-new"><primary sortas="pango_attr_strikethrough_new">pango_attr_strikethrough_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_strikethrough_new        (<link linkend="gboolean">gboolean</link> strikethrough);</programlisting>
+<para>
+Create a new strike-through attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>strikethrough</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the text should be struck-through.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-strikethrough-color-new" role="function" condition="since:1.8">
+<title>pango_attr_strikethrough_color_new ()</title>
+<indexterm zone="pango-attr-strikethrough-color-new" role="1.8"><primary sortas="pango_attr_strikethrough_color_new">pango_attr_strikethrough_color_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_strikethrough_color_new  (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);</programlisting>
+<para>
+Create a new strikethrough color attribute. This attribute
+modifies the color of strikethrough lines. If not set, strikethrough
+lines will use the foreground color.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>red</parameter>&#160;:</term>
+<listitem><simpara> the red value (ranging from 0 to 65535)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>green</parameter>&#160;:</term>
+<listitem><simpara> the green value
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>blue</parameter>&#160;:</term>
+<listitem><simpara> the blue value
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-attr-underline-new" role="function">
+<title>pango_attr_underline_new ()</title>
+<indexterm zone="pango-attr-underline-new"><primary sortas="pango_attr_underline_new">pango_attr_underline_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_underline_new            (<link linkend="PangoUnderline">PangoUnderline</link> underline);</programlisting>
+<para>
+Create a new underline-style attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>underline</parameter>&#160;:</term>
+<listitem><simpara> the underline style.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-underline-color-new" role="function" condition="since:1.8">
+<title>pango_attr_underline_color_new ()</title>
+<indexterm zone="pango-attr-underline-color-new" role="1.8"><primary sortas="pango_attr_underline_color_new">pango_attr_underline_color_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_underline_color_new      (<link linkend="guint16">guint16</link> red,
+                                                         <link linkend="guint16">guint16</link> green,
+                                                         <link linkend="guint16">guint16</link> blue);</programlisting>
+<para>
+Create a new underline color attribute. This attribute
+modifies the color of underlines. If not set, underlines
+will use the foreground color.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>red</parameter>&#160;:</term>
+<listitem><simpara> the red value (ranging from 0 to 65535)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>green</parameter>&#160;:</term>
+<listitem><simpara> the green value
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>blue</parameter>&#160;:</term>
+<listitem><simpara> the blue value
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="PangoUnderline" role="enum">
+<title>enum PangoUnderline</title>
+<indexterm zone="PangoUnderline"><primary sortas="PangoUnderline">PangoUnderline</primary></indexterm><programlisting>typedef enum {
+  PANGO_UNDERLINE_NONE,
+  PANGO_UNDERLINE_SINGLE,
+  PANGO_UNDERLINE_DOUBLE,
+  PANGO_UNDERLINE_LOW,
+  PANGO_UNDERLINE_ERROR
+} PangoUnderline;
+</programlisting>
+<para>
+the <link linkend="PangoUnderline"><type>PangoUnderline</type></link> enumeration is used to specify
+whether text should be underlined, and if so, the type
+of underlining.
+</para><variablelist role="enum">
+<varlistentry id="PANGO-UNDERLINE-NONE--CAPS" role="constant">
+<term><literal>PANGO_UNDERLINE_NONE</literal></term>
+<listitem><simpara>no underline should be drawn
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-UNDERLINE-SINGLE--CAPS" role="constant">
+<term><literal>PANGO_UNDERLINE_SINGLE</literal></term>
+<listitem><simpara>a single underline should be drawn
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-UNDERLINE-DOUBLE--CAPS" role="constant">
+<term><literal>PANGO_UNDERLINE_DOUBLE</literal></term>
+<listitem><simpara>a double underline should be drawn
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-UNDERLINE-LOW--CAPS" role="constant">
+<term><literal>PANGO_UNDERLINE_LOW</literal></term>
+<listitem><simpara>a single underline should be drawn at a position
+                      beneath the ink extents of the text being
+                      underlined. This should be used only for underlining
+                      single characters, such as for keyboard
+                      accelerators. <link linkend="PANGO-UNDERLINE-SINGLE--CAPS"><literal>PANGO_UNDERLINE_SINGLE</literal></link> should
+                      be used for extended portions of text.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-UNDERLINE-ERROR--CAPS" role="constant">
+<term><literal>PANGO_UNDERLINE_ERROR</literal></term>
+<listitem><simpara>a wavy underline should be drawn below.
+                      This underline is typically used to indicate
+                      an error such as a possilble mispelling; in some
+                      cases a contrasting color may automatically
+                      be used. This type of underlining is available
+                      since Pango 1.4.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-UNDERLINE--CAPS" role="macro">
+<title>PANGO_TYPE_UNDERLINE</title>
+<indexterm zone="PANGO-TYPE-UNDERLINE--CAPS"><primary sortas="PANGO_TYPE_UNDERLINE">PANGO_TYPE_UNDERLINE</primary></indexterm><programlisting>#define PANGO_TYPE_UNDERLINE (pango_underline_get_type())
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoUnderline"><type>PangoUnderline</type></link>.
+</para></refsect2>
+<refsect2 id="pango-attr-shape-new" role="function">
+<title>pango_attr_shape_new ()</title>
+<indexterm zone="pango-attr-shape-new"><primary sortas="pango_attr_shape_new">pango_attr_shape_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_shape_new                (const <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         const <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect);</programlisting>
+<para>
+Create a new shape attribute. A shape is used to impose a
+particular ink and logical rectangle on the result of shaping a
+particular glyph. This might be used, for instance, for
+embedding a picture or a widget inside a <link linkend="PangoLayout"><type>PangoLayout</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara>     ink rectangle to assign to each character
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> logical rectangle to assign to each character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-shape-new-with-data" role="function" condition="since:1.8">
+<title>pango_attr_shape_new_with_data ()</title>
+<indexterm zone="pango-attr-shape-new-with-data" role="1.8"><primary sortas="pango_attr_shape_new_with_data">pango_attr_shape_new_with_data</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_shape_new_with_data      (const <link linkend="PangoRectangle">PangoRectangle</link> *ink_rect,
+                                                         const <link linkend="PangoRectangle">PangoRectangle</link> *logical_rect,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="PangoAttrDataCopyFunc">PangoAttrDataCopyFunc</link> copy_func,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> destroy_func);</programlisting>
+<para>
+Like <link linkend="pango-attr-shape-new"><function>pango_attr_shape_new()</function></link>, but a user data pointer is also
+provided; this pointer can be accessed when later
+rendering the glyph.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ink_rect</parameter>&#160;:</term>
+<listitem><simpara>     ink rectangle to assign to each character
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logical_rect</parameter>&#160;:</term>
+<listitem><simpara> logical rectangle to assign to each character
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara>         user data pointer
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>copy_func</parameter>&#160;:</term>
+<listitem><simpara>    function to copy <parameter>data</parameter> when the attribute
+               is copied. If <link linkend="NULL--CAPS"><literal>NULL</literal></link>, <parameter>data</parameter> is simply copied
+               as a pointer.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>destroy_func</parameter>&#160;:</term>
+<listitem><simpara> function to free <parameter>data</parameter> when the attribute
+               is freed, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="PangoAttrDataCopyFunc" role="function">
+<title>PangoAttrDataCopyFunc ()</title>
+<indexterm zone="PangoAttrDataCopyFunc"><primary sortas="PangoAttrDataCopyFunc">PangoAttrDataCopyFunc</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link>            (*PangoAttrDataCopyFunc)            (<link linkend="gconstpointer">gconstpointer</link> data);</programlisting>
+<para>
+A copy function passed to attribute new functions that take
+user data.
+</para><variablelist role="params">
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara>the user data
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>a new copy of <parameter>data</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-scale-new" role="function">
+<title>pango_attr_scale_new ()</title>
+<indexterm zone="pango-attr-scale-new"><primary sortas="pango_attr_scale_new">pango_attr_scale_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_scale_new                (<link linkend="double">double</link> scale_factor);</programlisting>
+<para>
+Create a new font size scale attribute. The base font for the
+affected text will have its size multiplied by <parameter>scale_factor</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>scale_factor</parameter>&#160;:</term>
+<listitem><simpara> factor to scale the font
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-SCALE-XX-SMALL--CAPS" role="macro">
+<title>PANGO_SCALE_XX_SMALL</title>
+<indexterm zone="PANGO-SCALE-XX-SMALL--CAPS"><primary sortas="PANGO_SCALE_XX_SMALL">PANGO_SCALE_XX_SMALL</primary></indexterm><programlisting>#define PANGO_SCALE_XX_SMALL ((double)0.5787037037037)
+</programlisting>
+<para>
+The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)).
+</para></refsect2>
+<refsect2 id="PANGO-SCALE-X-SMALL--CAPS" role="macro">
+<title>PANGO_SCALE_X_SMALL</title>
+<indexterm zone="PANGO-SCALE-X-SMALL--CAPS"><primary sortas="PANGO_SCALE_X_SMALL">PANGO_SCALE_X_SMALL</primary></indexterm><programlisting>#define PANGO_SCALE_X_SMALL  ((double)0.6444444444444)
+</programlisting>
+<para>
+The scale factor for two shrinking steps (1 / (1.2 * 1.2)).
+</para></refsect2>
+<refsect2 id="PANGO-SCALE-SMALL--CAPS" role="macro">
+<title>PANGO_SCALE_SMALL</title>
+<indexterm zone="PANGO-SCALE-SMALL--CAPS"><primary sortas="PANGO_SCALE_SMALL">PANGO_SCALE_SMALL</primary></indexterm><programlisting>#define PANGO_SCALE_SMALL    ((double)0.8333333333333)
+</programlisting>
+<para>
+The scale factor for one shrinking step (1 / 1.2).
+</para></refsect2>
+<refsect2 id="PANGO-SCALE-MEDIUM--CAPS" role="macro">
+<title>PANGO_SCALE_MEDIUM</title>
+<indexterm zone="PANGO-SCALE-MEDIUM--CAPS"><primary sortas="PANGO_SCALE_MEDIUM">PANGO_SCALE_MEDIUM</primary></indexterm><programlisting>#define PANGO_SCALE_MEDIUM   ((double)1.0)
+</programlisting>
+<para>
+The scale factor for normal size (1.0).
+</para></refsect2>
+<refsect2 id="PANGO-SCALE-LARGE--CAPS" role="macro">
+<title>PANGO_SCALE_LARGE</title>
+<indexterm zone="PANGO-SCALE-LARGE--CAPS"><primary sortas="PANGO_SCALE_LARGE">PANGO_SCALE_LARGE</primary></indexterm><programlisting>#define PANGO_SCALE_LARGE    ((double)1.2)
+</programlisting>
+<para>
+The scale factor for one magnification step (1.2).
+</para></refsect2>
+<refsect2 id="PANGO-SCALE-X-LARGE--CAPS" role="macro">
+<title>PANGO_SCALE_X_LARGE</title>
+<indexterm zone="PANGO-SCALE-X-LARGE--CAPS"><primary sortas="PANGO_SCALE_X_LARGE">PANGO_SCALE_X_LARGE</primary></indexterm><programlisting>#define PANGO_SCALE_X_LARGE  ((double)1.4399999999999)
+</programlisting>
+<para>
+The scale factor for two magnification steps (1.2 * 1.2).
+</para></refsect2>
+<refsect2 id="PANGO-SCALE-XX-LARGE--CAPS" role="macro">
+<title>PANGO_SCALE_XX_LARGE</title>
+<indexterm zone="PANGO-SCALE-XX-LARGE--CAPS"><primary sortas="PANGO_SCALE_XX_LARGE">PANGO_SCALE_XX_LARGE</primary></indexterm><programlisting>#define PANGO_SCALE_XX_LARGE ((double)1.728)
+</programlisting>
+<para>
+The scale factor for three magnification steps (1.2 * 1.2 * 1.2).
+</para></refsect2>
+<refsect2 id="pango-attr-rise-new" role="function">
+<title>pango_attr_rise_new ()</title>
+<indexterm zone="pango-attr-rise-new"><primary sortas="pango_attr_rise_new">pango_attr_rise_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_rise_new                 (<link linkend="int">int</link> rise);</programlisting>
+<para>
+Create a new baseline displacement attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>rise</parameter>&#160;:</term>
+<listitem><simpara> the amount that the text should be displaced vertically,
+       in Pango units. Positive values displace the text upwards.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-letter-spacing-new" role="function" condition="since:1.6">
+<title>pango_attr_letter_spacing_new ()</title>
+<indexterm zone="pango-attr-letter-spacing-new" role="1.6"><primary sortas="pango_attr_letter_spacing_new">pango_attr_letter_spacing_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_letter_spacing_new       (<link linkend="int">int</link> letter_spacing);</programlisting>
+<para>
+Create a new letter-spacing attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>letter_spacing</parameter>&#160;:</term>
+<listitem><simpara> amount of extra space to add between graphemes
+  of the text, in Pango units.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.6</para></refsect2>
+<refsect2 id="pango-attr-fallback-new" role="function" condition="since:1.4">
+<title>pango_attr_fallback_new ()</title>
+<indexterm zone="pango-attr-fallback-new" role="1.4"><primary sortas="pango_attr_fallback_new">pango_attr_fallback_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_fallback_new             (<link linkend="gboolean">gboolean</link> enable_fallback);</programlisting>
+<para>
+Create a new font fallback attribute.
+</para>
+<para>
+If fallback is disabled, characters will only be used from the
+closest matching font on the system. No fallback will be done to
+other fonts on the system that might contain the characters in the
+text.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>enable_fallback</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if we should fall back on other fonts
+                  for characters the active font is missing.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-attr-gravity-new" role="function" condition="since:1.16">
+<title>pango_attr_gravity_new ()</title>
+<indexterm zone="pango-attr-gravity-new" role="1.16"><primary sortas="pango_attr_gravity_new">pango_attr_gravity_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_gravity_new              (<link linkend="PangoGravity">PangoGravity</link> gravity);</programlisting>
+<para>
+Create a new gravity attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>gravity</parameter>&#160;:</term>
+<listitem><simpara> the gravity value; should not be <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-attr-gravity-hint-new" role="function" condition="since:1.16">
+<title>pango_attr_gravity_hint_new ()</title>
+<indexterm zone="pango-attr-gravity-hint-new" role="1.16"><primary sortas="pango_attr_gravity_hint_new">pango_attr_gravity_hint_new</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_gravity_hint_new         (<link linkend="PangoGravityHint">PangoGravityHint</link> hint);</programlisting>
+<para>
+Create a new gravity hint attribute.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>hint</parameter>&#160;:</term>
+<listitem><simpara> the gravity hint value.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttribute"><type>PangoAttribute</type></link>, which should be
+              freed with <link linkend="pango-attribute-destroy"><function>pango_attribute_destroy()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoColor" role="struct">
+<title>PangoColor</title>
+<indexterm zone="PangoColor"><primary sortas="PangoColor">PangoColor</primary></indexterm><programlisting>typedef struct {
+  guint16 red;
+  guint16 green;
+  guint16 blue;
+} PangoColor;
+</programlisting>
+<para>
+The <link linkend="PangoColor"><type>PangoColor</type></link> structure is used to
+represent a color in an uncalibrated RGB color-space.
+</para><variablelist role="struct">
+<varlistentry>
+<term><link linkend="guint16">guint16</link>&#160;<structfield>red</structfield>;</term>
+<listitem><simpara>The red component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint16">guint16</link>&#160;<structfield>green</structfield>;</term>
+<listitem><simpara>The green component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><link linkend="guint16">guint16</link>&#160;<structfield>blue</structfield>;</term>
+<listitem><simpara>The blue component of the color. This is a value between 0 and 65535, 
+      with 65535 indicating full intensity.
+</simpara></listitem>
+</varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-TYPE-COLOR--CAPS" role="macro">
+<title>PANGO_TYPE_COLOR</title>
+<indexterm zone="PANGO-TYPE-COLOR--CAPS"><primary sortas="PANGO_TYPE_COLOR">PANGO_TYPE_COLOR</primary></indexterm><programlisting>#define PANGO_TYPE_COLOR pango_color_get_type ()
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoColor"><type>PangoColor</type></link>.
+</para></refsect2>
+<refsect2 id="pango-color-parse" role="function">
+<title>pango_color_parse ()</title>
+<indexterm zone="pango-color-parse"><primary sortas="pango_color_parse">pango_color_parse</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_color_parse                   (<link linkend="PangoColor">PangoColor</link> *color,
+                                                         const <link linkend="char">char</link> *spec);</programlisting>
+<para>
+Fill in the fields of a color from a string specification. The
+string can either one of a large set of standard names. (Taken
+from the X11 <filename>rgb.txt</filename> file), or it can be a hex value in the
+form '&num;rgb' '&num;rrggbb' '&num;rrrgggbbb' or '&num;rrrrggggbbbb' where
+'r', 'g' and 'b' are hex digits of the red, green, and blue
+components of the color, respectively. (White in the four
+forms is '&num;fff' '&num;ffffff' '&num;fffffffff' and '&num;ffffffffffff')</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoColor"><type>PangoColor</type></link> structure in which to store the result, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>spec</parameter>&#160;:</term>
+<listitem><simpara> a string specifying the new color
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if parsing of the specifier succeeded,
+  otherwise false.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-color-copy" role="function">
+<title>pango_color_copy ()</title>
+<indexterm zone="pango-color-copy"><primary sortas="pango_color_copy">pango_color_copy</primary></indexterm><programlisting><link linkend="PangoColor">PangoColor</link> *        pango_color_copy                    (const <link linkend="PangoColor">PangoColor</link> *src);</programlisting>
+<para>
+Creates a copy of <parameter>src</parameter>, which should be freed with
+<link linkend="pango-color-free"><function>pango_color_free()</function></link>. Primarily used by language bindings,
+not that useful otherwise (since colors can just be copied
+by assignment in C).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>src</parameter>&#160;:</term>
+<listitem><simpara> color to copy, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoColor"><type>PangoColor</type></link>, which should
+              be freed with <link linkend="pango-color-free"><function>pango_color_free()</function></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if <parameter>src</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-color-free" role="function">
+<title>pango_color_free ()</title>
+<indexterm zone="pango-color-free"><primary sortas="pango_color_free">pango_color_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_color_free                    (<link linkend="PangoColor">PangoColor</link> *color);</programlisting>
+<para>
+Frees a color allocated by <link linkend="pango-color-copy"><function>pango_color_copy()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara> an allocated <link linkend="PangoColor"><type>PangoColor</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-color-to-string" role="function" condition="since:1.16">
+<title>pango_color_to_string ()</title>
+<indexterm zone="pango-color-to-string" role="1.16"><primary sortas="pango_color_to_string">pango_color_to_string</primary></indexterm><programlisting><link linkend="gchar">gchar</link> *             pango_color_to_string               (const <link linkend="PangoColor">PangoColor</link> *color);</programlisting>
+<para>
+Returns a textual specification of <parameter>color</parameter> in the hexadecimal form
+<literal>&num;rrrrggggbbbb</literal>, where <literal>r</literal>,
+<literal>g</literal> and <literal>b</literal> are hex digits representing
+the red, green, and blue components respectively.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoColor"><type>PangoColor</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly-allocated text string that must be freed with <link linkend="g-free"><function>g_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoAttrList" role="struct">
+<title>PangoAttrList</title>
+<indexterm zone="PangoAttrList"><primary sortas="PangoAttrList">PangoAttrList</primary></indexterm><programlisting>typedef struct _PangoAttrList PangoAttrList;</programlisting>
+<para>
+The <link linkend="PangoAttrList"><type>PangoAttrList</type></link> structure represents a list of attributes
+that apply to a section of text. The attributes are, in general,
+allowed to overlap in an arbitrary fashion, however, if the
+attributes are manipulated only through <link linkend="pango-attr-list-change"><function>pango_attr_list_change()</function></link>,
+the overlap between properties will meet stricter criteria.
+</para>
+<para>
+Since the <link linkend="PangoAttrList"><type>PangoAttrList</type></link> structure is stored as a linear list,
+it is not suitable for storing attributes for large amounts
+of text. In general, you should not use a single <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+for more than one paragraph of text.
+</para></refsect2>
+<refsect2 id="PANGO-TYPE-ATTR-LIST--CAPS" role="macro">
+<title>PANGO_TYPE_ATTR_LIST</title>
+<indexterm zone="PANGO-TYPE-ATTR-LIST--CAPS"><primary sortas="PANGO_TYPE_ATTR_LIST">PANGO_TYPE_ATTR_LIST</primary></indexterm><programlisting>#define PANGO_TYPE_ATTR_LIST pango_attr_list_get_type ()
+</programlisting>
+<para>
+The <link linkend="GObject"><type>GObject</type></link> type for <link linkend="PangoAttrList"><type>PangoAttrList</type></link>.
+</para></refsect2>
+<refsect2 id="pango-attr-list-new" role="function">
+<title>pango_attr_list_new ()</title>
+<indexterm zone="pango-attr-list-new"><primary sortas="pango_attr_list_new">pango_attr_list_new</primary></indexterm><programlisting><link linkend="PangoAttrList">PangoAttrList</link> *     pango_attr_list_new                 (void);</programlisting>
+<para>
+Create a new empty attribute list with a reference count of one.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, which should
+              be freed with <link linkend="pango-attr-list-unref"><function>pango_attr_list_unref()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-ref" role="function" condition="since:1.10">
+<title>pango_attr_list_ref ()</title>
+<indexterm zone="pango-attr-list-ref" role="1.10"><primary sortas="pango_attr_list_ref">pango_attr_list_ref</primary></indexterm><programlisting><link linkend="PangoAttrList">PangoAttrList</link> *     pango_attr_list_ref                 (<link linkend="PangoAttrList">PangoAttrList</link> *list);</programlisting>
+<para>
+Increase the reference count of the given attribute list by one.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The attribute list passed in
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-attr-list-unref" role="function">
+<title>pango_attr_list_unref ()</title>
+<indexterm zone="pango-attr-list-unref"><primary sortas="pango_attr_list_unref">pango_attr_list_unref</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_list_unref               (<link linkend="PangoAttrList">PangoAttrList</link> *list);</programlisting>
+<para>
+Decrease the reference count of the given attribute list by one.
+If the result is zero, free the attribute list and the attributes
+it contains.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-copy" role="function">
+<title>pango_attr_list_copy ()</title>
+<indexterm zone="pango-attr-list-copy"><primary sortas="pango_attr_list_copy">pango_attr_list_copy</primary></indexterm><programlisting><link linkend="PangoAttrList">PangoAttrList</link> *     pango_attr_list_copy                (<link linkend="PangoAttrList">PangoAttrList</link> *list);</programlisting>
+<para>
+Copy <parameter>list</parameter> and return an identical new list.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, may be <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttrList"><type>PangoAttrList</type></link>, with a
+              reference count of one, which should
+              be freed with <link linkend="pango-attr-list-unref"><function>pango_attr_list_unref()</function></link>.
+              Returns <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>list</parameter> was <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-insert" role="function">
+<title>pango_attr_list_insert ()</title>
+<indexterm zone="pango-attr-list-insert"><primary sortas="pango_attr_list_insert">pango_attr_list_insert</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_list_insert              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttribute">PangoAttribute</link> *attr);</programlisting>
+<para>
+Insert the given attribute into the <link linkend="PangoAttrList"><type>PangoAttrList</type></link>. It will
+be inserted after all other attributes with a matching
+<parameter>start_index</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara> the attribute to insert. Ownership of this value is
+       assumed by the list.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-insert-before" role="function">
+<title>pango_attr_list_insert_before ()</title>
+<indexterm zone="pango-attr-list-insert-before"><primary sortas="pango_attr_list_insert_before">pango_attr_list_insert_before</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_list_insert_before       (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttribute">PangoAttribute</link> *attr);</programlisting>
+<para>
+Insert the given attribute into the <link linkend="PangoAttrList"><type>PangoAttrList</type></link>. It will
+be inserted before all other attributes with a matching
+<parameter>start_index</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara> the attribute to insert. Ownership of this value is
+       assumed by the list.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-change" role="function">
+<title>pango_attr_list_change ()</title>
+<indexterm zone="pango-attr-list-change"><primary sortas="pango_attr_list_change">pango_attr_list_change</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_list_change              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttribute">PangoAttribute</link> *attr);</programlisting>
+<para>
+Insert the given attribute into the <link linkend="PangoAttrList"><type>PangoAttrList</type></link>. It will
+replace any attributes of the same type on that segment
+and be merged with any adjoining attributes that are identical.
+</para>
+<para>
+This function is slower than <link linkend="pango-attr-list-insert"><function>pango_attr_list_insert()</function></link> for
+creating a attribute list in order (potentially much slower
+for large lists). However, <link linkend="pango-attr-list-insert"><function>pango_attr_list_insert()</function></link> is not
+suitable for continually changing a set of attributes
+since it never removes or combines existing attributes.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>attr</parameter>&#160;:</term>
+<listitem><simpara> the attribute to insert. Ownership of this value is
+       assumed by the list.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-splice" role="function">
+<title>pango_attr_list_splice ()</title>
+<indexterm zone="pango-attr-list-splice"><primary sortas="pango_attr_list_splice">pango_attr_list_splice</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_list_splice              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttrList">PangoAttrList</link> *other,
+                                                         <link linkend="gint">gint</link> pos,
+                                                         <link linkend="gint">gint</link> len);</programlisting>
+<para>
+This function opens up a hole in <parameter>list</parameter>, fills it in with attributes from
+the left, and then merges <parameter>other</parameter> on top of the hole.
+</para>
+<para>
+This operation is equivalent to stretching every attribute
+that applies at position <parameter>pos</parameter> in <parameter>list</parameter> by an amount <parameter>len</parameter>,
+and then calling <link linkend="pango-attr-list-change"><function>pango_attr_list_change()</function></link> with a copy
+of each attribute in <parameter>other</parameter> in sequence (offset in position by <parameter>pos</parameter>).
+</para>
+<para>
+This operation proves useful for, for instance, inserting
+a pre-edit string in the middle of an edit buffer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>other</parameter>&#160;:</term>
+<listitem><simpara> another <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>pos</parameter>&#160;:</term>
+<listitem><simpara> the position in <parameter>list</parameter> at which to insert <parameter>other</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>len</parameter>&#160;:</term>
+<listitem><simpara> the length of the spliced segment. (Note that this
+      must be specified since the attributes in <parameter>other</parameter>
+      may only be present at some subsection of this range)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-filter" role="function" condition="since:1.2">
+<title>pango_attr_list_filter ()</title>
+<indexterm zone="pango-attr-list-filter" role="1.2"><primary sortas="pango_attr_list_filter">pango_attr_list_filter</primary></indexterm><programlisting><link linkend="PangoAttrList">PangoAttrList</link> *     pango_attr_list_filter              (<link linkend="PangoAttrList">PangoAttrList</link> *list,
+                                                         <link linkend="PangoAttrFilterFunc">PangoAttrFilterFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+Given a <link linkend="PangoAttrList"><type>PangoAttrList</type></link> and callback function, removes any elements
+of <parameter>list</parameter> for which <parameter>func</parameter> returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> and inserts them into
+a new list.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>func</parameter>&#160;:</term>
+<listitem><simpara> callback function; returns <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if an attribute
+       should be filtered out.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> Data to be passed to <parameter>func</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new <link linkend="PangoAttrList"><type>PangoAttrList</type></link> or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if
+ no attributes of the given types were found.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="PangoAttrFilterFunc" role="function">
+<title>PangoAttrFilterFunc ()</title>
+<indexterm zone="PangoAttrFilterFunc"><primary sortas="PangoAttrFilterFunc">PangoAttrFilterFunc</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            (*PangoAttrFilterFunc)              (<link linkend="PangoAttribute">PangoAttribute</link> *attribute,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+A predicate function used by <link linkend="pango-attr-list-filter"><function>pango_attr_list_filter()</function></link>
+to filter out a subset of attributes for a list.
+</para><variablelist role="params">
+<varlistentry><term><parameter>attribute</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoAttribute"><type>PangoAttribute</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara>callback data passed to <link linkend="pango-attr-list-filter"><function>pango_attr_list_filter()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>%TRUE if the attribute should be filtered out
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-list-get-iterator" role="function">
+<title>pango_attr_list_get_iterator ()</title>
+<indexterm zone="pango-attr-list-get-iterator"><primary sortas="pango_attr_list_get_iterator">pango_attr_list_get_iterator</primary></indexterm><programlisting><link linkend="PangoAttrIterator">PangoAttrIterator</link> * pango_attr_list_get_iterator        (<link linkend="PangoAttrList">PangoAttrList</link> *list);</programlisting>
+<para>
+Create a iterator initialized to the beginning of the list.
+<parameter>list</parameter> must not be modified until this iterator is freed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>list</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>, which should
+              be freed with <link linkend="pango-attr-iterator-destroy"><function>pango_attr_iterator_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoAttrIterator" role="struct">
+<title>PangoAttrIterator</title>
+<indexterm zone="PangoAttrIterator"><primary sortas="PangoAttrIterator">PangoAttrIterator</primary></indexterm><programlisting>typedef struct _PangoAttrIterator PangoAttrIterator;</programlisting>
+<para>
+The <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link> structure is used to represent an
+iterator through a <link linkend="PangoAttrList"><type>PangoAttrList</type></link>. A new iterator is created
+with <link linkend="pango-attr-list-get-iterator"><function>pango_attr_list_get_iterator()</function></link>. Once the iterator
+is created, it can be advanced through the style changes
+in the text using <link linkend="pango-attr-iterator-next"><function>pango_attr_iterator_next()</function></link>. At each
+style change, the range of the current style segment and the
+attributes currently in effect can be queried.
+</para></refsect2>
+<refsect2 id="pango-attr-iterator-copy" role="function">
+<title>pango_attr_iterator_copy ()</title>
+<indexterm zone="pango-attr-iterator-copy"><primary sortas="pango_attr_iterator_copy">pango_attr_iterator_copy</primary></indexterm><programlisting><link linkend="PangoAttrIterator">PangoAttrIterator</link> * pango_attr_iterator_copy            (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);</programlisting>
+<para>
+Copy a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>, which should
+              be freed with <link linkend="pango-attr-iterator-destroy"><function>pango_attr_iterator_destroy()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-iterator-next" role="function">
+<title>pango_attr_iterator_next ()</title>
+<indexterm zone="pango-attr-iterator-next"><primary sortas="pango_attr_iterator_next">pango_attr_iterator_next</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_attr_iterator_next            (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);</programlisting>
+<para>
+Advance the iterator until the next change of style.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if the iterator is at the end of the list, otherwise <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-iterator-range" role="function">
+<title>pango_attr_iterator_range ()</title>
+<indexterm zone="pango-attr-iterator-range"><primary sortas="pango_attr_iterator_range">pango_attr_iterator_range</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_iterator_range           (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator,
+                                                         <link linkend="gint">gint</link> *start,
+                                                         <link linkend="gint">gint</link> *end);</programlisting>
+<para>
+Get the range of the current segment. Note that the
+stored return values are signed, not unsigned like
+the values in <link linkend="PangoAttribute"><type>PangoAttribute</type></link>. To deal with this API
+oversight, stored return values that wouldn't fit into
+a signed integer are clamped to <link linkend="G-MAXINT--CAPS"><literal>G_MAXINT</literal></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>start</parameter>&#160;:</term>
+<listitem><simpara> location to store the start of the range
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>end</parameter>&#160;:</term>
+<listitem><simpara> location to store the end of the range
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-iterator-get" role="function">
+<title>pango_attr_iterator_get ()</title>
+<indexterm zone="pango-attr-iterator-get"><primary sortas="pango_attr_iterator_get">pango_attr_iterator_get</primary></indexterm><programlisting><link linkend="PangoAttribute">PangoAttribute</link> *    pango_attr_iterator_get             (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator,
+                                                         <link linkend="PangoAttrType">PangoAttrType</link> type);</programlisting>
+<para>
+Find the current attribute of a particular type at the iterator
+location. When multiple attributes of the same type overlap,
+the attribute whose range starts closest to the current location
+is used.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>type</parameter>&#160;:</term>
+<listitem><simpara> the type of attribute to find.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the current attribute of the given type, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+              if no attribute of that type applies to the current
+              location.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-iterator-get-font" role="function">
+<title>pango_attr_iterator_get_font ()</title>
+<indexterm zone="pango-attr-iterator-get-font"><primary sortas="pango_attr_iterator_get_font">pango_attr_iterator_get_font</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_iterator_get_font        (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator,
+                                                         <link linkend="PangoFontDescription">PangoFontDescription</link> *desc,
+                                                         <link linkend="PangoLanguage">PangoLanguage</link> **language,
+                                                         <link linkend="GSList">GSList</link> **extra_attrs);</programlisting>
+<para>
+Get the font and other attributes at the current iterator position.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>desc</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> to fill in with the current values.
+       The family name in this structure will be set using
+       <link linkend="pango-font-description-set-family-static"><function>pango_font_description_set_family_static()</function></link> using values from
+       an attribute in the <link linkend="PangoAttrList"><type>PangoAttrList</type></link> associated with the iterator,
+       so if you plan to keep it around, you must call:
+       <literal>pango_font_description_set_family (desc, pango_font_description_get_family (desc))</literal>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>language</parameter>&#160;:</term>
+<listitem><simpara> if non-<link linkend="NULL--CAPS"><literal>NULL</literal></link>, location to store language tag for item, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+           if none is found.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>extra_attrs</parameter>&#160;:</term>
+<listitem><simpara>element type Pango.Attribute): (transfer full. <acronym>element type Pango.Attribute): (transfer</acronym> full. </simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-attr-iterator-get-attrs" role="function" condition="since:1.2">
+<title>pango_attr_iterator_get_attrs ()</title>
+<indexterm zone="pango-attr-iterator-get-attrs" role="1.2"><primary sortas="pango_attr_iterator_get_attrs">pango_attr_iterator_get_attrs</primary></indexterm><programlisting><link linkend="GSList">GSList</link> *            pango_attr_iterator_get_attrs       (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);</programlisting>
+<para>
+Gets a list of all attributes at the current position of the
+iterator.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>element-type Pango.Attribute): (transfer full. <acronym>element-type Pango.Attribute): (transfer</acronym> full. </simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-attr-iterator-destroy" role="function">
+<title>pango_attr_iterator_destroy ()</title>
+<indexterm zone="pango-attr-iterator-destroy"><primary sortas="pango_attr_iterator_destroy">pango_attr_iterator_destroy</primary></indexterm><programlisting><link linkend="void">void</link>                pango_attr_iterator_destroy         (<link linkend="PangoAttrIterator">PangoAttrIterator</link> *iterator);</programlisting>
+<para>
+Destroy a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link> and free all associated memory.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>iterator</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoAttrIterator"><type>PangoAttrIterator</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/utils.xml b/docs/xml/utils.xml
new file mode 100755 (executable)
index 0000000..2c8b593
--- /dev/null
@@ -0,0 +1,479 @@
+<refentry id="pango-Miscellaneous-Utilities">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Miscellaneous-Utilities.top_of_page">Miscellaneous Utilities</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Miscellaneous Utilities</refname>
+<refpurpose>Various convenience and utility functions</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Miscellaneous-Utilities.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+<link linkend="char">char</link> **             <link linkend="pango-split-file-list">pango_split_file_list</link>               (const <link linkend="char">char</link> *str);
+<link linkend="char">char</link> *              <link linkend="pango-trim-string">pango_trim_string</link>                   (const <link linkend="char">char</link> *str);
+<link linkend="gint">gint</link>                <link linkend="pango-read-line">pango_read_line</link>                     (<link linkend="FILE--CAPS">FILE</link> *stream,
+                                                         <link linkend="GString">GString</link> *str);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-skip-space">pango_skip_space</link>                    (const <link linkend="char">char</link> **pos);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-scan-word">pango_scan_word</link>                     (const <link linkend="char">char</link> **pos,
+                                                         <link linkend="GString">GString</link> *out);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-scan-string">pango_scan_string</link>                   (const <link linkend="char">char</link> **pos,
+                                                         <link linkend="GString">GString</link> *out);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-scan-int">pango_scan_int</link>                      (const <link linkend="char">char</link> **pos,
+                                                         <link linkend="int">int</link> *out);
+<link linkend="char">char</link> *              <link linkend="pango-config-key-get">pango_config_key_get</link>                (const <link linkend="char">char</link> *key);
+<link linkend="void">void</link>                <link linkend="pango-lookup-aliases">pango_lookup_aliases</link>                (const <link linkend="char">char</link> *fontname,
+                                                         <link linkend="char">char</link> ***families,
+                                                         <link linkend="int">int</link> *n_families);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-parse-enum">pango_parse_enum</link>                    (<link linkend="GType">GType</link> type,
+                                                         const <link linkend="char">char</link> *str,
+                                                         <link linkend="int">int</link> *value,
+                                                         <link linkend="gboolean">gboolean</link> warn,
+                                                         <link linkend="char">char</link> **possible_values);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-parse-style">pango_parse_style</link>                   (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoStyle">PangoStyle</link> *style,
+                                                         <link linkend="gboolean">gboolean</link> warn);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-parse-variant">pango_parse_variant</link>                 (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoVariant">PangoVariant</link> *variant,
+                                                         <link linkend="gboolean">gboolean</link> warn);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-parse-weight">pango_parse_weight</link>                  (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoWeight">PangoWeight</link> *weight,
+                                                         <link linkend="gboolean">gboolean</link> warn);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-parse-stretch">pango_parse_stretch</link>                 (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoStretch">PangoStretch</link> *stretch,
+                                                         <link linkend="gboolean">gboolean</link> warn);
+const <link linkend="char">char</link> *        <link linkend="pango-get-sysconf-subdirectory">pango_get_sysconf_subdirectory</link>      (void);
+const <link linkend="char">char</link> *        <link linkend="pango-get-lib-subdirectory">pango_get_lib_subdirectory</link>          (void);
+<link linkend="guint8">guint8</link> *            <link linkend="pango-log2vis-get-embedding-levels">pango_log2vis_get_embedding_levels</link>  (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoDirection">PangoDirection</link> *pbase_dir);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-is-zero-width">pango_is_zero_width</link>                 (<link linkend="gunichar">gunichar</link> ch);
+<link linkend="void">void</link>                <link linkend="pango-quantize-line-geometry">pango_quantize_line_geometry</link>        (<link linkend="int">int</link> *thickness,
+                                                         <link linkend="int">int</link> *position);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Miscellaneous-Utilities.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The functions and utilities in this section are mostly used from Pango
+backends and modules, but may be useful for other purposes too.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Miscellaneous-Utilities.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="pango-split-file-list" role="function">
+<title>pango_split_file_list ()</title>
+<indexterm zone="pango-split-file-list"><primary sortas="pango_split_file_list">pango_split_file_list</primary></indexterm><programlisting><link linkend="char">char</link> **             pango_split_file_list               (const <link linkend="char">char</link> *str);</programlisting>
+<para>
+Splits a <link linkend="G-SEARCHPATH-SEPARATOR--CAPS"><literal>G_SEARCHPATH_SEPARATOR</literal></link>-separated list of files, stripping
+white space and substituting ~/ with $HOME/.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="G-SEARCHPATH-SEPARATOR--CAPS"><literal>G_SEARCHPATH_SEPARATOR</literal></link> separated list of filenames
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a list of strings to be freed with <link linkend="g-strfreev"><function>g_strfreev()</function></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-trim-string" role="function">
+<title>pango_trim_string ()</title>
+<indexterm zone="pango-trim-string"><primary sortas="pango_trim_string">pango_trim_string</primary></indexterm><programlisting><link linkend="char">char</link> *              pango_trim_string                   (const <link linkend="char">char</link> *str);</programlisting>
+<para>
+Trims leading and trailing whitespace from a string.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> a string
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A newly-allocated string that must be freed with <link linkend="g-free"><function>g_free()</function></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-read-line" role="function">
+<title>pango_read_line ()</title>
+<indexterm zone="pango-read-line"><primary sortas="pango_read_line">pango_read_line</primary></indexterm><programlisting><link linkend="gint">gint</link>                pango_read_line                     (<link linkend="FILE--CAPS">FILE</link> *stream,
+                                                         <link linkend="GString">GString</link> *str);</programlisting>
+<para>
+Reads an entire line from a file into a buffer. Lines may
+be delimited with '\n', '\r', '\n\r', or '\r\n'. The delimiter
+is not written into the buffer. Text after a '#' character is treated as
+a comment and skipped. '\' can be used to escape a # character.
+'\' proceeding a line delimiter combines adjacent lines. A '\' proceeding
+any other character is ignored and written into the output buffer
+unmodified.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>stream</parameter>&#160;:</term>
+<listitem><simpara> a stdio stream
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="GString"><type>GString</type></link> buffer into which to write the result
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> 0 if the stream was already at an <link linkend="EOF--CAPS"><literal>EOF</literal></link> character, otherwise
+              the number of lines read (this is useful for maintaining
+              a line number counter which doesn't combine lines with '\')
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-skip-space" role="function">
+<title>pango_skip_space ()</title>
+<indexterm zone="pango-skip-space"><primary sortas="pango_skip_space">pango_skip_space</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_skip_space                    (const <link linkend="char">char</link> **pos);</programlisting>
+<para>
+Skips 0 or more characters of white space.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>pos</parameter>&#160;:</term>
+<listitem><simpara> in/out string position
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if skipping the white space leaves
+the position at a '\0' character.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-scan-word" role="function">
+<title>pango_scan_word ()</title>
+<indexterm zone="pango-scan-word"><primary sortas="pango_scan_word">pango_scan_word</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_scan_word                     (const <link linkend="char">char</link> **pos,
+                                                         <link linkend="GString">GString</link> *out);</programlisting>
+<para>
+Scans a word into a <link linkend="GString"><type>GString</type></link> buffer. A word consists
+of [A-Za-z_] followed by zero or more [A-Za-z_0-9]
+Leading white space is skipped.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>pos</parameter>&#160;:</term>
+<listitem><simpara> in/out string position
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>out</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="GString"><type>GString</type></link> into which to write the result
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if a parse error occurred.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-scan-string" role="function">
+<title>pango_scan_string ()</title>
+<indexterm zone="pango-scan-string"><primary sortas="pango_scan_string">pango_scan_string</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_scan_string                   (const <link linkend="char">char</link> **pos,
+                                                         <link linkend="GString">GString</link> *out);</programlisting>
+<para>
+Scans a string into a <link linkend="GString"><type>GString</type></link> buffer. The string may either
+be a sequence of non-white-space characters, or a quoted
+string with '"'. Instead a quoted string, '\"' represents
+a literal quote. Leading white space outside of quotes is skipped.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>pos</parameter>&#160;:</term>
+<listitem><simpara> in/out string position
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>out</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="GString"><type>GString</type></link> into which to write the result
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if a parse error occurred.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-scan-int" role="function">
+<title>pango_scan_int ()</title>
+<indexterm zone="pango-scan-int"><primary sortas="pango_scan_int">pango_scan_int</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_scan_int                      (const <link linkend="char">char</link> **pos,
+                                                         <link linkend="int">int</link> *out);</programlisting>
+<para>
+Scans an integer.
+Leading white space is skipped.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>pos</parameter>&#160;:</term>
+<listitem><simpara> in/out string position
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>out</parameter>&#160;:</term>
+<listitem><simpara> an int into which to write the result
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> if a parse error occurred.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-config-key-get" role="function">
+<title>pango_config_key_get ()</title>
+<indexterm zone="pango-config-key-get"><primary sortas="pango_config_key_get">pango_config_key_get</primary></indexterm><programlisting><link linkend="char">char</link> *              pango_config_key_get                (const <link linkend="char">char</link> *key);</programlisting>
+<para>
+Looks up a key in the Pango config database
+(pseudo-win.ini style, read from $sysconfdir/pango/pangorc,
+ ~/.pangorc, and getenv (PANGO_RC_FILE).)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>key</parameter>&#160;:</term>
+<listitem><simpara> Key to look up, in the form "SECTION/KEY".
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the value, if found, otherwise <link linkend="NULL--CAPS"><literal>NULL</literal></link>. The value is a
+newly-allocated string and must be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-lookup-aliases" role="function">
+<title>pango_lookup_aliases ()</title>
+<indexterm zone="pango-lookup-aliases"><primary sortas="pango_lookup_aliases">pango_lookup_aliases</primary></indexterm><programlisting><link linkend="void">void</link>                pango_lookup_aliases                (const <link linkend="char">char</link> *fontname,
+                                                         <link linkend="char">char</link> ***families,
+                                                         <link linkend="int">int</link> *n_families);</programlisting>
+<para>
+Look up all user defined aliases for the alias <parameter>fontname</parameter>.
+The resulting font family names will be stored in <parameter>families</parameter>,
+and the number of families in <parameter>n_families</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>fontname</parameter>&#160;:</term>
+<listitem><simpara> an ascii string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>families</parameter>&#160;:</term>
+<listitem><simpara> will be set to an array of font family names.
+   this array is owned by pango and should not be freed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_families</parameter>&#160;:</term>
+<listitem><simpara> will be set to the length of the <parameter>families</parameter> array.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-parse-enum" role="function" condition="since:1.16">
+<title>pango_parse_enum ()</title>
+<indexterm zone="pango-parse-enum" role="1.16"><primary sortas="pango_parse_enum">pango_parse_enum</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_parse_enum                    (<link linkend="GType">GType</link> type,
+                                                         const <link linkend="char">char</link> *str,
+                                                         <link linkend="int">int</link> *value,
+                                                         <link linkend="gboolean">gboolean</link> warn,
+                                                         <link linkend="char">char</link> **possible_values);</programlisting>
+<para>
+Parses an enum type and stores the result in <parameter>value</parameter>.
+</para>
+<para>
+If <parameter>str</parameter> does not match the nick name of any of the possible values for the
+enum and is not an integer, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> is returned, a warning is issued
+if <parameter>warn</parameter> is <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, and a
+string representing the list of possible values is stored in
+<parameter>possible_values</parameter>.  The list is slash-separated, eg.
+"none/start/middle/end".  If failed and <parameter>possible_values</parameter> is not <link linkend="NULL--CAPS"><literal>NULL</literal></link>,
+returned string should be freed using <link linkend="g-free"><function>g_free()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>type</parameter>&#160;:</term>
+<listitem><simpara> enum type to parse, eg. <link linkend="PANGO-TYPE-ELLIPSIZE-MODE--CAPS"><literal>PANGO_TYPE_ELLIPSIZE_MODE</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> string to parse.  May be <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>value</parameter>&#160;:</term>
+<listitem><simpara> integer to store the result in, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>warn</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, issue a <link linkend="g-warning"><function>g_warning()</function></link> on bad input.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>possible_values</parameter>&#160;:</term>
+<listitem><simpara> place to store list of possible values on failure, or <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>str</parameter> was successfully parsed.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-parse-style" role="function">
+<title>pango_parse_style ()</title>
+<indexterm zone="pango-parse-style"><primary sortas="pango_parse_style">pango_parse_style</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_parse_style                   (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoStyle">PangoStyle</link> *style,
+                                                         <link linkend="gboolean">gboolean</link> warn);</programlisting>
+<para>
+Parses a font style. The allowed values are "normal",
+"italic" and "oblique", case variations being
+ignored.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> a string to parse.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>style</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoStyle"><type>PangoStyle</type></link> to store the result in.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>warn</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, issue a <link linkend="g-warning"><function>g_warning()</function></link> on bad input.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>str</parameter> was successfully parsed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-parse-variant" role="function">
+<title>pango_parse_variant ()</title>
+<indexterm zone="pango-parse-variant"><primary sortas="pango_parse_variant">pango_parse_variant</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_parse_variant                 (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoVariant">PangoVariant</link> *variant,
+                                                         <link linkend="gboolean">gboolean</link> warn);</programlisting>
+<para>
+Parses a font variant. The allowed values are "normal"
+and "smallcaps" or "small_caps", case variations being
+ignored.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> a string to parse.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>variant</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoVariant"><type>PangoVariant</type></link> to store the result in.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>warn</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, issue a <link linkend="g-warning"><function>g_warning()</function></link> on bad input.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>str</parameter> was successfully parsed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-parse-weight" role="function">
+<title>pango_parse_weight ()</title>
+<indexterm zone="pango-parse-weight"><primary sortas="pango_parse_weight">pango_parse_weight</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_parse_weight                  (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoWeight">PangoWeight</link> *weight,
+                                                         <link linkend="gboolean">gboolean</link> warn);</programlisting>
+<para>
+Parses a font weight. The allowed values are "heavy",
+"ultrabold", "bold", "normal", "light", "ultraleight"
+and integers. Case variations are ignored.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> a string to parse.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>weight</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoWeight"><type>PangoWeight</type></link> to store the result in.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>warn</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, issue a <link linkend="g-warning"><function>g_warning()</function></link> on bad input.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>str</parameter> was successfully parsed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-parse-stretch" role="function">
+<title>pango_parse_stretch ()</title>
+<indexterm zone="pango-parse-stretch"><primary sortas="pango_parse_stretch">pango_parse_stretch</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_parse_stretch                 (const <link linkend="char">char</link> *str,
+                                                         <link linkend="PangoStretch">PangoStretch</link> *stretch,
+                                                         <link linkend="gboolean">gboolean</link> warn);</programlisting>
+<para>
+Parses a font stretch. The allowed values are
+"ultra_condensed", "extra_condensed", "condensed",
+"semi_condensed", "normal", "semi_expanded", "expanded",
+"extra_expanded" and "ultra_expanded". Case variations are
+ignored and the '_' characters may be omitted.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>str</parameter>&#160;:</term>
+<listitem><simpara> a string to parse.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>stretch</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoStretch"><type>PangoStretch</type></link> to store the result in.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>warn</parameter>&#160;:</term>
+<listitem><simpara> if <link linkend="TRUE--CAPS"><literal>TRUE</literal></link>, issue a <link linkend="g-warning"><function>g_warning()</function></link> on bad input.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>str</parameter> was successfully parsed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-get-sysconf-subdirectory" role="function">
+<title>pango_get_sysconf_subdirectory ()</title>
+<indexterm zone="pango-get-sysconf-subdirectory"><primary sortas="pango_get_sysconf_subdirectory">pango_get_sysconf_subdirectory</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_get_sysconf_subdirectory      (void);</programlisting>
+<para>
+On Unix, returns the name of the "pango" subdirectory of SYSCONFDIR
+(which is set at compile time). On Windows, returns the etc\pango
+subdirectory of the Pango installation directory (which is deduced
+at run time from the DLL's location).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the Pango sysconf directory. The returned string should
+not be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-get-lib-subdirectory" role="function">
+<title>pango_get_lib_subdirectory ()</title>
+<indexterm zone="pango-get-lib-subdirectory"><primary sortas="pango_get_lib_subdirectory">pango_get_lib_subdirectory</primary></indexterm><programlisting>const <link linkend="char">char</link> *        pango_get_lib_subdirectory          (void);</programlisting>
+<para>
+On Unix, returns the name of the "pango" subdirectory of LIBDIR
+(which is set at compile time). On Windows, returns the lib\pango
+subdirectory of the Pango installation directory (which is deduced
+at run time from the DLL's location).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the Pango lib directory. The returned string should
+not be freed.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-log2vis-get-embedding-levels" role="function" condition="since:1.4">
+<title>pango_log2vis_get_embedding_levels ()</title>
+<indexterm zone="pango-log2vis-get-embedding-levels" role="1.4"><primary sortas="pango_log2vis_get_embedding_levels">pango_log2vis_get_embedding_levels</primary></indexterm><programlisting><link linkend="guint8">guint8</link> *            pango_log2vis_get_embedding_levels  (const <link linkend="gchar">gchar</link> *text,
+                                                         <link linkend="int">int</link> length,
+                                                         <link linkend="PangoDirection">PangoDirection</link> *pbase_dir);</programlisting>
+<para>
+This will return the bidirectional embedding levels of the input paragraph
+as defined by the Unicode Bidirectional Algorithm available at:
+</para>
+<para>
+  http://www.unicode.org/reports/tr9/
+</para>
+<para>
+If the input base direction is a weak direction, the direction of the
+characters in the text will determine the final resolved direction.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara>      the text to itemize.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>length</parameter>&#160;:</term>
+<listitem><simpara>    the number of bytes (not characters) to process, or -1
+            if <parameter>text</parameter> is nul-terminated and the length should be calculated.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>pbase_dir</parameter>&#160;:</term>
+<listitem><simpara> input base direction, and output resolved direction.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a newly allocated array of embedding levels, one item per
+              character (not byte), that should be freed using g_free.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.4</para></refsect2>
+<refsect2 id="pango-is-zero-width" role="function" condition="since:1.10">
+<title>pango_is_zero_width ()</title>
+<indexterm zone="pango-is-zero-width" role="1.10"><primary sortas="pango_is_zero_width">pango_is_zero_width</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_is_zero_width                 (<link linkend="gunichar">gunichar</link> ch);</programlisting>
+<para>
+Checks <parameter>ch</parameter> to see if it is a character that should not be
+normally rendered on the screen.  This includes all Unicode characters
+with "ZERO WIDTH" in their name, as well as <firstterm>bidi</firstterm> formatting characters, and
+a few other ones.  This is totally different from <link linkend="g-unichar-iszerowidth"><function>g_unichar_iszerowidth()</function></link>
+and is at best misnamed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>ch</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>ch</parameter> is a zero-width character, <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> otherwise
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.10</para></refsect2>
+<refsect2 id="pango-quantize-line-geometry" role="function" condition="since:1.12">
+<title>pango_quantize_line_geometry ()</title>
+<indexterm zone="pango-quantize-line-geometry" role="1.12"><primary sortas="pango_quantize_line_geometry">pango_quantize_line_geometry</primary></indexterm><programlisting><link linkend="void">void</link>                pango_quantize_line_geometry        (<link linkend="int">int</link> *thickness,
+                                                         <link linkend="int">int</link> *position);</programlisting>
+<para>
+Quantizes the thickness and position of a line, typically an
+underline or strikethrough, to whole device pixels, that is integer
+multiples of <link linkend="PANGO-SCALE--CAPS"><literal>PANGO_SCALE</literal></link>. The purpose of this function is to avoid
+such lines looking blurry.
+</para>
+<para>
+Care is taken to make sure <parameter>thickness</parameter> is at least one pixel when this
+function returns, but returned <parameter>position</parameter> may become zero as a result
+of rounding.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>thickness</parameter>&#160;:</term>
+<listitem><simpara> pointer to the thickness of a line, in Pango units
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>position</parameter>&#160;:</term>
+<listitem><simpara> corresponding position
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.12</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/vertical.xml b/docs/xml/vertical.xml
new file mode 100755 (executable)
index 0000000..3bab2ca
--- /dev/null
@@ -0,0 +1,324 @@
+<refentry id="pango-Vertical-Text">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Vertical-Text.top_of_page">Vertical Text</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Vertical Text</refname>
+<refpurpose>Laying text out in vertical directions</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Vertical-Text.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+enum                <link linkend="PangoGravity">PangoGravity</link>;
+enum                <link linkend="PangoGravityHint">PangoGravityHint</link>;
+#define             <link linkend="PANGO-GRAVITY-IS-VERTICAL--CAPS">PANGO_GRAVITY_IS_VERTICAL</link>           (gravity)
+<link linkend="PangoGravity">PangoGravity</link>        <link linkend="pango-gravity-get-for-matrix">pango_gravity_get_for_matrix</link>        (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);
+<link linkend="PangoGravity">PangoGravity</link>        <link linkend="pango-gravity-get-for-script">pango_gravity_get_for_script</link>        (<link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="PangoGravity">PangoGravity</link> base_gravity,
+                                                         <link linkend="PangoGravityHint">PangoGravityHint</link> hint);
+<link linkend="PangoGravity">PangoGravity</link>        <link linkend="pango-gravity-get-for-script-and-width">pango_gravity_get_for_script_and_width</link>
+                                                        (<link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="gboolean">gboolean</link> wide,
+                                                         <link linkend="PangoGravity">PangoGravity</link> base_gravity,
+                                                         <link linkend="PangoGravityHint">PangoGravityHint</link> hint);
+<link linkend="double">double</link>              <link linkend="pango-gravity-to-rotation">pango_gravity_to_rotation</link>           (<link linkend="PangoGravity">PangoGravity</link> gravity);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Vertical-Text.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+Since 1.16, Pango is able to correctly lay vertical text out.  In fact, it can
+set layouts of mixed vertical and non-vertical text.  This section describes
+the types used for setting vertical text parameters.
+</para>
+<para>
+The way this is implemented is through the concept of
+<firstterm>gravity</firstterm>.  Gravity of normal Latin text is south.  A
+gravity value of east means that glyphs will be rotated ninety degrees
+counterclockwise.  So, to render vertical text one needs to set the gravity
+and rotate the layout using the matrix machinery already in place.  This has
+the huge advantage that most algorithms working on a <link linkend="PangoLayout"><type>PangoLayout</type></link> do not need
+any change as the assumption that lines run in the X direction and stack in
+the Y direction holds even for vertical text layouts.
+</para>
+<para>
+Applications should only need to set base gravity on <link linkend="PangoContext"><type>PangoContext</type></link> in use, and
+let Pango decide the gravity assigned to each run of text.  This automatically
+handles text with mixed scripts.  A very common use is to set the context base
+gravity to auto using <link linkend="pango-context-set-base-gravity"><function>pango_context_set_base_gravity()</function></link>
+and rotate the layout normally.  Pango will make sure that
+Asian languages take the right form, while other scripts are rotated normally.
+</para>
+<para>
+The correct way to set gravity on a layout is to set it on the context
+associated with it using <link linkend="pango-context-set-base-gravity"><function>pango_context_set_base_gravity()</function></link>.  The context
+of a layout can be accessed using <link linkend="pango-layout-get-context"><function>pango_layout_get_context()</function></link>.  The currently
+set base gravity of the context can be accessed using
+<link linkend="pango-context-get-base-gravity"><function>pango_context_get_base_gravity()</function></link> and the <firstterm>resolved</firstterm>
+gravity of it using <link linkend="pango-context-get-gravity"><function>pango_context_get_gravity()</function></link>.  The resolved gravity is
+the same as the base gravity for the most part, except that if the base
+gravity is set to <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>, the resolved gravity will depend
+on the current matrix set on context, and is derived using
+<link linkend="pango-gravity-get-for-matrix"><function>pango_gravity_get_for_matrix()</function></link>.
+</para>
+<para>
+The next thing an application may want to set on the context is the
+<firstterm>gravity hint</firstterm>.  A <link linkend="PangoGravityHint"><type>PangoGravityHint</type></link> instructs how
+different scripts should react to the set base gravity.
+</para>
+<para>
+Font descriptions have a gravity property too, that can be set using
+<link linkend="pango-font-description-set-gravity"><function>pango_font_description_set_gravity()</function></link> and accessed using
+<link linkend="pango-font-description-get-gravity"><function>pango_font_description_get_gravity()</function></link>.  However, those are rarely useful
+from application code and are mainly used by <link linkend="PangoLayout"><type>PangoLayout</type></link> internally.
+</para>
+<para>
+Last but not least, one can create <link linkend="PangoAttribute"><type>PangoAttribute</type></link><!---->s for gravity
+and gravity hint using <link linkend="pango-attr-gravity-new"><function>pango_attr_gravity_new()</function></link> and
+<link linkend="pango-attr-gravity-hint-new"><function>pango_attr_gravity_hint_new()</function></link>.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Vertical-Text.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoGravity" role="enum" condition="since:1.16">
+<title>enum PangoGravity</title>
+<indexterm zone="PangoGravity" role="1.16"><primary sortas="PangoGravity">PangoGravity</primary></indexterm><programlisting>typedef enum {
+  PANGO_GRAVITY_SOUTH,
+  PANGO_GRAVITY_EAST,
+  PANGO_GRAVITY_NORTH,
+  PANGO_GRAVITY_WEST,
+  PANGO_GRAVITY_AUTO
+} PangoGravity;
+</programlisting>
+<para>
+The <link linkend="PangoGravity"><type>PangoGravity</type></link> type represents the orientation of glyphs in a segment
+of text.  This is useful when rendering vertical text layouts.  In
+those situations, the layout is rotated using a non-identity PangoMatrix,
+and then glyph orientation is controlled using <link linkend="PangoGravity"><type>PangoGravity</type></link>.
+Not every value in this enumeration makes sense for every usage of
+<link linkend="PangoGravity"><type>PangoGravity</type></link>; for example, <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link> only can be passed to
+<link linkend="pango-context-set-base-gravity"><function>pango_context_set_base_gravity()</function></link> and can only be returned by
+<link linkend="pango-context-get-base-gravity"><function>pango_context_get_base_gravity()</function></link>.
+</para>
+<para>
+See also: <link linkend="PangoGravityHint"><type>PangoGravityHint</type></link></para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-GRAVITY-SOUTH--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_SOUTH</literal></term>
+<listitem><simpara> Glyphs stand upright (default)
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-GRAVITY-EAST--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_EAST</literal></term>
+<listitem><simpara> Glyphs are rotated 90 degrees clockwise
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-GRAVITY-NORTH--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_NORTH</literal></term>
+<listitem><simpara> Glyphs are upside-down
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-GRAVITY-WEST--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_WEST</literal></term>
+<listitem><simpara> Glyphs are rotated 90 degrees counter-clockwise
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-GRAVITY-AUTO--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_AUTO</literal></term>
+<listitem><simpara> Gravity is resolved from the context matrix
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PangoGravityHint" role="enum" condition="since:1.16">
+<title>enum PangoGravityHint</title>
+<indexterm zone="PangoGravityHint" role="1.16"><primary sortas="PangoGravityHint">PangoGravityHint</primary></indexterm><programlisting>typedef enum {
+  PANGO_GRAVITY_HINT_NATURAL,
+  PANGO_GRAVITY_HINT_STRONG,
+  PANGO_GRAVITY_HINT_LINE
+} PangoGravityHint;
+</programlisting>
+<para>
+The <link linkend="PangoGravityHint"><type>PangoGravityHint</type></link> defines how horizontal scripts should behave in a
+vertical context.  That is, English excerpt in a vertical paragraph for
+example.
+</para>
+<para>
+See <link linkend="PangoGravity"><type>PangoGravity</type></link>.</para>
+<para>
+</para><variablelist role="enum">
+<varlistentry id="PANGO-GRAVITY-HINT-NATURAL--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_HINT_NATURAL</literal></term>
+<listitem><simpara> scripts will take their natural gravity based
+on the base gravity and the script.  This is the default.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-GRAVITY-HINT-STRONG--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_HINT_STRONG</literal></term>
+<listitem><simpara> always use the base gravity set, regardless of
+the script.
+</simpara></listitem>
+</varlistentry>
+<varlistentry id="PANGO-GRAVITY-HINT-LINE--CAPS" role="constant">
+<term><literal>PANGO_GRAVITY_HINT_LINE</literal></term>
+<listitem><simpara> for scripts not in their natural direction (eg.
+Latin in East gravity), choose per-script gravity such that every script
+respects the line progression.  This means, Latin and Arabic will take
+opposite gravities and both flow top-to-bottom for example.
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="PANGO-GRAVITY-IS-VERTICAL--CAPS" role="macro" condition="since:1.16">
+<title>PANGO_GRAVITY_IS_VERTICAL()</title>
+<indexterm zone="PANGO-GRAVITY-IS-VERTICAL--CAPS" role="1.16"><primary sortas="PANGO_GRAVITY_IS_VERTICAL">PANGO_GRAVITY_IS_VERTICAL</primary></indexterm><programlisting>#define             PANGO_GRAVITY_IS_VERTICAL(gravity)</programlisting>
+<para>
+Whether a <link linkend="PangoGravity"><type>PangoGravity</type></link> represents vertical writing directions.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>gravity</parameter>&#160;:</term>
+<listitem><simpara> the <link linkend="PangoGravity"><type>PangoGravity</type></link> to check
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-gravity-get-for-matrix" role="function" condition="since:1.16">
+<title>pango_gravity_get_for_matrix ()</title>
+<indexterm zone="pango-gravity-get-for-matrix" role="1.16"><primary sortas="pango_gravity_get_for_matrix">pango_gravity_get_for_matrix</primary></indexterm><programlisting><link linkend="PangoGravity">PangoGravity</link>        pango_gravity_get_for_matrix        (const <link linkend="PangoMatrix">PangoMatrix</link> *matrix);</programlisting>
+<para>
+Finds the gravity that best matches the rotation component
+in a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the gravity of <parameter>matrix</parameter>, which will never be
+<link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>, or <link linkend="PANGO-GRAVITY-SOUTH--CAPS"><literal>PANGO_GRAVITY_SOUTH</literal></link> if <parameter>matrix</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-gravity-get-for-script" role="function" condition="since:1.16">
+<title>pango_gravity_get_for_script ()</title>
+<indexterm zone="pango-gravity-get-for-script" role="1.16"><primary sortas="pango_gravity_get_for_script">pango_gravity_get_for_script</primary></indexterm><programlisting><link linkend="PangoGravity">PangoGravity</link>        pango_gravity_get_for_script        (<link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="PangoGravity">PangoGravity</link> base_gravity,
+                                                         <link linkend="PangoGravityHint">PangoGravityHint</link> hint);</programlisting>
+<para>
+Based on the script, base gravity, and hint, returns actual gravity
+to use in laying out a single <link linkend="PangoItem"><type>PangoItem</type></link>.
+</para>
+<para>
+If <parameter>base_gravity</parameter> is <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>, it is first replaced with the
+preferred gravity of <parameter>script</parameter>.  To get the preferred gravity of a script,
+pass <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link> and <link linkend="PANGO-GRAVITY-HINT-STRONG--CAPS"><literal>PANGO_GRAVITY_HINT_STRONG</literal></link> in.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="PangoScript"><type>PangoScript</type></link> to query
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>base_gravity</parameter>&#160;:</term>
+<listitem><simpara> base gravity of the paragraph
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>hint</parameter>&#160;:</term>
+<listitem><simpara> orientation hint
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> resolved gravity suitable to use for a run of text
+with <parameter>script</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-gravity-get-for-script-and-width" role="function" condition="since:1.26">
+<title>pango_gravity_get_for_script_and_width ()</title>
+<indexterm zone="pango-gravity-get-for-script-and-width" role="1.26"><primary sortas="pango_gravity_get_for_script_and_width">pango_gravity_get_for_script_and_width</primary></indexterm><programlisting><link linkend="PangoGravity">PangoGravity</link>        pango_gravity_get_for_script_and_width
+                                                        (<link linkend="PangoScript">PangoScript</link> script,
+                                                         <link linkend="gboolean">gboolean</link> wide,
+                                                         <link linkend="PangoGravity">PangoGravity</link> base_gravity,
+                                                         <link linkend="PangoGravityHint">PangoGravityHint</link> hint);</programlisting>
+<para>
+Based on the script, East Asian width, base gravity, and hint,
+returns actual gravity to use in laying out a single character
+or <link linkend="PangoItem"><type>PangoItem</type></link>.
+</para>
+<para>
+This function is similar to <link linkend="pango-gravity-get-for-script"><function>pango_gravity_get_for_script()</function></link> except
+that this function makes a distinction between narrow/half-width and
+wide/full-width characters also.  Wide/full-width characters always
+stand <emph>upright</emph>, that is, they always take the base gravity,
+whereas narrow/full-width characters are always rotated in vertical
+context.
+</para>
+<para>
+If <parameter>base_gravity</parameter> is <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>, it is first replaced with the
+preferred gravity of <parameter>script</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>script</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="PangoScript"><type>PangoScript</type></link> to query
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wide</parameter>&#160;:</term>
+<listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> for wide characters as returned by <link linkend="g-unichar-iswide"><function>g_unichar_iswide()</function></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>base_gravity</parameter>&#160;:</term>
+<listitem><simpara> base gravity of the paragraph
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>hint</parameter>&#160;:</term>
+<listitem><simpara> orientation hint
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> resolved gravity suitable to use for a run of text
+with <parameter>script</parameter> and <parameter>wide</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.26</para></refsect2>
+<refsect2 id="pango-gravity-to-rotation" role="function" condition="since:1.16">
+<title>pango_gravity_to_rotation ()</title>
+<indexterm zone="pango-gravity-to-rotation" role="1.16"><primary sortas="pango_gravity_to_rotation">pango_gravity_to_rotation</primary></indexterm><programlisting><link linkend="double">double</link>              pango_gravity_to_rotation           (<link linkend="PangoGravity">PangoGravity</link> gravity);</programlisting>
+<para>
+Converts a <link linkend="PangoGravity"><type>PangoGravity</type></link> value to its natural rotation in radians.
+<parameter>gravity</parameter> should not be <link linkend="PANGO-GRAVITY-AUTO--CAPS"><literal>PANGO_GRAVITY_AUTO</literal></link>.
+</para>
+<para>
+Note that <link linkend="pango-matrix-rotate"><function>pango_matrix_rotate()</function></link> takes angle in degrees, not radians.
+So, to call <link linkend="pango-matrix-rotate"><function>pango_matrix_rotate()</function></link> with the output of this function
+you should multiply it by (180. / G_PI).</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>gravity</parameter>&#160;:</term>
+<listitem><simpara> gravity to query
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the rotation value corresponding to <parameter>gravity</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+
+</refsect1>
+
+
+
+<refsect1 id="pango-Vertical-Text.see-also">
+<title>See Also</title>
+<para>
+<link linkend="pango-context-get-base-gravity"><function>pango_context_get_base_gravity()</function></link>,
+<link linkend="pango-context-set-base-gravity"><function>pango_context_set_base_gravity()</function></link>,
+<link linkend="pango-context-get-gravity"><function>pango_context_get_gravity()</function></link>,
+<link linkend="pango-context-get-gravity-hint"><function>pango_context_get_gravity_hint()</function></link>,
+<link linkend="pango-context-set-gravity-hint"><function>pango_context_set_gravity_hint()</function></link>,
+<link linkend="pango-font-description-set-gravity"><function>pango_font_description_set_gravity()</function></link>,
+<link linkend="pango-font-description-get-gravity"><function>pango_font_description_get_gravity()</function></link>,
+<link linkend="pango-attr-gravity-new"><function>pango_attr_gravity_new()</function></link>,
+<link linkend="pango-attr-gravity-hint-new"><function>pango_attr_gravity_hint_new()</function></link>
+</para>
+</refsect1>
+
+</refentry>
diff --git a/docs/xml/win32-fonts.xml b/docs/xml/win32-fonts.xml
new file mode 100755 (executable)
index 0000000..a050e0f
--- /dev/null
@@ -0,0 +1,548 @@
+<refentry id="pango-Win32-Fonts-and-Rendering">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Win32-Fonts-and-Rendering.top_of_page">Win32 Fonts and Rendering</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Win32 Fonts and Rendering</refname>
+<refpurpose>Functions for shape engines to manipulate Win32 fonts</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Win32-Fonts-and-Rendering.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+#define             <link linkend="PANGO-RENDER-TYPE-WIN32--CAPS">PANGO_RENDER_TYPE_WIN32</link>
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-win32-get-context">pango_win32_get_context</link>             (void);
+<link linkend="void">void</link>                <link linkend="pango-win32-render">pango_win32_render</link>                  (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);
+<link linkend="void">void</link>                <link linkend="pango-win32-render-transformed">pango_win32_render_transformed</link>      (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-win32-render-layout-line">pango_win32_render_layout_line</link>      (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-win32-render-layout">pango_win32_render_layout</link>           (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-win32-get-unknown-glyph">pango_win32_get_unknown_glyph</link>       (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="gint">gint</link>                <link linkend="pango-win32-font-get-glyph-index">pango_win32_font_get_glyph_index</link>    (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-win32-font-select-font">pango_win32_font_select_font</link>        (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="HDC--CAPS">HDC</link> hdc);
+<link linkend="void">void</link>                <link linkend="pango-win32-font-done-font">pango_win32_font_done_font</link>          (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="double">double</link>              <link linkend="pango-win32-font-get-metrics-factor">pango_win32_font_get_metrics_factor</link> (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-win32-get-debug-flag">pango_win32_get_debug_flag</link>          (void);
+<link linkend="HDC--CAPS">HDC</link>                 <link linkend="pango-win32-get-dc">pango_win32_get_dc</link>                  (void);
+                    <link linkend="PangoWin32FontCache">PangoWin32FontCache</link>;
+<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> * <link linkend="pango-win32-font-cache-new">pango_win32_font_cache_new</link>        (void);
+<link linkend="void">void</link>                <link linkend="pango-win32-font-cache-free">pango_win32_font_cache_free</link>         (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache);
+<link linkend="HFONT--CAPS">HFONT</link>               <link linkend="pango-win32-font-cache-load">pango_win32_font_cache_load</link>         (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache,
+                                                         const <link linkend="LOGFONTA--CAPS">LOGFONTA</link> *logfont);
+<link linkend="HFONT--CAPS">HFONT</link>               <link linkend="pango-win32-font-cache-loadw">pango_win32_font_cache_loadw</link>        (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache,
+                                                         const <link linkend="LOGFONTW--CAPS">LOGFONTW</link> *logfont);
+<link linkend="void">void</link>                <link linkend="pango-win32-font-cache-unload">pango_win32_font_cache_unload</link>       (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache,
+                                                         <link linkend="HFONT--CAPS">HFONT</link> hfont);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-win32-font-map-for-display">pango_win32_font_map_for_display</link>    (void);
+<link linkend="void">void</link>                <link linkend="pango-win32-shutdown-display">pango_win32_shutdown_display</link>        (void);
+<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> * <link linkend="pango-win32-font-map-get-font-cache">pango_win32_font_map_get_font_cache</link>
+                                                        (<link linkend="PangoFontMap">PangoFontMap</link> *font_map);
+<link linkend="LOGFONTA--CAPS">LOGFONTA</link> *          <link linkend="pango-win32-font-logfont">pango_win32_font_logfont</link>            (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="LOGFONTW--CAPS">LOGFONTW</link> *          <link linkend="pango-win32-font-logfontw">pango_win32_font_logfontw</link>           (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-win32-font-description-from-logfont">pango_win32_font_description_from_logfont</link>
+                                                        (const <link linkend="LOGFONTA--CAPS">LOGFONTA</link> *lfp);
+<link linkend="PangoFontDescription">PangoFontDescription</link> * <link linkend="pango-win32-font-description-from-logfontw">pango_win32_font_description_from_logfontw</link>
+                                                        (const <link linkend="LOGFONTW--CAPS">LOGFONTW</link> *lfp);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-Win32-Fonts-and-Rendering.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The macros and functions in this section are used to access fonts natively on
+Win32 systems and to render text in conjunction with Win32 APIs.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Win32-Fonts-and-Rendering.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PANGO-RENDER-TYPE-WIN32--CAPS" role="macro">
+<title>PANGO_RENDER_TYPE_WIN32</title>
+<indexterm zone="PANGO-RENDER-TYPE-WIN32--CAPS"><primary sortas="PANGO_RENDER_TYPE_WIN32">PANGO_RENDER_TYPE_WIN32</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_WIN32 "PangoRenderWin32"
+</programlisting>
+<para>
+A string constant identifying the Win32 renderer. The associated quark (see
+<link linkend="g-quark-from-string"><function>g_quark_from_string()</function></link>) is used to identify the renderer in <link linkend="pango-find-map"><function>pango_find_map()</function></link>.
+</para></refsect2>
+<refsect2 id="pango-win32-get-context" role="function" condition="deprecated">
+<title>pango_win32_get_context ()</title>
+<indexterm zone="pango-win32-get-context" role="deprecated"><primary sortas="pango_win32_get_context">pango_win32_get_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_win32_get_context             (void);</programlisting>
+<warning><para><literal>pango_win32_get_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-win32-font-map-for-display"><function>pango_win32_font_map_for_display()</function></link> followed by
+<link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Retrieves a <link linkend="PangoContext"><type>PangoContext</type></link> appropriate for rendering with Windows fonts.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new <link linkend="PangoContext"><type>PangoContext</type></link>
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-render" role="function">
+<title>pango_win32_render ()</title>
+<indexterm zone="pango-win32-render"><primary sortas="pango_win32_render">pango_win32_render</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_render                  (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto a Windows DC</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>hdc</parameter>&#160;:</term>
+<listitem><simpara>     the device context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of start of string (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of baseline (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-render-transformed" role="function">
+<title>pango_win32_render_transformed ()</title>
+<indexterm zone="pango-win32-render-transformed"><primary sortas="pango_win32_render_transformed">pango_win32_render_transformed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_render_transformed      (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         const <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto a windows DC, possibly
+transforming the layed-out coordinates through a transformation
+matrix. Note that the transformation matrix for <parameter>font</parameter> is not
+changed, so to produce correct rendering results, the <parameter>font</parameter>
+must have been loaded using a <link linkend="PangoContext"><type>PangoContext</type></link> with an identical
+transformation matrix to that passed in to this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>hdc</parameter>&#160;:</term>
+<listitem><simpara>     a windows device context
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara>  a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to use an identity transformation
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of the start of the string (in Pango
+          units in user space coordinates)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of the baseline (in Pango units
+          in user space coordinates)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-render-layout-line" role="function">
+<title>pango_win32_render_layout_line ()</title>
+<indexterm zone="pango-win32-render-layout-line"><primary sortas="pango_win32_render_layout_line">pango_win32_render_layout_line</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_render_layout_line      (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> onto a device context. For underlining to
+work property the text alignment of the DC should have TA_BASELINE
+and TA_LEFT.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>hdc</parameter>&#160;:</term>
+<listitem><simpara>       DC to use for uncolored drawing
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the x position of start of string (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the y position of baseline (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-render-layout" role="function">
+<title>pango_win32_render_layout ()</title>
+<indexterm zone="pango-win32-render-layout"><primary sortas="pango_win32_render_layout">pango_win32_render_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_render_layout           (<link linkend="HDC--CAPS">HDC</link> hdc,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> onto an X drawable</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>hdc</parameter>&#160;:</term>
+<listitem><simpara>       HDC to use for uncolored drawing
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the X position of the left of the layout (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the Y position of the top of the layout (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-get-unknown-glyph" role="function" condition="deprecated:">
+<title>pango_win32_get_unknown_glyph ()</title>
+<indexterm zone="pango-win32-get-unknown-glyph" role="deprecated"><primary sortas="pango_win32_get_unknown_glyph">pango_win32_get_unknown_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_win32_get_unknown_glyph       (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<warning><para><literal>pango_win32_get_unknown_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns the index of a glyph suitable for drawing <parameter>wc</parameter> as an
+unknown character.
+</para>
+<para>
+Use <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS"><function>PANGO_GET_UNKNOWN_GLYPH()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> the Unicode character for which a glyph is needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a glyph index into <parameter>font</parameter>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-get-glyph-index" role="function">
+<title>pango_win32_font_get_glyph_index ()</title>
+<indexterm zone="pango-win32-font-get-glyph-index"><primary sortas="pango_win32_font_get_glyph_index">pango_win32_font_get_glyph_index</primary></indexterm><programlisting><link linkend="gint">gint</link>                pango_win32_font_get_glyph_index    (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<para>
+Obtains the index of the glyph for <parameter>wc</parameter> in <parameter>font</parameter>, or 0, if not
+covered.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> a Unicode character.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the glyph index for <parameter>wc</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-select-font" role="function">
+<title>pango_win32_font_select_font ()</title>
+<indexterm zone="pango-win32-font-select-font"><primary sortas="pango_win32_font_select_font">pango_win32_font_select_font</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_win32_font_select_font        (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="HDC--CAPS">HDC</link> hdc);</programlisting>
+<para>
+Selects the font into the specified DC and changes the mapping mode
+and world transformation of the DC appropriately for the font.
+You may want to surround the use of this function with calls
+to <link linkend="SaveDC"><function>SaveDC()</function></link> and <link linkend="RestoreDC"><function>RestoreDC()</function></link>. Call <link linkend="pango-win32-font-done-font"><function>pango_win32_font_done_font()</function></link> when
+you are done using the DC to release allocated resources.
+</para>
+<para>
+See <link linkend="pango-win32-font-get-metrics-factor"><function>pango_win32_font_get_metrics_factor()</function></link> for information about
+converting from the coordinate space used by this function
+into Pango units.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> from the Win32 backend
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>hdc</parameter>&#160;:</term>
+<listitem><simpara> a windows device context
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the operation succeeded.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-done-font" role="function">
+<title>pango_win32_font_done_font ()</title>
+<indexterm zone="pango-win32-font-done-font"><primary sortas="pango_win32_font_done_font">pango_win32_font_done_font</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_font_done_font          (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Releases any resources allocated by <link linkend="pango-win32-font-done-font"><function>pango_win32_font_done_font()</function></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> from the win32 backend
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-get-metrics-factor" role="function">
+<title>pango_win32_font_get_metrics_factor ()</title>
+<indexterm zone="pango-win32-font-get-metrics-factor"><primary sortas="pango_win32_font_get_metrics_factor">pango_win32_font_get_metrics_factor</primary></indexterm><programlisting><link linkend="double">double</link>              pango_win32_font_get_metrics_factor (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Returns the scale factor from logical units in the coordinate
+space used by <link linkend="pango-win32-font-select-font"><function>pango_win32_font_select_font()</function></link> to Pango units
+in user space.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> from the win32 backend
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> factor to multiply logical units by to get Pango
+              units.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-get-debug-flag" role="function" condition="since:1.2">
+<title>pango_win32_get_debug_flag ()</title>
+<indexterm zone="pango-win32-get-debug-flag" role="1.2"><primary sortas="pango_win32_get_debug_flag">pango_win32_get_debug_flag</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_win32_get_debug_flag          (void);</programlisting>
+<para>
+Returns whether debugging is turned on.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if debugging is turned on.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-win32-get-dc" role="function">
+<title>pango_win32_get_dc ()</title>
+<indexterm zone="pango-win32-get-dc"><primary sortas="pango_win32_get_dc">pango_win32_get_dc</primary></indexterm><programlisting><link linkend="HDC--CAPS">HDC</link>                 pango_win32_get_dc                  (void);</programlisting>
+<para>
+Obtains a handle to the Windows device context that is used by Pango.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A handle to the Windows device context that is used by Pango.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoWin32FontCache" role="struct">
+<title>PangoWin32FontCache</title>
+<indexterm zone="PangoWin32FontCache"><primary sortas="PangoWin32FontCache">PangoWin32FontCache</primary></indexterm><programlisting>typedef struct _PangoWin32FontCache PangoWin32FontCache;</programlisting>
+<para>
+A <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link> caches
+HFONTs by their LOGFONT descriptions.
+</para></refsect2>
+<refsect2 id="pango-win32-font-cache-new" role="function">
+<title>pango_win32_font_cache_new ()</title>
+<indexterm zone="pango-win32-font-cache-new"><primary sortas="pango_win32_font_cache_new">pango_win32_font_cache_new</primary></indexterm><programlisting><link linkend="PangoWin32FontCache">PangoWin32FontCache</link> * pango_win32_font_cache_new        (void);</programlisting>
+<para>
+Creates a font cache.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The new font cache. This must be freed with
+<link linkend="pango-win32-font-cache-free"><function>pango_win32_font_cache_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-cache-free" role="function">
+<title>pango_win32_font_cache_free ()</title>
+<indexterm zone="pango-win32-font-cache-free"><primary sortas="pango_win32_font_cache_free">pango_win32_font_cache_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_font_cache_free         (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache);</programlisting>
+<para>
+Frees a <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link> and all associated memory. All fonts loaded
+through this font cache will be freed along with the cache.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-cache-load" role="function">
+<title>pango_win32_font_cache_load ()</title>
+<indexterm zone="pango-win32-font-cache-load"><primary sortas="pango_win32_font_cache_load">pango_win32_font_cache_load</primary></indexterm><programlisting><link linkend="HFONT--CAPS">HFONT</link>               pango_win32_font_cache_load         (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache,
+                                                         const <link linkend="LOGFONTA--CAPS">LOGFONTA</link> *logfont);</programlisting>
+<para>
+Creates a HFONT from a LOGFONTA. The
+result may be newly loaded, or it may have been previously
+stored</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logfont</parameter>&#160;:</term>
+<listitem><simpara> a pointer to a LOGFONTA structure describing the font to load.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The font structure, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the font could
+not be loaded. In order to free this structure, you must call
+<link linkend="pango-win32-font-cache-unload"><function>pango_win32_font_cache_unload()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-cache-loadw" role="function" condition="since:1.16">
+<title>pango_win32_font_cache_loadw ()</title>
+<indexterm zone="pango-win32-font-cache-loadw" role="1.16"><primary sortas="pango_win32_font_cache_loadw">pango_win32_font_cache_loadw</primary></indexterm><programlisting><link linkend="HFONT--CAPS">HFONT</link>               pango_win32_font_cache_loadw        (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache,
+                                                         const <link linkend="LOGFONTW--CAPS">LOGFONTW</link> *logfont);</programlisting>
+<para>
+Creates a HFONT from a LOGFONTW. The
+result may be newly loaded, or it may have been previously
+stored</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>logfont</parameter>&#160;:</term>
+<listitem><simpara> a pointer to a LOGFONTW structure describing the font to load.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The font structure, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the font could
+not be loaded. In order to free this structure, you must call
+<link linkend="pango-win32-font-cache-unload"><function>pango_win32_font_cache_unload()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-win32-font-cache-unload" role="function">
+<title>pango_win32_font_cache_unload ()</title>
+<indexterm zone="pango-win32-font-cache-unload"><primary sortas="pango_win32_font_cache_unload">pango_win32_font_cache_unload</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_font_cache_unload       (<link linkend="PangoWin32FontCache">PangoWin32FontCache</link> *cache,
+                                                         <link linkend="HFONT--CAPS">HFONT</link> hfont);</programlisting>
+<para>
+Frees a font structure previously loaded with <link linkend="pango-win32-font-cache-load"><function>pango_win32_font_cache_load()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>hfont</parameter>&#160;:</term>
+<listitem><simpara> the HFONT to unload
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-map-for-display" role="function">
+<title>pango_win32_font_map_for_display ()</title>
+<indexterm zone="pango-win32-font-map-for-display"><primary sortas="pango_win32_font_map_for_display">pango_win32_font_map_for_display</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_win32_font_map_for_display    (void);</programlisting>
+<para>
+Returns a <link linkend="PangoWin32FontMap"><type>PangoWin32FontMap</type></link>. Font maps are cached and should
+not be freed. If the font map is no longer needed, it can
+be released with <link linkend="pango-win32-shutdown-display"><function>pango_win32_shutdown_display()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-shutdown-display" role="function">
+<title>pango_win32_shutdown_display ()</title>
+<indexterm zone="pango-win32-shutdown-display"><primary sortas="pango_win32_shutdown_display">pango_win32_shutdown_display</primary></indexterm><programlisting><link linkend="void">void</link>                pango_win32_shutdown_display        (void);</programlisting>
+<para>
+Free cached resources.</para>
+<para>
+</para></refsect2>
+<refsect2 id="pango-win32-font-map-get-font-cache" role="function">
+<title>pango_win32_font_map_get_font_cache ()</title>
+<indexterm zone="pango-win32-font-map-get-font-cache"><primary sortas="pango_win32_font_map_get_font_cache">pango_win32_font_map_get_font_cache</primary></indexterm><programlisting><link linkend="PangoWin32FontCache">PangoWin32FontCache</link> * pango_win32_font_map_get_font_cache
+                                                        (<link linkend="PangoFontMap">PangoFontMap</link> *font_map);</programlisting>
+<para>
+Obtains the font cache associated with the given font map.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font_map</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoWin32FontMap"><type>PangoWin32FontMap</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoWin32FontCache"><type>PangoWin32FontCache</type></link> of <parameter>font_map</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-logfont" role="function">
+<title>pango_win32_font_logfont ()</title>
+<indexterm zone="pango-win32-font-logfont"><primary sortas="pango_win32_font_logfont">pango_win32_font_logfont</primary></indexterm><programlisting><link linkend="LOGFONTA--CAPS">LOGFONTA</link> *          pango_win32_font_logfont            (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Determine the LOGFONTA struct for the specified font. Note that
+Pango internally uses LOGFONTW structs, so if converting the UTF-16
+face name in the LOGFONTW struct to system codepage fails, the
+returned LOGFONTA will have an emppty face name. To get the
+LOGFONTW of a PangoFont, use <link linkend="pango-win32-font-logfontw"><function>pango_win32_font_logfontw()</function></link>. It
+is recommended to do that always even if you don't expect
+to come across fonts with odd names.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> which must be from the Win32 backend
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A newly allocated LOGFONTA struct. It must be
+freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-win32-font-logfontw" role="function" condition="since:1.16">
+<title>pango_win32_font_logfontw ()</title>
+<indexterm zone="pango-win32-font-logfontw" role="1.16"><primary sortas="pango_win32_font_logfontw">pango_win32_font_logfontw</primary></indexterm><programlisting><link linkend="LOGFONTW--CAPS">LOGFONTW</link> *          pango_win32_font_logfontw           (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Determine the LOGFONTW struct for the specified font.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> which must be from the Win32 backend
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A newly allocated LOGFONTW struct. It must be
+freed with <link linkend="g-free"><function>g_free()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+<refsect2 id="pango-win32-font-description-from-logfont" role="function" condition="since:1.12">
+<title>pango_win32_font_description_from_logfont ()</title>
+<indexterm zone="pango-win32-font-description-from-logfont" role="1.12"><primary sortas="pango_win32_font_description_from_logfont">pango_win32_font_description_from_logfont</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_win32_font_description_from_logfont
+                                                        (const <link linkend="LOGFONTA--CAPS">LOGFONTA</link> *lfp);</programlisting>
+<para>
+Creates a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> that matches the specified LOGFONTA.
+</para>
+<para>
+The face name, italicness and weight fields in the LOGFONTA are used
+to set up the resulting <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>. If the face name in
+the LOGFONTA contains non-ASCII characters the font is temporarily
+loaded (using <link linkend="CreateFontIndirect"><function>CreateFontIndirect()</function></link>) and an ASCII (usually English)
+name for it is looked up from the font name tables in the font
+data. If that doesn't work, the face name is converted from the
+system codepage to UTF-8 and that is used.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>lfp</parameter>&#160;:</term>
+<listitem><simpara> a LOGFONTA
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, which
+ should be freed using <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.12</para></refsect2>
+<refsect2 id="pango-win32-font-description-from-logfontw" role="function" condition="since:1.16">
+<title>pango_win32_font_description_from_logfontw ()</title>
+<indexterm zone="pango-win32-font-description-from-logfontw" role="1.16"><primary sortas="pango_win32_font_description_from_logfontw">pango_win32_font_description_from_logfontw</primary></indexterm><programlisting><link linkend="PangoFontDescription">PangoFontDescription</link> * pango_win32_font_description_from_logfontw
+                                                        (const <link linkend="LOGFONTW--CAPS">LOGFONTW</link> *lfp);</programlisting>
+<para>
+Creates a <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link> that matches the specified LOGFONTW.
+</para>
+<para>
+The face name, italicness and weight fields in the LOGFONTW are used
+to set up the resulting <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>. If the face name in
+the LOGFONTW contains non-ASCII characters the font is temporarily
+loaded (using <link linkend="CreateFontIndirect"><function>CreateFontIndirect()</function></link>) and an ASCII (usually English)
+name for it is looked up from the font name tables in the font
+data. If that doesn't work, the face name is converted from UTF-16
+to UTF-8 and that is used.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>lfp</parameter>&#160;:</term>
+<listitem><simpara> a LOGFONTW
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly allocated <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>, which
+ should be freed using <link linkend="pango-font-description-free"><function>pango_font_description_free()</function></link>
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.16</para></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/x-fonts.xml b/docs/xml/x-fonts.xml
new file mode 100755 (executable)
index 0000000..d9af271
--- /dev/null
@@ -0,0 +1,686 @@
+<refentry id="pango-X-Fonts-and-Rendering">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-X-Fonts-and-Rendering.top_of_page">Deprecated X font backend</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Deprecated X font backend</refname>
+<refpurpose>Font handling and rendering with the deprecated X font backend</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-X-Fonts-and-Rendering.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+
+<synopsis>
+#define             <link linkend="PANGO-RENDER-TYPE-X--CAPS">PANGO_RENDER_TYPE_X</link>
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-x-get-context">pango_x_get_context</link>                 (<link linkend="Display">Display</link> *display);
+<link linkend="void">void</link>                <link linkend="pango-x-context-set-funcs">pango_x_context_set_funcs</link>           (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoGetGCFunc">PangoGetGCFunc</link> get_gc_func,
+                                                         <link linkend="PangoFreeGCFunc">PangoFreeGCFunc</link> free_gc_func);
+<link linkend="GC--CAPS">GC</link>                  (<link linkend="PangoGetGCFunc">*PangoGetGCFunc</link>)                   (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoColor">PangoColor</link> *color,
+                                                         <link linkend="GC--CAPS">GC</link> base_gc);
+<link linkend="void">void</link>                (<link linkend="PangoFreeGCFunc">*PangoFreeGCFunc</link>)                  (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="GC--CAPS">GC</link> gc);
+<link linkend="void">void</link>                <link linkend="pango-x-render">pango_x_render</link>                      (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Drawable">Drawable</link> d,
+                                                         <link linkend="GC--CAPS">GC</link> gc,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);
+<link linkend="void">void</link>                <link linkend="pango-x-render-layout-line">pango_x_render_layout_line</link>          (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Drawable">Drawable</link> drawable,
+                                                         <link linkend="GC--CAPS">GC</link> gc,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-x-render-layout">pango_x_render_layout</link>               (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Drawable">Drawable</link> drawable,
+                                                         <link linkend="GC--CAPS">GC</link> gc,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+typedef             <link linkend="PangoXSubfont">PangoXSubfont</link>;
+#define             <link linkend="PANGO-X-MAKE-GLYPH--CAPS">PANGO_X_MAKE_GLYPH</link>                  (subfont,index_)
+#define             <link linkend="PANGO-X-GLYPH-SUBFONT--CAPS">PANGO_X_GLYPH_SUBFONT</link>               (glyph)
+#define             <link linkend="PANGO-X-GLYPH-INDEX--CAPS">PANGO_X_GLYPH_INDEX</link>                 (glyph)
+<link linkend="PangoFont">PangoFont</link> *         <link linkend="pango-x-load-font">pango_x_load_font</link>                   (<link linkend="Display">Display</link> *display,
+                                                         const <link linkend="gchar">gchar</link> *spec);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-x-get-unknown-glyph">pango_x_get_unknown_glyph</link>           (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-x-has-glyph">pango_x_has_glyph</link>                   (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> glyph);
+<link linkend="int">int</link>                 <link linkend="pango-x-list-subfonts">pango_x_list_subfonts</link>               (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="char">char</link> **charsets,
+                                                         <link linkend="int">int</link> n_charsets,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> **subfont_ids,
+                                                         <link linkend="int">int</link> **subfont_charsets);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-x-font-map-for-display">pango_x_font_map_for_display</link>        (<link linkend="Display">Display</link> *display);
+<link linkend="void">void</link>                <link linkend="pango-x-shutdown-display">pango_x_shutdown_display</link>            (<link linkend="Display">Display</link> *display);
+<link linkend="PangoXFontCache">PangoXFontCache</link> *   <link linkend="pango-x-font-map-get-font-cache">pango_x_font_map_get_font_cache</link>     (<link linkend="PangoFontMap">PangoFontMap</link> *font_map);
+<link linkend="char">char</link> *              <link linkend="pango-x-font-subfont-xlfd">pango_x_font_subfont_xlfd</link>           (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> subfont_id);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-x-find-first-subfont">pango_x_find_first_subfont</link>          (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="char">char</link> **charsets,
+                                                         <link linkend="int">int</link> n_charsets,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> *rfont);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-x-font-get-unknown-glyph">pango_x_font_get_unknown_glyph</link>      (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-x-apply-ligatures">pango_x_apply_ligatures</link>             (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> subfont,
+                                                         <link linkend="gunichar">gunichar</link> **glyphs,
+                                                         <link linkend="int">int</link> *n_glyphs,
+                                                         <link linkend="int">int</link> **clusters);
+<link linkend="void">void</link>                <link linkend="pango-x-fallback-shape">pango_x_fallback_shape</link>              (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> n_chars);
+                    <link linkend="PangoXFontCache">PangoXFontCache</link>;
+<link linkend="PangoXFontCache">PangoXFontCache</link> *   <link linkend="pango-x-font-cache-new">pango_x_font_cache_new</link>              (<link linkend="Display">Display</link> *display);
+<link linkend="void">void</link>                <link linkend="pango-x-font-cache-free">pango_x_font_cache_free</link>             (<link linkend="PangoXFontCache">PangoXFontCache</link> *cache);
+<link linkend="XFontStruct">XFontStruct</link> *       <link linkend="pango-x-font-cache-load">pango_x_font_cache_load</link>             (<link linkend="PangoXFontCache">PangoXFontCache</link> *cache,
+                                                         const <link linkend="char">char</link> *xlfd);
+<link linkend="void">void</link>                <link linkend="pango-x-font-cache-unload">pango_x_font_cache_unload</link>           (<link linkend="PangoXFontCache">PangoXFontCache</link> *cache,
+                                                         <link linkend="XFontStruct">XFontStruct</link> *fs);
+</synopsis>
+</refsynopsisdiv>
+
+
+
+
+
+
+
+
+
+<refsect1 id="pango-X-Fonts-and-Rendering.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The functions and macros in this section are for use with the old
+X font backend which used server-side bitmap fonts. This font backend
+is no longer supported, and attempts to use it will produce
+unpredictable results. Use the <link linkend="pango-Xft-Fonts-and-Rendering">Xft</link>
+or <link linkend="pango-Cairo-Rendering">Cairo</link> backend instead.
+</para>
+</refsect1>
+
+<refsect1 id="pango-X-Fonts-and-Rendering.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PANGO-RENDER-TYPE-X--CAPS" role="macro" condition="deprecated:">
+<title>PANGO_RENDER_TYPE_X</title>
+<indexterm zone="PANGO-RENDER-TYPE-X--CAPS" role="deprecated"><primary sortas="PANGO_RENDER_TYPE_X">PANGO_RENDER_TYPE_X</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_X "PangoRenderX"
+</programlisting>
+<warning><para><literal>PANGO_RENDER_TYPE_X</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+A string constant identifying the X renderer. The associated quark (see
+<link linkend="g-quark-from-string"><function>g_quark_from_string()</function></link>) is used to identify the renderer in <link linkend="pango-find-map"><function>pango_find_map()</function></link>.
+</para></refsect2>
+<refsect2 id="pango-x-get-context" role="function" condition="deprecated">
+<title>pango_x_get_context ()</title>
+<indexterm zone="pango-x-get-context" role="deprecated"><primary sortas="pango_x_get_context">pango_x_get_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_x_get_context                 (<link linkend="Display">Display</link> *display);</programlisting>
+<warning><para><literal>pango_x_get_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-x-font-map-for-display"><function>pango_x_font_map_for_display()</function></link> followed by
+<link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Retrieves a <link linkend="PangoContext"><type>PangoContext</type></link> appropriate for rendering with X fonts on the
+given display.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X display (As returned by <link linkend="XOpenDisplay"><function>XOpenDisplay()</function></link>.)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new <link linkend="PangoContext"><type>PangoContext</type></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-context-set-funcs" role="function" condition="deprecated:">
+<title>pango_x_context_set_funcs ()</title>
+<indexterm zone="pango-x-context-set-funcs" role="deprecated"><primary sortas="pango_x_context_set_funcs">pango_x_context_set_funcs</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_context_set_funcs           (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoGetGCFunc">PangoGetGCFunc</link> get_gc_func,
+                                                         <link linkend="PangoFreeGCFunc">PangoFreeGCFunc</link> free_gc_func);</programlisting>
+<warning><para><literal>pango_x_context_set_funcs</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Sets the functions that will be used to get GC's in various colors when
+rendering layouts with this context.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoContext"><type>PangoContext</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>get_gc_func</parameter>&#160;:</term>
+<listitem><simpara> function called to create a new GC for a given color.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>free_gc_func</parameter>&#160;:</term>
+<listitem><simpara> function called to free a GC created with <parameter>get_gc_func</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoGetGCFunc" role="function" condition="deprecated:">
+<title>PangoGetGCFunc ()</title>
+<indexterm zone="PangoGetGCFunc" role="deprecated"><primary sortas="PangoGetGCFunc">PangoGetGCFunc</primary></indexterm><programlisting><link linkend="GC--CAPS">GC</link>                  (*PangoGetGCFunc)                   (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="PangoColor">PangoColor</link> *color,
+                                                         <link linkend="GC--CAPS">GC</link> base_gc);</programlisting>
+<warning><para><literal>PangoGetGCFunc</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Specifies the type of the function used to create a new GC for a given
+color.
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoContext"><type>PangoContext</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara>the color to create a new GC for.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>base_gc</parameter>&#160;:</term>
+<listitem><simpara>the GC to base the new GC on.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara>the new GC.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoFreeGCFunc" role="function" condition="deprecated:">
+<title>PangoFreeGCFunc ()</title>
+<indexterm zone="PangoFreeGCFunc" role="deprecated"><primary sortas="PangoFreeGCFunc">PangoFreeGCFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*PangoFreeGCFunc)                  (<link linkend="PangoContext">PangoContext</link> *context,
+                                                         <link linkend="GC--CAPS">GC</link> gc);</programlisting>
+<warning><para><literal>PangoFreeGCFunc</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Specifies the type of the function used to free a GC created with
+the corresponding <link linkend="PangoGetGCFunc"><type>PangoGetGCFunc</type></link> function.
+</para><variablelist role="params">
+<varlistentry><term><parameter>context</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoContext"><type>PangoContext</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>gc</parameter>&#160;:</term>
+<listitem><simpara>the GC to free.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-render" role="function" condition="deprecated:">
+<title>pango_x_render ()</title>
+<indexterm zone="pango-x-render" role="deprecated"><primary sortas="pango_x_render">pango_x_render</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_render                      (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Drawable">Drawable</link> d,
+                                                         <link linkend="GC--CAPS">GC</link> gc,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);</programlisting>
+<warning><para><literal>pango_x_render</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto an X drawable.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> the X display.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>d</parameter>&#160;:</term>
+<listitem><simpara>       the drawable on which to draw string.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>gc</parameter>&#160;:</term>
+<listitem><simpara>      the graphics context.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of start of string (in pixels).
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of baseline (in pixels).
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-render-layout-line" role="function" condition="deprecated:">
+<title>pango_x_render_layout_line ()</title>
+<indexterm zone="pango-x-render-layout-line" role="deprecated"><primary sortas="pango_x_render_layout_line">pango_x_render_layout_line</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_render_layout_line          (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Drawable">Drawable</link> drawable,
+                                                         <link linkend="GC--CAPS">GC</link> gc,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<warning><para><literal>pango_x_render_layout_line</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Renders a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> onto an X drawable.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara>   the X display.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>drawable</parameter>&#160;:</term>
+<listitem><simpara>  the drawable on which to draw.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>gc</parameter>&#160;:</term>
+<listitem><simpara>        GC to use for uncolored drawing.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the x position of start of string (in pixels).
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the y position of baseline (in pixels).
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-render-layout" role="function" condition="deprecated:">
+<title>pango_x_render_layout ()</title>
+<indexterm zone="pango-x-render-layout" role="deprecated"><primary sortas="pango_x_render_layout">pango_x_render_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_render_layout               (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Drawable">Drawable</link> drawable,
+                                                         <link linkend="GC--CAPS">GC</link> gc,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<warning><para><literal>pango_x_render_layout</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Renders a <link linkend="PangoLayout"><type>PangoLayout</type></link> onto an X drawable.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara>   the X display.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>drawable</parameter>&#160;:</term>
+<listitem><simpara>  the drawable on which to draw.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>gc</parameter>&#160;:</term>
+<listitem><simpara>        GC to use for uncolored drawing.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the x position of the left of the layout (in pixels).
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the y position of the top of the layout (in pixels).
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoXSubfont" role="typedef" condition="deprecated:">
+<title>PangoXSubfont</title>
+<indexterm zone="PangoXSubfont" role="deprecated"><primary sortas="PangoXSubfont">PangoXSubfont</primary></indexterm><programlisting>typedef guint16 PangoXSubfont;
+</programlisting>
+<warning><para><literal>PangoXSubfont</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+The <link linkend="PangoXSubFont"><type>PangoXSubFont</type></link> type is an integer ID that identifies one
+particular X font within the fonts referenced in a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-X-MAKE-GLYPH--CAPS" role="macro" condition="deprecated:">
+<title>PANGO_X_MAKE_GLYPH()</title>
+<indexterm zone="PANGO-X-MAKE-GLYPH--CAPS" role="deprecated"><primary sortas="PANGO_X_MAKE_GLYPH">PANGO_X_MAKE_GLYPH</primary></indexterm><programlisting>#define PANGO_X_MAKE_GLYPH(subfont,index_) ((subfont)&lt;&lt;16 | (index_))
+</programlisting>
+<warning><para><literal>PANGO_X_MAKE_GLYPH</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Make a glyph index from a <link linkend="PangoXSubFont"><type>PangoXSubFont</type></link> index and a index
+of a character with the corresponding X font.
+</para><variablelist role="params">
+<varlistentry><term><parameter>subfont</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoXSubfont"><type>PangoXSubfont</type></link> index
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>index_</parameter>&#160;:</term>
+<listitem><simpara>the index of a character within an X font.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-X-GLYPH-SUBFONT--CAPS" role="macro" condition="deprecated:">
+<title>PANGO_X_GLYPH_SUBFONT()</title>
+<indexterm zone="PANGO-X-GLYPH-SUBFONT--CAPS" role="deprecated"><primary sortas="PANGO_X_GLYPH_SUBFONT">PANGO_X_GLYPH_SUBFONT</primary></indexterm><programlisting>#define PANGO_X_GLYPH_SUBFONT(glyph) ((glyph)&gt;&gt;16)
+</programlisting>
+<warning><para><literal>PANGO_X_GLYPH_SUBFONT</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Extract the subfont index from a glyph index.
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyph</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoGlyphIndex"><type>PangoGlyphIndex</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PANGO-X-GLYPH-INDEX--CAPS" role="macro" condition="deprecated:">
+<title>PANGO_X_GLYPH_INDEX()</title>
+<indexterm zone="PANGO-X-GLYPH-INDEX--CAPS" role="deprecated"><primary sortas="PANGO_X_GLYPH_INDEX">PANGO_X_GLYPH_INDEX</primary></indexterm><programlisting>#define PANGO_X_GLYPH_INDEX(glyph) ((glyph) &amp; 0xffff)
+</programlisting>
+<warning><para><literal>PANGO_X_GLYPH_INDEX</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Extract the character index within the X font from a
+glyph index.
+</para><variablelist role="params">
+<varlistentry><term><parameter>glyph</parameter>&#160;:</term>
+<listitem><simpara>a <link linkend="PangoGlyphIndex"><type>PangoGlyphIndex</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-load-font" role="function" condition="deprecated:">
+<title>pango_x_load_font ()</title>
+<indexterm zone="pango-x-load-font" role="deprecated"><primary sortas="pango_x_load_font">pango_x_load_font</primary></indexterm><programlisting><link linkend="PangoFont">PangoFont</link> *         pango_x_load_font                   (<link linkend="Display">Display</link> *display,
+                                                         const <link linkend="gchar">gchar</link> *spec);</programlisting>
+<warning><para><literal>pango_x_load_font</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Loads up a logical font based on a "fontset" style text
+specification. This is not remotely useful (Pango API's generally
+work in terms of <link linkend="PangoFontDescription"><type>PangoFontDescription</type></link>) and the result may not
+work correctly in all circumstances. Use of this function should
+be avoided.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> the X display.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>spec</parameter>&#160;:</term>
+<listitem><simpara>    a comma-separated list of XLFD's.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a new <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-get-unknown-glyph" role="function" condition="deprecated:">
+<title>pango_x_get_unknown_glyph ()</title>
+<indexterm zone="pango-x-get-unknown-glyph" role="deprecated"><primary sortas="pango_x_get_unknown_glyph">pango_x_get_unknown_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_x_get_unknown_glyph           (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<warning><para><literal>pango_x_get_unknown_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns the index of a glyph suitable for drawing unknown characters;
+you should generally use <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS"><function>PANGO_GET_UNKNOWN_GLYPH()</function></link> instead,
+since that may return a glyph that provides a better representation
+of a particular char. (E.g., by showing hex digits, or a glyph
+representative of a certain Unicode range.)</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a glyph index into <parameter>font</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-has-glyph" role="function" condition="deprecated:">
+<title>pango_x_has_glyph ()</title>
+<indexterm zone="pango-x-has-glyph" role="deprecated"><primary sortas="pango_x_has_glyph">pango_x_has_glyph</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_x_has_glyph                   (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyph">PangoGlyph</link> glyph);</programlisting>
+<warning><para><literal>pango_x_has_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Checks if the given glyph is present in a X font.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> which must be from the X backend.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyph</parameter>&#160;:</term>
+<listitem><simpara> the index of a glyph in the font. (Formed
+        using the <link linkend="PANGO-X-MAKE-GLYPH--CAPS"><type>PANGO_X_MAKE_GLYPH</type></link> macro)
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if the glyph is present.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-list-subfonts" role="function" condition="deprecated:">
+<title>pango_x_list_subfonts ()</title>
+<indexterm zone="pango-x-list-subfonts" role="deprecated"><primary sortas="pango_x_list_subfonts">pango_x_list_subfonts</primary></indexterm><programlisting><link linkend="int">int</link>                 pango_x_list_subfonts               (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="char">char</link> **charsets,
+                                                         <link linkend="int">int</link> n_charsets,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> **subfont_ids,
+                                                         <link linkend="int">int</link> **subfont_charsets);</programlisting>
+<warning><para><literal>pango_x_list_subfonts</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Lists the subfonts of a given font. The result is ordered first by charset,
+and then within each charset, by the order of fonts in the font specification.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>charsets</parameter>&#160;:</term>
+<listitem><simpara> the charsets to list subfonts for.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_charsets</parameter>&#160;:</term>
+<listitem><simpara> the number of charsets in <parameter>charsets</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>subfont_ids</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of subfont IDs for each found subfont;
+              the result must be freed using <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>subfont_charsets</parameter>&#160;:</term>
+<listitem><simpara> location to store a pointer to an array of subfont IDs for each found subfont;
+              the result must be freed using <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> length of the arrays stored in <parameter>subfont_ids</parameter> and
+<parameter>subfont_charsets</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-map-for-display" role="function" condition="deprecated:">
+<title>pango_x_font_map_for_display ()</title>
+<indexterm zone="pango-x-font-map-for-display" role="deprecated"><primary sortas="pango_x_font_map_for_display">pango_x_font_map_for_display</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_x_font_map_for_display        (<link linkend="Display">Display</link> *display);</programlisting>
+<warning><para><literal>pango_x_font_map_for_display</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns a <link linkend="PangoXFontMap"><type>PangoXFontMap</type></link> for <parameter>display</parameter>. Font maps are cached and should
+not be freed. If the font map for a display is no longer needed, it can
+be released with <link linkend="pango-x-shutdown-display"><function>pango_x_shutdown_display()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X <link linkend="Display"><type>Display</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoXFontMap"><type>PangoXFontMap</type></link> for <parameter>display</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-shutdown-display" role="function" condition="deprecated:">
+<title>pango_x_shutdown_display ()</title>
+<indexterm zone="pango-x-shutdown-display" role="deprecated"><primary sortas="pango_x_shutdown_display">pango_x_shutdown_display</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_shutdown_display            (<link linkend="Display">Display</link> *display);</programlisting>
+<warning><para><literal>pango_x_shutdown_display</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Free cached resources for the given X display structure.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X <link linkend="Display"><type>Display</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-map-get-font-cache" role="function" condition="deprecated:">
+<title>pango_x_font_map_get_font_cache ()</title>
+<indexterm zone="pango-x-font-map-get-font-cache" role="deprecated"><primary sortas="pango_x_font_map_get_font_cache">pango_x_font_map_get_font_cache</primary></indexterm><programlisting><link linkend="PangoXFontCache">PangoXFontCache</link> *   pango_x_font_map_get_font_cache     (<link linkend="PangoFontMap">PangoFontMap</link> *font_map);</programlisting>
+<warning><para><literal>pango_x_font_map_get_font_cache</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Obtains the font cache associated with the given font map.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font_map</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoXFontMap"><type>PangoXFontMap</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link> of <parameter>font_map</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-subfont-xlfd" role="function" condition="deprecated:">
+<title>pango_x_font_subfont_xlfd ()</title>
+<indexterm zone="pango-x-font-subfont-xlfd" role="deprecated"><primary sortas="pango_x_font_subfont_xlfd">pango_x_font_subfont_xlfd</primary></indexterm><programlisting><link linkend="char">char</link> *              pango_x_font_subfont_xlfd           (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> subfont_id);</programlisting>
+<warning><para><literal>pango_x_font_subfont_xlfd</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Determines the X Logical Font Description for the specified
+subfont.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> which must be from the X backend.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>subfont_id</parameter>&#160;:</term>
+<listitem><simpara> the id of a subfont within the font.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> A newly-allocated string containing the XLFD for the
+subfont. This string must be freed with <link linkend="g-free"><function>g_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-find-first-subfont" role="function" condition="deprecated:">
+<title>pango_x_find_first_subfont ()</title>
+<indexterm zone="pango-x-find-first-subfont" role="deprecated"><primary sortas="pango_x_find_first_subfont">pango_x_find_first_subfont</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_x_find_first_subfont          (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="char">char</link> **charsets,
+                                                         <link linkend="int">int</link> n_charsets,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> *rfont);</programlisting>
+<warning><para><literal>pango_x_find_first_subfont</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Looks for subfonts with the <parameter>charset</parameter> charset,
+in <parameter>font</parameter>, and puts the first one in *<parameter>rfont</parameter>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>charsets</parameter>&#160;:</term>
+<listitem><simpara> An array of charsets.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_charsets</parameter>&#160;:</term>
+<listitem><simpara> The number of charsets in <parameter>charsets</parameter>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>rfont</parameter>&#160;:</term>
+<listitem><simpara> A pointer to a <link linkend="PangoXSubfont"><type>PangoXSubfont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if *<parameter>rfont</parameter> now contains a font.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-get-unknown-glyph" role="function" condition="deprecated:">
+<title>pango_x_font_get_unknown_glyph ()</title>
+<indexterm zone="pango-x-font-get-unknown-glyph" role="deprecated"><primary sortas="pango_x_font_get_unknown_glyph">pango_x_font_get_unknown_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_x_font_get_unknown_glyph      (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<warning><para><literal>pango_x_font_get_unknown_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns the index of a glyph suitable for drawing <parameter>wc</parameter> as an
+unknown character.
+</para>
+<para>
+Use <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS"><function>PANGO_GET_UNKNOWN_GLYPH()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> the Unicode character for which a glyph is needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a glyph index into <parameter>font</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-apply-ligatures" role="function" condition="deprecated:">
+<title>pango_x_apply_ligatures ()</title>
+<indexterm zone="pango-x-apply-ligatures" role="deprecated"><primary sortas="pango_x_apply_ligatures">pango_x_apply_ligatures</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_x_apply_ligatures             (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoXSubfont">PangoXSubfont</link> subfont,
+                                                         <link linkend="gunichar">gunichar</link> **glyphs,
+                                                         <link linkend="int">int</link> *n_glyphs,
+                                                         <link linkend="int">int</link> **clusters);</programlisting>
+<warning><para><literal>pango_x_apply_ligatures</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Previously did subfont-specific ligation. Now a no-op.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> unused
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>subfont</parameter>&#160;:</term>
+<listitem><simpara> unused
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> unused
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_glyphs</parameter>&#160;:</term>
+<listitem><simpara> unused
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>clusters</parameter>&#160;:</term>
+<listitem><simpara> unused
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="FALSE--CAPS"><literal>FALSE</literal></link>, always.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-fallback-shape" role="function" condition="deprecated:">
+<title>pango_x_fallback_shape ()</title>
+<indexterm zone="pango-x-fallback-shape" role="deprecated"><primary sortas="pango_x_fallback_shape">pango_x_fallback_shape</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_fallback_shape              (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         const <link linkend="char">char</link> *text,
+                                                         <link linkend="int">int</link> n_chars);</programlisting>
+<warning><para><literal>pango_x_fallback_shape</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+This is a simple fallback shaper, that can be used
+if no subfont that supports a given script is found.
+For every character in <parameter>text</parameter>, it puts the unknown glyph.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> A <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara> A pointer to a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>text</parameter>&#160;:</term>
+<listitem><simpara> UTF-8 string.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>n_chars</parameter>&#160;:</term>
+<listitem><simpara> Number of UTF-8 seqs in <parameter>text</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoXFontCache" role="struct" condition="deprecated:">
+<title>PangoXFontCache</title>
+<indexterm zone="PangoXFontCache" role="deprecated"><primary sortas="PangoXFontCache">PangoXFontCache</primary></indexterm><programlisting>typedef struct _PangoXFontCache PangoXFontCache;</programlisting>
+<warning><para><literal>PangoXFontCache</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+A <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link> caches
+<type>XFontStructs</type> for a single display by their XLFD name.
+</para></refsect2>
+<refsect2 id="pango-x-font-cache-new" role="function" condition="deprecated:">
+<title>pango_x_font_cache_new ()</title>
+<indexterm zone="pango-x-font-cache-new" role="deprecated"><primary sortas="pango_x_font_cache_new">pango_x_font_cache_new</primary></indexterm><programlisting><link linkend="PangoXFontCache">PangoXFontCache</link> *   pango_x_font_cache_new              (<link linkend="Display">Display</link> *display);</programlisting>
+<warning><para><literal>pango_x_font_cache_new</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Creates a font cache for the specified display.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X display.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The newly allocated <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link>, which should be
+              freed with <link linkend="pango-x-font-cache-free"><function>pango_x_font_cache_free()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-cache-free" role="function" condition="deprecated:">
+<title>pango_x_font_cache_free ()</title>
+<indexterm zone="pango-x-font-cache-free" role="deprecated"><primary sortas="pango_x_font_cache_free">pango_x_font_cache_free</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_font_cache_free             (<link linkend="PangoXFontCache">PangoXFontCache</link> *cache);</programlisting>
+<warning><para><literal>pango_x_font_cache_free</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Frees a <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link> and all associated memory. All fonts loaded
+through this font cache will be freed along with the cache.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link>
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-cache-load" role="function" condition="deprecated:">
+<title>pango_x_font_cache_load ()</title>
+<indexterm zone="pango-x-font-cache-load" role="deprecated"><primary sortas="pango_x_font_cache_load">pango_x_font_cache_load</primary></indexterm><programlisting><link linkend="XFontStruct">XFontStruct</link> *       pango_x_font_cache_load             (<link linkend="PangoXFontCache">PangoXFontCache</link> *cache,
+                                                         const <link linkend="char">char</link> *xlfd);</programlisting>
+<warning><para><literal>pango_x_font_cache_load</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Loads a <link linkend="XFontStruct"><type>XFontStruct</type></link> from a X Logical Font Description. The
+result may be newly loaded, or it may have been previously
+stored.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>xlfd</parameter>&#160;:</term>
+<listitem><simpara> the X Logical Font Description to load.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> The font structure, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if the font could
+not be loaded. In order to free this structure, you must call
+<link linkend="pango-x-font-cache-unload"><function>pango_x_font_cache_unload()</function></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-x-font-cache-unload" role="function" condition="deprecated:">
+<title>pango_x_font_cache_unload ()</title>
+<indexterm zone="pango-x-font-cache-unload" role="deprecated"><primary sortas="pango_x_font_cache_unload">pango_x_font_cache_unload</primary></indexterm><programlisting><link linkend="void">void</link>                pango_x_font_cache_unload           (<link linkend="PangoXFontCache">PangoXFontCache</link> *cache,
+                                                         <link linkend="XFontStruct">XFontStruct</link> *fs);</programlisting>
+<warning><para><literal>pango_x_font_cache_unload</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Frees a font structure previously loaded with <link linkend="pango-x-font-cache-load"><function>pango_x_font_cache_load()</function></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>cache</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoXFontCache"><type>PangoXFontCache</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>fs</parameter>&#160;:</term>
+<listitem><simpara> the font structure to unload
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/docs/xml/xft-fonts.xml b/docs/xml/xft-fonts.xml
new file mode 100755 (executable)
index 0000000..2b1009b
--- /dev/null
@@ -0,0 +1,709 @@
+<refentry id="pango-Xft-Fonts-and-Rendering">
+<refmeta>
+<refentrytitle role="top_of_page" id="pango-Xft-Fonts-and-Rendering.top_of_page">Xft Fonts and Rendering</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>PANGO Library</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+<refname>Xft Fonts and Rendering</refname>
+<refpurpose>Font handling and rendering with the Xft backend</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv id="pango-Xft-Fonts-and-Rendering.synopsis" role="synopsis">
+<title role="synopsis.title">Synopsis</title>
+<anchor id="PangoXftFont"/><anchor id="PangoXftFontMap"/><anchor id="PangoXftRenderer"/>
+<synopsis>
+                    <link linkend="PangoXftFont-struct">PangoXftFont</link>;
+                    <link linkend="PangoXftFontMap-struct">PangoXftFontMap</link>;
+#define             <link linkend="PANGO-RENDER-TYPE-XFT--CAPS">PANGO_RENDER_TYPE_XFT</link>
+<link linkend="PangoContext">PangoContext</link> *      <link linkend="pango-xft-get-context">pango_xft_get_context</link>               (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);
+<link linkend="PangoFontMap">PangoFontMap</link> *      <link linkend="pango-xft-get-font-map">pango_xft_get_font_map</link>              (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);
+<link linkend="void">void</link>                <link linkend="pango-xft-set-default-substitute">pango_xft_set_default_substitute</link>    (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen,
+                                                         <link linkend="PangoXftSubstituteFunc">PangoXftSubstituteFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> notify);
+<link linkend="void">void</link>                (<link linkend="PangoXftSubstituteFunc">*PangoXftSubstituteFunc</link>)           (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gpointer">gpointer</link> data);
+<link linkend="void">void</link>                <link linkend="pango-xft-substitute-changed">pango_xft_substitute_changed</link>        (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);
+<link linkend="void">void</link>                <link linkend="pango-xft-shutdown-display">pango_xft_shutdown_display</link>          (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);
+<link linkend="XftFont">XftFont</link> *           <link linkend="pango-xft-font-get-font">pango_xft_font_get_font</link>             (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="Display">Display</link> *           <link linkend="pango-xft-font-get-display">pango_xft_font_get_display</link>          (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="gboolean">gboolean</link>            <link linkend="pango-xft-font-has-char">pango_xft_font_has_char</link>             (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="FT-Face">FT_Face</link>             <link linkend="pango-xft-font-lock-face">pango_xft_font_lock_face</link>            (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="void">void</link>                <link linkend="pango-xft-font-unlock-face">pango_xft_font_unlock_face</link>          (<link linkend="PangoFont">PangoFont</link> *font);
+<link linkend="guint">guint</link>               <link linkend="pango-xft-font-get-glyph">pango_xft_font_get_glyph</link>            (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+<link linkend="PangoGlyph">PangoGlyph</link>          <link linkend="pango-xft-font-get-unknown-glyph">pango_xft_font_get_unknown_glyph</link>    (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);
+                    <link linkend="PangoXftRenderer-struct">PangoXftRenderer</link>;
+                    <link linkend="PangoXftRendererClass">PangoXftRendererClass</link>;
+<link linkend="PangoRenderer">PangoRenderer</link> *     <link linkend="pango-xft-renderer-new">pango_xft_renderer_new</link>              (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);
+<link linkend="void">void</link>                <link linkend="pango-xft-renderer-set-draw">pango_xft_renderer_set_draw</link>         (<link linkend="PangoXftRenderer">PangoXftRenderer</link> *xftrenderer,
+                                                         <link linkend="XftDraw">XftDraw</link> *draw);
+<link linkend="void">void</link>                <link linkend="pango-xft-renderer-set-default-color">pango_xft_renderer_set_default_color</link>
+                                                        (<link linkend="PangoXftRenderer">PangoXftRenderer</link> *xftrenderer,
+                                                         <link linkend="PangoColor">PangoColor</link> *default_color);
+<link linkend="void">void</link>                <link linkend="pango-xft-render">pango_xft_render</link>                    (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);
+<link linkend="void">void</link>                <link linkend="pango-xft-picture-render">pango_xft_picture_render</link>            (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Picture">Picture</link> src_picture,
+                                                         <link linkend="Picture">Picture</link> dest_picture,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);
+<link linkend="void">void</link>                <link linkend="pango-xft-render-transformed">pango_xft_render_transformed</link>        (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-xft-render-layout-line">pango_xft_render_layout_line</link>        (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+<link linkend="void">void</link>                <link linkend="pango-xft-render-layout">pango_xft_render_layout</link>             (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1 id="pango-Xft-Fonts-and-Rendering.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoFont">PangoFont</link>
+         +----<link linkend="PangoFcFont">PangoFcFont</link>
+               +----PangoXftFont
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoFontMap">PangoFontMap</link>
+         +----<link linkend="PangoFcFontMap">PangoFcFontMap</link>
+               +----PangoXftFontMap
+</synopsis>
+<synopsis>
+  <link linkend="GObject">GObject</link>
+   +----<link linkend="PangoRenderer">PangoRenderer</link>
+         +----PangoXftRenderer
+</synopsis>
+</refsect1>
+
+
+
+
+
+<refsect1 id="pango-Xft-Fonts-and-Rendering.properties" role="properties">
+<title role="properties.title">Properties</title>
+<synopsis>
+  &quot;<link linkend="PangoXftRenderer--display">display</link>&quot;                  <link linkend="gpointer">gpointer</link>              : Write / Construct Only
+  &quot;<link linkend="PangoXftRenderer--screen">screen</link>&quot;                   <link linkend="gint">gint</link>                  : Write / Construct Only
+</synopsis>
+</refsect1>
+
+
+
+<refsect1 id="pango-Xft-Fonts-and-Rendering.description" role="desc">
+<title role="desc.title">Description</title>
+<para>
+The Xft library is a library for displaying fonts on the X window
+system; internally it uses the fontconfig library to locate font
+files, and the FreeType library to load and render fonts. The
+Xft backend is the recommended Pango font backend for screen
+display with X. (The <link linkend="pango-Cairo-Rendering">Cairo back end</link> is another possibility.)
+</para>
+<para>
+Using the Xft backend is generally straightforward;
+<link linkend="pango-xft-get-context"><function>pango_xft_get_context()</function></link> creates a context for a specified display
+and screen. You can then create a <link linkend="PangoLayout"><type>PangoLayout</type></link> with that context
+and render it with <link linkend="pango-xft-render-layout"><function>pango_xft_render_layout()</function></link>. At a more advanced
+level, the low-level fontconfig options used for rendering fonts
+can be affected using <link linkend="pango-xft-set-default-substitute"><function>pango_xft_set_default_substitute()</function></link>, and
+<link linkend="pango-xft-substitute-changed"><function>pango_xft_substitute_changed()</function></link>.
+</para>
+<para>
+A range of functions for drawing pieces of a layout, such as
+individual layout lines and glyphs strings are provided.  You can also
+directly create a <link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link>. Finally, in some advanced cases, it
+is useful to derive from <link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link>. Deriving from
+<link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link> is useful for two reasons. One reason is be to
+support custom attributes by overriding <link linkend="PangoRendererClass"><type>PangoRendererClass</type></link> virtual
+functions like 'prepare_run' or 'draw_shape'. The reason is to
+customize exactly how the final bits are drawn to the destination by
+overriding the <link linkend="PangoXftRendererClass"><type>PangoXftRendererClass</type></link> virtual functions
+'composite_glyphs' and 'composite_trapezoids'.
+</para>
+</refsect1>
+
+<refsect1 id="pango-Xft-Fonts-and-Rendering.details" role="details">
+<title role="details.title">Details</title>
+<refsect2 id="PangoXftFont-struct" role="struct">
+<title>PangoXftFont</title>
+<indexterm zone="PangoXftFont-struct"><primary sortas="PangoXftFont">PangoXftFont</primary></indexterm><programlisting>typedef struct _PangoXftFont PangoXftFont;</programlisting>
+<para>
+<link linkend="PangoXftFont"><type>PangoXftFont</type></link> is an implementation of <link linkend="PangoFcFont"><type>PangoFcFont</type></link> using the Xft
+library for rendering.  It is used in conjunction with <link linkend="PangoXftFontMap"><type>PangoXftFontMap</type></link>.
+</para></refsect2>
+<refsect2 id="PangoXftFontMap-struct" role="struct">
+<title>PangoXftFontMap</title>
+<indexterm zone="PangoXftFontMap-struct"><primary sortas="PangoXftFontMap">PangoXftFontMap</primary></indexterm><programlisting>typedef struct _PangoXftFontMap PangoXftFontMap;</programlisting>
+<para>
+<link linkend="PangoXftFontMap"><type>PangoXftFontMap</type></link> is an implementation of <link linkend="PangoFcFontMap"><type>PangoFcFontMap</type></link> suitable for
+the Xft library as the renderer.  It is used in to create fonts of
+type <link linkend="PangoXftFont"><type>PangoXftFont</type></link>.
+</para></refsect2>
+<refsect2 id="PANGO-RENDER-TYPE-XFT--CAPS" role="macro" condition="deprecated:">
+<title>PANGO_RENDER_TYPE_XFT</title>
+<indexterm zone="PANGO-RENDER-TYPE-XFT--CAPS" role="deprecated"><primary sortas="PANGO_RENDER_TYPE_XFT">PANGO_RENDER_TYPE_XFT</primary></indexterm><programlisting>#define PANGO_RENDER_TYPE_XFT "PangoRenderXft"
+</programlisting>
+<warning><para><literal>PANGO_RENDER_TYPE_XFT</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+A string constant that was used to identify shape engines that work
+with the Xft backend. See <link linkend="PANGO-RENDER-TYPE-FC--CAPS"><literal>PANGO_RENDER_TYPE_FC</literal></link> for the replacement.
+</para></refsect2>
+<refsect2 id="pango-xft-get-context" role="function" condition="deprecated">
+<title>pango_xft_get_context ()</title>
+<indexterm zone="pango-xft-get-context" role="deprecated"><primary sortas="pango_xft_get_context">pango_xft_get_context</primary></indexterm><programlisting><link linkend="PangoContext">PangoContext</link> *      pango_xft_get_context               (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);</programlisting>
+<warning><para><literal>pango_xft_get_context</literal> has been deprecated since version 1.22 and should not be used in newly-written code. Use <link linkend="pango-xft-get-font-map"><function>pango_xft_get_font_map()</function></link> followed by
+<link linkend="pango-font-map-create-context"><function>pango_font_map_create_context()</function></link> instead.</para></warning>
+<para>
+Retrieves a <link linkend="PangoContext"><type>PangoContext</type></link> appropriate for rendering with
+Xft fonts on the given screen of the given display.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X display.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&#160;:</term>
+<listitem><simpara> an X screen.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the new <link linkend="PangoContext"><type>PangoContext</type></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-xft-get-font-map" role="function" condition="since:1.2">
+<title>pango_xft_get_font_map ()</title>
+<indexterm zone="pango-xft-get-font-map" role="1.2"><primary sortas="pango_xft_get_font_map">pango_xft_get_font_map</primary></indexterm><programlisting><link linkend="PangoFontMap">PangoFontMap</link> *      pango_xft_get_font_map              (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);</programlisting>
+<para>
+Returns the <link linkend="PangoXftFontmap"><type>PangoXftFontmap</type></link> for the given display and screen.
+The fontmap is owned by Pango and will be valid until
+the display is closed.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X display
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&#160;:</term>
+<listitem><simpara> the screen number of a screen within <parameter>display</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a <link linkend="PangoFontMap"><type>PangoFontMap</type></link> object, owned by Pango.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-set-default-substitute" role="function" condition="since:1.2">
+<title>pango_xft_set_default_substitute ()</title>
+<indexterm zone="pango-xft-set-default-substitute" role="1.2"><primary sortas="pango_xft_set_default_substitute">pango_xft_set_default_substitute</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_set_default_substitute    (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen,
+                                                         <link linkend="PangoXftSubstituteFunc">PangoXftSubstituteFunc</link> func,
+                                                         <link linkend="gpointer">gpointer</link> data,
+                                                         <link linkend="GDestroyNotify">GDestroyNotify</link> notify);</programlisting>
+<para>
+Sets a function that will be called to do final configuration
+substitution on a <link linkend="FcPattern"><type>FcPattern</type></link> before it is used to load
+the font. This function can be used to do things like set
+hinting and antialiasing options.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X Display
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&#160;:</term>
+<listitem><simpara> the screen number of a screen within <parameter>display</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>func</parameter>&#160;:</term>
+<listitem><simpara> function to call to to do final config tweaking
+       on <link linkend="FcPattern"><type>FcPattern</type></link> objects.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara> data to pass to <parameter>func</parameter>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>notify</parameter>&#160;:</term>
+<listitem><simpara> function to call when <parameter>data</parameter> is no longer used.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="PangoXftSubstituteFunc" role="function">
+<title>PangoXftSubstituteFunc ()</title>
+<indexterm zone="PangoXftSubstituteFunc"><primary sortas="PangoXftSubstituteFunc">PangoXftSubstituteFunc</primary></indexterm><programlisting><link linkend="void">void</link>                (*PangoXftSubstituteFunc)           (<link linkend="FcPattern">FcPattern</link> *pattern,
+                                                         <link linkend="gpointer">gpointer</link> data);</programlisting>
+<para>
+Function type for doing final config tweaking on prepared FcPatterns.
+</para><variablelist role="params">
+<varlistentry><term><parameter>pattern</parameter>&#160;:</term>
+<listitem><simpara>the FcPattern to tweak.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>data</parameter>&#160;:</term>
+<listitem><simpara>user data.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-xft-substitute-changed" role="function" condition="since:1.2">
+<title>pango_xft_substitute_changed ()</title>
+<indexterm zone="pango-xft-substitute-changed" role="1.2"><primary sortas="pango_xft_substitute_changed">pango_xft_substitute_changed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_substitute_changed        (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);</programlisting>
+<para>
+Call this function any time the results of the
+default substitution function set with
+<link linkend="pango-xft-set-default-substitute"><function>pango_xft_set_default_substitute()</function></link> change.
+That is, if your substitution function will return different
+results for the same input pattern, you must call this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X Display
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&#160;:</term>
+<listitem><simpara> the screen number of a screen within <parameter>display</parameter>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-shutdown-display" role="function" condition="since:1.2">
+<title>pango_xft_shutdown_display ()</title>
+<indexterm zone="pango-xft-shutdown-display" role="1.2"><primary sortas="pango_xft_shutdown_display">pango_xft_shutdown_display</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_shutdown_display          (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);</programlisting>
+<para>
+Release any resources that have been cached for the
+combination of <parameter>display</parameter> and <parameter>screen</parameter>. Note that when the
+X display is closed, resources are released automatically,
+without needing to call this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X display
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&#160;:</term>
+<listitem><simpara> the screen number of a screen within <parameter>display</parameter>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-font-get-font" role="function">
+<title>pango_xft_font_get_font ()</title>
+<indexterm zone="pango-xft-font-get-font"><primary sortas="pango_xft_font_get_font">pango_xft_font_get_font</primary></indexterm><programlisting><link linkend="XftFont">XftFont</link> *           pango_xft_font_get_font             (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Returns the XftFont of a font.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the XftFont associated to <parameter>font</parameter>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if <parameter>font</parameter> is <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-xft-font-get-display" role="function">
+<title>pango_xft_font_get_display ()</title>
+<indexterm zone="pango-xft-font-get-display"><primary sortas="pango_xft_font_get_display">pango_xft_font_get_display</primary></indexterm><programlisting><link linkend="Display">Display</link> *           pango_xft_font_get_display          (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<para>
+Returns the X display of the XftFont of a font.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the X display of the XftFont associated to <parameter>font</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-xft-font-has-char" role="function" condition="deprecated:|since:1.2">
+<title>pango_xft_font_has_char ()</title>
+<indexterm zone="pango-xft-font-has-char" role="deprecated"><primary sortas="pango_xft_font_has_char">pango_xft_font_has_char</primary></indexterm><indexterm zone="pango-xft-font-has-char" role="1.2"><primary sortas="pango_xft_font_has_char">pango_xft_font_has_char</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>            pango_xft_font_has_char             (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<warning><para><literal>pango_xft_font_has_char</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Determines whether <parameter>font</parameter> has a glyph for the codepoint <parameter>wc</parameter>.
+</para>
+<para>
+Use <link linkend="pango-fc-font-has-char"><function>pango_fc_font_has_char()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> for the Xft backend
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> Unicode codepoint to look up
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if <parameter>font</parameter> has the requested codepoint.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-font-lock-face" role="function" condition="deprecated:|since:1.2">
+<title>pango_xft_font_lock_face ()</title>
+<indexterm zone="pango-xft-font-lock-face" role="deprecated"><primary sortas="pango_xft_font_lock_face">pango_xft_font_lock_face</primary></indexterm><indexterm zone="pango-xft-font-lock-face" role="1.2"><primary sortas="pango_xft_font_lock_face">pango_xft_font_lock_face</primary></indexterm><programlisting><link linkend="FT-Face">FT_Face</link>             pango_xft_font_lock_face            (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<warning><para><literal>pango_xft_font_lock_face</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Gets the FreeType <type>FT_Face</type> associated with a font,
+This face will be kept around until you call
+<link linkend="pango-xft-font-unlock-face"><function>pango_xft_font_unlock_face()</function></link>.
+</para>
+<para>
+Use <link linkend="pango-fc-font-lock-face"><function>pango_fc_font_lock_face()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the FreeType <type>FT_Face</type> associated with <parameter>font</parameter>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-font-unlock-face" role="function" condition="deprecated:|since:1.2">
+<title>pango_xft_font_unlock_face ()</title>
+<indexterm zone="pango-xft-font-unlock-face" role="deprecated"><primary sortas="pango_xft_font_unlock_face">pango_xft_font_unlock_face</primary></indexterm><indexterm zone="pango-xft-font-unlock-face" role="1.2"><primary sortas="pango_xft_font_unlock_face">pango_xft_font_unlock_face</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_font_unlock_face          (<link linkend="PangoFont">PangoFont</link> *font);</programlisting>
+<warning><para><literal>pango_xft_font_unlock_face</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Releases a font previously obtained with
+<link linkend="pango-xft-font-lock-face"><function>pango_xft_font_lock_face()</function></link>.
+</para>
+<para>
+Use <link linkend="pango-fc-font-unlock-face"><function>pango_fc_font_unlock_face()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-font-get-glyph" role="function" condition="deprecated:|since:1.2">
+<title>pango_xft_font_get_glyph ()</title>
+<indexterm zone="pango-xft-font-get-glyph" role="deprecated"><primary sortas="pango_xft_font_get_glyph">pango_xft_font_get_glyph</primary></indexterm><indexterm zone="pango-xft-font-get-glyph" role="1.2"><primary sortas="pango_xft_font_get_glyph">pango_xft_font_get_glyph</primary></indexterm><programlisting><link linkend="guint">guint</link>               pango_xft_font_get_glyph            (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<warning><para><literal>pango_xft_font_get_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Gets the glyph index for a given Unicode character
+for <parameter>font</parameter>. If you only want to determine
+whether the font has the glyph, use <link linkend="pango-xft-font-has-char"><function>pango_xft_font_has_char()</function></link>.
+</para>
+<para>
+Use <link linkend="pango-fc-font-get-glyph"><function>pango_fc_font_get_glyph()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link> for the Xft backend
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> Unicode codepoint to look up
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the glyph index, or 0, if the Unicode
+ character does not exist in the font.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.2</para></refsect2>
+<refsect2 id="pango-xft-font-get-unknown-glyph" role="function" condition="deprecated:">
+<title>pango_xft_font_get_unknown_glyph ()</title>
+<indexterm zone="pango-xft-font-get-unknown-glyph" role="deprecated"><primary sortas="pango_xft_font_get_unknown_glyph">pango_xft_font_get_unknown_glyph</primary></indexterm><programlisting><link linkend="PangoGlyph">PangoGlyph</link>          pango_xft_font_get_unknown_glyph    (<link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="gunichar">gunichar</link> wc);</programlisting>
+<warning><para><literal>pango_xft_font_get_unknown_glyph</literal> is deprecated and should not be used in newly-written code.</para></warning>
+<para>
+Returns the index of a glyph suitable for drawing <parameter>wc</parameter> as an
+unknown character.
+</para>
+<para>
+Use <link linkend="PANGO-GET-UNKNOWN-GLYPH--CAPS"><function>PANGO_GET_UNKNOWN_GLYPH()</function></link> instead.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoFont"><type>PangoFont</type></link>.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>wc</parameter>&#160;:</term>
+<listitem><simpara> the Unicode character for which a glyph is needed.
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> a glyph index into <parameter>font</parameter>.
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="PangoXftRenderer-struct" role="struct">
+<title>PangoXftRenderer</title>
+<indexterm zone="PangoXftRenderer-struct" role="1.8"><primary sortas="PangoXftRenderer">PangoXftRenderer</primary></indexterm><programlisting>typedef struct _PangoXftRenderer PangoXftRenderer;</programlisting>
+<para>
+<link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link> is a subclass of <link linkend="PangoRenderer"><type>PangoRenderer</type></link> used for rendering
+with Pango's Xft backend. It can be used directly, or it can be
+further subclassed to modify exactly how drawing of individual
+elements occurs.</para>
+<para>
+</para><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="PangoXftRendererClass" role="struct" condition="since:1.8">
+<title>PangoXftRendererClass</title>
+<indexterm zone="PangoXftRendererClass" role="1.8"><primary sortas="PangoXftRendererClass">PangoXftRendererClass</primary></indexterm><programlisting>typedef struct {
+  void (*composite_trapezoids) (PangoXftRenderer *xftrenderer,
+                               PangoRenderPart   part,
+                               XTrapezoid       *trapezoids,
+                               int               n_trapezoids);
+  void (*composite_glyphs)     (PangoXftRenderer *xftrenderer,
+                               XftFont          *xft_font,
+                               XftGlyphSpec     *glyphs,
+                               int               n_glyphs);
+} PangoXftRendererClass;
+</programlisting>
+<para>
+The class structure for <link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link></para>
+<para>
+</para><variablelist role="struct">
+<varlistentry>
+<term><structfield>composite_trapezoids</structfield>&#160;()</term>
+<listitem><simpara> draw the specified trapezoids using
+  the current color and other attributes for <parameter>part</parameter>
+</simpara></listitem>
+</varlistentry>
+<varlistentry>
+<term><structfield>composite_glyphs</structfield>&#160;()</term>
+<listitem><simpara> draw the specified glyphs using
+  the current foreground color and other foreground
+  attributes
+</simpara></listitem>
+</varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-xft-renderer-new" role="function" condition="since:1.8">
+<title>pango_xft_renderer_new ()</title>
+<indexterm zone="pango-xft-renderer-new" role="1.8"><primary sortas="pango_xft_renderer_new">pango_xft_renderer_new</primary></indexterm><programlisting><link linkend="PangoRenderer">PangoRenderer</link> *     pango_xft_renderer_new              (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="int">int</link> screen);</programlisting>
+<para>
+Create a new <link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link> to allow rendering Pango objects
+with the Xft library. You must call <link linkend="pango-xft-renderer-set-draw"><function>pango_xft_renderer_set_draw()</function></link> before
+using the renderer.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara> an X display
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>screen</parameter>&#160;:</term>
+<listitem><simpara>   the index of the screen for <parameter>display</parameter> to which rendering will be done
+</simpara></listitem></varlistentry>
+<varlistentry><term><emphasis>Returns</emphasis>&#160;:</term><listitem><simpara> the newly created <link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link>, which should
+              be freed with <link linkend="g-object-unref"><function>g_object_unref()</function></link>.
+
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-xft-renderer-set-draw" role="function" condition="since:1.8">
+<title>pango_xft_renderer_set_draw ()</title>
+<indexterm zone="pango-xft-renderer-set-draw" role="1.8"><primary sortas="pango_xft_renderer_set_draw">pango_xft_renderer_set_draw</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_renderer_set_draw         (<link linkend="PangoXftRenderer">PangoXftRenderer</link> *xftrenderer,
+                                                         <link linkend="XftDraw">XftDraw</link> *draw);</programlisting>
+<para>
+Sets the <link linkend="XftDraw"><type>XftDraw</type></link> object that the renderer is drawing to.
+The renderer must not be currently active.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>xftrenderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="PangoXftRenderer"><type>PangoXftRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>draw</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="XftDraw"><type>XftDraw</type></link>
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-xft-renderer-set-default-color" role="function" condition="since:1.8">
+<title>pango_xft_renderer_set_default_color ()</title>
+<indexterm zone="pango-xft-renderer-set-default-color" role="1.8"><primary sortas="pango_xft_renderer_set_default_color">pango_xft_renderer_set_default_color</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_renderer_set_default_color
+                                                        (<link linkend="PangoXftRenderer">PangoXftRenderer</link> *xftrenderer,
+                                                         <link linkend="PangoColor">PangoColor</link> *default_color);</programlisting>
+<para>
+Sets the default foreground color for a <link linkend="XftRenderer"><type>XftRenderer</type></link>.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>xftrenderer</parameter>&#160;:</term>
+<listitem><simpara> a <link linkend="XftRenderer"><type>XftRenderer</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>default_color</parameter>&#160;:</term>
+<listitem><simpara> the default foreground color
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-xft-render" role="function">
+<title>pango_xft_render ()</title>
+<indexterm zone="pango-xft-render"><primary sortas="pango_xft_render">pango_xft_render</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_render                    (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);</programlisting>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto an <type>XftDraw</type> object wrapping an X drawable.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>draw</parameter>&#160;:</term>
+<listitem><simpara>    the <type>XftDraw</type> object.
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara>   the color in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of start of string (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of baseline (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-xft-picture-render" role="function">
+<title>pango_xft_picture_render ()</title>
+<indexterm zone="pango-xft-picture-render"><primary sortas="pango_xft_picture_render">pango_xft_picture_render</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_picture_render            (<link linkend="Display">Display</link> *display,
+                                                         <link linkend="Picture">Picture</link> src_picture,
+                                                         <link linkend="Picture">Picture</link> dest_picture,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="gint">gint</link> x,
+                                                         <link linkend="gint">gint</link> y);</programlisting>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto an Xrender <type>Picture</type> object.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>display</parameter>&#160;:</term>
+<listitem><simpara>      an X display
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>src_picture</parameter>&#160;:</term>
+<listitem><simpara>  the source picture to draw the string with
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>dest_picture</parameter>&#160;:</term>
+<listitem><simpara> the destination picture to draw the string onto
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>         the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>       the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>            the x position of start of string (in pixels)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>            the y position of baseline (in pixels)
+</simpara></listitem></varlistentry>
+</variablelist></refsect2>
+<refsect2 id="pango-xft-render-transformed" role="function" condition="since:1.8">
+<title>pango_xft_render_transformed ()</title>
+<indexterm zone="pango-xft-render-transformed" role="1.8"><primary sortas="pango_xft_render_transformed">pango_xft_render_transformed</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_render_transformed        (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoMatrix">PangoMatrix</link> *matrix,
+                                                         <link linkend="PangoFont">PangoFont</link> *font,
+                                                         <link linkend="PangoGlyphString">PangoGlyphString</link> *glyphs,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Renders a <link linkend="PangoGlyphString"><type>PangoGlyphString</type></link> onto a <link linkend="XftDraw"><type>XftDraw</type></link>, possibly
+transforming the layed-out coordinates through a transformation
+matrix. Note that the transformation matrix for <parameter>font</parameter> is not
+changed, so to produce correct rendering results, the <parameter>font</parameter>
+must have been loaded using a <link linkend="PangoContext"><type>PangoContext</type></link> with an identical
+transformation matrix to that passed in to this function.</para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>draw</parameter>&#160;:</term>
+<listitem><simpara>    an <link linkend="XftDraw"><type>XftDraw</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara>   the color in which to draw the glyphs
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>matrix</parameter>&#160;:</term>
+<listitem><simpara>  a <link linkend="PangoMatrix"><type>PangoMatrix</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to use an identity transformation
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>font</parameter>&#160;:</term>
+<listitem><simpara>    the font in which to draw the string
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>glyphs</parameter>&#160;:</term>
+<listitem><simpara>  the glyph string to draw
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>       the x position of the start of the string (in Pango
+          units in user space coordinates)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>       the y position of the baseline (in Pango units
+          in user space coordinates)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-xft-render-layout-line" role="function" condition="since:1.8">
+<title>pango_xft_render_layout_line ()</title>
+<indexterm zone="pango-xft-render-layout-line" role="1.8"><primary sortas="pango_xft_render_layout_line">pango_xft_render_layout_line</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_render_layout_line        (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoLayoutLine">PangoLayoutLine</link> *line,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link> onto a <link linkend="XftDraw"><type>XftDraw</type></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>draw</parameter>&#160;:</term>
+<listitem><simpara>      an <link linkend="XftDraw"><type>XftDraw</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara>     the foreground color in which to draw the layout line
+            (may be overridden by color attributes)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>line</parameter>&#160;:</term>
+<listitem><simpara>      a <link linkend="PangoLayoutLine"><type>PangoLayoutLine</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the x position of start of string (in Pango units)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the y position of baseline (in Pango units)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+<refsect2 id="pango-xft-render-layout" role="function" condition="since:1.8">
+<title>pango_xft_render_layout ()</title>
+<indexterm zone="pango-xft-render-layout" role="1.8"><primary sortas="pango_xft_render_layout">pango_xft_render_layout</primary></indexterm><programlisting><link linkend="void">void</link>                pango_xft_render_layout             (<link linkend="XftDraw">XftDraw</link> *draw,
+                                                         <link linkend="XftColor">XftColor</link> *color,
+                                                         <link linkend="PangoLayout">PangoLayout</link> *layout,
+                                                         <link linkend="int">int</link> x,
+                                                         <link linkend="int">int</link> y);</programlisting>
+<para>
+Render a <link linkend="PangoLayout"><type>PangoLayout</type></link> onto a <link linkend="XftDraw"><type>XftDraw</type></link></para>
+<para>
+</para><variablelist role="params">
+<varlistentry><term><parameter>draw</parameter>&#160;:</term>
+<listitem><simpara>      an <link linkend="XftDraw"><type>XftDraw</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>color</parameter>&#160;:</term>
+<listitem><simpara>     the foreground color in which to draw the layout
+            (may be overridden by color attributes)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>layout</parameter>&#160;:</term>
+<listitem><simpara>    a <link linkend="PangoLayout"><type>PangoLayout</type></link>
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>x</parameter>&#160;:</term>
+<listitem><simpara>         the X position of the left of the layout (in Pango units)
+</simpara></listitem></varlistentry>
+<varlistentry><term><parameter>y</parameter>&#160;:</term>
+<listitem><simpara>         the Y position of the top of the layout (in Pango units)
+</simpara></listitem></varlistentry>
+</variablelist><para role="since">Since 1.8</para></refsect2>
+
+</refsect1>
+<refsect1 id="pango-Xft-Fonts-and-Rendering.property-details" role="property_details">
+<title role="property_details.title">Property Details</title>
+<refsect2 id="PangoXftRenderer--display" role="property"><title>The <literal>&quot;display&quot;</literal> property</title>
+<indexterm zone="PangoXftRenderer--display"><primary sortas="PangoXftRenderer:display">PangoXftRenderer:display</primary></indexterm><programlisting>  &quot;display&quot;                  <link linkend="gpointer">gpointer</link>              : Write / Construct Only</programlisting>
+<para>The display being rendered to.</para></refsect2>
+<refsect2 id="PangoXftRenderer--screen" role="property"><title>The <literal>&quot;screen&quot;</literal> property</title>
+<indexterm zone="PangoXftRenderer--screen"><primary sortas="PangoXftRenderer:screen">PangoXftRenderer:screen</primary></indexterm><programlisting>  &quot;screen&quot;                   <link linkend="gint">gint</link>                  : Write / Construct Only</programlisting>
+<para>The screen being rendered to.</para><para>Allowed values: &gt;= 0</para>
+<para>Default value: 0</para>
+</refsect2>
+</refsect1>
+
+
+
+
+</refentry>
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100755 (executable)
index 0000000..efa816c
--- /dev/null
@@ -0,0 +1,34 @@
+## Process this file with automake to create Makefile.in.
+
+EXTRA_DIST =                   \
+       pangowin32tobmp.c
+
+INCLUDES =                             \
+       -I$(top_srcdir)                 \
+       $(PANGO_DEBUG_FLAGS)            \
+       $(GLIB_CFLAGS)                  \
+       $(XFT_CFLAGS)                   \
+       $(CAIRO_CFLAGS)                 \
+       $(FREETYPE_CFLAGS)              \
+       $(X_CFLAGS)
+
+noinst_PROGRAMS =
+
+if HAVE_CAIRO_PNG
+noinst_PROGRAMS += cairosimple cairotwisted cairoshape
+
+cairosimple_LDADD =                                    \
+       ../pango/libpango-$(PANGO_API_VERSION).la       \
+       ../pango/libpangocairo-$(PANGO_API_VERSION).la  \
+       $(GLIB_LIBS)                                    \
+       $(CAIRO_LIBS)                                   \
+       $(PKGCONFIG_MATH_LIBS)
+if HAVE_FREETYPE
+cairosimple_LDADD +=                                   \
+       ../pango/libpangoft2-$(PANGO_API_VERSION).la
+endif
+cairotwisted_LDADD = $(cairosimple_LDADD)
+cairoshape_LDADD   = $(cairosimple_LDADD)
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644 (file)
index 0000000..817ccc5
--- /dev/null
@@ -0,0 +1,650 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = $(am__EXEEXT_1)
+@HAVE_CAIRO_PNG_TRUE@am__append_1 = cairosimple cairotwisted cairoshape
+@HAVE_CAIRO_PNG_TRUE@@HAVE_FREETYPE_TRUE@am__append_2 = \
+@HAVE_CAIRO_PNG_TRUE@@HAVE_FREETYPE_TRUE@      ../pango/libpangoft2-$(PANGO_API_VERSION).la
+
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+@HAVE_CAIRO_PNG_TRUE@am__EXEEXT_1 = cairosimple$(EXEEXT) \
+@HAVE_CAIRO_PNG_TRUE@  cairotwisted$(EXEEXT) cairoshape$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+cairoshape_SOURCES = cairoshape.c
+cairoshape_OBJECTS = cairoshape.$(OBJEXT)
+am__DEPENDENCIES_1 =
+@HAVE_CAIRO_PNG_TRUE@@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_2 = ../pango/libpangoft2-$(PANGO_API_VERSION).la
+@HAVE_CAIRO_PNG_TRUE@am__DEPENDENCIES_3 = ../pango/libpango-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_PNG_TRUE@  ../pango/libpangocairo-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_1) \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_1) \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_2)
+@HAVE_CAIRO_PNG_TRUE@cairoshape_DEPENDENCIES = $(am__DEPENDENCIES_3)
+cairosimple_SOURCES = cairosimple.c
+cairosimple_OBJECTS = cairosimple.$(OBJEXT)
+@HAVE_CAIRO_PNG_TRUE@cairosimple_DEPENDENCIES = ../pango/libpango-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_PNG_TRUE@  ../pango/libpangocairo-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_1) \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_1) \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_2)
+cairotwisted_SOURCES = cairotwisted.c
+cairotwisted_OBJECTS = cairotwisted.$(OBJEXT)
+@HAVE_CAIRO_PNG_TRUE@cairotwisted_DEPENDENCIES =  \
+@HAVE_CAIRO_PNG_TRUE@  $(am__DEPENDENCIES_3)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = cairoshape.c cairosimple.c cairotwisted.c
+DIST_SOURCES = cairoshape.c cairosimple.c cairotwisted.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = \
+       pangowin32tobmp.c
+
+INCLUDES = \
+       -I$(top_srcdir)                 \
+       $(PANGO_DEBUG_FLAGS)            \
+       $(GLIB_CFLAGS)                  \
+       $(XFT_CFLAGS)                   \
+       $(CAIRO_CFLAGS)                 \
+       $(FREETYPE_CFLAGS)              \
+       $(X_CFLAGS)
+
+@HAVE_CAIRO_PNG_TRUE@cairosimple_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_PNG_TRUE@  ../pango/libpangocairo-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_PNG_TRUE@  $(GLIB_LIBS) $(CAIRO_LIBS) \
+@HAVE_CAIRO_PNG_TRUE@  $(am__append_2)
+@HAVE_CAIRO_PNG_TRUE@cairotwisted_LDADD = $(cairosimple_LDADD)
+@HAVE_CAIRO_PNG_TRUE@cairoshape_LDADD = $(cairosimple_LDADD)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  examples/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+cairoshape$(EXEEXT): $(cairoshape_OBJECTS) $(cairoshape_DEPENDENCIES) 
+       @rm -f cairoshape$(EXEEXT)
+       $(LINK) $(cairoshape_LDFLAGS) $(cairoshape_OBJECTS) $(cairoshape_LDADD) $(LIBS)
+cairosimple$(EXEEXT): $(cairosimple_OBJECTS) $(cairosimple_DEPENDENCIES) 
+       @rm -f cairosimple$(EXEEXT)
+       $(LINK) $(cairosimple_LDFLAGS) $(cairosimple_OBJECTS) $(cairosimple_LDADD) $(LIBS)
+cairotwisted$(EXEEXT): $(cairotwisted_OBJECTS) $(cairotwisted_DEPENDENCIES) 
+       @rm -f cairotwisted$(EXEEXT)
+       $(LINK) $(cairotwisted_LDFLAGS) $(cairotwisted_OBJECTS) $(cairotwisted_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairoshape.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairosimple.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairotwisted.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstPROGRAMS ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am
+
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/cairoshape.c b/examples/cairoshape.c
new file mode 100755 (executable)
index 0000000..f668e92
--- /dev/null
@@ -0,0 +1,236 @@
+/* Example code to show how to use pangocairo to render arbitrary shapes
+ * inside a text layout, positioned by Pango.  This has become possibly
+ * using the following API added in Pango 1.18:
+ * 
+ *     pango_cairo_context_set_shape_renderer ()
+ *
+ * This examples uses a small parser to convert shapes in the format of
+ * SVG paths to cairo instructions.  You can typically extract these from
+ * the SVG file's <path> elements directly.
+ *
+ * The code then searches for the Unicode bullet character in the layout
+ * text and automatically adds PangoAttribtues to the layout to replace
+ * each of the with a rendering of the GNOME Foot logo.
+ *
+ *
+ * Written by Behdad Esfahbod, 2007
+ *
+ * Permission to use, copy, modify, distribute, and sell this example
+ * for any purpose is hereby granted without fee.
+ * It is provided "as is" without express or implied warranty.
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+
+#include <pango/pangocairo.h>
+
+#define BULLET "•"
+
+const char text[] =
+"The GNOME project provides two things:\n"
+"\n"
+"  • The GNOME desktop environment\n"
+"  • The GNOME development platform\n"
+"  • Planet GNOME";
+
+typedef struct {
+  double width, height;
+  const char *path;
+} MiniSvg;
+
+static MiniSvg GnomeFootLogo = {
+  96.2152, 118.26,
+  "M 86.068,1 C 61.466,0 56.851,35.041 70.691,35.041 C 84.529,35.041 110.671,0 86.068,0 z "
+  "M 45.217,30.699 C 52.586,31.149 60.671,2.577 46.821,4.374 C 32.976,6.171 37.845,30.249 45.217,30.699 z "
+  "M 11.445,48.453 C 16.686,46.146 12.12,23.581 3.208,29.735 C -5.7,35.89 6.204,50.759 11.445,48.453 z "
+  "M 26.212,36.642 C 32.451,35.37 32.793,9.778 21.667,14.369 C 10.539,18.961 19.978,37.916 26.212,36.642 L 26.212,36.642 z "
+  "M 58.791,93.913 C 59.898,102.367 52.589,106.542 45.431,101.092 C 22.644,83.743 83.16,75.088 79.171,51.386 C 75.86,31.712 15.495,37.769 8.621,68.553 C 3.968,89.374 27.774,118.26 52.614,118.26 C 64.834,118.26 78.929,107.226 81.566,93.248 C 83.58,82.589 57.867,86.86 58.791,93.913 L 58.791,93.913 z "
+  "\0"
+};
+
+static void
+mini_svg_render (MiniSvg  *shape,
+                cairo_t  *cr,
+                gboolean  do_path)
+{
+  double x, y;
+  const char *p;
+  char op[2];
+  int items, len;
+
+  cairo_get_current_point (cr, &x, &y);
+  cairo_translate (cr, x, y);
+
+  for (p = shape->path; (items = sscanf (p, "%1s %n", op, &len)), p += len, *p;)
+    switch (*op)
+    {
+      case 'M':
+        {
+         sscanf (p, "%lf,%lf %n", &x, &y, &len); p += len;
+         cairo_move_to (cr, x, y);
+         break;
+       }
+      case 'L':
+        {
+         sscanf (p, "%lf,%lf %n", &x, &y, &len); p += len;
+         cairo_line_to (cr, x, y);
+         break;
+       }
+      case 'C':
+        {
+         double x1, y1, x2, y2, x3, y3;
+         sscanf (p, "%lf,%lf %lf,%lf %lf,%lf %n", &x1, &y1, &x2, &y2, &x3, &y3, &len); p += len;
+         cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);
+         break;
+       }
+      case 'z':
+        {
+         cairo_close_path (cr);
+         break;
+       }
+      default: 
+        {
+         g_warning ("Invalid MiniSvg operation '%c'", *op);
+         break;
+       }
+    }
+
+  if (!do_path)
+    cairo_fill (cr);
+}
+
+static void
+mini_svg_shape_renderer (cairo_t        *cr,
+                        PangoAttrShape *attr,
+                        gboolean        do_path,
+                        gpointer        data G_GNUC_UNUSED)
+{
+  MiniSvg *shape = (MiniSvg *) attr->data;
+  double scale_x, scale_y;
+
+  scale_x = (double) attr->ink_rect.width  / (PANGO_SCALE * shape->width );
+  scale_y = (double) attr->ink_rect.height / (PANGO_SCALE * shape->height);
+
+  cairo_rel_move_to (cr,
+                    (double) attr->ink_rect.x / PANGO_SCALE,
+                    (double) attr->ink_rect.y / PANGO_SCALE);
+  cairo_scale (cr, scale_x, scale_y);
+
+  mini_svg_render (shape, cr, do_path);
+}
+
+
+static PangoLayout *
+get_layout (cairo_t *cr)
+{
+  PangoLayout *layout;
+  PangoAttrList *attrs;
+  PangoRectangle ink_rect     = {1 * PANGO_SCALE, -11 * PANGO_SCALE,  8 * PANGO_SCALE, 10 * PANGO_SCALE};
+  PangoRectangle logical_rect = {0 * PANGO_SCALE, -12 * PANGO_SCALE, 10 * PANGO_SCALE, 12 * PANGO_SCALE};
+  const char *p;
+
+  /* Create a PangoLayout, set the font and text */
+  layout = pango_cairo_create_layout (cr);
+
+  pango_cairo_context_set_shape_renderer (pango_layout_get_context (layout),
+                                         mini_svg_shape_renderer, NULL, NULL);
+
+  pango_layout_set_text (layout, text, -1);
+
+  attrs = pango_attr_list_new ();
+
+  /* Set gnome shape attributes for all bullets */
+  for (p = text; (p = strstr (p, BULLET)); p += strlen (BULLET))
+    {
+      PangoAttribute *attr;
+      
+      attr = pango_attr_shape_new_with_data (&ink_rect,
+                                            &logical_rect,
+                                            &GnomeFootLogo,
+                                            NULL, NULL);
+
+      attr->start_index = p - text;
+      attr->end_index = attr->start_index + strlen (BULLET);
+
+      pango_attr_list_insert (attrs, attr);
+    }
+
+  pango_layout_set_attributes (layout, attrs);
+  pango_attr_list_unref (attrs);
+
+  return layout;
+}
+
+static void
+draw_text (cairo_t *cr, int *width, int *height)
+{
+
+  PangoLayout *layout = get_layout (cr);
+
+  /* Adds a fixed 10-pixel margin on the sides. */
+
+  if (width || height)
+    {
+      pango_layout_get_pixel_size (layout, width, height);
+      if (width)
+        *width += 20;
+      if (height)
+        *height += 20;
+    }
+
+  cairo_move_to (cr, 10, 10);
+  pango_cairo_show_layout (cr, layout);
+
+  g_object_unref (layout);
+}
+
+int main (int argc, char **argv)
+{
+  cairo_t *cr;
+  char *filename;
+  cairo_status_t status;
+  cairo_surface_t *surface;
+  int width, height;
+
+  if (argc != 2)
+    {
+      g_printerr ("Usage: cairoshape OUTPUT_FILENAME\n");
+      return 1;
+    }
+
+  filename = argv[1];
+
+  /* First create and use a 0x0 surface, to measure how large
+   * the final surface needs to be */
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       0, 0);
+  cr = cairo_create (surface);
+  draw_text (cr, &width, &height);
+  cairo_destroy (cr);
+  cairo_surface_destroy (surface);
+
+  /* Now create the final surface and draw to it. */
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       width, height);
+  cr = cairo_create (surface);
+
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+  cairo_set_source_rgb (cr, 0.0, 0.0, 0.5);
+  draw_text (cr, NULL, NULL);
+  cairo_destroy (cr);
+
+  /* Write out the surface as PNG */
+  status = cairo_surface_write_to_png (surface, filename);
+  cairo_surface_destroy (surface);
+
+  if (status != CAIRO_STATUS_SUCCESS)
+    {
+      g_printerr ("Could not save png to '%s'\n", filename);
+      return 1;
+    }
+
+  return 0;
+}
diff --git a/examples/cairosimple.c b/examples/cairosimple.c
new file mode 100755 (executable)
index 0000000..faef326
--- /dev/null
@@ -0,0 +1,93 @@
+/* Simple example to use pangocairo to render rotated text */
+
+#include <math.h>
+#include <pango/pangocairo.h>
+
+static void
+draw_text (cairo_t *cr)
+{
+#define RADIUS 150
+#define N_WORDS 10
+#define FONT "Sans Bold 27"
+
+  PangoLayout *layout;
+  PangoFontDescription *desc;
+  int i;
+
+  /* Center coordinates on the middle of the region we are drawing
+   */
+  cairo_translate (cr, RADIUS, RADIUS);
+
+  /* Create a PangoLayout, set the font and text */
+  layout = pango_cairo_create_layout (cr);
+
+  pango_layout_set_text (layout, "Text", -1);
+  desc = pango_font_description_from_string (FONT);
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+
+  /* Draw the layout N_WORDS times in a circle */
+  for (i = 0; i < N_WORDS; i++)
+    {
+      int width, height;
+      double angle = (360. * i) / N_WORDS;
+      double red;
+
+      cairo_save (cr);
+
+      /* Gradient from red at angle == 60 to blue at angle == 240 */
+      red   = (1 + cos ((angle - 60) * G_PI / 180.)) / 2;
+      cairo_set_source_rgb (cr, red, 0, 1.0 - red);
+
+      cairo_rotate (cr, angle * G_PI / 180.);
+
+      /* Inform Pango to re-layout the text with the new transformation */
+      pango_cairo_update_layout (cr, layout);
+
+      pango_layout_get_size (layout, &width, &height);
+      cairo_move_to (cr, - ((double)width / PANGO_SCALE) / 2, - RADIUS);
+      pango_cairo_show_layout (cr, layout);
+
+      cairo_restore (cr);
+    }
+
+  /* free the layout object */
+  g_object_unref (layout);
+}
+
+int main (int argc, char **argv)
+{
+  cairo_t *cr;
+  char *filename;
+  cairo_status_t status;
+  cairo_surface_t *surface;
+
+  if (argc != 2)
+    {
+      g_printerr ("Usage: cairosimple OUTPUT_FILENAME\n");
+      return 1;
+    }
+
+  filename = argv[1];
+
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       2 * RADIUS, 2 * RADIUS);
+  cr = cairo_create (surface);
+
+
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+  draw_text (cr);
+  cairo_destroy (cr);
+
+  status = cairo_surface_write_to_png (surface, filename);
+  cairo_surface_destroy (surface);
+
+  if (status != CAIRO_STATUS_SUCCESS)
+    {
+      g_printerr ("Could not save png to '%s'\n", filename);
+      return 1;
+    }
+
+  return 0;
+}
diff --git a/examples/cairotwisted.c b/examples/cairotwisted.c
new file mode 100755 (executable)
index 0000000..8140417
--- /dev/null
@@ -0,0 +1,624 @@
+/* Example code to show how to use pangocairo to render text
+ * projected on a path.
+ *
+ *
+ * Written by Behdad Esfahbod, 2006..2007
+ *
+ * Permission to use, copy, modify, distribute, and sell this example
+ * for any purpose is hereby granted without fee.
+ * It is provided "as is" without express or implied warranty.
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include <pango/pangocairo.h>
+
+void fancy_cairo_stroke (cairo_t *cr);
+void fancy_cairo_stroke_preserve (cairo_t *cr);
+
+/* A fancy cairo_stroke[_preserve]() that draws points and control
+ * points, and connects them together.
+ */
+static void
+_fancy_cairo_stroke (cairo_t *cr, cairo_bool_t preserve)
+{
+  int i;
+  double line_width;
+  cairo_path_t *path;
+  cairo_path_data_t *data;
+  const double dash[] = {10, 10};
+
+  cairo_save (cr);
+  cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
+
+  line_width = cairo_get_line_width (cr);
+  path = cairo_copy_path (cr);
+  cairo_new_path (cr);
+
+  cairo_save (cr);
+  cairo_set_line_width (cr, line_width / 3);
+  cairo_set_dash (cr, dash, G_N_ELEMENTS (dash), 0);
+  for (i=0; i < path->num_data; i += path->data[i].header.length) {
+    data = &path->data[i];
+    switch (data->header.type) {
+    case CAIRO_PATH_MOVE_TO:
+    case CAIRO_PATH_LINE_TO:
+       cairo_move_to (cr, data[1].point.x, data[1].point.y);
+       break;
+    case CAIRO_PATH_CURVE_TO:
+       cairo_line_to (cr, data[1].point.x, data[1].point.y);
+       cairo_move_to (cr, data[2].point.x, data[2].point.y);
+       cairo_line_to (cr, data[3].point.x, data[3].point.y);
+       break;
+    case CAIRO_PATH_CLOSE_PATH:
+       break;
+    default:
+       g_assert_not_reached ();
+    }
+  }
+  cairo_stroke (cr);
+  cairo_restore (cr);
+
+  cairo_save (cr);
+  cairo_set_line_width (cr, line_width * 4);
+  cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+  for (i=0; i < path->num_data; i += path->data[i].header.length) {
+    data = &path->data[i];
+    switch (data->header.type) {
+    case CAIRO_PATH_MOVE_TO:
+       cairo_move_to (cr, data[1].point.x, data[1].point.y);
+       break;
+    case CAIRO_PATH_LINE_TO:
+       cairo_rel_line_to (cr, 0, 0);
+       cairo_move_to (cr, data[1].point.x, data[1].point.y);
+       break;
+    case CAIRO_PATH_CURVE_TO:
+       cairo_rel_line_to (cr, 0, 0);
+       cairo_move_to (cr, data[1].point.x, data[1].point.y);
+       cairo_rel_line_to (cr, 0, 0);
+       cairo_move_to (cr, data[2].point.x, data[2].point.y);
+       cairo_rel_line_to (cr, 0, 0);
+       cairo_move_to (cr, data[3].point.x, data[3].point.y);
+       break;
+    case CAIRO_PATH_CLOSE_PATH:
+       cairo_rel_line_to (cr, 0, 0);
+       break;
+    default:
+       g_assert_not_reached ();
+    }
+  }
+  cairo_rel_line_to (cr, 0, 0);
+  cairo_stroke (cr);
+  cairo_restore (cr);
+
+  for (i=0; i < path->num_data; i += path->data[i].header.length) {
+    data = &path->data[i];
+    switch (data->header.type) {
+    case CAIRO_PATH_MOVE_TO:
+       cairo_move_to (cr, data[1].point.x, data[1].point.y);
+       break;
+    case CAIRO_PATH_LINE_TO:
+       cairo_line_to (cr, data[1].point.x, data[1].point.y);
+       break;
+    case CAIRO_PATH_CURVE_TO:
+       cairo_curve_to (cr, data[1].point.x, data[1].point.y,
+                           data[2].point.x, data[2].point.y,
+                           data[3].point.x, data[3].point.y);
+       break;
+    case CAIRO_PATH_CLOSE_PATH:
+       cairo_close_path (cr);
+       break;
+    default:
+       g_assert_not_reached ();
+    }
+  }
+  cairo_stroke (cr);
+
+  if (preserve)
+    cairo_append_path (cr, path);
+
+  cairo_path_destroy (path);
+
+  cairo_restore (cr);
+}
+
+/* A fancy cairo_stroke() that draws points and control points, and
+ * connects them together.
+ */
+void
+fancy_cairo_stroke (cairo_t *cr)
+{
+  _fancy_cairo_stroke (cr, FALSE);
+}
+
+/* A fancy cairo_stroke_preserve() that draws points and control
+ * points, and connects them together.
+ */
+void
+fancy_cairo_stroke_preserve (cairo_t *cr)
+{
+  _fancy_cairo_stroke (cr, TRUE);
+}
+
+
+/* Returns Euclidean distance between two points */
+static double
+two_points_distance (cairo_path_data_t *a, cairo_path_data_t *b)
+{
+  double dx, dy;
+
+  dx = b->point.x - a->point.x;
+  dy = b->point.y - a->point.y;
+
+  return sqrt (dx * dx + dy * dy);
+}
+
+/* Returns length of a Bezier curve.
+ * Seems like computing that analytically is not easy.  The
+ * code just flattens the curve using cairo and adds the length
+ * of segments.
+ */
+static double
+curve_length (double x0, double y0,
+             double x1, double y1,
+             double x2, double y2,
+             double x3, double y3)
+{
+  cairo_surface_t *surface;
+  cairo_t *cr;
+  cairo_path_t *path;
+  cairo_path_data_t *data, current_point;
+  int i;
+  double length;
+
+  surface = cairo_image_surface_create (CAIRO_FORMAT_A8, 0, 0);
+  cr = cairo_create (surface);
+  cairo_surface_destroy (surface);
+
+  cairo_move_to (cr, x0, y0);
+  cairo_curve_to (cr, x1, y1, x2, y2, x3, y3);
+
+  length = 0;
+  path = cairo_copy_path_flat (cr);
+  for (i=0; i < path->num_data; i += path->data[i].header.length) {
+    data = &path->data[i];
+    switch (data->header.type) {
+
+    case CAIRO_PATH_MOVE_TO:
+       current_point = data[1];
+       break;
+
+    case CAIRO_PATH_LINE_TO:
+       length += two_points_distance (&current_point, &data[1]);
+       current_point = data[1];
+       break;
+
+    default:
+    case CAIRO_PATH_CURVE_TO:
+    case CAIRO_PATH_CLOSE_PATH:
+       g_assert_not_reached ();
+    }
+  }
+  cairo_path_destroy (path);
+
+  cairo_destroy (cr);
+
+  return length;
+}
+
+
+typedef double parametrization_t;
+
+/* Compute parametrization info.  That is, for each part of the 
+ * cairo path, tags it with its length.
+ *
+ * Free returned value with g_free().
+ */
+static parametrization_t *
+parametrize_path (cairo_path_t *path)
+{
+  int i;
+  cairo_path_data_t *data, last_move_to, current_point;
+  parametrization_t *parametrization;
+
+  parametrization = g_malloc (path->num_data * sizeof (parametrization[0]));
+
+  for (i=0; i < path->num_data; i += path->data[i].header.length) {
+    data = &path->data[i];
+    parametrization[i] = 0.0;
+    switch (data->header.type) {
+    case CAIRO_PATH_MOVE_TO:
+       last_move_to = data[1];
+       current_point = data[1];
+       break;
+    case CAIRO_PATH_CLOSE_PATH:
+       /* Make it look like it's a line_to to last_move_to */
+       data = (&last_move_to) - 1;
+       /* fall through */
+    case CAIRO_PATH_LINE_TO:
+       parametrization[i] = two_points_distance (&current_point, &data[1]);
+       current_point = data[1];
+       break;
+    case CAIRO_PATH_CURVE_TO:
+       /* naive curve-length, treating bezier as three line segments:
+       parametrization[i] = two_points_distance (&current_point, &data[1])
+                          + two_points_distance (&data[1], &data[2])
+                          + two_points_distance (&data[2], &data[3]);
+       */
+       parametrization[i] = curve_length (current_point.point.x, current_point.point.x,
+                                          data[1].point.x, data[1].point.y,
+                                          data[2].point.x, data[2].point.y,
+                                          data[3].point.x, data[3].point.y);
+
+       current_point = data[3];
+       break;
+    default:
+       g_assert_not_reached ();
+    }
+  }
+
+  return parametrization;
+}
+
+
+typedef void (*transform_point_func_t) (void *closure, double *x, double *y);
+
+/* Project a path using a function.  Each point of the path (including
+ * Bezier control points) is passed to the function for transformation.
+ */
+static void
+transform_path (cairo_path_t *path, transform_point_func_t f, void *closure)
+{
+  int i;
+  cairo_path_data_t *data;
+
+  for (i=0; i < path->num_data; i += path->data[i].header.length) {
+    data = &path->data[i];
+    switch (data->header.type) {
+    case CAIRO_PATH_CURVE_TO:
+      f (closure, &data[3].point.x, &data[3].point.y);
+      f (closure, &data[2].point.x, &data[2].point.y);
+    case CAIRO_PATH_MOVE_TO:
+    case CAIRO_PATH_LINE_TO:
+      f (closure, &data[1].point.x, &data[1].point.y);
+      break;
+    case CAIRO_PATH_CLOSE_PATH:
+      break;
+    default:
+       g_assert_not_reached ();
+    }
+  }
+}
+
+
+/* Simple struct to hold a path and its parametrization */
+typedef struct {
+  cairo_path_t *path;
+  parametrization_t *parametrization;
+} parametrized_path_t;
+
+
+/* Project a point X,Y onto a parameterized path.  The final point is
+ * where you get if you walk on the path forward from the beginning for X
+ * units, then stop there and walk another Y units perpendicular to the
+ * path at that point.  In more detail:
+ *
+ * There's three pieces of math involved:
+ *
+ *   - The parametric form of the Line equation
+ *     http://en.wikipedia.org/wiki/Line
+ *
+ *   - The parametric form of the Cubic Bézier curve equation
+ *     http://en.wikipedia.org/wiki/B%C3%A9zier_curve
+ *
+ *   - The Gradient (aka multi-dimensional derivative) of the above
+ *     http://en.wikipedia.org/wiki/Gradient
+ *
+ * The parametric forms are used to answer the question of "where will I be
+ * if I walk a distance of X on this path".  The Gradient is used to answer
+ * the question of "where will I be if then I stop, rotate left for 90
+ * degrees and walk straight for a distance of Y".
+ */
+static void
+point_on_path (parametrized_path_t *param,
+              double *x, double *y)
+{
+  int i;
+  double ratio, the_y = *y, the_x = *x, dx, dy;
+  cairo_path_data_t *data, last_move_to, current_point;
+  cairo_path_t *path = param->path;
+  parametrization_t *parametrization = param->parametrization;
+
+  for (i=0; i + path->data[i].header.length < path->num_data &&
+           (the_x > parametrization[i] ||
+            path->data[i].header.type == CAIRO_PATH_MOVE_TO);
+       i += path->data[i].header.length) {
+    the_x -= parametrization[i];
+    data = &path->data[i];
+    switch (data->header.type) {
+    case CAIRO_PATH_MOVE_TO:
+       current_point = data[1];
+        last_move_to = data[1];
+       break;
+    case CAIRO_PATH_LINE_TO:
+       current_point = data[1];
+       break;
+    case CAIRO_PATH_CURVE_TO:
+       current_point = data[3];
+       break;
+    case CAIRO_PATH_CLOSE_PATH:
+       break;
+    default:
+       g_assert_not_reached ();
+    }
+  }
+  data = &path->data[i];
+
+  switch (data->header.type) {
+
+  case CAIRO_PATH_MOVE_TO:
+      break;
+  case CAIRO_PATH_CLOSE_PATH:
+      /* Make it look like it's a line_to to last_move_to */
+      data = (&last_move_to) - 1;
+      /* fall through */
+  case CAIRO_PATH_LINE_TO:
+      {
+       ratio = the_x / parametrization[i];
+       /* Line polynomial */
+       *x = current_point.point.x * (1 - ratio) + data[1].point.x * ratio;
+       *y = current_point.point.y * (1 - ratio) + data[1].point.y * ratio;
+
+       /* Line gradient */
+       dx = -(current_point.point.x - data[1].point.x);
+       dy = -(current_point.point.y - data[1].point.y);
+
+       /*optimization for: ratio = the_y / sqrt (dx * dx + dy * dy);*/
+       ratio = the_y / parametrization[i];
+       *x += -dy * ratio;
+       *y +=  dx * ratio;
+      }
+      break;
+  case CAIRO_PATH_CURVE_TO:
+      {
+       /* FIXME the formulas here are not exactly what we want, because the
+        * Bezier parametrization is not uniform.  But I don't know how to do
+        * better.  The caller can do slightly better though, by flattening the
+        * Bezier and avoiding this branch completely.  That has its own cost
+        * though, as large y values magnify the flattening error drastically.
+        */
+
+        double ratio_1_0, ratio_0_1;
+       double ratio_2_0, ratio_0_2;
+       double ratio_3_0, ratio_2_1, ratio_1_2, ratio_0_3;
+       double _1__4ratio_1_0_3ratio_2_0, _2ratio_1_0_3ratio_2_0;
+
+       ratio = the_x / parametrization[i];
+
+       ratio_1_0 = ratio;
+       ratio_0_1 = 1 - ratio;
+
+       ratio_2_0 = ratio_1_0 * ratio_1_0; /*      ratio  *      ratio  */
+       ratio_0_2 = ratio_0_1 * ratio_0_1; /* (1 - ratio) * (1 - ratio) */
+
+       ratio_3_0 = ratio_2_0 * ratio_1_0; /*      ratio  *      ratio  *      ratio  */
+       ratio_2_1 = ratio_2_0 * ratio_0_1; /*      ratio  *      ratio  * (1 - ratio) */
+       ratio_1_2 = ratio_1_0 * ratio_0_2; /*      ratio  * (1 - ratio) * (1 - ratio) */
+       ratio_0_3 = ratio_0_1 * ratio_0_2; /* (1 - ratio) * (1 - ratio) * (1 - ratio) */
+
+       _1__4ratio_1_0_3ratio_2_0 = 1 - 4 * ratio_1_0 + 3 * ratio_2_0;
+       _2ratio_1_0_3ratio_2_0    =     2 * ratio_1_0 - 3 * ratio_2_0;
+
+       /* Bezier polynomial */
+       *x = current_point.point.x * ratio_0_3
+          + 3 *   data[1].point.x * ratio_1_2
+          + 3 *   data[2].point.x * ratio_2_1
+          +       data[3].point.x * ratio_3_0;
+       *y = current_point.point.y * ratio_0_3
+          + 3 *   data[1].point.y * ratio_1_2
+          + 3 *   data[2].point.y * ratio_2_1
+          +       data[3].point.y * ratio_3_0;
+
+       /* Bezier gradient */
+       dx =-3 * current_point.point.x * ratio_0_2
+          + 3 *       data[1].point.x * _1__4ratio_1_0_3ratio_2_0
+          + 3 *       data[2].point.x * _2ratio_1_0_3ratio_2_0
+          + 3 *       data[3].point.x * ratio_2_0;
+       dy =-3 * current_point.point.y * ratio_0_2
+          + 3 *       data[1].point.y * _1__4ratio_1_0_3ratio_2_0
+          + 3 *       data[2].point.y * _2ratio_1_0_3ratio_2_0
+          + 3 *       data[3].point.y * ratio_2_0;
+
+       ratio = the_y / sqrt (dx * dx + dy * dy);
+       *x += -dy * ratio;
+       *y +=  dx * ratio;
+      }
+      break;
+  default:
+      g_assert_not_reached ();
+  }
+}
+
+/* Projects the current path of cr onto the provided path. */
+static void
+map_path_onto (cairo_t *cr, cairo_path_t *path)
+{
+  cairo_path_t *current_path;
+  parametrized_path_t param;
+
+  param.path = path;
+  param.parametrization = parametrize_path (path);
+
+  current_path = cairo_copy_path (cr);
+  cairo_new_path (cr);
+
+  transform_path (current_path,
+                 (transform_point_func_t) point_on_path, &param);
+
+  cairo_append_path (cr, current_path);
+
+  cairo_path_destroy (current_path);
+  g_free (param.parametrization);
+}
+
+
+typedef void (*draw_path_func_t) (cairo_t *cr);
+
+static void
+draw_text (cairo_t *cr,
+          double x,
+          double y,
+          const char *font,
+          const char *text)
+{
+  PangoLayout *layout;
+  PangoLayoutLine *line;
+  PangoFontDescription *desc;
+  cairo_font_options_t *font_options;
+
+  font_options = cairo_font_options_create ();
+
+  cairo_font_options_set_hint_style (font_options, CAIRO_HINT_STYLE_NONE);
+  cairo_font_options_set_hint_metrics (font_options, CAIRO_HINT_METRICS_OFF);
+
+  cairo_set_font_options (cr, font_options);
+  cairo_font_options_destroy (font_options);
+
+  layout = pango_cairo_create_layout (cr);
+
+  desc = pango_font_description_from_string (font);
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+
+  pango_layout_set_text (layout, text, -1);
+
+  /* Use pango_layout_get_line() instead of pango_layout_get_line_readonly()
+   * for older versions of pango
+   */
+  line = pango_layout_get_line_readonly (layout, 0);
+
+  cairo_move_to (cr, x, y);
+  pango_cairo_layout_line_path (cr, line);
+
+  g_object_unref (layout);
+}
+
+static void
+draw_twisted (cairo_t *cr,
+             double x,
+             double y,
+             const char *font,
+             const char *text)
+{
+  cairo_path_t *path;
+
+  cairo_save (cr);
+
+  /* Decrease tolerance a bit, since it's going to be magnified */
+  cairo_set_tolerance (cr, 0.01);
+
+  /* Using cairo_copy_path() here shows our deficiency in handling
+   * Bezier curves, specially around sharper curves.
+   *
+   * Using cairo_copy_path_flat() on the other hand, magnifies the
+   * flattening error with large off-path values.  We decreased
+   * tolerance for that reason.  Increase tolerance to see that
+   * artifact.
+   */
+  path = cairo_copy_path_flat (cr);
+/*path = cairo_copy_path (cr);*/
+
+  cairo_new_path (cr);
+
+  draw_text (cr, x, y, font, text);
+  map_path_onto (cr, path);
+
+  cairo_path_destroy (path);
+
+  cairo_fill_preserve (cr);
+
+  cairo_save (cr);
+  cairo_set_source_rgb (cr, 0.1, 0.1, 0.1);
+  cairo_stroke (cr);
+  cairo_restore (cr);
+
+  cairo_restore (cr);
+}
+
+static void
+draw_dream (cairo_t *cr)
+{
+  cairo_move_to (cr, 50, 650);
+
+  cairo_rel_line_to (cr, 250, 50);
+  cairo_rel_curve_to (cr, 250, 50, 600, -50, 600, -250);
+  cairo_rel_curve_to (cr, 0, -400, -300, -100, -800, -300);
+
+  cairo_set_line_width (cr, 1.5);
+  cairo_set_source_rgba (cr, 0.3, 0.3, 1.0, 0.3);
+
+  fancy_cairo_stroke_preserve (cr);
+
+  draw_twisted (cr,
+               0, 0,
+               "Serif 72",
+               "It was a dream... Oh Just a dream...");
+}
+
+static void
+draw_wow (cairo_t *cr)
+{
+  cairo_move_to (cr, 400, 780);
+
+  cairo_rel_curve_to (cr, 50, -50, 150, -50, 200, 0);
+
+  cairo_scale (cr, 1.0, 2.0);
+  cairo_set_line_width (cr, 2.0);
+  cairo_set_source_rgba (cr, 0.3, 1.0, 0.3, 1.0);
+
+  fancy_cairo_stroke_preserve (cr);
+
+  draw_twisted (cr,
+               -20, -150,
+               "Serif 60",
+               "WOW!");
+}
+
+int main (int argc, char **argv)
+{
+  cairo_t *cr;
+  char *filename;
+  cairo_status_t status;
+  cairo_surface_t *surface;
+
+  if (argc != 2)
+    {
+      g_printerr ("Usage: cairotwisted OUTPUT_FILENAME\n");
+      return 1;
+    }
+
+  filename = argv[1];
+
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                       1000, 800);
+  cr = cairo_create (surface);
+
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+
+  draw_dream (cr);
+  draw_wow (cr);
+
+  cairo_destroy (cr);
+
+  status = cairo_surface_write_to_png (surface, filename);
+  cairo_surface_destroy (surface);
+
+  if (status != CAIRO_STATUS_SUCCESS)
+    {
+      g_printerr ("Could not save png to '%s'\n", filename);
+      return 1;
+    }
+
+  return 0;
+}
diff --git a/examples/pangowin32tobmp.c b/examples/pangowin32tobmp.c
new file mode 100755 (executable)
index 0000000..8d317c0
--- /dev/null
@@ -0,0 +1,450 @@
+/* Pango
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * testfonts.c:
+ * Copyright (C) 2001 Hans Breuer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <stdlib.h>
+#include <gmodule.h>
+#include "pango.h"
+#include "pango-impl-utils.h"
+#include "pangowin32.h"
+
+
+#include <errno.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdio.h>
+#include <locale.h>
+
+#include <windows.h>
+
+static HDC pre_render (int width, int height);
+static void post_render (HDC hdc, const char* sFile);
+
+static float
+calc_duration (GTimeVal *tv1, GTimeVal *tv0)
+{
+  return (  ((float)tv1->tv_sec - tv0->tv_sec)
+         + (tv1->tv_usec - tv0->tv_usec) / 1000000.0);
+}
+
+static int
+compare_font_family (PangoFontFamily** a,
+                    PangoFontFamily** b)
+{
+  return strcmp (pango_font_family_get_name (*a), pango_font_family_get_name (*b));
+}
+
+int main (int argc, char **argv)
+{
+  PangoFontMap *fontmap = pango_win32_font_map_for_display();
+  PangoContext *context;
+  PangoCoverage * coverage = NULL;
+  PangoFont* font = NULL;
+  PangoFontFamily** families = NULL;
+  PangoFontFace** faces = NULL;
+  int nb, i;
+  gchar* family_name = NULL;
+  PangoLanguage *lang = pango_language_from_string (g_win32_getlocale ());
+  HDC hdc = NULL;
+  int line = 0;
+  GTimeVal tv0, tv1;
+  int my_font_size = 12;
+
+  printf ("# Pango Font Test\n"
+         "# Language: %s\n"
+         "#\n", pango_language_to_string (lang));
+
+  /* this wasn't necessary with previous version
+   *
+   * force initialization of built-in engines, otherwise
+   * the rendering get's really fast - too fast to work :-(
+   */
+  context = pango_win32_get_context ();
+
+  if (argc == 1)               /* No arguments given */
+    {
+      char *std_fonts[] = {"Sans 12", "Serif 12", "Monospace 12"};
+
+      /* try to load some fonts often hardcoded */
+      for (i = 0; i < G_N_ELEMENTS (std_fonts); i++)
+       {
+         PangoFontDescription *desc = pango_font_description_from_string(std_fonts[i]);
+
+         /* spits warnings if font cannot be loaded */
+         font = pango_font_map_load_font (fontmap, context, desc);
+
+         g_object_unref (font);
+       }
+    }
+  else
+    {
+      PangoFontDescription *desc = NULL;
+      GString *s;
+
+      s = g_string_new (argv[1]);
+      for (i = 2; i < argc; i++)
+       {
+         s = g_string_append_c (s, ' ');
+         s = g_string_append (s, argv[i]);
+
+         if (0 != atoi (argv[i]))
+           my_font_size = atoi (argv[i]);
+       }
+
+      desc = pango_font_description_from_string(s->str);
+      family_name = g_strdup (pango_font_description_get_family (desc));
+
+      font = pango_font_map_load_font (fontmap, context, desc);
+
+      coverage = pango_font_get_coverage (font, lang);
+
+      /* ... */
+
+      pango_coverage_unref (coverage);
+      pango_font_description_free (desc);
+      g_object_unref (font);
+    }
+
+  pango_font_map_list_families (fontmap, &families, &nb);
+
+  if (!family_name)
+    {
+      qsort (families, nb, sizeof (PangoFontFamily*), compare_font_family);
+    }
+  else
+    {
+      /* Get on the family faces. No simple way ? */
+      for (i = 0; i < nb; i++)
+       {
+         if (0 == g_ascii_strcasecmp (pango_font_family_get_name (families[i]), family_name))
+           {
+             pango_font_family_list_faces (families[i], &faces, &nb);
+             /* now nb is the number of faces */
+             break;
+           }
+       }
+      g_free (families);
+      families = NULL;
+      g_free (family_name);
+      family_name = NULL;
+    }
+
+  hdc = pre_render(my_font_size * 64, 3 * my_font_size * nb / 2);
+
+  for (i = 0; i < nb; i++)
+    {
+      PangoFontDescription *desc;
+      const char *f_name;
+      PangoWeight weight;
+      PangoStyle  style;
+
+      if (families)
+       {
+         desc = pango_font_description_new ();
+
+         f_name =  pango_font_family_get_name (families[i]);
+         pango_font_description_set_family (desc, f_name);
+       }
+      else
+       {
+         desc = pango_font_face_describe (faces[i]);
+         /* this is _not_ the family name from above */
+         f_name = pango_font_description_get_family (desc);
+       }
+      weight = pango_font_description_get_weight (desc);
+      style  = pango_font_description_get_style  (desc);
+
+      g_print ("%s; Style: %d; Weight: %d\n",
+              f_name, style, weight);
+
+      /* give it an arbitray size to load it */
+      pango_font_description_set_size (desc, my_font_size * PANGO_SCALE);
+
+      g_get_current_time (&tv0);
+      font = pango_font_map_load_font (fontmap, context, desc);
+      g_get_current_time (&tv1);
+      g_print ("\tpango_font_map_load_font took %.3f sec\n", calc_duration (&tv1, &tv0));
+
+      if (font)
+       {
+         PangoItem     *item;
+         PangoGlyphString * glyphs;
+         char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                    "abcdefghijklmnopqrstuvwxyz"
+                    "1234567890 -+*/!\xc2\xa7$%&()[]{}<>|#=?@";
+
+         g_get_current_time (&tv0);
+         coverage = pango_font_get_coverage (font, lang);
+         g_get_current_time (&tv1);
+         g_print ("\tpango_font_get_coverage took %.3f sec\n", calc_duration (&tv1, &tv0));
+
+         /* ... */
+         pango_context_set_language (context, lang);
+         pango_context_set_base_dir (context, PANGO_DIRECTION_LTR);
+         pango_context_set_font_description (context, desc);
+
+         glyphs = pango_glyph_string_new ();
+         item = pango_item_new ();
+
+         item->analysis.shape_engine = pango_font_find_shaper (font, lang, s[0]);
+         item->analysis.font = g_object_ref (font);
+         pango_shape ( s, sizeof(s), &(item->analysis), glyphs);
+
+         if (hdc)
+           {
+             /* the positioning isn't correct */
+             char* name = g_strdup_printf ("%s (%s%s)",
+                                           f_name,
+                                           weight == PANGO_WEIGHT_NORMAL ? "n" :
+                                             (weight == PANGO_WEIGHT_HEAVY ? "h" :
+                                             (weight > PANGO_WEIGHT_NORMAL ? "b" : "l")),
+                                           style == PANGO_STYLE_OBLIQUE ? "o" :
+                                             (style == PANGO_STYLE_ITALIC ? "i" : "n"));
+
+             TextOut (hdc, 0, line, name, strlen(name));
+             g_get_current_time (&tv0);
+             pango_win32_render (hdc, font, glyphs, 200, line);
+             g_get_current_time (&tv1);
+             g_print ("\tpango_win32_render took %.3f sec\n",
+                      calc_duration (&tv1, &tv0));
+             line += (3 * my_font_size / 2);
+             g_free(name);
+           }
+
+         /* free glyphs, ... */
+         pango_glyph_string_free (glyphs);
+         pango_item_free (item);
+
+         pango_coverage_unref (coverage);
+         g_object_unref (font);
+       }
+      pango_font_description_free (desc);
+    }
+
+  if (hdc)
+    post_render (hdc, "pango-fonts.bmp");
+
+  g_free (families);
+  g_free (faces);
+
+  return 0;
+}
+
+/*
+ * Real Win32 specific render support
+ */
+static HBITMAP hbmpold = NULL;
+static HWND hwndRender = NULL;
+
+static BOOL
+SaveBitmap (HBITMAP hBmp, const char* pszFile);
+
+static HDC
+pre_render (int width, int height)
+{
+  HDC hmemdc;
+  HDC hdc;
+  HBITMAP hbmp;
+  RECT r;
+  r.top = 0; r.left = 0;
+  r.right  = width;
+  r.bottom = height;
+
+  hwndRender = CreateWindow ("EDIT",
+                            "pango-render-window",
+                            WS_DISABLED,
+                            0, 0, width, height,
+                            GetDesktopWindow(),
+                            NULL,
+                            GetModuleHandle(NULL),
+                            NULL);
+
+  if (hwndRender == NULL)
+    fprintf (stderr, "Couldn't create window\n"), exit (1);
+
+  hdc = GetDC(hwndRender);
+  hmemdc = CreateCompatibleDC (hdc);
+  if (hdc == NULL)
+    fprintf (stderr, "CreateCompatibleDC failed\n"), exit (1);
+
+  hbmp = CreateCompatibleBitmap (hdc, width, height);
+  if (hbmp == NULL)
+    fprintf (stderr, "CreateCompatibleBitmap failed\n"), exit (1);
+
+  hbmpold = SelectObject(hmemdc, hbmp);
+
+  FillRect (hmemdc, &r, GetStockObject(WHITE_BRUSH));
+  SetTextColor (hmemdc, RGB (0,0,0));
+  SetBkMode (hmemdc, TRANSPARENT);
+  return hmemdc;
+}
+
+static void
+post_render (HDC hdc, const char* sFile)
+{
+  HBITMAP hbmp = SelectObject(hdc, hbmpold);
+  if (sFile)
+    SaveBitmap (hbmp, sFile);
+  DeleteObject (hbmp);
+  DeleteDC (hdc);
+  ReleaseDC(hwndRender, GetDC(hwndRender));
+  DestroyWindow (hwndRender);
+}
+
+static BOOL
+SaveBitmap (HBITMAP hBmp, const char* pszFile)
+{
+  BITMAP bmp;
+  PBITMAPINFO pbmi;
+  WORD    cClrBits;
+  /* Retrieve the bitmap's color format, width, and height. */
+  if (!GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp))
+    return FALSE;
+  /* Convert the color format to a count of bits. */
+  cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);
+  if (cClrBits == 1)
+    cClrBits = 1;
+  else if (cClrBits <= 4)
+    cClrBits = 4;
+  else if (cClrBits <= 8)
+    cClrBits = 8;
+  else if (cClrBits <= 16)
+    cClrBits = 16;
+  else if (cClrBits <= 24)
+    cClrBits = 24;
+  else
+    cClrBits = 32;
+
+  /*
+   * Allocate memory for the BITMAPINFO structure. (This structure
+   * contains a BITMAPINFOHEADER structure and an array of RGBQUAD data
+   * structures.)      */
+  if (cClrBits < 24)
+    pbmi = (PBITMAPINFO) GlobalAlloc(LPTR,
+                                   sizeof(BITMAPINFOHEADER) +
+                                   sizeof(RGBQUAD) * (1 << cClrBits));
+  /*
+   * There is no RGBQUAD array for the 24-bit-per-pixel format.      */
+  else
+    pbmi = (PBITMAPINFO) GlobalAlloc(LPTR,
+                                   sizeof(BITMAPINFOHEADER));
+  /* Initialize the fields in the BITMAPINFO structure. */
+  pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+  pbmi->bmiHeader.biWidth = bmp.bmWidth;
+  pbmi->bmiHeader.biHeight = bmp.bmHeight;
+  pbmi->bmiHeader.biPlanes = bmp.bmPlanes;
+  pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;
+  if (cClrBits < 24)
+    pbmi->bmiHeader.biClrUsed = (1 << cClrBits);
+  else
+    pbmi->bmiHeader.biClrUsed = 0;
+  /* If the bitmap is not compressed, set the BI_RGB flag. */
+  pbmi->bmiHeader.biCompression = BI_RGB;
+  /*
+   * Compute the number of bytes in the array of color
+   * indices and store the result in biSizeImage.
+   */
+  pbmi->bmiHeader.biSizeImage = (pbmi->bmiHeader.biWidth + 7) /8
+                                 * pbmi->bmiHeader.biHeight
+                                 * cClrBits;
+  /*
+   * Set biClrImportant to 0, indicating that all of the
+   * device colors are important.
+   */
+  pbmi->bmiHeader.biClrImportant = 0;
+
+  { /* C sucks */
+  HANDLE hf;                  /* file handle */
+  BITMAPFILEHEADER hdr;       /* bitmap file-header */
+  PBITMAPINFOHEADER pbih;     /* bitmap info-header */
+  LPBYTE lpBits;              /* memory pointer */
+  DWORD dwTotal;              /* total count of bytes */
+  DWORD cb;                   /* incremental count of bytes */
+  DWORD dwTmp;
+  HDC hDC;
+
+  pbih = (PBITMAPINFOHEADER) pbmi;
+  lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);
+  if (!lpBits)
+    return FALSE;
+  /*
+   * Retrieve the color table (RGBQUAD array) and the bits
+   * (array of palette indices) from the DIB.
+   */
+  hDC = CreateCompatibleDC(NULL);
+  if (!GetDIBits(hDC, hBmp, 0, (WORD) pbih->biHeight,
+                lpBits, pbmi, DIB_RGB_COLORS))
+    return FALSE;
+  /* Create the .BMP file. */
+  hf = CreateFile (pszFile,
+                  GENERIC_READ | GENERIC_WRITE,
+                  (DWORD) 0,
+                  (LPSECURITY_ATTRIBUTES) NULL,
+                  CREATE_ALWAYS,
+                  FILE_ATTRIBUTE_NORMAL,
+                  (HANDLE) NULL);
+
+  if (hf == INVALID_HANDLE_VALUE)
+    return FALSE;
+  hdr.bfType = 0x4d42;        /* 0x42 = "B" 0x4d = "M" */
+  /* Compute the size of the entire file. */
+  hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER)
+                       + pbih->biSize + pbih->biClrUsed
+                       * sizeof(RGBQUAD) + pbih->biSizeImage);
+  hdr.bfReserved1 = 0;
+  hdr.bfReserved2 = 0;
+  /* Compute the offset to the array of color indices. */
+  hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER)
+                         + pbih->biSize + pbih->biClrUsed
+                         * sizeof (RGBQUAD);
+  /* Copy the BITMAPFILEHEADER into the .BMP file. */
+  if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
+                (LPDWORD) &dwTmp, (LPOVERLAPPED) NULL))
+    return FALSE;
+  /* Copy the BITMAPINFOHEADER and RGBQUAD array into the file. */
+  if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
+                    + pbih->biClrUsed * sizeof (RGBQUAD),
+                    (LPDWORD) &dwTmp, (LPOVERLAPPED) NULL))
+    return FALSE;
+  /* Copy the array of color indices into the .BMP file. */
+  dwTotal = cb = pbih->biSizeImage;
+
+  if (!WriteFile(hf, (LPSTR) lpBits, (int) cb,
+                (LPDWORD) &dwTotal, (LPOVERLAPPED) NULL))
+      return FALSE;
+
+  /* Close the .BMP file. */
+  if (!CloseHandle(hf))
+    return FALSE;
+
+  /* Free memory. */
+  GlobalFree((HGLOBAL)lpBits);
+  GlobalFree((HGLOBAL)pbmi);
+
+  DeleteDC(hDC);
+  } /* C sucks */
+  return TRUE;
+}
diff --git a/gtk-doc.make b/gtk-doc.make
new file mode 100644 (file)
index 0000000..eeb23b4
--- /dev/null
@@ -0,0 +1,155 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS)
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+EXTRA_DIST =                           \
+       $(content_files)                \
+       $(HTML_IMAGES)                  \
+       $(DOC_MAIN_SGML_FILE)           \
+       $(DOC_MODULE)-sections.txt      \
+       $(DOC_MODULE)-overrides.txt
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+          $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES =                 \
+       $(DOC_MODULE).args       \
+       $(DOC_MODULE).hierarchy  \
+       $(DOC_MODULE).interfaces \
+       $(DOC_MODULE).prerequisites \
+       $(DOC_MODULE).signals
+
+CLEANFILES = $(SCANOBJ_FILES) $(DOC_MODULE)-unused.txt $(DOC_STAMPS)
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+else
+all-local:
+endif
+
+docs: html-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+       @echo 'gtk-doc: Scanning header files'
+       @-chmod -R u+w $(srcdir)
+       if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+       else \
+           cd $(srcdir) ; \
+           for i in $(SCANOBJ_FILES) ; do \
+               test -f $$i || touch $$i ; \
+           done \
+       fi
+       cd $(srcdir) && \
+         gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+       touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp
+       @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+       @echo 'gtk-doc: Rebuilding template files'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+       @true
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+       @echo 'gtk-doc: Building XML'
+       @-chmod -R u+w $(srcdir)
+       cd $(srcdir) && \
+       gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+       touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+       @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+       @echo 'gtk-doc: Building HTML'
+       @-chmod -R u+w $(srcdir)
+       rm -rf $(srcdir)/html 
+       mkdir $(srcdir)/html
+       cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+       @echo 'gtk-doc: Fixing cross-references' 
+       cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+       touch html-build.stamp
+
+##############
+
+clean-local:
+       rm -f *~ *.bak
+       rm -rf .libs
+
+maintainer-clean-local: clean
+       cd $(srcdir) && rm -rf xml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+install-data-local:
+       installfiles=`echo $(srcdir)/html/*`; \
+       if test "$$installfiles" = '$(srcdir)/html/*'; \
+       then echo '-- Nothing to install' ; \
+       else \
+         $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+         for i in $$installfiles; do \
+           echo '-- Installing '$$i ; \
+           $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+         done; \
+         echo '-- Installing $(srcdir)/html/index.sgml' ; \
+         $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+       fi
+
+uninstall-local:
+       rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+       @echo "*** gtk-doc must be installed and enabled in order to make dist"
+       @false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+       mkdir $(distdir)/tmpl
+       mkdir $(distdir)/xml
+       mkdir $(distdir)/html
+       -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       -cp $(srcdir)/xml/*.xml $(distdir)/xml
+       -cp $(srcdir)/html/* $(distdir)/html
+       if test -f $(srcdir)/$(DOC_MODULE).types; then \
+         cp $(srcdir)/$(DOC_MODULE).types $(distdir)/$(DOC_MODULE).types; \
+       fi
+
+.PHONY : dist-hook-local docs
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..4d4a951
--- /dev/null
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2005-05-14.22
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+       shift
+       shift
+       continue;;
+
+    -T) no_target_directory=true
+       shift
+       continue;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    *)  # When -d is used, all remaining arguments are directories to create.
+       # When -t is used, the destination is already specified.
+       test -n "$dir_arg$dstarg" && break
+        # Otherwise, the last argument is the destination.  Remove it from $@.
+       for arg
+       do
+          if test -n "$dstarg"; then
+           # $@ is not empty: it contains at least $arg.
+           set fnord "$@" "$dstarg"
+           shift # fnord
+         fi
+         shift # arg
+         dstarg=$arg
+       done
+       break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  else
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dstarg: Is a directory" >&2
+       exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    fi
+  fi
+
+  # This sed command emulates the dirname command.
+  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+  # Make sure that the destination directory exists.
+
+  # Skip lots of stat calls in the usual case.
+  if test ! -d "$dstdir"; then
+    defaultIFS='
+        '
+    IFS="${IFS-$defaultIFS}"
+
+    oIFS=$IFS
+    # Some sh's can't handle IFS=/ for some reason.
+    IFS='%'
+    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+    shift
+    IFS=$oIFS
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      shift
+      if test ! -d "$pathcomp"; then
+        $mkdirprog "$pathcomp"
+       # mkdir can fail with a `File exist' error in case several
+       # install-sh are creating the directory concurrently.  This
+       # is OK.
+       test -d "$pathcomp" || exit
+      fi
+      pathcomp=$pathcomp/
+    done
+  fi
+
+  if test -n "$dir_arg"; then
+    $doit $mkdircmd "$dst" \
+      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+  else
+    dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+    trap '(exit $?); exit' 1 2 13 15
+
+    # Copy the file name to the temp name.
+    $doit $cpprog "$src" "$dsttmp" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+      || {
+          # The rename failed, perhaps because mv can't rename something else
+          # to itself, or perhaps because mv is so ancient that it does not
+          # support -f.
+
+          # Now remove or move aside any old file at destination location.
+          # We try this two ways since rm can't unlink itself on some
+          # systems and the destination file might be busy for other
+          # reasons.  In this case, the final cleanup might fail but the new
+          # file should still install successfully.
+          {
+            if test -f "$dstdir/$dstfile"; then
+              $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+              || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+              || {
+                echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+                (exit 1); exit 1
+              }
+            else
+              :
+            fi
+          } &&
+
+          # Now rename the file to the real destination.
+          $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+        }
+    }
+  fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100644 (file)
index 0000000..c8485ab
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,7893 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.4
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.4
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.2.4
+TIMESTAMP=""
+package_revision=1.2976
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/usr/bin/grep -E"}
+: ${FGREP="/usr/bin/grep -F"}
+: ${GREP="/usr/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/opt/local/bin/gsed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    $SED -e 4q "$1" 2>/dev/null \
+      | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin*|*mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper arg
+#
+# emit a libtool wrapper script on stdout
+# don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variable
+# set therein.
+#
+# arg is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the '.lib' directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+static const char *script_text =
+EOF
+
+           func_emit_wrapper yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *shwrapper_name;
+  intptr_t rval = 127;
+  FILE *shwrapper;
+
+  const char *dumpscript_opt = "--lt-dump-script";
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<EOF
+         printf ("%s", script_text);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 2);
+EOF
+
+           if test -n "$TARGETSHELL" ; then
+             # no path translation at all
+             lt_newargv0=$TARGETSHELL
+           else
+             case "$host" in
+               *mingw* )
+                 # awkward: cmd appends spaces to result
+                 lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+                 lt_newargv0=`( cmd //c echo $SHELL | $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo $SHELL`
+                 case $lt_newargv0 in
+                   *.exe | *.EXE) ;;
+                   *) lt_newargv0=$lt_newargv0.exe ;;
+                 esac
+                 ;;
+               * ) lt_newargv0=$SHELL ;;
+             esac
+           fi
+
+               cat <<EOF
+  newargz[0] = (char *) xstrdup ("$lt_newargv0");
+EOF
+
+           cat <<"EOF"
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  shwrapper_name = (char *) xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, shwrapper_name);
+
+  /* shwrapper_name transforms */
+  strendzap (shwrapper_name, ".exe");
+  tmp_pathspec = XMALLOC (char, (strlen (shwrapper_name) +
+                                strlen ("_ltshwrapperTMP") + 1));
+  strcpy (tmp_pathspec, shwrapper_name);
+  strcat (tmp_pathspec, "_ltshwrapperTMP");
+  XFREE (shwrapper_name);
+  shwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool shell wrapper name: %s\n",
+                         shwrapper_name));
+EOF
+
+           cat <<EOF
+  newargz[1] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (shwrapper_name) + 1));
+  strcpy (newargz[1], actual_cwrapper_path);
+  strcat (newargz[1], "$objdir");
+  strcat (newargz[1], "/");
+  strcat (newargz[1], shwrapper_name);
+EOF
+
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[1], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (shwrapper_name);
+  XFREE (actual_cwrapper_path);
+
+  /* always write in binary mode */
+  if ((shwrapper = fopen (newargz[1], FOPEN_WB)) == 0)
+    {
+      lt_fatal ("Could not open %s for writing", newargz[1]);
+    }
+  fprintf (shwrapper, "%s", script_text);
+  fclose (shwrapper);
+
+  make_executable (newargz[1]);
+
+  for (i = 1; i < argc; i++)
+    newargz[i + 1] = xstrdup (argv[i]);
+  newargz[argc + 1] = NULL;
+
+  for (i = 0; i < argc + 1; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, newargz[i]));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<EOF
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, "$lt_newargv0", (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"$lt_newargv0\": errno = %d\n", errno));
+      return 127;
+    }
+  return rval;
+}
+EOF
+               ;;
+             *)
+               cat <<EOF
+  execv ("$lt_newargv0", newargz);
+  return rval; /* =127, but avoids unused variable warning */
+}
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,--as-needed)
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -Wl,--as-needed)
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -Wl,--as-needed)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+         fi
+         continue
+         ;;
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           deplibs="$deplib $deplibs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             rpath="$rpath$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test "X$objlist" = X ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # we should really use a build-platform specific compiler
+           # here, but OTOH, the wrappers (shell script and this C one)
+           # are only useful if you want to execute the "real" binary.
+           # Since the "real" binary is built for $host, then this
+           # wrapper might as well be built for $host, too.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..894e786
--- /dev/null
+++ b/missing
@@ -0,0 +1,360 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2005-06-08.21
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case "$1" in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f y.tab.h ]; then
+       echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+       file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case "$firstarg" in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case "$firstarg" in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/modules/Makefile.am b/modules/Makefile.am
new file mode 100755 (executable)
index 0000000..dc8a2c8
--- /dev/null
@@ -0,0 +1,76 @@
+## Process this file with automake to create Makefile.in.
+
+SUBDIRS =              \
+       arabic          \
+       basic           \
+       hangul          \
+       hebrew          \
+       indic           \
+       khmer           \
+       syriac          \
+       thai            \
+       tibetan
+
+EXTRA_DIST =           \
+       Module.mk       \
+       module.def      \
+       pangorc
+
+CLEANFILES =           \
+       pango.modules
+
+if CROSS_COMPILING
+RUN_QUERY_MODULES_TEST=false
+else
+RUN_QUERY_MODULES_TEST=true
+all-local: pango.modules
+endif
+
+install-data-local: $(top_builddir)/pango/pango-querymodules$(EXEEXT)
+       @if $(RUN_QUERY_MODULES_TEST) && test -z "$(DESTDIR)" ; then    \
+         echo $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/pango \&\&      \
+         $(top_builddir)/pango/pango-querymodules$(EXEEXT)             \
+               \> $(DESTDIR)$(sysconfdir)/pango/pango.modules ;        \
+         $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/pango &&             \
+         $(top_builddir)/pango/pango-querymodules$(EXEEXT)             \
+               > $(DESTDIR)$(sysconfdir)/pango/pango.modules ;         \
+       else                                                            \
+         echo "***" ;                                                  \
+         echo "*** Warning: $(sysconfdir)/pango/pango.modules" ;       \
+         echo "*** not created" ;                                      \
+         echo "*** Generate this file on the target system" ;          \
+         echo "*** using pango-querymodules" ;                         \
+         echo "***" ;                                                  \
+       fi
+
+uninstall-local:
+       $(RM) $(DESTDIR)$(sysconfdir)/pango/pango.modules
+
+pango.modules:                                         \
+       $(SUBDIRS)                                      \
+       $(top_builddir)/config.status                   \
+       $(top_builddir)/pango/pango-querymodules$(EXEEXT)
+       $(AM_V_GEN) if $(RUN_QUERY_MODULES_TEST) && find . -name '*.la' | grep -v '\.libs' | grep -v libpango | grep '.' > /dev/null ; then \
+          echo "Writing a pango.modules file to use with tests/examples."; \
+          $(top_builddir)/pango/pango-querymodules$(EXEEXT) `find . -name '*.la' | grep -v '\.libs' | grep -v libpango` > $@ ;\
+       else \
+          echo "***" ; \
+         echo "*** No dynamic modules found, or cross-compiling" ; \
+         echo "*** Will use only static modules for tests and examples." ; \
+         echo "***" ; \
+         > $@; \
+       fi
+
+included-modules:
+       @for d in $(SUBDIRS) ; do \
+               ( cd $$d && $(MAKE) $(AM_MAKEFLAGS) included-modules ) ; \
+        done
+
+dynamic-modules:
+       @for d in $(SUBDIRS) ; do \
+               ( cd $$d && $(MAKE) $(AM_MAKEFLAGS) dynamic-modules ) ; \
+        done
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/Makefile.in b/modules/Makefile.in
new file mode 100644 (file)
index 0000000..64d54b7
--- /dev/null
@@ -0,0 +1,721 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = modules
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-exec-recursive install-info-recursive \
+       install-recursive installcheck-recursive installdirs-recursive \
+       pdf-recursive ps-recursive uninstall-info-recursive \
+       uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+SUBDIRS = \
+       arabic          \
+       basic           \
+       hangul          \
+       hebrew          \
+       indic           \
+       khmer           \
+       syriac          \
+       thai            \
+       tibetan
+
+EXTRA_DIST = \
+       Module.mk       \
+       module.def      \
+       pangorc
+
+CLEANFILES = \
+       pango.modules
+
+@CROSS_COMPILING_FALSE@RUN_QUERY_MODULES_TEST = true
+@CROSS_COMPILING_TRUE@RUN_QUERY_MODULES_TEST = false
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(mkdir_p) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+@CROSS_COMPILING_TRUE@all-local:
+all-am: Makefile all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-local
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local check \
+       check-am clean clean-generic clean-libtool clean-recursive \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-recursive distclean-tags distdir \
+       dvi dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-data-local install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       maintainer-clean-recursive mostlyclean mostlyclean-generic \
+       mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am uninstall-info-am \
+       uninstall-local
+
+@CROSS_COMPILING_FALSE@all-local: pango.modules
+
+install-data-local: $(top_builddir)/pango/pango-querymodules$(EXEEXT)
+       @if $(RUN_QUERY_MODULES_TEST) && test -z "$(DESTDIR)" ; then    \
+         echo $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/pango \&\&      \
+         $(top_builddir)/pango/pango-querymodules$(EXEEXT)             \
+               \> $(DESTDIR)$(sysconfdir)/pango/pango.modules ;        \
+         $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/pango &&             \
+         $(top_builddir)/pango/pango-querymodules$(EXEEXT)             \
+               > $(DESTDIR)$(sysconfdir)/pango/pango.modules ;         \
+       else                                                            \
+         echo "***" ;                                                  \
+         echo "*** Warning: $(sysconfdir)/pango/pango.modules" ;       \
+         echo "*** not created" ;                                      \
+         echo "*** Generate this file on the target system" ;          \
+         echo "*** using pango-querymodules" ;                         \
+         echo "***" ;                                                  \
+       fi
+
+uninstall-local:
+       $(RM) $(DESTDIR)$(sysconfdir)/pango/pango.modules
+
+pango.modules:                                         \
+       $(SUBDIRS)                                      \
+       $(top_builddir)/config.status                   \
+       $(top_builddir)/pango/pango-querymodules$(EXEEXT)
+       $(AM_V_GEN) if $(RUN_QUERY_MODULES_TEST) && find . -name '*.la' | grep -v '\.libs' | grep -v libpango | grep '.' > /dev/null ; then \
+          echo "Writing a pango.modules file to use with tests/examples."; \
+          $(top_builddir)/pango/pango-querymodules$(EXEEXT) `find . -name '*.la' | grep -v '\.libs' | grep -v libpango` > $@ ;\
+       else \
+          echo "***" ; \
+         echo "*** No dynamic modules found, or cross-compiling" ; \
+         echo "*** Will use only static modules for tests and examples." ; \
+         echo "***" ; \
+         > $@; \
+       fi
+
+included-modules:
+       @for d in $(SUBDIRS) ; do \
+               ( cd $$d && $(MAKE) $(AM_MAKEFLAGS) included-modules ) ; \
+        done
+
+dynamic-modules:
+       @for d in $(SUBDIRS) ; do \
+               ( cd $$d && $(MAKE) $(AM_MAKEFLAGS) dynamic-modules ) ; \
+        done
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/Module.mk b/modules/Module.mk
new file mode 100755 (executable)
index 0000000..aa50470
--- /dev/null
@@ -0,0 +1,35 @@
+pangolibs =                                                            \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+pangoxlibs =                                                           \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+pangoft2libs =                                                         \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+pangowin32libs =                                                       \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+pangoatsuilibs =                                                       \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES =                             \
+       -DG_LOG_DOMAIN=\"Pango\"        \
+       -DPANGO_ENABLE_ENGINE           \
+       $(PANGO_DEBUG_FLAGS)            \
+       -I$(top_srcdir)                 \
+       -I$(top_srcdir)/pango           \
+       $(GLIB_CFLAGS)
+
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES =
+noinst_LTLIBRARIES =
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
diff --git a/modules/arabic/Makefile.am b/modules/arabic/Makefile.am
new file mode 100755 (executable)
index 0000000..935eb03
--- /dev/null
@@ -0,0 +1,43 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_ARABIC_FC
+noinst_LTLIBRARIES += libpango-arabic-fc.la
+else
+if DYNAMIC_ARABIC_FC
+module_LTLIBRARIES += pango-arabic-fc.la
+endif
+endif
+endif
+
+fc_sources = \
+       arabic-fc.c \
+       arabic-ot.c \
+       arabic-ot.h
+
+pango_arabic_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_arabic_fc_la_LIBADD = $(pangoft2libs)
+pango_arabic_fc_la_SOURCES = $(fc_sources)
+libpango_arabic_fc_la_SOURCES = $(fc_sources)
+libpango_arabic_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_arabic_fc
+
+
+if INCLUDE_ARABIC_LANG
+noinst_LTLIBRARIES += libpango-arabic-lang.la
+else
+if DYNAMIC_ARABIC_LANG
+module_LTLIBRARIES += pango-arabic-lang.la
+endif
+endif
+
+lang_sources = \
+       arabic-lang.c
+
+pango_arabic_lang_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_arabic_lang_la_LIBADD = $(pangolibs)
+pango_arabic_lang_la_SOURCES = $(lang_sources)
+libpango_arabic_lang_la_SOURCES = $(lang_sources)
+libpango_arabic_lang_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_arabic_lang
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/arabic/Makefile.in b/modules/arabic/Makefile.in
new file mode 100644 (file)
index 0000000..3d0ed25
--- /dev/null
@@ -0,0 +1,761 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_ARABIC_FC_TRUE@am__append_2 = libpango-arabic-fc.la
+@DYNAMIC_ARABIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_ARABIC_FC_FALSE@am__append_3 = pango-arabic-fc.la
+@INCLUDE_ARABIC_LANG_TRUE@am__append_4 = libpango-arabic-lang.la
+@DYNAMIC_ARABIC_LANG_TRUE@@INCLUDE_ARABIC_LANG_FALSE@am__append_5 = pango-arabic-lang.la
+subdir = modules/arabic
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_arabic_fc_la_LIBADD =
+am__objects_1 = libpango_arabic_fc_la-arabic-fc.lo \
+       libpango_arabic_fc_la-arabic-ot.lo
+am_libpango_arabic_fc_la_OBJECTS = $(am__objects_1)
+libpango_arabic_fc_la_OBJECTS = $(am_libpango_arabic_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_ARABIC_FC_TRUE@am_libpango_arabic_fc_la_rpath =
+libpango_arabic_lang_la_LIBADD =
+am__objects_2 = libpango_arabic_lang_la-arabic-lang.lo
+am_libpango_arabic_lang_la_OBJECTS = $(am__objects_2)
+libpango_arabic_lang_la_OBJECTS =  \
+       $(am_libpango_arabic_lang_la_OBJECTS)
+@INCLUDE_ARABIC_LANG_TRUE@am_libpango_arabic_lang_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_arabic_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_3 = arabic-fc.lo arabic-ot.lo
+am_pango_arabic_fc_la_OBJECTS = $(am__objects_3)
+pango_arabic_fc_la_OBJECTS = $(am_pango_arabic_fc_la_OBJECTS)
+@DYNAMIC_ARABIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_ARABIC_FC_FALSE@am_pango_arabic_fc_la_rpath = -rpath \
+@DYNAMIC_ARABIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_ARABIC_FC_FALSE@  $(moduledir)
+pango_arabic_lang_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am__objects_4 = arabic-lang.lo
+am_pango_arabic_lang_la_OBJECTS = $(am__objects_4)
+pango_arabic_lang_la_OBJECTS = $(am_pango_arabic_lang_la_OBJECTS)
+@DYNAMIC_ARABIC_LANG_TRUE@@INCLUDE_ARABIC_LANG_FALSE@am_pango_arabic_lang_la_rpath =  \
+@DYNAMIC_ARABIC_LANG_TRUE@@INCLUDE_ARABIC_LANG_FALSE@  -rpath \
+@DYNAMIC_ARABIC_LANG_TRUE@@INCLUDE_ARABIC_LANG_FALSE@  $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_arabic_fc_la_SOURCES) \
+       $(libpango_arabic_lang_la_SOURCES) \
+       $(pango_arabic_fc_la_SOURCES) $(pango_arabic_lang_la_SOURCES)
+DIST_SOURCES = $(libpango_arabic_fc_la_SOURCES) \
+       $(libpango_arabic_lang_la_SOURCES) \
+       $(pango_arabic_fc_la_SOURCES) $(pango_arabic_lang_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3) $(am__append_5)
+noinst_LTLIBRARIES = $(am__append_2) $(am__append_4)
+fc_sources = \
+       arabic-fc.c \
+       arabic-ot.c \
+       arabic-ot.h
+
+pango_arabic_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_arabic_fc_la_LIBADD = $(pangoft2libs)
+pango_arabic_fc_la_SOURCES = $(fc_sources)
+libpango_arabic_fc_la_SOURCES = $(fc_sources)
+libpango_arabic_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_arabic_fc
+lang_sources = \
+       arabic-lang.c
+
+pango_arabic_lang_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_arabic_lang_la_LIBADD = $(pangolibs)
+pango_arabic_lang_la_SOURCES = $(lang_sources)
+libpango_arabic_lang_la_SOURCES = $(lang_sources)
+libpango_arabic_lang_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_arabic_lang
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/arabic/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/arabic/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-arabic-fc.la: $(libpango_arabic_fc_la_OBJECTS) $(libpango_arabic_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_arabic_fc_la_rpath) $(libpango_arabic_fc_la_LDFLAGS) $(libpango_arabic_fc_la_OBJECTS) $(libpango_arabic_fc_la_LIBADD) $(LIBS)
+libpango-arabic-lang.la: $(libpango_arabic_lang_la_OBJECTS) $(libpango_arabic_lang_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_arabic_lang_la_rpath) $(libpango_arabic_lang_la_LDFLAGS) $(libpango_arabic_lang_la_OBJECTS) $(libpango_arabic_lang_la_LIBADD) $(LIBS)
+pango-arabic-fc.la: $(pango_arabic_fc_la_OBJECTS) $(pango_arabic_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_arabic_fc_la_rpath) $(pango_arabic_fc_la_LDFLAGS) $(pango_arabic_fc_la_OBJECTS) $(pango_arabic_fc_la_LIBADD) $(LIBS)
+pango-arabic-lang.la: $(pango_arabic_lang_la_OBJECTS) $(pango_arabic_lang_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_arabic_lang_la_rpath) $(pango_arabic_lang_la_LDFLAGS) $(pango_arabic_lang_la_OBJECTS) $(pango_arabic_lang_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arabic-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arabic-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arabic-ot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_arabic_fc_la-arabic-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_arabic_fc_la-arabic-ot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_arabic_lang_la-arabic-lang.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_arabic_fc_la-arabic-fc.lo: arabic-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_arabic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_arabic_fc_la-arabic-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_arabic_fc_la-arabic-fc.Tpo" -c -o libpango_arabic_fc_la-arabic-fc.lo `test -f 'arabic-fc.c' || echo '$(srcdir)/'`arabic-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_arabic_fc_la-arabic-fc.Tpo" "$(DEPDIR)/libpango_arabic_fc_la-arabic-fc.Plo"; else rm -f "$(DEPDIR)/libpango_arabic_fc_la-arabic-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='arabic-fc.c' object='libpango_arabic_fc_la-arabic-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_arabic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_arabic_fc_la-arabic-fc.lo `test -f 'arabic-fc.c' || echo '$(srcdir)/'`arabic-fc.c
+
+libpango_arabic_fc_la-arabic-ot.lo: arabic-ot.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_arabic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_arabic_fc_la-arabic-ot.lo -MD -MP -MF "$(DEPDIR)/libpango_arabic_fc_la-arabic-ot.Tpo" -c -o libpango_arabic_fc_la-arabic-ot.lo `test -f 'arabic-ot.c' || echo '$(srcdir)/'`arabic-ot.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_arabic_fc_la-arabic-ot.Tpo" "$(DEPDIR)/libpango_arabic_fc_la-arabic-ot.Plo"; else rm -f "$(DEPDIR)/libpango_arabic_fc_la-arabic-ot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='arabic-ot.c' object='libpango_arabic_fc_la-arabic-ot.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_arabic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_arabic_fc_la-arabic-ot.lo `test -f 'arabic-ot.c' || echo '$(srcdir)/'`arabic-ot.c
+
+libpango_arabic_lang_la-arabic-lang.lo: arabic-lang.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_arabic_lang_la_CFLAGS) $(CFLAGS) -MT libpango_arabic_lang_la-arabic-lang.lo -MD -MP -MF "$(DEPDIR)/libpango_arabic_lang_la-arabic-lang.Tpo" -c -o libpango_arabic_lang_la-arabic-lang.lo `test -f 'arabic-lang.c' || echo '$(srcdir)/'`arabic-lang.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_arabic_lang_la-arabic-lang.Tpo" "$(DEPDIR)/libpango_arabic_lang_la-arabic-lang.Plo"; else rm -f "$(DEPDIR)/libpango_arabic_lang_la-arabic-lang.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='arabic-lang.c' object='libpango_arabic_lang_la-arabic-lang.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_arabic_lang_la_CFLAGS) $(CFLAGS) -c -o libpango_arabic_lang_la-arabic-lang.lo `test -f 'arabic-lang.c' || echo '$(srcdir)/'`arabic-lang.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/arabic/arabic-fc.c b/modules/arabic/arabic-fc.c
new file mode 100755 (executable)
index 0000000..4b024e1
--- /dev/null
@@ -0,0 +1,226 @@
+/* Pango
+ * arabic-fc.c: Arabic shaper for FreeType-based backends
+ *
+ * Copyright (C) 2000, 2003, 2007 Red Hat Software
+ * Authors:
+ *   Owen Taylor <otaylor@redhat.com>
+ *   Behdad Esfahbod <behdad@behdad.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "arabic-ot.h"
+
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      ArabicEngineFc;
+typedef PangoEngineShapeClass ArabicEngineFcClass ;
+
+#define SCRIPT_ENGINE_NAME "ArabicScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+static PangoEngineScriptInfo arabic_scripts[] = {
+  { PANGO_SCRIPT_ARABIC, "*" },
+  { PANGO_SCRIPT_NKO, "*" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    arabic_scripts, G_N_ELEMENTS(arabic_scripts)
+  }
+};
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"isol", isolated},
+  {"fina", final},
+  {"medi", medial},
+  {"init", initial},
+  {"rlig", PANGO_OT_ALL_GLYPHS},
+  {"calt", PANGO_OT_ALL_GLYPHS},
+  {"liga", PANGO_OT_ALL_GLYPHS},
+  /* 'dlig' should be turned-on/off-able.  lets turn off for now. */
+  /* {"dlig", PANGO_OT_ALL_GLYPHS}, */
+  {"cswh", PANGO_OT_ALL_GLYPHS},
+  {"mset", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"curs", PANGO_OT_ALL_GLYPHS},
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+arabic_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                    PangoFont        *font,
+                    const char       *text,
+                    gint              length,
+                    const PangoAnalysis *analysis,
+                    PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  gulong *properties = NULL;
+  glong n_chars;
+  gunichar *wcs;
+  const char *p;
+  int cluster = 0;
+  gboolean rtl = analysis->level % 2 != 0;
+  gboolean reverse;
+  int i;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, rtl);
+  pango_ot_buffer_set_zero_width_marks (buffer, TRUE);
+
+  wcs = g_utf8_to_ucs4_fast (text, length, &n_chars);
+  properties = g_new0 (gulong, n_chars);
+
+  reverse = !rtl ^ (analysis->gravity == PANGO_GRAVITY_NORTH || analysis->gravity == PANGO_GRAVITY_WEST);
+  Arabic_Assign_Properties (wcs, properties, n_chars, reverse);
+
+  g_free (wcs);
+
+  p = text;
+  for (i=0; i < n_chars; i++)
+    {
+      gunichar wc;
+      PangoGlyph glyph;
+
+      wc = g_utf8_get_char (p);
+
+      if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+       cluster = p - text;
+
+      if (pango_is_zero_width (wc))
+        glyph = PANGO_GLYPH_EMPTY;
+      else
+        {
+         gunichar c = wc;
+
+         if (analysis->level % 2)
+           g_unichar_get_mirror_char (c, &c);
+
+         /* Hack - Microsoft fonts are strange and don't contain the
+          * correct rules to shape ARABIC LETTER FARSI YEH in
+          * medial/initial position. It looks identical to ARABIC LETTER
+          * YEH in these positions, so we substitute if the font contains
+          * ARABIC LETTER YEH
+          */
+         if (c == 0x6cc &&
+             ((properties[i] & (initial | medial)) != (initial | medial)) &&
+             pango_fc_font_has_char (fc_font, 0x64a))
+           c = 0x64a;
+
+         glyph = pango_fc_font_get_glyph (fc_font, c);
+       }
+
+      if (!glyph)
+       glyph = PANGO_GET_UNKNOWN_GLYPH (wc);
+
+      pango_ot_buffer_add_glyph (buffer, glyph, properties[i], cluster);
+
+      p = g_utf8_next_char (p);
+    }
+
+  g_free (properties);
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+  pango_ot_buffer_output (buffer, glyphs);
+
+  pango_ot_buffer_destroy (buffer);
+
+  pango_fc_font_unlock_face (fc_font);
+}
+
+static void
+arabic_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = arabic_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (ArabicEngineFc, arabic_engine_fc,
+                               arabic_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  arabic_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (arabic_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/arabic/arabic-lang.c b/modules/arabic/arabic-lang.c
new file mode 100755 (executable)
index 0000000..ee23bad
--- /dev/null
@@ -0,0 +1,152 @@
+/* Pango
+ * arabic-lang.c:
+ *
+ * Copyright (C) 2006 Red Hat Software
+ * Copyright (C) 2006 Sharif FarsiWeb, Inc.
+ * Authors: Behdad Esfahbod <besfahbo@redhat.com>
+ *          Roozbeh Pournader <roozbeh@farsiweb.info>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-engine.h"
+#include "pango-break.h"
+
+/* No extra fields needed */
+typedef PangoEngineLang      ArabicEngineLang;
+typedef PangoEngineLangClass ArabicEngineLangClass ;
+
+#define SCRIPT_ENGINE_NAME "ArabicScriptEngineLang"
+#define RENDER_TYPE PANGO_RENDER_TYPE_NONE
+
+static PangoEngineScriptInfo arabic_scripts[] = {
+  { PANGO_SCRIPT_ARABIC, "*" },
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_LANG,
+    RENDER_TYPE,
+    arabic_scripts, G_N_ELEMENTS(arabic_scripts)
+  }
+};
+
+
+#define ALEF_WITH_MADDA_ABOVE  0x0622
+#define YEH_WITH_HAMZA_ABOVE   0x0626
+#define ALEF                   0x0627
+#define WAW                    0x0648
+#define YEH                    0x064A
+
+#define MADDAH_ABOVE           0x0653
+#define HAMZA_ABOVE            0x0654
+#define HAMZA_BELOW            0x0655
+
+/*
+ * Arabic characters with canonical decompositions that are not just
+ * ligatures.  The characters U+06C0, U+06C2, and U+06D3 are intentionally
+ * excluded as they are marked as "not an independent letter" in Unicode
+ * Character Database's NamesList.txt
+ */
+#define IS_COMPOSITE(c) (ALEF_WITH_MADDA_ABOVE <= (c) && (c) <= YEH_WITH_HAMZA_ABOVE)
+
+/* If a character is the second part of a composite Arabic character with an Alef */
+#define IS_COMPOSITE_WITH_ALEF(c) (MADDAH_ABOVE <= (c) && (c) <= HAMZA_BELOW)
+
+static void
+arabic_engine_break (PangoEngineLang *engine G_GNUC_UNUSED,
+                    const char      *text,
+                    int              length,
+                    PangoAnalysis   *analysis G_GNUC_UNUSED,
+                    PangoLogAttr    *attrs,
+                    int              attrs_len G_GNUC_UNUSED)
+{
+  int i;
+  const char *p;
+  gunichar prev_wc, this_wc;
+
+  /* See http://bugzilla.gnome.org/show_bug.cgi?id=350132 for issues this
+   * module tries to solve.
+   */
+
+  for (p = text, i = 0, prev_wc = 0;
+       p < text + length;
+       p = g_utf8_next_char (p), i++, prev_wc = this_wc)
+    {
+      this_wc = g_utf8_get_char (p);
+
+      /*
+       * Unset backspace_deletes_character for various combinations.
+       *
+       * A few more combinations may need to be handled here, but are not
+       * handled yet, as expectations of users is not known or may differ
+       * among different languages or users:
+       * some letters combined with U+0658 ARABIC MARK NOON GHUNNA;
+       * combinations considered one letter in Azerbaijani (WAW+SUKUN and
+       * FARSI_YEH+HAMZA_ABOVE); combinations of YEH and ALEF_MAKSURA with
+       * HAMZA_BELOW (Qur'anic); TATWEEL+HAMZA_ABOVE (Qur'anic).
+       *
+       * FIXME: Ordering these in some other way may lower the time spent here, or not.
+       */
+      if (G_UNLIKELY (
+          IS_COMPOSITE (this_wc) ||
+         (prev_wc == ALEF && IS_COMPOSITE_WITH_ALEF (this_wc)) ||
+         (this_wc == HAMZA_ABOVE && (prev_wc == WAW || prev_wc == YEH))
+        ))
+       attrs[i+1].backspace_deletes_character = FALSE;
+    }
+}
+
+static void
+arabic_engine_lang_class_init (PangoEngineLangClass *class)
+{
+  class->script_break = arabic_engine_break;
+}
+
+PANGO_ENGINE_LANG_DEFINE_TYPE (ArabicEngineLang, arabic_engine_lang,
+                              arabic_engine_lang_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  arabic_engine_lang_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (arabic_engine_lang_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/arabic/arabic-ot.c b/modules/arabic/arabic-ot.c
new file mode 100755 (executable)
index 0000000..ca8e700
--- /dev/null
@@ -0,0 +1,461 @@
+/* This file is taken from the FreeType (1) tree. It's been reindented
+ * to roughly match Pango guidelines (in anticipation of future changes),
+ * but not otherwise much altered.
+ */
+
+/****************************************************************************/
+/*                                                                          */
+/*  The FreeType project -- a free and portable quality TrueType renderer.  */
+/*                                                                          */
+/*  Copyright 1996-2000 by                                                  */
+/*  D. Turner, R.Wilhelm, and W. Lemberg                                    */
+/*                                                                          */
+/*  arabic -- An implementation of the contextual algorithm given in the    */
+/*  Unicode 2.0 book to assign the `isolated', `initial', `medial', and     */
+/*  `final' properties to an input string of character codes for the Arabic */
+/*  script.                                                                 */
+/*                                                                          */
+/*  This file is part of the FreeType project, and may only be used         */
+/*  modified and distributed under the terms of the FreeType project        */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute      */
+/*  this file you indicate that you have read the license and               */
+/*  understand and accept it fully.                                         */
+/*                                                                          */
+/* The code, like the FreeType code it is derived from is dual-licensed     */
+/* under the GNU General Public License and the FreeType license. See       */
+/* pango/opentype/COPYING for full details of this licensing scheme.        */
+/****************************************************************************/
+
+#include "config.h"
+
+#include "arabic-ot.h"
+
+
+/*
+ *
+ *     Here a table of the joining classes for characters in the range
+ *     U+0620 - U+06FF and U+0750 - U+077F.
+ *
+ *    The following character also has a joining class:
+ *
+ *     U+200D  ZERO WIDTH JOINER  -> causing
+ *
+ *    All other characters are given the joining class `none'.
+ *
+ */
+
+static const joining_class  arabic[] =
+{
+  /* U+0620 */
+  none, none, right, right,
+  right, right, dual, right,
+  dual, right, dual, dual,
+  dual, dual, dual, right,
+
+  /* U+0630 */
+  right, right, right, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, none,
+  none, none, none, none,
+
+  /* U+0640 */
+  causing, dual, dual, dual,
+  dual, dual, dual, dual,
+  right, dual, dual, transparent,
+  transparent, transparent, transparent, transparent,
+
+  /* U+0650 */
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, none,
+
+  /* U+0660 */
+  none, none, none, none,
+  none, none, none, none,
+  none, none, none, none,
+  none, none, dual, dual,
+
+  /* U+0670 */
+  transparent, right, right, right,
+  none, right, right, right,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+
+  /* U+0680 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  right, right, right, right,
+  right, right, right, right,
+
+  /* U+0690 */
+  right, right, right, right,
+  right, right, right, right,
+  right, right, dual, dual,
+  dual, dual, dual, dual,
+
+  /* U+06A0 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+
+  /* U+06B0 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+
+  /* U+06C0 */
+  right, dual, right, right,
+  right, right, right, right,
+  right, right, right, right,
+  dual, right, dual, right,
+
+  /* U+06D0 */
+  dual, dual, right, right,
+  none, right, none, transparent,
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+
+  /* U+06E0 */
+  transparent, transparent, transparent, transparent,
+  transparent, none, none, transparent,
+  transparent, none, transparent, transparent,
+  transparent, transparent, right, right,
+
+  /* U+06F0 */
+  none, none, none, none,
+  none, none, none, none,
+  none, none, dual, dual,
+  dual, none, none, dual
+};
+
+static const joining_class  arabic_supplement[] =
+{
+  /* U+0750 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, right, right, right,
+  dual, dual, dual, dual,
+
+  /* U+0760 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, right,
+  right, dual, none, none,
+
+  /* U+0770 */
+  none, none, none, none,
+  none, none, none, none,
+  none, none, none, none,
+  none, none, none, none
+};
+
+/*     Here a table of the joining classes for characters in the range
+ *     U+07C0 - U+07FF.
+ *
+ *     The following character also has a joining class:
+ *
+ *     U+200C  ZERO WIDTH NON-JOINER  -> causing
+ *
+ *     All other characters are given the joining class `none'.
+ */
+static const joining_class nko[] =
+{
+  /* U+07C0 */
+  none, none, none, none,
+  none, none, none, none,
+  none, none, dual, dual,
+  dual, dual, dual, dual,
+
+  /* U+07D0 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+
+  /* U+07E0 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  dual, dual, dual, transparent,
+  transparent, transparent, transparent, transparent,
+
+  /* U+07F0 */
+  transparent, transparent, transparent, transparent,
+  none, none, none, none,
+  none, none, causing, none,
+  none, none, none, none,
+};
+
+#if 0
+struct cgc_
+{
+  FT_UShort  char_code;
+  FT_UShort  glyph_index;
+  FT_UShort  class;
+};
+
+typedef struct cgc_  cgc;
+
+int  compare_cgc (const void*  a,
+                 const void*  b)
+{
+  return (((cgc*)a)->glyph_index > ((cgc*)b)->glyph_index) ?
+    1 : ((((cgc*)a)->glyph_index == ((cgc*)b)->glyph_index) ?
+         0 : -1);
+}
+
+
+TT_Error  Build_Arabic_Glyph_Properties (TT_CharMap        char_map,
+                                        TT_UShort         max_glyphs,
+                                        TTO_GDEFHeader**  gdef)
+{
+  TT_UShort  i, j, num_glyphs;
+
+  cgc        Arabic[0x0700 - 0x0620];
+
+  TT_UShort  glyph_indices[0x700 - 0x0620];
+  TT_UShort  classes[0x700 - 0x0620];
+
+  if (!gdef)
+    return TT_Err_Invalid_Argument;
+
+  j = 0;
+
+  for (i = 0x0620; i < 0x0700; i++)
+    {
+      Arabic[j].char_code   = i;
+      Arabic[j].class       = (arabic[i - 0x0620] == transparent) ?
+       MARK_GLYPH : SIMPLE_GLYPH;
+      Arabic[j].glyph_index = TT_Char_Index (char_map, i);
+      if (Arabic[j].glyph_index)
+       j++;
+    }
+  num_glyphs = j;
+
+  if (!num_glyphs)
+    {
+      /* no Arabic font */
+      *gdef = NULL;
+      return TT_Err_Ok;
+    }
+
+  /* sort it */
+
+  qsort (Arabic, num_glyphs, sizeof (cgc), compare_cgc);
+
+  /* write it to the arrays, removing duplicates */
+
+  glyph_indices[0] = Arabic[0].glyph_index;
+  classes[0]       = Arabic[0].class;
+
+  j = 1;
+
+  for (i = 1; i < num_glyphs; i++)
+    {
+      glyph_indices[j] = Arabic[i].glyph_index;
+      classes[j]       = Arabic[i].class;
+
+      if (glyph_indices[j - 1] != glyph_indices[j])
+       j++;
+    }
+  num_glyphs = j;
+
+  TT_GDEF_Build_ClassDefinition (*gdef, max_glyphs, num_glyphs,
+                                glyph_indices, classes);
+
+  return TT_Err_Ok;
+}
+#endif
+
+/* The joining rules as given in the Unicode 2.0 book (characters are
+ * here specified as appearing in the byte stream, i.e. *not* in
+ * visual order).  Joining classes are given in angle brackets, glyph
+ * forms in square brackets.  Glyphs affected by a specific rule are
+ * enclosed with vertical bars.
+ *
+ * Note: The description of the joining algorithm in the book is
+ *       severely broken.  You can get a corrected version from
+ *       www.unicode.org (as of 29-Jun-1999, this hasn't appeared).
+ *
+ *   R1: <anything1> <transparent> <anything2>
+ *
+ *         apply joining rules for
+ *           <anything1> <anything2> -> [shape1] [shape2]
+ *
+ *       -> [shape1] [isolated] [shape2]
+ *
+ *   R2: <causing|left|dual> |<right>|
+ *
+ *       -> [final]
+ *
+ *   R3: |<left>| <causing|right|dual>
+ *
+ *       -> [initial]
+ *
+ *   R4: <causing|left|dual> |<dual>| <causing|right|dual>
+ *
+ *       -> [medial]
+ *
+ *   R5: <causing|left|dual> |<dual>| <!(causing|right|dual)>
+ *
+ *       -> [final]
+ *
+ *   R6: <!(causing|left|dual)> |<dual>| <causing|right|dual>
+ *
+ *       -> [initial]
+ *
+ *   R7: If R1-R6 fail:
+ *
+ *       <anything> -> [isolated]
+ */
+
+/* `direction' can be -1, 0, or 1 to indicate the last non-transparent
+ * glyph, the current glyph, and the next non-transparent glyph,
+ * respectively.
+ */
+
+static joining_class  Get_Joining_Class (gunichar*   string,
+                                        int         pos,
+                                        int         length,
+                                        int         direction,
+                                        gboolean    reverse)
+{
+  joining_class  j;
+
+
+  while (1)
+    {
+      if (pos == 0 && direction < 0)
+       return none;
+
+      pos += direction;
+
+      if (pos >= length)
+       return none;
+
+      if (string[pos] >= 0x0620 &&
+         string[pos] < 0x0700)
+       j = arabic[string[pos] - 0x0620];
+      else if (string[pos] >= 0x0750 &&
+         string[pos] < 0x0780)
+       j = arabic_supplement[string[pos] - 0x0750];
+      else if (string[pos] >= 0x07C0 &&
+         string[pos] < 0x0800)
+       j = nko[string[pos] - 0x07C0];
+      else if (string[pos] == 0x200D)
+       return causing;
+      else
+       return none;
+
+      if (!direction || j != transparent)
+        {
+         if (G_UNLIKELY (reverse))
+           return j == right ? left : j == left ? right : j;
+         else
+           return j;
+       }
+    }
+}
+
+
+FT_Error  Arabic_Assign_Properties (gunichar    *string,
+                                   gulong      *properties,
+                                   int          length,
+                                   gboolean     reverse)
+{
+  joining_class  previous, current, next;
+  int      i;
+
+  if (!string || !properties || length == 0)
+    return FT_Err_Invalid_Argument;
+
+  for (i = 0; i < length; i++)
+    {
+      previous = Get_Joining_Class (string, i, length, -1, reverse);
+      current  = Get_Joining_Class (string, i, length,  0, reverse);
+      next     = Get_Joining_Class (string, i, length,  1, reverse);
+
+      /* R1 */
+
+      if (current == transparent)
+       {
+         properties[i] |= isolated_p;
+         continue;
+       }
+
+      /* R2 */
+
+      if (previous == causing ||
+         previous == left    ||
+         previous == dual   )
+       if (current == right)
+         {
+           properties[i] |= reverse ? initial_p : final_p;
+           continue;
+         }
+
+      /* R3 */
+
+      if (current == left)
+       if (next == causing ||
+           next == right   ||
+           next == dual   )
+         {
+           properties[i] |= reverse ? final_p : initial_p;
+           continue;
+         }
+
+      /* R4 */
+
+      if (previous == causing ||
+         previous == left    ||
+         previous == dual   )
+       if (current == dual)
+         if (next == causing ||
+             next == right   ||
+             next == dual   )
+           {
+             properties[i] |= medial_p;
+             continue;
+           }
+
+      /* R5 */
+
+      if (previous == causing ||
+         previous == left    ||
+         previous == dual   )
+       if (current == dual)
+         if (!(next == causing ||
+               next == right   ||
+               next == dual   ))
+           {
+             properties[i] |= reverse ? initial_p : final_p;
+             continue;
+           }
+
+      /* R6 */
+
+      if (!(previous == causing ||
+           previous == left    ||
+           previous == dual   ))
+       if (current == dual)
+         if (next == causing ||
+             next == right   ||
+             next == dual   )
+           {
+             properties[i] |= reverse ? final_p : initial_p;
+             continue;
+           }
+
+      /* R7 */
+
+      properties[i] |= isolated_p;
+    }
+
+  return FT_Err_Ok;
+}
+
+
+/* End */
diff --git a/modules/arabic/arabic-ot.h b/modules/arabic/arabic-ot.h
new file mode 100755 (executable)
index 0000000..db9a9aa
--- /dev/null
@@ -0,0 +1,80 @@
+/* This file is taken from the FreeType (1) tree. It's been reindented
+ * to roughly match Pango guidelines (in anticipation of future changes),
+ * but not otherwise much altered.
+ */
+
+/****************************************************************************/
+/*                                                                          */
+/*  The FreeType project -- a free and portable quality TrueType renderer.  */
+/*                                                                          */
+/*  Copyright 1996-2000 by                                                  */
+/*  D. Turner, R.Wilhelm, and W. Lemberg                                    */
+/*                                                                          */
+/*  arabic -- An implementation of the contextual algorithm given in the    */
+/*  Unicode 2.0 book to assign the `isolated', `initial', `medial', and     */
+/*  `final' properties to an input string of character codes for the Arabic */
+/*  script.                                                                 */
+/*                                                                          */
+/*  This file is part of the FreeType project, and may only be used         */
+/*  modified and distributed under the terms of the FreeType project        */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute      */
+/*  this file you indicate that you have read the license and               */
+/*  understand and accept it fully.                                         */
+/*                                                                          */
+/* The file LICENSE.TXT can be found in the Pango distribution as           */
+/* pango/opentype/FT-license.txt                                            */
+/****************************************************************************/
+
+#include <pango/pango-ot.h>
+
+
+enum  joining_type_
+{
+  isolated = 1,       /* nominal        */
+  final    = 2,       /* right_joining  */
+  initial  = 4,       /* left_joining   */
+  medial   = 8        /* double_joining */
+};
+
+typedef enum joining_type_  joining_type;
+
+
+  /* A glyph's property value as needed by e.g. TT_GSUB_Apply_String()
+     specifies which features should *not* be applied                  */
+
+enum  arabic_glyph_property_
+{
+  isolated_p = final    | initial | medial,
+  final_p    = isolated | initial | medial,
+  initial_p  = isolated | final   | medial,
+  medial_p   = isolated | final   | initial
+};
+
+typedef enum arabic_glyph_property_  arabic_glyph_property;
+
+
+enum  joining_class_
+{
+  right,
+  left,               /* not used */
+  dual,
+  causing,
+  none,
+  transparent
+};
+
+typedef enum joining_class_  joining_class;
+
+
+FT_Error  Arabic_Assign_Properties (gunichar   *string,
+                                   gulong     *properties,
+                                   int         length,
+                                   gboolean    reverse);
+#if 0
+TT_Error  Build_Arabic_Glyph_Properties (TT_CharMap        char_map,
+                                        TT_UShort         max_glyphs,
+                                        TTO_GDEFHeader**  gdef );
+#endif
+
+
+/* End */
diff --git a/modules/basic/Makefile.am b/modules/basic/Makefile.am
new file mode 100755 (executable)
index 0000000..acd0c4d
--- /dev/null
@@ -0,0 +1,76 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_X
+INCLUDES += $(X_CFLAGS)
+if INCLUDE_BASIC_X
+noinst_LTLIBRARIES += libpango-basic-x.la
+else
+if DYNAMIC_BASIC_X
+module_LTLIBRARIES += pango-basic-x.la
+endif
+endif
+endif
+
+pango_basic_x_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_basic_x_la_LIBADD = $(pangoxlibs)
+pango_basic_x_la_SOURCES = basic-x.c
+libpango_basic_x_la_SOURCES = basic-x.c
+libpango_basic_x_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_x
+
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_BASIC_FC
+noinst_LTLIBRARIES += libpango-basic-fc.la
+else
+if DYNAMIC_BASIC_FC
+module_LTLIBRARIES += pango-basic-fc.la
+endif
+endif
+endif
+
+pango_basic_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_basic_fc_la_LIBADD = $(pangoft2libs)
+pango_basic_fc_la_SOURCES = basic-fc.c
+libpango_basic_fc_la_SOURCES = basic-fc.c
+libpango_basic_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_fc
+
+
+if HAVE_WIN32
+if INCLUDE_BASIC_WIN32
+noinst_LTLIBRARIES += libpango-basic-win32.la
+else
+if DYNAMIC_BASIC_WIN32
+module_LTLIBRARIES += pango-basic-win32.la
+endif
+endif
+endif
+
+pango_basic_win32_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_basic_win32_la_LIBADD = $(pangowin32libs) -lgdi32
+pango_basic_win32_la_SOURCES = basic-win32.c
+libpango_basic_win32_la_SOURCES = basic-win32.c
+libpango_basic_win32_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_win32
+
+if HAVE_CAIRO_ATSUI
+INCLUDES += $(ATSUI_CFLAGS) $(CAIRO_CFLAGS)
+if INCLUDE_BASIC_ATSUI
+noinst_LTLIBRARIES += libpango-basic-atsui.la
+else
+if DYNAMIC_BASIC_ATSUI
+module_LTLIBRARIES += pango-basic-atsui.la
+endif
+endif
+endif
+
+pango_basic_atsui_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS) -framework Carbon
+pango_basic_atsui_la_LIBADD = $(pangoatsuilibs)
+pango_basic_atsui_la_SOURCES = basic-atsui.c
+libpango_basic_atsui_la_SOURCES = basic-atsui.c
+libpango_basic_atsui_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_atsui
+
+EXTRA_DIST =           \
+       tables-big.i    \
+       tables-small.i
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/basic/Makefile.in b/modules/basic/Makefile.in
new file mode 100644 (file)
index 0000000..006cf05
--- /dev/null
@@ -0,0 +1,820 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_X_TRUE@am__append_1 = $(X_CFLAGS)
+@HAVE_X_TRUE@@INCLUDE_BASIC_X_TRUE@am__append_2 = libpango-basic-x.la
+@DYNAMIC_BASIC_X_TRUE@@HAVE_X_TRUE@@INCLUDE_BASIC_X_FALSE@am__append_3 = pango-basic-x.la
+@HAVE_FREETYPE_TRUE@am__append_4 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_BASIC_FC_TRUE@am__append_5 = libpango-basic-fc.la
+@DYNAMIC_BASIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_BASIC_FC_FALSE@am__append_6 = pango-basic-fc.la
+@HAVE_WIN32_TRUE@@INCLUDE_BASIC_WIN32_TRUE@am__append_7 = libpango-basic-win32.la
+@DYNAMIC_BASIC_WIN32_TRUE@@HAVE_WIN32_TRUE@@INCLUDE_BASIC_WIN32_FALSE@am__append_8 = pango-basic-win32.la
+@HAVE_CAIRO_ATSUI_TRUE@am__append_9 = $(ATSUI_CFLAGS) $(CAIRO_CFLAGS)
+@HAVE_CAIRO_ATSUI_TRUE@@INCLUDE_BASIC_ATSUI_TRUE@am__append_10 = libpango-basic-atsui.la
+@DYNAMIC_BASIC_ATSUI_TRUE@@HAVE_CAIRO_ATSUI_TRUE@@INCLUDE_BASIC_ATSUI_FALSE@am__append_11 = pango-basic-atsui.la
+subdir = modules/basic
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_basic_atsui_la_LIBADD =
+am_libpango_basic_atsui_la_OBJECTS =  \
+       libpango_basic_atsui_la-basic-atsui.lo
+libpango_basic_atsui_la_OBJECTS =  \
+       $(am_libpango_basic_atsui_la_OBJECTS)
+@HAVE_CAIRO_ATSUI_TRUE@@INCLUDE_BASIC_ATSUI_TRUE@am_libpango_basic_atsui_la_rpath =
+libpango_basic_fc_la_LIBADD =
+am_libpango_basic_fc_la_OBJECTS = libpango_basic_fc_la-basic-fc.lo
+libpango_basic_fc_la_OBJECTS = $(am_libpango_basic_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_BASIC_FC_TRUE@am_libpango_basic_fc_la_rpath =
+libpango_basic_win32_la_LIBADD =
+am_libpango_basic_win32_la_OBJECTS =  \
+       libpango_basic_win32_la-basic-win32.lo
+libpango_basic_win32_la_OBJECTS =  \
+       $(am_libpango_basic_win32_la_OBJECTS)
+@HAVE_WIN32_TRUE@@INCLUDE_BASIC_WIN32_TRUE@am_libpango_basic_win32_la_rpath =
+libpango_basic_x_la_LIBADD =
+am_libpango_basic_x_la_OBJECTS = libpango_basic_x_la-basic-x.lo
+libpango_basic_x_la_OBJECTS = $(am_libpango_basic_x_la_OBJECTS)
+@HAVE_X_TRUE@@INCLUDE_BASIC_X_TRUE@am_libpango_basic_x_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+pango_basic_atsui_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am_pango_basic_atsui_la_OBJECTS = basic-atsui.lo
+pango_basic_atsui_la_OBJECTS = $(am_pango_basic_atsui_la_OBJECTS)
+@DYNAMIC_BASIC_ATSUI_TRUE@@HAVE_CAIRO_ATSUI_TRUE@@INCLUDE_BASIC_ATSUI_FALSE@am_pango_basic_atsui_la_rpath = -rpath \
+@DYNAMIC_BASIC_ATSUI_TRUE@@HAVE_CAIRO_ATSUI_TRUE@@INCLUDE_BASIC_ATSUI_FALSE@   $(moduledir)
+am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_basic_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_4)
+am_pango_basic_fc_la_OBJECTS = basic-fc.lo
+pango_basic_fc_la_OBJECTS = $(am_pango_basic_fc_la_OBJECTS)
+@DYNAMIC_BASIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_BASIC_FC_FALSE@am_pango_basic_fc_la_rpath = -rpath \
+@DYNAMIC_BASIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_BASIC_FC_FALSE@    $(moduledir)
+am__DEPENDENCIES_5 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+pango_basic_win32_la_DEPENDENCIES = $(am__DEPENDENCIES_5)
+am_pango_basic_win32_la_OBJECTS = basic-win32.lo
+pango_basic_win32_la_OBJECTS = $(am_pango_basic_win32_la_OBJECTS)
+@DYNAMIC_BASIC_WIN32_TRUE@@HAVE_WIN32_TRUE@@INCLUDE_BASIC_WIN32_FALSE@am_pango_basic_win32_la_rpath = -rpath \
+@DYNAMIC_BASIC_WIN32_TRUE@@HAVE_WIN32_TRUE@@INCLUDE_BASIC_WIN32_FALSE@ $(moduledir)
+am__DEPENDENCIES_6 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_basic_x_la_DEPENDENCIES = $(am__DEPENDENCIES_6)
+am_pango_basic_x_la_OBJECTS = basic-x.lo
+pango_basic_x_la_OBJECTS = $(am_pango_basic_x_la_OBJECTS)
+@DYNAMIC_BASIC_X_TRUE@@HAVE_X_TRUE@@INCLUDE_BASIC_X_FALSE@am_pango_basic_x_la_rpath = -rpath \
+@DYNAMIC_BASIC_X_TRUE@@HAVE_X_TRUE@@INCLUDE_BASIC_X_FALSE@     $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_basic_atsui_la_SOURCES) \
+       $(libpango_basic_fc_la_SOURCES) \
+       $(libpango_basic_win32_la_SOURCES) \
+       $(libpango_basic_x_la_SOURCES) $(pango_basic_atsui_la_SOURCES) \
+       $(pango_basic_fc_la_SOURCES) $(pango_basic_win32_la_SOURCES) \
+       $(pango_basic_x_la_SOURCES)
+DIST_SOURCES = $(libpango_basic_atsui_la_SOURCES) \
+       $(libpango_basic_fc_la_SOURCES) \
+       $(libpango_basic_win32_la_SOURCES) \
+       $(libpango_basic_x_la_SOURCES) $(pango_basic_atsui_la_SOURCES) \
+       $(pango_basic_fc_la_SOURCES) $(pango_basic_win32_la_SOURCES) \
+       $(pango_basic_x_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1) $(am__append_4) $(am__append_9)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3) $(am__append_6) $(am__append_8) \
+       $(am__append_11)
+noinst_LTLIBRARIES = $(am__append_2) $(am__append_5) $(am__append_7) \
+       $(am__append_10)
+pango_basic_x_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_basic_x_la_LIBADD = $(pangoxlibs)
+pango_basic_x_la_SOURCES = basic-x.c
+libpango_basic_x_la_SOURCES = basic-x.c
+libpango_basic_x_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_x
+pango_basic_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_basic_fc_la_LIBADD = $(pangoft2libs)
+pango_basic_fc_la_SOURCES = basic-fc.c
+libpango_basic_fc_la_SOURCES = basic-fc.c
+libpango_basic_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_fc
+pango_basic_win32_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_basic_win32_la_LIBADD = $(pangowin32libs) -lgdi32
+pango_basic_win32_la_SOURCES = basic-win32.c
+libpango_basic_win32_la_SOURCES = basic-win32.c
+libpango_basic_win32_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_win32
+pango_basic_atsui_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS) -framework Carbon
+pango_basic_atsui_la_LIBADD = $(pangoatsuilibs)
+pango_basic_atsui_la_SOURCES = basic-atsui.c
+libpango_basic_atsui_la_SOURCES = basic-atsui.c
+libpango_basic_atsui_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_basic_atsui
+EXTRA_DIST = \
+       tables-big.i    \
+       tables-small.i
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/basic/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/basic/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-basic-atsui.la: $(libpango_basic_atsui_la_OBJECTS) $(libpango_basic_atsui_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_basic_atsui_la_rpath) $(libpango_basic_atsui_la_LDFLAGS) $(libpango_basic_atsui_la_OBJECTS) $(libpango_basic_atsui_la_LIBADD) $(LIBS)
+libpango-basic-fc.la: $(libpango_basic_fc_la_OBJECTS) $(libpango_basic_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_basic_fc_la_rpath) $(libpango_basic_fc_la_LDFLAGS) $(libpango_basic_fc_la_OBJECTS) $(libpango_basic_fc_la_LIBADD) $(LIBS)
+libpango-basic-win32.la: $(libpango_basic_win32_la_OBJECTS) $(libpango_basic_win32_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_basic_win32_la_rpath) $(libpango_basic_win32_la_LDFLAGS) $(libpango_basic_win32_la_OBJECTS) $(libpango_basic_win32_la_LIBADD) $(LIBS)
+libpango-basic-x.la: $(libpango_basic_x_la_OBJECTS) $(libpango_basic_x_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_basic_x_la_rpath) $(libpango_basic_x_la_LDFLAGS) $(libpango_basic_x_la_OBJECTS) $(libpango_basic_x_la_LIBADD) $(LIBS)
+pango-basic-atsui.la: $(pango_basic_atsui_la_OBJECTS) $(pango_basic_atsui_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_basic_atsui_la_rpath) $(pango_basic_atsui_la_LDFLAGS) $(pango_basic_atsui_la_OBJECTS) $(pango_basic_atsui_la_LIBADD) $(LIBS)
+pango-basic-fc.la: $(pango_basic_fc_la_OBJECTS) $(pango_basic_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_basic_fc_la_rpath) $(pango_basic_fc_la_LDFLAGS) $(pango_basic_fc_la_OBJECTS) $(pango_basic_fc_la_LIBADD) $(LIBS)
+pango-basic-win32.la: $(pango_basic_win32_la_OBJECTS) $(pango_basic_win32_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_basic_win32_la_rpath) $(pango_basic_win32_la_LDFLAGS) $(pango_basic_win32_la_OBJECTS) $(pango_basic_win32_la_LIBADD) $(LIBS)
+pango-basic-x.la: $(pango_basic_x_la_OBJECTS) $(pango_basic_x_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_basic_x_la_rpath) $(pango_basic_x_la_LDFLAGS) $(pango_basic_x_la_OBJECTS) $(pango_basic_x_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic-atsui.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic-win32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic-x.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_basic_atsui_la-basic-atsui.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_basic_fc_la-basic-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_basic_win32_la-basic-win32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_basic_x_la-basic-x.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_basic_atsui_la-basic-atsui.lo: basic-atsui.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_atsui_la_CFLAGS) $(CFLAGS) -MT libpango_basic_atsui_la-basic-atsui.lo -MD -MP -MF "$(DEPDIR)/libpango_basic_atsui_la-basic-atsui.Tpo" -c -o libpango_basic_atsui_la-basic-atsui.lo `test -f 'basic-atsui.c' || echo '$(srcdir)/'`basic-atsui.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_basic_atsui_la-basic-atsui.Tpo" "$(DEPDIR)/libpango_basic_atsui_la-basic-atsui.Plo"; else rm -f "$(DEPDIR)/libpango_basic_atsui_la-basic-atsui.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='basic-atsui.c' object='libpango_basic_atsui_la-basic-atsui.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_atsui_la_CFLAGS) $(CFLAGS) -c -o libpango_basic_atsui_la-basic-atsui.lo `test -f 'basic-atsui.c' || echo '$(srcdir)/'`basic-atsui.c
+
+libpango_basic_fc_la-basic-fc.lo: basic-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_basic_fc_la-basic-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_basic_fc_la-basic-fc.Tpo" -c -o libpango_basic_fc_la-basic-fc.lo `test -f 'basic-fc.c' || echo '$(srcdir)/'`basic-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_basic_fc_la-basic-fc.Tpo" "$(DEPDIR)/libpango_basic_fc_la-basic-fc.Plo"; else rm -f "$(DEPDIR)/libpango_basic_fc_la-basic-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='basic-fc.c' object='libpango_basic_fc_la-basic-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_basic_fc_la-basic-fc.lo `test -f 'basic-fc.c' || echo '$(srcdir)/'`basic-fc.c
+
+libpango_basic_win32_la-basic-win32.lo: basic-win32.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_win32_la_CFLAGS) $(CFLAGS) -MT libpango_basic_win32_la-basic-win32.lo -MD -MP -MF "$(DEPDIR)/libpango_basic_win32_la-basic-win32.Tpo" -c -o libpango_basic_win32_la-basic-win32.lo `test -f 'basic-win32.c' || echo '$(srcdir)/'`basic-win32.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_basic_win32_la-basic-win32.Tpo" "$(DEPDIR)/libpango_basic_win32_la-basic-win32.Plo"; else rm -f "$(DEPDIR)/libpango_basic_win32_la-basic-win32.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='basic-win32.c' object='libpango_basic_win32_la-basic-win32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_win32_la_CFLAGS) $(CFLAGS) -c -o libpango_basic_win32_la-basic-win32.lo `test -f 'basic-win32.c' || echo '$(srcdir)/'`basic-win32.c
+
+libpango_basic_x_la-basic-x.lo: basic-x.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_x_la_CFLAGS) $(CFLAGS) -MT libpango_basic_x_la-basic-x.lo -MD -MP -MF "$(DEPDIR)/libpango_basic_x_la-basic-x.Tpo" -c -o libpango_basic_x_la-basic-x.lo `test -f 'basic-x.c' || echo '$(srcdir)/'`basic-x.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_basic_x_la-basic-x.Tpo" "$(DEPDIR)/libpango_basic_x_la-basic-x.Plo"; else rm -f "$(DEPDIR)/libpango_basic_x_la-basic-x.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='basic-x.c' object='libpango_basic_x_la-basic-x.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_basic_x_la_CFLAGS) $(CFLAGS) -c -o libpango_basic_x_la-basic-x.lo `test -f 'basic-x.c' || echo '$(srcdir)/'`basic-x.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/basic/basic-atsui.c b/modules/basic/basic-atsui.c
new file mode 100755 (executable)
index 0000000..a3df773
--- /dev/null
@@ -0,0 +1,208 @@
+/* Pango
+ * basic-atsui.c
+ *
+ * Copyright (C) 2005 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <glib.h>
+#include <string.h>
+#include <Carbon/Carbon.h>
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pango-fontmap.h"
+#include "pangoatsui.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      BasicEngineATSUI;
+typedef PangoEngineShapeClass BasicEngineATSUIClass ;
+
+#define SCRIPT_ENGINE_NAME "BasicScriptEngineATSUI"
+#define RENDER_TYPE PANGO_RENDER_TYPE_ATSUI
+
+static PangoEngineScriptInfo basic_scripts[] = {
+  { PANGO_SCRIPT_COMMON,   "" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    basic_scripts, G_N_ELEMENTS(basic_scripts)
+  }
+};
+
+static void
+set_glyph (PangoFont        *font,
+          PangoGlyphString *glyphs,
+          int               i,
+          int               offset,
+          PangoGlyph        glyph)
+{
+  PangoRectangle logical_rect;
+
+  glyphs->glyphs[i].glyph = G_UNLIKELY (glyph == kATSDeletedGlyphcode) ?
+                           PANGO_GLYPH_EMPTY : glyph;
+
+  glyphs->glyphs[i].geometry.x_offset = 0;
+  glyphs->glyphs[i].geometry.y_offset = 0;
+
+  glyphs->log_clusters[i] = offset;
+  pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
+  glyphs->glyphs[i].geometry.width = logical_rect.width;
+}
+
+static void
+basic_engine_shape (PangoEngineShape    *engine,
+                   PangoFont           *font,
+                   const char          *text,
+                   gint                 length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString    *glyphs)
+{
+  gunichar2 *utf16;
+  long n16;
+  ATSUTextLayout text_layout;
+  ATSLayoutRecord *layout_records;
+  OSStatus err;
+  ItemCount glyph_count;
+  int i;
+  const char *p;
+  PangoATSUIFont *afont = PANGO_ATSUI_FONT (font);
+  ATSUStyle style;
+  CGFontRef fontID;
+  ATSUAttributeTag styleTags[] = { kATSUFontTag };
+  ATSUAttributeValuePtr styleValues[] = { &fontID };
+  ByteCount styleSizes[] = { sizeof (CGFontRef) };
+
+  utf16 = g_utf8_to_utf16 (text, length, NULL, &n16, NULL);
+
+  err = ATSUCreateTextLayout (&text_layout);
+  err = ATSUSetTextPointerLocation (text_layout, utf16, 0, n16, n16);
+
+  err = ATSUCreateStyle(&style);
+  fontID = pango_atsui_font_get_cgfont (afont);
+
+  err = ATSUSetAttributes(style,
+                         sizeof(styleTags) / sizeof(styleTags[0]),
+                         styleTags, styleSizes, styleValues);
+
+  err = ATSUSetRunStyle(text_layout,
+                       style, kATSUFromTextBeginning, kATSUToTextEnd);
+
+  err = ATSUDirectGetLayoutDataArrayPtrFromTextLayout (text_layout, 0,
+                                                      kATSUDirectDataLayoutRecordATSLayoutRecordCurrent,
+                                                      (void *)&layout_records,
+                                                      &glyph_count);
+
+  p = text;
+  pango_glyph_string_set_size (glyphs, glyph_count - 1);
+
+  for (i = 0; i < glyph_count - 1; i++)
+    {
+      gunichar wc;
+      gunichar mirrored_ch;
+
+      wc = g_utf8_get_char (p);
+
+      if (analysis->level % 2)
+       if (pango_get_mirror_char (wc, &mirrored_ch))
+         wc = mirrored_ch;
+
+      if (wc == 0xa0)  /* non-break-space */
+       wc = 0x20;
+
+      if (pango_is_zero_width (wc))
+       {
+         set_glyph (font, glyphs, i, p - text, PANGO_GLYPH_EMPTY);
+       }
+      else
+       {
+         set_glyph (font, glyphs, i, p - text, layout_records[i].glyphID);
+
+         if (g_unichar_type (wc) == G_UNICODE_NON_SPACING_MARK)
+           {
+             if (i > 0)
+               {
+                 PangoRectangle logical_rect, ink_rect;
+
+                 glyphs->glyphs[i].geometry.width = MAX (glyphs->glyphs[i-1].geometry.width,
+                                                         glyphs->glyphs[i].geometry.width);
+                 glyphs->glyphs[i-1].geometry.width = 0;
+                 glyphs->log_clusters[i] = glyphs->log_clusters[i-1];
+
+                 /* Some heuristics to try to guess how overstrike glyphs are
+                  * done and compensate
+                  */
+                 pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, &ink_rect, &logical_rect);
+                 if (logical_rect.width == 0 && ink_rect.x == 0)
+                   glyphs->glyphs[i].geometry.x_offset = (glyphs->glyphs[i].geometry.width - ink_rect.width) / 2;
+               }
+           }
+       }
+
+      p = g_utf8_next_char (p);
+    }
+
+  ATSUDirectReleaseLayoutDataArrayPtr (NULL, kATSUDirectDataLayoutRecordATSLayoutRecordCurrent,
+                                      (void *)&layout_records);
+
+  ATSUDisposeStyle (style);
+  ATSUDisposeTextLayout (text_layout);
+
+  g_free (utf16);
+}
+
+static void
+basic_engine_atsui_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = basic_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (BasicEngineATSUI, basic_engine_atsui,
+                               basic_engine_atsui_class_init, NULL);
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  basic_engine_atsui_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (basic_engine_atsui_type, NULL);
+  else
+    return NULL;
+}
+
diff --git a/modules/basic/basic-fc.c b/modules/basic/basic-fc.c
new file mode 100755 (executable)
index 0000000..6e0d2ef
--- /dev/null
@@ -0,0 +1,255 @@
+/* Pango
+ * basic-fc.c: Basic shaper for FreeType-based backends
+ *
+ * Copyright (C) 2000, 2007 Red Hat Software
+ * Authors:
+ *   Owen Taylor <otaylor@redhat.com>
+ *   Behdad Esfahbod <behdad@behdad.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include <glib/gprintf.h>
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+#include "pango-ot.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      BasicEngineFc;
+typedef PangoEngineShapeClass BasicEngineFcClass;
+
+#define SCRIPT_ENGINE_NAME "BasicScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+static PangoEngineScriptInfo basic_scripts[] = {
+  /* Listed in OpenType "Standard scripts" standard */
+  { PANGO_SCRIPT_LATIN,    "*" },
+  { PANGO_SCRIPT_CYRILLIC, "*" },
+  { PANGO_SCRIPT_GREEK,    "*" },
+  { PANGO_SCRIPT_ARMENIAN, "*" },
+  { PANGO_SCRIPT_GEORGIAN, "*" },
+  { PANGO_SCRIPT_RUNIC,    "*" },
+  { PANGO_SCRIPT_OGHAM,    "*" },
+
+  /* The following are simple and can be shaped easily too */
+
+  { PANGO_SCRIPT_BOPOMOFO, "*" },
+  { PANGO_SCRIPT_CHEROKEE, "*" },
+  { PANGO_SCRIPT_COPTIC,   "*" },
+  { PANGO_SCRIPT_DESERET,  "*" },
+  { PANGO_SCRIPT_ETHIOPIC, "*" },
+  { PANGO_SCRIPT_GOTHIC,   "*" },
+  { PANGO_SCRIPT_HAN,      "*" },
+  { PANGO_SCRIPT_HIRAGANA, "*" },
+  { PANGO_SCRIPT_KATAKANA, "*" },
+  { PANGO_SCRIPT_OLD_ITALIC, "*" },
+  { PANGO_SCRIPT_CANADIAN_ABORIGINAL, "*" },
+  { PANGO_SCRIPT_YI,       "*" },
+
+  /* Unicode-4.0 additions */
+  { PANGO_SCRIPT_BRAILLE,  "*" },
+  { PANGO_SCRIPT_CYPRIOT,  "*" },
+  { PANGO_SCRIPT_LIMBU,    "*" },
+  { PANGO_SCRIPT_OSMANYA,  "*" },
+  { PANGO_SCRIPT_SHAVIAN,  "*" },
+  { PANGO_SCRIPT_LINEAR_B, "*" },
+  { PANGO_SCRIPT_UGARITIC, "*" },
+
+  /* Unicode-4.1 additions */
+  { PANGO_SCRIPT_GLAGOLITIC, "*" },
+
+  /* Unicode-5.0 additions */
+  { PANGO_SCRIPT_CUNEIFORM,  "*" },
+  { PANGO_SCRIPT_PHOENICIAN, "*" },
+
+  /* In fact any script we don't know how to shape can go here */
+  { PANGO_SCRIPT_COMMON,   "" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    basic_scripts, G_N_ELEMENTS(basic_scripts)
+  }
+};
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"liga", PANGO_OT_ALL_GLYPHS},
+  {"clig", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap vertical_gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"vert", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap vertical_gpos_features[] =
+{
+  {"vkrn", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+basic_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                   PangoFont        *font,
+                   const char       *text,
+                   gint              length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  glong n_chars;
+  const char *p;
+  int cluster = 0;
+  int i;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+
+  n_chars = g_utf8_strlen (text, length);
+  pango_glyph_string_set_size (glyphs, n_chars);
+
+  p = text;
+  for (i=0; i < n_chars; i++)
+    {
+      gunichar wc;
+      PangoGlyph glyph;
+
+      wc = g_utf8_get_char (p);
+
+      if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+       cluster = p - text;
+
+      if (pango_is_zero_width (wc))
+        glyph = PANGO_GLYPH_EMPTY;
+      else
+        {
+         gunichar c = wc;
+
+         if (analysis->level % 2)
+           g_unichar_get_mirror_char (c, &c);
+
+         glyph = pango_fc_font_get_glyph (fc_font, c);
+       }
+
+      if (!glyph)
+       glyph = PANGO_GET_UNKNOWN_GLYPH (wc);
+
+      pango_ot_buffer_add_glyph (buffer, glyph, 0, cluster);
+
+      p = g_utf8_next_char (p);
+    }
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  if (PANGO_GRAVITY_IS_VERTICAL (analysis->gravity))
+    {
+      desc.n_static_gsub_features = G_N_ELEMENTS (vertical_gsub_features);
+      desc.static_gsub_features = vertical_gsub_features;
+      desc.n_static_gpos_features = G_N_ELEMENTS (vertical_gpos_features);
+      desc.static_gpos_features = vertical_gpos_features;
+    }
+  else
+    {
+      desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+      desc.static_gsub_features = gsub_features;
+      desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+      desc.static_gpos_features = gpos_features;
+    }
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+  pango_ot_buffer_output (buffer, glyphs);
+
+  pango_ot_buffer_destroy (buffer);
+
+  pango_fc_font_unlock_face (fc_font);
+}
+
+static void
+basic_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = basic_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (BasicEngineFc, basic_engine_fc,
+                               basic_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  basic_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (basic_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/basic/basic-win32.c b/modules/basic/basic-win32.c
new file mode 100755 (executable)
index 0000000..ecb139e
--- /dev/null
@@ -0,0 +1,946 @@
+/* Pango
+ * basic-win32.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2001 Alexander Larsson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#define BASIC_WIN32_DEBUGGING
+
+#include <math.h>
+#include <stdlib.h>
+
+#include <glib.h>
+
+#include "pangowin32.h"
+#include "pango-engine.h"
+#include "pango-utils.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      BasicEngineWin32;
+typedef PangoEngineShapeClass BasicEngineWin32Class ;
+
+#define SCRIPT_ENGINE_NAME "BasicScriptEngineWin32"
+
+static gboolean pango_win32_debug = FALSE;
+
+#include <usp10.h>
+
+static gboolean have_uniscribe = FALSE;
+
+static HDC hdc;
+
+typedef HRESULT (WINAPI *pScriptGetProperties) (const SCRIPT_PROPERTIES ***,
+                                               int *);
+
+typedef HRESULT (WINAPI *pScriptItemize) (const WCHAR *,
+                                         int,
+                                         int,
+                                         const SCRIPT_CONTROL *,
+                                         const SCRIPT_STATE *,
+                                         SCRIPT_ITEM *,
+                                         int *);
+
+typedef HRESULT (WINAPI *pScriptShape) (HDC,
+                                       SCRIPT_CACHE *,
+                                       const WCHAR *,
+                                       int,
+                                       int,
+                                       SCRIPT_ANALYSIS *,
+                                       WORD *,
+                                       WORD *,
+                                       SCRIPT_VISATTR *,
+                                       int *);
+
+typedef HRESULT (WINAPI *pScriptPlace) (HDC,
+                                       SCRIPT_CACHE *,
+                                       const WORD *,
+                                       int,
+                                       const SCRIPT_VISATTR *,
+                                       SCRIPT_ANALYSIS *,
+                                       int *,
+                                       GOFFSET *,
+                                       ABC *);
+
+typedef HRESULT (WINAPI *pScriptFreeCache) (SCRIPT_CACHE *);
+
+typedef HRESULT (WINAPI *pScriptIsComplex) (WCHAR *,
+                                           int,
+                                           DWORD);
+
+static pScriptGetProperties script_get_properties;
+static pScriptItemize script_itemize;
+static pScriptShape script_shape;
+static pScriptPlace script_place;
+static pScriptFreeCache script_free_cache;
+static pScriptIsComplex script_is_complex;
+
+#ifdef BASIC_WIN32_DEBUGGING
+static const SCRIPT_PROPERTIES **scripts;
+static int nscripts;
+#endif
+
+static PangoEngineScriptInfo uniscribe_scripts[] = {
+  /* We claim to cover everything ;-) */
+  { PANGO_SCRIPT_COMMON,  "" },
+};
+
+static PangoEngineScriptInfo basic_scripts[] = {
+  /* Those characters that can be rendered legibly without Uniscribe.
+   * I am not certain this list is correct.
+   */
+  { PANGO_SCRIPT_ARMENIAN, "*" },
+  { PANGO_SCRIPT_BOPOMOFO, "*" },
+  { PANGO_SCRIPT_CHEROKEE, "*" },
+  { PANGO_SCRIPT_COPTIC,   "*" },
+  { PANGO_SCRIPT_CYRILLIC, "*" },
+  { PANGO_SCRIPT_DESERET,  "*" },
+  { PANGO_SCRIPT_ETHIOPIC, "*" },
+  { PANGO_SCRIPT_GEORGIAN, "*" },
+  { PANGO_SCRIPT_GOTHIC,   "*" },
+  { PANGO_SCRIPT_GREEK,    "*" },
+  { PANGO_SCRIPT_HAN,      "*" },
+  { PANGO_SCRIPT_HANGUL,   "*" },
+  { PANGO_SCRIPT_HIRAGANA, "*" },
+  { PANGO_SCRIPT_KATAKANA, "*" },
+  { PANGO_SCRIPT_LATIN,    "*" },
+  { PANGO_SCRIPT_OGHAM,    "*" },
+  { PANGO_SCRIPT_OLD_ITALIC, "*" },
+  { PANGO_SCRIPT_RUNIC,     "*" },
+  { PANGO_SCRIPT_THAI,      "*" },
+  { PANGO_SCRIPT_CANADIAN_ABORIGINAL, "*" },
+  { PANGO_SCRIPT_YI,       "*" },
+  { PANGO_SCRIPT_BRAILLE,  "*" },
+  { PANGO_SCRIPT_CYPRIOT,  "*" },
+  { PANGO_SCRIPT_LIMBU,    "*" },
+  { PANGO_SCRIPT_OSMANYA,  "*" },
+  { PANGO_SCRIPT_SHAVIAN,  "*" },
+  { PANGO_SCRIPT_LINEAR_B, "*" },
+  { PANGO_SCRIPT_UGARITIC, "*" },
+
+  /* Claim to handle everything as a fallback */
+  { PANGO_SCRIPT_COMMON,   "" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    PANGO_RENDER_TYPE_WIN32,
+    NULL, 0
+  }
+};
+
+static PangoGlyph
+find_char (PangoFont *font,
+          gunichar   wc)
+{
+  return pango_win32_font_get_glyph_index (font, wc);
+}
+
+static void
+set_glyph (PangoFont        *font,
+          PangoGlyphString *glyphs,
+          int               i,
+          int               offset,
+          PangoGlyph        glyph)
+{
+  PangoRectangle logical_rect;
+
+  glyphs->glyphs[i].glyph = glyph;
+
+  glyphs->glyphs[i].geometry.x_offset = 0;
+  glyphs->glyphs[i].geometry.y_offset = 0;
+
+  glyphs->log_clusters[i] = offset;
+
+  pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
+  glyphs->glyphs[i].geometry.width = logical_rect.width;
+}
+
+static void
+swap_range (PangoGlyphString *glyphs,
+           int               start,
+           int               end)
+{
+  int i, j;
+
+  for (i = start, j = end - 1; i < j; i++, j--)
+    {
+      PangoGlyphInfo glyph_info;
+      gint log_cluster;
+
+      glyph_info = glyphs->glyphs[i];
+      glyphs->glyphs[i] = glyphs->glyphs[j];
+      glyphs->glyphs[j] = glyph_info;
+
+      log_cluster = glyphs->log_clusters[i];
+      glyphs->log_clusters[i] = glyphs->log_clusters[j];
+      glyphs->log_clusters[j] = log_cluster;
+    }
+}
+
+#ifdef BASIC_WIN32_DEBUGGING
+
+static char *
+lang_name (int lang)
+{
+  LCID lcid = MAKELCID (lang, SORT_DEFAULT);
+  static char retval[10];
+
+  if (!GetLocaleInfo (lcid, LOCALE_SISO639LANGNAME, retval, G_N_ELEMENTS (retval)))
+    sprintf (retval, "%#02x", lang);
+
+  return retval;
+}
+
+#endif /* BASIC_WIN32_DEBUGGING */
+
+static WORD
+make_langid (PangoLanguage *lang)
+{
+#define CASE(t,p,s) if (pango_language_matches (lang, t)) return MAKELANGID (LANG_##p, SUBLANG_##p##_##s)
+#define CASEN(t,p) if (pango_language_matches (lang, t)) return MAKELANGID (LANG_##p, SUBLANG_NEUTRAL)
+
+  /* Languages that most probably don't affect Uniscribe have been
+   * left out. Uniscribe is documented to use
+   * SCRIPT_CONTROL::uDefaultLanguage only to select digit shapes, so
+   * just leave languages with own digits.
+   */
+
+  CASEN ("ar", ARABIC);
+  CASEN ("hy", ARMENIAN);
+  CASEN ("as", ASSAMESE);
+  CASEN ("az", AZERI);
+  CASEN ("bn", BENGALI);
+  CASE ("zh-tw", CHINESE, TRADITIONAL);
+  CASE ("zh-cn", CHINESE, SIMPLIFIED);
+  CASE ("zh-hk", CHINESE, HONGKONG);
+  CASE ("zh-sg", CHINESE, SINGAPORE);
+  CASE ("zh-mo", CHINESE, MACAU);
+  CASEN ("dib", DIVEHI);
+  CASEN ("fa", FARSI);
+  CASEN ("ka", GEORGIAN);
+  CASEN ("gu", GUJARATI);
+  CASEN ("he", HEBREW);
+  CASEN ("hi", HINDI);
+  CASEN ("ja", JAPANESE);
+  CASEN ("kn", KANNADA);
+  CASE ("ks-in", KASHMIRI, INDIA);
+  CASEN ("ks", KASHMIRI);
+  CASEN ("kk", KAZAK);
+  CASEN ("kok", KONKANI);
+  CASEN ("ko", KOREAN);
+  CASEN ("ky", KYRGYZ);
+  CASEN ("ml", MALAYALAM);
+  CASEN ("mni", MANIPURI);
+  CASEN ("mr", MARATHI);
+  CASEN ("mn", MONGOLIAN);
+  CASE ("ne-in", NEPALI, INDIA);
+  CASEN ("ne", NEPALI);
+  CASEN ("or", ORIYA);
+  CASEN ("pa", PUNJABI);
+  CASEN ("sa", SANSKRIT);
+  CASEN ("sd", SINDHI);
+  CASEN ("syr", SYRIAC);
+  CASEN ("ta", TAMIL);
+  CASEN ("tt", TATAR);
+  CASEN ("te", TELUGU);
+  CASEN ("th", THAI);
+  CASE ("ur-pk", URDU, PAKISTAN);
+  CASE ("ur-in", URDU, INDIA);
+  CASEN ("ur", URDU);
+  CASEN ("uz", UZBEK);
+
+#undef CASE
+#undef CASEN
+
+  return MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL);
+}
+
+#ifdef BASIC_WIN32_DEBUGGING
+
+static void
+dump_glyphs_and_log_clusters (gboolean rtl,
+                             int      itemlen,
+                             int      charix0,
+                             WORD    *log_clusters,
+                             WORD    *iglyphs,
+                             int      nglyphs)
+{
+  if (pango_win32_debug)
+  {
+    int j, k, nclusters, clusterix, charix, ng;
+
+    g_print ("  ScriptShape: nglyphs=%d: ", nglyphs);
+
+    for (j = 0; j < nglyphs; j++)
+      g_print ("%d%s", iglyphs[j], (j < nglyphs-1) ? "," : "");
+    g_print ("\n");
+
+    g_print ("  log_clusters: ");
+    for (j = 0; j < itemlen; j++)
+      g_print ("%d ", log_clusters[j]);
+    g_print ("\n");
+    nclusters = 0;
+    for (j = 0; j < itemlen; j++)
+      {
+       if (j == 0 || log_clusters[j-1] != log_clusters[j])
+         nclusters++;
+      }
+    g_print ("  %d clusters:\n", nclusters);
+
+    /* If RTL, first char is the last in the run, otherwise the
+     * first.
+     */
+    clusterix = 0;
+    if (rtl)
+      {
+       int firstglyphix = 0;
+       for (j = itemlen - 1, charix = charix0 + j; j >= 0; j--, charix--)
+         {
+           if (j == itemlen - 1 || log_clusters[j] != log_clusters[j+1])
+             g_print ("  Cluster %d: chars %d--",
+                      clusterix, charix);
+           if (j == 0 || log_clusters[j-1] != log_clusters[j])
+             {
+               ng = log_clusters[j] - firstglyphix + 1;
+               g_print ("%d: %d glyphs: ",
+                        charix, ng);
+               for (k = firstglyphix; k <= log_clusters[j]; k++)
+                 {
+                   g_print ("%d", iglyphs[k]);
+                   if (k < log_clusters[j])
+                     g_print (",");
+                 }
+               firstglyphix = log_clusters[j] + 1;
+               clusterix++;
+               g_print ("\n");
+             }
+         }
+      }
+    else
+      {
+       for (j = 0, charix = charix0; j < itemlen; j++, charix++)
+         {
+           if (j == 0 || log_clusters[j-1] != log_clusters[j])
+             g_print ("  Cluster %d: wchar_t %d--",
+                      clusterix, charix);
+           if (j == itemlen - 1 || log_clusters[j] != log_clusters[j+1])
+             {
+               int klim = ((j == itemlen-1) ? nglyphs : log_clusters[j+1]);
+               ng = klim - log_clusters[j];
+               g_print ("%d: %d glyphs: ",
+                        charix, ng);
+               for (k = log_clusters[j]; k < klim; k++)
+                 {
+                   g_print ("%d", iglyphs[k]);
+                   if (k != klim - 1)
+                     g_print (",");
+                 }
+               clusterix++;
+               g_print ("\n");
+             }
+         }
+      }
+  }
+}
+
+#endif /* BASIC_WIN32_DEBUGGING */
+
+static int
+unichar_index (wchar_t *wtext,
+              int      ix)
+{
+  int i, index;
+
+  index = 0;
+  for (i = 0; i < ix; i++)
+    /* Ignore the low surrogate */
+    if (!(wtext[i] >= 0xDC00 && wtext[i] < 0xE000))
+      index++;
+
+  return index;
+}
+
+static void
+set_up_pango_log_clusters (wchar_t *wtext,
+                          gboolean rtl,
+                          int      itemlen,
+                          WORD    *usp_log_clusters,
+                          int      nglyphs,
+                          gint    *pango_log_clusters,
+                          int      char_offset)
+{
+  int j, k;
+  int first_char_in_cluster;
+
+  if (rtl)
+    {
+      /* RTL. Walk Uniscribe log_clusters array backwards, build Pango
+       * log_clusters array forwards.
+       */
+      int glyph0 = 0;
+      first_char_in_cluster = unichar_index (wtext, itemlen - 1);
+      for (j = itemlen - 1; j >= 0; j--)
+       {
+         if (j < itemlen - 1 && usp_log_clusters[j+1] != usp_log_clusters[j])
+           {
+             /* Cluster starts */
+             first_char_in_cluster = unichar_index (wtext, j);
+           }
+         if (j == 0)
+           {
+             /* First char, cluster ends */
+             for (k = glyph0; k < nglyphs; k++)
+               pango_log_clusters[k] = first_char_in_cluster + char_offset;
+           }
+         else if (usp_log_clusters[j-1] == usp_log_clusters[j])
+           {
+             /* Cluster continues */
+             first_char_in_cluster = unichar_index (wtext, j-1);
+           }
+         else
+           {
+             /* Cluster ends */
+             for (k = glyph0; k <= usp_log_clusters[j]; k++)
+               pango_log_clusters[k] = first_char_in_cluster + char_offset;
+             glyph0 = usp_log_clusters[j] + 1;
+           }
+       }
+    }
+  else
+    {
+      /* LTR. Walk Uniscribe log_clusters array forwards, build Pango
+       * log_clusters array also forwards.
+       */
+      first_char_in_cluster = 0;
+      for (j = 0; j < itemlen; j++)
+       {
+         if (j > 0 && usp_log_clusters[j-1] != usp_log_clusters[j])
+           {
+             /* Cluster starts */
+             first_char_in_cluster = unichar_index (wtext, j);
+           }
+         if (j == itemlen - 1)
+           {
+             /* Last char, cluster ends */
+             for (k = usp_log_clusters[j]; k < nglyphs; k++)
+               pango_log_clusters[k] = first_char_in_cluster + char_offset;
+           }
+         else if (usp_log_clusters[j] == usp_log_clusters[j+1])
+           {
+             /* Cluster continues */
+           }
+         else
+           {
+             /* Cluster ends */
+             for (k = usp_log_clusters[j]; k < usp_log_clusters[j+1]; k++)
+               pango_log_clusters[k] = first_char_in_cluster + char_offset;
+           }
+       }
+    }
+}
+
+static void
+convert_log_clusters_to_byte_offsets (const char       *text,
+                                     gint              length,
+                                     PangoGlyphString *glyphs)
+{
+  const char *p;
+  int charix, glyphix;
+  int n_chars = g_utf8_strlen (text, length);
+  int *byte_offset = g_new (int, n_chars);
+
+  p = text;
+  charix = 0;
+  while (p < text + length)
+    {
+      byte_offset[charix] = p - text;
+      charix++;
+      p = g_utf8_next_char (p);
+    }
+
+  /* Convert char indexes in the log_clusters array to byte offsets.
+   */
+  for (glyphix = 0; glyphix < glyphs->num_glyphs; glyphix++)
+    {
+      g_assert (glyphs->log_clusters[glyphix] < n_chars);
+      glyphs->log_clusters[glyphix] = byte_offset[glyphs->log_clusters[glyphix]];
+    }
+
+  g_free (byte_offset);
+}
+
+static gboolean
+itemize_shape_and_place (PangoFont           *font,
+                        HDC                  hdc,
+                        wchar_t             *wtext,
+                        int                  wlen,
+                        const PangoAnalysis *analysis,
+                        PangoGlyphString    *glyphs,
+                        SCRIPT_CACHE        *script_cache)
+{
+  int i;
+  int item, nitems, item_step;
+  int itemlen, glyphix, nglyphs;
+  SCRIPT_CONTROL control;
+  SCRIPT_STATE state;
+  SCRIPT_ITEM items[100];
+  double scale = pango_win32_font_get_metrics_factor (font);
+
+  memset (&control, 0, sizeof (control));
+  memset (&state, 0, sizeof (state));
+
+  control.uDefaultLanguage = make_langid (analysis->language);
+  state.uBidiLevel = analysis->level;
+
+#ifdef BASIC_WIN32_DEBUGGING
+  if (pango_win32_debug)
+    g_print (G_STRLOC ": ScriptItemize: uDefaultLanguage:%04x uBidiLevel:%d\n",
+            control.uDefaultLanguage, state.uBidiLevel);
+#endif
+  if ((*script_itemize) (wtext, wlen, G_N_ELEMENTS (items), &control, NULL,
+                        items, &nitems))
+    {
+#ifdef BASIC_WIN32_DEBUGGING
+      if (pango_win32_debug)
+       g_print ("ScriptItemize failed\n");
+#endif
+      return FALSE;
+    }
+
+#ifdef BASIC_WIN32_DEBUGGING
+  if (pango_win32_debug)
+    g_print ("%d items:\n", nitems);
+#endif
+
+  if (analysis->level % 2)
+    {
+      item = nitems - 1;
+      item_step = -1;
+    }
+  else
+    {
+      item = 0;
+      item_step = 1;
+    }
+
+  for (i = 0; i < nitems; i++, item += item_step)
+    {
+      WORD iglyphs[1000];
+      WORD log_clusters[1000];
+      SCRIPT_VISATTR visattrs[1000];
+      int advances[1000];
+      GOFFSET offsets[1000];
+      ABC abc;
+      int script = items[item].a.eScript;
+      int ng;
+      int char_offset;
+
+      memset (advances, 0, sizeof (advances));
+      memset (offsets, 0, sizeof (offsets));
+      memset (&abc, 0, sizeof (abc));
+
+      /* Note that itemlen is number of wchar_t's i.e. surrogate pairs
+       * count as two!
+       */
+      itemlen = items[item+1].iCharPos - items[item].iCharPos;
+      char_offset = unichar_index (wtext, items[item].iCharPos);
+
+#ifdef BASIC_WIN32_DEBUGGING
+      if (pango_win32_debug)
+       g_print ("  Item %d: iCharPos=%d eScript=%d (%s) %s%s%s%s%s%s%s wchar_t %d--%d (%d)\n",
+                item, items[item].iCharPos, script,
+                lang_name (scripts[script]->langid),
+                scripts[script]->fComplex ? "complex" : "simple",
+                items[item].a.fRTL ? " fRTL" : "",
+                items[item].a.fLayoutRTL ? " fLayoutRTL" : "",
+                items[item].a.fLinkBefore ? " fLinkBefore" : "",
+                items[item].a.fLinkAfter ? " fLinkAfter" : "",
+                items[item].a.fLogicalOrder ? " fLogicalOrder" : "",
+                items[item].a.fNoGlyphIndex ? " fNoGlyphIndex" : "",
+                items[item].iCharPos, items[item+1].iCharPos-1, itemlen);
+#endif
+
+      items[item].a.fRTL = analysis->level % 2;
+      if ((*script_shape) (hdc, &script_cache[script],
+                          wtext + items[item].iCharPos, itemlen,
+                          G_N_ELEMENTS (iglyphs),
+                          &items[item].a,
+                          iglyphs,
+                          log_clusters,
+                          visattrs,
+                          &nglyphs))
+       {
+#ifdef BASIC_WIN32_DEBUGGING
+         if (pango_win32_debug)
+           g_print ("pango-basic-win32: ScriptShape failed\n");
+#endif
+         return FALSE;
+       }
+
+#ifdef BASIC_WIN32_DEBUGGING
+      dump_glyphs_and_log_clusters (items[item].a.fRTL, itemlen,
+                                   items[item].iCharPos, log_clusters,
+                                   iglyphs, nglyphs);
+#endif
+
+      ng = glyphs->num_glyphs;
+      pango_glyph_string_set_size (glyphs, ng + nglyphs);
+
+      set_up_pango_log_clusters (wtext + items[item].iCharPos,
+                                items[item].a.fRTL, itemlen, log_clusters,
+                                nglyphs, glyphs->log_clusters + ng,
+                                char_offset);
+
+      if ((*script_place) (hdc, &script_cache[script], iglyphs, nglyphs,
+                          visattrs, &items[item].a,
+                          advances, offsets, &abc))
+       {
+#ifdef BASIC_WIN32_DEBUGGING
+         if (pango_win32_debug)
+           g_print ("pango-basic-win32: ScriptPlace failed\n");
+#endif
+         return FALSE;
+       }
+
+      for (glyphix = 0; glyphix < nglyphs; glyphix++)
+       {
+         if (iglyphs[glyphix] != 0)
+           {
+             glyphs->glyphs[ng+glyphix].glyph = iglyphs[glyphix];
+             glyphs->glyphs[ng+glyphix].geometry.width = floor (0.5 + scale * advances[glyphix]);
+             glyphs->glyphs[ng+glyphix].geometry.x_offset = floor (0.5 + scale * offsets[glyphix].du);
+             glyphs->glyphs[ng+glyphix].geometry.y_offset = floor (0.5 + scale * offsets[glyphix].dv);
+           }
+         else
+           {
+             PangoRectangle logical_rect;
+             /* Should pass actual char that was not found to
+              * PANGO_GET_UNKNOWN_GLYPH(), but a bit hard to
+              * find out that at this point, so cheat and use 0.
+              */
+             PangoGlyph unk = PANGO_GET_UNKNOWN_GLYPH (0);
+
+             glyphs->glyphs[ng+glyphix].glyph = unk;
+             pango_font_get_glyph_extents (font, unk, NULL, &logical_rect);
+             glyphs->glyphs[ng+glyphix].geometry.width = logical_rect.width;
+             glyphs->glyphs[ng+glyphix].geometry.x_offset = 0;
+             glyphs->glyphs[ng+glyphix].geometry.y_offset = 0;
+           }
+       }
+    }
+
+#ifdef BASIC_WIN32_DEBUGGING
+  if (pango_win32_debug)
+    {
+      g_print ("  Pango log_clusters (level:%d), char index:", analysis->level);
+      for (glyphix = 0; glyphix < glyphs->num_glyphs; glyphix++)
+       g_print ("%d ", glyphs->log_clusters[glyphix]);
+      g_print ("\n");
+    }
+#endif
+
+  return TRUE;
+}
+
+static gboolean
+uniscribe_shape (PangoFont           *font,
+                const char          *text,
+                gint                 length,
+                const PangoAnalysis *analysis,
+                PangoGlyphString    *glyphs)
+{
+  wchar_t *wtext;
+  long wlen;
+  int i;
+  gboolean retval = TRUE;
+  SCRIPT_CACHE script_cache[100];
+
+  if (!pango_win32_font_select_font (font, hdc))
+    return FALSE;
+
+  wtext = g_utf8_to_utf16 (text, length, NULL, &wlen, NULL);
+  if (wtext == NULL)
+    retval = FALSE;
+
+  if (retval)
+    {
+      memset (script_cache, 0, sizeof (script_cache));
+      retval = itemize_shape_and_place (font, hdc, wtext, wlen, analysis, glyphs, script_cache);
+      for (i = 0; i < G_N_ELEMENTS (script_cache); i++)
+       if (script_cache[i])
+         (*script_free_cache)(&script_cache[i]);
+    }
+
+  if (retval)
+    {
+      convert_log_clusters_to_byte_offsets (text, length, glyphs);
+#ifdef BASIC_WIN32_DEBUGGING
+      if (pango_win32_debug)
+       {
+         int glyphix;
+
+         g_print ("  Pango log_clusters, byte offsets:");
+         for (glyphix = 0; glyphix < glyphs->num_glyphs; glyphix++)
+           g_print ("%d ", glyphs->log_clusters[glyphix]);
+         g_print ("\n");
+       }
+#endif
+    }
+
+  pango_win32_font_done_font (font);
+
+  g_free (wtext);
+
+  return retval && glyphs->num_glyphs > 0;
+}
+
+static gboolean
+text_is_simple (const char *text,
+               gint        length)
+{
+  gboolean retval;
+  wchar_t *wtext;
+  long wlen;
+
+  wtext = (wchar_t *) g_utf8_to_utf16 (text, length, NULL, &wlen, NULL);
+  if (wtext == NULL)
+    return TRUE;
+
+  retval = ((*script_is_complex) (wtext, wlen, SIC_COMPLEX) == S_FALSE);
+
+  g_free (wtext);
+
+#ifdef BASIC_WIN32_DEBUGGING
+  if (pango_win32_debug)
+    g_print ("text_is_simple: %.*s (%ld wchar_t): %s\n",
+            MIN (length, 10), text, wlen, retval ? "YES" : "NO");
+#endif
+
+  return retval;
+}
+
+static void
+basic_engine_shape (PangoEngineShape   *engine,
+                   PangoFont           *font,
+                   const char          *text,
+                   int                  length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString    *glyphs)
+{
+  int n_chars;
+  int i;
+  const char *p;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  if (have_uniscribe &&
+      !text_is_simple (text, length) &&
+      uniscribe_shape (font, text, length, analysis, glyphs))
+    return;
+
+  n_chars = g_utf8_strlen (text, length);
+
+  pango_glyph_string_set_size (glyphs, n_chars);
+
+  p = text;
+  for (i = 0; i < n_chars; i++)
+    {
+      gunichar wc;
+      gunichar mirrored_ch;
+      PangoGlyph index;
+
+      wc = g_utf8_get_char (p);
+
+      if (analysis->level % 2)
+       if (pango_get_mirror_char (wc, &mirrored_ch))
+         wc = mirrored_ch;
+
+      if (wc == 0xa0)  /* non-break-space */
+       wc = 0x20;
+
+      if (pango_is_zero_width (wc))
+       {
+         set_glyph (font, glyphs, i, p - text, PANGO_GLYPH_EMPTY);
+       }
+      else
+       {
+         index = find_char (font, wc);
+         if (index)
+           {
+             set_glyph (font, glyphs, i, p - text, index);
+
+             if (g_unichar_type (wc) == G_UNICODE_NON_SPACING_MARK)
+               {
+                 if (i > 0)
+                   {
+                     PangoRectangle logical_rect, ink_rect;
+
+                     glyphs->glyphs[i].geometry.width = MAX (glyphs->glyphs[i-1].geometry.width,
+                                                             glyphs->glyphs[i].geometry.width);
+                     glyphs->glyphs[i-1].geometry.width = 0;
+                     glyphs->log_clusters[i] = glyphs->log_clusters[i-1];
+
+                     /* Some heuristics to try to guess how overstrike glyphs are
+                      * done and compensate
+                      */
+                     /* FIXME: (alex) Is this double call to get_glyph_extents really necessary? */
+                     pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, &ink_rect, &logical_rect);
+                     if (logical_rect.width == 0 && ink_rect.x == 0)
+                       glyphs->glyphs[i].geometry.x_offset = (glyphs->glyphs[i].geometry.width - ink_rect.width) / 2;
+                   }
+               }
+           }
+         else
+           set_glyph (font, glyphs, i, p - text, PANGO_GET_UNKNOWN_GLYPH (wc));
+       }
+
+      p = g_utf8_next_char (p);
+    }
+
+  /* Simple bidi support... may have separate modules later */
+
+  if (analysis->level % 2)
+    {
+      int start, end;
+
+      /* Swap all glyphs */
+      swap_range (glyphs, 0, n_chars);
+
+      /* Now reorder glyphs within each cluster back to LTR */
+      for (start = 0; start < n_chars;)
+       {
+         end = start;
+         while (end < n_chars &&
+                glyphs->log_clusters[end] == glyphs->log_clusters[start])
+           end++;
+
+         swap_range (glyphs, start, end);
+         start = end;
+       }
+    }
+}
+
+static void
+init_uniscribe (void)
+{
+  HMODULE usp10_dll;
+
+  have_uniscribe = FALSE;
+
+  if ((usp10_dll = LoadLibrary ("usp10.dll")) != NULL)
+    {
+      (script_get_properties = (pScriptGetProperties)
+       GetProcAddress (usp10_dll, "ScriptGetProperties")) &&
+      (script_itemize = (pScriptItemize)
+       GetProcAddress (usp10_dll, "ScriptItemize")) &&
+      (script_shape = (pScriptShape)
+       GetProcAddress (usp10_dll, "ScriptShape")) &&
+      (script_place = (pScriptPlace)
+       GetProcAddress (usp10_dll, "ScriptPlace")) &&
+      (script_free_cache = (pScriptFreeCache)
+       GetProcAddress (usp10_dll, "ScriptFreeCache")) &&
+      (script_is_complex = (pScriptIsComplex)
+       GetProcAddress (usp10_dll, "ScriptIsComplex")) &&
+      (have_uniscribe = TRUE);
+    }
+  if (have_uniscribe)
+    {
+#ifdef BASIC_WIN32_DEBUGGING
+      (*script_get_properties) (&scripts, &nscripts);
+#endif
+      hdc = pango_win32_get_dc ();
+    }
+}
+
+static void
+basic_engine_win32_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = basic_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (BasicEngineWin32, basic_engine_win32,
+                               basic_engine_win32_class_init, NULL);
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  init_uniscribe ();
+
+  if (pango_win32_get_debug_flag ())
+    pango_win32_debug = TRUE;
+
+  basic_engine_win32_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  init_uniscribe ();
+
+  script_engines[0].scripts = basic_scripts;
+  script_engines[0].n_scripts = G_N_ELEMENTS (basic_scripts);
+
+  if (have_uniscribe)
+    {
+#if 0
+      int i;
+      GArray *ranges = g_array_new (FALSE, FALSE, sizeof (PangoEngineRange));
+
+      /* Walk through scripts supported by the Uniscribe implementation on this
+       * machine, and mark corresponding Unicode ranges.
+       */
+      for (i = 0; i < nscripts; i++)
+       {
+       }
+
+      /* Sort range array */
+      g_array_sort (ranges, compare_range);
+      script_engines[0].ranges = ranges;
+      script_engines[0].n_ranges = ranges->len;
+#else
+      script_engines[0].scripts = uniscribe_scripts;
+      script_engines[0].n_scripts = G_N_ELEMENTS (uniscribe_scripts);
+#endif
+    }
+
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (basic_engine_win32_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/basic/basic-x.c b/modules/basic/basic-x.c
new file mode 100755 (executable)
index 0000000..ba4effc
--- /dev/null
@@ -0,0 +1,720 @@
+/* Pango
+ * basic.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <glib.h>
+#include <string.h>
+#include "pango-engine.h"
+#include "pango-utils.h"
+
+#undef PANGO_DISABLE_DEPRECATED
+#include "pangox.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      BasicEngineX;
+typedef PangoEngineShapeClass BasicEngineXClass ;
+
+typedef struct _CharRange CharRange;
+typedef struct _Charset Charset;
+typedef struct _CharsetOrdering CharsetOrdering;
+typedef struct _CharCache CharCache;
+typedef struct _CharCachePointer CharCachePointer;
+typedef struct _MaskTable MaskTable;
+
+typedef PangoGlyph (*ConvFunc) (CharCache   *cache,
+                               GIConv       cd,
+                               const gchar *input);
+
+#define MAX_CHARSETS 32
+
+#define SCRIPT_ENGINE_NAME "BasicScriptEngineX"
+
+struct _Charset
+{
+  int   index;
+  const char *id;
+  const char *x_charset;
+  ConvFunc conv_func;
+};
+
+struct _CharsetOrdering
+{
+  const char *langs;
+  char charsets[MAX_CHARSETS];
+};
+
+struct _CharRange
+{
+  guint16 start;
+  guint16 end;
+  guint16 charsets;
+};
+
+struct _MaskTable
+{
+  int n_subfonts;
+
+  PangoXSubfont *subfonts;
+  Charset **charsets;
+};
+
+struct _CharCache
+{
+  guint ref_count;
+  CharsetOrdering *ordering;
+  MaskTable *mask_tables[256];
+  GIConv converters[MAX_CHARSETS];
+  PangoCoverage *coverage;
+};
+
+struct _CharCachePointer
+{
+  PangoLanguage *lang;
+  CharCache *cache;
+};
+
+static PangoGlyph conv_8bit (CharCache  *cache,
+                            GIConv      cd,
+                            const char *input);
+static PangoGlyph conv_eucjp (CharCache  *cache,
+                             GIConv      cd,
+                             const char *input);
+static PangoGlyph conv_16bit (CharCache  *cache,
+                             GIConv      cd,
+                             const char *input);
+static PangoGlyph conv_ucs4 (CharCache  *cache,
+                            GIConv      cd,
+                            const char *input);
+static PangoGlyph conv_16bit_MSB_on (CharCache  *cache,
+                             GIConv      cd,
+                             const char *input);
+static PangoGlyph conv_gb18030_1 (CharCache  *cache,
+                             GIConv      cd,
+                             const char *input);
+static PangoGlyph conv_euctw (CharCache  *cache,
+                             GIConv      cd,
+                             const char *input);
+
+#include "tables-big.i"
+
+static PangoEngineScriptInfo basic_scripts[] = {
+  { PANGO_SCRIPT_COMMON,  "" },
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    PANGO_RENDER_TYPE_X,
+    basic_scripts, G_N_ELEMENTS(basic_scripts)
+  }
+};
+
+/*
+ * X window system script engine portion
+ */
+
+/* Structure of our cache:
+ *
+ * PangoFont => CharCachePointer  ===\
+ *                    |               \
+ *              CharCachePointer  ======> CharCache => CharsetOrdering
+ *                    |                       |======> MaskTable[0]    => {subfonts,charset}[n_subfonts],
+ *                    |                       |======> MaskTable[1]    => {subfonts,charset}[n_subfonts],
+ *                    |                       \======> MaskTable[...]  => {subfonts,charset}[n_subfonts]
+ *                    |
+ *              CharCachePointer  ======> CharCache => CharsetOrdering
+ *                                            |======> MaskTable[0]    => {subfonts,charset}[n_subfonts],
+ *                                            |======> MaskTable[1]    => {subfonts,charset}[n_subfonts],
+ *                                            \======> MaskTable[...]  => {subfonts,charset}[n_subfonts]
+ *
+ * A CharCache structure caches the lookup of what subfonts can be used for what characters for a pair of a Font
+ * and CharsetOrdering. Multiple language tags can share the same CharsetOrdering - the list of CharCachePointer
+ * structures that is attached to the font as object data provides lookups from language tag to charcache.
+ */
+static CharCache *
+char_cache_new (CharsetOrdering *ordering)
+{
+  CharCache *result;
+  int i;
+
+  result = g_new0 (CharCache, 1);
+
+  result->ref_count = 1;
+  result->ordering = ordering;
+  for (i=0; i<MAX_CHARSETS; i++)
+    result->converters[i] = (GIConv)-1;
+
+  return result;
+}
+
+static void
+char_cache_free (CharCache *cache)
+{
+  int i;
+
+  for (i=0; i<256; i++)
+    if (cache->mask_tables[i])
+      {
+       g_free (cache->mask_tables[i]->subfonts);
+       g_free (cache->mask_tables[i]->charsets);
+
+       g_free (cache->mask_tables[i]);
+      }
+
+  for (i=0; i<MAX_CHARSETS; i++)
+    if (cache->converters[i] != (GIConv)-1)
+      g_iconv_close (cache->converters[i]);
+
+  g_free (cache);
+}
+
+static PangoGlyph
+find_char (CharCache *cache, PangoFont *font, gunichar wc, const char *input)
+{
+  int mask_index;
+  MaskTable *mask_table;
+  int i;
+
+  switch (wc)
+    {
+    case '\n':
+    case '\r':
+    case 0x2028: /* Line separator */
+    case 0x2029: /* Paragraph separator */
+      return PANGO_GET_UNKNOWN_GLYPH (wc);
+      break;
+    }
+
+  if (wc >= G_N_ELEMENTS (char_masks))
+    mask_index = 0;
+  else
+    mask_index = char_masks[wc];
+
+  if (cache->mask_tables[mask_index])
+    mask_table = cache->mask_tables[mask_index];
+  else
+    {
+      const char *charset_names[G_N_ELEMENTS(charsets)];
+      Charset *charsets_map[G_N_ELEMENTS(charsets)];
+      guint mask;
+      int n_charsets = 0;
+      int *subfont_charsets;
+
+      mask_table = g_new (MaskTable, 1);
+
+      mask = char_mask_map[mask_index] | ENC_ISO_10646;
+
+      /* Find the character sets that are included in this mask
+       */
+
+      for (i=0; i<(int)G_N_ELEMENTS(charsets); i++)
+       {
+         int charset_index = cache->ordering->charsets[i];
+
+         if (mask & (1 << charset_index))
+           {
+             charset_names[n_charsets] = charsets[charset_index].x_charset;
+             charsets_map[n_charsets] = &charsets[charset_index];
+
+             n_charsets++;
+           }
+       }
+
+      mask_table->n_subfonts = pango_x_list_subfonts (font, (char**)(void*)charset_names, n_charsets, &mask_table->subfonts, &subfont_charsets);
+
+      mask_table->charsets = g_new (Charset *, mask_table->n_subfonts);
+      for (i=0; i<mask_table->n_subfonts; i++)
+       mask_table->charsets[i] = charsets_map[subfont_charsets[i]];
+
+      g_free (subfont_charsets);
+
+      cache->mask_tables[mask_index] = mask_table;
+    }
+
+  for (i=0; i < mask_table->n_subfonts; i++)
+    {
+      PangoGlyph index;
+      PangoGlyph glyph;
+      Charset *charset;
+
+      charset = mask_table->charsets[i];
+      if (charset)
+       {
+         GIConv cd = cache->converters[charset->index];
+
+         if (charset->id && cd == (GIConv)-1)
+           {
+             cd = g_iconv_open (charset->id, "UTF-8");
+             if (cd == (GIConv)-1)
+               {
+                 g_warning ("Could not load converter from %s to UTF-8", charset->id);
+                 mask_table->charsets[i] = NULL;
+                 continue;
+               }
+
+             cache->converters[charset->index] = cd;
+           }
+
+         index = (*charset->conv_func) (cache, cd, input);
+         glyph = PANGO_X_MAKE_GLYPH (mask_table->subfonts[i], index);
+
+         if (pango_x_has_glyph (font, glyph))
+           return glyph;
+       }
+    }
+
+  return 0;
+}
+
+static void
+set_glyph (PangoFont *font, PangoGlyphString *glyphs, int i, int offset, PangoGlyph glyph)
+{
+  PangoRectangle logical_rect;
+
+  glyphs->glyphs[i].glyph = glyph;
+
+  glyphs->glyphs[i].geometry.x_offset = 0;
+  glyphs->glyphs[i].geometry.y_offset = 0;
+
+  glyphs->log_clusters[i] = offset;
+
+  pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
+  glyphs->glyphs[i].geometry.width = logical_rect.width;
+}
+
+static PangoGlyph
+conv_8bit (CharCache  *cache G_GNUC_UNUSED,
+          GIConv      cd,
+          const char *input)
+{
+  char outbuf;
+
+  const char *inptr = input;
+  size_t inbytesleft;
+  char *outptr = &outbuf;
+  size_t outbytesleft = 1;
+
+  inbytesleft = g_utf8_next_char (input) - input;
+
+  g_iconv (cd, (char **)&inptr, &inbytesleft, &outptr, &outbytesleft);
+
+  return (guchar)outbuf;
+}
+
+static PangoGlyph
+conv_eucjp (CharCache  *cache G_GNUC_UNUSED,
+           GIConv      cd,
+           const char *input)
+{
+  char outbuf[4];
+
+  const char *inptr = input;
+  size_t inbytesleft;
+  char *outptr = outbuf;
+  size_t outbytesleft = 4;
+
+  inbytesleft = g_utf8_next_char (input) - input;
+
+  g_iconv (cd, (char **)&inptr, &inbytesleft, &outptr, &outbytesleft);
+
+  if ((guchar)outbuf[0] < 128)
+    return outbuf[0];
+  else if ((guchar)outbuf[0] == 0x8e && outbytesleft == 2)
+    return ((guchar)outbuf[1]);
+  else if ((guchar)outbuf[0] == 0x8f && outbytesleft == 1)
+    return ((guchar)outbuf[1] & 0x7f) * 256 + ((guchar)outbuf[2] & 0x7f);
+  else
+    return ((guchar)outbuf[0] & 0x7f) * 256 + ((guchar)outbuf[1] & 0x7f);
+}
+
+static PangoGlyph
+conv_16bit (CharCache  *cache G_GNUC_UNUSED,
+           GIConv      cd,
+           const char *input)
+{
+  char outbuf[2];
+
+  const char *inptr = input;
+  size_t inbytesleft;
+  char *outptr = outbuf;
+  size_t outbytesleft = 2;
+
+  inbytesleft = g_utf8_next_char (input) - input;
+
+  g_iconv (cd, (char **)&inptr, &inbytesleft, &outptr, &outbytesleft);
+
+  if ((guchar)outbuf[0] < 128)
+    return outbuf[0];
+  else
+    return ((guchar)outbuf[0] & 0x7f) * 256 + ((guchar)outbuf[1] & 0x7f);
+}
+
+static PangoGlyph
+conv_16bit_MSB_on (CharCache  *cache G_GNUC_UNUSED,
+                  GIConv      cd,
+                  const char *input)
+{
+  char outbuf[2];
+
+  const char *inptr = input;
+  size_t inbytesleft;
+  char *outptr = outbuf;
+  size_t outbytesleft = 2;
+
+  inbytesleft = g_utf8_next_char (input) - input;
+
+  g_iconv (cd, (char **)&inptr, &inbytesleft, &outptr, &outbytesleft);
+
+  if ((guchar)outbuf[0] < 128)
+    return outbuf[0];
+  else
+    return (guchar)outbuf[0] * 256 + (guchar)outbuf[1];
+}
+
+static PangoGlyph
+conv_gb18030_1 (CharCache  *cache G_GNUC_UNUSED,
+               GIConv      cd,
+               const char *input)
+{
+  char outbuf[4];
+
+  const char *inptr = input;
+  size_t inbytesleft;
+  char *outptr = outbuf;
+  size_t outbytesleft = 4;
+
+
+  inbytesleft = g_utf8_next_char (input) - input;
+
+  g_iconv (cd, (char **)&inptr, &inbytesleft, &outptr, &outbytesleft);
+
+  if ((guchar)outbuf[0] < 128)
+    return outbuf[0];
+  else
+    return  12600 * ((guchar)outbuf[0] - 0x81) + 1260 * ((guchar)outbuf[1] - 0x30) + 10 * ((guchar)outbuf[2] - 0x81) + ((guchar)outbuf[3] - 0x30);
+}
+
+static PangoGlyph
+conv_euctw (CharCache  *cache G_GNUC_UNUSED,
+           GIConv      cd,
+           const char *input)
+{
+  char outbuf[4];
+
+  const char *inptr = input;
+  size_t inbytesleft;
+  char *outptr = outbuf;
+  size_t outbytesleft = 4;
+
+  inbytesleft = g_utf8_next_char (input) - input;
+
+  g_iconv (cd, (char **)&inptr, &inbytesleft, &outptr, &outbytesleft);
+
+  /* The first two bytes determine which page of CNS to use; we
+   * get this information from tables-big.i, so ignore them
+   */
+  if ((guchar)outbuf[0] < 128)
+    return outbuf[0];
+  else
+    return ((guchar)outbuf[2] & 0x7f) * 256 + ((guchar)outbuf[3] & 0x7f);
+}
+
+static PangoGlyph
+conv_ucs4 (CharCache  *cache G_GNUC_UNUSED,
+          GIConv      cd G_GNUC_UNUSED,
+          const char *input)
+{
+  return g_utf8_get_char (input);
+}
+
+static void
+swap_range (PangoGlyphString *glyphs, int start, int end)
+{
+  int i, j;
+
+  for (i = start, j = end - 1; i < j; i++, j--)
+    {
+      PangoGlyphInfo glyph_info;
+      gint log_cluster;
+
+      glyph_info = glyphs->glyphs[i];
+      glyphs->glyphs[i] = glyphs->glyphs[j];
+      glyphs->glyphs[j] = glyph_info;
+
+      log_cluster = glyphs->log_clusters[i];
+      glyphs->log_clusters[i] = glyphs->log_clusters[j];
+      glyphs->log_clusters[j] = log_cluster;
+    }
+}
+
+static void
+char_caches_free (GSList *caches)
+{
+  GSList *tmp_list = caches;
+  while (tmp_list)
+    {
+      CharCachePointer *pointer = tmp_list->data;
+
+      pointer->cache->ref_count--;
+      if (pointer->cache->ref_count == 0)
+       char_cache_free (pointer->cache);
+      g_free (pointer);
+
+      tmp_list = tmp_list->next;
+    }
+  g_slist_free (caches);
+}
+
+static CharsetOrdering *
+ordering_for_lang (PangoLanguage *lang)
+{
+  int i;
+
+  for (i = 0; i < (int)G_N_ELEMENTS (charset_orderings) - 1; i++)
+    {
+      if (pango_language_matches (lang, charset_orderings[i].langs))
+       return &charset_orderings[i];
+    }
+
+  return &charset_orderings[i];
+}
+
+static CharCache *
+get_char_cache (PangoFont     *font,
+               PangoLanguage *lang)
+{
+  GQuark cache_id = g_quark_from_string ("basic-char-cache");
+  CharCache *cache = NULL;
+  CharCachePointer *pointer;
+  CharsetOrdering *ordering;
+  GSList *caches;
+  GSList *tmp_list;
+
+  caches = g_object_get_qdata (G_OBJECT (font), cache_id);
+  tmp_list = caches;
+  while (tmp_list)
+    {
+      pointer = tmp_list->data;
+      if (pointer->lang == lang)
+       return pointer->cache;
+
+      tmp_list = tmp_list->next;
+    }
+
+  ordering = ordering_for_lang (lang);
+
+  tmp_list = caches;
+  while (tmp_list)
+    {
+      pointer = tmp_list->data;
+      if (pointer->cache->ordering == ordering)
+       {
+         cache = pointer->cache;
+         break;
+       }
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (!cache)
+    cache = char_cache_new (ordering);
+  else
+    cache->ref_count++;
+
+  pointer = g_new (CharCachePointer, 1);
+  pointer->lang = lang;
+  pointer->cache = cache;
+
+  caches = g_slist_prepend (caches, pointer);
+
+  g_object_steal_qdata (G_OBJECT (font), cache_id);
+  g_object_set_qdata_full (G_OBJECT (font), cache_id,
+                          caches, (GDestroyNotify)char_caches_free);
+
+  return cache;
+}
+
+static void
+basic_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                   PangoFont        *font,
+                   const char       *text,
+                   gint              length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString *glyphs)
+{
+  int n_chars;
+  int i;
+  const char *p;
+
+  CharCache *cache;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  cache = get_char_cache (font, analysis->language);
+
+  n_chars = g_utf8_strlen (text, length);
+  pango_glyph_string_set_size (glyphs, n_chars);
+
+  p = text;
+  for (i=0; i < n_chars; i++)
+    {
+      gunichar wc;
+      gunichar mirrored_ch;
+      PangoGlyph index;
+      char buf[6];
+      const char *input;
+
+      wc = g_utf8_get_char (p);
+
+      input = p;
+      if (analysis->level % 2)
+       if (pango_get_mirror_char (wc, &mirrored_ch))
+         {
+           wc = mirrored_ch;
+
+           g_unichar_to_utf8 (wc, buf);
+           input = buf;
+         }
+
+      if (wc == 0xa0)  /* non-break-space */
+       {
+         wc = 0x20;
+
+         g_unichar_to_utf8 (wc, buf);
+         input = buf;
+       }
+
+      if (pango_is_zero_width (wc))
+       {
+         set_glyph (font, glyphs, i, p - text, PANGO_GLYPH_EMPTY);
+       }
+      else
+       {
+         index = find_char (cache, font, wc, input);
+         if (index)
+           {
+             set_glyph (font, glyphs, i, p - text, index);
+
+             if (g_unichar_type (wc) == G_UNICODE_NON_SPACING_MARK)
+               {
+                 if (i > 0)
+                   {
+                     PangoRectangle logical_rect, ink_rect;
+
+                     glyphs->glyphs[i].geometry.width = MAX (glyphs->glyphs[i-1].geometry.width,
+                                                             glyphs->glyphs[i].geometry.width);
+                     glyphs->glyphs[i-1].geometry.width = 0;
+                     glyphs->log_clusters[i] = glyphs->log_clusters[i-1];
+
+                     /* Some heuristics to try to guess how overstrike glyphs are
+                      * done and compensate
+                      */
+                     pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, &ink_rect, &logical_rect);
+                     if (logical_rect.width == 0 && ink_rect.x == 0)
+                       glyphs->glyphs[i].geometry.x_offset = (glyphs->glyphs[i].geometry.width - ink_rect.width) / 2;
+                   }
+               }
+           }
+         else
+           set_glyph (font, glyphs, i, p - text, PANGO_GET_UNKNOWN_GLYPH (wc));
+       }
+
+      p = g_utf8_next_char (p);
+    }
+
+  /* Simple bidi support... may have separate modules later */
+
+  if (analysis->level % 2)
+    {
+      int start, end;
+
+      /* Swap all glyphs */
+      swap_range (glyphs, 0, n_chars);
+
+      /* Now reorder glyphs within each cluster back to LTR */
+      for (start=0; start<n_chars;)
+       {
+         end = start;
+         while (end < n_chars &&
+                glyphs->log_clusters[end] == glyphs->log_clusters[start])
+           end++;
+
+         swap_range (glyphs, start, end);
+         start = end;
+       }
+    }
+}
+
+static PangoCoverageLevel
+basic_engine_covers (PangoEngineShape *engine G_GNUC_UNUSED,
+                    PangoFont        *font,
+                    PangoLanguage    *lang,
+                    gunichar          wc)
+{
+  CharCache *cache = get_char_cache (font, lang);
+  char buf[6];
+
+  g_unichar_to_utf8 (wc, buf);
+
+  return find_char (cache, font, wc, buf) ? PANGO_COVERAGE_EXACT : PANGO_COVERAGE_NONE;
+}
+
+static void
+basic_engine_x_class_init (PangoEngineShapeClass *class)
+{
+  class->covers = basic_engine_covers;
+  class->script_shape = basic_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (BasicEngineX, basic_engine_x,
+                               basic_engine_x_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  basic_engine_x_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (basic_engine_x_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/basic/tables-big.i b/modules/basic/tables-big.i
new file mode 100755 (executable)
index 0000000..7cca755
--- /dev/null
@@ -0,0 +1,4397 @@
+enum {
+  ENC_ISO_8859_1  = 1 << 0,
+  ENC_ISO_8859_2  = 1 << 1,
+  ENC_ISO_8859_3  = 1 << 2,
+  ENC_ISO_8859_4  = 1 << 3,
+  ENC_ISO_8859_5  = 1 << 4,
+  ENC_ISO_8859_6  = 1 << 5,
+  ENC_ISO_8859_7  = 1 << 6,
+  ENC_ISO_8859_8  = 1 << 7,
+  ENC_ISO_8859_9  = 1 << 8,
+  ENC_ISO_8859_10 = 1 << 9,
+  ENC_ISO_8859_13 = 1 << 10,
+  ENC_ISO_8859_14 = 1 << 11,
+  ENC_ISO_8859_15 = 1 << 12,
+  ENC_KOI8_R      = 1 << 13,
+  ENC_TIS_620     = 1 << 14,
+  ENC_JIS_0208    = 1 << 15,
+  ENC_GB_2312     = 1 << 16,
+  ENC_KSC_5601    = 1 << 17,
+  ENC_JIS_0201    = 1 << 18,
+  ENC_JIS_0212    = 1 << 19,
+  ENC_BIG5_1     = 1 << 20,
+  ENC_BIG5       = 1 << 21,
+  ENC_GB18030_0   = 1 << 22,
+  ENC_GB18030_1   = 1 << 23,
+  ENC_HKSCS_1    = 1 << 24,
+  ENC_CNS11643_1  = 1 << 25,
+  ENC_CNS11643_2  = 1 << 26,
+  ENC_CNS11643_3  = 1 << 27,
+  ENC_GBK         = 1 << 28,
+  ENC_ISO_10646   = 1 << 29
+};
+
+static Charset charsets[] = {
+  { 0,  NULL,           "iso8859-1",       conv_ucs4 },
+  { 1,  "ISO-8859-2",   "iso8859-2",       conv_8bit },
+  { 2,  "ISO-8859-3",   "iso8859-3",       conv_8bit },
+  { 3,  "ISO-8859-4",   "iso8859-4",       conv_8bit },
+  { 4,  "ISO-8859-5",   "iso8859-5",       conv_8bit },
+  { 5,  "ISO-8859-6",   "iso8859-6",       conv_8bit },
+  { 6,  "ISO-8859-7",   "iso8859-7",       conv_8bit },
+  { 7,  "ISO-8859-8",   "iso8859-8",       conv_8bit },
+  { 8,  "ISO-8859-9",   "iso8859-9",       conv_8bit },
+  { 9,  "ISO-8859-10",  "iso8859-10",      conv_8bit },
+  { 10, "ISO-8859-13",  "iso8859-13",      conv_8bit },
+  { 11, "ISO-8859-14",  "iso8859-14",      conv_8bit },
+  { 12, "ISO-8859-15",  "iso8859-15",      conv_8bit },
+  { 13, "KOI8-R",       "koi8-r",          conv_8bit },
+  { 14, "TIS-620",      "tis620.2529-1",   conv_8bit },
+  { 15, "EUC-JP",       "jisx0208.1983-0", conv_eucjp },
+  { 16, "GB2312",       "gb2312.1980-0",   conv_16bit },
+  { 17, "EUC-KR",       "ksc5601.1987-0",  conv_16bit },
+  { 18, "EUC-JP",       "jisx0201.1976-0", conv_eucjp },
+  { 19, "EUC-JP",       "jisx0212.1990-0", conv_eucjp },
+  { 20, "BIG5",                "big5-1",          conv_16bit_MSB_on },
+  { 21, "BIG5",                "big5-0",          conv_16bit_MSB_on },
+  { 22, "GB18030",      "gb18030.2000-0",  conv_16bit_MSB_on },
+  { 23, "GB18030",      "gb18030.2000-1",  conv_gb18030_1 },
+  { 24, "BIG5-HKSCS",   "hkscs-1",        conv_16bit_MSB_on },
+  { 25, "EUC-TW",       "cns11643-1",     conv_16bit },
+  { 26, "EUC-TW",       "cns11643-2",     conv_euctw },
+  { 27, "EUC-TW",       "cns11643-3",     conv_euctw },
+  { 28, "GBK",          "gbk-0",           conv_16bit_MSB_on },
+  { 29, NULL,           "iso10646-1",      conv_ucs4 }
+};
+
+static CharsetOrdering charset_orderings[] = {
+       { "ja", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 16, 17, 20, 21, 24, 25, 26, 27, 28, 22, 23, 29} },
+       { "ko", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 15, 16, 18, 19, 20, 21, 24, 25, 26, 27, 28, 22, 23, 29} },
+       { "zh-cn", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 28, 22, 23, 16, 17, 15, 18, 19, 20, 21, 24, 25, 26, 27, 29} },
+       { "zh-tw", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 21, 25, 26, 27, 24, 22, 23, 16, 17, 15, 18, 19, 28, 29} },
+       { "zh-hk", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 24, 20, 21, 25, 26, 27, 22, 23, 16, 17, 15, 18, 19, 28, 29} },
+       { "zh", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 28, 22, 23, 16, 17, 15, 18, 19, 20, 21, 24, 25, 26, 27, 29} },
+       { NULL, { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 29, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28} }
+};
+static const guint32 char_mask_map[] = {
+  0,
+  ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KOI8_R,
+  ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0201|ENC_KOI8_R|ENC_TIS_620,
+  ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KOI8_R|ENC_TIS_620,
+  ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KOI8_R|ENC_TIS_620,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KOI8_R,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_15|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_6|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_15|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0201,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KOI8_R,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_15|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_HKSCS_1|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_15|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_15|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9|ENC_JIS_0208|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_GB18030_1|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_1|ENC_ISO_8859_13|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_4|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_1|ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_13|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_13|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_ISO_8859_10|ENC_ISO_8859_13|ENC_ISO_8859_2|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_ISO_8859_13|ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_ISO_8859_3|ENC_JIS_0212,
+  ENC_ISO_8859_14|ENC_ISO_8859_3|ENC_JIS_0212,
+  ENC_ISO_8859_10|ENC_ISO_8859_2|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_ISO_8859_10|ENC_ISO_8859_2|ENC_ISO_8859_4|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_10|ENC_ISO_8859_13|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_HKSCS_1|ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_ISO_8859_10|ENC_ISO_8859_13|ENC_ISO_8859_4,
+  ENC_ISO_8859_3|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_10|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_10|ENC_ISO_8859_4|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_13|ENC_ISO_8859_2|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_ISO_8859_13|ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GBK|ENC_ISO_8859_2|ENC_JIS_0212,
+  ENC_HKSCS_1|ENC_ISO_8859_10|ENC_ISO_8859_4|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_15|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_HKSCS_1|ENC_ISO_8859_15|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_13|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9|ENC_JIS_0212,
+  ENC_ISO_8859_10|ENC_ISO_8859_13|ENC_ISO_8859_15|ENC_ISO_8859_2|ENC_ISO_8859_4|ENC_JIS_0212,
+  ENC_ISO_8859_14|ENC_JIS_0212,
+  ENC_ISO_8859_14|ENC_ISO_8859_15|ENC_JIS_0212,
+  ENC_ISO_8859_13|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_JIS_0212,
+  ENC_HKSCS_1|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212,
+  ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GBK,
+  ENC_HKSCS_1,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_2|ENC_ISO_8859_4|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK,
+  ENC_KSC_5601,
+  ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_2|ENC_ISO_8859_4|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_2|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_ISO_8859_7|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_7|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_5|ENC_JIS_0208|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_ISO_8859_5|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_5|ENC_JIS_0208|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_ISO_8859_8,
+  ENC_GB18030_1|ENC_ISO_8859_6,
+  ENC_GB18030_1,
+  ENC_TIS_620,
+  ENC_ISO_8859_14,
+  ENC_GB18030_0|ENC_GBK|ENC_JIS_0208,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_10|ENC_ISO_8859_7|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_13|ENC_ISO_8859_7|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_ISO_8859_13|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_ISO_8859_13,
+  ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_JIS_0201,
+  ENC_GB18030_0|ENC_GBK|ENC_ISO_8859_15,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_ISO_8859_5|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK,
+  ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KSC_5601,
+  ENC_JIS_0208,
+  ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK,
+  ENC_KOI8_R,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_0|ENC_GBK,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KOI8_R,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KOI8_R|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_JIS_0208,
+  ENC_CNS11643_1,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_KOI8_R,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_KOI8_R,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_KOI8_R,
+  ENC_KOI8_R|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_KOI8_R,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208,
+  ENC_CNS11643_1|ENC_GB_2312|ENC_JIS_0208,
+  ENC_CNS11643_3|ENC_GB18030_1,
+  ENC_GB18030_1|ENC_HKSCS_1,
+  ENC_CNS11643_3|ENC_GB18030_1|ENC_HKSCS_1,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK,
+  ENC_GB18030_0|ENC_GBK|ENC_JIS_0212,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GBK,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_JIS_0212,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GBK|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GBK|ENC_JIS_0208,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_JIS_0208,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212,
+  ENC_GB18030_0|ENC_GBK|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GB_2312|ENC_GBK,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0212,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GBK|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GBK|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GBK|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0212,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0212|ENC_KSC_5601,
+  ENC_CNS11643_3|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_2|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KSC_5601,
+  ENC_BIG5_1|ENC_BIG5|ENC_CNS11643_1|ENC_GB18030_0|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_CNS11643_1|ENC_GB18030_1,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_KSC_5601,
+  ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_HKSCS_1|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_JIS_0201,
+  ENC_BIG5_1|ENC_BIG5|ENC_JIS_0201,
+  ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_KSC_5601,
+  ENC_CNS11643_1|ENC_GB18030_0|ENC_GB_2312|ENC_GBK|ENC_JIS_0208|ENC_KSC_5601,
+  ENC_BIG5|ENC_BIG5|ENC_BIG5|ENC_BIG5|ENC_BIG5|ENC_BIG5|ENC_BIG5,
+};
+
+static const guchar char_masks[] = {
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  2,  2,  2,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  4,  1,
+  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
+  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
+  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,  7, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,  7, 16, 31, 32, 31,  7,
+ 33, 34, 35, 36, 37, 38, 39, 40, 33, 41, 33, 35, 42, 35, 35, 43,
+ 44, 42, 33, 45, 35, 38, 37, 46, 39, 42, 35, 47, 37, 48, 49, 50,
+ 51, 52, 35, 36, 37, 38, 39, 40, 51, 53, 51, 35, 51, 52, 35, 43,
+ 49, 42, 51, 54, 35, 38, 37, 55, 56, 51, 52, 47, 53, 48, 49, 57,
+ 58, 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, 64, 61, 61, 60, 60,
+ 65, 66, 58, 59,  0,  0, 67, 67, 61, 61, 68, 69, 63, 63, 70, 70,
+ 64, 64, 67, 71, 63, 63, 72, 72, 73, 73, 67, 59,  0,  0, 67, 67,
+ 70, 74, 75, 75, 63, 63, 67, 67, 76, 60, 60, 67, 67, 60, 60, 75,
+ 75, 77, 77, 62, 78, 67, 67, 60, 79, 75, 76, 80, 58, 59,  0,  0,
+ 60, 60, 81, 82, 60, 60, 83, 83, 60, 60, 62, 62, 63, 63, 84, 84,
+ 85, 85, 60, 60, 60, 60, 76, 76, 73, 73, 67, 59, 63, 63, 60, 60,
+ 60, 60, 67, 67, 86, 86, 86, 86, 87, 62, 62, 88, 88, 85, 85,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 89, 90, 91,
+ 90, 89, 90, 91, 90, 91, 90, 91, 90, 91, 90, 91, 90,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 91,  0,  0,  0, 92,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 93, 94,  0,  0, 93,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,
+  0, 94,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 93,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 93, 95,  0, 96, 97, 97,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 99, 100, 75, 101,  0, 102,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 103, 103, 103,  0, 103, 103, 103,  0, 103,  0, 103, 103,
+ 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104,  0, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103,
+ 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
+ 104, 104, 103, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,  0, 106, 106,
+ 107, 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 107, 107, 107,
+ 107, 107, 107, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+  0, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,  0, 106, 106,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 109, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 109, 110, 110, 110, 109,
+ 110, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,  0,  0,  0,  0, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 112, 112,  0,  0,  0,  0,  0,  0, 112, 112,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 112, 112,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 112, 112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 112, 112,  0,  0,  0,  0,  0,  0,  0,  0,
+ 112, 112,  0,  0,  0,  0,  0,  0,  0,  0, 112, 112,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 112, 112, 112, 112, 112, 112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93, 93,
+ 93, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 112, 112,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 108, 108,
+ 113,  0,  0, 97, 97, 114, 115, 108, 104, 116,  0,  0, 117, 117, 118,  0,
+ 119, 119, 120,  0,  0, 121, 122,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 123,  0, 122, 123,  0, 97,  0,  0,  0,  0,  0, 122,  0,  0, 124,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,
+  0, 98, 98, 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 125,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 122,  0, 97,  0,  0,  0, 126,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 98,  0,  0, 127,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 128, 75,  0,  0,  0, 98,  0,  0,  0,  0, 119,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98, 98,  0,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130,  0,  0,  0,  0,
+ 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 122, 122, 122, 122, 98, 98, 126, 126, 126, 126,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 93, 93,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 119,  0, 119,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 119,  0, 119, 119,  0,  0,  0, 119, 123,  0,  0, 119,  0,  0,  0, 132,
+  0, 132, 133,  0,  0, 134,  0,  0,  0, 135, 136,  0,  0, 123, 122, 97,
+ 122,  0,  0, 137,  0, 138,  0, 123, 123, 122, 122, 122, 119,  0, 129,  0,
+  0,  0,  0,  0, 122, 122, 130, 130,  0,  0,  0,  0, 139, 123,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 140,  0,  0,  0, 130,  0,  0,  0,
+  0,  0, 121,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 122, 122,  0,  0, 141, 141, 142, 142,  0,  0, 119, 119,  0,  0, 130, 130,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 119, 119,  0,  0, 119, 119,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 92,  0,  0,  0, 132,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 122,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 97,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 123,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 135, 135,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+ 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
+  0, 143,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 98, 98, 98, 98, 98,  0,
+  0,  0,  0,  0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 132, 132,
+ 132, 132, 132, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 136, 123, 136, 123, 130, 130, 130, 130, 130, 130, 130, 130, 136, 132, 132, 123,
+ 136, 132, 132, 123, 136, 132, 132, 123, 136, 132, 132, 123, 136, 123, 132, 132,
+ 123, 132, 132, 123, 136, 123, 132, 132, 123, 132, 132, 123, 136, 132, 132, 123,
+ 123, 132, 132, 123, 136, 132, 132, 123, 123, 132, 132, 123, 136, 132, 132, 123,
+ 132, 132, 123, 132, 132, 132, 132, 132, 132, 132, 132, 123,  0,  0,  0,  0,
+ 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 145, 146,
+ 146, 145, 146, 146, 146, 146, 146, 146, 146, 146, 145, 146, 146, 147, 147, 147,
+ 147, 97, 97, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 135, 97, 97, 97, 148, 97, 97, 97, 148, 97, 97, 97, 148, 97, 97, 97,
+ 135, 135, 149, 150, 97, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 136, 122,  0, 98, 98, 98, 98, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0, 122, 122,  0,  0, 98, 98,  0,  0,  0,  0, 121, 121,  0,  0,
+ 98, 98,  0,  0,  0,  0, 122, 122, 98,  0,  0, 122,  0,  0, 122, 122,
+ 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0, 97, 97, 97, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0, 133,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 122, 122,  0,  0, 97,  0,  0,  0,  0, 98, 98,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 122, 151, 122,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0, 98, 98, 98, 119,  0, 98, 119,  0, 133,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 93, 92,  0,  0, 94,  0, 93, 93, 94,  0, 93, 92, 94, 93,  0,  0,
+  0,  0,  0,  0,  0, 93,  0, 92,  0,  0,  0,  0, 93, 93,  0,  0,
+  0,  0,  0,  0,  0, 93,  0, 94,  0,  0, 94,  0, 93,  0, 94,  0,
+  0,  0,  0, 92,  0,  0, 94, 92,  0,  0,  0, 92, 93,  0, 93,  0,
+  0,  0,  0,  0,  0,  0, 93,  0,  0,  0, 94,  0, 93, 93,  0, 93,
+  0,  0,  0,  0,  0,  0, 93, 93,  0,  0,  0,  0,  0,  0, 93,  0,
+  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,  0,  0,  0,  0,
+ 122, 122, 122, 122,  0, 152, 153, 153, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 142, 123, 122, 122, 130, 130,  0,  0,  0,  0, 133, 97, 97,  0,
+  0, 97, 97, 97, 97, 97, 97, 97, 97, 97,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 92,  0,
+  0, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154,  0,  0,  0,  0,  0,  0,  0, 153, 153, 155, 155,  0,
+  0, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154,  0,  0,  0,  0, 156, 153, 153, 155,  0,
+  0,  0,  0,  0,  0, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,  0,  0,  0,  0,  0,  0,
+  0, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,  0,  0,  0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,  0,  0,  0,  0,  0,  0,
+  0, 94,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,  0,  0,  0, 98,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98, 98, 98, 98,  0,  0,  0, 98, 98, 98, 98, 98, 98, 126, 126,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 126, 126, 126, 98,
+ 98, 126, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 126, 98, 98, 98, 98, 98, 98,  0,  0,  0, 97, 98,
+ 98, 97, 97, 98,  0, 97, 98,  0, 98,  0,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 157, 110, 110, 157, 110, 110, 110, 157, 157, 110, 157, 110, 110, 157, 110,
+ 110, 157, 157, 157, 157, 158, 110, 110, 110, 157, 110, 157, 157, 110, 110, 110,
+ 158, 110, 157, 157, 157, 110, 110, 92, 110, 157, 110, 110, 158, 157, 110, 110,
+ 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 157, 110, 110,
+ 110, 110, 110, 110, 159, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157,
+ 157, 110, 110, 94, 157, 110, 110, 110, 110, 110, 159, 157, 157, 159, 158, 110,
+ 110, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 157, 157, 157, 110, 110,
+ 110, 110, 157, 159, 110, 157, 159, 157, 110, 157, 110, 110, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 159, 157, 110, 110, 110, 157, 110, 110, 110, 110, 159,
+ 157, 110, 157, 157, 110, 110, 110, 157, 157, 110, 157, 110, 158, 110, 110, 110,
+ 110, 158, 157, 157, 110, 157, 110, 157, 159, 110, 157, 157, 157, 110, 110, 157,
+ 157, 157, 110, 110, 157, 157, 110, 157, 110, 110, 110, 110, 157, 110, 110, 158,
+ 110, 110, 110, 110, 158, 110, 110, 157, 157, 157, 110, 110, 110, 110, 157, 157,
+ 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 159, 110, 157, 110, 110,
+ 110, 110, 110, 157, 157, 110, 158, 157, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 157, 110,
+ 110, 110, 157, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110,
+ 110, 110, 157, 110, 110, 110, 110, 110, 110, 157, 110, 157, 110, 157, 158, 110,
+ 110, 110, 157, 110, 157, 157, 157, 157, 157, 110, 157, 157, 110, 157, 110, 110,
+ 110, 159, 110, 158, 157, 157, 157, 110, 157, 110, 110, 157, 157, 110, 110, 110,
+ 157, 159, 110, 110, 157, 157, 157, 157, 110, 157, 110, 157, 157, 158, 110, 157,
+ 158, 157, 159, 157, 110, 110, 157, 159, 159, 110, 157, 110, 110, 110, 110, 110,
+ 157, 157, 157, 157, 159, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110,
+ 157, 110, 157, 157, 110, 110, 110, 159, 158, 110, 110, 110, 110, 110, 92, 157,
+ 157, 158, 110, 157, 157, 158, 157, 110, 110, 110, 110, 110, 110, 158, 110, 110,
+ 110, 110, 110, 110, 157, 110, 110, 157, 110, 157, 157, 110, 110, 157, 157, 159,
+ 110, 159, 110, 157, 110, 158, 110, 159, 110, 110, 158, 157, 110, 157, 158, 110,
+ 157, 110, 158, 110, 110, 110, 159, 110, 110, 110, 157, 159, 110, 158, 110, 110,
+ 110, 110, 110, 157, 157, 157, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110,
+ 110, 158, 158, 159, 110, 157, 110, 110, 110, 110, 110, 158, 110, 157, 158, 110,
+ 110, 157, 157, 110, 110, 110, 110, 157, 110, 158, 110, 110, 157, 110, 92, 110,
+ 110, 110, 110, 110, 157, 157, 110, 110, 158, 157, 160, 110, 110, 157, 157, 157,
+ 110, 157, 157, 159, 110, 110, 157, 157, 110, 157, 157, 110, 157, 159, 110, 157,
+ 157, 157, 110, 157, 157, 158, 157, 110, 157, 159, 157, 157, 110, 110, 158, 157,
+ 110, 110, 157, 157, 157, 157, 110, 159, 159, 159, 157, 110, 110, 110, 158, 157,
+ 110, 157, 110, 157, 110, 157, 110, 110, 110, 110, 110, 157, 157, 110, 110, 158,
+ 110, 110, 110, 157, 110, 157, 110, 110, 157, 157, 110, 157, 157, 110, 110, 110,
+ 157, 110, 157, 157, 157, 157, 157, 110, 157, 157, 158, 110, 157, 110, 110, 110,
+ 110, 159, 110, 110, 157, 157, 110, 110, 110, 110, 110, 110, 157, 110, 157, 157,
+ 157, 110, 110, 157, 110, 110, 110, 110, 110, 110, 159, 110, 110, 110, 157, 157,
+ 110, 157, 157, 157, 157, 158, 110, 110, 157, 157, 159, 157, 159, 157, 157, 110,
+ 159, 159, 110, 157, 157, 159, 157, 157, 157, 158, 157, 157, 159, 157, 110, 157,
+ 110, 159, 110, 158, 159, 159, 110, 158, 158, 110, 110, 110, 110, 157, 157, 157,
+ 157, 157, 110, 159, 159, 157, 159, 110, 110, 157, 110, 157, 157, 159, 157, 110,
+ 110, 158, 158, 110, 110, 158, 159, 157, 157, 157, 110, 157, 157, 157, 157, 157,
+ 157, 157, 157, 157, 157, 159, 110, 157, 110, 110, 157, 157, 110, 157, 157, 110,
+ 110, 158, 157, 159, 157, 110, 157, 110, 159, 157, 159, 157, 110, 159, 110, 157,
+ 157, 157, 157, 157, 110, 157, 110, 110, 110, 110, 157, 157, 159, 110, 110, 110,
+ 157, 157, 158, 158, 110, 159, 157, 110, 157, 157, 157, 110, 158, 158, 110, 110,
+ 159, 157, 158, 158, 157, 157, 157, 110, 157, 110, 158, 157, 157, 157, 110, 110,
+ 159, 110, 110, 159, 157, 110, 110, 110, 157, 110, 157, 110, 157, 110, 157, 110,
+ 157, 110, 157, 110, 157, 157, 157, 110, 110, 110, 110, 157, 157, 157, 110, 110,
+ 157, 110, 159, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 158,
+ 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110,
+ 157, 157, 110, 110, 157, 157, 157, 158, 110, 157, 110, 110, 110, 110, 110, 110,
+ 158, 157, 157, 110, 157, 157, 157, 157, 157, 110, 110, 110, 110, 157, 110, 157,
+ 110, 110, 157, 110, 110, 157, 157, 110, 110, 159, 110, 110, 110, 110, 159, 110,
+ 157, 157, 110, 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 110,
+ 110, 157, 110, 110, 157, 110, 110, 157, 157, 110, 157, 110, 110, 157, 110, 110,
+ 157, 110, 110, 110, 110, 157, 157, 157, 157, 110, 110, 157, 110, 157, 110, 157,
+ 110, 110, 158, 110, 110, 110, 157, 110, 158, 110, 110, 158, 110, 110, 157, 110,
+ 157, 157, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 159,
+ 110, 110, 110, 110, 110, 110, 157, 110, 157, 159, 110, 110, 157, 110, 110, 110,
+ 158, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 159, 110, 157,
+ 110, 110, 157, 110, 110, 110, 159, 110, 158, 157, 110, 157, 110, 110, 110, 110,
+ 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 110, 110, 110, 157, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 157, 110, 157, 158, 110, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 157,
+ 157, 157, 157, 110, 110, 110, 110, 110, 110, 157, 110, 157, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 110, 157, 110, 157, 110, 110, 110, 157, 110, 110, 110,
+ 157, 110, 110, 157, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110, 110,
+ 159, 157, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 157, 110, 157, 110,
+ 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 157, 157, 110,
+ 110, 110, 110, 158, 110, 110, 157, 110, 110, 110, 110, 157, 158, 157, 157, 157,
+ 157, 158, 110, 157, 157, 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 157,
+ 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110, 157, 110, 110, 110,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 158, 157, 157, 110, 110, 110,
+ 110, 157, 157, 157, 110, 157, 110, 110, 159, 110, 110, 157, 157, 110, 110, 110,
+ 157, 157, 110, 157, 158, 110, 110, 110, 92, 157, 110, 157, 110, 110, 110, 157,
+ 110, 110, 110, 110, 110, 110, 110, 158, 157, 110, 157, 110, 157, 110, 110, 110,
+ 157, 110, 159, 157, 110, 157, 110, 157, 110, 157, 110, 110, 110, 110, 110, 158,
+ 157, 110, 110, 157, 110, 110, 110, 157, 157, 110, 110, 157, 157, 159, 157, 110,
+ 110, 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 157, 110, 110, 158, 157, 110, 110, 157, 110, 110, 110, 157, 157, 157, 92, 110,
+ 110, 110, 157, 110, 110, 157, 157, 110, 110, 157, 157, 110, 110, 110, 110, 157,
+ 158, 110, 157, 157, 157, 110, 110, 110, 110, 159, 159, 110, 110, 157, 110, 110,
+ 110, 110, 158, 110, 157, 110, 157, 110, 110, 158, 110, 158, 110, 110, 157, 110,
+ 110, 159, 110, 110, 158, 110, 110, 110, 157, 110, 110, 157, 110, 157, 157, 157,
+ 110, 110, 110, 110, 110, 110, 110, 157, 159, 110, 110, 110, 157, 157, 110, 110,
+ 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 110, 157, 157, 157, 157, 92,
+ 92, 110, 110, 157, 110, 157, 157, 110, 110, 110, 157, 110, 158, 110, 110, 92,
+ 110, 110, 158, 157, 157, 159, 157, 110, 157, 110, 157, 110, 158, 110, 157, 157,
+ 110, 157, 157, 157, 157, 157, 110, 157, 159, 110, 110, 158, 157, 110, 158, 157,
+ 157, 158, 157, 158, 157, 110, 158, 157, 157, 110, 110, 157, 110, 157, 110, 157,
+ 110, 110, 110, 157, 157, 110, 110, 159, 158, 110, 110, 157, 110, 110, 157, 157,
+ 110, 110, 157, 157, 157, 157, 157, 157, 157, 159, 159, 110, 110, 110, 110, 110,
+ 157, 157, 157, 110, 159, 157, 157, 110, 157, 110, 157, 110, 157, 110, 110, 157,
+ 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 158, 110, 110, 157, 110,
+ 110, 110, 159, 110, 110, 157, 157, 159, 157, 157, 157, 157, 159, 157, 159, 110,
+ 110, 157, 110, 110, 110, 157, 159, 158, 157, 110, 157, 110, 157, 157, 110, 110,
+ 157, 110, 110, 161, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 157, 110, 110, 110, 110, 157, 110, 157, 110, 110, 110, 157, 110, 157, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 158, 110, 110, 157, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 159, 110, 110, 110, 157,
+ 110, 157, 110, 110, 157, 110, 157, 157, 157, 110, 110, 110, 110, 158, 110, 110,
+ 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110,
+ 110, 110, 110, 157, 157, 157, 110, 157, 157, 157, 110, 110, 110, 157, 158, 110,
+ 159, 157, 110, 110, 110, 110, 110, 110, 110, 157, 110, 157, 110, 110, 110, 110,
+ 158, 110, 158, 157, 110, 157, 110, 157, 157, 110, 157, 158, 110, 157, 110, 110,
+ 110, 110, 110, 157, 157, 157, 157, 157, 157, 157, 110, 110, 157, 157, 158, 157,
+ 157, 110, 110, 110, 157, 157, 110, 110, 110, 159, 110, 157, 157, 110, 110, 110,
+ 157, 157, 158, 110, 110, 110, 110, 110, 110, 157, 157, 159, 157, 157, 110, 110,
+ 157, 110, 157, 157, 157, 110, 157, 110, 157, 158, 110, 110, 110, 110, 110, 157,
+ 110, 157, 159, 110, 157, 110, 110, 157, 157, 110, 157, 157, 110, 110, 92, 110,
+ 110, 157, 157, 110, 110, 157, 110, 110, 158, 110, 110, 110, 157, 110, 110, 110,
+ 159, 110, 157, 110, 110, 110, 110, 110, 157, 110, 157, 157, 110, 110, 110, 110,
+ 110, 159, 159, 110, 110, 110, 110, 110, 110, 157, 110, 159, 159, 110, 110, 110,
+ 159, 110, 110, 157, 110, 157, 157, 157, 157, 110, 110, 110, 157, 157, 157, 110,
+ 110, 110, 157, 157, 157, 110, 159, 110, 157, 159, 157, 157, 157, 110, 110, 157,
+ 110, 159, 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 157, 110,
+ 110, 110, 110, 157, 157, 110, 110, 110, 157, 110, 157, 110, 158, 110, 158, 157,
+ 110, 110, 159, 110, 159, 110, 110, 157, 157, 110, 110, 110, 157, 157, 157, 157,
+ 157, 110, 110, 157, 110, 110, 157, 159, 110, 110, 157, 157, 157, 158, 157, 157,
+ 157, 110, 157, 110, 157, 157, 157, 110, 110, 110, 157, 110, 159, 157, 157, 110,
+ 110, 110, 159, 159, 158, 157, 157, 110, 110, 157, 110, 110, 110, 110, 110, 110,
+ 157, 110, 110, 110, 110, 157, 157, 110, 157, 157, 157, 110, 110, 159, 157, 110,
+ 157, 159, 110, 110, 110, 159, 157, 157, 110, 157, 157, 157, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157,
+ 110, 110, 110, 157, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110, 110,
+ 110, 110, 157, 110, 159, 157, 110, 110, 157, 110, 157, 110, 110, 110, 157, 157,
+ 157, 157, 157, 110, 110, 110, 110, 110, 157, 110, 157, 110, 110, 157, 92, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 157, 110, 157, 157, 110, 110, 157, 110, 157, 110, 157, 110,
+ 110, 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110,
+ 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110,
+ 110, 157, 110, 110, 157, 157, 157, 157, 110, 157, 157, 157, 110, 110, 157, 110,
+ 157, 110, 157, 110, 157, 110, 157, 110, 110, 110, 157, 159, 157, 159, 157, 157,
+ 110, 159, 157, 110, 110, 110, 159, 110, 110, 157, 110, 110, 158, 157, 157, 110,
+ 92, 110, 110, 110, 110, 157, 157, 110, 110, 157, 110, 159, 157, 157, 157, 158,
+ 110, 110, 110, 157, 110, 157, 110, 110, 157, 110, 157, 157, 157, 157, 110, 110,
+ 110, 110, 110, 110, 110, 157, 157, 157, 157, 110, 157, 110, 110, 110, 110, 110,
+ 110, 157, 110, 159, 110, 157, 157, 157, 110, 110, 157, 157, 157, 159, 110, 110,
+ 110, 110, 110, 110, 110, 110, 157, 157, 157, 157, 157, 110, 110, 110, 157, 110,
+ 157, 157, 158, 157, 157, 110, 110, 110, 157, 110, 110, 159, 157, 110, 157, 110,
+ 157, 110, 157, 110, 110, 110, 158, 110, 110, 110, 157, 110, 158, 157, 159, 110,
+ 110, 159, 110, 157, 110, 110, 157, 110, 157, 157, 110, 110, 110, 110, 110, 158,
+ 110, 157, 159, 110, 110, 157, 157, 110, 110, 159, 159, 110, 157, 110, 110, 159,
+ 157, 110, 110, 157, 110, 159, 110, 110, 157, 110, 110, 157, 110, 158, 110, 110,
+ 110, 110, 110, 110, 110, 158, 110, 110, 157, 110, 158, 110, 157, 110, 110, 158,
+ 110, 159, 110, 110, 110, 110, 110, 157, 157, 110, 157, 110, 157, 110, 110, 110,
+ 157, 157, 110, 110, 157, 158, 157, 110, 157, 110, 157, 157, 157, 159, 157, 157,
+ 157, 110, 110, 157, 158, 157, 110, 110, 110, 157, 157, 157, 110, 110, 110, 158,
+ 110, 110, 157, 110, 110, 157, 158, 158, 110, 157, 157, 157, 158, 159, 157, 157,
+ 157, 110, 157, 159, 110, 110, 110, 110, 157, 157, 110, 158, 110, 110, 110, 110,
+ 157, 157, 110, 110, 110, 110, 157, 158, 158, 110, 110, 159, 157, 157, 157, 157,
+ 110, 110, 110, 158, 157, 157, 110, 159, 157, 110, 110, 157, 159, 158, 157, 110,
+ 157, 157, 110, 157, 157, 110, 158, 110, 157, 157, 157, 157, 110, 110, 110, 110,
+ 157, 157, 110, 157, 157, 157, 157, 110, 157, 110, 157, 110, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 110, 157, 157, 110, 157, 110, 110, 110, 110, 110, 110,
+ 157, 157, 110, 157, 110, 157, 157, 110, 110, 110, 110, 110, 110, 157, 110, 110,
+ 159, 110, 110, 158, 110, 110, 110, 157, 158, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 159, 157, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 157, 110, 110, 110, 157, 157, 157, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 110, 157, 110, 110, 158, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 159, 158, 159, 157, 157, 159, 157, 110,
+ 157, 159, 110, 157, 110, 157, 110, 157, 159, 110, 110, 110, 110, 110, 110, 158,
+ 157, 157, 159, 110, 157, 110, 110, 158, 157, 157, 159, 157, 158, 157, 157, 110,
+ 158, 159, 110, 110, 157, 157, 159, 159, 110, 110, 158, 110, 110, 110, 159, 157,
+ 110, 159, 158, 110, 110, 110, 110, 159, 110, 158, 110, 158, 110, 157, 157, 157,
+ 159, 157, 157, 158, 158, 157, 110, 110, 157, 157, 158, 110, 158, 157, 110, 159,
+ 158, 110, 157, 110, 158, 110, 158, 157, 110, 110, 110, 110, 110, 110, 158, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 157, 157, 110, 157,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110,
+ 110, 157, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110,
+ 157, 110, 157, 158, 110, 110, 110, 157, 158, 159, 110, 110, 110, 110, 157, 157,
+ 110, 110, 157, 159, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 157, 157, 158, 157, 110, 110,
+ 110, 110, 157, 110, 110, 110, 110, 157, 110, 110, 110, 110, 157, 110, 110, 110,
+ 110, 157, 110, 158, 110, 157, 157, 110, 157, 110, 110, 110, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110,
+ 158, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 159, 110, 110, 110, 110, 159, 157, 157, 157,
+ 110, 157, 157, 157, 110, 158, 110, 110, 110, 110, 110, 110, 157, 158, 110, 110,
+ 110, 110, 110, 110, 110, 157, 157, 110, 110, 158, 158, 110, 110, 110, 110, 110,
+ 157, 110, 157, 157, 159, 110, 157, 110, 110, 110, 110, 157, 110, 110, 157, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 158, 157, 110,
+ 157, 157, 157, 110, 157, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 157,
+ 110, 157, 110, 157, 110, 110, 110, 110, 110, 158, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 158, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157,
+ 110, 110, 110, 158, 157, 110, 92, 159, 110, 110, 110, 110, 110, 110, 157, 110,
+ 110, 110, 159, 157, 110, 158, 157, 157, 110, 110, 158, 110, 110, 110, 110, 159,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110,
+ 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 157, 110, 157, 157, 110,
+ 110, 110, 110, 157, 157, 157, 110, 110, 158, 110, 110, 157, 110, 157, 110, 157,
+ 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 157, 158, 157, 110, 157, 158,
+ 110, 110, 110, 110, 110, 110, 110, 110, 158, 157, 110, 157, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 159, 157, 110, 157, 110, 110, 110, 158,
+ 110, 110, 110, 157, 110, 157, 157, 110, 110, 157, 110, 157, 110, 110, 110, 110,
+ 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 159, 157, 110, 157, 110, 110,
+ 110, 157, 110, 159, 159, 110, 110, 157, 157, 158, 110, 110, 110, 157, 159, 157,
+ 110, 157, 157, 157, 110, 157, 110, 110, 110, 157, 110, 157, 110, 110, 110, 110,
+ 157, 157, 157, 110, 110, 157, 110, 157, 110, 110, 110, 157, 157, 157, 110, 110,
+ 110, 110, 158, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 157, 110, 110,
+ 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 110, 110, 157, 110,
+ 157, 110, 157, 110, 110, 157, 110, 157, 110, 157, 110, 157, 110, 110, 110, 92,
+ 157, 157, 110, 157, 157, 110, 157, 158, 110, 110, 110, 110, 158, 110, 159, 110,
+ 157, 110, 157, 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 157, 110, 159,
+ 110, 157, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110,
+ 159, 110, 110, 157, 157, 110, 110, 157, 157, 157, 110, 110, 157, 110, 110, 110,
+ 110, 157, 110, 157, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 158, 110, 110, 157, 157, 110, 110, 110, 110, 157, 110, 110, 110, 110,
+ 110, 110, 157, 157, 158, 110, 157, 157, 110, 157, 158, 110, 157, 110, 157, 158,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 159, 110, 110, 110, 110,
+ 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 159,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 159, 157, 110, 157, 110, 157, 110,
+ 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 110,
+ 110, 159, 157, 110, 157, 110, 157, 110, 110, 157, 110, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110,
+ 157, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110,
+ 159, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 157,
+ 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 157, 110, 110,
+ 159, 157, 157, 110, 110, 110, 110, 110, 110, 157, 158, 157, 110, 110, 157, 110,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 158, 157, 157, 110, 110, 110,
+ 157, 110, 110, 110, 157, 157, 110, 157, 157, 157, 157, 157, 158, 157, 110, 157,
+ 157, 110, 157, 157, 159, 157, 157, 110, 110, 110, 157, 110, 157, 157, 110, 110,
+ 157, 110, 110, 110, 110, 157, 110, 110, 110, 157, 157, 110, 110, 110, 157, 110,
+ 110, 110, 110, 110, 157, 158, 110, 157, 157, 159, 110, 110, 159, 157, 110, 157,
+ 110, 157, 110, 157, 157, 110, 110, 110, 110, 110, 157, 157, 110, 110, 157, 110,
+ 110, 110, 157, 157, 157, 157, 110, 157, 157, 157, 157, 157, 110, 110, 157, 110,
+ 157, 157, 110, 110, 110, 157, 157, 157, 110, 110, 110, 110, 157, 157, 157, 157,
+ 110, 110, 157, 157, 158, 110, 110, 110, 157, 157, 157, 159, 159, 110, 110, 110,
+ 157, 110, 110, 157, 157, 157, 110, 157, 110, 157, 157, 110, 110, 157, 110, 157,
+ 110, 157, 110, 157, 157, 110, 110, 110, 110, 157, 157, 157, 110, 110, 110, 110,
+ 110, 157, 157, 110, 157, 110, 157, 157, 157, 157, 110, 158, 157, 110, 110, 110,
+ 110, 110, 157, 110, 110, 110, 110, 92, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 157, 157, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110,
+ 157, 157, 157, 157, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 157, 157,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 158, 110,
+ 110, 110, 157, 110, 157, 110, 157, 110, 110, 157, 110, 110, 110, 110, 157, 157,
+ 110, 157, 110, 110, 110, 157, 157, 110, 110, 110, 110, 157, 110, 157, 110, 157,
+ 157, 110, 110, 110, 110, 110, 157, 159, 157, 157, 110, 110, 157, 157, 110, 110,
+ 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 92, 110, 110, 110,
+ 110, 92, 110, 157, 157, 157, 110, 110, 110, 157, 158, 110, 110, 110, 157, 157,
+ 110, 158, 157, 110, 110, 110, 110, 110, 157, 110, 157, 110, 110, 110, 110, 110,
+ 157, 110, 157, 157, 110, 110, 110, 110, 110, 158, 110, 157, 157, 92, 110, 158,
+ 110, 110, 157, 157, 110, 110, 157, 110, 110, 110, 110, 110, 110, 158, 110, 157,
+ 110, 110, 159, 110, 110, 110, 110, 110, 110, 157, 157, 157, 110, 110, 157, 110,
+ 110, 158, 158, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 157,
+ 110, 110, 110, 159, 110, 110, 157, 110, 157, 157, 110, 110, 110, 110, 110, 110,
+ 110, 157, 110, 110, 110, 159, 157, 110, 110, 110, 110, 110, 110, 158, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 157, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 157, 157, 110, 110, 110, 110, 110, 157, 157, 157, 110, 110, 157, 157,
+ 110, 110, 110, 157, 157, 110, 157, 110, 110, 110, 157, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 157, 110, 110, 110, 110, 157, 158, 110, 110, 110, 110, 110,
+ 110, 110, 157, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 158,
+ 110, 110, 110, 157, 157, 157, 110, 110, 157, 110, 157, 157, 157, 157, 110, 159,
+ 158, 110, 159, 157, 110, 157, 157, 110, 157, 157, 157, 157, 157, 110, 110, 110,
+ 158, 157, 110, 157, 157, 157, 110, 159, 110, 157, 157, 110, 110, 110, 110, 110,
+ 158, 157, 110, 110, 110, 159, 110, 110, 157, 110, 110, 110, 110, 110, 159, 110,
+ 110, 157, 157, 110, 110, 110, 92, 110, 110, 110, 110, 110, 110, 158, 110, 159,
+ 110, 157, 157, 110, 158, 157, 110, 157, 110, 158, 158, 158, 158, 110, 110, 110,
+ 157, 110, 110, 110, 158, 157, 157, 157, 110, 157, 110, 110, 110, 157, 110, 110,
+ 110, 157, 110, 158, 158, 157, 110, 110, 110, 159, 110, 158, 157, 157, 157, 110,
+ 157, 110, 110, 110, 157, 110, 159, 110, 110, 157, 157, 157, 110, 159, 110, 157,
+ 110, 157, 157, 157, 110, 157, 110, 158, 110, 110, 110, 157, 110, 110, 158, 110,
+ 110, 110, 110, 159, 110, 157, 110, 157, 110, 110, 110, 158, 110, 159, 110, 158,
+ 157, 110, 110, 158, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 157,
+ 110, 159, 159, 110, 110, 159, 157, 157, 157, 110, 110, 110, 158, 110, 110, 157,
+ 157, 110, 159, 110, 157, 110, 110, 110, 157, 110, 159, 110, 157, 110, 110, 157,
+ 110, 157, 110, 110, 157, 110, 110, 158, 157, 110, 110, 157, 157, 110, 110, 110,
+ 110, 157, 110, 110, 110, 158, 110, 110, 157, 110, 110, 157, 157, 157, 110, 157,
+ 110, 157, 157, 110, 110, 157, 157, 110, 110, 110, 110, 110, 110, 157, 157, 157,
+ 157, 110, 110, 110, 157, 157, 110, 157, 110, 110, 110, 110, 110, 110, 157, 110,
+ 157, 110, 110, 110, 157, 157, 110, 110, 157, 157, 110, 110, 110, 157, 110, 110,
+ 157, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 157, 157, 110, 157, 157,
+ 110, 157, 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 157, 110, 157, 110,
+ 110, 110, 157, 110, 110, 110, 157, 110, 157, 158, 110, 157, 157, 110, 157, 110,
+ 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 157, 157, 110, 110, 110, 159, 157, 157, 110, 110, 110, 110, 157, 110, 159,
+ 110, 157, 157, 110, 110, 158, 110, 159, 110, 157, 157, 110, 157, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 157, 157, 157, 157, 110,
+ 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110,
+ 157, 157, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 92, 110, 110, 110,
+ 110, 157, 110, 110, 110, 110, 157, 157, 110, 157, 110, 159, 110, 157, 110, 110,
+ 110, 92, 110, 110, 110, 110, 110, 110, 157, 110, 157, 110, 110, 110, 157, 110,
+ 157, 110, 110, 110, 110, 110, 110, 157, 157, 110, 158, 110, 110, 110, 110, 157,
+ 159, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 157, 110, 110, 157, 110, 157, 110, 157, 110, 157, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 157, 110, 157, 110, 157, 157, 110, 110, 110, 157, 157, 157, 110, 157, 157, 110,
+ 110, 110, 157, 110, 110, 157, 157, 110, 110, 157, 157, 157, 110, 110, 110, 158,
+ 159, 110, 157, 110, 157, 110, 157, 110, 110, 110, 157, 157, 157, 110, 110, 110,
+ 110, 157, 110, 110, 157, 110, 157, 157, 157, 110, 110, 110, 110, 157, 110, 110,
+ 110, 157, 110, 110, 157, 158, 110, 110, 157, 110, 157, 157, 110, 110, 157, 110,
+ 157, 157, 110, 110, 110, 110, 110, 157, 157, 110, 157, 110, 110, 157, 110, 110,
+ 110, 110, 110, 159, 110, 110, 157, 110, 159, 110, 110, 110, 110, 110, 110, 110,
+ 157, 110, 110, 92, 110, 110, 110, 110, 110, 92, 110, 110, 110, 157, 110, 157,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 157, 110, 157, 110, 157,
+ 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 158, 110,
+ 110, 110, 110, 157, 157, 110, 110, 110, 157, 110, 110, 110, 157, 157, 157, 157,
+ 157, 157, 157, 110, 110, 157, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110,
+ 110, 157, 157, 110, 110, 157, 157, 157, 110, 110, 110, 110, 94, 110, 157, 157,
+ 110, 110, 110, 110, 157, 110, 110, 110, 110, 157, 157, 110, 110, 92, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 158, 110, 110, 157, 157, 157, 110, 157,
+ 157, 110, 157, 110, 110, 110, 158, 110, 157, 110, 110, 110, 110, 110, 157, 110,
+ 157, 110, 110, 157, 110, 110, 159, 110, 110, 110, 110, 110, 157, 110, 110, 110,
+ 110, 110, 157, 110, 110, 110, 157, 110, 157, 110, 110, 110, 110, 110, 157, 110,
+ 110, 110, 110, 110, 157, 158, 157, 110, 110, 110, 157, 110, 110, 110, 157, 110,
+ 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 158, 110, 110,
+ 157, 157, 110, 110, 158, 110, 110, 110, 110, 110, 157, 110, 157, 157, 110, 110,
+ 159, 110, 157, 157, 110, 110, 110, 110, 110, 110, 157, 158, 110, 110, 157, 157,
+ 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 157, 157, 157, 110, 110, 110, 157, 159, 157, 157, 110, 110, 110, 110, 157, 157,
+ 110, 157, 110, 110, 110, 157, 157, 157, 157, 110, 110, 157, 157, 157, 110, 157,
+ 157, 110, 157, 157, 110, 157, 110, 110, 110, 110, 110, 157, 110, 158, 110, 110,
+ 157, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110,
+ 110, 158, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 157, 110, 110, 157,
+ 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 157, 110, 110, 157, 110, 110,
+ 110, 110, 157, 110, 110, 157, 110, 110, 110, 157, 110, 159, 157, 110, 157, 110,
+ 157, 110, 157, 110, 110, 157, 157, 110, 110, 157, 157, 157, 157, 158, 158, 110,
+ 157, 110, 110, 157, 110, 157, 157, 157, 157, 110, 110, 157, 110, 157, 157, 110,
+ 110, 157, 157, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 158, 157, 110, 110, 110, 157, 110, 110, 110, 110, 157, 157, 110, 158, 157, 110,
+ 110, 110, 110, 157, 110, 157, 110, 157, 157, 110, 110, 157, 110, 158, 110, 157,
+ 157, 157, 110, 158, 110, 157, 110, 110, 110, 110, 158, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 157, 110, 158, 110, 157, 110, 110, 110, 110, 110, 110, 110,
+ 110, 158, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 159, 157,
+ 157, 157, 110, 110, 157, 158, 157, 110, 110, 110, 158, 157, 110, 159, 157, 110,
+ 157, 110, 110, 157, 157, 158, 110, 110, 157, 110, 110, 110, 158, 157, 159, 110,
+ 110, 110, 110, 110, 110, 159, 157, 92, 157, 110, 157, 157, 157, 110, 110, 110,
+ 157, 159, 157, 158, 157, 110, 157, 110, 110, 110, 157, 110, 110, 110, 157, 110,
+ 110, 157, 110, 110, 157, 159, 157, 157, 157, 110, 158, 157, 110, 157, 110, 110,
+ 110, 110, 159, 157, 157, 157, 110, 157, 157, 110, 92, 110, 110, 92, 110, 110,
+ 110, 110, 92, 92, 110, 92, 92, 110, 110, 158, 110, 110, 157, 110, 157, 110,
+ 157, 157, 157, 110, 110, 110, 157, 157, 157, 110, 157, 92, 110, 110, 157, 161,
+ 110, 158, 157, 110, 157, 157, 157, 159, 110, 110, 110, 110, 110, 157, 157, 110,
+ 110, 110, 110, 110, 110, 110, 92, 92, 110, 110, 157, 157, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 157, 110, 157, 110, 110,
+ 157, 157, 110, 157, 157, 157, 157, 157, 110, 157, 157, 157, 110, 110, 157, 159,
+ 157, 157, 157, 157, 157, 159, 110, 159, 110, 110, 110, 110, 110, 110, 157, 110,
+ 110, 157, 110, 157, 157, 157, 157, 110, 157, 157, 157, 157, 157, 157, 157, 157,
+ 157, 110, 157, 157, 157, 157, 157, 157, 110, 157, 157, 157, 157, 110, 157, 158,
+ 110, 110, 157, 110, 157, 110, 110, 157, 157, 157, 110, 110, 157, 159, 110, 157,
+ 157, 110, 157, 110, 158, 110, 157, 157, 110, 110, 110, 110, 110, 157, 157, 157,
+ 110, 157, 110, 110, 110, 159, 157, 157, 157, 157, 157, 157, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 157, 110, 157, 110, 110, 157, 110, 110, 110, 110, 110, 157, 157, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 157, 157, 157, 110,
+ 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 110, 157, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 110, 157, 110, 157, 110, 110,
+ 110, 110, 110, 110, 157, 110, 158, 110, 157, 110, 110, 110, 110, 157, 157, 110,
+ 157, 157, 157, 157, 110, 110, 157, 157, 157, 157, 110, 110, 110, 157, 110, 110,
+ 157, 110, 110, 110, 158, 110, 110, 110, 159, 110, 157, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 110, 157, 110, 157, 157, 157, 110, 157, 110, 110, 157, 110,
+ 157, 159, 157, 157, 110, 157, 110, 110, 110, 157, 157, 110, 110, 157, 110, 110,
+ 110, 110, 110, 157, 158, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110,
+ 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 158,
+ 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 157, 157, 157, 110, 159, 157, 110, 157, 110, 110, 110,
+ 157, 157, 157, 110, 157, 157, 110, 157, 110, 157, 157, 110, 158, 157, 157, 110,
+ 157, 157, 157, 110, 110, 157, 157, 158, 110, 157, 110, 110, 157, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 157, 110, 157, 110,
+ 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 157, 157, 110, 110, 110, 157,
+ 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 157, 157, 110, 110, 158,
+ 159, 110, 159, 157, 157, 110, 157, 110, 157, 110, 157, 159, 157, 157, 159, 110,
+ 157, 157, 110, 157, 110, 110, 157, 157, 157, 110, 157, 110, 110, 110, 158, 157,
+ 159, 110, 157, 158, 110, 110, 159, 158, 157, 110, 110, 157, 110, 158, 157, 110,
+ 110, 110, 110, 110, 110, 157, 157, 110, 110, 110, 157, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 159, 158, 157,
+ 158, 157, 110, 110, 110, 110, 157, 157, 110, 157, 157, 110, 110, 110, 157, 157,
+ 157, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 157, 110, 110,
+ 110, 157, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 157, 110, 110,
+ 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 157, 110, 110, 110, 110, 157,
+ 110, 110, 110, 110, 158, 157, 110, 158, 110, 110, 110, 110, 110, 157, 158, 110,
+ 110, 157, 110, 110, 110, 110, 110, 110, 110, 157, 157, 157, 157, 110, 157, 157,
+ 110, 110, 110, 157, 110, 157, 110, 110, 157, 110, 157, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 158, 110, 110, 158, 157,
+ 110, 110, 110, 157, 157, 110, 157, 157, 157, 157, 110, 157, 110, 110, 110, 157,
+ 110, 110, 110, 110, 157, 110, 157, 110, 110, 110, 110, 158, 110, 110, 110, 110,
+ 157, 110, 110, 110, 110, 110, 157, 157, 157, 110, 110, 157, 110, 158, 110, 157,
+ 110, 110, 157, 157, 110, 110, 157, 161, 110, 157, 157, 110, 157, 159, 110, 157,
+ 110, 110, 157, 110, 157, 110, 157, 110, 110, 110, 110, 110, 110, 110, 157, 157,
+ 110, 110, 157, 110, 110, 110, 157, 110, 110, 157, 110, 110, 110, 110, 110, 92,
+ 92, 92, 92, 92, 158, 157, 157, 157, 157, 157, 110, 157, 110, 110, 159, 110,
+ 158, 110, 110, 157, 157, 157, 110, 159, 110, 110, 157, 110, 157, 110, 157, 110,
+ 110, 110, 157, 110, 157, 110, 157, 110, 157, 110, 110, 157, 157, 158, 157, 157,
+ 157, 110, 157, 110, 110, 110, 110, 157, 157, 110, 110, 110, 110, 110, 157, 110,
+ 110, 159, 110, 110, 110, 110, 157, 110, 157, 157, 110, 110, 157, 158, 110, 110,
+ 157, 157, 110, 110, 110, 110, 157, 110, 110, 110, 157, 110, 157, 157, 110, 157,
+ 110, 110, 110, 110, 157, 157, 110, 110, 110, 158, 157, 110, 110, 157, 110, 157,
+ 159, 110, 157, 92, 92, 92, 92, 92, 92, 92, 110, 110, 110, 110, 110, 110,
+ 110, 110, 157, 157, 110, 110, 157, 110, 110, 157, 157, 157, 110, 110, 157, 110,
+ 110, 110, 110, 110, 158, 157, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 157,
+ 110, 110, 110, 157, 110, 110, 110, 157, 110, 157, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 157, 110, 110, 157, 110, 157, 110, 110, 110,
+ 110, 158, 110, 110, 110, 110, 110, 110, 110, 110, 157, 110, 158, 110, 157, 110,
+ 110, 110, 110, 110, 110, 110, 157, 157, 157, 110, 110, 110, 110, 110, 92, 110,
+ 110, 110, 110, 110, 110, 157, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 122, 122, 162, 122, 163, 164, 92, 165, 122, 122, 122, 122, 166, 122, 167, 168,
+ 169, 122, 162, 130, 122, 122, 122, 113, 122, 122, 170, 130, 170, 130, 122, 171,
+ 161, 172, 173, 162, 174, 130, 142, 130, 174, 92, 175, 176, 170, 122, 177, 162,
+ 176, 178, 122, 168, 130, 162, 175, 94, 122, 122, 130, 122, 178, 179, 130, 175,
+ 162, 162, 180, 122, 162, 122, 161, 166, 96, 179, 92, 122, 130, 122, 122, 122,
+ 130, 162, 96, 96, 173, 113, 122, 181, 122, 122, 182, 94, 166, 122, 122, 122,
+ 130, 130, 181, 164, 92, 92, 130, 92, 164, 176, 94, 183, 92, 183, 92, 92,
+ 130, 184, 92, 122, 162, 162, 183, 183, 94, 164, 92, 92, 92, 92, 122, 177,
+ 172, 160, 121, 168, 168, 172, 122, 160, 122, 175, 113, 122, 122, 166, 122, 173,
+ 183, 122, 122, 185, 122, 122, 162, 164, 186, 142, 170, 122, 181, 164, 121, 169,
+ 187, 122, 122, 161, 122, 122, 122, 130, 122, 130, 92, 122, 122, 122, 122, 164,
+ 181, 161, 173, 169, 92, 130, 180, 160, 92, 177, 122, 170, 160, 92, 161, 170,
+ 122, 122, 167, 176, 122, 173, 169, 122, 168, 185, 122, 122, 161, 122, 175, 181,
+ 162, 130, 92, 130, 122, 122, 122, 122, 122, 122, 177, 162, 168, 165, 169, 122,
+ 164, 166, 162, 122, 122, 122, 161, 161, 166, 168, 170, 170, 130, 113, 172, 164,
+ 122, 177, 122, 176, 168, 166, 122, 165, 160, 161, 161, 122, 161, 176, 162, 176,
+ 177, 122, 177, 163, 168, 168, 161, 161, 177, 122, 122, 188, 162, 122, 165, 122,
+ 122, 122, 177, 168, 168, 171, 164, 189, 185, 176, 175, 130, 181, 178, 130, 130,
+ 130, 92, 185, 92, 130, 130, 130, 130, 160, 94, 130, 130, 168, 168, 162, 122,
+ 169, 164, 179, 177, 122, 164, 122, 163, 122, 163, 122, 177, 122, 122, 177, 168,
+ 164, 168, 163, 122, 161, 160, 122, 121, 188, 177, 161, 163, 177, 122, 122, 122,
+ 122, 122, 177, 167, 171, 122, 177, 169, 166, 122, 122, 122, 122, 169, 169, 166,
+ 176, 168, 168, 176, 185, 130, 161, 185, 161, 122, 177, 168, 176, 161, 177, 122,
+ 122, 162, 160, 122, 185, 142, 165, 177, 177, 177, 188, 169, 167, 177, 190, 122,
+ 168, 191, 177, 122, 192, 177, 121, 168, 122, 166, 193, 122, 164, 122, 164, 122,
+ 177, 122, 177, 164, 166, 168, 121, 166, 180, 162, 177, 122, 168, 122, 177, 164,
+ 184, 181, 160, 173, 92, 130, 130, 130, 170, 130, 130, 153, 130, 113, 122, 122,
+ 160, 161, 177, 168, 161, 122, 121, 171, 161, 177, 168, 177, 162, 163, 164, 122,
+ 177, 177, 121, 122, 122, 166, 164, 168, 163, 191, 122, 177, 163, 177, 122, 176,
+ 169, 122, 164, 194, 180, 161, 168, 122, 169, 168, 122, 178, 166, 122, 96, 122,
+ 188, 122, 162, 184, 153, 172, 130, 161, 130, 130, 130, 92, 168, 130, 122, 122,
+ 164, 129, 163, 122, 168, 180, 178, 168, 122, 160, 122, 161, 164, 163, 169, 164,
+ 171, 162, 195, 160, 164, 178, 121, 177, 160, 121, 162, 121, 176, 122, 177, 169,
+ 164, 121, 122, 177, 169, 168, 121, 177, 176, 122, 122, 177, 192, 164, 191, 122,
+ 168, 122, 177, 121, 196, 169, 122, 191, 122, 169, 122, 121, 165, 122, 174, 168,
+ 177, 168, 164, 177, 94, 177, 181, 168, 161, 181, 130, 197, 96, 92, 130, 161,
+ 177, 177, 164, 122, 161, 177, 177, 122, 165, 121, 177, 168, 176, 168, 176, 122,
+ 181, 177, 164, 177, 161, 122, 172, 177, 160, 164, 122, 168, 122, 168, 168, 177,
+ 177, 168, 177, 177, 168, 122, 163, 162, 168, 168, 177, 168, 175, 171, 168, 97,
+ 177, 164, 178, 168, 121, 121, 122, 96, 196, 161, 97, 173, 161, 142, 130, 130,
+ 122, 163, 168, 177, 162, 122, 162, 168, 179, 161, 162, 168, 168, 122, 177, 164,
+ 182, 121, 177, 162, 177, 168, 171, 161, 121, 121, 142, 177, 177, 168, 177, 162,
+ 162, 162, 171, 185, 92, 130, 160, 130, 130, 130, 164, 161, 122, 121, 168, 171,
+ 177, 168, 122, 121, 178, 121, 168, 121, 168, 164, 166, 96, 161, 177, 121, 168,
+ 162, 168, 178, 164, 177, 121, 168, 171, 168, 180, 180, 168, 164, 172, 171, 122,
+ 163, 121, 161, 177, 177, 121, 122, 168, 164, 160, 122, 168, 164, 177, 196, 163,
+ 168, 160, 164, 178, 177, 121, 166, 122, 177, 171, 168, 161, 185, 122, 169, 177,
+ 168, 171, 162, 185, 160, 169, 177, 161, 168, 121, 162, 122, 160, 168, 177, 194,
+ 121, 198, 142, 177, 121, 97, 192, 166, 171, 121, 168, 166, 177, 163, 163, 161,
+ 171, 168, 122, 168, 142, 142, 181, 177, 142, 162, 178, 164, 177, 164, 164, 121,
+ 168, 122, 168, 162, 168, 168, 168, 164, 164, 168, 121, 160, 162, 177, 168, 164,
+ 168, 177, 121, 171, 177, 177, 161, 121, 171, 177, 180, 142, 121, 168, 161, 169,
+ 122, 122, 162, 122, 122, 122, 122, 121, 122, 122, 164, 122, 121, 122, 196, 162,
+ 181, 173, 121, 162, 169, 176, 179, 171, 162, 97, 167, 97, 122, 97, 97, 177,
+ 160, 97, 122, 97, 164, 122, 164, 126, 122, 121, 198, 122, 122, 122, 122, 92,
+ 130, 122, 161, 130, 170, 122, 122, 122, 122, 179, 92, 130, 122, 130, 164, 161,
+ 122, 130, 175, 162, 164, 184, 198, 168, 170, 169, 121, 164, 184, 122, 162, 178,
+ 181, 142, 122, 178, 168, 122, 175, 122, 177, 184, 94, 130, 170, 164, 168, 161,
+ 122, 164, 169, 164, 169, 122, 181, 94, 172, 113, 121, 187, 122, 162, 92, 130,
+ 169, 167, 175, 175, 172, 175, 122, 122, 163, 168, 162, 130, 166, 122, 177, 162,
+ 130, 161, 164, 160, 165, 178, 122, 179, 177, 186, 168, 122, 122, 121, 168, 174,
+ 168, 174, 163, 163, 168, 162, 181, 168, 177, 161, 161, 175, 121, 122, 191, 160,
+ 169, 122, 163, 161, 179, 164, 113, 113, 161, 113, 113, 130, 161, 175, 162, 130,
+ 122, 121, 162, 176, 163, 167, 122, 162, 122, 122, 122, 130, 170, 122, 172, 130,
+ 122, 176, 90, 122, 181, 163, 122, 122, 122, 168, 122, 172, 168, 130, 122, 161,
+ 168, 122, 176, 177, 181, 164, 176, 122, 189, 130, 130, 130, 168, 122, 168, 160,
+ 179, 168, 162, 161, 122, 121, 160, 172, 176, 122, 121, 173, 92, 130, 122, 161,
+ 122, 177, 177, 167, 160, 177, 122, 122, 122, 199, 122, 122, 163, 130, 161, 130,
+ 130, 96, 130, 122, 178, 164, 168, 121, 161, 177, 122, 121, 122, 122, 97, 181,
+ 130, 130, 168, 161, 122, 177, 122, 163, 162, 160, 177, 121, 176, 126, 167, 177,
+ 163, 192, 168, 181, 181, 184, 162, 173, 160, 122, 122, 168, 168, 168, 177, 122,
+ 181, 113, 122, 172, 142, 121, 161, 171, 177, 163, 168, 168, 168, 122, 161, 122,
+ 177, 185, 176, 121, 168, 162, 161, 121, 122, 121, 171, 168, 177, 121, 161, 94,
+ 179, 121, 200, 176, 172, 162, 177, 177, 177, 168, 163, 122, 164, 173, 173, 122,
+ 122, 170, 130, 122, 201, 162, 177, 162, 179, 122, 122, 122, 169, 167, 168, 162,
+ 162, 202, 130, 173, 181, 172, 162, 162, 162, 172, 162, 171, 178, 164, 122, 173,
+ 177, 121, 168, 122, 164, 198, 162, 122, 162, 122, 161, 130, 163, 180, 161, 164,
+ 179, 163, 122, 168, 164, 121, 192, 142, 122, 121, 92, 188, 162, 121, 121, 122,
+ 172, 163, 121, 121, 122, 162, 142, 181, 162, 177, 164, 168, 162, 161, 161, 168,
+ 176, 177, 181, 121, 177, 121, 162, 177, 121, 187, 122, 126, 168, 161, 122, 122,
+ 189, 153, 113, 164, 161, 122, 169, 161, 122, 168, 177, 177, 162, 122, 168, 122,
+ 122, 177, 168, 162, 161, 122, 122, 122, 162, 122, 167, 162, 177, 169, 164, 177,
+ 122, 122, 168, 122, 161, 164, 130, 163, 162, 162, 122, 162, 182, 177, 130, 121,
+ 177, 142, 163, 172, 168, 164, 161, 168, 172, 122, 184, 175, 177, 177, 176, 122,
+ 121, 122, 182, 122, 126, 169, 181, 122, 122, 122, 122, 164, 177, 180, 170, 173,
+ 161, 122, 122, 122, 121, 173, 130, 122, 181, 162, 122, 162, 122, 160, 122, 179,
+ 122, 176, 130, 166, 170, 164, 122, 179, 183, 175, 92, 130, 177, 163, 169, 122,
+ 122, 122, 177, 169, 186, 122, 161, 122, 169, 171, 173, 142, 168, 203, 182, 122,
+ 161, 92, 167, 162, 122, 130, 173, 162, 162, 173, 168, 173, 130, 130, 177, 168,
+ 92, 92, 168, 193, 177, 130, 178, 168, 165, 177, 122, 161, 168, 176, 168, 122,
+ 198, 162, 170, 130, 177, 122, 186, 168, 175, 175, 163, 163, 168, 121, 175, 162,
+ 172, 161, 171, 181, 177, 162, 175, 164, 162, 168, 164, 122, 92, 162, 161, 130,
+ 162, 179, 175, 121, 161, 163, 92, 92, 122, 122, 122, 122, 175, 122, 181, 162,
+ 160, 170, 163, 162, 122, 164, 122, 122, 170, 175, 163, 122, 161, 164, 162, 169,
+ 174, 180, 121, 122, 122, 122, 176, 162, 169, 122, 122, 122, 122, 122, 169, 122,
+ 122, 122, 122, 122, 161, 176, 175, 175, 122, 173, 113, 96, 96, 130, 94, 161,
+ 161, 169, 162, 122, 122, 161, 96, 168, 122, 122, 122, 142, 122, 122, 122, 122,
+ 122, 122, 96, 174, 94, 173, 179, 130, 168, 168, 163, 122, 168, 122, 96, 122,
+ 122, 174, 161, 179, 168, 168, 122, 176, 166, 122, 177, 122, 169, 169, 169, 174,
+ 168, 176, 179, 126, 189, 176, 142, 168, 122, 122, 161, 122, 122, 178, 122, 161,
+ 169, 168, 121, 176, 164, 168, 169, 177, 122, 181, 122, 179, 161, 163, 142, 177,
+ 173, 196, 130, 130, 185, 130, 130, 130, 130, 130, 161, 130, 130, 92, 162, 181,
+ 168, 168, 176, 168, 166, 168, 166, 177, 122, 163, 198, 177, 168, 163, 162, 168,
+ 178, 122, 185, 122, 177, 122, 169, 169, 96, 161, 168, 122, 122, 122, 168, 177,
+ 122, 177, 185, 162, 169, 163, 122, 168, 177, 164, 161, 169, 122, 177, 122, 175,
+ 122, 177, 169, 160, 179, 176, 176, 94, 168, 130, 96, 130, 182, 130, 160, 164,
+ 168, 177, 178, 179, 186, 178, 176, 176, 122, 176, 176, 122, 122, 166, 177, 169,
+ 168, 176, 172, 122, 179, 161, 168, 177, 122, 163, 177, 176, 178, 122, 178, 176,
+ 122, 122, 169, 168, 122, 168, 166, 169, 122, 122, 164, 160, 179, 174, 176, 185,
+ 179, 130, 130, 130, 130, 130, 168, 130, 113, 130, 179, 92, 130, 130, 185, 130,
+ 177, 121, 178, 94, 168, 122, 169, 185, 122, 169, 176, 168, 162, 122, 122, 163,
+ 161, 168, 122, 185, 161, 161, 164, 168, 168, 161, 122, 168, 176, 169, 162, 166,
+ 164, 176, 160, 168, 180, 177, 122, 122, 177, 176, 168, 168, 177, 163, 191, 169,
+ 122, 185, 168, 160, 169, 162, 113, 168, 160, 161, 168, 130, 183, 92, 94, 92,
+ 130, 92, 130, 170, 130, 94, 168, 96, 160, 161, 166, 163, 96, 168, 169, 122,
+ 185, 122, 177, 169, 168, 191, 177, 96, 142, 178, 161, 177, 166, 162, 122, 179,
+ 178, 176, 92, 96, 122, 178, 122, 182, 168, 174, 176, 168, 181, 177, 168, 121,
+ 166, 177, 168, 198, 161, 96, 122, 142, 164, 161, 164, 162, 169, 172, 188, 97,
+ 162, 176, 168, 121, 176, 185, 176, 130, 161, 94, 96, 160, 130, 130, 130, 92,
+ 92, 160, 160, 160, 92, 185, 185, 185, 130, 94, 161, 169, 122, 168, 169, 177,
+ 122, 166, 176, 169, 122, 161, 193, 122, 166, 122, 122, 169, 168, 168, 177, 166,
+ 94, 166, 177, 177, 176, 168, 161, 164, 122, 122, 121, 161, 122, 122, 181, 169,
+ 161, 168, 168, 177, 177, 168, 168, 122, 178, 198, 121, 121, 121, 177, 121, 161,
+ 153, 96, 171, 96, 160, 185, 113, 130, 92, 170, 160, 96, 94, 130, 130, 177,
+ 168, 163, 168, 177, 167, 122, 171, 121, 168, 176, 168, 177, 166, 185, 171, 168,
+ 168, 176, 166, 176, 165, 168, 185, 163, 182, 168, 121, 177, 122, 185, 163, 122,
+ 92, 96, 177, 122, 122, 96, 96, 97, 96, 177, 179, 130, 170, 92, 161, 96,
+ 160, 94, 185, 130, 161, 170, 171, 169, 161, 178, 168, 160, 168, 122, 122, 177,
+ 96, 185, 168, 161, 168, 163, 121, 161, 176, 122, 162, 161, 185, 171, 176, 166,
+ 171, 163, 177, 168, 121, 168, 142, 121, 184, 162, 92, 169, 168, 168, 179, 96,
+ 160, 94, 160, 170, 130, 94, 161, 185, 161, 142, 168, 161, 166, 179, 97, 121,
+ 171, 184, 122, 177, 122, 177, 122, 163, 178, 176, 168, 176, 162, 177, 168, 176,
+ 177, 177, 178, 182, 164, 168, 177, 161, 168, 177, 168, 164, 167, 174, 169, 163,
+ 172, 161, 160, 126, 174, 92, 161, 96, 185, 96, 168, 113, 130, 94, 177, 161,
+ 177, 163, 176, 177, 169, 97, 177, 161, 122, 176, 169, 122, 169, 177, 168, 171,
+ 168, 176, 177, 168, 121, 162, 96, 168, 142, 97, 153, 179, 170, 161, 168, 168,
+ 142, 168, 168, 168, 177, 176, 165, 142, 162, 160, 172, 182, 177, 168, 96, 169,
+ 97, 161, 160, 185, 181, 171, 161, 168, 168, 177, 177, 161, 168, 177, 163, 163,
+ 181, 94, 113, 130, 94, 121, 177, 177, 171, 162, 168, 177, 191, 177, 121, 179,
+ 161, 182, 168, 177, 121, 168, 142, 176, 161, 160, 161, 161, 122, 168, 177, 94,
+ 142, 142, 142, 178, 161, 177, 168, 161, 142, 171, 190, 177, 171, 191, 113, 162,
+ 162, 121, 161, 178, 185, 92, 94, 167, 181, 162, 122, 122, 162, 176, 122, 166,
+ 122, 166, 170, 181, 176, 177, 164, 177, 162, 161, 97, 176, 161, 174, 178, 160,
+ 122, 174, 181, 181, 130, 130, 164, 177, 161, 165, 122, 161, 161, 175, 130, 169,
+ 172, 177, 177, 122, 122, 161, 130, 177, 122, 169, 166, 121, 177, 121, 161, 181,
+ 92, 162, 121, 121, 168, 163, 121, 161, 121, 92, 177, 177, 167, 163, 168, 122,
+ 177, 161, 177, 166, 164, 162, 113, 181, 122, 176, 166, 92, 176, 122, 166, 176,
+ 122, 161, 160, 176, 177, 161, 161, 113, 113, 130, 130, 122, 161, 164, 176, 163,
+ 122, 168, 186, 160, 161, 177, 163, 122, 161, 168, 122, 168, 166, 190, 122, 169,
+ 122, 122, 177, 161, 160, 161, 161, 179, 161, 161, 130, 170, 130, 130, 130, 179,
+ 130, 122, 177, 161, 122, 164, 122, 163, 166, 169, 122, 166, 92, 166, 204, 166,
+ 191, 177, 168, 166, 177, 191, 185, 176, 161, 162, 182, 166, 190, 168, 182, 172,
+ 168, 164, 122, 176, 130, 130, 130, 92, 205, 113, 160, 122, 166, 160, 161, 168,
+ 160, 161, 173, 122, 177, 177, 161, 177, 168, 177, 177, 185, 163, 177, 177, 177,
+ 122, 174, 122, 122, 167, 168, 173, 174, 164, 206, 153, 130, 164, 130, 96, 92,
+ 113, 92, 130, 113, 170, 168, 168, 161, 166, 168, 168, 160, 168, 177, 160, 168,
+ 181, 168, 96, 122, 160, 161, 178, 191, 193, 161, 161, 122, 177, 161, 122, 166,
+ 168, 161, 167, 113, 169, 166, 113, 94, 130, 130, 130, 161, 178, 174, 163, 122,
+ 122, 177, 168, 178, 176, 168, 163, 177, 161, 177, 161, 92, 168, 166, 168, 179,
+ 191, 168, 168, 168, 165, 177, 177, 121, 166, 122, 122, 168, 180, 166, 163, 164,
+ 165, 168, 122, 163, 177, 121, 122, 185, 191, 188, 121, 167, 177, 166, 168, 161,
+ 168, 130, 160, 161, 168, 202, 92, 92, 161, 167, 161, 177, 168, 142, 192, 164,
+ 176, 122, 160, 168, 122, 168, 163, 191, 168, 168, 122, 161, 168, 177, 168, 121,
+ 122, 121, 177, 168, 121, 122, 168, 168, 168, 177, 198, 168, 161, 178, 161, 177,
+ 153, 113, 92, 92, 170, 161, 92, 160, 168, 177, 121, 121, 176, 166, 168, 191,
+ 164, 122, 142, 168, 122, 177, 161, 121, 122, 178, 121, 168, 160, 168, 122, 163,
+ 161, 204, 121, 168, 191, 185, 161, 164, 177, 172, 161, 169, 179, 97, 92, 168,
+ 113, 168, 172, 160, 168, 121, 168, 161, 164, 121, 168, 168, 191, 97, 122, 177,
+ 176, 166, 168, 122, 161, 122, 168, 177, 177, 192, 171, 168, 164, 164, 168, 177,
+ 177, 168, 173, 122, 177, 161, 164, 181, 168, 170, 170, 161, 121, 177, 129, 122,
+ 177, 177, 164, 168, 161, 168, 171, 160, 122, 190, 160, 178, 168, 161, 121, 168,
+ 160, 177, 164, 121, 161, 160, 94, 161, 113, 113, 180, 198, 166, 168, 121, 168,
+ 161, 122, 177, 161, 164, 122, 168, 121, 177, 168, 181, 94, 113, 164, 188, 168,
+ 164, 122, 177, 121, 177, 122, 177, 113, 121, 121, 177, 168, 172, 177, 121, 121,
+ 160, 162, 171, 168, 122, 113, 161, 168, 168, 171, 92, 122, 122, 92, 184, 121,
+ 175, 181, 172, 174, 168, 161, 130, 181, 92, 122, 121, 198, 178, 121, 168, 168,
+ 161, 161, 175, 168, 179, 163, 177, 170, 161, 181, 172, 164, 177, 185, 168, 122,
+ 181, 160, 177, 162, 190, 122, 122, 168, 181, 122, 122, 113, 122, 162, 92, 179,
+ 97, 162, 121, 164, 176, 169, 161, 122, 162, 122, 122, 122, 178, 122, 122, 166,
+ 164, 122, 172, 162, 179, 162, 164, 122, 169, 130, 130, 92, 185, 161, 121, 162,
+ 168, 130, 130, 162, 122, 168, 162, 122, 122, 122, 168, 173, 161, 161, 122, 122,
+ 121, 122, 164, 177, 122, 122, 130, 122, 169, 162, 122, 164, 168, 164, 164, 162,
+ 122, 177, 122, 164, 161, 187, 161, 121, 181, 142, 121, 191, 196, 188, 121, 162,
+ 168, 168, 177, 122, 122, 163, 176, 168, 122, 176, 161, 177, 177, 122, 168, 168,
+ 168, 169, 122, 122, 122, 168, 173, 130, 130, 160, 122, 162, 164, 169, 177, 168,
+ 168, 92, 176, 122, 160, 162, 122, 192, 168, 122, 160, 181, 161, 142, 96, 163,
+ 168, 168, 168, 169, 176, 122, 168, 177, 122, 130, 130, 130, 198, 164, 176, 176,
+ 163, 168, 167, 171, 168, 168, 168, 163, 160, 122, 177, 122, 177, 168, 122, 161,
+ 168, 177, 161, 191, 163, 97, 122, 168, 177, 198, 176, 122, 168, 171, 168, 168,
+ 122, 122, 176, 122, 122, 161, 168, 173, 96, 198, 122, 168, 122, 192, 177, 164,
+ 168, 168, 161, 176, 177, 169, 121, 164, 122, 168, 121, 172, 129, 168, 191, 163,
+ 160, 177, 177, 168, 177, 168, 178, 177, 203, 179, 168, 122, 168, 168, 168, 122,
+ 177, 122, 160, 122, 189, 130, 130, 130, 130, 169, 168, 160, 176, 163, 162, 168,
+ 161, 122, 163, 176, 161, 168, 168, 168, 122, 168, 181, 126, 122, 161, 177, 122,
+ 122, 160, 161, 176, 163, 122, 161, 182, 162, 122, 163, 160, 160, 177, 168, 181,
+ 162, 173, 130, 168, 130, 178, 122, 168, 168, 168, 161, 161, 122, 160, 168, 161,
+ 169, 121, 168, 168, 177, 163, 122, 177, 177, 122, 96, 161, 177, 168, 161, 161,
+ 177, 168, 168, 168, 160, 166, 168, 168, 168, 160, 122, 168, 168, 168, 177, 168,
+ 168, 160, 122, 163, 168, 177, 121, 166, 160, 168, 169, 160, 178, 177, 160, 161,
+ 168, 160, 92, 161, 130, 173, 130, 176, 168, 160, 166, 177, 168, 168, 163, 169,
+ 161, 160, 160, 168, 168, 161, 160, 161, 160, 161, 168, 177, 168, 161, 168, 168,
+ 177, 160, 122, 177, 168, 168, 163, 168, 161, 163, 122, 122, 177, 168, 177, 177,
+ 163, 160, 177, 161, 195, 168, 168, 171, 161, 168, 173, 160, 177, 92, 168, 168,
+ 168, 177, 176, 176, 168, 166, 168, 168, 166, 168, 177, 177, 142, 142, 169, 177,
+ 168, 122, 122, 160, 191, 161, 177, 168, 177, 122, 168, 178, 122, 168, 160, 163,
+ 181, 161, 130, 160, 130, 168, 169, 142, 96, 168, 177, 168, 166, 168, 168, 168,
+ 166, 122, 168, 169, 160, 177, 122, 161, 168, 122, 177, 185, 168, 168, 177, 161,
+ 160, 130, 94, 168, 168, 171, 177, 168, 168, 168, 172, 142, 161, 177, 160, 168,
+ 164, 177, 168, 168, 161, 194, 161, 168, 171, 122, 161, 121, 121, 160, 161, 168,
+ 168, 160, 161, 168, 168, 161, 165, 166, 161, 177, 168, 177, 161, 171, 168, 160,
+ 168, 177, 181, 168, 97, 177, 168, 168, 168, 161, 121, 160, 178, 177, 168, 168,
+ 142, 161, 167, 161, 176, 161, 113, 173, 171, 161, 161, 161, 168, 168, 178, 168,
+ 122, 182, 161, 121, 160, 178, 160, 168, 168, 161, 160, 177, 177, 168, 168, 160,
+ 122, 122, 162, 96, 122, 122, 177, 122, 122, 130, 122, 169, 122, 122, 162, 122,
+ 161, 92, 185, 122, 122, 167, 175, 161, 182, 122, 173, 121, 185, 94, 177, 162,
+ 122, 122, 168, 169, 160, 122, 160, 168, 121, 161, 122, 168, 193, 176, 164, 171,
+ 175, 166, 160, 169, 166, 122, 164, 122, 122, 122, 162, 122, 122, 181, 177, 122,
+ 182, 162, 168, 192, 164, 165, 204, 122, 122, 122, 122, 122, 122, 175, 179, 172,
+ 130, 130, 122, 122, 122, 122, 122, 168, 177, 162, 170, 173, 191, 177, 121, 162,
+ 122, 162, 162, 122, 122, 122, 122, 164, 122, 122, 162, 161, 164, 130, 130, 122,
+ 191, 177, 122, 198, 122, 122, 122, 122, 161, 113, 168, 168, 122, 177, 168, 162,
+ 122, 168, 122, 122, 180, 160, 177, 193, 177, 177, 164, 181, 161, 184, 122, 122,
+ 177, 122, 121, 168, 122, 122, 121, 121, 122, 121, 168, 121, 126, 92, 122, 191,
+ 169, 177, 168, 172, 162, 121, 121, 161, 122, 173, 122, 130, 130, 164, 181, 175,
+ 161, 122, 113, 168, 122, 172, 184, 121, 121, 122, 122, 121, 177, 121, 121, 122,
+ 168, 122, 168, 172, 179, 185, 122, 162, 173, 195, 169, 161, 170, 130, 163, 177,
+ 172, 161, 169, 182, 122, 185, 162, 130, 180, 162, 168, 164, 176, 113, 162, 161,
+ 177, 122, 162, 168, 130, 162, 164, 97, 122, 122, 122, 165, 122, 184, 122, 122,
+ 122, 169, 130, 92, 168, 122, 121, 168, 122, 179, 175, 122, 168, 121, 122, 169,
+ 169, 122, 161, 172, 168, 122, 168, 161, 97, 166, 162, 195, 171, 97, 175, 161,
+ 122, 184, 188, 166, 121, 122, 130, 177, 171, 177, 168, 161, 121, 177, 167, 122,
+ 162, 122, 92, 168, 177, 162, 113, 161, 161, 122, 166, 177, 177, 162, 168, 130,
+ 161, 130, 130, 92, 161, 160, 168, 162, 166, 168, 177, 168, 169, 185, 161, 177,
+ 122, 122, 177, 168, 169, 168, 130, 130, 130, 170, 170, 130, 179, 177, 160, 177,
+ 177, 121, 166, 166, 168, 168, 177, 168, 178, 122, 177, 122, 165, 185, 168, 168,
+ 168, 122, 162, 122, 164, 192, 178, 122, 122, 161, 193, 181, 113, 130, 200, 130,
+ 183, 179, 94, 92, 130, 113, 168, 178, 168, 177, 168, 166, 168, 161, 168, 168,
+ 168, 160, 176, 168, 168, 161, 168, 177, 168, 122, 168, 168, 161, 164, 168, 168,
+ 200, 184, 161, 92, 130, 179, 173, 92, 122, 172, 169, 161, 168, 169, 177, 198,
+ 122, 177, 162, 161, 188, 161, 121, 168, 168, 168, 181, 122, 161, 121, 161, 168,
+ 168, 171, 130, 130, 92, 92, 176, 122, 161, 161, 161, 178, 168, 191, 122, 168,
+ 160, 121, 177, 161, 122, 172, 122, 121, 172, 121, 178, 169, 161, 168, 185, 178,
+ 168, 161, 142, 177, 176, 168, 166, 190, 168, 122, 161, 162, 160, 130, 185, 160,
+ 168, 177, 168, 168, 176, 168, 168, 168, 168, 177, 168, 161, 168, 166, 179, 177,
+ 168, 168, 177, 177, 161, 168, 163, 96, 163, 168, 166, 165, 122, 161, 178, 161,
+ 121, 177, 178, 161, 92, 177, 94, 160, 130, 177, 92, 179, 113, 130, 168, 162,
+ 164, 162, 177, 168, 164, 168, 161, 168, 168, 122, 162, 185, 165, 164, 161, 122,
+ 182, 168, 168, 113, 170, 161, 113, 168, 161, 177, 177, 161, 168, 168, 177, 177,
+ 168, 177, 167, 164, 142, 94, 168, 121, 177, 168, 177, 198, 181, 168, 160, 161,
+ 181, 161, 177, 177, 171, 177, 161, 168, 161, 166, 168, 164, 168, 122, 168, 177,
+ 191, 168, 180, 161, 160, 161, 161, 177, 168, 168, 194, 163, 178, 168, 178, 168,
+ 177, 168, 177, 161, 177, 168, 160, 167, 188, 163, 121, 161, 121, 121, 161, 161,
+ 168, 160, 168, 177, 161, 130, 168, 177, 161, 142, 161, 177, 181, 122, 162, 168,
+ 164, 168, 121, 181, 97, 168, 121, 160, 177, 162, 92, 175, 92, 122, 122, 168,
+ 177, 122, 129, 181, 164, 122, 122, 122, 122, 206, 92, 122, 92, 92, 122, 130,
+ 168, 122, 122, 122, 122, 172, 161, 122, 162, 177, 161, 181, 92, 122, 122, 168,
+ 164, 130, 122, 122, 168, 130, 122, 162, 173, 160, 168, 172, 122, 162, 168, 130,
+ 130, 122, 163, 161, 166, 176, 122, 168, 176, 165, 169, 122, 130, 122, 161, 171,
+ 177, 168, 168, 168, 168, 121, 130, 130, 177, 168, 161, 121, 161, 122, 174, 181,
+ 181, 130, 164, 121, 168, 164, 121, 169, 122, 161, 161, 130, 130, 122, 177, 183,
+ 121, 168, 179, 142, 165, 122, 161, 196, 160, 162, 168, 177, 122, 168, 178, 168,
+ 162, 162, 161, 168, 169, 122, 162, 142, 177, 168, 161, 176, 177, 168, 174, 121,
+ 168, 122, 122, 121, 113, 161, 168, 168, 177, 168, 177, 171, 177, 177, 177, 168,
+ 177, 161, 122, 122, 122, 178, 169, 195, 122, 121, 175, 122, 122, 122, 121, 175,
+ 166, 181, 168, 172, 165, 161, 170, 122, 168, 168, 122, 166, 168, 168, 162, 122,
+ 173, 130, 161, 130, 130, 122, 169, 122, 161, 173, 122, 168, 122, 161, 130, 130,
+ 122, 161, 177, 168, 177, 166, 122, 122, 177, 161, 177, 121, 177, 122, 168, 161,
+ 168, 177, 168, 166, 168, 122, 122, 122, 122, 185, 161, 161, 92, 163, 190, 164,
+ 161, 142, 121, 113, 97, 168, 177, 168, 121, 122, 122, 177, 177, 160, 177, 181,
+ 198, 166, 166, 122, 177, 177, 122, 168, 168, 168, 121, 165, 177, 142, 177, 121,
+ 121, 178, 121, 121, 92, 177, 168, 168, 167, 178, 173, 162, 121, 161, 168, 168,
+ 181, 178, 168, 121, 175, 161, 122, 122, 172, 160, 122, 198, 172, 161, 169, 169,
+ 130, 122, 166, 184, 122, 168, 164, 177, 176, 113, 122, 169, 172, 172, 163, 122,
+ 113, 199, 97, 122, 121, 122, 113, 122, 122, 162, 168, 122, 162, 177, 161, 122,
+ 130, 164, 177, 177, 177, 175, 122, 122, 177, 122, 130, 162, 162, 169, 177, 184,
+ 177, 122, 161, 168, 164, 121, 177, 142, 178, 173, 207, 164, 122, 162, 181, 162,
+ 166, 113, 161, 168, 177, 162, 97, 162, 121, 168, 121, 168, 121, 163, 121, 168,
+ 174, 172, 173, 184, 177, 173, 165, 122, 166, 121, 161, 204, 153, 208, 134, 92,
+ 164, 175, 122, 163, 176, 97, 199, 191, 92, 122, 122, 121, 122, 122, 161, 177,
+ 122, 122, 163, 167, 177, 162, 168, 122, 177, 122, 162, 170, 122, 177, 177, 121,
+ 122, 122, 167, 172, 184, 122, 168, 122, 169, 176, 122, 122, 122, 164, 161, 164,
+ 122, 121, 122, 181, 161, 130, 177, 122, 122, 122, 161, 168, 176, 162, 121, 168,
+ 121, 122, 162, 92, 182, 168, 168, 163, 122, 121, 122, 177, 171, 167, 122, 177,
+ 162, 182, 168, 181, 181, 129, 168, 129, 164, 121, 160, 168, 167, 122, 168, 168,
+ 168, 168, 161, 122, 90, 122, 130, 164, 164, 166, 161, 162, 122, 122, 161, 185,
+ 166, 166, 166, 164, 177, 168, 122, 122, 122, 122, 161, 160, 181, 169, 177, 160,
+ 122, 166, 162, 168, 167, 168, 161, 173, 177, 164, 176, 122, 164, 166, 166, 177,
+ 181, 169, 164, 177, 168, 122, 164, 168, 169, 161, 177, 167, 164, 122, 173, 122,
+ 185, 130, 130, 130, 130, 130, 130, 164, 161, 168, 166, 168, 168, 166, 169, 122,
+ 178, 168, 122, 177, 176, 169, 122, 177, 164, 167, 177, 169, 165, 122, 168, 162,
+ 122, 122, 168, 160, 177, 122, 167, 122, 122, 169, 122, 169, 168, 177, 168, 122,
+ 161, 172, 168, 177, 168, 176, 161, 168, 92, 168, 113, 170, 130, 161, 92, 130,
+ 177, 165, 165, 122, 168, 168, 142, 177, 164, 177, 172, 184, 177, 122, 161, 161,
+ 122, 164, 186, 168, 177, 122, 164, 162, 168, 122, 167, 168, 161, 192, 168, 178,
+ 181, 164, 122, 122, 122, 121, 168, 166, 122, 122, 122, 169, 122, 122, 168, 122,
+ 122, 162, 168, 173, 161, 172, 130, 153, 130, 130, 130, 130, 173, 130, 163, 176,
+ 168, 178, 162, 167, 169, 126, 177, 168, 177, 122, 177, 181, 122, 122, 177, 92,
+ 168, 162, 167, 164, 122, 177, 122, 178, 164, 161, 122, 165, 168, 166, 163, 122,
+ 122, 161, 177, 122, 193, 162, 184, 198, 176, 181, 181, 130, 130, 130, 161, 130,
+ 191, 166, 122, 198, 122, 142, 121, 177, 122, 168, 168, 176, 122, 121, 177, 168,
+ 168, 168, 162, 168, 177, 122, 169, 121, 177, 177, 166, 176, 168, 168, 177, 177,
+ 161, 122, 161, 178, 177, 176, 161, 160, 169, 177, 122, 177, 122, 166, 163, 122,
+ 122, 121, 177, 172, 168, 164, 96, 175, 187, 179, 161, 130, 130, 130, 173, 130,
+ 122, 121, 177, 122, 169, 177, 122, 178, 177, 122, 122, 121, 177, 163, 168, 168,
+ 169, 122, 162, 178, 168, 168, 122, 163, 122, 122, 177, 168, 163, 122, 122, 122,
+ 177, 164, 171, 177, 177, 122, 177, 162, 168, 163, 122, 121, 171, 168, 164, 122,
+ 173, 181, 164, 96, 130, 161, 130, 122, 178, 168, 164, 166, 178, 92, 168, 168,
+ 193, 164, 168, 161, 121, 162, 177, 188, 161, 162, 161, 168, 196, 172, 121, 122,
+ 168, 177, 198, 161, 121, 177, 177, 121, 122, 177, 165, 121, 122, 142, 169, 168,
+ 160, 130, 168, 180, 168, 122, 168, 161, 121, 198, 142, 168, 160, 122, 177, 121,
+ 163, 168, 122, 121, 203, 178, 168, 122, 122, 161, 168, 121, 177, 92, 121, 172,
+ 122, 178, 177, 178, 178, 169, 121, 122, 164, 168, 168, 164, 171, 203, 121, 162,
+ 177, 193, 121, 177, 162, 161, 161, 172, 161, 168, 121, 166, 168, 177, 122, 161,
+ 121, 121, 177, 177, 122, 160, 178, 164, 193, 198, 121, 168, 163, 166, 161, 177,
+ 162, 168, 168, 161, 121, 162, 161, 122, 166, 122, 177, 121, 122, 177, 121, 168,
+ 168, 168, 121, 168, 168, 168, 121, 179, 177, 163, 180, 161, 177, 161, 122, 168,
+ 163, 177, 176, 180, 161, 168, 178, 121, 122, 121, 122, 122, 178, 142, 164, 163,
+ 172, 130, 130, 160, 130, 162, 168, 92, 168, 161, 160, 161, 164, 164, 177, 177,
+ 168, 162, 163, 142, 168, 177, 122, 177, 168, 177, 168, 168, 162, 177, 168, 162,
+ 168, 168, 121, 161, 113, 96, 121, 121, 121, 168, 121, 168, 121, 178, 142, 122,
+ 121, 177, 161, 177, 177, 161, 130, 191, 122, 178, 122, 130, 122, 122, 122, 173,
+ 122, 122, 122, 164, 178, 176, 122, 130, 173, 168, 122, 169, 162, 113, 181, 122,
+ 177, 122, 176, 177, 185, 185, 113, 177, 161, 177, 122, 177, 179, 168, 122, 181,
+ 121, 195, 142, 169, 122, 161, 126, 179, 181, 163, 168, 181, 161, 166, 129, 122,
+ 122, 122, 177, 166, 162, 161, 177, 122, 122, 122, 168, 122, 90, 122, 169, 161,
+ 177, 176, 176, 122, 176, 113, 162, 161, 122, 168, 177, 169, 177, 161, 178, 161,
+ 178, 168, 168, 169, 177, 168, 185, 173, 153, 130, 130, 130, 130, 176, 122, 176,
+ 185, 180, 168, 176, 168, 161, 122, 168, 161, 122, 177, 168, 122, 177, 169, 122,
+ 122, 168, 172, 178, 122, 160, 97, 168, 168, 122, 122, 161, 168, 164, 177, 177,
+ 182, 122, 122, 169, 178, 122, 169, 122, 122, 161, 130, 199, 181, 160, 181, 130,
+ 130, 130, 130, 161, 170, 173, 163, 161, 176, 168, 168, 122, 169, 168, 168, 168,
+ 168, 122, 161, 177, 168, 122, 177, 164, 168, 122, 164, 167, 122, 122, 177, 176,
+ 161, 161, 122, 94, 176, 175, 169, 122, 122, 122, 167, 97, 122, 122, 176, 180,
+ 122, 178, 122, 122, 122, 163, 190, 122, 122, 122, 176, 122, 122, 181, 161, 179,
+ 181, 181, 130, 130, 161, 170, 130, 130, 130, 130, 164, 168, 122, 122, 122, 122,
+ 168, 122, 177, 122, 176, 178, 167, 122, 168, 168, 168, 168, 176, 176, 122, 122,
+ 168, 122, 169, 177, 164, 161, 92, 122, 169, 122, 162, 177, 178, 177, 185, 168,
+ 177, 122, 92, 177, 168, 168, 176, 161, 182, 181, 130, 173, 92, 130, 130, 184,
+ 130, 173, 130, 130, 130, 130, 92, 113, 169, 177, 176, 122, 168, 177, 160, 122,
+ 161, 160, 185, 168, 168, 163, 177, 160, 168, 166, 122, 194, 177, 122, 121, 181,
+ 168, 177, 176, 166, 177, 185, 176, 168, 168, 122, 177, 166, 122, 169, 176, 122,
+ 122, 168, 164, 164, 177, 122, 168, 178, 177, 168, 168, 164, 181, 161, 130, 130,
+ 161, 130, 130, 130, 160, 177, 164, 122, 121, 169, 161, 142, 163, 166, 165, 168,
+ 168, 176, 121, 161, 164, 177, 169, 122, 177, 160, 122, 122, 177, 177, 161, 193,
+ 169, 168, 166, 121, 171, 168, 161, 166, 122, 122, 166, 160, 122, 168, 167, 169,
+ 166, 168, 122, 161, 177, 162, 122, 168, 122, 171, 162, 121, 168, 168, 177, 178,
+ 122, 121, 122, 169, 177, 122, 162, 122, 122, 122, 122, 178, 169, 166, 166, 177,
+ 185, 168, 181, 130, 202, 113, 161, 130, 130, 94, 173, 113, 130, 177, 167, 161,
+ 121, 163, 168, 178, 165, 177, 122, 168, 177, 169, 168, 168, 168, 96, 166, 122,
+ 122, 163, 169, 177, 162, 177, 122, 168, 168, 168, 121, 121, 177, 168, 179, 168,
+ 166, 122, 160, 169, 168, 177, 160, 168, 168, 169, 176, 168, 162, 129, 121, 168,
+ 168, 168, 166, 177, 122, 177, 165, 195, 174, 171, 181, 94, 94, 130, 160, 130,
+ 130, 130, 130, 161, 92, 130, 142, 160, 161, 177, 177, 185, 185, 121, 168, 122,
+ 166, 161, 177, 169, 190, 168, 121, 121, 177, 161, 168, 185, 122, 161, 176, 168,
+ 166, 185, 191, 168, 177, 177, 167, 168, 178, 164, 176, 168, 122, 122, 168, 177,
+ 177, 161, 160, 168, 169, 177, 142, 168, 160, 168, 186, 160, 161, 176, 121, 166,
+ 168, 185, 113, 168, 130, 130, 173, 173, 130, 161, 130, 177, 161, 168, 178, 164,
+ 168, 171, 176, 177, 176, 161, 161, 161, 122, 168, 182, 177, 177, 177, 185, 171,
+ 191, 177, 161, 162, 161, 168, 168, 169, 168, 122, 161, 168, 168, 176, 168, 121,
+ 168, 160, 168, 177, 177, 168, 178, 168, 122, 129, 122, 171, 160, 177, 161, 168,
+ 161, 161, 185, 181, 130, 166, 161, 176, 121, 168, 168, 168, 168, 160, 161, 177,
+ 171, 209, 122, 121, 161, 169, 185, 168, 177, 176, 121, 164, 168, 177, 122, 177,
+ 168, 164, 97, 177, 122, 121, 177, 161, 164, 169, 161, 121, 176, 122, 122, 160,
+ 122, 168, 121, 171, 160, 130, 160, 130, 130, 181, 130, 121, 169, 177, 171, 171,
+ 179, 121, 169, 168, 188, 122, 161, 121, 161, 177, 188, 171, 162, 122, 190, 168,
+ 166, 164, 122, 160, 121, 164, 168, 166, 122, 168, 121, 168, 161, 94, 130, 161,
+ 142, 198, 122, 178, 166, 193, 122, 198, 168, 177, 163, 168, 121, 171, 161, 178,
+ 171, 142, 121, 168, 121, 162, 181, 171, 168, 161, 121, 171, 168, 178, 121, 177,
+ 122, 177, 92, 168, 191, 181, 97, 168, 164, 166, 163, 161, 168, 168, 168, 171,
+ 168, 160, 130, 177, 171, 168, 177, 168, 122, 171, 161, 177, 142, 121, 163, 163,
+ 168, 168, 177, 121, 142, 185, 177, 161, 161, 177, 121, 122, 121, 168, 166, 122,
+ 94, 164, 168, 168, 175, 175, 122, 180, 122, 122, 162, 122, 162, 177, 122, 122,
+ 161, 168, 161, 177, 161, 122, 168, 162, 122, 176, 168, 161, 130, 198, 195, 122,
+ 162, 122, 162, 168, 171, 169, 122, 121, 142, 169, 161, 130, 168, 169, 122, 163,
+ 164, 161, 122, 122, 168, 168, 122, 177, 168, 92, 168, 174, 122, 203, 161, 168,
+ 184, 161, 122, 168, 122, 121, 168, 122, 121, 168, 177, 168, 168, 162, 183, 168,
+ 168, 177, 121, 121, 168, 193, 94, 122, 172, 172, 162, 173, 165, 161, 181, 92,
+ 122, 122, 177, 130, 168, 171, 168, 122, 162, 122, 161, 122, 122, 177, 168, 122,
+ 177, 122, 168, 162, 122, 122, 164, 122, 168, 130, 168, 122, 121, 184, 177, 122,
+ 122, 92, 177, 177, 162, 160, 168, 121, 168, 122, 161, 168, 122, 122, 160, 177,
+ 92, 122, 177, 167, 167, 122, 167, 161, 162, 164, 161, 122, 122, 168, 176, 122,
+ 177, 160, 165, 168, 182, 92, 176, 122, 162, 113, 168, 178, 161, 168, 168, 177,
+ 186, 178, 169, 203, 161, 122, 122, 184, 122, 122, 161, 161, 122, 122, 185, 185,
+ 166, 122, 177, 168, 191, 177, 173, 130, 92, 164, 122, 180, 194, 194, 164, 193,
+ 176, 161, 169, 167, 177, 168, 122, 121, 177, 191, 122, 168, 122, 177, 122, 122,
+ 194, 191, 177, 122, 122, 190, 162, 161, 160, 130, 161, 161, 178, 166, 193, 122,
+ 122, 177, 177, 163, 171, 122, 177, 122, 122, 164, 162, 177, 164, 122, 177, 122,
+ 193, 190, 168, 177, 165, 167, 165, 164, 161, 177, 194, 195, 184, 92, 130, 113,
+ 164, 122, 121, 122, 198, 171, 164, 168, 160, 121, 177, 186, 176, 161, 164, 122,
+ 161, 177, 169, 170, 130, 130, 130, 174, 162, 191, 96, 191, 177, 121, 121, 165,
+ 164, 166, 178, 160, 122, 194, 122, 198, 122, 196, 177, 193, 177, 161, 122, 122,
+ 169, 168, 168, 193, 122, 162, 122, 190, 191, 177, 122, 177, 177, 160, 176, 164,
+ 177, 181, 130, 113, 122, 94, 168, 122, 121, 121, 168, 177, 166, 171, 198, 161,
+ 191, 122, 163, 161, 168, 168, 122, 122, 121, 177, 163, 162, 164, 122, 92, 177,
+ 191, 168, 121, 92, 163, 161, 181, 130, 96, 168, 168, 121, 161, 163, 122, 168,
+ 168, 171, 191, 203, 122, 177, 160, 168, 142, 122, 168, 191, 181, 168, 165, 163,
+ 177, 181, 162, 164, 121, 161, 126, 121, 177, 121, 168, 168, 177, 160, 163, 177,
+ 161, 161, 168, 92, 164, 161, 121, 161, 168, 122, 178, 166, 122, 122, 168, 164,
+ 121, 161, 161, 168, 168, 161, 122, 161, 177, 169, 92, 177, 171, 168, 177, 161,
+ 122, 94, 122, 122, 122, 181, 168, 122, 121, 122, 197, 162, 122, 113, 122, 122,
+ 122, 168, 160, 121, 168, 177, 161, 162, 122, 122, 185, 122, 160, 122, 163, 178,
+ 185, 161, 168, 177, 122, 122, 172, 122, 168, 164, 161, 122, 162, 122, 198, 122,
+ 177, 168, 177, 168, 161, 160, 122, 121, 122, 92, 122, 122, 122, 122, 121, 173,
+ 92, 122, 161, 177, 122, 96, 198, 181, 178, 168, 165, 168, 168, 122, 177, 178,
+ 130, 113, 130, 130, 160, 177, 122, 177, 166, 122, 161, 168, 166, 168, 122, 122,
+ 122, 122, 161, 122, 164, 177, 122, 97, 161, 178, 168, 161, 122, 177, 122, 122,
+ 169, 175, 153, 113, 113, 184, 162, 94, 130, 130, 169, 161, 177, 122, 162, 122,
+ 122, 121, 169, 122, 177, 122, 177, 122, 168, 168, 168, 191, 169, 168, 122, 122,
+ 161, 166, 161, 168, 166, 178, 168, 122, 161, 122, 161, 122, 178, 168, 177, 193,
+ 122, 177, 168, 188, 168, 122, 164, 122, 166, 177, 122, 162, 122, 122, 130, 168,
+ 153, 113, 184, 173, 160, 130, 113, 130, 130, 113, 130, 130, 160, 130, 168, 122,
+ 190, 163, 177, 165, 142, 166, 122, 165, 122, 178, 168, 177, 164, 162, 183, 160,
+ 177, 167, 177, 166, 122, 177, 178, 161, 177, 177, 178, 168, 168, 168, 178, 122,
+ 122, 122, 190, 122, 122, 161, 160, 163, 167, 176, 122, 168, 166, 122, 169, 168,
+ 130, 162, 169, 168, 178, 96, 177, 178, 161, 122, 168, 168, 122, 168, 178, 122,
+ 192, 122, 177, 122, 122, 121, 191, 177, 168, 163, 168, 196, 168, 130, 198, 169,
+ 179, 160, 153, 153, 153, 173, 161, 130, 130, 130, 130, 130, 130, 94, 130, 130,
+ 160, 130, 194, 122, 177, 161, 165, 122, 97, 164, 168, 160, 168, 166, 172, 177,
+ 168, 122, 198, 161, 161, 168, 168, 164, 177, 169, 122, 178, 164, 177, 168, 191,
+ 164, 177, 167, 166, 178, 168, 160, 179, 122, 122, 168, 177, 122, 122, 179, 162,
+ 122, 122, 122, 122, 166, 176, 169, 160, 122, 185, 90, 168, 176, 178, 165, 168,
+ 122, 122, 164, 122, 122, 174, 160, 162, 164, 181, 161, 162, 113, 153, 161, 113,
+ 130, 130, 130, 202, 130, 170, 130, 202, 130, 130, 92, 166, 161, 194, 177, 177,
+ 164, 177, 177, 161, 167, 177, 122, 167, 168, 177, 164, 177, 177, 168, 178, 121,
+ 168, 122, 171, 169, 163, 122, 176, 168, 182, 168, 168, 168, 168, 113, 161, 165,
+ 168, 168, 168, 122, 121, 161, 177, 122, 163, 161, 164, 178, 177, 121, 161, 121,
+ 178, 188, 122, 177, 168, 164, 175, 122, 122, 177, 177, 168, 168, 122, 177, 122,
+ 122, 121, 177, 122, 168, 122, 198, 161, 161, 172, 113, 162, 113, 94, 92, 92,
+ 130, 161, 130, 160, 121, 193, 178, 168, 177, 122, 172, 122, 177, 122, 168, 164,
+ 177, 177, 122, 177, 178, 122, 177, 121, 122, 162, 122, 161, 177, 177, 168, 121,
+ 122, 178, 161, 169, 168, 164, 168, 121, 191, 168, 177, 177, 177, 164, 122, 178,
+ 166, 166, 121, 168, 168, 176, 177, 168, 168, 122, 122, 171, 166, 177, 161, 161,
+ 198, 175, 160, 160, 178, 122, 177, 168, 178, 163, 177, 167, 178, 122, 122, 178,
+ 166, 177, 122, 177, 168, 168, 162, 177, 160, 113, 153, 153, 181, 92, 161, 130,
+ 130, 113, 113, 113, 130, 178, 113, 183, 113, 161, 178, 92, 160, 130, 161, 168,
+ 122, 164, 168, 177, 167, 177, 172, 168, 177, 167, 92, 177, 168, 165, 160, 165,
+ 168, 168, 166, 160, 168, 177, 160, 161, 168, 177, 121, 168, 168, 161, 177, 168,
+ 161, 168, 168, 121, 122, 198, 168, 192, 168, 180, 122, 171, 178, 169, 122, 168,
+ 122, 198, 180, 190, 163, 177, 166, 160, 188, 177, 178, 122, 177, 121, 122, 180,
+ 177, 166, 182, 172, 178, 121, 168, 122, 165, 122, 177, 177, 184, 181, 113, 162,
+ 90, 113, 169, 168, 130, 160, 96, 130, 130, 130, 153, 92, 92, 166, 178, 161,
+ 168, 178, 164, 168, 169, 122, 177, 168, 174, 168, 168, 122, 122, 161, 168, 160,
+ 178, 177, 160, 97, 168, 191, 171, 165, 176, 168, 168, 176, 168, 176, 121, 177,
+ 168, 167, 172, 168, 122, 168, 168, 176, 162, 168, 164, 122, 177, 168, 178, 178,
+ 160, 122, 168, 121, 168, 164, 168, 113, 164, 168, 167, 121, 122, 121, 167, 168,
+ 122, 163, 161, 142, 185, 160, 163, 162, 181, 178, 92, 130, 92, 113, 113, 130,
+ 130, 160, 177, 161, 168, 177, 168, 178, 121, 160, 195, 178, 168, 169, 177, 164,
+ 161, 177, 167, 171, 168, 162, 168, 168, 168, 172, 160, 180, 168, 122, 177, 165,
+ 177, 171, 121, 182, 168, 142, 168, 168, 168, 168, 122, 172, 172, 168, 161, 177,
+ 161, 188, 181, 121, 178, 177, 168, 165, 185, 121, 163, 178, 160, 177, 121, 122,
+ 177, 122, 181, 121, 164, 168, 168, 168, 166, 181, 184, 153, 160, 160, 113, 130,
+ 162, 130, 177, 160, 177, 122, 181, 164, 121, 121, 121, 177, 168, 122, 166, 177,
+ 168, 168, 161, 161, 122, 163, 177, 169, 121, 177, 164, 121, 160, 168, 177, 168,
+ 166, 177, 193, 203, 168, 177, 177, 160, 122, 122, 168, 166, 161, 168, 168, 121,
+ 168, 122, 142, 161, 177, 170, 178, 177, 168, 168, 177, 126, 161, 168, 161, 168,
+ 161, 174, 113, 162, 94, 92, 168, 161, 113, 130, 160, 92, 130, 161, 171, 178,
+ 122, 177, 160, 177, 122, 168, 164, 177, 161, 191, 160, 162, 168, 180, 165, 160,
+ 169, 166, 168, 168, 97, 168, 168, 122, 161, 160, 168, 177, 121, 163, 177, 177,
+ 169, 168, 121, 121, 168, 177, 168, 160, 168, 130, 181, 174, 169, 168, 142, 171,
+ 164, 163, 160, 121, 177, 160, 168, 168, 142, 168, 168, 121, 161, 177, 163, 164,
+ 161, 181, 121, 121, 161, 168, 177, 168, 163, 182, 160, 168, 177, 168, 161, 168,
+ 177, 178, 161, 121, 163, 164, 162, 161, 160, 168, 121, 121, 177, 171, 178, 178,
+ 168, 168, 161, 161, 162, 97, 161, 177, 178, 161, 178, 168, 171, 161, 168, 168,
+ 177, 177, 162, 168, 161, 161, 128, 92, 168, 168, 142, 121, 177, 164, 161, 161,
+ 168, 161, 177, 177, 121, 153, 164, 164, 168, 177, 121, 168, 183, 161, 161, 177,
+ 171, 177, 180, 168, 161, 92, 121, 177, 168, 168, 168, 164, 161, 172, 177, 113,
+ 122, 122, 173, 122, 206, 168, 161, 184, 177, 161, 161, 164, 177, 168, 161, 177,
+ 161, 168, 122, 168, 168, 163, 177, 167, 178, 167, 122, 177, 168, 121, 122, 177,
+ 161, 168, 168, 167, 161, 168, 192, 122, 168, 169, 177, 168, 122, 177, 121, 161,
+ 121, 168, 163, 181, 178, 168, 177, 160, 164, 169, 92, 178, 97, 164, 168, 121,
+ 177, 121, 122, 122, 122, 129, 122, 176, 161, 181, 122, 164, 161, 168, 164, 172,
+ 162, 161, 126, 181, 172, 162, 168, 126, 121, 169, 160, 122, 130, 162, 177, 121,
+ 178, 179, 166, 122, 165, 162, 122, 130, 168, 122, 122, 184, 168, 167, 168, 168,
+ 161, 168, 130, 130, 168, 178, 122, 177, 121, 168, 130, 166, 161, 161, 180, 177,
+ 177, 173, 177, 177, 142, 168, 168, 168, 162, 162, 167, 178, 162, 177, 188, 121,
+ 177, 113, 121, 167, 184, 122, 168, 122, 162, 162, 121, 181, 121, 177, 164, 122,
+ 142, 207, 130, 177, 177, 122, 121, 168, 168, 177, 168, 122, 177, 122, 181, 129,
+ 168, 161, 122, 122, 122, 130, 192, 129, 180, 130, 171, 122, 160, 161, 168, 113,
+ 168, 174, 168, 177, 168, 161, 177, 177, 168, 161, 179, 122, 121, 161, 162, 169,
+ 168, 162, 168, 167, 161, 130, 161, 177, 168, 166, 160, 168, 168, 96, 168, 177,
+ 168, 168, 177, 168, 177, 176, 185, 130, 121, 177, 161, 168, 168, 166, 162, 122,
+ 176, 122, 162, 122, 167, 185, 96, 113, 185, 166, 185, 169, 160, 168, 161, 176,
+ 168, 185, 130, 121, 169, 168, 176, 176, 176, 130, 185, 97, 171, 161, 176, 96,
+ 185, 160, 173, 171, 122, 90, 177, 198, 122, 160, 182, 177, 161, 170, 121, 177,
+ 122, 122, 122, 168, 161, 161, 185, 130, 92, 170, 166, 177, 168, 171, 121, 177,
+ 122, 161, 177, 161, 166, 122, 161, 122, 160, 171, 198, 176, 166, 122, 122, 122,
+ 122, 96, 113, 161, 130, 168, 168, 177, 122, 185, 122, 177, 161, 191, 160, 177,
+ 122, 168, 122, 178, 176, 160, 190, 161, 177, 174, 121, 177, 161, 122, 122, 160,
+ 168, 122, 122, 122, 168, 190, 190, 191, 122, 176, 168, 168, 122, 142, 168, 185,
+ 122, 161, 121, 165, 190, 191, 121, 164, 171, 122, 180, 122, 177, 168, 161, 174,
+ 161, 184, 172, 130, 130, 130, 130, 130, 92, 130, 179, 122, 97, 185, 122, 160,
+ 177, 169, 174, 122, 177, 92, 168, 168, 122, 122, 178, 122, 122, 122, 122, 122,
+ 168, 121, 191, 168, 122, 169, 177, 168, 161, 122, 122, 160, 122, 177, 160, 177,
+ 166, 177, 177, 122, 166, 122, 176, 122, 161, 178, 177, 122, 171, 178, 185, 160,
+ 176, 122, 122, 122, 161, 122, 161, 177, 122, 177, 175, 192, 177, 168, 192, 122,
+ 122, 169, 177, 122, 164, 96, 130, 130, 130, 168, 130, 130, 130, 130, 130, 161,
+ 168, 185, 160, 168, 166, 160, 160, 166, 168, 168, 177, 122, 122, 168, 176, 177,
+ 168, 191, 167, 164, 161, 161, 168, 122, 168, 165, 166, 122, 161, 168, 122, 178,
+ 168, 161, 168, 161, 160, 122, 163, 190, 177, 121, 122, 169, 168, 168, 176, 177,
+ 168, 176, 122, 167, 168, 122, 121, 168, 121, 190, 168, 122, 166, 122, 122, 177,
+ 168, 122, 168, 130, 181, 184, 130, 130, 130, 92, 130, 130, 92, 130, 170, 130,
+ 92, 130, 130, 130, 130, 92, 161, 163, 168, 122, 122, 160, 186, 161, 166, 177,
+ 185, 177, 168, 165, 178, 171, 122, 177, 168, 122, 122, 161, 121, 168, 122, 166,
+ 177, 160, 160, 161, 122, 168, 168, 122, 122, 121, 168, 168, 166, 168, 168, 194,
+ 168, 160, 166, 168, 168, 122, 168, 188, 122, 129, 97, 168, 122, 194, 122, 160,
+ 168, 192, 177, 122, 176, 122, 163, 177, 177, 181, 161, 184, 113, 130, 130, 130,
+ 130, 130, 92, 130, 170, 160, 130, 130, 130, 130, 176, 185, 177, 161, 96, 122,
+ 161, 160, 122, 168, 177, 122, 161, 177, 169, 163, 168, 168, 142, 177, 168, 176,
+ 165, 161, 168, 195, 190, 122, 122, 122, 177, 168, 177, 122, 169, 168, 164, 191,
+ 168, 122, 142, 168, 168, 178, 166, 168, 122, 122, 126, 177, 168, 166, 122, 177,
+ 166, 122, 177, 168, 169, 177, 169, 161, 121, 177, 121, 122, 169, 168, 122, 177,
+ 177, 122, 168, 122, 177, 121, 177, 122, 195, 122, 121, 122, 166, 168, 161, 161,
+ 177, 161, 160, 168, 163, 169, 161, 181, 181, 181, 175, 113, 173, 130, 130, 160,
+ 130, 130, 161, 113, 130, 153, 130, 210, 160, 121, 122, 121, 168, 169, 164, 180,
+ 122, 122, 177, 122, 122, 122, 121, 177, 168, 175, 160, 165, 121, 122, 178, 122,
+ 168, 168, 190, 168, 129, 168, 191, 92, 122, 177, 122, 177, 191, 194, 121, 168,
+ 168, 168, 161, 122, 190, 177, 168, 168, 164, 177, 121, 177, 161, 122, 169, 163,
+ 160, 177, 177, 166, 176, 168, 122, 164, 122, 160, 168, 122, 191, 177, 191, 122,
+ 168, 168, 177, 171, 168, 168, 168, 121, 177, 97, 161, 165, 161, 161, 122, 121,
+ 161, 168, 121, 191, 168, 161, 172, 168, 168, 168, 183, 164, 160, 162, 184, 202,
+ 181, 92, 113, 130, 161, 130, 179, 92, 168, 96, 161, 160, 113, 177, 168, 167,
+ 122, 161, 168, 177, 168, 92, 121, 168, 169, 177, 160, 168, 122, 121, 168, 165,
+ 177, 168, 122, 168, 168, 122, 168, 176, 161, 161, 122, 126, 161, 162, 177, 122,
+ 168, 192, 167, 177, 96, 160, 122, 167, 160, 168, 122, 174, 97, 167, 168, 177,
+ 177, 166, 122, 177, 121, 121, 168, 176, 177, 180, 177, 122, 121, 177, 191, 166,
+ 168, 122, 168, 122, 122, 169, 168, 130, 168, 160, 179, 160, 168, 172, 202, 130,
+ 130, 130, 170, 161, 130, 130, 173, 92, 179, 179, 92, 177, 142, 177, 177, 121,
+ 161, 168, 142, 161, 122, 168, 168, 142, 180, 166, 160, 177, 168, 177, 121, 121,
+ 168, 121, 122, 168, 163, 168, 122, 168, 177, 167, 177, 160, 163, 177, 168, 122,
+ 161, 196, 168, 169, 122, 122, 182, 160, 177, 168, 177, 164, 168, 161, 168, 168,
+ 122, 168, 121, 121, 170, 168, 177, 168, 161, 176, 176, 122, 121, 166, 168, 176,
+ 177, 122, 121, 176, 160, 168, 166, 168, 121, 168, 168, 177, 177, 160, 169, 121,
+ 168, 180, 161, 168, 160, 113, 130, 130, 161, 161, 161, 130, 161, 130, 168, 177,
+ 168, 188, 177, 177, 121, 168, 94, 191, 122, 164, 191, 121, 175, 177, 192, 121,
+ 97, 177, 192, 168, 121, 161, 169, 168, 162, 168, 168, 168, 177, 122, 122, 142,
+ 121, 161, 185, 168, 175, 161, 168, 168, 169, 160, 122, 168, 122, 191, 191, 168,
+ 142, 198, 178, 162, 122, 168, 142, 177, 190, 185, 160, 177, 166, 192, 122, 161,
+ 191, 181, 177, 177, 191, 168, 177, 121, 92, 161, 162, 92, 130, 160, 168, 163,
+ 171, 169, 168, 180, 121, 177, 171, 190, 177, 168, 178, 168, 168, 168, 191, 191,
+ 177, 121, 168, 122, 97, 163, 176, 161, 168, 122, 168, 160, 177, 168, 203, 168,
+ 122, 121, 122, 121, 168, 162, 178, 177, 177, 185, 191, 168, 168, 168, 168, 168,
+ 161, 130, 130, 160, 178, 121, 161, 161, 142, 160, 193, 142, 168, 168, 166, 121,
+ 122, 122, 168, 168, 121, 161, 168, 168, 177, 188, 161, 121, 121, 168, 169, 122,
+ 171, 121, 168, 181, 168, 164, 172, 168, 160, 162, 142, 168, 177, 164, 121, 168,
+ 177, 180, 161, 160, 168, 191, 188, 177, 161, 121, 168, 121, 168, 177, 168, 121,
+ 161, 122, 92, 161, 168, 121, 168, 177, 121, 168, 122, 122, 194, 121, 198, 121,
+ 177, 168, 168, 192, 168, 161, 178, 180, 126, 168, 168, 168, 172, 161, 161, 191,
+ 142, 168, 142, 168, 177, 185, 161, 191, 168, 166, 168, 168, 177, 161, 121, 168,
+ 168, 168, 168, 177, 177, 168, 168, 161, 177, 177, 177, 163, 122, 161, 162, 130,
+ 128, 121, 168, 161, 163, 177, 168, 168, 121, 161, 168, 168, 160, 191, 176, 168,
+ 168, 168, 168, 121, 171, 177, 168, 160, 168, 168, 168, 122, 90, 130, 164, 175,
+ 122, 168, 161, 161, 168, 174, 176, 161, 122, 160, 168, 161, 122, 121, 174, 170,
+ 130, 163, 168, 168, 168, 192, 177, 161, 161, 175, 122, 160, 161, 161, 122, 160,
+ 161, 168, 122, 168, 166, 176, 166, 162, 191, 122, 194, 162, 130, 130, 92, 168,
+ 160, 194, 161, 160, 188, 160, 160, 160, 161, 168, 161, 190, 122, 122, 169, 122,
+ 177, 166, 161, 122, 177, 168, 161, 192, 122, 186, 142, 179, 170, 170, 168, 161,
+ 170, 130, 130, 130, 160, 168, 168, 168, 122, 161, 176, 180, 160, 168, 168, 121,
+ 160, 177, 168, 177, 177, 163, 163, 168, 190, 122, 168, 173, 177, 180, 168, 186,
+ 168, 168, 168, 161, 176, 161, 130, 130, 130, 130, 161, 130, 130, 130, 161, 96,
+ 168, 198, 161, 168, 168, 160, 168, 185, 168, 122, 177, 168, 168, 122, 160, 168,
+ 168, 161, 168, 164, 191, 182, 177, 164, 161, 122, 96, 177, 191, 168, 168, 164,
+ 185, 161, 161, 185, 113, 130, 130, 168, 130, 122, 122, 168, 142, 160, 191, 168,
+ 177, 121, 168, 168, 161, 168, 122, 161, 168, 94, 161, 163, 160, 164, 168, 166,
+ 190, 166, 168, 160, 160, 160, 122, 161, 164, 161, 168, 160, 113, 161, 94, 161,
+ 94, 177, 168, 168, 168, 174, 171, 191, 161, 121, 209, 177, 122, 168, 122, 160,
+ 191, 160, 177, 168, 168, 113, 121, 164, 168, 121, 177, 161, 190, 168, 190, 168,
+ 177, 168, 178, 168, 122, 121, 122, 122, 176, 121, 168, 160, 121, 161, 122, 161,
+ 168, 160, 185, 170, 161, 160, 160, 160, 185, 162, 170, 168, 160, 122, 160, 161,
+ 177, 168, 168, 161, 122, 177, 168, 177, 172, 194, 122, 161, 163, 161, 160, 165,
+ 168, 161, 188, 161, 122, 113, 160, 168, 170, 122, 177, 177, 168, 168, 168, 122,
+ 166, 168, 193, 160, 168, 168, 161, 168, 169, 168, 168, 161, 122, 160, 161, 177,
+ 177, 121, 177, 166, 160, 185, 161, 160, 168, 122, 193, 161, 168, 168, 121, 177,
+ 177, 191, 168, 122, 171, 168, 168, 168, 121, 121, 168, 177, 164, 161, 122, 168,
+ 121, 160, 121, 164, 165, 122, 177, 113, 168, 171, 177, 168, 171, 160, 161, 121,
+ 169, 168, 168, 161, 168, 122, 121, 122, 168, 161, 161, 160, 142, 121, 122, 161,
+ 168, 168, 168, 161, 97, 153, 94, 92, 171, 167, 161, 121, 121, 168, 188, 180,
+ 204, 168, 168, 168, 161, 168, 122, 177, 164, 182, 168, 161, 168, 142, 160, 160,
+ 121, 161, 161, 177, 168, 160, 160, 163, 161, 168, 177, 121, 161, 166, 168, 177,
+ 161, 161, 168, 168, 163, 161, 168, 168, 169, 168, 122, 182, 122, 121, 160, 162,
+ 122, 130, 196, 92, 162, 122, 122, 130, 176, 176, 121, 122, 181, 122, 121, 167,
+ 198, 177, 177, 162, 168, 162, 121, 122, 122, 168, 168, 178, 122, 130, 164, 177,
+ 163, 161, 122, 177, 92, 163, 176, 160, 121, 122, 177, 122, 182, 122, 177, 122,
+ 171, 122, 122, 177, 161, 161, 179, 122, 164, 122, 168, 162, 168, 161, 166, 176,
+ 168, 162, 122, 168, 142, 130, 168, 177, 177, 122, 173, 177, 177, 121, 167, 166,
+ 122, 122, 172, 161, 176, 168, 168, 172, 168, 177, 130, 185, 168, 166, 177, 170,
+ 168, 168, 169, 177, 160, 168, 142, 168, 168, 161, 168, 171, 92, 168, 168, 170,
+ 113, 168, 121, 168, 168, 168, 168, 121, 177, 168, 168, 161, 122, 90, 177, 122,
+ 185, 164, 172, 92, 166, 168, 184, 130, 130, 184, 168, 161, 161, 168, 164, 168,
+ 126, 166, 122, 167, 122, 168, 178, 164, 130, 177, 168, 168, 177, 179, 122, 161,
+ 122, 168, 167, 161, 168, 162, 177, 122, 177, 122, 168, 181, 168, 92, 130, 177,
+ 169, 122, 172, 168, 168, 164, 168, 161, 185, 122, 168, 168, 184, 184, 130, 130,
+ 130, 130, 130, 166, 166, 161, 168, 169, 122, 121, 166, 166, 122, 121, 177, 168,
+ 168, 185, 163, 130, 182, 162, 161, 177, 168, 92, 165, 177, 168, 162, 173, 168,
+ 160, 168, 177, 176, 92, 130, 122, 167, 177, 171, 161, 122, 122, 165, 166, 113,
+ 92, 130, 166, 168, 164, 122, 168, 177, 163, 122, 186, 186, 174, 168, 175, 181,
+ 168, 166, 177, 168, 169, 177, 121, 122, 179, 170, 177, 177, 168, 162, 122, 122,
+ 168, 160, 168, 177, 121, 121, 161, 161, 160, 168, 168, 161, 168, 166, 142, 172,
+ 190, 168, 192, 161, 161, 161, 162, 122, 177, 168, 168, 168, 92, 177, 177, 177,
+ 166, 168, 168, 113, 92, 168, 177, 177, 121, 177, 180, 177, 166, 130, 177, 166,
+ 121, 163, 121, 168, 94, 121, 168, 171, 121, 162, 121, 121, 177, 168, 185, 168,
+ 171, 177, 168, 177, 122, 177, 188, 122, 168, 122, 168, 122, 161, 161, 192, 160,
+ 162, 130, 168, 177, 194, 177, 122, 191, 193, 92, 92, 130, 163, 168, 163, 190,
+ 177, 168, 166, 161, 168, 171, 177, 203, 97, 122, 163, 176, 168, 191, 130, 173,
+ 130, 92, 122, 122, 168, 177, 168, 176, 168, 191, 130, 169, 177, 164, 168, 177,
+ 122, 161, 165, 168, 161, 177, 177, 168, 167, 209, 122, 177, 191, 122, 172, 209,
+ 179, 130, 177, 177, 168, 160, 191, 168, 168, 192, 168, 168, 168, 191, 122, 161,
+ 122, 163, 160, 191, 203, 165, 193, 166, 168, 192, 121, 168, 161, 122, 142, 160,
+ 92, 113, 130, 160, 177, 177, 168, 193, 178, 193, 177, 163, 168, 191, 121, 177,
+ 177, 191, 161, 122, 177, 122, 122, 191, 168, 122, 176, 168, 168, 97, 92, 130,
+ 130, 182, 160, 183, 160, 160, 168, 160, 161, 160, 166, 190, 160, 168, 160, 160,
+ 194, 194, 122, 168, 177, 122, 190, 161, 190, 177, 190, 191, 192, 177, 192, 188,
+ 192, 177, 178, 122, 122, 122, 122, 94, 203, 163, 121, 161, 179, 161, 161, 121,
+ 191, 122, 168, 193, 191, 160, 177, 163, 160, 160, 168, 191, 161, 177, 168, 168,
+ 168, 177, 177, 160, 168, 122, 160, 192, 161, 122, 122, 122, 122, 163, 122, 122,
+ 198, 161, 191, 142, 121, 203, 164, 177, 193, 121, 121, 163, 160, 176, 177, 121,
+ 169, 177, 177, 178, 160, 168, 175, 130, 92, 168, 160, 161, 168, 168, 122, 168,
+ 176, 166, 203, 122, 161, 177, 177, 192, 168, 191, 168, 122, 160, 160, 130, 162,
+ 166, 162, 177, 161, 168, 168, 161, 168, 188, 163, 177, 160, 190, 161, 122, 188,
+ 177, 191, 181, 188, 160, 194, 171, 122, 190, 176, 191, 177, 161, 168, 164, 177,
+ 121, 177, 191, 161, 160, 191, 168, 168, 168, 204, 185, 177, 161, 121, 168, 188,
+ 168, 168, 168, 168, 161, 168, 183, 161, 163, 164, 121, 168, 163, 161, 161, 121,
+ 163, 161, 130, 163, 121, 168, 97, 168, 191, 168, 188, 177, 122, 168, 166, 177,
+ 122, 168, 122, 122, 176, 168, 122, 153, 177, 142, 162, 164, 168, 161, 165, 189,
+ 153, 153, 153, 161, 166, 168, 169, 122, 153, 161, 162, 177, 162, 168, 168, 166,
+ 168, 195, 168, 178, 122, 153, 164, 168, 168, 161, 161, 168, 142, 169, 172, 185,
+ 168, 165, 177, 167, 168, 121, 177, 177, 122, 170, 122, 195, 169, 168, 172, 122,
+ 162, 177, 97, 196, 164, 122, 121, 162, 122, 176, 177, 122, 122, 96, 168, 166,
+ 122, 122, 122, 122, 94, 170, 162, 122, 122, 177, 165, 175, 113, 171, 166, 177,
+ 166, 161, 160, 162, 181, 130, 172, 191, 166, 181, 172, 169, 122, 172, 176, 122,
+ 164, 205, 162, 128, 122, 160, 161, 164, 161, 122, 169, 165, 122, 121, 164, 177,
+ 153, 164, 121, 168, 178, 122, 122, 172, 161, 113, 122, 142, 168, 172, 160, 191,
+ 121, 164, 170, 113, 202, 183, 121, 178, 122, 166, 193, 162, 162, 177, 177, 122,
+ 168, 164, 113, 179, 168, 162, 122, 121, 92, 181, 121, 122, 168, 94, 198, 122,
+ 177, 122, 174, 164, 167, 177, 130, 130, 168, 176, 169, 161, 162, 122, 160, 130,
+ 130, 130, 171, 169, 176, 122, 161, 168, 161, 92, 168, 122, 130, 92, 130, 130,
+ 185, 186, 122, 122, 174, 122, 168, 92, 122, 122, 177, 168, 122, 122, 122, 177,
+ 177, 177, 122, 175, 166, 122, 162, 122, 170, 130, 169, 168, 177, 122, 177, 177,
+ 168, 168, 165, 161, 122, 122, 130, 177, 122, 121, 168, 122, 182, 168, 169, 177,
+ 171, 177, 122, 169, 166, 161, 185, 166, 130, 113, 130, 130, 162, 168, 164, 177,
+ 122, 176, 121, 142, 122, 168, 168, 168, 168, 166, 121, 168, 165, 168, 178, 169,
+ 190, 169, 163, 166, 162, 130, 92, 163, 177, 142, 166, 142, 166, 121, 161, 177,
+ 185, 168, 162, 171, 168, 166, 177, 130, 130, 192, 168, 166, 177, 177, 177, 122,
+ 122, 121, 122, 177, 122, 166, 190, 142, 168, 176, 130, 130, 160, 166, 92, 168,
+ 167, 168, 177, 166, 169, 166, 161, 161, 176, 162, 171, 198, 166, 168, 130, 130,
+ 90, 162, 121, 166, 164, 164, 142, 178, 178, 177, 162, 162, 122, 170, 203, 160,
+ 168, 160, 121, 168, 170, 162, 122, 168, 142, 177, 168, 161, 167, 92, 130, 171,
+ 168, 121, 142, 130, 191, 171, 94, 172, 181, 121, 178, 130, 121, 177, 171, 174,
+ 180, 171, 121, 160, 182, 168, 172, 161, 122, 168, 153, 122, 121, 122, 122, 168,
+ 181, 177, 96, 181, 122, 162, 122, 122, 169, 168, 168, 169, 162, 162, 122, 168,
+ 198, 130, 168, 122, 161, 177, 169, 161, 161, 167, 142, 177, 177, 177, 168, 162,
+ 162, 160, 162, 164, 166, 163, 177, 162, 162, 161, 177, 168, 92, 177, 122, 168,
+ 142, 130, 130, 161, 169, 168, 92, 172, 178, 181, 121, 168, 161, 177, 168, 122,
+ 161, 164, 122, 121, 168, 176, 122, 161, 122, 177, 122, 164, 163, 169, 176, 130,
+ 130, 130, 122, 168, 176, 161, 186, 184, 130, 164, 168, 122, 121, 168, 121, 122,
+ 162, 121, 161, 121, 121, 169, 177, 121, 162, 168, 142, 161, 177, 168, 122, 96,
+ 177, 166, 122, 168, 122, 168, 162, 168, 122, 176, 168, 178, 190, 161, 122, 161,
+ 162, 122, 92, 168, 165, 168, 164, 169, 165, 122, 177, 122, 153, 130, 163, 160,
+ 168, 168, 177, 168, 162, 177, 161, 162, 161, 166, 166, 178, 162, 168, 198, 169,
+ 122, 161, 166, 168, 172, 178, 175, 168, 176, 122, 161, 160, 92, 166, 162, 166,
+ 161, 168, 168, 168, 177, 166, 176, 122, 122, 177, 122, 168, 122, 177, 171, 161,
+ 186, 130, 164, 179, 168, 177, 177, 167, 161, 161, 177, 168, 168, 191, 177, 171,
+ 130, 130, 177, 161, 168, 168, 177, 162, 160, 168, 167, 122, 171, 161, 171, 177,
+ 177, 122, 176, 122, 164, 169, 122, 177, 169, 168, 171, 122, 176, 168, 168, 168,
+ 162, 161, 182, 162, 164, 161, 161, 160, 160, 122, 163, 160, 168, 176, 165, 122,
+ 166, 168, 168, 168, 176, 185, 92, 97, 168, 168, 161, 121, 176, 166, 169, 168,
+ 161, 122, 130, 94, 162, 177, 164, 168, 160, 168, 177, 168, 168, 168, 121, 176,
+ 169, 168, 166, 168, 161, 122, 161, 176, 168, 173, 176, 168, 122, 121, 162, 163,
+ 122, 177, 168, 122, 168, 166, 178, 168, 161, 172, 168, 122, 121, 169, 163, 122,
+ 161, 161, 168, 182, 168, 160, 161, 142, 92, 177, 168, 94, 168, 167, 168, 168,
+ 168, 164, 162, 97, 168, 177, 161, 122, 168, 177, 142, 122, 122, 161, 177, 164,
+ 177, 92, 122, 122, 162, 122, 163, 167, 168, 122, 162, 130, 166, 122, 122, 121,
+ 177, 177, 168, 122, 163, 161, 130, 168, 166, 168, 168, 177, 178, 96, 170, 130,
+ 130, 130, 122, 168, 161, 177, 177, 161, 160, 166, 161, 161, 169, 176, 177, 168,
+ 168, 166, 165, 168, 169, 181, 130, 130, 170, 161, 130, 161, 170, 176, 160, 96,
+ 142, 177, 177, 166, 161, 122, 165, 122, 168, 185, 168, 168, 211, 176, 177, 168,
+ 176, 168, 121, 168, 122, 177, 161, 176, 96, 170, 202, 130, 170, 160, 130, 113,
+ 130, 92, 160, 171, 182, 165, 161, 174, 177, 168, 168, 160, 166, 168, 176, 195,
+ 185, 160, 166, 160, 160, 130, 130, 130, 161, 92, 92, 92, 177, 122, 177, 161,
+ 177, 162, 168, 164, 177, 168, 160, 92, 177, 168, 166, 122, 122, 185, 166, 121,
+ 168, 168, 113, 92, 113, 92, 161, 130, 161, 168, 163, 168, 122, 161, 177, 97,
+ 168, 198, 161, 168, 168, 168, 178, 165, 160, 96, 164, 161, 122, 186, 122, 177,
+ 161, 122, 161, 169, 177, 178, 168, 122, 176, 168, 167, 130, 130, 162, 177, 176,
+ 168, 166, 168, 122, 177, 185, 161, 122, 177, 121, 178, 168, 177, 177, 161, 172,
+ 176, 174, 166, 176, 185, 113, 94, 161, 160, 170, 121, 191, 121, 162, 169, 162,
+ 161, 122, 161, 168, 168, 122, 181, 163, 177, 166, 122, 122, 177, 168, 191, 168,
+ 122, 178, 163, 163, 167, 176, 164, 94, 160, 130, 142, 177, 161, 168, 168, 177,
+ 177, 177, 168, 168, 162, 168, 162, 142, 122, 168, 177, 161, 122, 168, 160, 121,
+ 160, 160, 166, 177, 169, 128, 162, 176, 161, 168, 176, 191, 168, 178, 168, 177,
+ 162, 122, 168, 92, 168, 185, 163, 181, 161, 168, 161, 161, 177, 161, 121, 92,
+ 177, 178, 178, 185, 168, 161, 183, 168, 161, 142, 164, 168, 177, 168, 166, 162,
+ 164, 168, 161, 168, 185, 177, 142, 177, 168, 177, 121, 121, 121, 177, 160, 168,
+ 161, 177, 160, 94, 90, 177, 94, 161, 168, 168, 122, 90, 175, 177, 122, 177,
+ 122, 122, 168, 92, 177, 177, 176, 121, 122, 122, 177, 177, 168, 161, 92, 177,
+ 121, 177, 168, 167, 177, 142, 122, 122, 163, 160, 122, 192, 192, 122, 122, 169,
+ 122, 168, 175, 168, 168, 122, 161, 166, 122, 177, 168, 177, 161, 122, 161, 130,
+ 168, 160, 177, 168, 168, 161, 161, 202, 130, 177, 122, 162, 177, 168, 163, 121,
+ 175, 122, 168, 160, 184, 202, 160, 160, 168, 161, 167, 177, 162, 121, 121, 122,
+ 168, 201, 168, 177, 177, 177, 177, 168, 177, 160, 185, 177, 177, 172, 161, 160,
+ 168, 177, 168, 161, 168, 160, 121, 122, 177, 163, 121, 177, 168, 168, 121, 164,
+ 178, 188, 168, 122, 177, 161, 168, 168, 177, 122, 169, 166, 161, 122, 122, 121,
+ 122, 122, 162, 173, 163, 168, 179, 164, 171, 122, 204, 122, 160, 185, 168, 177,
+ 161, 122, 122, 161, 163, 165, 177, 161, 122, 161, 164, 161, 168, 177, 177, 122,
+ 177, 181, 163, 169, 122, 164, 122, 122, 161, 122, 177, 166, 178, 166, 168, 130,
+ 184, 163, 161, 161, 94, 161, 168, 168, 166, 161, 168, 122, 162, 130, 92, 161,
+ 122, 92, 166, 166, 168, 126, 170, 164, 121, 164, 177, 122, 177, 122, 184, 161,
+ 168, 177, 168, 168, 122, 177, 92, 165, 178, 180, 122, 177, 121, 161, 176, 121,
+ 122, 162, 168, 130, 92, 161, 168, 162, 168, 161, 161, 177, 161, 163, 121, 177,
+ 177, 121, 181, 130, 162, 162, 183, 122, 164, 166, 163, 122, 122, 122, 172, 122,
+ 121, 161, 181, 153, 177, 163, 122, 177, 177, 198, 168, 97, 171, 121, 121, 181,
+ 113, 130, 92, 161, 168, 162, 177, 122, 168, 162, 168, 168, 177, 162, 92, 177,
+ 171, 121, 121, 113, 161, 182, 161, 177, 168, 121, 164, 121, 168, 177, 168, 161,
+ 165, 168, 161, 161, 122, 177, 122, 130, 166, 122, 122, 168, 161, 198, 177, 122,
+ 166, 122, 164, 175, 122, 177, 166, 168, 122, 168, 177, 177, 168, 130, 92, 168,
+ 177, 174, 122, 196, 177, 122, 169, 169, 122, 168, 161, 92, 130, 130, 177, 122,
+ 176, 161, 168, 177, 161, 130, 130, 161, 185, 121, 121, 168, 166, 130, 121, 121,
+ 172, 168, 168, 166, 168, 177, 178, 168, 168, 162, 121, 163, 182, 161, 168, 169,
+ 168, 168, 160, 153, 121, 121, 162, 121, 172, 163, 121, 122, 164, 181, 162, 172,
+ 161, 177, 181, 172, 161, 181, 130, 183, 168, 122, 172, 163, 172, 198, 130, 122,
+ 122, 181, 172, 122, 168, 122, 167, 160, 162, 163, 198, 177, 164, 122, 168, 122,
+ 181, 164, 161, 161, 162, 161, 121, 168, 181, 122, 122, 177, 161, 176, 163, 122,
+ 168, 168, 113, 130, 167, 168, 169, 162, 167, 168, 167, 175, 94, 161, 168, 165,
+ 168, 122, 168, 168, 174, 130, 161, 161, 178, 122, 168, 122, 161, 168, 122, 163,
+ 122, 161, 168, 177, 185, 167, 122, 182, 169, 163, 166, 166, 122, 191, 176, 177,
+ 177, 166, 168, 167, 177, 178, 181, 161, 185, 205, 130, 168, 130, 162, 130, 162,
+ 177, 164, 160, 160, 168, 167, 121, 166, 178, 122, 168, 122, 165, 121, 177, 122,
+ 122, 122, 122, 161, 122, 163, 122, 161, 185, 161, 130, 130, 92, 202, 161, 92,
+ 190, 168, 179, 168, 177, 178, 177, 142, 161, 177, 162, 161, 198, 177, 122, 163,
+ 178, 167, 166, 177, 178, 122, 168, 176, 168, 173, 113, 170, 92, 183, 130, 92,
+ 130, 161, 168, 161, 171, 185, 181, 121, 168, 162, 168, 121, 168, 167, 177, 121,
+ 166, 177, 172, 161, 122, 122, 177, 122, 178, 178, 200, 177, 167, 122, 164, 181,
+ 171, 122, 170, 160, 168, 162, 130, 130, 130, 130, 202, 130, 166, 122, 161, 177,
+ 162, 122, 163, 161, 122, 177, 162, 168, 122, 168, 162, 162, 162, 162, 168, 161,
+ 121, 122, 164, 161, 121, 162, 122, 122, 162, 121, 177, 178, 169, 161, 168, 153,
+ 160, 130, 183, 130, 177, 168, 162, 162, 168, 176, 166, 171, 168, 167, 168, 168,
+ 121, 96, 168, 168, 121, 167, 169, 168, 177, 121, 166, 168, 161, 181, 130, 92,
+ 168, 185, 177, 178, 177, 162, 181, 169, 177, 177, 163, 168, 174, 168, 176, 168,
+ 178, 177, 177, 177, 162, 168, 177, 122, 161, 177, 168, 166, 176, 142, 177, 166,
+ 168, 142, 198, 113, 113, 94, 130, 113, 161, 177, 161, 163, 168, 168, 126, 167,
+ 177, 121, 168, 142, 161, 177, 166, 122, 177, 168, 122, 121, 177, 168, 161, 161,
+ 168, 162, 161, 177, 164, 160, 162, 142, 169, 177, 162, 168, 168, 121, 121, 122,
+ 169, 130, 160, 121, 160, 168, 162, 168, 168, 168, 177, 161, 121, 122, 161, 113,
+ 142, 163, 162, 177, 178, 162, 172, 168, 181, 177, 177, 177, 177, 163, 164, 142,
+ 121, 162, 161, 171, 121, 142, 168, 177, 161, 177, 168, 168, 121, 163, 171, 168,
+ 182, 161, 171, 122, 179, 178, 161, 161, 168, 177, 168, 179, 174, 176, 153, 168,
+ 168, 178, 113, 198, 168, 168, 163, 164, 168, 122, 168, 181, 168, 178, 160, 162,
+ 113, 185, 122, 161, 177, 122, 168, 122, 165, 161, 161, 181, 179, 130, 166, 122,
+ 164, 178, 167, 168, 184, 122, 163, 198, 178, 161, 130, 113, 94, 113, 186, 168,
+ 164, 122, 165, 122, 168, 97, 162, 164, 160, 122, 177, 177, 166, 169, 122, 177,
+ 113, 130, 172, 161, 164, 167, 161, 174, 166, 163, 122, 168, 185, 174, 142, 162,
+ 168, 168, 178, 163, 177, 176, 122, 166, 113, 176, 163, 161, 169, 171, 121, 122,
+ 122, 161, 142, 161, 92, 92, 163, 121, 185, 162, 168, 162, 168, 160, 168, 169,
+ 97, 168, 178, 160, 178, 163, 178, 168, 169, 94, 181, 122, 160, 168, 121, 161,
+ 121, 168, 121, 177, 121, 121, 121, 188, 191, 171, 122, 121, 168, 121, 168, 177,
+ 121, 177, 177, 177, 121, 142, 177, 121, 180, 121, 121, 121, 142, 177, 177, 168,
+ 122, 121, 122, 162, 161, 160, 162, 130, 168, 168, 162, 122, 180, 164, 121, 122,
+ 121, 171, 142, 121, 161, 180, 168, 161, 168, 121, 180, 168, 171, 177, 177, 178,
+ 171, 177, 121, 121, 121, 180, 121, 177, 164, 161, 168, 113, 181, 163, 178, 178,
+ 121, 177, 168, 177, 168, 97, 178, 164, 168, 164, 163, 142, 177, 163, 121, 168,
+ 161, 121, 121, 178, 161, 162, 121, 177, 121, 168, 191, 168, 161, 168, 122, 168,
+ 171, 121, 121, 121, 161, 181, 196, 130, 164, 121, 177, 177, 168, 178, 161, 191,
+ 168, 171, 162, 177, 168, 177, 177, 161, 177, 172, 161, 164, 177, 177, 194, 121,
+ 161, 171, 168, 121, 168, 161, 177, 163, 161, 181, 113, 113, 121, 177, 171, 178,
+ 126, 168, 121, 178, 160, 92, 166, 177, 160, 168, 177, 172, 121, 121, 167, 178,
+ 142, 121, 121, 163, 121, 121, 164, 177, 121, 177, 121, 121, 168, 121, 121, 121,
+ 168, 168, 177, 162, 177, 177, 177, 121, 161, 168, 121, 180, 177, 163, 177, 172,
+ 160, 181, 142, 160, 94, 113, 195, 177, 121, 171, 121, 168, 172, 121, 121, 168,
+ 121, 180, 164, 126, 172, 163, 177, 168, 121, 121, 177, 164, 121, 164, 168, 121,
+ 168, 177, 142, 168, 121, 163, 177, 168, 161, 171, 177, 121, 161, 160, 160, 161,
+ 164, 181, 161, 168, 113, 113, 92, 160, 171, 121, 121, 178, 168, 168, 168, 168,
+ 171, 171, 178, 168, 168, 191, 168, 177, 92, 161, 168, 121, 177, 188, 121, 180,
+ 177, 180, 178, 121, 168, 168, 181, 163, 162, 168, 168, 121, 164, 177, 121, 188,
+ 168, 121, 142, 177, 97, 142, 177, 121, 168, 142, 178, 167, 168, 121, 121, 171,
+ 168, 122, 168, 121, 177, 171, 121, 192, 97, 168, 113, 113, 168, 181, 162, 161,
+ 177, 168, 188, 168, 121, 121, 178, 168, 177, 142, 142, 161, 168, 181, 121, 177,
+ 168, 188, 177, 168, 161, 182, 181, 153, 168, 121, 121, 188, 161, 121, 163, 177,
+ 180, 161, 168, 171, 168, 168, 168, 168, 177, 121, 168, 178, 121, 142, 177, 172,
+ 168, 177, 122, 113, 161, 161, 177, 177, 178, 181, 177, 168, 121, 177, 172, 121,
+ 113, 177, 172, 121, 142, 177, 121, 168, 191, 168, 177, 165, 121, 162, 164, 170,
+ 130, 130, 130, 130, 170, 130, 130, 130, 130, 130, 130, 130, 170, 130, 92, 130,
+ 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 170, 92, 92, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 170, 130, 130, 130, 130, 130, 130, 130, 170,
+ 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 170,
+ 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 170, 130, 130, 130, 92, 130, 130, 130, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 122, 94, 122, 168, 122, 164, 162, 171, 177, 177,
+ 160, 160, 130, 177, 176, 167, 161, 163, 97, 94, 168, 168, 121, 178, 172, 177,
+ 122, 167, 182, 182, 122, 122, 92, 130, 167, 161, 130, 177, 177, 177, 168, 169,
+ 178, 166, 173, 177, 162, 177, 177, 178, 167, 169, 122, 180, 168, 177, 122, 161,
+ 121, 174, 122, 168, 130, 121, 168, 121, 172, 122, 168, 168, 168, 177, 166, 177,
+ 162, 130, 113, 178, 161, 121, 178, 178, 121, 168, 122, 171, 122, 177, 122, 163,
+ 162, 177, 168, 160, 122, 168, 177, 163, 92, 161, 122, 168, 177, 167, 122, 130,
+ 168, 166, 177, 172, 122, 168, 177, 185, 121, 121, 162, 92, 168, 177, 172, 169,
+ 185, 168, 122, 168, 163, 168, 142, 168, 122, 122, 168, 168, 176, 122, 168, 176,
+ 177, 122, 168, 177, 161, 122, 181, 168, 162, 168, 165, 168, 122, 168, 190, 177,
+ 168, 168, 121, 161, 122, 122, 161, 168, 130, 92, 92, 177, 168, 160, 168, 190,
+ 122, 122, 168, 177, 92, 166, 167, 160, 177, 122, 168, 180, 177, 168, 176, 177,
+ 122, 96, 177, 169, 168, 168, 161, 168, 168, 121, 163, 169, 122, 177, 177, 177,
+ 122, 122, 160, 122, 169, 122, 122, 177, 163, 183, 164, 169, 122, 176, 177, 177,
+ 122, 171, 169, 162, 166, 122, 166, 122, 122, 169, 161, 168, 169, 163, 177, 177,
+ 90, 178, 130, 161, 177, 170, 176, 130, 169, 185, 185, 161, 177, 183, 163, 160,
+ 177, 170, 92, 122, 177, 166, 122, 166, 130, 177, 162, 175, 163, 122, 177, 122,
+ 164, 161, 130, 211, 164, 161, 122, 168, 168, 161, 122, 130, 130, 130, 161, 168,
+ 168, 168, 169, 161, 170, 92, 121, 161, 122, 161, 122, 160, 168, 168, 121, 181,
+ 164, 172, 153, 160, 177, 161, 163, 168, 181, 130, 173, 161, 168, 162, 161, 121,
+ 121, 176, 121, 121, 181, 177, 142, 121, 168, 178, 161, 161, 161, 121, 121, 122,
+ 170, 162, 168, 130, 122, 121, 122, 122, 162, 122, 168, 122, 122, 161, 164, 168,
+ 168, 161, 168, 169, 161, 168, 122, 161, 169, 168, 169, 122, 166, 122, 162, 179,
+ 130, 122, 122, 168, 173, 122, 164, 163, 161, 122, 122, 176, 181, 167, 185, 122,
+ 161, 122, 122, 161, 122, 168, 160, 170, 177, 162, 122, 161, 170, 170, 130, 130,
+ 130, 130, 185, 122, 122, 168, 175, 168, 177, 168, 168, 161, 122, 166, 122, 177,
+ 168, 168, 164, 161, 177, 177, 169, 166, 177, 167, 122, 122, 185, 169, 122, 161,
+ 177, 122, 161, 168, 122, 122, 168, 130, 130, 170, 130, 130, 170, 176, 164, 169,
+ 176, 122, 166, 176, 122, 168, 174, 161, 122, 177, 166, 168, 169, 122, 177, 161,
+ 168, 168, 122, 163, 161, 121, 122, 198, 121, 175, 122, 162, 94, 130, 170, 130,
+ 130, 130, 170, 130, 179, 168, 176, 163, 192, 168, 186, 180, 162, 168, 166, 168,
+ 162, 168, 168, 121, 171, 168, 92, 177, 161, 121, 160, 126, 166, 168, 161, 122,
+ 171, 184, 170, 113, 160, 162, 130, 94, 130, 121, 177, 161, 162, 168, 122, 92,
+ 161, 161, 160, 168, 168, 164, 169, 177, 179, 161, 166, 122, 176, 168, 121, 168,
+ 122, 122, 177, 169, 122, 122, 94, 162, 92, 170, 170, 168, 168, 161, 168, 181,
+ 166, 177, 168, 161, 168, 122, 121, 166, 162, 166, 161, 121, 161, 174, 169, 177,
+ 122, 122, 168, 97, 169, 161, 168, 177, 121, 122, 122, 130, 170, 173, 130, 122,
+ 122, 164, 169, 178, 163, 162, 177, 168, 122, 168, 122, 177, 168, 168, 162, 122,
+ 162, 130, 161, 172, 161, 178, 164, 168, 176, 168, 121, 176, 122, 122, 177, 168,
+ 121, 161, 177, 165, 113, 94, 185, 168, 122, 142, 179, 168, 168, 161, 177, 161,
+ 178, 168, 177, 122, 177, 180, 94, 168, 181, 168, 122, 166, 168, 121, 121, 121,
+ 122, 170, 122, 176, 168, 177, 122, 168, 172, 142, 166, 162, 185, 121, 164, 171,
+ 168, 178, 168, 113, 161, 177, 161, 177, 121, 178, 142, 177, 92, 177, 177, 121,
+ 178, 177, 97, 122, 182, 121, 168, 122, 121, 168, 122, 162, 176, 122, 168, 160,
+ 162, 162, 177, 122, 122, 162, 163, 168, 177, 177, 121, 122, 122, 162, 122, 177,
+ 176, 167, 169, 164, 185, 122, 130, 121, 121, 142, 121, 168, 122, 122, 181, 162,
+ 169, 168, 122, 164, 176, 168, 178, 113, 172, 164, 163, 122, 122, 177, 122, 122,
+ 168, 192, 176, 130, 161, 168, 94, 161, 176, 172, 122, 122, 122, 179, 113, 185,
+ 130, 130, 177, 167, 166, 122, 122, 122, 167, 122, 177, 130, 168, 168, 170, 168,
+ 180, 161, 168, 162, 166, 191, 162, 122, 161, 185, 161, 176, 161, 92, 177, 166,
+ 168, 177, 168, 168, 94, 168, 177, 168, 169, 121, 167, 168, 177, 113, 168, 167,
+ 162, 168, 172, 177, 180, 160, 121, 162, 167, 168, 181, 178, 168, 177, 122, 122,
+ 130, 121, 122, 130, 166, 168, 198, 142, 180, 170, 170, 163, 168, 166, 122, 166,
+ 177, 162, 130, 177, 166, 168, 161, 182, 130, 162, 166, 122, 161, 122, 192, 185,
+ 168, 166, 122, 168, 177, 161, 162, 130, 166, 122, 191, 177, 173, 122, 168, 122,
+ 177, 166, 168, 171, 166, 122, 186, 177, 166, 192, 174, 167, 122, 122, 192, 122,
+ 176, 122, 164, 122, 166, 168, 168, 190, 122, 122, 177, 121, 191, 122, 176, 197,
+ 168, 130, 168, 168, 179, 113, 162, 130, 130, 161, 170, 130, 130, 130, 130, 170,
+ 163, 122, 122, 169, 122, 192, 168, 122, 179, 178, 162, 122, 169, 161, 122, 122,
+ 166, 165, 163, 169, 166, 122, 122, 121, 177, 161, 177, 167, 168, 177, 160, 176,
+ 168, 122, 168, 178, 167, 168, 177, 174, 161, 167, 178, 167, 160, 193, 191, 94,
+ 177, 190, 122, 122, 122, 122, 169, 166, 166, 122, 162, 163, 185, 168, 184, 130,
+ 161, 130, 161, 92, 130, 130, 178, 122, 172, 168, 170, 166, 167, 163, 177, 164,
+ 168, 164, 177, 181, 168, 168, 168, 185, 122, 168, 168, 122, 166, 166, 162, 165,
+ 162, 122, 142, 166, 122, 122, 122, 177, 122, 122, 166, 168, 166, 182, 161, 168,
+ 122, 168, 177, 176, 177, 178, 173, 192, 168, 122, 121, 168, 168, 177, 177, 122,
+ 169, 192, 122, 177, 176, 162, 177, 163, 181, 92, 130, 130, 130, 92, 130, 130,
+ 130, 130, 160, 179, 130, 130, 170, 130, 130, 130, 130, 130, 130, 130, 130, 170,
+ 162, 161, 161, 180, 168, 178, 168, 122, 176, 161, 168, 122, 169, 166, 168, 177,
+ 164, 168, 162, 168, 164, 175, 176, 178, 168, 122, 121, 168, 168, 177, 122, 168,
+ 168, 160, 176, 169, 177, 177, 121, 168, 190, 177, 178, 166, 174, 177, 122, 181,
+ 169, 161, 121, 168, 168, 168, 177, 171, 167, 192, 165, 122, 182, 164, 168, 168,
+ 185, 202, 130, 130, 130, 113, 130, 173, 130, 170, 130, 92, 130, 122, 182, 177,
+ 166, 122, 168, 168, 168, 122, 168, 166, 168, 191, 122, 168, 122, 160, 178, 166,
+ 162, 177, 161, 198, 176, 168, 165, 168, 167, 168, 161, 168, 122, 166, 168, 169,
+ 169, 185, 168, 168, 168, 185, 161, 168, 177, 122, 166, 180, 168, 160, 168, 121,
+ 122, 122, 122, 168, 121, 168, 177, 113, 176, 192, 168, 178, 177, 122, 168, 168,
+ 161, 166, 161, 122, 122, 160, 166, 142, 161, 168, 188, 169, 122, 122, 122, 166,
+ 168, 166, 168, 178, 160, 162, 160, 161, 179, 162, 92, 168, 170, 130, 161, 161,
+ 153, 160, 113, 168, 170, 130, 170, 130, 130, 180, 181, 168, 121, 168, 160, 177,
+ 168, 122, 168, 168, 168, 142, 168, 168, 122, 177, 168, 168, 169, 122, 160, 168,
+ 168, 161, 168, 168, 168, 177, 169, 177, 163, 121, 163, 168, 168, 177, 178, 164,
+ 168, 166, 177, 160, 168, 160, 177, 122, 163, 166, 166, 122, 174, 168, 168, 168,
+ 177, 122, 172, 122, 163, 177, 121, 177, 168, 169, 162, 122, 122, 169, 178, 180,
+ 177, 175, 160, 166, 177, 122, 166, 142, 166, 178, 165, 161, 162, 177, 168, 160,
+ 160, 162, 169, 161, 181, 162, 168, 130, 170, 130, 92, 202, 130, 168, 185, 168,
+ 121, 168, 163, 163, 180, 164, 160, 185, 168, 122, 168, 168, 122, 168, 171, 178,
+ 168, 165, 168, 160, 168, 161, 162, 168, 177, 177, 177, 168, 168, 172, 168, 166,
+ 168, 177, 122, 161, 166, 161, 168, 161, 122, 167, 166, 180, 121, 174, 182, 122,
+ 188, 167, 191, 161, 122, 168, 121, 177, 164, 122, 169, 121, 177, 165, 168, 177,
+ 167, 122, 168, 176, 168, 161, 167, 168, 161, 113, 198, 168, 162, 130, 160, 130,
+ 130, 160, 160, 130, 160, 170, 130, 177, 168, 168, 177, 168, 122, 161, 121, 177,
+ 166, 177, 177, 168, 180, 161, 168, 177, 160, 168, 177, 177, 165, 177, 168, 169,
+ 178, 161, 177, 163, 161, 160, 142, 177, 168, 168, 168, 168, 166, 168, 177, 168,
+ 182, 122, 168, 122, 121, 178, 168, 122, 180, 168, 122, 161, 177, 168, 191, 167,
+ 168, 122, 162, 188, 177, 188, 178, 177, 168, 168, 177, 166, 122, 121, 168, 191,
+ 168, 168, 162, 163, 163, 181, 162, 130, 170, 130, 130, 185, 130, 122, 168, 204,
+ 178, 180, 160, 122, 168, 168, 177, 168, 169, 122, 169, 172, 160, 168, 180, 162,
+ 162, 177, 182, 191, 168, 178, 166, 178, 178, 190, 172, 168, 164, 177, 176, 164,
+ 177, 177, 177, 180, 166, 168, 168, 168, 122, 121, 121, 177, 168, 121, 168, 163,
+ 160, 168, 130, 160, 130, 168, 168, 178, 168, 166, 166, 166, 168, 162, 169, 164,
+ 178, 177, 168, 168, 122, 166, 177, 122, 178, 177, 142, 177, 177, 168, 168, 192,
+ 178, 121, 161, 164, 121, 168, 168, 181, 177, 178, 168, 122, 169, 177, 168, 177,
+ 177, 168, 177, 168, 167, 162, 121, 177, 122, 121, 122, 181, 181, 162, 202, 122,
+ 129, 168, 161, 168, 177, 168, 177, 166, 177, 169, 121, 161, 162, 177, 177, 177,
+ 168, 186, 177, 168, 168, 168, 168, 177, 168, 122, 162, 177, 161, 121, 191, 122,
+ 169, 168, 168, 130, 161, 122, 161, 168, 177, 168, 177, 161, 165, 121, 168, 177,
+ 182, 168, 168, 168, 122, 121, 177, 161, 177, 122, 121, 168, 168, 177, 160, 168,
+ 168, 168, 168, 162, 161, 161, 177, 121, 168, 142, 121, 122, 163, 168, 178, 192,
+ 177, 168, 198, 161, 177, 166, 121, 121, 161, 168, 121, 142, 168, 163, 162, 161,
+ 163, 176, 162, 181, 94, 161, 186, 121, 177, 177, 121, 177, 168, 161, 177, 168,
+ 168, 177, 178, 168, 168, 168, 168, 166, 160, 166, 168, 161, 168, 121, 168, 172,
+ 113, 168, 168, 168, 168, 168, 177, 161, 176, 168, 177, 168, 166, 164, 168, 121,
+ 177, 164, 163, 168, 92, 160, 177, 168, 168, 161, 161, 168, 168, 167, 122, 130,
+ 122, 130, 177, 177, 122, 121, 177, 164, 164, 177, 184, 126, 121, 164, 122, 121,
+ 162, 177, 166, 177, 177, 168, 92, 121, 168, 177, 168, 169, 174, 168, 185, 177,
+ 168, 169, 160, 168, 168, 164, 164, 177, 161, 122, 176, 169, 185, 173, 170, 130,
+ 130, 130, 130, 92, 161, 168, 168, 168, 162, 161, 122, 167, 122, 166, 168, 161,
+ 168, 177, 160, 122, 168, 167, 177, 168, 177, 168, 177, 161, 176, 185, 168, 161,
+ 160, 177, 168, 122, 122, 168, 164, 166, 166, 122, 169, 113, 130, 182, 161, 169,
+ 167, 176, 160, 177, 166, 176, 169, 177, 177, 177, 185, 168, 168, 168, 168, 177,
+ 176, 177, 168, 177, 169, 177, 169, 122, 168, 169, 130, 122, 168, 113, 202, 130,
+ 96, 166, 162, 168, 122, 164, 168, 177, 185, 122, 177, 122, 177, 168, 169, 122,
+ 162, 161, 168, 177, 122, 162, 168, 162, 168, 167, 168, 168, 178, 122, 184, 153,
+ 130, 130, 130, 130, 130, 168, 168, 168, 167, 169, 177, 142, 164, 164, 122, 161,
+ 122, 168, 122, 122, 177, 177, 142, 176, 122, 167, 169, 177, 168, 167, 177, 162,
+ 162, 178, 167, 176, 162, 173, 161, 130, 122, 177, 165, 168, 122, 161, 166, 162,
+ 168, 166, 96, 166, 168, 169, 168, 168, 177, 169, 168, 161, 168, 168, 166, 162,
+ 168, 166, 177, 168, 169, 168, 161, 169, 168, 164, 177, 169, 177, 164, 166, 169,
+ 177, 168, 168, 177, 92, 164, 168, 173, 130, 202, 161, 113, 169, 177, 165, 168,
+ 168, 168, 168, 169, 168, 121, 168, 122, 177, 169, 168, 168, 168, 177, 168, 180,
+ 169, 177, 168, 167, 166, 166, 121, 168, 121, 168, 178, 168, 168, 168, 167, 177,
+ 170, 163, 162, 168, 122, 168, 122, 168, 121, 168, 168, 166, 130, 179, 130, 113,
+ 92, 168, 122, 176, 177, 166, 182, 177, 166, 177, 161, 174, 182, 122, 161, 168,
+ 177, 168, 168, 166, 168, 162, 168, 166, 177, 164, 168, 168, 168, 168, 171, 122,
+ 162, 161, 121, 177, 168, 160, 92, 162, 130, 160, 168, 169, 166, 166, 177, 167,
+ 168, 163, 168, 122, 168, 166, 168, 168, 168, 168, 122, 142, 168, 167, 177, 177,
+ 169, 163, 168, 168, 180, 168, 169, 181, 171, 177, 166, 169, 168, 161, 163, 92,
+ 113, 96, 169, 185, 168, 164, 163, 168, 168, 177, 163, 185, 177, 168, 168, 177,
+ 122, 168, 177, 177, 177, 185, 168, 168, 168, 161, 166, 177, 126, 177, 179, 121,
+ 161, 162, 121, 177, 168, 160, 178, 178, 164, 122, 177, 121, 168, 161, 122, 177,
+ 168, 177, 168, 166, 94, 121, 177, 161, 168, 177, 166, 177, 168, 142, 181, 172,
+ 177, 178, 164, 166, 171, 169, 167, 168, 163, 177, 164, 166, 177, 168, 162, 188,
+ 168, 169, 122, 121, 168, 168, 168, 172, 177, 168, 168, 168, 168, 163, 177, 168,
+ 177, 121, 166, 168, 161, 177, 121, 168, 168, 169, 162, 121, 166, 168, 168, 168,
+ 122, 177, 172, 177, 167, 174, 198, 161, 177, 162, 177, 177, 122, 122, 177, 160,
+ 161, 162, 180, 121, 130, 177, 177, 122, 164, 122, 177, 121, 164, 121, 172, 164,
+ 182, 122, 122, 122, 90, 170, 161, 168, 122, 166, 168, 122, 130, 168, 179, 168,
+ 122, 177, 165, 161, 168, 178, 168, 122, 161, 171, 161, 164, 168, 169, 165, 165,
+ 177, 122, 122, 168, 179, 130, 92, 160, 122, 168, 161, 122, 168, 122, 168, 161,
+ 161, 168, 122, 168, 161, 168, 122, 180, 177, 178, 177, 177, 174, 92, 121, 177,
+ 163, 168, 167, 161, 167, 161, 161, 168, 177, 161, 177, 122, 168, 130, 153, 92,
+ 113, 169, 168, 92, 198, 172, 168, 167, 168, 168, 177, 161, 185, 177, 177, 172,
+ 177, 122, 122, 113, 113, 187, 130, 94, 92, 185, 171, 177, 177, 177, 166, 198,
+ 168, 162, 176, 162, 122, 122, 168, 168, 169, 122, 168, 177, 121, 121, 177, 122,
+ 161, 121, 130, 130, 130, 130, 160, 177, 122, 161, 161, 168, 168, 161, 168, 171,
+ 166, 166, 178, 122, 122, 193, 168, 177, 122, 169, 168, 168, 167, 121, 167, 160,
+ 160, 177, 169, 161, 113, 168, 177, 121, 92, 168, 169, 168, 178, 162, 177, 164,
+ 122, 168, 122, 122, 168, 171, 177, 168, 191, 192, 176, 173, 162, 113, 178, 168,
+ 162, 96, 168, 168, 160, 122, 177, 177, 162, 168, 122, 169, 168, 168, 168, 168,
+ 166, 177, 171, 168, 130, 177, 122, 168, 121, 164, 162, 121, 168, 97, 177, 161,
+ 164, 165, 177, 172, 122, 162, 177, 94, 161, 177, 161, 168, 178, 172, 161, 177,
+ 168, 168, 177, 168, 160, 92, 142, 177, 168, 168, 177, 177, 177, 168, 169, 122,
+ 142, 177, 177, 177, 121, 160, 167, 161, 92, 168, 121, 177, 97, 178, 177, 142,
+ 162, 168, 121, 177, 178, 162, 168, 153, 161, 168, 177, 166, 177, 164, 178, 122,
+ 94, 122, 168, 122, 161, 168, 122, 198, 178, 163, 172, 121, 161, 162, 92, 121,
+ 162, 160, 161, 121, 163, 177, 121, 178, 178, 92, 181, 177, 171, 168, 168, 177,
+ 162, 180, 168, 168, 168, 163, 142, 172, 92, 198, 121, 161, 142, 168, 168, 178,
+ 164, 161, 121, 181, 162, 164, 177, 177, 92, 168, 121, 161, 163, 121, 168, 178,
+ 121, 170, 130, 92, 130, 130, 170, 130, 130, 130, 130, 130, 130, 92, 130, 130,
+ 130, 130, 122, 168, 171, 177, 166, 162, 162, 168, 167, 168, 167, 178, 130, 168,
+ 168, 168, 168, 122, 168, 166, 167, 172, 168, 177, 161, 166, 168, 177, 161, 130,
+ 168, 177, 168, 166, 121, 161, 177, 168, 121, 162, 168, 168, 97, 162, 168, 177,
+ 122, 92, 121, 121, 177, 164, 161, 166, 121, 92, 121, 161, 121, 161, 121, 171,
+ 142, 171, 177, 121, 162, 171, 121, 121, 121, 161, 92, 121, 160, 121, 177, 121,
+ 164, 161, 171, 121, 162, 121, 164, 168, 161, 160, 121, 163, 177, 121, 161, 162,
+ 168, 121, 161, 113, 121, 164, 121, 162, 160, 168, 121, 121, 142, 163, 176, 168,
+ 177, 142, 161, 164, 168, 177, 142, 162, 167, 163, 168, 161, 168, 177, 177, 168,
+ 121, 178, 178, 162, 121, 121, 171, 177, 177, 168, 161, 121, 162, 164, 121, 92,
+ 121, 177, 121, 121, 161, 164, 121, 163, 97, 121, 161, 142, 142, 121, 121, 161,
+ 121, 121, 121, 121, 168, 191, 177, 177, 161, 190, 177, 171, 142, 161, 163, 177,
+ 164, 168, 178, 177, 178, 121, 177, 121, 161, 202, 130, 177, 121, 121, 161, 177,
+ 163, 142, 177, 122, 160, 121, 177, 162, 121, 177, 142, 161, 160, 161, 121, 164,
+ 121, 121, 161, 121, 121, 121, 121, 171, 121, 163, 126, 168, 181, 113, 162, 163,
+ 121, 161, 121, 164, 160, 161, 171, 164, 168, 121, 168, 177, 121, 168, 191, 121,
+ 168, 161, 121, 177, 121, 168, 177, 121, 177, 171, 164, 121, 181, 121, 161, 180,
+ 161, 177, 121, 177, 177, 177, 121, 177, 168, 168, 153, 121, 121, 177, 178, 177,
+ 178, 180, 178, 161, 178, 161, 121, 121, 168, 161, 203, 121, 164, 121, 121, 168,
+ 177, 121, 168, 142, 177, 177, 188, 121, 121, 161, 121, 168, 171, 161, 121, 177,
+ 121, 121, 121, 161, 121, 177, 177, 167, 168, 161, 171, 177, 172, 168, 121, 168,
+ 121, 177, 168, 168, 180, 168, 180, 121, 168, 121, 180, 121, 177, 121, 177, 163,
+ 121, 113, 168, 168, 168, 168, 167, 168, 121, 161, 168, 121, 121, 163, 168, 168,
+ 177, 168, 161, 180, 161, 168, 168, 177, 161, 121, 168, 168, 177, 168, 178, 160,
+ 168, 121, 177, 163, 162, 177, 171, 168, 177, 121, 168, 168, 172, 163, 121, 121,
+ 168, 168, 177, 177, 177, 168, 178, 168, 121, 171, 121, 113, 121, 168, 182, 142,
+ 168, 161, 160, 177, 161, 168, 122, 168, 168, 160, 168, 142, 122, 177, 161, 121,
+ 121, 181, 113, 161, 121, 161, 162, 121, 177, 177, 168, 168, 164, 121, 177, 168,
+ 121, 163, 168, 181, 177, 177, 168, 161, 168, 92, 121, 177, 178, 164, 178, 162,
+ 198, 161, 121, 121, 177, 177, 121, 161, 168, 178, 121, 160, 171, 161, 177, 177,
+ 170, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130,
+ 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 170, 130,
+ 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 170, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 122, 162, 177, 181, 168, 168, 177, 177, 121,
+ 161, 122, 168, 168, 161, 177, 122, 166, 121, 176, 180, 177, 122, 168, 142, 177,
+ 142, 163, 161, 164, 171, 122, 168, 177, 164, 162, 122, 164, 168, 177, 161, 168,
+ 161, 122, 169, 164, 177, 168, 177, 161, 177, 177, 122, 122, 142, 171, 92, 168,
+ 168, 168, 168, 176, 161, 177, 177, 168, 167, 122, 122, 177, 181, 168, 164, 161,
+ 168, 168, 122, 161, 168, 167, 177, 164, 161, 169, 122, 162, 122, 142, 181, 168,
+ 177, 168, 177, 171, 167, 168, 161, 168, 167, 177, 168, 163, 177, 121, 121, 160,
+ 121, 121, 121, 168, 177, 168, 161, 121, 121, 121, 121, 121, 121, 172, 181, 121,
+ 180, 161, 142, 121, 121, 168, 121, 121, 121, 177, 177, 121, 121, 121, 168, 121,
+ 121, 121, 121, 121, 121, 171, 162, 121, 121, 164, 121, 162, 168, 172, 113, 177,
+ 161, 121, 97, 121, 160, 177, 163, 168, 161, 177, 180, 172, 121, 177, 121, 168,
+ 121, 171, 121, 121, 121, 168, 121, 168, 177, 160, 121, 160, 171, 121, 168, 164,
+ 177, 168, 163, 168, 126, 177, 161, 163, 171, 168, 142, 121, 121, 121, 177, 162,
+ 168, 162, 168, 163, 180, 121, 168, 180, 121, 177, 121, 172, 160, 121, 161, 142,
+ 178, 160, 163, 121, 178, 168, 121, 171, 160, 168, 161, 171, 160, 170, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 92, 92, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 92,
+ 130, 130, 130, 130, 122, 164, 122, 169, 168, 177, 92, 122, 177, 169, 177, 168,
+ 122, 181, 168, 122, 122, 130, 185, 122, 168, 168, 160, 168, 161, 168, 161, 164,
+ 168, 169, 163, 161, 166, 122, 161, 161, 164, 168, 122, 173, 168, 177, 168, 168,
+ 177, 166, 168, 168, 185, 171, 168, 161, 161, 121, 161, 168, 168, 161, 162, 176,
+ 177, 168, 161, 122, 161, 168, 163, 168, 121, 160, 168, 177, 177, 168, 168, 177,
+ 161, 130, 177, 122, 96, 166, 168, 177, 130, 177, 122, 164, 166, 161, 122, 185,
+ 163, 168, 178, 170, 130, 177, 190, 177, 177, 161, 164, 122, 122, 168, 176, 165,
+ 168, 176, 161, 168, 163, 177, 167, 166, 168, 177, 169, 122, 168, 122, 130, 169,
+ 168, 121, 168, 165, 176, 162, 97, 177, 122, 168, 169, 167, 166, 161, 168, 122,
+ 177, 177, 177, 122, 177, 202, 92, 130, 130, 130, 96, 130, 142, 166, 168, 178,
+ 168, 163, 168, 168, 177, 166, 177, 168, 181, 167, 165, 164, 130, 168, 94, 122,
+ 121, 177, 168, 168, 166, 168, 177, 168, 168, 168, 168, 168, 168, 169, 122, 169,
+ 177, 171, 176, 166, 168, 168, 177, 177, 160, 96, 186, 97, 130, 94, 185, 130,
+ 180, 176, 161, 177, 142, 122, 177, 162, 177, 176, 170, 161, 168, 166, 168, 168,
+ 166, 166, 122, 161, 122, 168, 160, 165, 122, 122, 122, 176, 178, 177, 177, 163,
+ 178, 130, 130, 168, 177, 142, 168, 168, 161, 122, 168, 177, 177, 177, 177, 121,
+ 180, 177, 177, 142, 142, 168, 96, 168, 160, 166, 168, 161, 176, 166, 92, 166,
+ 189, 182, 169, 168, 122, 160, 122, 160, 168, 162, 171, 177, 169, 92, 94, 130,
+ 94, 122, 171, 164, 178, 169, 168, 122, 168, 171, 121, 142, 168, 121, 168, 130,
+ 166, 142, 177, 142, 167, 177, 168, 168, 168, 181, 177, 162, 130, 177, 166, 168,
+ 168, 142, 164, 168, 168, 168, 168, 163, 168, 177, 121, 122, 122, 163, 162, 184,
+ 172, 181, 96, 164, 161, 162, 160, 161, 161, 161, 176, 162, 160, 168, 113, 161,
+ 188, 164, 168, 163, 162, 113, 181, 162, 113, 168, 121, 121, 121, 121, 170, 171,
+ 92, 177, 121, 168, 171, 161, 161, 168, 168, 161, 94, 142, 177, 168, 168, 121,
+ 168, 168, 153, 113, 160, 168, 168, 168, 177, 168, 161, 180, 168, 182, 177, 168,
+ 162, 177, 160, 161, 168, 168, 168, 177, 121, 177, 177, 121, 142, 181, 121, 168,
+ 177, 168, 177, 121, 161, 180, 168, 177, 177, 121, 142, 168, 113, 168, 168, 162,
+ 177, 168, 121, 121, 121, 121, 177, 177, 177, 172, 168, 121, 121, 121, 188, 121,
+ 177, 162, 161, 177, 168, 171, 121, 204, 162, 121, 121, 161, 177, 163, 177, 121,
+ 160, 161, 168, 121, 177, 177, 177, 177, 121, 180, 162, 121, 161, 161, 121, 121,
+ 177, 163, 142, 177, 121, 121, 178, 177, 168, 121, 160, 168, 113, 121, 121, 177,
+ 168, 177, 177, 177, 171, 177, 168, 178, 177, 168, 168, 168, 172, 191, 177, 121,
+ 168, 142, 180, 178, 178, 164, 170, 170, 130, 130, 92, 130, 130, 130, 170, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130,
+ 130, 130, 92, 170, 130, 130, 130, 130, 130, 130, 130, 122, 122, 164, 184, 169,
+ 163, 164, 161, 122, 164, 163, 188, 181, 122, 130, 161, 130, 161, 121, 142, 121,
+ 122, 122, 121, 160, 168, 163, 90, 153, 182, 179, 153, 153, 153, 130, 174, 178,
+ 162, 174, 122, 92, 169, 122, 171, 173, 130, 168, 163, 177, 160, 177, 122, 161,
+ 90, 122, 177, 166, 122, 166, 168, 168, 173, 173, 153, 130, 130, 130, 130, 130,
+ 177, 168, 169, 177, 176, 169, 122, 161, 176, 184, 122, 122, 92, 122, 166, 181,
+ 122, 164, 183, 130, 142, 177, 177, 122, 169, 186, 142, 177, 168, 122, 177, 168,
+ 122, 122, 192, 122, 166, 122, 122, 92, 193, 173, 130, 165, 177, 122, 181, 122,
+ 122, 165, 179, 181, 122, 121, 169, 122, 162, 121, 122, 176, 168, 122, 122, 122,
+ 122, 165, 122, 121, 168, 161, 130, 113, 164, 164, 164, 161, 164, 166, 122, 166,
+ 161, 121, 121, 182, 177, 122, 169, 163, 122, 113, 161, 173, 122, 168, 122, 177,
+ 161, 122, 122, 164, 166, 181, 161, 122, 161, 178, 121, 121, 163, 122, 121, 169,
+ 122, 122, 167, 122, 121, 121, 153, 130, 169, 121, 161, 176, 121, 188, 121, 161,
+ 121, 198, 176, 122, 94, 202, 162, 177, 169, 121, 161, 168, 182, 122, 122, 180,
+ 177, 161, 121, 168, 176, 122, 178, 121, 121, 177, 121, 168, 121, 122, 168, 122,
+ 122, 121, 122, 122, 121, 177, 168, 121, 190, 181, 121, 176, 162, 168, 162, 121,
+ 171, 122, 161, 173, 168, 190, 161, 166, 177, 192, 161, 166, 161, 130, 168, 168,
+ 177, 166, 190, 122, 161, 177, 122, 168, 198, 161, 122, 161, 130, 161, 170, 165,
+ 192, 122, 177, 166, 166, 122, 176, 161, 122, 173, 130, 170, 161, 177, 166, 168,
+ 161, 122, 161, 171, 174, 166, 161, 166, 177, 161, 122, 168, 162, 161, 169, 130,
+ 130, 130, 162, 130, 168, 177, 168, 166, 177, 177, 168, 167, 166, 176, 195, 177,
+ 168, 122, 169, 168, 178, 177, 130, 130, 122, 168, 168, 166, 168, 122, 161, 166,
+ 177, 168, 168, 168, 166, 121, 164, 181, 130, 168, 168, 168, 168, 122, 176, 177,
+ 177, 168, 122, 168, 166, 177, 177, 168, 177, 97, 161, 168, 161, 177, 168, 168,
+ 177, 168, 121, 161, 177, 195, 177, 171, 171, 122, 177, 168, 177, 168, 176, 168,
+ 177, 168, 166, 166, 168, 164, 168, 188, 168, 177, 168, 168, 168, 121, 177, 166,
+ 142, 176, 180, 168, 171, 168, 177, 164, 168, 176, 177, 168, 164, 164, 168, 168,
+ 168, 168, 92, 166, 168, 168, 185, 177, 171, 122, 122, 122, 122, 122, 165, 166,
+ 185, 160, 122, 177, 181, 168, 178, 176, 178, 163, 166, 162, 160, 130, 170, 168,
+ 168, 166, 165, 169, 166, 169, 92, 163, 168, 122, 122, 161, 122, 162, 185, 185,
+ 170, 130, 167, 178, 176, 122, 179, 122, 122, 166, 177, 164, 160, 130, 130, 130,
+ 168, 177, 178, 171, 168, 166, 177, 122, 161, 122, 177, 122, 179, 165, 163, 168,
+ 167, 166, 122, 177, 162, 164, 161, 113, 162, 168, 185, 185, 121, 168, 171, 168,
+ 168, 177, 167, 96, 113, 168, 162, 168, 177, 160, 167, 121, 188, 166, 190, 165,
+ 177, 188, 177, 177, 122, 165, 182, 168, 113, 168, 169, 163, 177, 177, 168, 164,
+ 121, 142, 177, 177, 160, 171, 142, 122, 113, 122, 130, 121, 122, 122, 122, 122,
+ 121, 122, 92, 177, 177, 168, 172, 188, 121, 171, 177, 181, 122, 121, 164, 172,
+ 161, 113, 168, 121, 177, 163, 142, 121, 168, 171, 191, 168, 177, 171, 177, 162,
+ 164, 177, 161, 168, 168, 121, 181, 177, 168, 177, 94, 162, 113, 177, 160, 178,
+ 177, 177, 168, 168, 177, 177, 177, 171, 160, 171, 177, 161, 177, 121, 172, 168,
+ 188, 121, 191, 163, 142, 142, 177, 194, 164, 168, 168, 161, 177, 162, 121, 92,
+ 161, 161, 161, 171, 177, 177, 177, 168, 182, 113, 94, 160, 113, 168, 177, 164,
+ 177, 168, 168, 177, 121, 163, 177, 142, 171, 171, 191, 161, 163, 97, 171, 121,
+ 188, 160, 162, 162, 172, 121, 177, 162, 178, 121, 177, 142, 168, 171, 177, 177,
+ 178, 171, 168, 168, 168, 160, 168, 121, 182, 164, 142, 121, 164, 163, 180, 160,
+ 177, 177, 198, 168, 121, 191, 180, 177, 162, 162, 161, 160, 168, 168, 163, 177,
+ 177, 113, 168, 161, 130, 162, 177, 182, 171, 177, 168, 171, 171, 177, 178, 177,
+ 121, 160, 168, 180, 160, 121, 168, 168, 177, 163, 177, 168, 168, 177, 166, 160,
+ 161, 121, 164, 121, 168, 178, 121, 177, 121, 177, 178, 178, 121, 168, 161, 162,
+ 177, 168, 168, 168, 177, 177, 168, 177, 171, 168, 168, 177, 97, 181, 179, 162,
+ 161, 160, 171, 126, 168, 168, 191, 121, 164, 198, 182, 171, 171, 162, 160, 163,
+ 177, 171, 177, 177, 168, 171, 177, 171, 166, 168, 168, 177, 191, 177, 177, 180,
+ 177, 168, 121, 177, 160, 177, 161, 177, 177, 177, 161, 160, 164, 177, 168, 177,
+ 177, 177, 161, 182, 121, 163, 168, 177, 177, 178, 121, 160, 182, 181, 177, 168,
+ 171, 168, 153, 172, 160, 161, 160, 168, 121, 177, 178, 177, 121, 160, 168, 177,
+ 177, 168, 177, 160, 126, 161, 178, 160, 177, 168, 161, 168, 168, 177, 168, 178,
+ 121, 162, 168, 168, 177, 171, 168, 161, 121, 142, 121, 168, 164, 177, 191, 191,
+ 121, 188, 121, 178, 191, 177, 121, 177, 121, 177, 177, 121, 172, 168, 121, 121,
+ 160, 160, 181, 171, 177, 178, 171, 162, 168, 168, 113, 113, 168, 92, 130, 161,
+ 94, 94, 160, 94, 153, 160, 168, 177, 193, 177, 126, 121, 168, 121, 168, 168,
+ 177, 177, 177, 161, 121, 177, 178, 177, 177, 168, 171, 121, 178, 161, 177, 160,
+ 178, 168, 160, 168, 177, 171, 160, 177, 160, 163, 166, 160, 142, 177, 198, 162,
+ 171, 177, 161, 163, 163, 121, 177, 168, 160, 168, 177, 168, 180, 163, 121, 164,
+ 177, 182, 171, 168, 94, 94, 160, 94, 177, 168, 171, 164, 180, 177, 168, 166,
+ 160, 168, 177, 161, 121, 177, 121, 142, 171, 168, 121, 177, 160, 168, 177, 168,
+ 160, 177, 97, 191, 177, 168, 177, 180, 177, 177, 168, 162, 121, 198, 142, 168,
+ 121, 168, 168, 97, 177, 177, 162, 168, 160, 113, 162, 160, 161, 160, 161, 94,
+ 168, 164, 168, 121, 177, 164, 163, 177, 142, 162, 166, 163, 177, 171, 168, 168,
+ 178, 121, 168, 163, 168, 168, 169, 142, 142, 177, 168, 160, 171, 142, 191, 171,
+ 160, 121, 171, 168, 121, 181, 177, 177, 142, 161, 161, 161, 168, 161, 168, 161,
+ 94, 160, 161, 160, 161, 168, 194, 177, 177, 177, 177, 177, 168, 171, 168, 168,
+ 168, 182, 164, 142, 193, 161, 168, 178, 163, 177, 168, 168, 168, 177, 177, 177,
+ 178, 168, 168, 178, 178, 177, 177, 163, 121, 178, 181, 160, 161, 94, 161, 164,
+ 168, 113, 161, 161, 160, 128, 94, 160, 168, 168, 168, 121, 168, 160, 171, 162,
+ 168, 177, 171, 171, 162, 121, 178, 168, 121, 168, 142, 177, 168, 177, 170, 177,
+ 168, 113, 160, 163, 121, 177, 168, 168, 177, 168, 177, 168, 177, 160, 161, 168,
+ 168, 121, 121, 113, 160, 177, 161, 168, 160, 162, 181, 198, 164, 168, 178, 164,
+ 142, 164, 178, 171, 97, 160, 161, 160, 177, 168, 142, 166, 160, 177, 177, 177,
+ 142, 177, 171, 168, 168, 178, 168, 142, 168, 94, 161, 160, 142, 121, 142, 121,
+ 168, 178, 168, 177, 164, 170, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 92, 130, 130, 130, 130, 92, 130, 92, 130, 130, 130, 130, 130, 130, 170,
+ 130, 130, 170, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 170, 130, 170, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 92,
+ 130, 130, 130, 92, 92, 130, 130, 130, 130, 130, 92, 130, 170, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 170, 130, 130, 130, 130, 92, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 170, 130, 130,
+ 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130,
+ 130, 130, 130, 92, 130, 130, 130, 170, 92, 130, 130, 92, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130,
+ 130, 130, 130, 130, 92, 92, 130, 121, 182, 164, 168, 168, 168, 168, 162, 170,
+ 121, 161, 142, 121, 162, 160, 168, 181, 177, 121, 113, 121, 177, 177, 171, 121,
+ 168, 121, 126, 121, 121, 161, 153, 160, 121, 172, 161, 168, 168, 162, 177, 177,
+ 153, 171, 172, 121, 121, 121, 182, 172, 121, 171, 94, 177, 177, 121, 168, 161,
+ 168, 126, 181, 161, 162, 168, 177, 168, 161, 178, 177, 121, 180, 177, 178, 177,
+ 168, 161, 161, 178, 161, 168, 171, 180, 171, 177, 121, 171, 142, 178, 161, 92,
+ 171, 177, 177, 177, 121, 121, 121, 161, 181, 162, 177, 168, 121, 164, 177, 177,
+ 177, 121, 121, 168, 177, 178, 162, 161, 170, 130, 130, 130, 92, 130, 130, 130,
+ 130, 130, 130, 130, 170, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92,
+ 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 92, 130, 130, 130, 130, 92, 130, 130, 92, 122, 174, 177, 130,
+ 168, 122, 166, 168, 177, 162, 164, 161, 178, 161, 122, 161, 171, 168, 122, 178,
+ 168, 176, 122, 174, 173, 130, 130, 164, 182, 177, 177, 122, 166, 166, 161, 122,
+ 122, 163, 122, 168, 122, 170, 130, 130, 130, 130, 168, 122, 122, 122, 168, 178,
+ 122, 168, 162, 168, 166, 130, 163, 162, 171, 161, 161, 122, 180, 121, 121, 165,
+ 161, 176, 122, 121, 122, 113, 113, 130, 130, 170, 122, 168, 169, 168, 164, 168,
+ 121, 168, 169, 121, 176, 122, 122, 122, 121, 161, 113, 163, 177, 121, 177, 164,
+ 168, 163, 164, 177, 171, 122, 122, 168, 167, 177, 121, 122, 161, 122, 121, 175,
+ 130, 177, 168, 168, 122, 121, 163, 167, 122, 122, 162, 121, 122, 164, 168, 164,
+ 181, 168, 168, 198, 177, 163, 162, 122, 121, 177, 121, 161, 168, 161, 177, 164,
+ 167, 121, 181, 166, 142, 161, 175, 196, 142, 169, 164, 121, 167, 179, 130, 168,
+ 122, 122, 168, 168, 122, 122, 122, 122, 168, 122, 171, 121, 122, 122, 165, 130,
+ 161, 181, 176, 168, 168, 122, 121, 168, 177, 121, 177, 121, 121, 177, 171, 177,
+ 130, 168, 121, 121, 161, 168, 161, 161, 122, 190, 122, 113, 161, 161, 161, 190,
+ 180, 177, 121, 130, 160, 168, 122, 122, 168, 122, 177, 121, 161, 168, 130, 168,
+ 122, 130, 177, 182, 169, 177, 122, 122, 167, 176, 181, 168, 161, 169, 169, 169,
+ 168, 121, 168, 122, 161, 161, 122, 161, 168, 180, 164, 163, 122, 177, 122, 168,
+ 168, 182, 177, 177, 142, 168, 168, 121, 177, 168, 169, 168, 168, 130, 168, 168,
+ 122, 163, 122, 164, 161, 168, 160, 161, 169, 122, 168, 161, 161, 121, 169, 168,
+ 160, 163, 121, 177, 121, 161, 178, 168, 121, 178, 162, 168, 92, 161, 162, 162,
+ 161, 203, 169, 130, 92, 164, 122, 182, 177, 184, 177, 176, 121, 160, 122, 160,
+ 169, 122, 122, 164, 181, 130, 142, 164, 142, 122, 177, 113, 168, 198, 177, 161,
+ 168, 153, 168, 166, 122, 92, 176, 191, 177, 181, 180, 177, 169, 177, 168, 177,
+ 177, 178, 168, 168, 178, 169, 113, 160, 168, 163, 168, 122, 161, 122, 168, 121,
+ 113, 130, 130, 161, 185, 162, 162, 177, 169, 177, 177, 160, 178, 168, 177, 163,
+ 122, 168, 177, 169, 168, 168, 142, 92, 180, 161, 168, 165, 177, 122, 177, 130,
+ 92, 163, 174, 178, 175, 164, 177, 168, 163, 177, 163, 168, 162, 160, 163, 177,
+ 160, 171, 94, 142, 177, 177, 121, 177, 172, 171, 164, 121, 171, 177, 177, 168,
+ 177, 162, 160, 121, 177, 168, 168, 177, 177, 177, 161, 162, 121, 177, 177, 168,
+ 182, 177, 161, 168, 164, 168, 170, 130, 92, 130, 130, 130, 130, 169, 172, 164,
+ 168, 177, 172, 122, 162, 175, 122, 162, 177, 97, 177, 121, 161, 168, 168, 121,
+ 194, 121, 121, 121, 168, 121, 121, 177, 121, 92, 188, 161, 121, 177, 177, 178,
+ 121, 121, 121, 121, 163, 160, 177, 121, 121, 164, 181, 168, 171, 168, 177, 160,
+ 177, 142, 161, 163, 142, 162, 177, 168, 168, 168, 161, 171, 113, 121, 163, 177,
+ 188, 161, 177, 163, 172, 177, 161, 142, 121, 126, 161, 121, 181, 181, 162, 161,
+ 161, 168, 161, 168, 177, 168, 121, 163, 168, 168, 177, 172, 121, 121, 121, 142,
+ 168, 177, 177, 171, 196, 181, 164, 177, 121, 177, 197, 142, 168, 168, 121, 168,
+ 168, 161, 177, 177, 168, 188, 163, 121, 161, 168, 177, 121, 163, 161, 161, 121,
+ 142, 142, 168, 178, 178, 170, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 92, 130,
+ 130, 130, 92, 130, 130, 92, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 92, 130, 130, 130, 130, 121, 168, 113, 162, 168, 177, 177, 121,
+ 162, 121, 168, 97, 182, 161, 142, 163, 177, 160, 171, 177, 97, 168, 168, 177,
+ 168, 168, 177, 172, 121, 162, 178, 203, 163, 168, 160, 168, 177, 161, 170, 92,
+ 92, 130, 130, 130, 92, 130, 92, 92, 130, 130, 130, 121, 198, 161, 170, 122,
+ 94, 193, 121, 177, 161, 177, 163, 176, 130, 142, 171, 178, 160, 121, 200, 121,
+ 161, 160, 142, 164, 121, 160, 177, 161, 161, 168, 168, 92, 121, 121, 121, 161,
+ 168, 161, 177, 121, 92, 142, 161, 177, 177, 121, 121, 92, 121, 130, 160, 92,
+ 122, 177, 142, 121, 178, 177, 177, 177, 121, 160, 171, 171, 163, 181, 121, 177,
+ 196, 142, 164, 161, 178, 168, 162, 177, 121, 168, 168, 177, 178, 168, 169, 168,
+ 168, 177, 177, 177, 162, 171, 161, 94, 160, 163, 177, 163, 177, 142, 142, 97,
+ 163, 177, 172, 168, 161, 121, 162, 177, 177, 121, 94, 180, 180, 193, 177, 161,
+ 178, 121, 121, 168, 192, 169, 168, 121, 177, 177, 161, 177, 171, 160, 171, 177,
+ 162, 168, 94, 170, 92, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 92, 130, 130, 130, 130, 92, 92, 130, 92, 130, 130, 92, 130,
+ 130, 130, 92, 92, 130, 130, 130, 130, 130, 92, 130, 130, 92, 130, 92, 130,
+ 130, 130, 130, 130, 130, 130, 122, 167, 167, 122, 161, 182, 168, 191, 168, 162,
+ 161, 168, 161, 168, 160, 122, 177, 168, 122, 161, 160, 168, 121, 121, 121, 168,
+ 177, 188, 177, 121, 121, 177, 161, 161, 160, 191, 177, 168, 172, 177, 161, 164,
+ 161, 121, 168, 177, 172, 153, 113, 168, 181, 177, 161, 168, 168, 168, 168, 168,
+ 121, 121, 121, 177, 177, 121, 168, 168, 178, 188, 163, 142, 177, 121, 164, 121,
+ 161, 160, 142, 168, 168, 168, 160, 177, 161, 168, 177, 164, 177, 121, 178, 161,
+ 177, 121, 113, 161, 177, 163, 168, 168, 178, 177, 168, 178, 168, 177, 177, 121,
+ 161, 121, 177, 177, 177, 178, 168, 168, 195, 168, 168, 177, 163, 168, 121, 180,
+ 163, 177, 113, 113, 168, 168, 171, 161, 161, 121, 168, 168, 168, 168, 177, 160,
+ 177, 160, 177, 177, 177, 168, 160, 177, 113, 168, 168, 121, 168, 177, 177, 160,
+ 121, 168, 168, 162, 168, 171, 191, 121, 177, 168, 168, 160, 160, 168, 142, 168,
+ 121, 177, 178, 121, 177, 121, 168, 162, 168, 168, 177, 162, 177, 121, 177, 168,
+ 168, 164, 168, 168, 177, 121, 177, 121, 160, 168, 121, 121, 160, 162, 168, 121,
+ 168, 161, 121, 160, 178, 121, 168, 168, 168, 180, 121, 178, 170, 130, 130, 130,
+ 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 92, 130, 130, 130, 130, 130, 92, 130, 130, 130, 92, 92, 170,
+ 130, 130, 130, 130, 92, 92, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 92, 130, 122, 161, 162, 168, 162, 178, 162, 171,
+ 169, 185, 182, 168, 177, 164, 174, 96, 122, 177, 170, 177, 169, 160, 177, 177,
+ 167, 176, 185, 162, 181, 130, 177, 168, 164, 161, 168, 130, 130, 168, 164, 142,
+ 177, 169, 171, 122, 121, 177, 171, 163, 122, 161, 161, 162, 177, 161, 181, 167,
+ 163, 96, 172, 178, 164, 204, 169, 177, 161, 164, 181, 167, 177, 169, 121, 169,
+ 92, 178, 177, 177, 172, 164, 168, 178, 161, 166, 177, 169, 168, 177, 168, 182,
+ 164, 177, 163, 176, 177, 177, 142, 161, 166, 163, 168, 177, 177, 171, 177, 170,
+ 177, 168, 177, 130, 160, 168, 177, 168, 178, 177, 121, 162, 162, 161, 168, 167,
+ 177, 161, 142, 169, 168, 142, 164, 121, 142, 178, 198, 177, 161, 163, 178, 167,
+ 161, 121, 169, 177, 163, 177, 92, 177, 161, 182, 177, 167, 122, 164, 168, 168,
+ 160, 122, 122, 165, 122, 122, 168, 130, 166, 173, 168, 177, 177, 169, 142, 122,
+ 160, 169, 168, 161, 122, 177, 177, 164, 142, 168, 121, 177, 92, 161, 162, 168,
+ 168, 177, 92, 164, 168, 162, 177, 168, 177, 160, 162, 164, 177, 162, 162, 121,
+ 168, 168, 161, 162, 178, 177, 168, 171, 162, 162, 168, 168, 168, 168, 168, 182,
+ 177, 94, 168, 172, 164, 177, 177, 177, 168, 164, 162, 163, 161, 182, 198, 163,
+ 177, 121, 178, 178, 164, 168, 113, 153, 161, 161, 177, 168, 92, 163, 177, 198,
+ 178, 168, 168, 161, 168, 168, 177, 162, 178, 162, 142, 121, 162, 142, 121, 168,
+ 182, 162, 162, 92, 113, 168, 168, 162, 177, 178, 92, 164, 162, 168, 162, 177,
+ 142, 177, 161, 168, 168, 161, 178, 177, 171, 121, 142, 161, 161, 161, 162, 153,
+ 162, 113, 181, 168, 178, 168, 121, 177, 162, 168, 168, 142, 168, 182, 168, 164,
+ 168, 178, 178, 181, 180, 177, 168, 171, 121, 160, 177, 177, 168, 94, 161, 162,
+ 178, 153, 113, 162, 94, 113, 161, 177, 177, 164, 162, 161, 161, 171, 161, 163,
+ 164, 92, 163, 92, 181, 168, 178, 168, 178, 178, 172, 177, 172, 121, 168, 162,
+ 198, 162, 180, 142, 178, 198, 162, 168, 162, 162, 162, 172, 177, 168, 162, 160,
+ 94, 178, 162, 177, 178, 121, 182, 164, 177, 177, 162, 168, 168, 142, 181, 153,
+ 113, 171, 180, 168, 168, 163, 177, 177, 161, 178, 172, 121, 168, 177, 142, 168,
+ 168, 177, 92, 162, 177, 163, 178, 200, 178, 188, 177, 168, 168, 168, 177, 163,
+ 177, 161, 178, 163, 171, 168, 171, 121, 177, 168, 113, 162, 162, 163, 177, 171,
+ 178, 161, 168, 177, 92, 161, 168, 178, 177, 162, 162, 162, 161, 168, 177, 161,
+ 162, 168, 182, 168, 168, 177, 181, 171, 142, 168, 168, 163, 170, 92, 92, 130,
+ 92, 130, 130, 92, 92, 130, 130, 130, 130, 92, 92, 130, 92, 130, 130, 92,
+ 130, 130, 130, 92, 130, 130, 92, 92, 92, 92, 130, 130, 130, 92, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 92, 130, 130, 92,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130, 130, 130, 92, 92,
+ 92, 92, 92, 130, 130, 130, 130, 130, 92, 92, 130, 130, 130, 130, 130, 130,
+ 130, 92, 92, 130, 130, 130, 130, 130, 130, 130, 92, 92, 130, 130, 130, 130,
+ 92, 92, 130, 92, 92, 121, 177, 180, 161, 121, 168, 181, 181, 168, 161, 161,
+ 113, 168, 177, 121, 121, 168, 121, 177, 161, 177, 168, 168, 168, 168, 161, 168,
+ 168, 161, 163, 142, 168, 168, 142, 178, 178, 121, 161, 162, 160, 161, 113, 161,
+ 168, 162, 142, 161, 168, 142, 160, 177, 177, 168, 161, 121, 162, 177, 177, 178,
+ 168, 160, 168, 142, 161, 168, 121, 161, 121, 168, 181, 113, 113, 168, 168, 177,
+ 177, 168, 162, 177, 182, 161, 168, 168, 168, 160, 162, 121, 162, 177, 178, 142,
+ 168, 178, 177, 177, 172, 177, 113, 162, 113, 160, 177, 168, 168, 161, 160, 168,
+ 172, 121, 168, 177, 177, 161, 168, 168, 168, 178, 168, 168, 178, 121, 172, 177,
+ 121, 121, 162, 164, 113, 162, 161, 168, 168, 177, 171, 177, 121, 160, 160, 178,
+ 177, 168, 121, 168, 168, 168, 164, 177, 168, 168, 181, 177, 182, 168, 163, 168,
+ 168, 168, 168, 163, 177, 168, 177, 178, 168, 142, 177, 168, 168, 162, 162, 113,
+ 168, 161, 177, 182, 168, 164, 177, 177, 177, 168, 178, 168, 168, 168, 168, 168,
+ 168, 177, 168, 168, 178, 160, 168, 168, 168, 180, 177, 153, 177, 168, 164, 121,
+ 161, 177, 178, 168, 121, 177, 168, 168, 142, 177, 178, 178, 177, 160, 168, 177,
+ 94, 178, 142, 177, 198, 168, 113, 177, 168, 182, 177, 168, 168, 168, 168, 178,
+ 168, 168, 168, 142, 182, 177, 177, 188, 168, 178, 177, 168, 168, 168, 177, 177,
+ 162, 168, 168, 168, 168, 171, 178, 162, 168, 177, 92, 177, 168, 178, 177, 178,
+ 177, 92, 180, 177, 177, 168, 168, 168, 180, 121, 121, 168, 160, 178, 177, 168,
+ 168, 168, 177, 168, 168, 168, 168, 177, 161, 168, 182, 168, 94, 168, 163, 168,
+ 177, 177, 177, 168, 168, 177, 164, 168, 160, 177, 121, 142, 163, 177, 121, 170,
+ 130, 130, 130, 130, 92, 130, 130, 92, 130, 130, 130, 130, 130, 130, 92, 130,
+ 92, 130, 130, 130, 92, 130, 130, 130, 130, 130, 130, 92, 92, 130, 130, 130,
+ 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 92, 130, 130,
+ 92, 130, 92, 92, 92, 130, 92, 130, 130, 92, 130, 130, 130, 92, 130, 92,
+ 92, 92, 92, 130, 130, 92, 130, 130, 130, 130, 130, 130, 130, 130, 92, 92,
+ 130, 130, 92, 130, 92, 121, 92, 92, 113, 121, 177, 163, 171, 121, 130, 122,
+ 177, 172, 176, 177, 163, 163, 168, 166, 167, 168, 168, 169, 178, 168, 177, 162,
+ 160, 178, 122, 122, 168, 172, 182, 121, 163, 168, 168, 177, 168, 122, 163, 122,
+ 168, 168, 160, 161, 177, 121, 175, 168, 182, 142, 172, 160, 163, 178, 177, 163,
+ 177, 160, 161, 162, 190, 188, 168, 168, 202, 113, 113, 122, 142, 179, 122, 153,
+ 168, 160, 168, 126, 175, 161, 163, 94, 177, 130, 161, 162, 142, 122, 122, 169,
+ 178, 129, 181, 168, 122, 177, 168, 161, 122, 113, 168, 122, 122, 169, 121, 166,
+ 169, 92, 170, 161, 177, 167, 168, 166, 121, 130, 130, 168, 162, 177, 177, 169,
+ 177, 163, 177, 168, 121, 177, 178, 142, 182, 167, 168, 167, 167, 178, 179, 177,
+ 168, 168, 163, 164, 161, 161, 168, 121, 198, 177, 168, 130, 92, 130, 122, 177,
+ 166, 162, 177, 122, 164, 142, 177, 174, 168, 176, 177, 177, 168, 161, 168, 162,
+ 122, 113, 166, 168, 168, 168, 163, 160, 168, 168, 177, 177, 169, 168, 168, 176,
+ 168, 177, 177, 168, 171, 168, 168, 166, 168, 174, 162, 122, 162, 166, 169, 162,
+ 168, 177, 168, 177, 90, 163, 177, 177, 168, 168, 121, 121, 168, 168, 180, 178,
+ 179, 130, 121, 163, 178, 177, 177, 177, 177, 168, 163, 168, 97, 177, 177, 121,
+ 178, 121, 153, 142, 168, 168, 142, 121, 162, 163, 121, 168, 121, 162, 177, 177,
+ 177, 177, 142, 162, 168, 177, 178, 121, 168, 168, 177, 168, 161, 162, 168, 170,
+ 130, 92, 92, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 121, 160, 162,
+ 188, 177, 177, 161, 171, 180, 162, 164, 168, 170, 130, 130, 212, 181, 162, 170,
+ 167, 164, 177, 164, 168, 163, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98, 98, 98, 98, 98, 98, 98,  0, 98, 98, 98, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98, 98,  0,  0, 98, 98, 98, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0, 98,  0,  0, 98,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0, 98,
+ 98, 98,  0, 98,  0, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0, 98, 98, 98, 98,  0,  0,  0,  0, 98, 98, 98,  0, 98,
+  0, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98, 98,  0,  0,  0, 98,  0, 98, 98, 98,  0,
+ 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0, 98,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98, 98, 98,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0, 98,  0, 98, 98,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0, 98,  0, 98,  0, 98,  0,
+  0,  0,  0, 98, 98, 98,  0, 98,  0, 98,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0, 98,  0,  0, 98,
+ 98, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98, 98, 98,
+  0, 98,  0, 98, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98,  0,  0,  0,
+ 98,  0, 98, 98,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0, 98, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0, 98, 98, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98, 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0, 98,  0, 98, 98, 98,  0, 98,  0,  0, 98, 98, 98, 98, 98,
+  0,  0,  0, 98, 98, 98,  0, 98, 98, 98, 98, 98,  0,  0,  0, 98,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98, 98,  0, 98,  0,  0, 98, 98,  0, 98, 98,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0, 98,  0,  0, 98,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0,
+ 98,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0, 98,  0, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0, 98, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98, 98,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0, 98, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98, 98,  0,  0,  0, 98, 98, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0, 98, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98, 98,  0,  0, 98, 98,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0, 98, 98,
+ 98, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98, 98,  0,
+  0, 98,  0, 98, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98, 98,  0,
+  0,  0,  0, 98, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 98, 98, 98,  0, 98,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98,  0,  0,  0,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98, 98,  0, 98,  0,  0, 98, 98, 98, 98,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0, 98,  0, 98,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0, 98,
+  0, 98,  0,  0, 98, 98, 98, 98, 98,  0,  0, 98, 98, 98, 98, 98,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0, 98,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,
+ 98, 98,  0,  0,  0, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98, 98,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0, 98, 98,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98, 98, 98,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0, 98, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98,  0,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98, 98,
+ 98,  0,  0, 98, 98,  0, 98, 98,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0, 98,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0,
+ 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0, 98,
+  0, 98, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0, 98,  0, 98, 98,  0, 98, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98, 98,  0,  0,
+  0,  0,  0, 98, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98, 98, 98,  0, 98, 98, 98,  0,
+  0,  0,  0, 98, 98, 98,  0, 98, 98, 98,  0,  0,  0, 98, 98,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0, 98,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0, 98,  0, 98, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98, 98,  0, 98, 98, 98, 98,  0,
+  0,  0,  0,  0, 98, 98, 98, 98, 98, 98, 98,  0, 98,  0, 98,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0,
+ 98,  0,  0,  0, 98,  0, 98, 98,  0,  0,  0,  0, 98, 98, 98, 98,
+ 98, 98,  0,  0,  0, 98, 98, 98, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98, 98, 98,  0,
+ 98,  0,  0, 98, 98, 98,  0, 98,  0, 98,  0, 98,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98, 98, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0, 98,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0, 98,  0, 98, 98,  0, 98,
+  0, 98, 98, 98, 98, 98, 98, 98, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98, 98, 98,  0,
+  0,  0,  0, 98, 98, 98,  0, 98, 98, 98, 98,  0,  0,  0, 98,  0,
+ 98, 98,  0,  0, 98,  0, 98, 98, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0, 98,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98, 98, 98,  0,  0,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98, 98, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98, 98,  0,  0, 98, 98,  0, 98, 98,  0,  0,
+ 98,  0, 98,  0, 98,  0,  0, 98,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0, 98,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0, 98, 98,  0,  0,  0,  0, 98, 98, 98,  0,  0, 98,  0, 98,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98, 98,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98, 98,  0,
+ 98,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0, 98,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+ 98, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0, 98,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,
+  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0, 98,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98, 98, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0, 98,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,
+  0, 98,  0,  0,  0,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0,  0, 98,  0, 98,  0,  0,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0, 98,  0,  0, 98,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,
+ 98,  0,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0, 98,  0,  0,  0,
+  0,  0,  0,  0, 98,  0,  0, 98,  0, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0,  0, 98,  0, 98, 98, 98, 98,  0,  0,  0,  0,  0,  0,
+ 98, 98,  0, 98,  0, 98,  0,  0,  0, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0, 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0,
+  0, 98,  0,  0,  0,  0,  0,  0, 98, 98,  0,  0, 98,  0,  0,  0,
+ 98,  0,  0,  0,  0,  0,  0,  0, 98, 98,  0, 98,  0, 98,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 94, 92, 94, 94, 92, 92, 92, 92, 92, 94, 94, 92, 94, 92, 94, 92,
+ 92, 92, 94, 94, 94, 94, 94, 92, 94, 92, 94, 94, 94, 94, 94, 92,
+ 94, 92, 94, 94, 92, 94, 92, 92, 92, 92, 92, 92, 92, 94, 94, 92,
+ 94, 92, 94, 94, 94, 94, 94, 94, 94, 92, 92, 94, 94, 92, 92, 92,
+ 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 94, 92, 92, 94,
+ 94, 94, 92, 92, 94, 92, 94, 92, 92, 92, 92, 92, 94, 92, 92, 92,
+ 92, 94, 92, 92, 94, 94, 92, 92, 94, 92, 92, 92, 92, 94, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 94, 92, 94, 94, 92, 94, 92, 92, 92,
+ 92, 92, 92, 94, 94, 92, 92, 92, 92, 94, 94, 92, 94, 94, 94, 92,
+ 92, 92, 92, 92, 92, 92, 94, 94, 92, 94, 92, 94, 92, 92, 94, 92,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 94, 92, 94, 92,
+ 92, 92, 92, 94, 92, 94, 92, 94, 94, 92, 94, 92, 92, 92, 92, 92,
+ 94, 92, 92, 92, 94, 94, 92, 92, 92, 92, 92, 92, 94, 92, 92, 94,
+ 92, 92, 94, 94, 94, 94, 92, 94, 94, 94, 92, 94, 94, 92, 94, 92,
+ 92, 92, 94, 92, 92, 92, 92, 92, 94, 94, 92, 94, 92, 94, 92, 92,
+ 92, 92, 92, 94, 92, 92, 94, 92, 92, 94, 94, 94, 92, 92, 92, 92,
+ 94, 92, 92, 92, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 92, 92,
+ 92, 94, 92, 92, 92, 92, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92,
+ 94, 94, 92, 92, 92, 92, 94, 92, 92, 94, 92, 92, 92, 92, 92, 92,
+ 92, 94, 94, 92, 92, 94, 92, 94, 94, 92, 94, 92, 92, 94, 92, 92,
+ 94, 92, 92, 92, 94, 94, 94, 94, 92, 94, 94, 92, 92, 94, 92, 92,
+ 92, 92, 94, 92, 92, 92, 92, 92, 94, 94, 94, 92, 92, 92, 92, 92,
+ 92, 94, 94, 92, 92, 94, 92, 92, 94, 94, 92, 94, 94, 92, 92, 94,
+ 94, 92, 92, 92, 92, 94, 92, 94, 92, 94, 92, 94, 92, 92, 92, 94,
+ 94, 92, 92, 94, 92, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 94,
+ 94, 92, 92, 92, 94, 92, 94, 92, 92, 92, 94, 92, 92, 92, 94, 92,
+ 94, 94, 92, 94, 94, 92, 94, 92, 94, 92, 92, 94, 94, 94, 94, 94,
+ 92, 94, 92, 92, 94, 94, 92, 92, 94, 92, 92, 92, 94, 94, 92, 92,
+ 92, 92, 92, 92, 94, 94, 92, 94, 92, 92, 94, 92, 92, 94, 92, 92,
+ 92, 92, 94, 92, 92, 92, 94, 92, 92, 92, 92, 94, 92, 92, 92, 94,
+ 94, 92, 94, 92, 92, 92, 92, 94, 92, 92, 94, 92, 92, 92, 94, 92,
+ 94, 94, 94, 92, 92, 94, 92, 94, 92, 92, 94, 94, 94, 92, 92, 92,
+ 94, 92, 94, 94, 94, 94, 94, 92, 92, 94, 92, 94, 94, 92, 92, 94,
+ 94, 94, 92, 92, 92, 92, 94, 94, 94, 92, 94, 92, 92, 92, 92, 94,
+ 92, 94, 92, 94, 92, 92, 92, 94, 92, 92, 92, 94, 92, 94, 94, 92,
+ 92, 92, 92, 92, 92, 94, 92, 92, 94, 92, 94, 94, 94, 94, 94, 94,
+ 92, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 94, 92, 92, 92, 92, 92, 92, 94, 92, 92, 94, 92, 94, 94, 94,
+ 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 94, 92, 92,
+ 92, 92, 94, 92, 92, 92, 92, 92, 94, 94, 92, 94, 92, 92, 92, 92,
+ 94, 94, 92, 92, 94, 94, 94, 92, 92, 94, 94, 94, 92, 92, 92, 94,
+ 92, 94, 92, 92, 94, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 94, 94, 94, 94, 92, 94, 94, 92, 94, 92, 92, 92, 94, 94,
+ 92, 94, 92, 92, 92, 92, 92, 94, 92, 94, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 94, 92, 92, 92, 94, 94, 92, 92, 92, 92, 94, 92,
+ 94, 94, 94, 92, 92, 92, 92, 94, 92, 94, 92, 94, 94, 94, 92, 92,
+ 94, 94, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 94, 92, 92, 94,
+ 94, 94, 92, 92, 92, 92, 94, 92, 94, 92, 92, 92, 94, 92, 92, 94,
+ 92, 94, 92, 94, 92, 94, 92, 92, 94, 92, 92, 94, 94, 92, 92, 94,
+ 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92,
+ 94, 94, 92, 92, 92, 94, 94, 92, 92, 92, 92, 94, 92, 94, 92, 92,
+ 92, 92, 94, 92, 92, 94, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92,
+ 92, 92, 94, 92, 94, 92, 92, 92, 92, 92, 92, 94, 94, 92, 92, 92,
+ 94, 92, 94, 92, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94,
+ 92, 92, 94, 92, 94, 94, 92, 94, 92, 94, 92, 94, 92, 92, 92, 92,
+ 92, 94, 94, 92, 92, 92, 94, 92, 94, 94, 94, 92, 92, 94, 92, 92,
+ 92, 94, 92, 94, 94, 92, 94, 92, 94, 92, 94, 94, 92, 92, 94, 94,
+ 94, 92, 94, 92, 92, 94, 94, 94, 94, 94, 92, 92, 94, 92, 92, 92,
+ 92, 94, 94, 92, 94, 94, 92, 92, 92, 94, 94, 94, 94, 94, 92, 92,
+ 92, 92, 92, 94, 92, 92, 92, 92, 94, 92, 92, 92, 94, 94, 92, 94,
+ 92, 92, 92, 92, 92, 94, 92, 92, 94, 94, 94, 92, 92, 92, 92, 92,
+ 92, 94, 92, 94, 92, 92, 92, 94, 92, 92, 92, 92, 92, 94, 94, 92,
+ 94, 92, 94, 94, 94, 92, 92, 92, 94, 92, 94, 92, 92, 94, 92, 94,
+ 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 92, 92, 92, 92,
+ 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 94, 92, 94, 94, 92,
+ 92, 92, 92, 94, 92, 94, 94, 92, 94, 92, 92, 92, 94, 94, 92, 92,
+ 92, 92, 94, 92, 92, 92, 94, 92, 92, 92, 94, 94, 94, 92, 94, 92,
+ 94, 94, 92, 92, 94, 92, 92, 92, 94, 92, 92, 92, 94, 94, 94, 92,
+ 94, 94, 92, 92, 92, 92, 92, 92, 92, 94, 94, 92, 92, 94, 94, 92,
+ 92, 94, 94, 94, 92, 94, 92, 94, 94, 94, 94, 92, 94, 92, 94, 94,
+ 92, 94, 94, 92, 94, 92, 94, 92, 92, 92, 92, 92, 92, 92, 94, 94,
+ 92, 92, 92, 92, 94, 92, 94, 94, 94, 94, 94, 92, 92, 94, 94, 92,
+ 92, 94, 94, 92, 92, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92,
+ 92, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 94,
+ 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 92, 92, 92, 92, 92,
+ 92, 94, 92, 92, 92, 92, 94, 92, 92, 94, 92, 92, 92, 94, 94, 92,
+ 92, 92, 92, 92, 92, 92, 94, 92, 92, 94, 92, 92, 94, 94, 92, 92,
+ 92, 92, 92, 92, 94, 92, 94, 94, 94, 92, 92, 92, 92, 92, 94, 94,
+ 92, 92, 92, 92, 92, 92, 94, 92, 94, 94, 92, 92, 92, 92, 92, 94,
+ 92, 94, 94, 92, 92, 94, 92, 92, 92, 92, 94, 92, 92, 94, 92, 94,
+ 92, 92, 94, 92, 94, 92, 94, 92, 92, 92, 94, 92, 94, 94, 94, 94,
+ 94, 94, 92, 92, 94, 92, 92, 92, 94, 94, 94, 94, 94, 92, 94, 94,
+ 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 94, 92,
+ 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 92, 94, 92, 92, 92, 92,
+ 92, 92, 92, 92, 94, 94, 92, 94, 94, 94, 92, 94, 94, 92, 94, 94,
+ 92, 92, 94, 92, 92, 92, 94, 94, 92, 92, 92, 92, 92, 94, 94, 92,
+ 94, 92, 94, 94, 92, 94, 94, 94, 92, 94, 94, 92, 94, 94, 94, 92,
+ 94, 92, 94, 94, 94, 94, 94, 92, 94, 92, 92, 94, 94, 94, 94, 94,
+ 94, 92, 94, 94, 94, 92, 92, 92, 92, 92, 94, 92, 92, 94, 94, 94,
+ 94, 94, 92, 92, 94, 92, 94, 94, 94, 92, 94, 92, 92, 92, 92, 94,
+ 92, 94, 94, 92, 92, 94, 92, 94, 94, 92, 94, 94, 92, 92, 94, 94,
+ 94, 92, 94, 92, 92, 92, 92, 92, 94, 94, 92, 92, 92, 92, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 92, 94, 94, 92, 92, 94,
+ 92, 94, 94, 94, 92, 94, 94, 92, 92, 94, 92, 92, 92, 92, 94, 94,
+ 94, 94, 92, 94, 92, 92, 92, 92, 92, 92, 92, 94, 94, 92, 92, 92,
+ 94, 92, 94, 92, 94, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94,
+ 94, 94, 94, 92, 92, 92, 92, 92, 92, 94, 94, 94, 94, 92, 92, 92,
+ 92, 94, 92, 94, 94, 92, 92, 94, 92, 92, 92, 94, 92, 92, 92, 92,
+ 92, 92, 94, 94, 94, 92, 92, 94, 94, 92, 94, 92, 94, 92, 92, 94,
+ 94, 94, 94, 92, 92, 94, 94, 92, 94, 92, 92, 94, 92, 92, 94, 94,
+ 92, 92, 94, 94, 94, 94, 92, 94, 94, 94, 92, 92, 92, 94, 94, 94,
+ 94, 92, 94, 94, 92, 94, 94, 94, 94, 92, 94, 92, 92, 92, 94, 94,
+ 92, 94, 92, 92, 92, 92, 94, 94, 94, 94, 92, 94, 94, 94, 92, 94,
+ 94, 92, 92, 94, 94, 94, 94, 94, 94, 92, 94, 94, 94, 92, 94, 94,
+ 94, 92, 94, 92, 92, 92, 94, 94, 92, 94, 94, 92, 94, 92, 94, 94,
+ 92, 94, 94, 92, 92, 92, 94, 92, 92, 92, 92, 92, 94, 94, 92, 92,
+ 92, 92, 94, 92, 92, 92, 92, 92, 92, 94, 94, 92, 92, 94, 94, 92,
+ 94, 94, 92, 92, 92, 94, 92, 94, 92, 92, 94, 92, 92, 92, 92, 92,
+ 92, 94, 94, 92, 92, 92, 92, 94, 94, 92, 94, 94, 92, 94, 94, 94,
+ 94, 94, 92, 92, 94, 94, 94, 92, 92, 92, 92, 92, 92, 92, 94, 92,
+ 92, 92, 94, 94, 92, 92, 92, 94, 92, 92, 94, 94, 94, 92, 92, 94,
+ 92, 94, 94, 92, 92, 92, 94, 94, 92, 94, 94, 92, 94, 92, 92, 92,
+ 94, 94, 92, 94, 92, 92, 92, 94, 94, 92, 94, 94, 92, 94, 92, 92,
+ 92, 92, 92, 92, 94, 94, 92, 92, 92, 92, 92, 94, 92, 92, 92, 94,
+ 92, 92, 92, 94, 94, 94, 94, 94, 92, 92, 92, 92, 94, 94, 92, 92,
+ 94, 94, 94, 92, 94, 92, 92, 94, 92, 92, 92, 92, 92, 94, 94, 94,
+ 92, 94, 94, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 92, 94,
+ 92, 94, 94, 92, 94, 94, 92, 94, 94, 94, 92, 92, 93, 94, 94, 92,
+ 94, 92, 92, 92, 92, 94, 92, 94, 94, 92, 94, 92, 94, 94, 92, 92,
+ 92, 92, 92, 92, 94, 92, 94, 92, 92, 94, 92, 94, 92, 94, 92, 92,
+ 94, 92, 94, 92, 94, 92, 94, 94, 92, 94, 92, 92, 92, 92, 92, 92,
+ 92, 92, 94, 92, 94, 94, 94, 94, 94, 94, 92, 92, 92, 92, 92, 92,
+ 92, 94, 92, 92, 94, 92, 92, 92, 94, 92, 92, 92, 94, 92, 92, 92,
+ 92, 92, 92, 92, 94, 92, 92, 92,  0, 92, 94, 92, 92, 92, 94, 92,
+ 92, 94, 92, 92, 92, 92, 92, 92, 94, 92, 94, 92, 94, 94, 92, 92,
+ 92, 92, 92, 92, 94, 92, 92, 93, 93, 93,  0, 93,  0, 93, 93, 93,
+  0, 93, 93, 93, 92, 92, 92, 92, 94, 92, 92, 94, 94, 92, 92, 94,
+ 94, 94, 94, 92, 92, 92, 92, 92, 94, 92, 92, 92, 94, 92, 94, 94,
+ 92, 94, 92, 94, 92,  0, 94, 94, 94,  0, 93,  0,  0,  0, 92,  0,
+  0, 93,  0,  0,  0,  0, 92, 93, 93,  0,  0, 92, 92, 93,  0, 93,
+  0, 92, 92,  0,  0, 93,  0, 93, 93,  0, 93, 94,  0,  0,  0,  0,
+  0, 93, 93, 92,  0,  0,  0,  0,  0,  0,  0, 93,  0, 93, 93,  0,
+  0, 93,  0,  0, 92, 94, 93, 93, 93,  0,  0, 93, 93, 93,  0,  0,
+ 93, 93, 93,  0, 92, 93, 93, 93,  0, 93, 93,  0, 93,  0,  0,  0,
+  0, 93,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0, 93, 93, 93,
+  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0, 93,
+  0, 93, 93,  0, 93, 93,  0,  0,  0,  0, 93,  0,  0, 93,  0,  0,
+ 93, 93,  0, 93, 93, 93, 93, 93,  0, 93, 93,  0, 93, 93, 93, 93,
+ 93,  0,  0,  0,  0, 93, 93,  0, 93,  0,  0,  0,  0, 93, 93, 93,
+ 93, 93, 93, 93,  0, 93,  0, 93,  0,  0,  0, 93,  0, 93, 93,  0,
+ 93, 93,  0, 93,  0, 93, 93,  0, 93, 93, 93,  0,  0, 93,  0, 93,
+ 93, 93,  0,  0,  0, 93, 93,  0, 93, 93, 93,  0,  0, 93,  0,  0,
+  0, 93, 93,  0,  0, 93,  0,  0,  0,  0,  0, 93,  0,  0, 93,  0,
+ 93,  0,  0, 93,  0,  0,  0, 93, 93,  0,  0,  0, 93,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 93, 93,  0,  0,  0, 93,  0, 93, 93,
+ 93, 93, 93,  0,  0, 93, 93, 93, 93, 93, 93, 93, 93,  0, 93, 93,
+  0,  0,  0, 93, 93, 93, 93,  0, 93,  0, 93,  0, 93, 93, 93,  0,
+  0, 93,  0,  0, 93, 93,  0,  0, 93,  0,  0,  0,  0, 93,  0,  0,
+ 93,  0, 93, 93, 93, 93,  0, 93, 93,  0, 93,  0, 93, 93, 93,  0,
+ 93, 93,  0,  0, 93,  0,  0, 93, 93,  0,  0,  0,  0,  0, 93, 93,
+  0,  0,  0, 93, 93, 93,  0, 93, 93,  0, 93, 93,  0, 93,  0,  0,
+  0, 93, 93,  0,  0,  0,  0, 93,  0,  0, 93,  0,  0,  0, 93,  0,
+  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,
+ 93, 93,  0,  0,  0, 93,  0,  0,  0, 93, 93, 93, 93,  0,  0, 93,
+ 93, 93,  0, 93, 93,  0, 93, 93, 93, 93, 93,  0, 93,  0, 93, 93,
+ 93, 93, 93, 93,  0,  0,  0, 93, 93, 93, 93, 93, 93,  0, 93,  0,
+ 93, 93, 93,  0, 93, 93, 93,  0, 93, 93, 93, 93,  0,  0, 93, 93,
+ 93,  0, 93, 93, 93, 93,  0,  0, 93, 93, 93, 93, 93, 93, 93, 93,
+  0, 93, 93,  0,  0, 93,  0,  0, 93, 93, 93, 93, 93, 93,  0, 93,
+ 93, 93,  0, 93,  0, 93,  0, 93,  0,  0, 93,  0, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,  0,  0,  0, 93, 93, 93,
+  0, 93,  0, 93, 93,  0, 93,  0,  0,  0, 93, 93, 93, 93, 93, 93,
+ 93,  0,  0, 93, 93, 93, 93, 93, 93, 93, 93, 93,  0, 93,  0, 93,
+  0, 93, 93, 93,  0, 93,  0, 93, 93, 93,  0, 93,  0, 93,  0, 93,
+ 93, 93,  0, 93, 93,  0, 93, 93, 93,  0, 93,  0,  0,  0, 93, 93,
+ 93, 93,  0, 93, 93, 93,  0,  0, 93, 93, 93,  0, 93, 93, 93, 93,
+ 93,  0,  0, 93,  0, 93,  0, 93, 93, 93, 93, 93,  0,  0,  0, 93,
+ 93,  0, 93, 93,  0, 93, 93,  0, 93,  0, 93, 93,  0, 93, 93, 93,
+ 93,  0, 93, 93, 93,  0, 93,  0,  0, 93,  0,  0, 93, 93,  0, 93,
+  0,  0, 93,  0,  0, 93, 93, 93, 93,  0, 93,  0, 93, 93, 93,  0,
+ 93,  0,  0, 93,  0, 93,  0, 93, 93,  0, 93, 93,  0, 93,  0, 93,
+  0, 93,  0,  0, 93,  0,  0, 93, 93, 93,  0, 93, 93,  0, 93, 93,
+  0, 93, 93,  0,  0, 93, 93,  0,  0, 93, 93, 93,  0, 93, 93,  0,
+  0,  0,  0,  0,  0, 93, 93,  0, 93, 93,  0,  0, 93,  0, 93, 93,
+ 93,  0,  0, 93, 93,  0,  0, 93, 93, 93, 93, 93, 93, 93,  0,  0,
+ 93,  0, 93,  0, 93,  0, 93,  0,  0,  0, 93, 93, 93, 93, 93, 93,
+  0, 93, 93,  0,  0, 93,  0, 93,  0,  0,  0, 93, 93,  0,  0, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,  0, 93, 93,  0,  0, 93,
+  0,  0, 93,  0, 93,  0, 93, 93, 93,  0, 93,  0, 93, 93,  0, 93,
+ 93,  0, 93, 93,  0,  0,  0, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93,  0, 93, 93,  0,  0, 93,  0, 93,  0,  0, 93,  0,
+ 93,  0,  0,  0, 93,  0, 93,  0,  0,  0,  0,  0,  0, 93, 93,  0,
+  0, 93, 93, 93, 93, 93, 93,  0, 93, 93, 93, 93,  0, 93, 93,  0,
+ 93,  0,  0, 93, 93,  0,  0, 93, 93,  0,  0, 93,  0, 93,  0, 93,
+  0,  0,  0,  0, 93,  0, 93,  0,  0, 93, 93, 93,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,
+  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0, 93, 93,  0, 93, 93,
+ 93, 93,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 93,  0, 93,  0,  0, 93,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,
+  0,  0,  0,  0, 93,  0,  0, 93,  0,  0, 93,  0, 93, 93, 93, 93,
+ 93, 93,  0, 93,  0, 93, 93, 93, 93,  0, 93,  0, 93, 93, 93,  0,
+  0,  0, 93,  0, 93, 93, 93, 93,  0, 93, 93,  0, 93, 93,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0, 93,  0,  0,
+  0, 93, 93,  0,  0, 93,  0, 93,  0,  0, 93, 93,  0, 93, 93, 93,
+  0, 93, 93, 93, 93,  0,  0, 93, 93,  0,  0,  0,  0,  0,  0, 93,
+  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,
+  0, 93, 93,  0,  0, 93,  0, 93, 93,  0, 93,  0,  0,  0,  0,  0,
+  0, 93,  0,  0, 93, 93, 93,  0, 93, 93, 93, 93,  0,  0, 93,  0,
+  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0, 93,
+  0, 93,  0,  0,  0,  0,  0, 93,  0,  0, 93, 93,  0, 93,  0,  0,
+  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,
+  0, 93,  0,  0,  0, 93,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,
+ 93,  0, 93,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,
+ 93, 93,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0, 93,  0, 93,  0,  0,
+ 93,  0,  0,  0, 93,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0, 93,  0, 93,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,
+  0, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,  0, 93, 93, 93, 93,
+ 93, 93,  0,  0, 93,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 93,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 93,  0, 93,  0,  0,  0, 93, 93,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 93, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 93,  0,  0,  0,  0,  0,  0,  0,  0, 93, 93,  0, 93,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 93, 93, 93, 93,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,
+ 93, 93, 93,  0, 93,  0, 93,  0, 93, 93,  0, 93,  0, 93,  0,  0,
+ 93, 93, 93,  0, 93, 93, 93, 93,  0,  0, 93, 93, 93, 93, 93, 93,
+  0, 93, 93, 93,  0, 93, 93,  0,  0, 93,  0,  0, 93, 93, 93, 93,
+  0,  0,  0,  0, 93,  0,  0, 93, 93, 93,  0, 93, 93, 93, 93,  0,
+ 93, 93,  0, 93, 93, 93,  0,  0, 93,  0,  0, 93,  0, 93, 93, 93,
+ 93, 93,  0,  0,  0,  0,  0, 93, 93,  0,  0, 93,  0,  0, 93,  0,
+  0,  0,  0,  0, 93, 93, 93, 93,  0, 93, 93,  0,  0, 93,  0, 93,
+ 93,  0, 93, 93, 93,  0,  0, 93,  0,  0, 93, 93, 93, 93, 93, 93,
+ 93, 93,  0, 93, 93, 93,  0, 93, 93, 93, 93,  0, 93, 93, 93, 93,
+  0, 93, 93, 93, 93, 93,  0, 93,  0, 93, 93, 93, 93, 93, 93, 93,
+ 93,  0, 93, 93, 93, 93, 93, 93, 93, 93,  0,  0,  0,  0,  0, 93,
+  0,  0, 93, 93,  0,  0,  0,  0, 93,  0,  0,  0, 93,  0, 93, 93,
+ 93, 93,  0, 93,  0, 93,  0, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 93, 93,  0, 93, 93, 93, 93,  0, 93, 93, 93, 93, 93, 93,  0, 93,
+ 93, 93, 93, 93, 93, 93, 93,  0,  0,  0, 93,  0,  0,  0,  0,  0,
+  0,  0,  0, 93, 93,  0,  0,  0,  0,  0, 93, 93,  0, 93,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,
+  0,  0,  0, 93,  0,  0, 93,  0,  0, 93, 93,  0,  0,  0, 93,  0,
+  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,  0, 93,  0,  0,  0,  0,
+  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 93,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 93,  0,  0,
+ 93,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 93, 93,  0, 93,  0, 93, 93,  0, 93, 93,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 183, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 183, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 183, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 183, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 183, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 137, 137, 92, 92,
+  0, 92,  0, 92, 92,  0,  0,  0, 92,  0,  0,  0,  0,  0,  0, 92,
+ 92, 92,  0, 92, 92,  0,  0, 92, 92, 92,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 97, 97, 213, 137, 137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 110, 110, 110, 110, 97, 97, 97, 97, 97, 97, 137,
+ 97, 134, 97, 110, 97, 97, 97, 97, 110, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 110, 134, 97, 97, 97, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,  0,  0,  0,
+  0, 122, 214, 122, 122, 122, 122, 214, 122, 122, 122, 122, 122, 129, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 215, 129, 215, 123, 122,
+ 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
+ 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 132,  0,
+  0, 216, 216, 216, 217, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+ 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 218, 218, 128, 123, 94, 219, 98,  0,  0,  0,  0,  0,  0, 93,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 220,
+};
diff --git a/modules/basic/tables-small.i b/modules/basic/tables-small.i
new file mode 100755 (executable)
index 0000000..98abb3a
--- /dev/null
@@ -0,0 +1,603 @@
+/* NOTE: This file has not been maintained, and is out
+ * of date with respect to the rest of the code. 
+ */
+enum {
+  ENC_ISO_8859_1 = 1 << 0,
+  ENC_ISO_8859_2 = 1 << 1,
+  ENC_ISO_8859_3 = 1 << 2,
+  ENC_ISO_8859_4 = 1 << 3,
+  ENC_ISO_8859_5 = 1 << 4,
+  ENC_ISO_8859_6 = 1 << 5,
+  ENC_ISO_8859_7 = 1 << 6,
+  ENC_ISO_8859_8 = 1 << 7,
+  ENC_ISO_8859_9 = 1 << 8,
+  ENC_ISO_10646  = 1 << 12
+};
+
+static Charset charsets[] = {
+  { 0, NULL,         "iso8859-1", conv_ucs4 },
+  { 1, "ISO-8859-2", "iso8859-2", conv_8bit },
+  { 2, "ISO-8859-3", "iso8859-3", conv_8bit },
+  { 3, "ISO-8859-4", "iso8859-4", conv_8bit },
+  { 4, "ISO-8859-5", "iso8859-5", conv_8bit },
+  { 5, "ISO-8859-6", "iso8859-6", conv_8bit },
+  { 6, "ISO-8859-7", "iso8859-7", conv_8bit },
+  { 7, "ISO-8859-8", "iso8859-8", conv_8bit },
+  { 8, "ISO-8859-9", "iso8859-9", conv_8bit },
+  { 9, NULL,         "iso10646-1", conv_ucs4 }
+};
+
+static PangoEngineRange basic_ranges[] = {
+  { 0x0000, 0x02af, "*" },
+  { 0x02b0, 0x02ff, "" },
+  { 0x0380, 0x058f, "*" },
+  { 0x0591, 0x05f4, "*" }, /* Hebrew */
+  { 0x060c, 0x06f9, "" },  /* Arabic */
+  { 0x2015, 0x2017, "*" },
+};
+
+static const guint32 char_mask_map[] = {
+  0,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_6|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_5|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_6|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_7|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_4|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_8|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9,
+  ENC_ISO_8859_1,
+  ENC_ISO_8859_1|ENC_ISO_8859_3|ENC_ISO_8859_4|ENC_ISO_8859_9,
+  ENC_ISO_8859_1|ENC_ISO_8859_2,
+  ENC_ISO_8859_4,
+  ENC_ISO_8859_2,
+  ENC_ISO_8859_2|ENC_ISO_8859_4,
+  ENC_ISO_8859_3,
+  ENC_ISO_8859_3|ENC_ISO_8859_9,
+  ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_9,
+  ENC_ISO_8859_2|ENC_ISO_8859_3,
+  ENC_ISO_8859_7,
+  ENC_ISO_8859_2|ENC_ISO_8859_3|ENC_ISO_8859_4,
+  ENC_ISO_8859_5,
+  ENC_ISO_8859_8,
+  ENC_ISO_8859_6
+};
+
+static const guchar char_masks[] = {
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
+  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1,
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
+  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  1,  3,  4,  5,  6,  4,  7,  2,  8,  7,  3,  7,  7,  1,  4,  9,
+  8,  7,  5,  5, 10, 11,  4,  5, 10,  4,  3,  7,  4,  5,  4,  3,
+ 12, 13, 13,  9, 13,  9,  9, 14, 12, 13, 12, 13, 12, 13, 13, 12,
+ 15, 12, 12, 14, 13,  9, 13, 10,  9, 12, 13, 16, 13, 17, 15, 13,
+ 12, 13, 13,  9, 13,  9,  9, 14, 12, 13, 12, 13, 12, 13, 13, 12,
+ 15, 12, 12, 14, 13,  9, 13, 10,  9, 12, 13, 16, 13, 17, 15,  3,
+ 18, 18, 19, 19, 20, 20, 19, 19, 21, 21, 21, 21, 20, 20, 19, 19,
+ 20, 20, 18, 18,  0,  0, 18, 18, 20, 20, 19, 19, 21, 21, 22, 22,
+ 21, 21, 18, 18, 21, 21, 21, 21, 18, 18, 18, 18,  0,  0, 18, 18,
+ 22, 22,  0,  0, 21, 21, 18, 18, 18, 19, 19, 18, 18, 19, 19,  0,
+  0, 19, 19, 19, 19, 18, 18, 19, 19,  0, 18, 18, 18, 18,  0,  0,
+ 19, 19,  0,  0, 19, 19, 18, 18, 19, 19, 19, 19, 21, 21, 23, 23,
+ 20, 20, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 21, 21, 19, 19,
+ 19, 19, 18, 18,  0,  0,  0,  0,  0, 19, 19, 24, 24, 20, 20,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 25, 25,  0,  0,
+  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0, 24, 26,  0, 20,  0, 19,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0, 25, 25, 25,  0, 25, 25, 25,  0, 25,  0, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25,  0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,  0, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+  0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,  0, 27, 27,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 29,  0,  0,  0, 29,
+  0, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,  0,  0,  0,  0,  0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0, 25,  0, 28,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+  0,  0,  0,  0,  0,  0, 27,
+};
diff --git a/modules/hangul/Makefile.am b/modules/hangul/Makefile.am
new file mode 100755 (executable)
index 0000000..4937d1b
--- /dev/null
@@ -0,0 +1,26 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_HANGUL_FC
+noinst_LTLIBRARIES += libpango-hangul-fc.la
+else
+if DYNAMIC_HANGUL_FC
+module_LTLIBRARIES += pango-hangul-fc.la
+endif
+endif
+endif
+
+fc_sources = hangul-fc.c hangul-defs.h
+
+pango_hangul_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_hangul_fc_la_LIBADD = $(pangoft2libs)
+pango_hangul_fc_la_SOURCES = $(fc_sources)
+libpango_hangul_fc_la_SOURCES = $(fc_sources)
+libpango_hangul_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_hangul_fc
+
+
+EXTRA_DIST =                   \
+       tables-jamos.i
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/hangul/Makefile.in b/modules/hangul/Makefile.in
new file mode 100644 (file)
index 0000000..fba5b44
--- /dev/null
@@ -0,0 +1,712 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_HANGUL_FC_TRUE@am__append_2 = libpango-hangul-fc.la
+@DYNAMIC_HANGUL_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_HANGUL_FC_FALSE@am__append_3 = pango-hangul-fc.la
+subdir = modules/hangul
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_hangul_fc_la_LIBADD =
+am__objects_1 = libpango_hangul_fc_la-hangul-fc.lo
+am_libpango_hangul_fc_la_OBJECTS = $(am__objects_1)
+libpango_hangul_fc_la_OBJECTS = $(am_libpango_hangul_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_HANGUL_FC_TRUE@am_libpango_hangul_fc_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_hangul_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_2 = hangul-fc.lo
+am_pango_hangul_fc_la_OBJECTS = $(am__objects_2)
+pango_hangul_fc_la_OBJECTS = $(am_pango_hangul_fc_la_OBJECTS)
+@DYNAMIC_HANGUL_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_HANGUL_FC_FALSE@am_pango_hangul_fc_la_rpath = -rpath \
+@DYNAMIC_HANGUL_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_HANGUL_FC_FALSE@  $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_hangul_fc_la_SOURCES) \
+       $(pango_hangul_fc_la_SOURCES)
+DIST_SOURCES = $(libpango_hangul_fc_la_SOURCES) \
+       $(pango_hangul_fc_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3)
+noinst_LTLIBRARIES = $(am__append_2)
+fc_sources = hangul-fc.c hangul-defs.h
+pango_hangul_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_hangul_fc_la_LIBADD = $(pangoft2libs)
+pango_hangul_fc_la_SOURCES = $(fc_sources)
+libpango_hangul_fc_la_SOURCES = $(fc_sources)
+libpango_hangul_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_hangul_fc
+EXTRA_DIST = \
+       tables-jamos.i
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/hangul/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/hangul/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-hangul-fc.la: $(libpango_hangul_fc_la_OBJECTS) $(libpango_hangul_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_hangul_fc_la_rpath) $(libpango_hangul_fc_la_LDFLAGS) $(libpango_hangul_fc_la_OBJECTS) $(libpango_hangul_fc_la_LIBADD) $(LIBS)
+pango-hangul-fc.la: $(pango_hangul_fc_la_OBJECTS) $(pango_hangul_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_hangul_fc_la_rpath) $(pango_hangul_fc_la_LDFLAGS) $(pango_hangul_fc_la_OBJECTS) $(pango_hangul_fc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hangul-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_hangul_fc_la-hangul-fc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_hangul_fc_la-hangul-fc.lo: hangul-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_hangul_fc_la_CFLAGS) $(CFLAGS) -MT libpango_hangul_fc_la-hangul-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_hangul_fc_la-hangul-fc.Tpo" -c -o libpango_hangul_fc_la-hangul-fc.lo `test -f 'hangul-fc.c' || echo '$(srcdir)/'`hangul-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_hangul_fc_la-hangul-fc.Tpo" "$(DEPDIR)/libpango_hangul_fc_la-hangul-fc.Plo"; else rm -f "$(DEPDIR)/libpango_hangul_fc_la-hangul-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hangul-fc.c' object='libpango_hangul_fc_la-hangul-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_hangul_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_hangul_fc_la-hangul-fc.lo `test -f 'hangul-fc.c' || echo '$(srcdir)/'`hangul-fc.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/hangul/hangul-defs.h b/modules/hangul/hangul-defs.h
new file mode 100755 (executable)
index 0000000..8cef8ba
--- /dev/null
@@ -0,0 +1,91 @@
+/* Pango
+ * hangul-defs.h:
+ *
+ * Copyright (C) 2002-2006 Changwoo Ryu
+ * Author: Changwoo Ryu <cwryu@debian.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* See 3.12 "Conjoining Jamo Behavior" in the Unicode Book for more
+ * information
+ */
+
+/* The start of the Hangul Syllables (U+AC00-U+D7A3) */
+#define SBASE 0xAC00
+#define SCOUNT 11172
+
+/* The starts/ends of the leading consonants (choseong), the vowels
+ * (jungseong) and the trailing consonants (jongseong).
+ */
+#define LBASE 0x1100
+#define VBASE 0x1161
+#define TBASE 0x11A7
+#define LEND 0x115F
+#define VEND 0x11A7
+#define TEND 0x11FF
+
+/* Number of modern jamos */
+#define LCOUNT 19
+#define VCOUNT 21
+#define TCOUNT 28
+#define NCOUNT (VCOUNT * TCOUNT) /* number of syllables of a given choseong */
+
+/* choseong and jungseong filler */
+#define LFILL 0x115F
+#define VFILL 0x1160
+
+/* Old tone marks. */
+#define HTONE1 0x302E
+#define HTONE2 0x302F
+
+/* Useful macros
+ */
+
+#define IS_JAMO(wc) ((wc) >= LBASE && (wc) <= TEND)
+#define IS_L(wc) ((wc) >= LBASE && (wc) <= LEND)
+#define IS_V(wc) ((wc) >= VFILL && (wc) <= VEND)
+#define IS_T(wc) ((wc) > TBASE && (wc) <= TEND)
+#define IS_M(wc) ((wc) == HTONE1 || (wc) == HTONE2)
+#define IS_S(wc) (SBASE <= (wc) && (wc) < (SBASE + SCOUNT))
+
+/* jamo which can be composited as a precomposed syllable */
+#define IS_L_S(wc) ((wc) >= LBASE && (wc) < (LBASE + LCOUNT))
+#define IS_V_S(wc) ((wc) >= VBASE && (wc) < (VBASE + VCOUNT))
+#define IS_T_S(wc) ((wc) > TBASE && (wc) < (TBASE + TCOUNT))
+
+/* if a syllable has a jongseong */
+#define S_HAS_T(s) (((s) - SBASE) % TCOUNT)
+
+/* non hangul */
+#define IS_HANGUL(wc)  (IS_S(wc) || IS_JAMO(wc) || IS_M(wc))
+
+/* syllable boundary condition */
+#define IS_BOUNDARY(prev,next)                                 \
+       ((!IS_L(prev) && IS_S(wc)) ||                           \
+        !IS_HANGUL(next) ||                                    \
+        (IS_S(prev) && S_HAS_T(prev) && IS_L(next)) ||         \
+        (IS_T(prev) && (IS_L(next) || IS_V(next))) ||          \
+        (IS_S(prev) && !S_HAS_T(prev) && IS_L(next)) ||        \
+        (IS_V(prev) && IS_L(next)) ||                          \
+        IS_M(prev))
+
+/* composing/decomposing */
+#define S_FROM_LVT(l,v,t)      (SBASE + (((l) - LBASE) * VCOUNT + ((v) - VBASE)) * TCOUNT + ((t) - TBASE))
+#define S_FROM_LV(l,v)         (SBASE + (((l) - LBASE) * VCOUNT + ((v) - VBASE)) * TCOUNT)
+#define L_FROM_S(s)            (LBASE + (((s) - SBASE) / NCOUNT))
+#define V_FROM_S(s)            (VBASE + (((s) - SBASE) % NCOUNT) / TCOUNT)
+#define T_FROM_S(s)            (TBASE + (((s) - SBASE) % TCOUNT))
diff --git a/modules/hangul/hangul-fc.c b/modules/hangul/hangul-fc.c
new file mode 100755 (executable)
index 0000000..7692a84
--- /dev/null
@@ -0,0 +1,498 @@
+/* Pango
+ * hangul-fc.c: Hangul shaper for FreeType based backends
+ *
+ * Copyright (C) 2002-2006 Changwoo Ryu
+ * Author: Changwoo Ryu <cwryu@debian.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+
+#include "hangul-defs.h"
+#include "tables-jamos.i"
+
+/* No extra fields needed */
+typedef PangoEngineShape      HangulEngineFc;
+typedef PangoEngineShapeClass HangulEngineFcClass ;
+
+#define SCRIPT_ENGINE_NAME "HangulScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+static PangoEngineScriptInfo hangul_scripts[] = {
+  { PANGO_SCRIPT_HANGUL, "*" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    hangul_scripts, G_N_ELEMENTS(hangul_scripts)
+  }
+};
+
+static void
+set_glyph (PangoFont *font, PangoGlyphString *glyphs, int i, int offset, PangoGlyph glyph)
+{
+  PangoRectangle logical_rect;
+
+  glyphs->glyphs[i].glyph = glyph;
+  glyphs->glyphs[i].geometry.x_offset = 0;
+  glyphs->glyphs[i].geometry.y_offset = 0;
+  glyphs->log_clusters[i] = offset;
+
+  pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
+  glyphs->glyphs[i].geometry.width = logical_rect.width;
+}
+
+/* Add a Hangul tone mark glyph in a glyph string.
+ * Non-spacing glyph works pretty much automatically.
+ * Spacing-glyph takes some care:
+ *   1. Make a room for a tone mark at the beginning(leftmost end) of a cluster
+ *   to attach it to.
+ *   2. Adjust x_offset so that it is drawn to the left of a cluster.
+ *   3. Set the logical width to zero.
+ */
+
+static void
+set_glyph_tone (PangoFont *font, PangoGlyphString *glyphs, int i,
+                           int offset, PangoGlyph glyph)
+{
+  PangoRectangle logical_rect, ink_rect;
+  PangoRectangle logical_rect_cluster;
+
+  glyphs->glyphs[i].glyph = glyph;
+  glyphs->glyphs[i].geometry.y_offset = 0;
+  glyphs->log_clusters[i] = offset;
+
+  pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph,
+                               &ink_rect, &logical_rect);
+
+  /* tone mark is not the first in a glyph string. We have info. on the
+   * preceding glyphs in a glyph string
+   */
+    {
+      int j = i - 1;
+      /* search for the beg. of the preceding cluster */
+      while (j >= 0 && glyphs->log_clusters[j] == glyphs->log_clusters[i - 1])
+       j--;
+
+      /* In .._extents_range(...,start,end,...), to my surprise  start is
+       * inclusive but end is exclusive !!
+       */
+      pango_glyph_string_extents_range (glyphs, j + 1, i, font,
+                                       NULL, &logical_rect_cluster);
+
+      /* logical_rect_cluster.width is all the offset we need so that the
+       * inherent x_offset in the glyph (ink_rect.x) should be canceled out.
+       */
+      glyphs->glyphs[i].geometry.x_offset = - logical_rect_cluster.width
+                                           - ink_rect.x ;
+
+
+      /* make an additional room for a tone mark if it has a spacing glyph
+       * because that's likely to be an indication that glyphs for other
+       * characters in the font are not designed for combining with tone marks.
+       */
+      if (logical_rect.width)
+       {
+         glyphs->glyphs[i].geometry.x_offset -= ink_rect.width;
+         glyphs->glyphs[j + 1].geometry.width += ink_rect.width;
+         glyphs->glyphs[j + 1].geometry.x_offset += ink_rect.width;
+       }
+    }
+
+  glyphs->glyphs[i].geometry.width = 0;
+}
+
+
+#define find_char(font,wc) \
+    pango_fc_font_get_glyph((PangoFcFont *)font, wc)
+
+static void
+render_tone (PangoFont *font, gunichar tone, PangoGlyphString *glyphs,
+            int *n_glyphs, int cluster_offset)
+{
+  int index;
+
+  index = find_char (font, tone);
+  pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+  if (index)
+    {
+      set_glyph_tone (font, glyphs, *n_glyphs, cluster_offset, index);
+    }
+  else
+    {
+      /* fall back : HTONE1(0x302e) => middle-dot, HTONE2(0x302f) => colon */
+      index = find_char (font, tone == HTONE1 ? 0x00b7 : 0x003a);
+      if (index)
+       {
+         set_glyph_tone (font, glyphs, *n_glyphs, cluster_offset, index);
+       }
+      else
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset,
+                  PANGO_GET_UNKNOWN_GLYPH (tone));
+    }
+  (*n_glyphs)++;
+}
+
+/* This is a fallback for when we get a tone mark not preceded
+ * by a syllable.
+ */
+static void
+render_isolated_tone (PangoFont *font, gunichar tone, PangoGlyphString *glyphs,
+                     int *n_glyphs, int cluster_offset)
+{
+#if 0 /* FIXME: what kind of hack is it?  it draws dummy glyphs.  */
+  /* Find a base character to render the mark on
+   */
+  int index = find_char (font, 0x25cc);        /* DOTTED CIRCLE */
+  if (!index)
+    index = find_char (font, 0x25cb);   /* WHITE CIRCLE, in KSC-5601 */
+  if (!index)
+    index = find_char (font, ' ');      /* Space */
+  if (!index)                          /* Unknown glyph box with 0000 in it */
+    index = find_char (font, PANGO_GET_UNKNOWN_GLYPH (0));
+
+  /* Add the base character
+   */
+  pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+  set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+  (*n_glyphs)++;
+#endif
+
+  /* And the tone mark
+   */
+  render_tone(font, tone, glyphs, n_glyphs, cluster_offset);
+}
+
+static void
+render_syllable (PangoFont *font, const char *str, int length,
+                PangoGlyphString *glyphs, int *n_glyphs, int cluster_offset)
+{
+  int n_prev_glyphs = *n_glyphs;
+  int index;
+  gunichar wc = 0, tone = 0, text[4];
+  int i, j, composed = 0;
+  const char *p;
+
+  /* Normalize it only when the entire sequence is equivalent to a
+   * precomposed syllable. It's usually better than prefix
+   * normalization both for poor-featured fonts and for smart fonts.
+   * I have seen no smart font which can render S+T as a syllable
+   * form.
+   */
+
+  if (length == 3 || length == 4)
+    {
+      p = str;
+      text[0] = g_utf8_get_char(p);
+      p = g_utf8_next_char(p);
+      text[1] = g_utf8_get_char(p);
+      p = g_utf8_next_char(p);
+      text[2] = g_utf8_get_char(p);
+
+      if (length == 4 && !IS_M(g_utf8_get_char(g_utf8_next_char(p))))
+       goto lvt_out;           /* draw the tone mark later */
+
+      if (IS_L_S(text[0]) && IS_V_S(text[1]) &&  IS_T_S(text[2]))
+       {
+         composed = 3;
+         wc = S_FROM_LVT(text[0], text[1], text[2]);
+         str = g_utf8_next_char(p);
+         goto normalize_out;
+       }
+    }
+ lvt_out:
+
+  if (length == 2 || length == 3)
+    {
+      p = str;
+      text[0] = g_utf8_get_char(p);
+      p = g_utf8_next_char(p);
+      text[1] = g_utf8_get_char(p);
+
+      if (length == 3 && !IS_M(g_utf8_get_char(g_utf8_next_char(p))))
+       goto lv_out;            /* draw the tone mark later */
+      if (IS_L_S(text[0]) && IS_V_S(text[1]))
+       {
+         composed = 2;
+         wc = S_FROM_LV(text[0], text[1]);
+         str = g_utf8_next_char(p);
+       }
+      else if (IS_S(text[0] && !S_HAS_T(text[0]) && IS_T_S(text[1])))
+       {
+         composed = 2;
+         wc = text[0] + (text[1] - TBASE);
+         str = g_utf8_next_char(p);
+         goto normalize_out;
+       }
+    }
+ lv_out:
+ normalize_out:
+
+  if (composed)
+    {
+      index = find_char (font, wc);
+      pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+      if (!index)
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset,
+                  PANGO_GET_UNKNOWN_GLYPH (wc));
+      else
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+      (*n_glyphs)++;
+      length -= composed;
+    }
+
+  /* Render the remaining text as uncomposed forms as a fallback.  */
+  for (i = 0; i < length; i++, str = g_utf8_next_char(str))
+    {
+      int jindex;
+      int oldlen;
+
+      wc = g_utf8_get_char(str);
+
+      if (wc == LFILL || wc == VFILL)
+       continue;
+
+      if (IS_M(wc))
+       {
+         tone = wc;
+         break;
+       }
+
+      if (IS_S(wc))
+       {
+         oldlen = *n_glyphs;
+
+         text[0] = L_FROM_S(wc);
+         text[1] = V_FROM_S(wc);
+         if (S_HAS_T(wc))
+           {
+             text[2] = T_FROM_S(wc);
+             composed = 3;
+           }
+         else
+             composed = 2;
+
+         for (j = 0; j < composed; j++)
+           {
+             index = find_char (font, text[j]);
+             if (index)
+               {
+                 pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+                 set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+                 (*n_glyphs)++;
+               }
+             else
+               goto decompose_cancel;
+           }
+
+         continue;
+
+       decompose_cancel:
+         /* The font doesn't have jamos.  Cancel it. */
+         *n_glyphs = oldlen;
+         pango_glyph_string_set_size (glyphs, *n_glyphs);
+       }
+
+      index = find_char (font, wc);
+      if (index)
+       {
+         pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+         set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+         (*n_glyphs)++;
+         continue;
+       }
+      else if (IS_S(wc))
+       {
+         pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+         set_glyph (font, glyphs, *n_glyphs, cluster_offset,
+                    PANGO_GET_UNKNOWN_GLYPH (wc));
+         (*n_glyphs)++;
+         continue;
+       }
+
+      /* This font has no glyphs on the Hangul Jamo area!  Find a
+        fallback from the Hangul Compatibility Jamo area.  */
+      jindex = wc - LBASE;
+      oldlen = *n_glyphs;
+      for (j = 0; j < 3 && (__jamo_to_ksc5601[jindex][j] != 0); j++)
+       {
+         wc = __jamo_to_ksc5601[jindex][j] - KSC_JAMOBASE + UNI_JAMOBASE;
+         index = (wc >= 0x3131) ? find_char (font, wc) : 0;
+         pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+         if (!index)
+           {
+             *n_glyphs = oldlen;
+             pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+             set_glyph (font, glyphs, *n_glyphs, cluster_offset,
+                        PANGO_GET_UNKNOWN_GLYPH (text[i]));
+             (*n_glyphs)++;
+             break;
+           }
+         else
+           set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+         (*n_glyphs)++;
+       }
+    }
+  if (n_prev_glyphs == *n_glyphs)
+    {
+      index = find_char (font, 0x3164);        /* U+3164 HANGUL FILLER */
+      pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+      if (!index)
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset,
+                  PANGO_GET_UNKNOWN_GLYPH (index));
+      else
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+      glyphs->log_clusters[*n_glyphs] = cluster_offset;
+      (*n_glyphs)++;
+    }
+  if (tone)
+    render_tone(font, tone, glyphs, n_glyphs, cluster_offset);
+}
+
+static void
+render_basic (PangoFont *font, gunichar wc,
+             PangoGlyphString *glyphs, int *n_glyphs, int cluster_offset)
+{
+  int index;
+
+  if (wc == 0xa0)      /* non-break-space */
+    wc = 0x20;
+
+  pango_glyph_string_set_size (glyphs, *n_glyphs + 1);
+
+  if (pango_is_zero_width (wc))
+    set_glyph (font, glyphs, *n_glyphs, cluster_offset, PANGO_GLYPH_EMPTY);
+  else
+    {
+      index = find_char (font, wc);
+      if (index)
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset, index);
+      else
+       set_glyph (font, glyphs, *n_glyphs, cluster_offset, PANGO_GET_UNKNOWN_GLYPH (wc));
+    }
+  (*n_glyphs)++;
+}
+
+static void
+hangul_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                    PangoFont        *font,
+                    const char       *text,
+                    gint              length,
+                    const PangoAnalysis *analysis G_GNUC_UNUSED,
+                    PangoGlyphString *glyphs)
+{
+  int n_chars = g_utf8_strlen (text, length);
+  int n_glyphs;
+  int i;
+  const char *p, *start;
+
+  int n_jamos;
+  gunichar prev = 0;
+
+  n_glyphs = 0;
+  start = p = text;
+  n_jamos = 0;
+
+  for (i = 0; i < n_chars; i++)
+    {
+      gunichar wc;
+
+      wc = g_utf8_get_char (p);
+
+      /* Check syllable boundaries. */
+      if (n_jamos && IS_BOUNDARY (prev, wc))
+       {
+         if (n_jamos == 1 && IS_S (prev))
+           /* common case which the most people use */
+           render_basic (font, prev, glyphs, &n_glyphs, start - text);
+         else
+           /* possibly complex composition */
+           render_syllable (font, start, n_jamos, glyphs,
+                            &n_glyphs, start - text);
+         n_jamos = 0;
+         start = p;
+       }
+
+      prev = wc;
+
+      if (!IS_HANGUL (wc))
+       {
+         render_basic (font, wc, glyphs, &n_glyphs, start - text);
+         start = g_utf8_next_char (p);
+       }
+      else if (IS_M (wc) && !n_jamos)
+       {
+         /* Tone mark not following syllable */
+         render_isolated_tone (font, wc, glyphs, &n_glyphs, start - text);
+         start = g_utf8_next_char (p);
+       }
+      else
+       n_jamos++;
+      p = g_utf8_next_char (p);
+    }
+
+  if (n_jamos == 1 && IS_S (prev))
+    render_basic (font, prev, glyphs, &n_glyphs, start - text);
+  else if (n_jamos > 0)
+    render_syllable (font, start, n_jamos, glyphs, &n_glyphs,
+                    start - text);
+}
+
+static void
+hangul_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = hangul_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (HangulEngineFc, hangul_engine_fc,
+                               hangul_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  hangul_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (hangul_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/hangul/tables-jamos.i b/modules/hangul/tables-jamos.i
new file mode 100755 (executable)
index 0000000..e5ea594
--- /dev/null
@@ -0,0 +1,401 @@
+/* -*-c-*- */
+
+#define KSC_JAMOBASE           0x2420
+#define UNI_JAMOBASE           0x3130
+
+#define KSC_KIYEOK             0x2421
+#define KSC_SSANGKIYEOK                0x2422
+#define KSC_KIYEOK_SIOS                0x2423
+#define KSC_NIEUN              0x2424
+#define KSC_NIEUN_CIEUC                0x2425
+#define KSC_NIEUN_HIEUH                0x2426
+#define KSC_TIKEUT             0x2427
+#define KSC_SSANGTIKEUT                0x2428
+#define KSC_RIEUL              0x2429
+#define KSC_RIEUL_KIYEOK       0x242a
+#define KSC_RIEUL_MIEUM                0x242b
+#define KSC_RIEUL_PIEUP                0x242c
+#define KSC_RIEUL_SIOS         0x242d
+#define KSC_RIEUL_THIEUTH      0x242e
+#define KSC_RIEUL_PHIEUPH      0x242f
+#define KSC_RIEUL_HIEUH                0x2430
+#define KSC_MIEUM              0x2431
+#define KSC_PIEUP              0x2432
+#define KSC_SSANGPIEUP         0x2433
+#define KSC_PIEUP_SIOS         0x2434
+#define KSC_SIOS               0x2435
+#define KSC_SSANGSIOS          0x2436
+#define KSC_IEUNG              0x2437
+#define KSC_CIEUC              0x2438
+#define KSC_SSANGCIEUC         0x2439
+#define KSC_CHIEUCH            0x243a
+#define KSC_KHIEUKH            0x243b
+#define KSC_THIEUTH            0x243c
+#define KSC_PHIEUPH            0x243d
+#define KSC_HIEUH              0x243e
+
+#define KSC_A                  0x243f
+#define KSC_AE                 0x2440
+#define KSC_YA                 0x2441
+#define KSC_YAE                        0x2442
+#define KSC_EO                 0x2443
+#define KSC_E                  0x2444
+#define KSC_YEO                        0x2445
+#define KSC_YE                 0x2446
+#define KSC_O                  0x2447
+#define KSC_WA                 0x2448
+#define KSC_WAE                        0x2449
+#define KSC_OE                 0x244a
+#define KSC_YO                 0x244b
+#define KSC_U                  0x244c
+#define KSC_WEO                        0x244d
+#define KSC_WE                 0x244e
+#define KSC_WI                 0x244f
+#define KSC_YU                 0x2450
+#define KSC_EU                 0x2451
+#define KSC_YI                 0x2452
+#define KSC_I                  0x2453
+
+#define KSC_SSANGNIEUN         0x2455
+#define KSC_NIEUN_TIKEUT       0x2456
+#define KSC_NIEUN_SIOS         0x2457
+#define KSC_NIEUN_PANSIOS      0x2458
+#define KSC_RIEUL_KIYEOK_SIOS  0x2459
+#define KSC_RIEUL_TIKEUT       0x245a
+#define KSC_RIEUL_PIEUP_SIOS   0x245b
+#define KSC_RIEUL_PANSIOS      0x245c
+#define KSC_RIEUL_YEORINHIEUH  0x245d
+#define KSC_MIEUM_PIEUP                0x245e
+#define KSC_MIEUM_SIOS         0x245f
+#define KSC_MIEUM_PANSIOS      0x2460
+#define KSC_KAPYEOUNMIEUM      0x2461
+#define KSC_PIEUP_KIYEOK       0x2462
+#define KSC_PIEUP_TIKEUT       0x2463
+#define KSC_PIEUP_SIOS_KIYEOK  0x2464
+#define KSC_PIEUP_SIOS_TIKEUT  0x2465
+#define KSC_PIEUP_CIEUC                0x2466
+#define KSC_PIEUP_THIEUTH      0x2467
+#define KSC_KAPYEOUNPIEUP      0x2468
+#define KSC_KAPYEOUNSSANGPIEUP 0x2469
+#define KSC_SIOS_KIYEOK                0x246a
+#define KSC_SIOS_NIEUN         0x246b
+#define KSC_SIOS_TIKEUT                0x246c
+#define KSC_SIOS_PIEUP         0x246d
+#define KSC_SIOS_CIEUC         0x246e
+#define KSC_PANSIOS            0x246f
+#define KSC_SSANGIEUNG         0x2470
+#define KSC_YESIEUNG           0x2471
+#define KSC_IEUNG_CIEUC                0x2472
+#define KSC_IEUNG_PANSIOS      0x2473
+#define KSC_KAPYEOUNPHIEUPH    0x2474
+#define KSC_SSANGHIEUH         0x2475
+#define KSC_YEORINHIEUH                0x2476
+#define KSC_YO_YA              0x2477
+#define KSC_YO_YAE             0x2478
+#define KSC_YO_I               0x2479
+#define KSC_YU_YEO             0x247a
+#define KSC_YU_YE              0x247b
+#define KSC_YU_I               0x247c
+#define KSC_ARAEA              0x247d
+#define KSC_ARAEA_I            0x247e
+
+/*
+ * Some jamos are not representable with KSC5601.  These are ugly
+ * fallbacks:
+ *
+ * CHITUEUMSIOS: 0x233c (less than)
+ * CEONGCHITUEUMSIOS: 0x233e (greater than)
+ * CHITUEUMCIEUC 0x237b (left bracket)
+ * CEONGEUMCIEUC 0x237d (right bracket)
+ * CHITUEUMCHIEUCH 0x237b (left brace)
+ * CEONGEUMCHIEUCH 0x237d (right brace)
+ */
+#define KSC_CHITUEUMSIOS       0x233c
+#define KSC_CEONGCHITUEUMSIOS  0x233e
+#define KSC_CHITUEUMCIEUC      0x235b
+#define KSC_CEONGEUMCIEUC      0x235d
+#define KSC_CHITUEUMCHIEUCH    0x237b
+#define KSC_CEONGEUMCHIEUCH    0x237d
+
+static const guint16 __jamo_to_ksc5601[0x100][3] =
+{
+  /*
+   * CHOSEONG
+   */
+  /* CHOSEONG 0x1100 -- 0x1112 : matched to each ksc5601 Jamos extactly.  */
+  {KSC_KIYEOK, 0, 0},
+  {KSC_SSANGKIYEOK, 0, 0},
+  {KSC_NIEUN, 0, 0},
+  {KSC_TIKEUT, 0, 0},
+  {KSC_SSANGTIKEUT, 0, 0},
+  {KSC_RIEUL, 0, 0},
+  {KSC_MIEUM, 0, 0},
+  {KSC_PIEUP, 0, 0},
+  {KSC_SSANGPIEUP, 0, 0},
+  {KSC_SIOS, 0, 0},
+  {KSC_SSANGSIOS, 0, 0},
+  {KSC_IEUNG, 0, 0},
+  {KSC_CIEUC, 0, 0},
+  {KSC_SSANGCIEUC, 0, 0},
+  {KSC_CHIEUCH, 0, 0},
+  {KSC_KHIEUKH, 0, 0},
+  {KSC_THIEUTH, 0, 0},
+  {KSC_PHIEUPH, 0, 0},
+  {KSC_HIEUH, 0, 0},
+  /* Some of the following are representable as a glyph, the others not. */
+  {KSC_NIEUN, KSC_KIYEOK, 0},
+  {KSC_SSANGNIEUN, 0, 0},
+  {KSC_NIEUN_TIKEUT, 0, 0},
+  {KSC_NIEUN, KSC_PIEUP, 0},
+  {KSC_TIKEUT, KSC_KIYEOK, 0},
+  {KSC_RIEUL, KSC_NIEUN, 0},
+  {KSC_RIEUL, KSC_RIEUL, 0},
+  {KSC_RIEUL_HIEUH, 0, 0},
+  {KSC_RIEUL, KSC_IEUNG, 0},
+  {KSC_MIEUM_PIEUP, 0, 0},
+  {KSC_KAPYEOUNMIEUM, 0, 0},
+  {KSC_PIEUP_KIYEOK, 0, 0},
+  {KSC_PIEUP, KSC_NIEUN, 0},
+  {KSC_PIEUP_TIKEUT, 0, 0},
+  {KSC_PIEUP_SIOS, 0, 0},
+  {KSC_PIEUP_SIOS_KIYEOK, 0, 0},
+  {KSC_PIEUP_SIOS_TIKEUT, 0, 0},
+  {KSC_PIEUP, KSC_SIOS, KSC_PIEUP},
+  {KSC_PIEUP, KSC_SIOS, KSC_SIOS},
+  {KSC_PIEUP, KSC_SIOS, KSC_CIEUC},
+  {KSC_PIEUP_CIEUC, 0, 0},
+  {KSC_PIEUP, KSC_CHIEUCH, 0},
+  {KSC_PIEUP_THIEUTH, 0, 0},
+  {KSC_PIEUP, KSC_PHIEUPH, 0},
+  {KSC_KAPYEOUNPIEUP, 0, 0},
+  {KSC_KAPYEOUNSSANGPIEUP, 0, 0},
+  {KSC_SIOS_KIYEOK, 0, 0},
+  {KSC_SIOS_NIEUN, 0, 0},
+  {KSC_SIOS_TIKEUT, 0, 0},
+  {KSC_SIOS, KSC_RIEUL, 0},
+  {KSC_SIOS, KSC_MIEUM, 0},
+  {KSC_SIOS_PIEUP, 0, 0},
+  {KSC_SIOS, KSC_PIEUP, KSC_KIYEOK},
+  {KSC_SIOS, KSC_SIOS, KSC_SIOS},
+  {KSC_SIOS, KSC_IEUNG, 0},
+  {KSC_SIOS_CIEUC, 0, 0},
+  {KSC_SIOS, KSC_CHIEUCH, 0},
+  {KSC_SIOS, KSC_KHIEUKH, 0},
+  {KSC_SIOS, KSC_THIEUTH, 0},
+  {KSC_SIOS, KSC_PHIEUPH, 0},
+  {KSC_SIOS, KSC_HIEUH, 0},
+  {KSC_CHITUEUMSIOS, 0, 0},
+  {KSC_CHITUEUMSIOS, KSC_CHITUEUMSIOS, 0},
+  {KSC_CEONGCHITUEUMSIOS, 0, 0},
+  {KSC_CEONGCHITUEUMSIOS, KSC_CEONGCHITUEUMSIOS, 0},
+  {KSC_PANSIOS, 0, 0},
+  {KSC_IEUNG, KSC_KIYEOK, 0},
+  {KSC_IEUNG, KSC_TIKEUT, 0},
+  {KSC_IEUNG, KSC_MIEUM, 0},
+  {KSC_IEUNG, KSC_PIEUP, 0},
+  {KSC_IEUNG, KSC_SIOS, 0},
+  {KSC_IEUNG_PANSIOS, 0, 0},
+  {KSC_SSANGIEUNG, 0, 0},
+  {KSC_IEUNG_CIEUC, 0, 0},
+  {KSC_IEUNG, KSC_CHIEUCH, 0},
+  {KSC_IEUNG, KSC_THIEUTH, 0},
+  {KSC_IEUNG, KSC_PHIEUPH, 0},
+  {KSC_YESIEUNG, 0, 0},
+  {KSC_CIEUC, KSC_IEUNG, 0},
+  {KSC_CHITUEUMCIEUC, 0, 0},
+  {KSC_CHITUEUMCIEUC, KSC_CHITUEUMCIEUC, 0},
+  {KSC_CEONGEUMCIEUC, 0, 0},
+  {KSC_CEONGEUMCIEUC, KSC_CEONGEUMCIEUC, 0},
+  {KSC_CHIEUCH, KSC_KHIEUKH, 0},
+  {KSC_CHIEUCH, KSC_HIEUH, 0},
+  {KSC_CHITUEUMCHIEUCH, 0, 0},
+  {KSC_CEONGEUMCHIEUCH, 0, 0},
+  {KSC_PHIEUPH, KSC_PIEUP, 0},
+  {KSC_KAPYEOUNPHIEUPH, 0, 0},
+  {KSC_SSANGHIEUH, 0, 0},
+  {KSC_YEORINHIEUH, 0, 0},
+  /* 0x115A ~ 0x115E -- reserved */
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  /* CHOSEONG FILLER */
+  {0, 0, 0},
+
+  /*
+   * JUNGSEONG
+   */
+  /*
+   * JUNGSEONG
+   */
+  {0, 0, 0},                   /* JUNGSEONG FILL */
+  /* JUNGSEONG 0x1161 -- 0x1175 : matched to each ksc5601 Jamos extactly.  */
+  {KSC_A, 0, 0},
+  {KSC_AE, 0, 0},
+  {KSC_YA, 0, 0},
+  {KSC_YAE, 0, 0},
+  {KSC_EO, 0, 0},
+  {KSC_E, 0, 0},
+  {KSC_YEO, 0, 0},
+  {KSC_YE, 0, 0},
+  {KSC_O, 0, 0},
+  {KSC_WA, 0, 0},
+  {KSC_WAE, 0, 0},
+  {KSC_OE, 0, 0},
+  {KSC_YO, 0, 0},
+  {KSC_U, 0, 0},
+  {KSC_WEO, 0, 0},
+  {KSC_WE, 0, 0},
+  {KSC_WI, 0, 0},
+  {KSC_YU, 0, 0},
+  {KSC_EU, 0, 0},
+  {KSC_YI, 0, 0},
+  {KSC_I, 0, 0},
+  /* Some of the following are representable as a glyph, the others not. */
+  {KSC_A, KSC_O, 0},
+  {KSC_A, KSC_U, 0},
+  {KSC_YA, KSC_O, 0},
+  {KSC_YA, KSC_YO, 0},
+  {KSC_EO, KSC_O, 0},
+  {KSC_EO, KSC_U, 0},
+  {KSC_EO, KSC_EU, 0},
+  {KSC_YEO, KSC_O, 0},
+  {KSC_YEO, KSC_U, 0},
+  {KSC_O, KSC_EO, 0},
+  {KSC_O, KSC_E, 0},
+  {KSC_O, KSC_YE, 0},
+  {KSC_O, KSC_O, 0},
+  {KSC_O, KSC_U, 0},
+  {KSC_YO_YA, 0, 0},
+  {KSC_YO_YAE, 0, 0},
+  {KSC_YO, KSC_YEO, 0},
+  {KSC_YO, KSC_O, 0},
+  {KSC_YO_I, 0, 0},
+  {KSC_U, KSC_A, 0},
+  {KSC_U, KSC_AE, 0},
+  {KSC_U, KSC_EO, KSC_EU},
+  {KSC_U, KSC_YE, 0},
+  {KSC_U, KSC_U, 0},
+  {KSC_YU, KSC_A, 0},
+  {KSC_YU, KSC_EO, 0},
+  {KSC_YU, KSC_E, 0},
+  {KSC_YU_YEO, 0, 0},
+  {KSC_YU_YE, 0, 0},
+  {KSC_YU, KSC_U, 0},
+  {KSC_YU_I, 0, 0},
+  {KSC_EU, KSC_U, 0},
+  {KSC_EU, KSC_EU, 0},
+  {KSC_YI, KSC_U, 0},
+  {KSC_I, KSC_A, 0},
+  {KSC_I, KSC_YA, 0},
+  {KSC_I, KSC_O, 0},
+  {KSC_I, KSC_U, 0},
+  {KSC_I, KSC_EU, 0},
+  {KSC_I, KSC_ARAEA, 0},
+  {KSC_ARAEA, 0, 0},
+  {KSC_ARAEA, KSC_EO, 0},
+  {KSC_ARAEA, KSC_U, 0},
+  {KSC_ARAEA, KSC_I, 0},
+  {KSC_ARAEA, KSC_ARAEA, 0},
+  /* 0x11A3 ~ 0x11A7 -- reserved */
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},                   /* (INTERNAL) JONGSEONG FILL */
+  
+  /*
+   * JONGSEONG
+   */
+  {KSC_KIYEOK, 0, 0},
+  {KSC_SSANGKIYEOK, 0, 0},
+  {KSC_KIYEOK_SIOS, 0, 0},
+  {KSC_NIEUN, 0, 0},
+  {KSC_NIEUN_CIEUC, 0, 0},
+  {KSC_NIEUN_HIEUH, 0, 0},
+  {KSC_TIKEUT, 0, 0},
+  {KSC_RIEUL, 0, 0},
+  {KSC_RIEUL_KIYEOK, 0, 0},
+  {KSC_RIEUL_MIEUM, 0, 0},
+  {KSC_RIEUL_PIEUP, 0, 0},
+  {KSC_RIEUL_SIOS, 0, 0},
+  {KSC_RIEUL_TIKEUT, 0, 0},
+  {KSC_RIEUL_PHIEUPH, 0, 0},
+  {KSC_RIEUL_HIEUH, 0, 0},
+  {KSC_MIEUM, 0, 0},
+  {KSC_PIEUP, 0, 0},
+  {KSC_PIEUP_SIOS, 0, 0},
+  {KSC_SIOS, 0, 0},
+  {KSC_SSANGSIOS, 0, 0},
+  {KSC_IEUNG, 0, 0},
+  {KSC_CIEUC, 0, 0},
+  {KSC_CHIEUCH, 0, 0},
+  {KSC_KHIEUKH, 0, 0},
+  {KSC_THIEUTH, 0, 0},
+  {KSC_PHIEUPH, 0, 0},
+  {KSC_HIEUH, 0, 0},
+  {KSC_KIYEOK, KSC_RIEUL, 0},
+  {KSC_KIYEOK, KSC_SIOS, KSC_KIYEOK},
+  {KSC_NIEUN, KSC_KIYEOK, 0},
+  {KSC_NIEUN_TIKEUT, 0, 0},
+  {KSC_NIEUN_SIOS, 0, 0},
+  {KSC_NIEUN_PANSIOS, 0, 0},
+  {KSC_NIEUN, KSC_THIEUTH, 0},
+  {KSC_TIKEUT, KSC_KIYEOK, 0},
+  {KSC_TIKEUT, KSC_RIEUL, 0},
+  {KSC_RIEUL_KIYEOK_SIOS, 0, 0},
+  {KSC_RIEUL, KSC_NIEUN, 0},
+  {KSC_RIEUL_TIKEUT, 0, 0},
+  {KSC_RIEUL, KSC_TIKEUT, KSC_HIEUH},
+  {KSC_RIEUL, KSC_RIEUL, 0},
+  {KSC_RIEUL, KSC_MIEUM, KSC_KIYEOK},
+  {KSC_RIEUL, KSC_MIEUM, KSC_SIOS},
+  {KSC_RIEUL_PIEUP_SIOS, 0, 0},
+  {KSC_RIEUL, KSC_PHIEUPH, KSC_HIEUH},
+  {KSC_RIEUL, KSC_KAPYEOUNPIEUP, 0},
+  {KSC_RIEUL, KSC_SIOS, KSC_SIOS},
+  {KSC_RIEUL_PANSIOS, 0, 0},
+  {KSC_RIEUL, KSC_KHIEUKH, 0},
+  {KSC_RIEUL_YEORINHIEUH, 0, 0},
+  {KSC_MIEUM, KSC_KIYEOK, 0},
+  {KSC_MIEUM, KSC_RIEUL, 0},
+  {KSC_MIEUM_PIEUP, 0, 0},
+  {KSC_MIEUM_SIOS, 0, 0},
+  {KSC_MIEUM, KSC_SIOS, KSC_SIOS},
+  {KSC_MIEUM_PANSIOS, 0, 0},
+  {KSC_MIEUM, KSC_CHIEUCH, 0},
+  {KSC_MIEUM, KSC_HIEUH, 0},
+  {KSC_KAPYEOUNMIEUM, 0, 0},
+  {KSC_PIEUP, KSC_RIEUL, 0},
+  {KSC_PIEUP, KSC_PHIEUPH, 0},
+  {KSC_PIEUP, KSC_HIEUH, 0},
+  {KSC_KAPYEOUNPIEUP, 0, 0},
+  {KSC_SIOS_KIYEOK, 0, 0},
+  {KSC_SIOS_TIKEUT, 0, 0},
+  {KSC_SIOS, KSC_RIEUL, 0},
+  {KSC_SIOS_PIEUP, 0, 0},
+  {KSC_PANSIOS, 0, 0},
+  {KSC_IEUNG, KSC_KIYEOK, 0},
+  {KSC_IEUNG, KSC_KIYEOK, KSC_KIYEOK},
+  {KSC_SSANGIEUNG, 0, 0},
+  {KSC_IEUNG, KSC_KHIEUKH, 0},
+  {KSC_YESIEUNG, 0, 0},
+  {KSC_YESIEUNG, KSC_SIOS, 0},
+  {KSC_YESIEUNG, KSC_PANSIOS, 0},
+  {KSC_PHIEUPH, KSC_PIEUP, 0},
+  {KSC_KAPYEOUNPHIEUPH, 0, 0},
+  {KSC_HIEUH, KSC_NIEUN, 0},
+  {KSC_HIEUH, KSC_RIEUL, 0},
+  {KSC_HIEUH, KSC_MIEUM, 0},
+  {KSC_HIEUH, KSC_PIEUP, 0},
+  {KSC_YEORINHIEUH, 0, 0},
+  /* reserved */
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0},
+  {0, 0, 0}
+};
+
diff --git a/modules/hebrew/Makefile.am b/modules/hebrew/Makefile.am
new file mode 100755 (executable)
index 0000000..52abcda
--- /dev/null
@@ -0,0 +1,24 @@
+include $(top_srcdir)/modules/Module.mk
+
+common_sources = hebrew-shaper.c hebrew-shaper.h
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_HEBREW_FC
+noinst_LTLIBRARIES += libpango-hebrew-fc.la
+else
+if DYNAMIC_HEBREW_FC
+module_LTLIBRARIES += pango-hebrew-fc.la
+endif
+endif
+endif
+
+hebrew_fc_sources = $(common_sources) hebrew-fc.c 
+
+pango_hebrew_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_hebrew_fc_la_LIBADD = $(pangoft2libs)
+pango_hebrew_fc_la_SOURCES = $(hebrew_fc_sources)
+libpango_hebrew_fc_la_SOURCES = $(hebrew_fc_sources)
+libpango_hebrew_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_hebrew_fc
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/hebrew/Makefile.in b/modules/hebrew/Makefile.in
new file mode 100644 (file)
index 0000000..8acdf08
--- /dev/null
@@ -0,0 +1,721 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_HEBREW_FC_TRUE@am__append_2 = libpango-hebrew-fc.la
+@DYNAMIC_HEBREW_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_HEBREW_FC_FALSE@am__append_3 = pango-hebrew-fc.la
+subdir = modules/hebrew
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_hebrew_fc_la_LIBADD =
+am__objects_1 = libpango_hebrew_fc_la-hebrew-shaper.lo
+am__objects_2 = $(am__objects_1) libpango_hebrew_fc_la-hebrew-fc.lo
+am_libpango_hebrew_fc_la_OBJECTS = $(am__objects_2)
+libpango_hebrew_fc_la_OBJECTS = $(am_libpango_hebrew_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_HEBREW_FC_TRUE@am_libpango_hebrew_fc_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_hebrew_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_3 = hebrew-shaper.lo
+am__objects_4 = $(am__objects_3) hebrew-fc.lo
+am_pango_hebrew_fc_la_OBJECTS = $(am__objects_4)
+pango_hebrew_fc_la_OBJECTS = $(am_pango_hebrew_fc_la_OBJECTS)
+@DYNAMIC_HEBREW_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_HEBREW_FC_FALSE@am_pango_hebrew_fc_la_rpath = -rpath \
+@DYNAMIC_HEBREW_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_HEBREW_FC_FALSE@  $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_hebrew_fc_la_SOURCES) \
+       $(pango_hebrew_fc_la_SOURCES)
+DIST_SOURCES = $(libpango_hebrew_fc_la_SOURCES) \
+       $(pango_hebrew_fc_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3)
+noinst_LTLIBRARIES = $(am__append_2)
+common_sources = hebrew-shaper.c hebrew-shaper.h
+hebrew_fc_sources = $(common_sources) hebrew-fc.c 
+pango_hebrew_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_hebrew_fc_la_LIBADD = $(pangoft2libs)
+pango_hebrew_fc_la_SOURCES = $(hebrew_fc_sources)
+libpango_hebrew_fc_la_SOURCES = $(hebrew_fc_sources)
+libpango_hebrew_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_hebrew_fc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/hebrew/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/hebrew/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-hebrew-fc.la: $(libpango_hebrew_fc_la_OBJECTS) $(libpango_hebrew_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_hebrew_fc_la_rpath) $(libpango_hebrew_fc_la_LDFLAGS) $(libpango_hebrew_fc_la_OBJECTS) $(libpango_hebrew_fc_la_LIBADD) $(LIBS)
+pango-hebrew-fc.la: $(pango_hebrew_fc_la_OBJECTS) $(pango_hebrew_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_hebrew_fc_la_rpath) $(pango_hebrew_fc_la_LDFLAGS) $(pango_hebrew_fc_la_OBJECTS) $(pango_hebrew_fc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hebrew-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hebrew-shaper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_hebrew_fc_la-hebrew-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_hebrew_fc_la-hebrew-shaper.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_hebrew_fc_la-hebrew-shaper.lo: hebrew-shaper.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_hebrew_fc_la_CFLAGS) $(CFLAGS) -MT libpango_hebrew_fc_la-hebrew-shaper.lo -MD -MP -MF "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-shaper.Tpo" -c -o libpango_hebrew_fc_la-hebrew-shaper.lo `test -f 'hebrew-shaper.c' || echo '$(srcdir)/'`hebrew-shaper.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-shaper.Tpo" "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-shaper.Plo"; else rm -f "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-shaper.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hebrew-shaper.c' object='libpango_hebrew_fc_la-hebrew-shaper.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_hebrew_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_hebrew_fc_la-hebrew-shaper.lo `test -f 'hebrew-shaper.c' || echo '$(srcdir)/'`hebrew-shaper.c
+
+libpango_hebrew_fc_la-hebrew-fc.lo: hebrew-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_hebrew_fc_la_CFLAGS) $(CFLAGS) -MT libpango_hebrew_fc_la-hebrew-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-fc.Tpo" -c -o libpango_hebrew_fc_la-hebrew-fc.lo `test -f 'hebrew-fc.c' || echo '$(srcdir)/'`hebrew-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-fc.Tpo" "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-fc.Plo"; else rm -f "$(DEPDIR)/libpango_hebrew_fc_la-hebrew-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hebrew-fc.c' object='libpango_hebrew_fc_la-hebrew-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_hebrew_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_hebrew_fc_la-hebrew-fc.lo `test -f 'hebrew-fc.c' || echo '$(srcdir)/'`hebrew-fc.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/hebrew/hebrew-fc.c b/modules/hebrew/hebrew-fc.c
new file mode 100755 (executable)
index 0000000..fcfed2b
--- /dev/null
@@ -0,0 +1,354 @@
+/* Pango
+ * hebrew-fc.h: Hebrew shaper for FreeType-based backends
+ *
+ * Copyright (C) 2000, 2007 Red Hat Software
+ * Authors:
+ *   Owen Taylor <otaylor@redhat.com>
+ *   Dov Grobgeld <dov.grobgeld@weizmann.ac.il>
+ *   Behdad Esfahbod <behdad@behdad.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include <pango/pango-ot.h>
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+#include "hebrew-shaper.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      HebrewEngineFc;
+typedef PangoEngineShapeClass HebrewEngineFcClass ;
+
+#define MAX_CLUSTER_CHRS       20
+
+static PangoEngineScriptInfo hebrew_scripts[] = {
+  { PANGO_SCRIPT_HEBREW, "*" }
+};
+
+#define SCRIPT_ENGINE_NAME "HebrewScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    hebrew_scripts, G_N_ELEMENTS(hebrew_scripts)
+  }
+};
+
+static void
+get_cluster_glyphs(PangoFont      *font,
+                  gunichar       cluster[],
+                  gint           cluster_size,
+                  gboolean       do_mirror,
+                  /* output */
+                  gint           glyph_num[],
+                  PangoGlyph     glyph[],
+                  gint           widths[],
+                  PangoRectangle ink_rects[])
+{
+  int i;
+  for (i=0; i<cluster_size; i++)
+    {
+      PangoRectangle logical_rect;
+      gunichar wc = cluster[i];
+      gunichar mirrored_ch;
+
+      if (do_mirror)
+       if (pango_get_mirror_char (wc, &mirrored_ch))
+         wc = mirrored_ch;
+
+      if (pango_is_zero_width (wc))
+       glyph_num[i] = PANGO_GLYPH_EMPTY;
+      else
+       {
+         glyph_num[i] = pango_fc_font_get_glyph ((PangoFcFont *)font, wc);
+
+         if (!glyph_num[i])
+           glyph_num[i] = PANGO_GET_UNKNOWN_GLYPH ( wc);
+       }
+
+      glyph[i] = glyph_num[i];
+
+      pango_font_get_glyph_extents (font,
+                                   glyph[i], &ink_rects[i], &logical_rect);
+
+      /* Assign the base char width to the last character in the cluster */
+      if (i==0)
+       {
+         widths[i] = 0;
+         widths[cluster_size-1] = logical_rect.width;
+       }
+      else if (i < cluster_size-1)
+       widths[i] = 0;
+    }
+}
+
+static void
+add_glyph (PangoGlyphString *glyphs,
+          gint              cluster_start,
+          PangoGlyph        glyph,
+          gboolean          is_combining,
+          gint              width,
+          gint              x_offset,
+          gint              y_offset
+          )
+{
+  gint index = glyphs->num_glyphs;
+
+  pango_glyph_string_set_size (glyphs, index + 1);
+
+  glyphs->glyphs[index].glyph = glyph;
+  glyphs->glyphs[index].attr.is_cluster_start = is_combining ? 0 : 1;
+
+  glyphs->log_clusters[index] = cluster_start;
+
+  glyphs->glyphs[index].geometry.x_offset = x_offset;
+  glyphs->glyphs[index].geometry.y_offset = y_offset;
+  glyphs->glyphs[index].geometry.width = width;
+}
+
+static void
+add_cluster(PangoGlyphString *glyphs,
+           int              cluster_size,
+           int              cluster_start,
+           PangoGlyph       glyph[],
+           int              width[],
+           int              x_offset[],
+           int              y_offset[])
+{
+  int i;
+
+  for (i=0; i<cluster_size; i++)
+    {
+      add_glyph (glyphs, cluster_start, glyph[i],
+                i == 0 ? FALSE : TRUE, width[i], x_offset[i], y_offset[i]);
+    }
+}
+
+static void
+fallback_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+               PangoFont        *font,
+               const char       *text,
+               gint              length,
+               const PangoAnalysis *analysis,
+               PangoGlyphString *glyphs)
+{
+  const char *p;
+  const char *log_cluster;
+  gunichar cluster[MAX_CLUSTER_CHRS];
+  gint cluster_size;
+  gint glyph_num[MAX_CLUSTER_CHRS];
+  gint glyph_width[MAX_CLUSTER_CHRS], x_offset[MAX_CLUSTER_CHRS], y_offset[MAX_CLUSTER_CHRS];
+  PangoRectangle ink_rects[MAX_CLUSTER_CHRS];
+  PangoGlyph glyph[MAX_CLUSTER_CHRS];
+
+  pango_glyph_string_set_size (glyphs, 0);
+
+  p = text;
+  while (p < text + length)
+    {
+      log_cluster = p;
+      p = hebrew_shaper_get_next_cluster (p, text + length - p,
+                                         /* output */
+                                         cluster, &cluster_size);
+      get_cluster_glyphs(font,
+                        cluster,
+                        cluster_size,
+                        analysis->level % 2,
+                        /* output */
+                        glyph_num,
+                        glyph,
+                        glyph_width,
+                        ink_rects);
+
+      /* Kern the glyphs! */
+      hebrew_shaper_get_cluster_kerning(cluster,
+                                       cluster_size,
+                                       /* Input and output */
+                                       ink_rects,
+                                       glyph_width,
+                                       /* output */
+                                       x_offset,
+                                       y_offset);
+
+      add_cluster(glyphs,
+                 cluster_size,
+                 log_cluster - text,
+                 glyph,
+                 glyph_width,
+                 x_offset,
+                 y_offset);
+
+    }
+
+  if (analysis->level % 2)
+    hebrew_shaper_bidi_reorder(glyphs);
+}
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"rlig", PANGO_OT_ALL_GLYPHS},
+  /* 'dlig' should be turned-on/off-able.  lets turn off for now. */
+  /* {"dlig", PANGO_OT_ALL_GLYPHS}, */
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+hebrew_engine_shape (PangoEngineShape *engine,
+                    PangoFont        *font,
+                    const char       *text,
+                    gint              length,
+                    const PangoAnalysis *analysis,
+                    PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  guint n_gpos_features = 0;
+  glong n_chars;
+  const char *p;
+  int cluster = 0;
+  int i;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  pango_ot_ruleset_get_feature_count (ruleset, NULL, &n_gpos_features);
+  if (n_gpos_features == 0)
+    {
+      fallback_shape (engine, font, text, length, analysis, glyphs);
+      goto out;
+    }
+
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+
+  n_chars = g_utf8_strlen (text, length);
+
+  p = text;
+  for (i=0; i < n_chars; i++)
+    {
+      gunichar wc;
+      PangoGlyph glyph;
+
+      wc = g_utf8_get_char (p);
+
+      if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+       cluster = p - text;
+
+      if (pango_is_zero_width (wc))
+        glyph = PANGO_GLYPH_EMPTY;
+      else
+        {
+         gunichar c = wc;
+
+         if (analysis->level % 2)
+           g_unichar_get_mirror_char (c, &c);
+
+         glyph = pango_fc_font_get_glyph (fc_font, c);
+       }
+
+      if (!glyph)
+       glyph = PANGO_GET_UNKNOWN_GLYPH (wc);
+
+      pango_ot_buffer_add_glyph (buffer, glyph, 0, cluster);
+
+      p = g_utf8_next_char (p);
+    }
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+  pango_ot_buffer_output (buffer, glyphs);
+
+  pango_ot_buffer_destroy (buffer);
+
+ out:
+  pango_fc_font_unlock_face (fc_font);
+}
+
+static void
+hebrew_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = hebrew_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (HebrewEngineFc, hebrew_engine_fc,
+                               hebrew_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  hebrew_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (hebrew_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/hebrew/hebrew-shaper.c b/modules/hebrew/hebrew-shaper.c
new file mode 100755 (executable)
index 0000000..8aa3638
--- /dev/null
@@ -0,0 +1,477 @@
+/* Pango
+ * hebrew-shaper.c:
+ *
+ * Copyright (c) 2001 by Sun Microsystems, Inc.
+ * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *
+ * Hebrew points positioning improvements 2001
+ * Author: Dov Grobgeld <dov.grobgeld@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Note March 9, 2003: I fixed a crash with regards to precomposed
+ * characters, by wraping all of them to be considered as ALEF as
+ * far as consideration about composability is concerned. The rendering
+ * with regards to precomposed characters AND nikud comes out really
+ * bad though, and should be fixed, once I have more time.
+ */
+
+#include "config.h"
+#include <glib.h>
+#include "pango-engine.h"
+#include "hebrew-shaper.h"
+
+/* Wrap all characters above 0xF00 to ALEF. */
+#define ishebrew(wc)                    ((wc)>0x590 && (wc)<0x600)
+#define ucs2iso8859_8(wc)              ((unsigned int)((unsigned int)(wc) - 0x0590 + 0x10))
+#define iso8859_8_2uni(c)              ((gunichar)(c) - 0x10 + 0x0590)
+
+#define MAX_CLUSTER_CHRS       256
+
+/* Define Hebrew character classes */
+#define _ND                    0
+#define _SP                    1
+#define _NS                    (1<<1)
+#define        _DA                     (1<<2)  /* only for dagesh... */
+
+#define        NoDefine                _ND
+#define        SpacingLetter           _SP
+#define        NonSpacingPunc          _NS
+
+/* Define Hebrew character types */
+#define        __ND                    0
+#define        __SP                    1
+#define        __NS                    2
+#define        __DA                    3
+
+/* Unicode definitions needed in logics below... */
+#define        UNI_ALEF                0x05D0
+#define        UNI_BET                 0x05D1
+#define UNI_GIMMEL              0x05d2
+#define        UNI_DALED               0x05D3
+#define        UNI_KAF                 0x05DB
+#define        UNI_FINAL_KAF           0x05DA
+#define UNI_VAV                        0x05D5
+#define        UNI_YOD                 0x05D9
+#define        UNI_RESH                0x05E8
+#define UNI_LAMED              0x05DC
+#define UNI_SHIN               0x05E9
+#define UNI_FINAL_PE           0x05E3
+#define UNI_PE                 0x05E4
+#define UNI_QOF                 0x05E7
+#define        UNI_TAV                 0x05EA
+#define UNI_SHIN_DOT           0x05C1
+#define UNI_SIN_DOT            0x05C2
+#define UNI_MAPIQ              0x05BC
+#define        UNI_SHEVA               0x05B0
+#define        UNI_HOLAM               0x05B9
+#define        UNI_QUBUTS              0x05BB
+#define UNI_HATAF_SEGOL         0x05B1
+#define UNI_HATAF_QAMATZ        0x05B3
+#define UNI_TSERE               0x05B5
+#define UNI_QAMATS              0x05B8
+#define UNI_QUBUTS              0x05BB
+
+/*======================================================================
+//  In the tables below all Hebrew characters are categorized to
+//  one of the following four classes:
+//
+//      non used entries              Not defined  (ND)
+//      accents, points               Non spacing  (NS)
+//      punctuation and characters    Spacing characters (SP)
+//      dagesh                        "Dagesh"    (DA)
+//----------------------------------------------------------------------*/
+static const gint char_class_table[128] = {
+  /*       0,   1,   2,   3,   4,   5,   6,   7 */
+
+  /*00*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+
+  /*10*/ _ND, _NS, _NS, _NS, _NS, _NS, _NS, _NS,
+        _NS, _NS, _NS, _NS, _NS, _NS, _NS, _NS,
+  /*20*/ _NS, _NS, _ND, _NS, _NS, _NS, _NS, _NS,
+        _NS, _NS, _NS, _NS, _NS, _NS, _NS, _NS,
+  /*30*/ _NS, _NS, _NS, _NS, _NS, _NS, _NS, _NS,
+        _NS, _NS, _ND, _NS, _DA, _NS, _SP, _NS,
+  /*40*/ _SP, _NS, _NS, _SP, _NS, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+  /*50*/ _SP, _SP, _SP, _SP, _SP, _SP, _SP, _SP,
+        _SP, _SP, _SP, _SP, _SP, _SP, _SP, _SP,
+  /*60*/ _SP, _SP, _SP, _SP, _SP, _SP, _SP, _SP,
+        _SP, _SP, _SP, _ND, _ND, _ND, _ND, _ND,
+  /*70*/ _SP, _SP, _SP, _SP, _SP, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+};
+
+static const gint char_type_table[128] = {
+  /*       0,   1,   2,   3,   4,   5,   6,   7 */
+
+  /*00*/ __ND, __ND, __ND, __ND, __ND, __ND, __ND, __ND,
+        __ND, __ND, __ND, __ND, __ND, __ND, __ND, __ND,
+
+  /*10*/ __ND, __NS, __NS, __NS, __NS, __NS, __NS, __NS,
+        __NS, __NS, __NS, __NS, __NS, __NS, __NS, __NS,
+  /*20*/ __NS, __NS, __ND, __NS, __NS, __NS, __NS, __NS,
+        __NS, __NS, __NS, __NS, __NS, __NS, __NS, __NS,
+  /*30*/ __NS, __NS, __NS, __NS, __NS, __NS, __NS, __NS,
+        __NS, __NS, __ND, __NS, __DA, __NS, __SP, __NS,
+  /*40*/ __SP, __NS, __NS, __SP, __NS, __ND, __ND, __ND,
+        __ND, __ND, __ND, __ND, __ND, __ND, __ND, __ND,
+  /*50*/ __SP, __SP, __SP, __SP, __SP, __SP, __SP, __SP,
+        __SP, __SP, __SP, __SP, __SP, __SP, __SP, __SP,
+  /*60*/ __SP, __SP, __SP, __SP, __SP, __SP, __SP, __SP,
+        __SP, __SP, __SP, __ND, __ND, __ND, __ND, __ND,
+  /*70*/ __SP, __SP, __SP, __SP, __SP, __ND, __ND, __ND,
+        __ND, __ND, __ND, __ND, __ND, __ND, __ND, __ND,
+};
+
+/*======================================================================
+//  The following table answers the question whether two characters
+//  are composible or not. The decision is made by looking at the
+//  char_type_table values for the first character in a cluster
+//  vs a following charactrer. The only three combinations that
+//  are composible in Hebrew according to the table are:
+//
+//     1. a spacing character followed by non-spacing character
+//     2. a spacing character followed by a dagesh.
+//     3. a dagesh followed by a non-spacing character.
+//
+//  Note that a spacing character may be followed by several non-spacing
+//  accents, as the decision is always made on the base character of
+//  a combination.
+//----------------------------------------------------------------------*/
+static const gboolean compose_table[4][4] = {
+      /* Cn */ /*     0,     1,     2,     3, */
+/* Cn-1 00 */  { FALSE, FALSE, FALSE, FALSE },
+  /* 10 */      { FALSE, FALSE,  TRUE,  TRUE },
+  /* 20 */      { FALSE, FALSE, FALSE, FALSE },
+  /* 30 */     { FALSE, FALSE,  TRUE, FALSE },
+};
+
+/* Treat all characters above 0xF000 as characters */
+#define is_hebrew(wc) ((wc) >= 0x590 && (wc) < 0x600)
+#define is_char_class(wc, mask)        (char_class_table[ucs2iso8859_8 ((wc))] & (mask))
+#define        is_composible(cur_wc, nxt_wc)   (compose_table[char_type_table[ucs2iso8859_8 (cur_wc)]]\
+                                                     [char_type_table[ucs2iso8859_8 (nxt_wc)]])
+
+G_CONST_RETURN char *
+hebrew_shaper_get_next_cluster(const char      *text,
+                              gint             length,
+                              gunichar        *cluster,
+                              gint            *num_chrs)
+{
+  const char *p;
+  gint n_chars = 0;
+
+  p = text;
+
+  while (p < text + length && n_chars < MAX_CLUSTER_CHRS)
+    {
+      gunichar current = g_utf8_get_char (p);
+
+      if (!ishebrew (current) ||
+         (n_chars == 0 && is_char_class(current, ~(NoDefine|SpacingLetter))))
+       {
+         /* Not a legal Hebrew cluster */
+
+         if (n_chars == 0)
+           {
+             cluster[n_chars++] = current;
+             p = g_utf8_next_char (p);
+           }
+         break;
+       }
+      else if (n_chars == 0 ||
+              is_composible (cluster[0], current))
+       {
+         cluster[n_chars++] = current;
+         p = g_utf8_next_char (p);
+       }
+      else
+       break;
+    }
+
+  *num_chrs = n_chars;
+  return p;
+}
+
+void
+hebrew_shaper_get_cluster_kerning(gunichar            *cluster,
+                                 gint                cluster_length,
+                                 PangoRectangle      ink_rect[],
+
+                                 /* input and output */
+                                 gint                width[],
+                                 gint                x_offset[],
+                                 gint                y_offset[])
+{
+  int i;
+  int base_ink_x_offset, base_ink_y_offset, base_ink_width, base_ink_height;
+  gunichar base_char = cluster[0];
+
+  x_offset[0] = 0;
+  y_offset[0] = 0;
+
+  if (cluster_length == 1)
+    {
+      /* Make lone 'vav dot' have zero width */
+      if (base_char == UNI_SHIN_DOT
+         || base_char == UNI_SIN_DOT
+         || base_char == UNI_HOLAM
+         ) {
+       x_offset[0] = -ink_rect[0].x - ink_rect[0].width;
+       width[0] = 0;
+      }
+
+      return;
+    }
+
+  base_ink_x_offset = ink_rect[0].x;
+  base_ink_y_offset = ink_rect[0].y;
+  base_ink_width = ink_rect[0].width;
+  base_ink_height = ink_rect[0].height;
+
+  /* Do heuristics */
+  for (i=1; i<cluster_length; i++)
+    {
+      int gl = cluster[i];
+      x_offset[i] = 0;
+      y_offset[i] = 0;
+
+      /* Check if it is a point */
+      if (gl < 0x5B0 || gl >= 0x05D0)
+       continue;
+
+      /* Center dot of VAV */
+      if (gl == UNI_MAPIQ && base_char == UNI_VAV)
+       {
+         x_offset[i] = base_ink_x_offset - ink_rect[i].x;
+
+         /* If VAV is a vertical bar without a roof, then we
+            need to make room for the dot by increasing the
+            cluster width. But how can I check if that is the
+            case??
+         */
+         /* This is wild, but it does the job of differentiating
+            between two M$ fonts... Base the decision on the
+            aspect ratio of the vav...
+         */
+         if (base_ink_height > base_ink_width * 3.5)
+           {
+             int j;
+             double space = 0.7;
+             double kern = 0.5;
+
+             /* Shift all characters to make place for the mapiq */
+             for (j=0; j<i; j++)
+                 x_offset[j] += ink_rect[i].width*(1+space-kern);
+
+             width[cluster_length-1] += ink_rect[i].width*(1+space-kern);
+             x_offset[i] -= ink_rect[i].width*(kern);
+           }
+       }
+
+      /* Dot over SHIN */
+      else if (gl == UNI_SHIN_DOT && base_char == UNI_SHIN)
+       {
+         x_offset[i] = base_ink_x_offset + base_ink_width
+           - ink_rect[i].x - ink_rect[i].width;
+       }
+
+      /* Dot over SIN */
+      else if (gl == UNI_SIN_DOT && base_char == UNI_SHIN)
+       {
+         x_offset[i] = base_ink_x_offset - ink_rect[i].x;
+       }
+
+      /* VOWEL DOT above to any other character than
+        SHIN or VAV should stick out a bit to the left. */
+      else if ((gl == UNI_SIN_DOT || gl == UNI_HOLAM)
+              && base_char != UNI_SHIN && base_char != UNI_VAV)
+       {
+         x_offset[i] = base_ink_x_offset -ink_rect[i].x - ink_rect[i].width * 3/ 2;
+       }
+
+      /* VOWELS under resh or vav are right aligned, if they are
+        narrower than the characters. Otherwise they are centered.
+       */
+      else if ((base_char == UNI_VAV
+               || base_char == UNI_RESH
+               || base_char == UNI_YOD
+               || base_char == UNI_DALED
+               )
+              && ((gl >= UNI_SHEVA && gl <= UNI_QAMATS) ||
+                  gl == UNI_QUBUTS)
+              && ink_rect[i].width < base_ink_width
+              )
+       {
+         x_offset[i] = base_ink_x_offset + base_ink_width
+           - ink_rect[i].x - ink_rect[i].width;
+       }
+
+      /* VOWELS under FINAL KAF are offset centered and offset in
+        y */
+      else if ((base_char == UNI_FINAL_KAF
+               )
+              && ((gl >= UNI_SHEVA && gl <= UNI_QAMATS) ||
+                  gl == UNI_QUBUTS))
+       {
+         /* x are at 1/3 to take into accoun the stem */
+         x_offset[i] = base_ink_x_offset - ink_rect[i].x
+           + base_ink_width * 1/3 - ink_rect[i].width/2;
+
+         /* Center in y */
+         y_offset[i] = base_ink_y_offset - ink_rect[i].y
+           + base_ink_height * 1/2 - ink_rect[i].height/2;
+       }
+
+
+      /* MAPIQ in PE or FINAL PE */
+      else if (gl == UNI_MAPIQ
+              && (base_char == UNI_PE || base_char == UNI_FINAL_PE))
+       {
+         x_offset[i]= base_ink_x_offset - ink_rect[i].x
+           + base_ink_width * 2/3 - ink_rect[i].width/2;
+
+         /* Another option is to offset the MAPIQ in y...
+            glyphs->glyphs[cluster_start_idx+i].geometry.y_offset
+            -= base_ink_height/5; */
+       }
+
+      /* MAPIQ in SHIN should be moved a bit to the right */
+      else if (gl == UNI_MAPIQ
+              && base_char == UNI_SHIN)
+       {
+         x_offset[i]=  base_ink_x_offset - ink_rect[i].x
+           + base_ink_width * 3/5 - ink_rect[i].width/2;
+       }
+
+      /* MAPIQ in YUD is right aligned */
+      else if (gl == UNI_MAPIQ
+              && base_char == UNI_YOD)
+       {
+         x_offset[i]=  base_ink_x_offset - ink_rect[i].x;
+
+         /* Lower left in y */
+         y_offset[i] = base_ink_y_offset - ink_rect[i].y
+           + base_ink_height - ink_rect[i].height*1.75;
+
+         if (base_ink_height > base_ink_width * 2)
+           {
+             int j;
+             double space = 0.7;
+             double kern = 0.5;
+
+             /* Shift all cluster characters to make space for mapiq */
+             for (j=0; j<i; j++)
+               x_offset[j] += ink_rect[i].width*(1+space-kern);
+
+             width[cluster_length-1] += ink_rect[i].width*(1+space-kern);
+           }
+
+       }
+
+      /* VOWEL DOT next to any other character */
+      else if ((gl == UNI_SIN_DOT || gl == UNI_HOLAM)
+              && (base_char != UNI_VAV))
+       {
+         x_offset[i] = base_ink_x_offset -ink_rect[i].x;
+       }
+
+      /* Move nikud of taf a bit ... */
+      else if (base_char == UNI_TAV && gl == UNI_MAPIQ)
+       {
+         x_offset[i] = base_ink_x_offset - ink_rect[i].x
+           + base_ink_width * 5/8 - ink_rect[i].width/2;
+       }
+
+      /* Move center dot of characters with a right stem and no
+        left stem. */
+      else if (gl == UNI_MAPIQ &&
+              (base_char == UNI_BET
+               || base_char == UNI_DALED
+               || base_char == UNI_KAF
+               || base_char == UNI_GIMMEL
+               ))
+       {
+         x_offset[i] = base_ink_x_offset - ink_rect[i].x
+           + base_ink_width * 3/8 - ink_rect[i].width/2;
+       }
+
+      /* Right align wide nikud under QOF */
+      else if (base_char == UNI_QOF &&
+              ( (gl >= UNI_HATAF_SEGOL
+                 && gl <= UNI_HATAF_QAMATZ)
+                || (gl >= UNI_TSERE
+                    && gl<= UNI_QAMATS)
+                || (gl == UNI_QUBUTS)))
+       {
+         x_offset[i] = base_ink_x_offset + base_ink_width
+           - ink_rect[i].x - ink_rect[i].width;
+       }
+
+      /* Center by default */
+      else
+       {
+         x_offset[i] = base_ink_x_offset - ink_rect[i].x
+           + base_ink_width/2 - ink_rect[i].width/2;
+       }
+    }
+
+}
+
+void
+hebrew_shaper_swap_range (PangoGlyphString *glyphs,
+                         int               start,
+                         int               end)
+{
+  int i, j;
+
+  for (i = start, j = end - 1; i < j; i++, j--)
+    {
+      PangoGlyphInfo glyph_info;
+      gint log_cluster;
+
+      glyph_info = glyphs->glyphs[i];
+      glyphs->glyphs[i] = glyphs->glyphs[j];
+      glyphs->glyphs[j] = glyph_info;
+
+      log_cluster = glyphs->log_clusters[i];
+      glyphs->log_clusters[i] = glyphs->log_clusters[j];
+      glyphs->log_clusters[j] = log_cluster;
+    }
+}
+
+void
+hebrew_shaper_bidi_reorder(PangoGlyphString *glyphs)
+{
+  int start, end;
+
+  /* Swap all glyphs */
+  hebrew_shaper_swap_range (glyphs, 0, glyphs->num_glyphs);
+
+  /* Now reorder glyphs within each cluster back to LTR */
+  for (start = 0; start < glyphs->num_glyphs;)
+    {
+      end = start;
+      while (end < glyphs->num_glyphs &&
+            glyphs->log_clusters[end] == glyphs->log_clusters[start])
+       end++;
+
+      hebrew_shaper_swap_range (glyphs, start, end);
+      start = end;
+    }
+}
diff --git a/modules/hebrew/hebrew-shaper.h b/modules/hebrew/hebrew-shaper.h
new file mode 100755 (executable)
index 0000000..2460343
--- /dev/null
@@ -0,0 +1,50 @@
+/* Pango
+ * hebrew-shaper.h: Hebrew shaper internal functions
+ *
+ * Copyright (c) 2001 by Sun Microsystems, Inc.
+ * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef HEBREW_SHAPER_H
+#define HEBREW_SHAPER_H
+
+const char *
+hebrew_shaper_get_next_cluster(const char      *text,
+                              gint             length,
+                              gunichar       *cluster,
+                              gint             *num_chrs);
+
+void
+hebrew_shaper_get_cluster_kerning(gunichar            *cluster,
+                                 gint                cluster_length,
+                                 PangoRectangle      ink_rect[],
+
+                                 /* input and output */
+                                 gint                width[],
+                                 gint                x_offset[],
+                                 gint                y_offset[]);
+
+void
+hebrew_shaper_swap_range (PangoGlyphString *glyphs,
+                         int               start,
+                         int               end);
+
+void
+hebrew_shaper_bidi_reorder(PangoGlyphString *glyphs);
+
+#endif
diff --git a/modules/indic/Makefile.am b/modules/indic/Makefile.am
new file mode 100755 (executable)
index 0000000..eb08cfa
--- /dev/null
@@ -0,0 +1,46 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_INDIC_FC
+noinst_LTLIBRARIES += libpango-indic-fc.la
+else
+if DYNAMIC_INDIC_FC
+module_LTLIBRARIES += pango-indic-fc.la
+endif
+endif
+endif
+
+fc_sources =                   \
+       indic-fc.c              \
+       indic-ot-class-tables.c \
+       indic-ot.c              \
+       indic-ot.h              \
+       mprefixups.c            \
+       mprefixups.h
+
+pango_indic_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_indic_fc_la_LIBADD = $(pangoft2libs)
+pango_indic_fc_la_SOURCES = $(fc_sources)
+libpango_indic_fc_la_SOURCES = $(fc_sources)
+libpango_indic_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_indic_fc
+
+
+if INCLUDE_INDIC_LANG
+noinst_LTLIBRARIES += libpango-indic-lang.la
+else
+if DYNAMIC_INDIC_LANG
+module_LTLIBRARIES += pango-indic-lang.la
+endif
+endif
+
+lang_sources =         \
+       indic-lang.c
+
+pango_indic_lang_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_indic_lang_la_LIBADD = $(pangolibs)
+pango_indic_lang_la_SOURCES = $(lang_sources)
+libpango_indic_lang_la_SOURCES = $(lang_sources)
+libpango_indic_lang_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_indic_lang
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/indic/Makefile.in b/modules/indic/Makefile.in
new file mode 100644 (file)
index 0000000..c7f4232
--- /dev/null
@@ -0,0 +1,784 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_INDIC_FC_TRUE@am__append_2 = libpango-indic-fc.la
+@DYNAMIC_INDIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_INDIC_FC_FALSE@am__append_3 = pango-indic-fc.la
+@INCLUDE_INDIC_LANG_TRUE@am__append_4 = libpango-indic-lang.la
+@DYNAMIC_INDIC_LANG_TRUE@@INCLUDE_INDIC_LANG_FALSE@am__append_5 = pango-indic-lang.la
+subdir = modules/indic
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_indic_fc_la_LIBADD =
+am__objects_1 = libpango_indic_fc_la-indic-fc.lo \
+       libpango_indic_fc_la-indic-ot-class-tables.lo \
+       libpango_indic_fc_la-indic-ot.lo \
+       libpango_indic_fc_la-mprefixups.lo
+am_libpango_indic_fc_la_OBJECTS = $(am__objects_1)
+libpango_indic_fc_la_OBJECTS = $(am_libpango_indic_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_INDIC_FC_TRUE@am_libpango_indic_fc_la_rpath =
+libpango_indic_lang_la_LIBADD =
+am__objects_2 = libpango_indic_lang_la-indic-lang.lo
+am_libpango_indic_lang_la_OBJECTS = $(am__objects_2)
+libpango_indic_lang_la_OBJECTS = $(am_libpango_indic_lang_la_OBJECTS)
+@INCLUDE_INDIC_LANG_TRUE@am_libpango_indic_lang_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_indic_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_3 = indic-fc.lo indic-ot-class-tables.lo indic-ot.lo \
+       mprefixups.lo
+am_pango_indic_fc_la_OBJECTS = $(am__objects_3)
+pango_indic_fc_la_OBJECTS = $(am_pango_indic_fc_la_OBJECTS)
+@DYNAMIC_INDIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_INDIC_FC_FALSE@am_pango_indic_fc_la_rpath = -rpath \
+@DYNAMIC_INDIC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_INDIC_FC_FALSE@    $(moduledir)
+pango_indic_lang_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am__objects_4 = indic-lang.lo
+am_pango_indic_lang_la_OBJECTS = $(am__objects_4)
+pango_indic_lang_la_OBJECTS = $(am_pango_indic_lang_la_OBJECTS)
+@DYNAMIC_INDIC_LANG_TRUE@@INCLUDE_INDIC_LANG_FALSE@am_pango_indic_lang_la_rpath =  \
+@DYNAMIC_INDIC_LANG_TRUE@@INCLUDE_INDIC_LANG_FALSE@    -rpath \
+@DYNAMIC_INDIC_LANG_TRUE@@INCLUDE_INDIC_LANG_FALSE@    $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_indic_fc_la_SOURCES) \
+       $(libpango_indic_lang_la_SOURCES) $(pango_indic_fc_la_SOURCES) \
+       $(pango_indic_lang_la_SOURCES)
+DIST_SOURCES = $(libpango_indic_fc_la_SOURCES) \
+       $(libpango_indic_lang_la_SOURCES) $(pango_indic_fc_la_SOURCES) \
+       $(pango_indic_lang_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3) $(am__append_5)
+noinst_LTLIBRARIES = $(am__append_2) $(am__append_4)
+fc_sources = \
+       indic-fc.c              \
+       indic-ot-class-tables.c \
+       indic-ot.c              \
+       indic-ot.h              \
+       mprefixups.c            \
+       mprefixups.h
+
+pango_indic_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_indic_fc_la_LIBADD = $(pangoft2libs)
+pango_indic_fc_la_SOURCES = $(fc_sources)
+libpango_indic_fc_la_SOURCES = $(fc_sources)
+libpango_indic_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_indic_fc
+lang_sources = \
+       indic-lang.c
+
+pango_indic_lang_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_indic_lang_la_LIBADD = $(pangolibs)
+pango_indic_lang_la_SOURCES = $(lang_sources)
+libpango_indic_lang_la_SOURCES = $(lang_sources)
+libpango_indic_lang_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_indic_lang
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/indic/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/indic/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-indic-fc.la: $(libpango_indic_fc_la_OBJECTS) $(libpango_indic_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_indic_fc_la_rpath) $(libpango_indic_fc_la_LDFLAGS) $(libpango_indic_fc_la_OBJECTS) $(libpango_indic_fc_la_LIBADD) $(LIBS)
+libpango-indic-lang.la: $(libpango_indic_lang_la_OBJECTS) $(libpango_indic_lang_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_indic_lang_la_rpath) $(libpango_indic_lang_la_LDFLAGS) $(libpango_indic_lang_la_OBJECTS) $(libpango_indic_lang_la_LIBADD) $(LIBS)
+pango-indic-fc.la: $(pango_indic_fc_la_OBJECTS) $(pango_indic_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_indic_fc_la_rpath) $(pango_indic_fc_la_LDFLAGS) $(pango_indic_fc_la_OBJECTS) $(pango_indic_fc_la_LIBADD) $(LIBS)
+pango-indic-lang.la: $(pango_indic_lang_la_OBJECTS) $(pango_indic_lang_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_indic_lang_la_rpath) $(pango_indic_lang_la_LDFLAGS) $(pango_indic_lang_la_OBJECTS) $(pango_indic_lang_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indic-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indic-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indic-ot-class-tables.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indic-ot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_indic_fc_la-indic-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_indic_fc_la-indic-ot-class-tables.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_indic_fc_la-indic-ot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_indic_fc_la-mprefixups.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_indic_lang_la-indic-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mprefixups.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_indic_fc_la-indic-fc.lo: indic-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_indic_fc_la-indic-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_indic_fc_la-indic-fc.Tpo" -c -o libpango_indic_fc_la-indic-fc.lo `test -f 'indic-fc.c' || echo '$(srcdir)/'`indic-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_indic_fc_la-indic-fc.Tpo" "$(DEPDIR)/libpango_indic_fc_la-indic-fc.Plo"; else rm -f "$(DEPDIR)/libpango_indic_fc_la-indic-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='indic-fc.c' object='libpango_indic_fc_la-indic-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_indic_fc_la-indic-fc.lo `test -f 'indic-fc.c' || echo '$(srcdir)/'`indic-fc.c
+
+libpango_indic_fc_la-indic-ot-class-tables.lo: indic-ot-class-tables.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_indic_fc_la-indic-ot-class-tables.lo -MD -MP -MF "$(DEPDIR)/libpango_indic_fc_la-indic-ot-class-tables.Tpo" -c -o libpango_indic_fc_la-indic-ot-class-tables.lo `test -f 'indic-ot-class-tables.c' || echo '$(srcdir)/'`indic-ot-class-tables.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_indic_fc_la-indic-ot-class-tables.Tpo" "$(DEPDIR)/libpango_indic_fc_la-indic-ot-class-tables.Plo"; else rm -f "$(DEPDIR)/libpango_indic_fc_la-indic-ot-class-tables.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='indic-ot-class-tables.c' object='libpango_indic_fc_la-indic-ot-class-tables.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_indic_fc_la-indic-ot-class-tables.lo `test -f 'indic-ot-class-tables.c' || echo '$(srcdir)/'`indic-ot-class-tables.c
+
+libpango_indic_fc_la-indic-ot.lo: indic-ot.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_indic_fc_la-indic-ot.lo -MD -MP -MF "$(DEPDIR)/libpango_indic_fc_la-indic-ot.Tpo" -c -o libpango_indic_fc_la-indic-ot.lo `test -f 'indic-ot.c' || echo '$(srcdir)/'`indic-ot.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_indic_fc_la-indic-ot.Tpo" "$(DEPDIR)/libpango_indic_fc_la-indic-ot.Plo"; else rm -f "$(DEPDIR)/libpango_indic_fc_la-indic-ot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='indic-ot.c' object='libpango_indic_fc_la-indic-ot.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_indic_fc_la-indic-ot.lo `test -f 'indic-ot.c' || echo '$(srcdir)/'`indic-ot.c
+
+libpango_indic_fc_la-mprefixups.lo: mprefixups.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -MT libpango_indic_fc_la-mprefixups.lo -MD -MP -MF "$(DEPDIR)/libpango_indic_fc_la-mprefixups.Tpo" -c -o libpango_indic_fc_la-mprefixups.lo `test -f 'mprefixups.c' || echo '$(srcdir)/'`mprefixups.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_indic_fc_la-mprefixups.Tpo" "$(DEPDIR)/libpango_indic_fc_la-mprefixups.Plo"; else rm -f "$(DEPDIR)/libpango_indic_fc_la-mprefixups.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mprefixups.c' object='libpango_indic_fc_la-mprefixups.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_indic_fc_la-mprefixups.lo `test -f 'mprefixups.c' || echo '$(srcdir)/'`mprefixups.c
+
+libpango_indic_lang_la-indic-lang.lo: indic-lang.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_lang_la_CFLAGS) $(CFLAGS) -MT libpango_indic_lang_la-indic-lang.lo -MD -MP -MF "$(DEPDIR)/libpango_indic_lang_la-indic-lang.Tpo" -c -o libpango_indic_lang_la-indic-lang.lo `test -f 'indic-lang.c' || echo '$(srcdir)/'`indic-lang.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_indic_lang_la-indic-lang.Tpo" "$(DEPDIR)/libpango_indic_lang_la-indic-lang.Plo"; else rm -f "$(DEPDIR)/libpango_indic_lang_la-indic-lang.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='indic-lang.c' object='libpango_indic_lang_la-indic-lang.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_indic_lang_la_CFLAGS) $(CFLAGS) -c -o libpango_indic_lang_la-indic-lang.lo `test -f 'indic-lang.c' || echo '$(srcdir)/'`indic-lang.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/indic/indic-fc.c b/modules/indic/indic-fc.c
new file mode 100755 (executable)
index 0000000..3a232be
--- /dev/null
@@ -0,0 +1,348 @@
+/* Pango
+ * indic-xft.c:
+ *
+ * Copyright (C) 2001, 2002 IBM Corporation
+ * Author: Eric Mader <mader@jtcsv.com>
+ * Based on arabic-xft.c by Owen Taylor <otaylor@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "indic-ot.h"
+
+#include "pango-engine.h"
+#include "pango-ot.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+
+typedef struct _PangoIndicInfo PangoIndicInfo;
+
+typedef struct _IndicEngineFc IndicEngineFc;
+typedef PangoEngineShapeClass IndicEngineFcClass ; /* No extra fields needed */
+
+struct _IndicEngineFc
+{
+  PangoEngineShape shapeEngine;
+  const IndicOTClassTable *classTable;
+};
+
+#define ENGINE_SUFFIX "ScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+#define INDIC_ENGINE_INFO(script) {#script ENGINE_SUFFIX, PANGO_ENGINE_TYPE_SHAPE, RENDER_TYPE, script##_scripts, G_N_ELEMENTS(script##_scripts)}
+
+#define INDIC_OT_CLASS_TABLE(script) &script##_class_table
+
+static PangoEngineScriptInfo deva_scripts[] = {
+  { PANGO_SCRIPT_DEVANAGARI, "*" }
+};
+
+static PangoEngineScriptInfo beng_scripts[] = {
+  {PANGO_SCRIPT_BENGALI, "*" }
+};
+
+static PangoEngineScriptInfo guru_scripts[] = {
+  { PANGO_SCRIPT_GURMUKHI, "*" }
+};
+
+static PangoEngineScriptInfo gujr_scripts[] = {
+  { PANGO_SCRIPT_GUJARATI, "*" }
+};
+
+static PangoEngineScriptInfo orya_scripts[] = {
+  { PANGO_SCRIPT_ORIYA, "*" }
+};
+
+static PangoEngineScriptInfo taml_scripts[] = {
+  { PANGO_SCRIPT_TAMIL, "*" }
+};
+
+static PangoEngineScriptInfo telu_scripts[] = {
+  { PANGO_SCRIPT_TELUGU, "*" }
+};
+
+static PangoEngineScriptInfo knda_scripts[] = {
+  { PANGO_SCRIPT_KANNADA, "*" }
+};
+
+static PangoEngineScriptInfo mlym_scripts[] = {
+  { PANGO_SCRIPT_MALAYALAM, "*" }
+};
+
+static PangoEngineScriptInfo sinh_scripts[] = {
+  { PANGO_SCRIPT_SINHALA, "*" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  INDIC_ENGINE_INFO(deva), INDIC_ENGINE_INFO(beng), INDIC_ENGINE_INFO(guru),
+  INDIC_ENGINE_INFO(gujr), INDIC_ENGINE_INFO(orya), INDIC_ENGINE_INFO(taml),
+  INDIC_ENGINE_INFO(telu), INDIC_ENGINE_INFO(knda), INDIC_ENGINE_INFO(mlym),
+  INDIC_ENGINE_INFO(sinh)
+};
+
+/*
+ * WARNING: These entries need to be in the same order as the entries
+ * in script_engines[].
+ *
+ * FIXME: remove this requirement, either by encapsulating the order
+ * in a macro that calls a body macro that can be redefined, or by
+ * putting the pointers to the PangoEngineInfo in PangoIndicInfo...
+ */
+static const IndicOTClassTable *indic_ot_class_tables[] = {
+  INDIC_OT_CLASS_TABLE(deva), INDIC_OT_CLASS_TABLE(beng), INDIC_OT_CLASS_TABLE(guru),
+  INDIC_OT_CLASS_TABLE(gujr), INDIC_OT_CLASS_TABLE(orya), INDIC_OT_CLASS_TABLE(taml),
+  INDIC_OT_CLASS_TABLE(telu), INDIC_OT_CLASS_TABLE(knda), INDIC_OT_CLASS_TABLE(mlym),
+  INDIC_OT_CLASS_TABLE(sinh)
+};
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"init", init},
+  {"nukt", nukt},
+  {"akhn", akhn},
+  {"rphf", rphf},
+  {"blwf", blwf},
+  {"half", half},
+  {"pstf", pstf},
+  {"vatu", vatu},
+  {"pres", pres},
+  {"blws", blws},
+  {"abvs", abvs},
+  {"psts", psts},
+  {"haln", haln},
+  {"calt", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"blwm", blwm},
+  {"abvm", abvm},
+  {"dist", dist},
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+set_glyphs (PangoFont      *font,
+           const gunichar *wcs,
+           gulong         *tags,
+           glong           n_glyphs,
+           PangoOTBuffer  *buffer,
+           gboolean        process_zwj)
+{
+  gint i;
+  PangoFcFont *fc_font;
+
+  g_assert (font);
+
+  fc_font = PANGO_FC_FONT (font);
+
+  for (i = 0; i < n_glyphs; i++)
+    {
+      guint glyph;
+
+      if (pango_is_zero_width (wcs[i]) &&
+         (!process_zwj || wcs[i] != 0x200D))
+       glyph = PANGO_GLYPH_EMPTY;
+      else
+       {
+         glyph = pango_fc_font_get_glyph (fc_font, wcs[i]);
+
+         if (!glyph)
+           glyph = PANGO_GET_UNKNOWN_GLYPH ( wcs[i]);
+       }
+      pango_ot_buffer_add_glyph (buffer, glyph, tags[i], i);
+    }
+}
+
+/*
+ * FIXME: should this check for null pointers, etc.?
+ */
+static gunichar *
+expand_text(const gchar *text, glong length, glong **offsets, glong *n_chars)
+{
+  const gchar *p;
+  gunichar *wcs, *wco;
+  glong i, *oo;
+
+  *n_chars = g_utf8_strlen (text, length);
+  wcs      = g_new (gunichar, *n_chars);
+  *offsets = g_new (glong, *n_chars + 1);
+
+  p   = text;
+  wco = wcs;
+  oo  = *offsets;
+  for (i = 0; i < *n_chars; i++)
+    {
+      *wco++ = g_utf8_get_char (p);
+      *oo++  = p - text;
+
+      p = g_utf8_next_char (p);
+    }
+
+  *oo = p - text;
+
+  return wcs;
+}
+
+
+/* analysis->shape_engine has the PangoEngine... */
+static void
+indic_engine_shape (PangoEngineShape *engine,
+                   PangoFont        *font,
+                   const char       *text,
+                   gint              length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  glong i, n_chars, n_glyphs;
+  gulong *tags = NULL;
+  gunichar *wc_in = NULL, *wc_out = NULL;
+  glong *utf8_offsets = NULL;
+  glong *indices = NULL;
+  IndicEngineFc *indic_shape_engine = NULL;
+  MPreFixups *mprefixups;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  indic_shape_engine = (IndicEngineFc *) engine;
+
+  wc_in    = expand_text (text, length, &utf8_offsets, &n_chars);
+
+  n_glyphs = indic_ot_reorder (wc_in, utf8_offsets, n_chars, indic_shape_engine->classTable, NULL, NULL, NULL, NULL);
+
+  wc_out  = g_new (gunichar, n_glyphs);
+  indices = g_new (glong,    n_glyphs);
+  tags    = g_new (gulong,   n_glyphs);
+
+  n_glyphs  = indic_ot_reorder (wc_in, utf8_offsets, n_chars, indic_shape_engine->classTable, wc_out, indices, tags, &mprefixups);
+
+  pango_glyph_string_set_size (glyphs, n_glyphs);
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+
+  set_glyphs(font, wc_out, tags, n_glyphs, buffer,
+            (indic_shape_engine->classTable->scriptFlags & SF_PROCESS_ZWJ) != 0);
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  /* do gsub processing */
+  pango_ot_ruleset_substitute (ruleset, buffer);
+
+  /* Fix pre-modifiers for some scripts before base consonant */
+  if (mprefixups)
+    {
+      indic_mprefixups_apply (mprefixups, buffer);
+      indic_mprefixups_free (mprefixups);
+    }
+
+  /* do gpos processing */
+  pango_ot_ruleset_position (ruleset, buffer);
+
+  pango_ot_buffer_output (buffer, glyphs);
+
+  /* Get the right log_clusters values */
+  for (i = 0; i < glyphs->num_glyphs; i += 1)
+    glyphs->log_clusters[i] = indices[glyphs->log_clusters[i]];
+
+  pango_fc_font_unlock_face (fc_font);
+
+  pango_ot_buffer_destroy (buffer);
+  g_free (tags);
+  g_free (indices);
+  g_free (wc_out);
+  g_free (wc_in);
+  g_free (utf8_offsets);
+}
+
+static void
+indic_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = indic_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (IndicEngineFc, indic_engine_fc,
+                               indic_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  indic_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS(script_engines); i += 1)
+    {
+      if (!strcmp(id, script_engines[i].id))
+       {
+         IndicEngineFc *engine = g_object_new (indic_engine_fc_type, NULL);
+         engine->classTable = indic_ot_class_tables[i];
+
+         return (PangoEngine *)engine;
+       }
+    }
+
+  return NULL;
+}
diff --git a/modules/indic/indic-lang.c b/modules/indic/indic-lang.c
new file mode 100755 (executable)
index 0000000..a391520
--- /dev/null
@@ -0,0 +1,236 @@
+/* Pango
+ * indic-lang.c:
+ *
+ * Copyright (C) 2006 Red Hat Software
+ * Author: Akira TAGOH <tagoh@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-engine.h"
+#include "pango-break.h"
+
+typedef PangoEngineLang        IndicEngineLang;
+typedef PangoEngineLangClass   IndicEngineLangClass;
+
+#define ENGINE_SUFFIX          "IndicScriptEngineLang"
+#define RENDER_TYPE            PANGO_RENDER_TYPE_NONE
+#define INDIC_ENGINE_INFO(script)                                      \
+  {#script ENGINE_SUFFIX, PANGO_ENGINE_TYPE_LANG, RENDER_TYPE, script##_scripts, G_N_ELEMENTS(script##_scripts)}
+
+
+static PangoEngineScriptInfo deva_scripts[] = {
+  { PANGO_SCRIPT_DEVANAGARI, "*" }
+};
+
+static PangoEngineScriptInfo beng_scripts[] = {
+  { PANGO_SCRIPT_BENGALI, "*" }
+};
+
+static PangoEngineScriptInfo guru_scripts[] = {
+  { PANGO_SCRIPT_GURMUKHI, "*" }
+};
+
+static PangoEngineScriptInfo gujr_scripts[] = {
+  { PANGO_SCRIPT_GUJARATI, "*" }
+};
+
+static PangoEngineScriptInfo orya_scripts[] = {
+  { PANGO_SCRIPT_ORIYA, "*" }
+};
+
+static PangoEngineScriptInfo taml_scripts[] = {
+  { PANGO_SCRIPT_TAMIL, "*" }
+};
+
+static PangoEngineScriptInfo telu_scripts[] = {
+  { PANGO_SCRIPT_TELUGU, "*" }
+};
+
+static PangoEngineScriptInfo knda_scripts[] = {
+  { PANGO_SCRIPT_KANNADA, "*" }
+};
+
+static PangoEngineScriptInfo mlym_scripts[] = {
+  { PANGO_SCRIPT_MALAYALAM, "*" }
+};
+
+static PangoEngineScriptInfo sinh_scripts[] = {
+  { PANGO_SCRIPT_SINHALA, "*" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  INDIC_ENGINE_INFO(deva), INDIC_ENGINE_INFO(beng), INDIC_ENGINE_INFO(guru),
+  INDIC_ENGINE_INFO(gujr), INDIC_ENGINE_INFO(orya), INDIC_ENGINE_INFO(taml),
+  INDIC_ENGINE_INFO(telu), INDIC_ENGINE_INFO(knda), INDIC_ENGINE_INFO(mlym),
+  INDIC_ENGINE_INFO(sinh)
+};
+
+static void
+not_cursor_position (PangoLogAttr *attr)
+{
+  attr->is_cursor_position = FALSE;
+  attr->is_char_break = FALSE;
+  attr->is_line_break = FALSE;
+  attr->is_mandatory_break = FALSE;
+}
+
+static void
+indic_engine_break (PangoEngineLang *engine G_GNUC_UNUSED,
+                   const char      *text,
+                   int              length,
+                   PangoAnalysis   *analysis,
+                   PangoLogAttr    *attrs,
+                   int              attrs_len G_GNUC_UNUSED)
+{
+  const gchar *p, *next = NULL, *next_next;
+  gunichar prev_wc, this_wc, next_wc, next_next_wc;
+  gboolean is_conjunct = FALSE;
+  int i;
+
+  for (p = text, prev_wc = 0, i = 0;
+       p != NULL && p < (text + length);
+       p = next, prev_wc = this_wc, i++)
+    {
+      this_wc = g_utf8_get_char (p);
+      next = g_utf8_next_char (p);
+      if (next != NULL && next < (text + length))
+       {
+         next_wc = g_utf8_get_char (next);
+         next_next = g_utf8_next_char (next);
+       }
+      else
+       {
+         next_wc = 0;
+         next_next = NULL;
+       }
+      if (next_next != NULL && next_next < (text + length))
+       next_next_wc = g_utf8_get_char (next_next);
+      else
+       next_next_wc = 0;
+
+      switch (analysis->script)
+      {
+        case PANGO_SCRIPT_SINHALA:
+         /*
+          * TODO: The cursor position should be based on the state table.
+          *       This is the wrong place to be doing this.
+          */
+
+         /*
+          * The cursor should treat as a single glyph:
+          * SINHALA CONS + 0x0DCA + 0x200D + SINHALA CONS
+          * SINHALA CONS + 0x200D + 0x0DCA + SINHALA CONS
+          */
+         if ((this_wc == 0x0DCA && next_wc == 0x200D)
+             || (this_wc == 0x200D && next_wc == 0x0DCA))
+           {
+             not_cursor_position(&attrs[i]);
+             not_cursor_position(&attrs[i + 1]);
+             is_conjunct = TRUE;
+           }
+         else if (is_conjunct
+                  && (prev_wc == 0x200D || prev_wc == 0x0DCA)
+                  && this_wc >= 0x0D9A
+                  && this_wc <= 0x0DC6)
+           {
+             not_cursor_position(&attrs[i]);
+             is_conjunct = FALSE;
+           }
+         /*
+          * Consonant clusters do NOT result in implicit conjuncts
+          * in SINHALA orthography.
+          */
+         else if (!is_conjunct && prev_wc == 0x0DCA && this_wc != 0x200D)
+           {
+             attrs[i].is_cursor_position = TRUE;
+           }
+
+         break;
+
+       default:
+
+         if (prev_wc != 0 && (this_wc == 0x200D || this_wc == 0x200C))
+           {
+             not_cursor_position(&attrs[i]);
+             if (next_wc != 0)
+               {
+                 not_cursor_position(&attrs[i+1]);
+                 if ((next_next_wc != 0) &&
+                      (next_wc == 0x09CD ||    /* Bengali */
+                       next_wc == 0x0ACD ||    /* Gujarati */
+                       next_wc == 0x094D ||    /* Hindi */
+                       next_wc == 0x0CCD ||    /* Kannada */
+                       next_wc == 0x0D4D ||    /* Malayalam */
+                       next_wc == 0x0B4D ||    /* Oriya */
+                       next_wc == 0x0A4D ||    /* Punjabi */
+                       next_wc == 0x0BCD ||    /* Tamil */
+                       next_wc == 0x0C4D))     /* Telugu */
+                   {
+                     not_cursor_position(&attrs[i+2]);
+                   }
+               }
+           }
+
+         break;
+      }
+    }
+}
+
+static void
+indic_engine_lang_class_init (PangoEngineLangClass *klass)
+{
+  klass->script_break = indic_engine_break;
+}
+
+PANGO_ENGINE_LANG_DEFINE_TYPE (IndicEngineLang, indic_engine_lang,
+                              indic_engine_lang_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  indic_engine_lang_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int               *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  guint i;
+
+  for (i = 0; i < G_N_ELEMENTS(script_engines); i++)
+    {
+      if (!strcmp (id, script_engines[i].id))
+       return g_object_new (indic_engine_lang_type, NULL);
+    }
+
+  return NULL;
+}
diff --git a/modules/indic/indic-ot-class-tables.c b/modules/indic/indic-ot-class-tables.c
new file mode 100755 (executable)
index 0000000..a2dc761
--- /dev/null
@@ -0,0 +1,524 @@
+/* Pango
+ * indic-ot-class-tables.c:
+ *
+ * Copyright (C) 2001, 2002 IBM Corporation.  All Rights Reserved.
+ * Author: Eric Mader <mader@jtcsv.com>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+
+#include "config.h"
+
+#include "indic-ot.h"
+
+
+/*
+ * Split matra table indices
+ */
+#define _x1 (1 << CF_INDEX_SHIFT)
+#define _x2 (2 << CF_INDEX_SHIFT)
+#define _x3 (3 << CF_INDEX_SHIFT)
+#define _x4 (4 << CF_INDEX_SHIFT)
+#define _x5 (5 << CF_INDEX_SHIFT)
+#define _x6 (6 << CF_INDEX_SHIFT)
+#define _x7 (7 << CF_INDEX_SHIFT)
+#define _x8 (8 << CF_INDEX_SHIFT)
+#define _x9 (9 << CF_INDEX_SHIFT)
+
+/*
+ * Simple classes
+ */
+#define _xx (CC_RESERVED)
+#define _ma (CC_MODIFYING_MARK_ABOVE)
+#define _mp (CC_MODIFYING_MARK_POST)
+#define _iv (CC_INDEPENDENT_VOWEL)
+#define _ct (CC_CONSONANT | CF_CONSONANT)
+#define _cn (CC_CONSONANT_WITH_NUKTA | CF_CONSONANT)
+#define _nu (CC_NUKTA)
+#define _dv (CC_DEPENDENT_VOWEL)
+#define _dl (_dv | CF_MATRA_PRE)
+#define _db (_dv | CF_MATRA_BELOW)
+#define _da (_dv | CF_MATRA_ABOVE)
+#define _dr (_dv | CF_MATRA_POST)
+#define _lm (_dv | CF_LENGTH_MARK)
+#define _vr (CC_VIRAMA)
+#define _al (CC_AL_LAKUNA)
+
+/*
+ * Split matras
+ */
+#define _s1 (_dv | _x1)
+#define _s2 (_dv | _x2)
+#define _s3 (_dv | _x3)
+#define _s4 (_dv | _x4)
+#define _s5 (_dv | _x5)
+#define _s6 (_dv | _x6)
+#define _s7 (_dv | _x7)
+#define _s8 (_dv | _x8)
+#define _s9 (_dv | _x9)
+
+/*
+ * consonants with special forms
+ * NOTE: this assumes that no consonants with nukta have
+ * special forms... (Bengali RA?)
+ */
+#define _bb (_ct | CF_BELOW_BASE)
+#define _pb (_ct | CF_POST_BASE)
+#define _vt (_bb | CF_VATTU)
+#define _rv (_vt | CF_REPH)
+#define _rp (_pb | CF_REPH)
+#define _rb (_bb | CF_REPH)
+
+
+/*
+ * Character class tables
+ */
+static const IndicOTCharClass devaCharClasses[] =
+{
+    _xx, _ma, _ma, _mp, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, /* 0900 - 090F */
+    _iv, _iv, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0910 - 091F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _ct, /* 0920 - 092F */
+    _rv, _cn, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, /* 0930 - 093F */
+    _dr, _db, _db, _db, _db, _da, _da, _da, _da, _dr, _dr, _dr, _dr, _vr, _xx, _xx, /* 0940 - 094F */
+    _xx, _xx, _db, _da, _da, _xx, _xx, _xx, _cn, _cn, _cn, _cn, _cn, _cn, _cn, _cn, /* 0950 - 095F */
+    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0960 - 096F */
+    _xx, _xx, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct  /* 0970 - 097F */
+};
+
+/* As a hack, BENGALI LETTER A (U+0985) and BENGALI LETTER E (U+098F)
+ * are marked as consonants below; this gives approximately the
+ * right behavior for the sequences "a halant ya aa" and
+ * "e halant ya aa".
+ */
+static const IndicOTCharClass bengCharClasses[] =
+{
+    _xx, _ma, _mp, _mp, _xx, _ct, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _ct, /* 0980 - 098F */
+    _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0990 - 099F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _bb, _ct, _ct, _pb, /* 09A0 - 09AF */
+    _rv, _xx, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, /* 09B0 - 09BF */
+    _dr, _db, _db, _db, _db, _xx, _xx, _dl, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, /* 09C0 - 09CF */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, /* 09D0 - 09DF */
+    _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 09E0 - 09EF */
+    _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx                           /* 09F0 - 09FA */
+};
+
+static const IndicOTCharClass guruCharClasses[] =
+{
+    _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _xx, _iv, /* 0A00 - 0A0F */
+    _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0A10 - 0A1F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _bb, /* 0A20 - 0A2F */
+    _vt, _xx, _ct, _cn, _xx, _bb, _cn, _xx, _ct, _bb, _xx, _xx, _nu, _xx, _dr, _dl, /* 0A30 - 0A3F */
+    _dr, _db, _db, _xx, _xx, _xx, _xx, _da, _da, _xx, _xx, _da, _da, _vr, _xx, _xx, /* 0A40 - 0A4F */
+    _xx, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _cn, _cn, _cn, _ct, _xx, _cn, _xx, /* 0A50 - 0A5F */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0A60 - 0A6F */
+    _ma, _ma, _ct, _ct, _xx, _db                                                    /* 0A70 - 0A75 */
+};
+
+static const IndicOTCharClass gujrCharClasses[] =
+{
+    _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _xx, _iv, /* 0A80 - 0A8F */
+    _iv, _iv, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0A90 - 0A9F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, /* 0AA0 - 0AAF */
+    _rv, _xx, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, /* 0AB0 - 0ABF */
+    _dr, _db, _db, _db, _db, _da, _xx, _da, _da, _dr, _xx, _dr, _dr, _vr, _xx, _xx, /* 0AC0 - 0ACF */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0AD0 - 0ADF */
+    _iv, _xx, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  /* 0AE0 - 0AEF */
+};
+
+static const IndicOTCharClass oryaCharClasses[] =
+{
+    _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
+    _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
+    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
+    _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
+    _dr, _db, _db, _db, _db, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
+    _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
+    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
+    _xx, _bb                                                                        /* 0B70 - 0B71 */
+};
+
+static const IndicOTCharClass tamlCharClasses[] =
+{
+    _xx, _xx, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, /* 0B80 - 0B8F */
+    _iv, _xx, _iv, _iv, _iv, _ct, _xx, _xx, _xx, _ct, _ct, _xx, _ct, _xx, _ct, _ct, /* 0B90 - 0B9F */
+    _xx, _xx, _xx, _ct, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _ct, _ct, /* 0BA0 - 0BAF */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _dr, _dr, /* 0BB0 - 0BBF */
+    _da, _dr, _dr, _xx, _xx, _xx, _dl, _dl, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, /* 0BC0 - 0BCF */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _dr, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0BD0 - 0BDF */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0BE0 - 0BEF */
+    _xx, _xx, _xx                                                                   /* 0BF0 - 0BF2 */
+};
+
+/* FIXME: Should some of the bb's be pb's? (KA, NA, MA, YA, VA, etc. (approx 13)) */
+static const IndicOTCharClass teluCharClasses[] =
+{
+    _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, /* 0C00 - 0C0F */
+    _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, /* 0C10 - 0C1F */
+    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, /* 0C20 - 0C2F */
+    _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, /* 0C30 - 0C3F */
+    _da, _dr, _dr, _dr, _dr, _xx, _da, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, /* 0C40 - 0C4F */
+    _xx, _xx, _xx, _xx, _xx, _da, _db, _xx, _bb, _bb, _xx, _xx, _xx, _xx, _xx, _xx, /* 0C50 - 0C5F */
+    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0C60 - 0C6F */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  /* 0C70 - 0C7F */
+};
+
+/* U+CC3 and U+CC4 are _lm here not _dr since the Kannada rendering
+ * rules want them below and to the right of the entire cluster. They
+ * aren't, strictly speaking, length marks, however.
+ *
+ * There's some information about this in:
+ *
+ *  http://brahmi.sourceforge.net/docs/KannadaComputing.html
+ */
+static const IndicOTCharClass kndaCharClasses[] =
+{
+    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, /* 0C80 - 0C8F */
+    _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, /* 0C90 - 0C9F */
+    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, /* 0CA0 - 0CAF */
+    _rb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0CB0 - 0CBF */
+    _s1, _dr, _dr, _lm, _lm, _xx, _da, _s2, _s3, _xx, _s4, _s5, _da, _vr, _xx, _xx, /* 0CC0 - 0CCF */
+    _xx, _xx, _xx, _xx, _xx, _lm, _lm, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _ct, _xx, /* 0CD0 - 0CDF */
+    _iv, _iv, _lm, _lm, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  /* 0CE0 - 0CEF */
+};
+
+/*
+ * FIXME: this is correct for old-style Malayalam (MAL) but not for reformed Malayalam (MLR)
+ * FIXME: should there be a REPH for old-style Malayalam?
+ */
+static const IndicOTCharClass mlymCharClasses[] =
+{
+    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, /* 0D00 - 0D0F */
+    _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0D10 - 0D1F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, /* 0D20 - 0D2F */
+    _cn, _cn, _ct, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _dr, _dr, /* 0D30 - 0D3F */
+    _dr, _dr, _dr, _dr, _dr, _xx, _dl, _dl, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, /* 0D40 - 0D4F */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _dr, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0D50 - 0D5F */
+    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0D60 - 0D6F */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  /* 0D70 - 0D7F */
+};
+
+static const IndicOTCharClass sinhCharClasses[] =
+{
+    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, /* 0D80 - 0D8F */
+    _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, /* 0D90 - 0D9F */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, /* 0DA0 - 0DAF */
+    _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, /* 0DB0 - 0DBF */
+    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _al, _xx, _xx, _xx, _xx, _dr, /* 0DC0 - 0DCF */
+    _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, /* 0DD0 - 0DDF */
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0DE0 - 0DEF */
+    _xx, _xx, _dr, _dr, _xx                                                         /* 0DF0 - 0DF4 */
+};
+
+
+/*
+ * Split matra tables
+ */
+static const IndicOTSplitMatra bengSplitTable[] = {{0x09C7, 0x09BE}, {0x09C7, 0x09D7}};
+
+static const IndicOTSplitMatra oryaSplitTable[] = {{0x0B47, 0x0B56}, {0x0B47, 0x0B3E}, {0x0B47, 0x0B57}};
+
+static const IndicOTSplitMatra tamlSplitTable[] = {{0x0BC6, 0x0BBE}, {0x0BC7, 0x0BBE}, {0x0BC6, 0x0BD7}};
+
+static const IndicOTSplitMatra teluSplitTable[] = {{0x0C46, 0x0C56}};
+
+static const IndicOTSplitMatra kndaSplitTable[] = {{0x0CBF, 0x0CD5}, {0x0CC6, 0x0CD5}, {0x0CC6, 0x0CD6}, {0x0CC6, 0x0CC2},
+                                     {0x0CC6, 0x0CC2, 0x0CD5}};
+
+static const IndicOTSplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}};
+
+static const IndicOTSplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF, 0x0DCA},
+                                                  {0x0DD9, 0x0DDF} };
+
+
+/*
+ * Script Flags
+ */
+
+/*
+ * FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil
+ * FIXME: reformed Malayalam needs to reorder VATTU to before base glyph...
+ * FIXME: eyelash RA only for Devanagari??
+ */
+#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT)
+#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT)
+#define GURU_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
+#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
+#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT)
+#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT)
+#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
+#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | 3)
+#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_PROCESS_ZWJ)
+#define SINH_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_PROCESS_ZWJ)
+
+/*
+ * Indic Class Tables
+ */
+/* Add a little macro to compute lastChar based on size of the charClasses * table */
+#define INDIC_OT_CLASS_TABLE_DEFINE(name, firstChar, worstCaseExpansion, scriptFlags, charClasses, splitMatraTable) \
+  const IndicOTClassTable name = {firstChar, firstChar + G_N_ELEMENTS (charClasses) - 1, \
+                                 worstCaseExpansion, scriptFlags, charClasses, splitMatraTable}
+INDIC_OT_CLASS_TABLE_DEFINE (deva_class_table, 0x0900, 2, DEVA_SCRIPT_FLAGS, devaCharClasses, NULL);
+INDIC_OT_CLASS_TABLE_DEFINE (beng_class_table, 0x0980, 3, BENG_SCRIPT_FLAGS, bengCharClasses, bengSplitTable);
+INDIC_OT_CLASS_TABLE_DEFINE (guru_class_table, 0x0A00, 2, GURU_SCRIPT_FLAGS, guruCharClasses, NULL);
+INDIC_OT_CLASS_TABLE_DEFINE (gujr_class_table, 0x0A80, 2, GUJR_SCRIPT_FLAGS, gujrCharClasses, NULL);
+INDIC_OT_CLASS_TABLE_DEFINE (orya_class_table, 0x0B00, 3, ORYA_SCRIPT_FLAGS, oryaCharClasses, oryaSplitTable);
+INDIC_OT_CLASS_TABLE_DEFINE (taml_class_table, 0x0B80, 3, TAML_SCRIPT_FLAGS, tamlCharClasses, tamlSplitTable);
+INDIC_OT_CLASS_TABLE_DEFINE (telu_class_table, 0x0C00, 3, TELU_SCRIPT_FLAGS, teluCharClasses, teluSplitTable);
+INDIC_OT_CLASS_TABLE_DEFINE (knda_class_table, 0x0C80, 4, KNDA_SCRIPT_FLAGS, kndaCharClasses, kndaSplitTable);
+INDIC_OT_CLASS_TABLE_DEFINE (mlym_class_table, 0x0D00, 3, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable);
+INDIC_OT_CLASS_TABLE_DEFINE (sinh_class_table, 0x0D80, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable);
+
+const IndicOTSplitMatra *indic_ot_get_split_matra(const IndicOTClassTable *class_table, IndicOTCharClass char_class)
+{
+    gint32 index = (char_class & CF_INDEX_MASK) >> CF_INDEX_SHIFT;
+
+    return &class_table->splitMatraTable[index - 1];
+}
+
+gboolean indic_ot_is_vm_above(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_VM_ABOVE(char_class);
+}
+
+gboolean indic_ot_is_vm_post(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_VM_POST(char_class);
+}
+
+gboolean indic_ot_is_consonant(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_CONSONANT(char_class);
+}
+
+gboolean indic_ot_is_reph(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_REPH(char_class);
+}
+
+gboolean indic_ot_is_virama(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return (IS_VIRAMA(char_class) || IS_AL_LAKUNA(char_class));
+}
+
+gboolean indic_ot_is_al_lakuna(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_AL_LAKUNA(char_class);
+}
+
+gboolean indic_ot_is_nukta(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_NUKTA(char_class);
+}
+
+gboolean indic_ot_is_vattu(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_VATTU(char_class);
+}
+
+gboolean indic_ot_is_matra(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_MATRA(char_class);
+}
+
+gboolean indic_ot_is_split_matra(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_SPLIT_MATRA(char_class);
+}
+
+gboolean indic_ot_is_m_pre(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_M_PRE(char_class);
+}
+
+gboolean indic_ot_is_m_below(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_M_BELOW(char_class);
+}
+
+gboolean indic_ot_is_m_above(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_M_ABOVE(char_class);
+}
+
+gboolean indic_ot_is_m_post(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_M_POST(char_class);
+}
+
+gboolean indic_ot_is_length_mark(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return IS_LENGTH_MARK(char_class);
+}
+
+gboolean indic_ot_has_post_or_below_base_form(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return HAS_POST_OR_BELOW_BASE_FORM(char_class);
+}
+
+gboolean indic_ot_has_post_base_form(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return HAS_POST_BASE_FORM(char_class);
+}
+
+gboolean indic_ot_has_below_base_form(const IndicOTClassTable *class_table, gunichar ch)
+{
+  IndicOTCharClass char_class = indic_ot_get_char_class(class_table, ch);
+
+  return HAS_BELOW_BASE_FORM(char_class);
+}
+
+IndicOTCharClass indic_ot_get_char_class(const IndicOTClassTable *class_table, gunichar ch)
+{
+    if (ch == C_SIGN_ZWJ) {
+       return CF_CONSONANT | CC_ZERO_WIDTH_MARK;
+    }
+
+    if (ch == C_SIGN_ZWNJ) {
+       return CC_ZERO_WIDTH_MARK;
+    }
+
+    if (ch < class_table->firstChar || ch > class_table->lastChar) {
+       return CC_RESERVED;
+    }
+
+    return class_table->charClasses[ch - class_table->firstChar];
+}
+
+static const gint8 stateTable[][CC_COUNT] =
+{
+/*   xx  ma  mp  iv  ct  cn  nu  dv  vr  zw  al */
+    { 1,  1,  1,  5,  3,  2,  1,  1,  1,  1,  1},
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+    {-1,  6,  1, -1, -1, -1, -1,  5,  4, -1, -1},
+    {-1,  6,  1, -1, -1, -1,  2,  5,  4, 10,  9},
+    {-1, -1, -1, -1,  3,  2, -1, -1, -1,  8, -1},
+    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1},
+    {-1,  7,  1, -1, -1, -1, -1, -1, -1, -1, -1},
+    {-1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1},
+    {-1, -1, -1, -1,  3,  2, -1, -1, -1, -1, -1},
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1,  8, -1},
+    {-1, -1, -1, -1, -1, -1, -1, -1,  8, -1,  8}
+
+};
+
+glong indic_ot_find_syllable(const IndicOTClassTable *class_table, const gunichar *chars, glong prev, glong char_count)
+{
+    glong cursor = prev;
+    gint8 state = 0;
+
+    while (cursor < char_count) {
+       IndicOTCharClass char_class = indic_ot_get_char_class(class_table, chars[cursor]);
+
+       state = stateTable[state][char_class & CF_CLASS_MASK];
+
+       /*for the components of split matra*/
+       if ((char_count >= cursor + 3) &&
+           (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DCF && chars[cursor + 2] == 0x0DCA)) {  /*for 3 split matra of Sinhala*/
+           return cursor + 3;
+       }
+       else if ((char_count >= cursor + 3) &&
+                (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CC2 && chars[cursor + 2] == 0x0CD5)) {  /*for 3 split matra of Kannada*/
+           return cursor + 3;
+       }
+       /*for 2 split matra*/
+       else if (char_count >= cursor + 2) {
+               /*for Bengali*/
+           if ((chars[cursor] == 0x09C7 && chars[cursor + 1] == 0x09BE) ||
+               (chars[cursor] == 0x09C7 && chars[cursor + 1] == 0x09D7) ||
+               /*for Oriya*/
+               (chars[cursor] == 0x0B47 && chars[cursor + 1] == 0x0B3E) ||
+               (chars[cursor] == 0x0B47 && chars[cursor + 1] == 0x0B56) ||
+               (chars[cursor] == 0x0B47 && chars[cursor + 1] == 0x0B57) ||
+               /*for Tamil*/
+               (chars[cursor] == 0x0BC6 && chars[cursor + 1] == 0x0BBE) ||
+               (chars[cursor] == 0x0BC6 && chars[cursor + 1] == 0x0BD7) ||
+               (chars[cursor] == 0x0BC7 && chars[cursor + 1] == 0x0BBE) ||
+               /*for Malayalam*/
+               (chars[cursor] == 0x0D46 && chars[cursor + 1] == 0x0D3E) ||
+               (chars[cursor] == 0x0D46 && chars[cursor + 1] == 0x0D57) ||
+               (chars[cursor] == 0x0D47 && chars[cursor + 1] == 0x0D3E) ||
+               /*for Sinhala*/
+               (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DCA) ||
+               (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DCF) ||
+               (chars[cursor] == 0x0DD9 && chars[cursor + 1] == 0x0DDF) ||
+               (chars[cursor] == 0x0DDC && chars[cursor + 1] == 0x0DCA) ||
+               /*for Telugu*/
+               (chars[cursor] == 0x0C46 && chars[cursor + 1] == 0x0C56) ||
+               /*for Kannada*/
+               (chars[cursor] == 0x0CBF && chars[cursor + 1] == 0x0CD5) ||
+               (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CD5) ||
+               (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CD6) ||
+               (chars[cursor] == 0x0CC6 && chars[cursor + 1] == 0x0CC2) ||
+               (chars[cursor] == 0x0CCA && chars[cursor + 1] == 0x0CD5))
+                   return cursor + 2;
+       }
+
+       if (state < 0) {
+           break;
+       }
+
+       cursor += 1;
+    }
+
+    return cursor;
+}
+
diff --git a/modules/indic/indic-ot.c b/modules/indic/indic-ot.c
new file mode 100755 (executable)
index 0000000..7a72d34
--- /dev/null
@@ -0,0 +1,521 @@
+/* Pango
+ * indic-ot.c:
+ *
+ * Copyright (C) 2001, 2002 IBM Corporation. All Rights Reserved.
+ * Author: Eric Mader <mader@jtcsv.com>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+
+#include "config.h"
+
+#include "indic-ot.h"
+#include "mprefixups.h"
+/*
+ * FIXME: should the IndicOutput stuff be moved
+ * to a separate .h and .c file just to keep the
+ * clutter down here? (it's not really usefull
+ * anyplace else, is it?)
+ */
+struct _Output
+{
+    glong fOutIndex;
+
+    const glong   *fOriginalOffsets;
+
+    gunichar *fOutChars;
+    glong   *fCharIndices;
+    gulong  *fCharTags;
+
+    gunichar fMpre;
+    gunichar fMbelow;
+    gunichar fMabove;
+    gunichar fMpost;
+    gunichar fLengthMark;
+    gunichar fAlLakuna; /* to handle Al-Lakuna in sinhala split matras */
+    glong    fMatraIndex;
+    gulong   fMatraTags;
+    gboolean fMatraWordStart;
+    glong    fMPreOutIndex;
+
+    MPreFixups *fMPreFixups;
+};
+
+typedef struct _Output Output;
+
+static void initOutput(Output *output, const glong *originalOffsets, gunichar *outChars, glong *charIndices, gulong *charTags, MPreFixups *mpreFixups)
+{
+    output->fOriginalOffsets = originalOffsets;
+
+    output->fOutChars    = outChars;
+    output->fCharIndices = charIndices;
+    output->fCharTags    = charTags;
+
+    output->fOutIndex    = 0;
+    output->fMatraTags   = 0;
+
+    output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = output->fAlLakuna = 0;
+
+    output->fMPreOutIndex = -1;
+    output->fMPreFixups = mpreFixups;
+}
+
+static void saveMatra(Output *output, gunichar matra, IndicOTCharClass matraClass)
+{
+    /* FIXME: check if already set, or if not a matra... */
+    if (IS_M_PRE(matraClass)) {
+       output->fMpre = matra;
+    } else if (IS_M_BELOW(matraClass)) {
+       output->fMbelow = matra;
+    } else if (IS_M_ABOVE(matraClass)) {
+       output->fMabove = matra;
+    } else if (IS_M_POST(matraClass)) {
+       output->fMpost = matra;
+    } else if (IS_LENGTH_MARK(matraClass)) {
+       output->fLengthMark = matra;
+    } else if (IS_AL_LAKUNA(matraClass)) {
+       output->fAlLakuna = matra;
+    }
+}
+
+static void initMatra(Output *output, guint32 matraIndex, gulong matraTags, gboolean wordStart)
+{
+    output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = output->fAlLakuna = 0;
+    output->fMPreOutIndex = -1;
+    output->fMatraIndex = matraIndex;
+    output->fMatraTags = matraTags;
+    output->fMatraWordStart = wordStart;
+}
+
+static gboolean noteMatra(Output *output, const IndicOTClassTable *classTable, gunichar matra)
+{
+    IndicOTCharClass matraClass = indic_ot_get_char_class(classTable, matra);
+
+    if (IS_MATRA(matraClass)) {
+       if (IS_SPLIT_MATRA(matraClass)) {
+           const IndicOTSplitMatra *splitMatra = indic_ot_get_split_matra(classTable, matraClass);
+           int i;
+
+           for (i = 0; i < 3 && (*splitMatra)[i] != 0; i += 1) {
+               gunichar piece = (*splitMatra)[i];
+               IndicOTCharClass pieceClass = indic_ot_get_char_class(classTable, piece);
+
+               saveMatra(output, piece, pieceClass);
+           }
+       } else {
+           saveMatra(output, matra, matraClass);
+       }
+
+       return TRUE;
+    } else
+      return FALSE;
+}
+
+static void noteBaseConsonant(Output *output)
+{
+    if (output->fMPreFixups && output->fMPreOutIndex >= 0) {
+       indic_mprefixups_add(output->fMPreFixups, output->fOutIndex, output->fMPreOutIndex);
+    }
+}
+
+static void writeChar(Output *output, gunichar ch, guint32 charIndex, gulong charTags)
+{
+    if (output->fOutChars != NULL) {
+       output->fOutChars[output->fOutIndex]    = ch;
+       output->fCharIndices[output->fOutIndex] = output->fOriginalOffsets[charIndex];
+       output->fCharTags[output->fOutIndex]    = charTags;
+    }
+
+    output->fOutIndex += 1;
+}
+
+static void writeMpre(Output *output)
+{
+    if (output->fMpre != 0) {
+       gulong tags = output->fMatraTags;
+       if (output->fMatraWordStart)
+           tags &= ~init;
+
+       output->fMPreOutIndex = output->fOutIndex;
+       writeChar(output, output->fMpre, output->fMatraIndex, tags);
+    }
+}
+
+static void writeMbelow(Output *output)
+{
+    if (output->fMbelow != 0) {
+       writeChar(output, output->fMbelow, output->fMatraIndex, output->fMatraTags);
+    }
+}
+
+static void writeMabove(Output *output)
+{
+    if (output->fMabove != 0) {
+       writeChar(output, output->fMabove, output->fMatraIndex, output->fMatraTags);
+    }
+}
+
+static void writeMpost(Output *output)
+{
+    if (output->fMpost != 0) {
+       writeChar(output, output->fMpost, output->fMatraIndex, output->fMatraTags);
+    }
+}
+
+static void writeLengthMark(Output *output)
+{
+    if (output->fLengthMark != 0) {
+       writeChar(output, output->fLengthMark, output->fMatraIndex, output->fMatraTags);
+    }
+}
+
+static void writeAlLakuna(Output *output)
+{
+    if (output->fAlLakuna != 0) {
+       writeChar(output, output->fAlLakuna, output->fMatraIndex, output->fMatraTags);
+    }
+}
+
+static glong getOutputIndex(Output *output)
+{
+    return output->fOutIndex;
+}
+
+#define false 0
+#define true  1
+
+glong indic_ot_reorder(const gunichar *chars, const glong *utf8_offsets, glong char_count, const IndicOTClassTable *class_table, gunichar *out_chars, glong *char_indices, gulong *char_tags, MPreFixups **outMPreFixups)
+{
+    MPreFixups *mpreFixups = NULL;
+    Output output;
+    glong i, prev = 0;
+    gboolean last_in_word = FALSE;
+
+    if (outMPreFixups && (class_table->scriptFlags & SF_MPRE_FIXUP)) {
+       mpreFixups = indic_mprefixups_new (char_count);
+    }
+
+    initOutput(&output, utf8_offsets, out_chars, char_indices, char_tags, mpreFixups);
+
+    while (prev < char_count) {
+       glong syllable = indic_ot_find_syllable(class_table, chars, prev, char_count);
+       glong matra, vmabove, vmpost = syllable;
+
+       while (vmpost > prev && indic_ot_is_vm_post(class_table, chars[vmpost - 1])) {
+           vmpost -= 1;
+       }
+
+       vmabove = vmpost;
+       while (vmabove > prev && indic_ot_is_vm_above(class_table, chars[vmabove - 1])) {
+           vmabove -= 1;
+       }
+
+       matra = vmabove - 1;
+       initMatra(&output, prev, blwf_p, !last_in_word);
+       while (noteMatra(&output, class_table, chars[matra]) &&
+              matra != prev)
+           matra--;
+
+       last_in_word = TRUE;
+       switch (indic_ot_get_char_class(class_table, chars[prev]) & CF_CLASS_MASK) {
+       case CC_RESERVED:
+           last_in_word = FALSE;
+           /* Fall through */
+       case CC_INDEPENDENT_VOWEL:
+       case CC_ZERO_WIDTH_MARK:
+           for (i = prev; i < syllable; i += 1) {
+               writeChar(&output, chars[i], /*i*/ prev, blwf_p);
+           }
+
+           break;
+
+       case CC_MODIFYING_MARK_ABOVE:
+       case CC_MODIFYING_MARK_POST:
+       case CC_NUKTA:
+       case CC_VIRAMA:
+           /* patch for rendering fix for Malayalam SAMVRUTHOKARA by suresh */
+           if (chars[prev - 1] == 0x0D41) {
+                writeChar(&output, chars[prev], prev, blwf_p);
+                break;
+           }
+           /* end patch */
+
+       case CC_AL_LAKUNA:
+           writeChar(&output, C_DOTTED_CIRCLE, prev, blwf_p);
+           writeChar(&output, chars[prev], prev, blwf_p);
+           break;
+
+       case CC_DEPENDENT_VOWEL:
+           writeMpre(&output);
+           writeChar(&output, C_DOTTED_CIRCLE, prev, blwf_p);
+           writeMbelow(&output);
+           writeMabove(&output);
+           writeMpost(&output);
+           writeLengthMark(&output);
+           writeAlLakuna(&output);
+           break;
+
+       case CC_CONSONANT:
+       case CC_CONSONANT_WITH_NUKTA:
+       {
+           guint32 length = vmabove - prev;
+           glong lastConsonant = vmabove - 1;
+           glong baseLimit = prev;
+           glong baseConsonant, postBase, postBaseLimit;
+           gboolean seenVattu, seenBelowBaseForm, supressVattu;
+           glong bcSpan;
+
+           /* Check for REPH at front of syllable */
+           if (length > 2 && indic_ot_is_reph(class_table, chars[prev]) && indic_ot_is_virama(class_table, chars[prev + 1])) {
+               baseLimit += 2;
+
+               /* Check for eyelash RA, if the script supports it */
+               if ((class_table->scriptFlags & SF_EYELASH_RA) != 0 &&
+                   chars[baseLimit] == C_SIGN_ZWJ) {
+                   if (length > 3) {
+                       baseLimit += 1;
+                   } else {
+                       baseLimit -= 2;
+                   }
+               }
+           }
+
+           while (lastConsonant > baseLimit && !indic_ot_is_consonant(class_table, chars[lastConsonant])) {
+               lastConsonant -= 1;
+           }
+
+           baseConsonant = lastConsonant;
+           postBase = lastConsonant + 1;
+
+           postBaseLimit = class_table->scriptFlags & SF_POST_BASE_LIMIT_MASK;
+           seenVattu = false;
+           seenBelowBaseForm = false;
+           supressVattu = true;
+
+           while (baseConsonant > baseLimit) {
+               IndicOTCharClass charClass = indic_ot_get_char_class(class_table, chars[baseConsonant]);
+
+               if (IS_CONSONANT(charClass)) {
+                   if (postBaseLimit == 0 || seenVattu ||
+                       (baseConsonant > baseLimit && !indic_ot_is_virama(class_table, chars[baseConsonant - 1])) ||
+                       !HAS_POST_OR_BELOW_BASE_FORM(charClass)) {
+                       break;
+                   }
+
+                   seenVattu = IS_VATTU(charClass);
+
+                   if (HAS_POST_BASE_FORM(charClass)) {
+                       if (seenBelowBaseForm) {
+                           break;
+                       }
+
+                       postBase = baseConsonant;
+                   } else if (HAS_BELOW_BASE_FORM(charClass)) {
+                       seenBelowBaseForm = true;
+                   }
+
+                   postBaseLimit -= 1;
+               }
+
+               baseConsonant -= 1;
+           }
+
+           /* Write Mpre */
+           writeMpre(&output);
+
+           /* Write eyelash RA */
+           /* NOTE: baseLimit == prev + 3 iff eyelash RA present... */
+           if (baseLimit == prev + 3) {
+               writeChar(&output, chars[prev], prev, half_p);
+               writeChar(&output, chars[prev + 1], prev /*+ 1*/, half_p);
+               writeChar(&output, chars[prev + 2], prev /*+ 2*/, half_p);
+           }
+
+           /* write any pre-base consonants */
+           supressVattu = true;
+
+           for (i = baseLimit; i < baseConsonant; i += 1) {
+               gunichar ch = chars[i];
+               /* Applying blwf to the first consonant doesn't makes sense
+                * since the below-form follows the consonant that it is
+                * put under */
+               gulong tag = (i == baseLimit) ? half_p : blwf_p;
+               IndicOTCharClass charClass = indic_ot_get_char_class(class_table, ch);
+
+               if (IS_CONSONANT(charClass)) {
+                   if (IS_VATTU(charClass) && supressVattu) {
+                       tag = nukt_p;
+                   }
+                   else if ((i + 2 < baseConsonant) && (chars[i + 2] == C_SIGN_ZWNJ)) {
+                       tag = nukt_p;
+                   }
+
+                   supressVattu = IS_VATTU(charClass);
+               } else if (IS_VIRAMA(charClass) && chars[i + 1] == C_SIGN_ZWNJ)
+               {
+                   tag = nukt_p;
+               }
+
+               writeChar(&output, ch, /*i*/ prev, tag);
+           }
+
+           bcSpan = baseConsonant + 1;
+
+           if (bcSpan < vmabove && indic_ot_is_nukta(class_table, chars[bcSpan])) {
+               bcSpan += 1;
+           }
+
+           if (baseConsonant == lastConsonant && bcSpan < vmabove && indic_ot_is_virama(class_table, chars[bcSpan])) {
+               bcSpan += 1;
+
+               if (bcSpan < vmabove && chars[bcSpan] == C_SIGN_ZWNJ) {
+                   bcSpan += 1;
+               }
+           }
+
+           /* note the base consonant for post-GSUB fixups */
+           noteBaseConsonant(&output);
+
+           /* write base consonant */
+           for (i = baseConsonant; i < bcSpan; i += 1) {
+               writeChar(&output, chars[i], /*i*/ prev, nukt_p);
+           }
+
+           if ((class_table->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
+               gboolean is_for_0C48 = FALSE;
+               if (output.fOutChars != NULL) {  /*for 0x0C48 of Telugu*/
+                   int t;
+                   for (t = prev; t < syllable; t++) {
+                       if (chars[t] == 0x0C48) {
+                           writeMabove(&output);
+                           writeMbelow(&output);
+                           writeMpost(&output);
+
+                           is_for_0C48 = TRUE;
+                           break;
+                       }
+                   }
+               }
+
+               if (!is_for_0C48) {
+                   writeMbelow(&output);
+                   writeMabove(&output);
+                   writeMpost(&output);
+               }
+           }
+
+           /* write below-base consonants */
+           if (baseConsonant != lastConsonant) {
+               for (i = bcSpan + 1; i < postBase; i += 1) {
+                   writeChar(&output, chars[i], /*i*/ prev, blwf_p);
+               }
+
+               if (postBase > lastConsonant) {
+                   /* write halant that was after base consonant */
+                   writeChar(&output, chars[bcSpan], /*bcSpan*/ prev, blwf_p);
+               }
+           }
+
+           /* write Mbelow, Mabove */
+           if ((class_table->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
+               writeMbelow(&output);
+               writeMabove(&output);
+           }
+
+          if ((class_table->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
+               if (baseLimit == prev + 2) {
+                   writeChar(&output, chars[prev], prev, rphf_p);
+                   writeChar(&output, chars[prev + 1], prev /*+ 1*/, rphf_p);
+               }
+
+               /* write VMabove */
+               for (i = vmabove; i < vmpost; i += 1) {
+                   writeChar(&output, chars[i], /*i*/ prev, blwf_p);
+               }
+           }
+
+           /* write post-base consonants */
+           if (baseConsonant != lastConsonant) {
+               if (postBase <= lastConsonant) {
+                   for (i = postBase; i <= lastConsonant; i += 1) {
+                       writeChar(&output, chars[i], /*i*/ prev, pstf_p);
+                   }
+
+                   /* write halant that was after base consonant */
+                   writeChar(&output, chars[bcSpan], /*bcSpan*/ prev, blwf_p);
+               }
+
+               /* write the training halant, if there is one */
+               if (lastConsonant < matra && indic_ot_is_virama(class_table, chars[matra])) {
+                   writeChar(&output, chars[matra], /*matra*/ prev, nukt_p);
+               }
+           }
+
+           /* write Mpost */
+           if ((class_table->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
+               writeMpost(&output);
+           }
+
+           writeLengthMark(&output);
+           writeAlLakuna(&output);
+
+           /* write reph */
+           if ((class_table->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
+               if (baseLimit == prev + 2) {
+                   writeChar(&output, chars[prev], prev, rphf_p);
+                   writeChar(&output, chars[prev + 1], prev /*+ 1*/, rphf_p);
+               }
+
+               /* write VMabove */
+               for (i = vmabove; i < vmpost; i += 1) {
+                   writeChar(&output, chars[i], /*i*/ prev, blwf_p);
+               }
+           }
+
+           /* write VMpost */
+           for (i = vmpost; i < syllable; i += 1) {
+               writeChar(&output, chars[i], /*i*/ prev, blwf_p);
+           }
+
+           break;
+       }
+
+       default:
+           break;
+       }
+
+
+       prev = syllable;
+    }
+
+    if (outMPreFixups) {
+       *outMPreFixups = mpreFixups;
+    }
+
+    return getOutputIndex(&output);
+}
diff --git a/modules/indic/indic-ot.h b/modules/indic/indic-ot.h
new file mode 100755 (executable)
index 0000000..47dd39f
--- /dev/null
@@ -0,0 +1,238 @@
+/* Pango
+ * indic-ot.h:
+ *
+ * Copyright (C) 2001, 2002 IBM Corporation. All Rights Reserved.
+ * Author: Eric Mader <mader@jtcsv.com>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+
+#ifndef __INDIC_OT_H__
+#define __INDIC_OT_H__
+
+#include <pango/pango-glyph.h>
+#include <pango/pango-types.h>
+#include "mprefixups.h"
+
+G_BEGIN_DECLS
+
+#ifdef PANGO_ENABLE_ENGINE
+
+/* Characters that get refered to by name... */
+#define C_SIGN_ZWNJ     0x200C
+#define C_SIGN_ZWJ      0x200D
+#define C_DOTTED_CIRCLE 0x25CC
+
+/*
+ * The characters that a split matra splits into.
+ * Unused characters will be zero.
+ */
+typedef gunichar IndicOTSplitMatra[3];
+
+/*
+ * Character class values
+ */
+typedef enum
+{
+  CC_RESERVED,
+  CC_MODIFYING_MARK_ABOVE,
+  CC_MODIFYING_MARK_POST,
+  CC_INDEPENDENT_VOWEL,
+  CC_CONSONANT,
+  CC_CONSONANT_WITH_NUKTA,
+  CC_NUKTA,
+  CC_DEPENDENT_VOWEL,
+  CC_VIRAMA,
+  CC_ZERO_WIDTH_MARK,
+  CC_AL_LAKUNA,
+  CC_COUNT
+} IndicOTCharClassValues;
+
+/*
+ * Character class flags
+ */
+#define CF_CLASS_MASK   0x0000FFFFU
+
+#define CF_CONSONANT    0x80000000U
+
+#define CF_REPH         0x40000000U
+#define CF_VATTU        0x20000000U
+#define CF_BELOW_BASE   0x10000000U
+#define CF_POST_BASE    0x08000000U
+
+#define CF_MATRA_PRE    0x04000000U
+#define CF_MATRA_BELOW  0x02000000U
+#define CF_MATRA_ABOVE  0x01000000U
+#define CF_MATRA_POST   0x00800000U
+#define CF_LENGTH_MARK  0x00400000U
+
+#define CF_INDEX_MASK   0x000F0000U
+#define CF_INDEX_SHIFT  16
+
+/*
+ * Character class: a character class value
+ * ORed with character class flags.
+ */
+typedef glong IndicOTCharClass;
+
+/*
+ * Script flags
+ */
+#define SF_MATRAS_AFTER_BASE    0x80000000U
+#define SF_REPH_AFTER_BELOW     0x40000000U
+#define SF_EYELASH_RA           0x20000000U
+#define SF_MPRE_FIXUP           0x10000000U
+#define SF_PROCESS_ZWJ          0x08000000U
+
+#define SF_POST_BASE_LIMIT_MASK 0x0000FFFFU
+#define SF_NO_POST_BASE_LIMIT   0x00007FFFU
+
+typedef guint32 IndicOTScriptFlags;
+
+/*
+ * Bit flags for the indic feature tags
+ */
+enum indic_glyph_feature_
+{
+  nukt = 0x0001,
+  akhn = 0x0002,
+  rphf = 0x0004,
+  blwf = 0x0008,
+  half = 0x0010,
+  pstf = 0x0020,
+  vatu = 0x0040,
+  pres = 0x0080,
+  blws = 0x0100,
+  abvs = 0x0200,
+  psts = 0x0400,
+  haln = 0x0800,
+  blwm = 0x1000,
+  abvm = 0x2000,
+  dist = 0x4000,
+  junk = 0x8000,
+  init = 0x10000
+};
+
+/*
+ * Complement of the feature flags that
+ * will be assigned to specific glyphs.
+ *
+ * The names come from the ICU implementation,
+ * which listed the actual tags in an order
+ * such that tags could be assigned using the
+ * address of the first one: &tags[0], &tags[1],
+ * &tags[2], &tags[3]. The name of each set here
+ * is the name of the first tag in the ICU list.
+ */
+enum indic_glyph_property_
+{
+  rphf_p = (junk | dist | init),
+  blwf_p = (junk | dist | init | rphf),
+  half_p = (junk | dist | init | rphf | blwf),
+  pstf_p = (junk | dist | init | rphf | blwf | half),
+  nukt_p = (junk | dist | init | rphf | blwf | half | pstf)
+};
+
+/*
+ * Macros to test the charClass flags for various things.
+ */
+#define IS_VM_ABOVE(charClass) ((charClass & CF_CLASS_MASK) == CC_MODIFYING_MARK_ABOVE)
+#define IS_VM_POST(charClass) ((charClass & CF_CLASS_MASK) == CC_MODIFYING_MARK_POST)
+#define IS_CONSONANT(charClass) ((charClass & CF_CONSONANT) != 0)
+#define IS_REPH(charClass) ((charClass & CF_REPH) != 0)
+#define IS_NUKTA(charClass) ((charClass & CF_CLASS_MASK) == CC_NUKTA)
+#define IS_VIRAMA(charClass) ((charClass & CF_CLASS_MASK) == CC_VIRAMA)
+#define IS_AL_LAKUNA(charClass) ((charClass & CF_CLASS_MASK) == CC_AL_LAKUNA)
+#define IS_VATTU(charClass) ((charClass & CF_VATTU) != 0)
+#define IS_MATRA(charClass) ((charClass & CF_CLASS_MASK) == CC_DEPENDENT_VOWEL)
+#define IS_SPLIT_MATRA(charClass) ((charClass & CF_INDEX_MASK) != 0)
+#define IS_M_PRE(charClass) ((charClass & CF_MATRA_PRE) != 0)
+#define IS_M_BELOW(charClass) ((charClass & CF_MATRA_BELOW) != 0)
+#define IS_M_ABOVE(charClass) ((charClass & CF_MATRA_ABOVE) != 0)
+#define IS_M_POST(charClass) ((charClass & CF_MATRA_POST) != 0)
+#define IS_LENGTH_MARK(charClass) ((charClass & CF_LENGTH_MARK) != 0)
+#define HAS_POST_OR_BELOW_BASE_FORM(charClass) ((charClass & (CF_POST_BASE | CF_BELOW_BASE)) != 0)
+#define HAS_POST_BASE_FORM(charClass) ((charClass & CF_POST_BASE) != 0)
+#define HAS_BELOW_BASE_FORM(charClass) ((charClass & CF_BELOW_BASE) != 0)
+
+struct _IndicOTClassTable
+{
+  gunichar           firstChar;
+  gunichar           lastChar;
+  glong                      worstCaseExpansion;
+  IndicOTScriptFlags  scriptFlags;
+
+  const IndicOTCharClass  *charClasses;
+  const IndicOTSplitMatra *splitMatraTable;
+};
+
+typedef struct _IndicOTClassTable IndicOTClassTable;
+
+extern const IndicOTClassTable deva_class_table;
+extern const IndicOTClassTable beng_class_table;
+extern const IndicOTClassTable guru_class_table;
+extern const IndicOTClassTable gujr_class_table;
+extern const IndicOTClassTable orya_class_table;
+extern const IndicOTClassTable taml_class_table;
+extern const IndicOTClassTable telu_class_table;
+extern const IndicOTClassTable knda_class_table;
+extern const IndicOTClassTable mlym_class_table;
+extern const IndicOTClassTable sinh_class_table;
+
+const IndicOTSplitMatra *indic_ot_get_split_matra(const IndicOTClassTable *class_table, IndicOTCharClass char_class);
+
+IndicOTCharClass indic_ot_get_char_class(const IndicOTClassTable *class_table, gunichar ch);
+
+gboolean indic_ot_is_vm_above(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_vm_post(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_consonant(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_reph(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_virama(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_al_lakuna(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_nukta(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_vattu(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_matra(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_split_matra(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_m_pre(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_m_below(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_m_above(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_m_post(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_is_length_mark(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_has_post_or_below_base_form(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_has_post_base_form(const IndicOTClassTable *class_table, gunichar ch);
+gboolean indic_ot_has_below_base_form(const IndicOTClassTable *class_table, gunichar ch);
+
+glong indic_ot_find_syllable(const IndicOTClassTable *class_table, const gunichar *chars, glong prev, glong char_count);
+
+glong indic_ot_reorder(const gunichar *chars, const glong *utf8_offsets, glong char_count, const IndicOTClassTable *class_table, gunichar *out_chars, glong *char_indices, gulong *char_tags, MPreFixups **outMPreFixups);
+
+#endif /* PANGO_ENABLE_ENGINE */
+
+G_END_DECLS
+
+#endif /* __INDIC_OT_H__ */
diff --git a/modules/indic/mprefixups.c b/modules/indic/mprefixups.c
new file mode 100755 (executable)
index 0000000..a599e6d
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * mprefixups.h: Handle left matra placement
+ *
+ * Author: Sivaraj Doddannan
+ * Ported from IBM's ICU engine.  Original copyright:
+ * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <pango/pango-types.h>
+#include "mprefixups.h"
+#include <stdio.h>
+
+struct _FixupData
+{
+    glong fBaseIndex;
+    glong fMPreIndex;
+};
+
+MPreFixups *indic_mprefixups_new(glong char_count)
+{
+    MPreFixups *mprefixups = g_new (MPreFixups, 1);
+    mprefixups->fFixupCount = 0;
+    mprefixups->fFixupData = g_new (FixupData, char_count);
+
+    return mprefixups;
+}
+
+void indic_mprefixups_free (MPreFixups *mprefixups)
+{
+    g_free (mprefixups->fFixupData);
+    g_free (mprefixups);
+}
+
+void indic_mprefixups_add (MPreFixups *mprefixups, glong baseIndex, glong mpreIndex)
+{
+    /* NOTE: don't add the fixup data if the mpre is right
+     * before the base consonant glyph.
+     */
+    if (baseIndex - mpreIndex > 1) {
+       mprefixups->fFixupData[mprefixups->fFixupCount].fBaseIndex = baseIndex;
+       mprefixups->fFixupData[mprefixups->fFixupCount].fMPreIndex = mpreIndex;
+
+       mprefixups->fFixupCount += 1;
+    }
+}
+
+void indic_mprefixups_apply(MPreFixups *mprefixups, PangoOTBuffer *buffer)
+{
+    glong fixup;
+
+    for (fixup = 0; fixup < mprefixups->fFixupCount; fixup += 1) {
+       gulong baseIndex = mprefixups->fFixupData[fixup].fBaseIndex;
+       gulong mpreIndex = mprefixups->fFixupData[fixup].fMPreIndex;
+       glong baseGlyph = -1;
+       glong mpreGlyph = -1;
+       glong mpreLimit = -1;
+       glong mpreCount, moveCount, mpreDest;
+       glong i;
+       PangoOTGlyph *glyphs;
+       int n_glyphs;
+       PangoOTGlyph *mpreSave;
+
+       /* determine post GSUB location of baseIndex and mpreIndex */
+
+       pango_ot_buffer_get_glyphs (buffer, &glyphs, &n_glyphs);
+
+       for (i = 0; i < n_glyphs; i++) {
+           if ((baseIndex >= glyphs[i].cluster) && (baseIndex-glyphs[i].cluster) % 2 == 0) /* bug 441654 */
+               baseGlyph = i;
+           if (glyphs[i].cluster == mpreIndex) {
+                   if (mpreGlyph < 0)
+                           mpreGlyph = i;
+                   mpreLimit = i + 1;
+           }
+       }
+       if (baseGlyph < 0 || mpreGlyph < 0 || mpreLimit >= baseGlyph) {
+           continue;
+       }
+
+       mpreCount  = mpreLimit - mpreGlyph;
+       moveCount  = baseGlyph - mpreLimit;
+       mpreDest   = baseGlyph - mpreCount;
+
+       mpreSave    = g_new (PangoOTGlyph, mpreCount);
+
+       for (i = 0; i < mpreCount; i += 1) {
+           mpreSave[i] = glyphs[mpreGlyph + i];
+       }
+
+       for (i = 0; i < moveCount; i += 1) {
+           glyphs[mpreGlyph + i] = glyphs[mpreLimit + i];
+       }
+
+       for (i = 0; i < mpreCount; i += 1) {
+           glyphs[mpreDest + i] = mpreSave[i];
+       }
+
+       g_free(mpreSave);
+    }
+}
diff --git a/modules/indic/mprefixups.h b/modules/indic/mprefixups.h
new file mode 100755 (executable)
index 0000000..22336db
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * mprefixups.c: Handle left matra placement
+ *
+ * Author: Sivaraj Doddannan
+ * Ported from IBM's ICU engine.  Original copyright:
+ * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MPREFIXUPS_H
+#define __MPREFIXUPS_H
+
+#include <pango/pango-types.h>
+#include <pango/pango-glyph.h>
+#include <pango/pango-ot.h>
+
+G_BEGIN_DECLS
+
+typedef struct _FixupData FixupData;
+
+struct _MPreFixups {
+  glong                fFixupCount;
+  FixupData    *fFixupData;
+};
+
+typedef struct _MPreFixups MPreFixups;
+
+MPreFixups *indic_mprefixups_new(glong char_count);
+void        indic_mprefixups_free(MPreFixups *mprefixups);
+void        indic_mprefixups_add(MPreFixups *mprefixups, glong baseIndex, glong mpreIndex);
+void        indic_mprefixups_apply(MPreFixups *mprefixups, PangoOTBuffer *buffer);
+
+
+G_END_DECLS
+
+#endif
+
diff --git a/modules/khmer/Makefile.am b/modules/khmer/Makefile.am
new file mode 100755 (executable)
index 0000000..f191ea5
--- /dev/null
@@ -0,0 +1,23 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_KHMER_FC
+noinst_LTLIBRARIES += libpango-khmer-fc.la
+else
+if DYNAMIC_KHMER_FC
+module_LTLIBRARIES += pango-khmer-fc.la
+endif
+endif
+endif
+
+fc_sources =                   \
+       khmer-fc.c
+
+pango_khmer_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_khmer_fc_la_LIBADD = $(pangoft2libs)
+pango_khmer_fc_la_SOURCES = $(fc_sources)
+libpango_khmer_fc_la_SOURCES = $(fc_sources)
+libpango_khmer_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_khmer_fc
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/khmer/Makefile.in b/modules/khmer/Makefile.in
new file mode 100644 (file)
index 0000000..786ceb5
--- /dev/null
@@ -0,0 +1,710 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_KHMER_FC_TRUE@am__append_2 = libpango-khmer-fc.la
+@DYNAMIC_KHMER_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_KHMER_FC_FALSE@am__append_3 = pango-khmer-fc.la
+subdir = modules/khmer
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_khmer_fc_la_LIBADD =
+am__objects_1 = libpango_khmer_fc_la-khmer-fc.lo
+am_libpango_khmer_fc_la_OBJECTS = $(am__objects_1)
+libpango_khmer_fc_la_OBJECTS = $(am_libpango_khmer_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_KHMER_FC_TRUE@am_libpango_khmer_fc_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_khmer_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_2 = khmer-fc.lo
+am_pango_khmer_fc_la_OBJECTS = $(am__objects_2)
+pango_khmer_fc_la_OBJECTS = $(am_pango_khmer_fc_la_OBJECTS)
+@DYNAMIC_KHMER_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_KHMER_FC_FALSE@am_pango_khmer_fc_la_rpath = -rpath \
+@DYNAMIC_KHMER_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_KHMER_FC_FALSE@    $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_khmer_fc_la_SOURCES) $(pango_khmer_fc_la_SOURCES)
+DIST_SOURCES = $(libpango_khmer_fc_la_SOURCES) \
+       $(pango_khmer_fc_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3)
+noinst_LTLIBRARIES = $(am__append_2)
+fc_sources = \
+       khmer-fc.c
+
+pango_khmer_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_khmer_fc_la_LIBADD = $(pangoft2libs)
+pango_khmer_fc_la_SOURCES = $(fc_sources)
+libpango_khmer_fc_la_SOURCES = $(fc_sources)
+libpango_khmer_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_khmer_fc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/khmer/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/khmer/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-khmer-fc.la: $(libpango_khmer_fc_la_OBJECTS) $(libpango_khmer_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_khmer_fc_la_rpath) $(libpango_khmer_fc_la_LDFLAGS) $(libpango_khmer_fc_la_OBJECTS) $(libpango_khmer_fc_la_LIBADD) $(LIBS)
+pango-khmer-fc.la: $(pango_khmer_fc_la_OBJECTS) $(pango_khmer_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_khmer_fc_la_rpath) $(pango_khmer_fc_la_LDFLAGS) $(pango_khmer_fc_la_OBJECTS) $(pango_khmer_fc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/khmer-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_khmer_fc_la-khmer-fc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_khmer_fc_la-khmer-fc.lo: khmer-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_khmer_fc_la_CFLAGS) $(CFLAGS) -MT libpango_khmer_fc_la-khmer-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_khmer_fc_la-khmer-fc.Tpo" -c -o libpango_khmer_fc_la-khmer-fc.lo `test -f 'khmer-fc.c' || echo '$(srcdir)/'`khmer-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_khmer_fc_la-khmer-fc.Tpo" "$(DEPDIR)/libpango_khmer_fc_la-khmer-fc.Plo"; else rm -f "$(DEPDIR)/libpango_khmer_fc_la-khmer-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='khmer-fc.c' object='libpango_khmer_fc_la-khmer-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_khmer_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_khmer_fc_la-khmer-fc.lo `test -f 'khmer-fc.c' || echo '$(srcdir)/'`khmer-fc.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/khmer/khmer-fc.c b/modules/khmer/khmer-fc.c
new file mode 100755 (executable)
index 0000000..14357d7
--- /dev/null
@@ -0,0 +1,721 @@
+/* Pango
+ * khmer-fc.c: Shaper for Khmer script
+ *
+ * Copyright (C) 2004 Open Forum of Cambodia (www.forum.org.kh / www.khmeros.info)
+ * Authors: Jens Herden <jens@khmeros.info> and Javier Sola <javier@khmeros.info>
+ *
+ * Based on code from other shapers
+ * Copyright (C) 1999-2004 Red Hat Software
+ * Author: Owen Taylor <otaylor@redhat.com>
+
+ * Partially based on Indic shaper
+ * Copyright (C) 2001, 2002 IBM Corporation
+ * Author: Eric Mader <mader@jtcsv.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The license on the original Indic shaper code is as follows:
+ *
+ *  * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+#include "config.h"
+#include <string.h>
+
+#include "pango-engine.h"
+#include "pango-ot.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+
+
+#define SCRIPT_ENGINE_NAME "KhmerScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+
+typedef PangoEngineShape      KhmerEngineFc;
+typedef PangoEngineShapeClass KhmerEngineFcClass ;
+
+
+static PangoEngineScriptInfo khmer_scripts[] =
+{
+  { PANGO_SCRIPT_KHMER, "*" }
+};
+
+static PangoEngineInfo script_engines[] =
+{
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    khmer_scripts, G_N_ELEMENTS (khmer_scripts)
+  }
+};
+
+
+/* Vocabulary
+ *     Base ->         A consonant or an independent vowel in its full (not subscript) form. It is the
+ *                     center of the syllable, it can be surrounded by coeng (subscript) consonants, vowels,
+ *                     split vowels, signs... but there is only one base in a syllable, it has to be coded as
+ *                     the first character of the syllable.
+ *     split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant).
+ *                     Khmer language has five of them. Khmer split vowels either have one part before the
+ *                     base and one after the base or they have a part before the base and a part above the base.
+ *                     The first part of all Khmer split vowels is the same character, identical to
+ *                     the glyph of Khmer dependent vowel SRA EI
+ *     coeng -->  modifier used in Khmer to construct coeng (subscript) consonants
+ *                Differently than indian languages, the coeng modifies the consonant that follows it,
+ *                not the one preceding it  Each consonant has two forms, the base form and the subscript form
+ *                the base form is the normal one (using the consonants code-point), the subscript form is
+ *                displayed when the combination coeng + consonant is encountered.
+ *     Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant
+ *     Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO)
+ *     Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA)
+ *     Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds
+ *                          if it is attached to a consonant of the first series or a consonant of the second series
+ *                          Most consonants have an equivalent in the other series, but some of theme exist only in
+ *                          one series (for example SA). If we want to use the consonant SA with a vowel sound that
+ *                          can only be done with a vowel sound that corresponds to a vowel accompanying a consonant
+ *                          of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN
+ *                          x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and
+ *                          MUSIKATOAN a second series consonant to have a first series vowel sound.
+ *                          Consonant shifter are both normally supercript marks, but, when they are followed by a
+ *                          superscript, they change shape and take the form of subscript dependent vowel SRA U.
+ *                          If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they
+ *                          should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should
+ *                          be placed after the coeng consonant.
+ *     Dependent vowel ->   In khmer dependent vowels can be placed above, below, before or after the base
+ *                          Each vowel has its own position. Only one vowel per syllable is allowed.
+ *     Signs            ->  Khmer has above signs and post signs. Only one above sign and/or one post sign are
+ *                          Allowed in a syllable.
+ *
+ *
+ *  order is important here! This order must be the same that is found in each horizontal
+ *  line in the statetable for Khmer (see khmerStateTable) .
+ */
+enum KhmerCharClassValues
+{
+  CC_RESERVED             =  0,
+  CC_CONSONANT            =  1, /* Consonant of type 1 or independent vowel */
+  CC_CONSONANT2           =  2, /* Consonant of type 2 */
+  CC_CONSONANT3           =  3, /* Consonant of type 3 */
+  CC_ZERO_WIDTH_NJ_MARK   =  4, /* Zero Width non joiner character (0x200C) */
+  CC_CONSONANT_SHIFTER    =  5,
+  CC_ROBAT                =  6, /* Khmer special diacritic accent -treated differently in state table */
+  CC_COENG                =  7, /* Subscript consonant combining character */
+  CC_DEPENDENT_VOWEL      =  8,
+  CC_SIGN_ABOVE           =  9,
+  CC_SIGN_AFTER           = 10,
+  CC_ZERO_WIDTH_J_MARK    = 11, /* Zero width joiner character */
+  CC_COUNT                = 12  /* This is the number of character classes */
+};
+
+
+enum KhmerCharClassFlags
+{
+  CF_CLASS_MASK    = 0x0000FFFF,
+
+  CF_CONSONANT     = 0x01000000,  /* flag to speed up comparing */
+  CF_SPLIT_VOWEL   = 0x02000000,  /* flag for a split vowel -> the first part is added in front of the syllable */
+  CF_DOTTED_CIRCLE = 0x04000000,  /* add a dotted circle if a character with this flag is the first in a syllable */
+  CF_COENG         = 0x08000000,  /* flag to speed up comparing */
+  CF_SHIFTER       = 0x10000000,  /* flag to speed up comparing */
+  CF_ABOVE_VOWEL   = 0x20000000,  /* flag to speed up comparing */
+
+  /* position flags */
+  CF_POS_BEFORE    = 0x00080000,
+  CF_POS_BELOW     = 0x00040000,
+  CF_POS_ABOVE     = 0x00020000,
+  CF_POS_AFTER     = 0x00010000,
+  CF_POS_MASK      = 0x000f0000
+};
+
+
+/* Characters that get refrered to by name */
+enum KhmerChar
+{
+  C_SIGN_ZWNJ     = 0x200C,
+  C_SIGN_ZWJ      = 0x200D,
+  C_DOTTED_CIRCLE = 0x25CC,
+  C_RO            = 0x179A,
+  C_VOWEL_AA      = 0x17B6,
+  C_SIGN_NIKAHIT  = 0x17C6,
+  C_VOWEL_E       = 0x17C1,
+  C_COENG         = 0x17D2
+};
+
+
+enum
+{
+  /* simple classes, they are used in the state table (in this file) to control the length of a syllable
+   * they are also used to know where a character should be placed (location in reference to the base character)
+   * and also to know if a character, when independently displayed, should be displayed with a dotted-circle to
+   * indicate error in syllable construction
+   */
+  _xx = CC_RESERVED,
+  _sa = CC_SIGN_ABOVE | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
+  _sp = CC_SIGN_AFTER | CF_DOTTED_CIRCLE| CF_POS_AFTER,
+  _c1 = CC_CONSONANT | CF_CONSONANT,
+  _c2 = CC_CONSONANT2 | CF_CONSONANT,
+  _c3 = CC_CONSONANT3 | CF_CONSONANT,
+  _rb = CC_ROBAT | CF_POS_ABOVE | CF_DOTTED_CIRCLE,
+  _cs = CC_CONSONANT_SHIFTER | CF_DOTTED_CIRCLE | CF_SHIFTER,
+  _dl = CC_DEPENDENT_VOWEL | CF_POS_BEFORE | CF_DOTTED_CIRCLE,
+  _db = CC_DEPENDENT_VOWEL | CF_POS_BELOW | CF_DOTTED_CIRCLE,
+  _da = CC_DEPENDENT_VOWEL | CF_POS_ABOVE | CF_DOTTED_CIRCLE | CF_ABOVE_VOWEL,
+  _dr = CC_DEPENDENT_VOWEL | CF_POS_AFTER | CF_DOTTED_CIRCLE,
+  _co = CC_COENG | CF_COENG | CF_DOTTED_CIRCLE,
+
+  /* split vowel */
+  _va = _da | CF_SPLIT_VOWEL,
+  _vr = _dr | CF_SPLIT_VOWEL
+};
+
+
+/* Character class: a character class value
+ * ORed with character class flags.
+ */
+typedef glong KhmerCharClass;
+
+
+/* Character class tables
+ * _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs...
+ * _sa Sign placed above the base
+ * _sp Sign placed after the base
+ * _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants)
+ * _c2 Consonant of type 2 (only RO)
+ * _c3 Consonant of type 3
+ * _rb Khmer sign robat u17CC. combining mark for subscript consonants
+ * _cd Consonant-shifter
+ * _dl Dependent vowel placed before the base (left of the base)
+ * _db Dependent vowel placed below the base
+ * _da Dependent vowel placed above the base
+ * _dr Dependent vowel placed behind the base (right of the base)
+ * _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following
+ *     it to create a subscript consonant or independent vowel
+ * _va Khmer split vowel in wich the first part is before the base and the second one above the base
+ * _vr Khmer split vowel in wich the first part is before the base and the second one behind (right of) the base
+ */
+static const KhmerCharClass khmerCharClasses[] =
+{
+  _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, /* 1780 - 178F */
+  _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c2, _c1, _c1, _c1, _c3, _c3, /* 1790 - 179F */
+  _c1, _c3, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, /* 17A0 - 17AF */
+  _c1, _c1, _c1, _c1, _dr, _dr, _dr, _da, _da, _da, _da, _db, _db, _db, _va, _vr, /* 17B0 - 17BF */
+  _vr, _dl, _dl, _dl, _vr, _vr, _sa, _sp, _sp, _cs, _cs, _sa, _rb, _sa, _sa, _sa, /* 17C0 - 17CF */
+  _sa, _sa, _co, _sa, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _sa, _xx, _xx, /* 17D0 - 17DF */
+};
+
+/* this define must reflect the range of khmerCharClasses */
+#define firstChar 0x1780
+#define lastChar 0x17df
+
+
+
+/* The stateTable is used to calculate the end (the length) of a well
+ * formed Khmer Syllable.
+ *
+ * Each horizontal line is ordered exactly the same way as the values in KhmerClassTable
+ * CharClassValues. This coincidence of values allows the follow up of the table.
+ *
+ * Each line corresponds to a state, which does not necessarily need to be a type
+ * of component... for example, state 2 is a base, with is always a first character
+ * in the syllable, but the state could be produced a consonant of any type when
+ * it is the first character that is analysed (in ground state).
+ *
+ * Differentiating 3 types of consonants is necessary in order to
+ * forbid the use of certain combinations, such as having a second
+ * coeng after a coeng RO,
+ * The inexistent possibility of having a type 3 after another type 3 is permitted,
+ * eliminating it would very much complicate the table, and it does not create typing
+ * problems, as the case above.
+ *
+ * The table is quite complex, in order to limit the number of coeng consonants
+ * to 2 (by means of the table).
+ *
+ * There a peculiarity, as far as Unicode is concerned:
+ * - The consonant-shifter is considered in two possible different
+ *   locations, the one considered in Unicode 3.0 and the one considered in
+ *   Unicode 4.0. (there is a backwards compatibility problem in this standard).
+ *
+ *
+ * xx    independent character, such as a number, punctuation sign or non-khmer char
+ *
+ * c1    Khmer consonant of type 1 or an independent vowel
+ *       that is, a letter in which the subscript for is only under the
+ *       base, not taking any space to the right or to the left
+ *
+ * c2    Khmer consonant of type 2, the coeng form takes space under
+ *       and to the left of the base (only RO is of this type)
+ *
+ * c3    Khmer consonant of type 3. Its subscript form takes space under
+ *       and to the right of the base.
+ *
+ * cs    Khmer consonant shifter
+ *
+ * rb    Khmer robat
+ *
+ * co    coeng character (u17D2)
+ *
+ * dv    dependent vowel (including split vowels, they are treated in the same way).
+ *       even if dv is not defined above, the component that is really tested for is
+ *       KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels
+ *
+ * zwj   Zero Width joiner
+ *
+ * zwnj  Zero width non joiner
+ *
+ * sa    above sign
+ *
+ * sp    post sign
+ *
+ * there are lines with equal content but for an easier understanding
+ * (and maybe change in the future) we did not join them
+ */
+static const gint8 khmerStateTable[][CC_COUNT] =
+{
+/* xx  c1  c2  c3 zwnj cs  rb  co  dv  sa  sp zwj  */
+  { 1,  2,  2,  2,  1,  1,  1,  6,  1,  1,  1,  2}, /*  0 - ground state */
+  {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /*  1 - exit state (or sign to the right of the syllable) */
+  {-1, -1, -1, -1,  3,  4,  5,  6, 16, 17,  1, -1}, /*  2 - Base consonant */
+  {-1, -1, -1, -1, -1,  4, -1, -1, 16, -1, -1, -1}, /*  3 - First ZWNJ before a register shifter
+                                                           It can only be followed by a shifter or a vowel */
+  {-1, -1, -1, -1, 15, -1, -1,  6, 16, 17,  1, 14}, /*  4 - First register shifter */
+  {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1,  1, -1}, /*  5 - Robat */
+  {-1,  7,  8,  9, -1, -1, -1, -1, -1, -1, -1, -1}, /*  6 - First Coeng */
+  {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, /*  7 - First consonant of type 1 after coeng */
+  {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17,  1, 14}, /*  8 - First consonant of type 2 after coeng */
+  {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, /*  9 - First consonant or type 3 after ceong */
+  {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, /* 10 - Second Coeng (no register shifter before) */
+  {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, /* 11 - Second coeng consonant (or ind. vowel) no register shifter before */
+  {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, /* 12 - Second ZWNJ before a register shifter */
+  {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, /* 13 - Second register shifter */
+  {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, /* 14 - ZWJ before vowel */
+  {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, /* 15 - ZWNJ before vowel */
+  {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17,  1, 18}, /* 16 - dependent vowel */
+  {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, 18}, /* 17 - sign above */
+  {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, /* 18 - ZWJ after vowel */
+  {-1,  1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 19 - Third coeng */
+  {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1}, /* 20 - dependent vowel after a Robat */
+};
+
+
+enum property_flags
+{
+  abvf = 0x0001,
+  pref = 0x0002,
+  pstf = 0x0004,
+  blwf = 0x0008,
+
+  pres = 0x0010,
+  blws = 0x0020,
+  abvs = 0x0040,
+  psts = 0x0080,
+  clig = 0x0100,
+
+  dist = 0x0200,
+  blwm = 0x0400,
+  abvm = 0x0800,
+};
+
+
+enum properties
+{
+  blwf_p    = /*(blwf | blws | clig | dist | blwm)*/ (abvf | pref | pstf | pres | abvs | psts | abvm),
+  pstf_p    = /*(blwf | blws | pref | pres | pstf | psts | clig | dist | blwm)*/ (abvf | abvs | abvm),
+  abvf_p    = /*(abvf | abvs | clig | dist | abvm)*/ (pref | pstf | blwf | pres | blws | psts | blwm),
+  pref_p    = /*(pref | pres | clig | dist)*/ (abvf | pstf | blwf | blws | abvs | psts | blwm | abvm),
+  default_p = /*(pres | blws | clig | dist | abvm | blwm)*/ (pref | blwf |abvf | pstf | abvs | psts)
+};
+
+
+/* Below we define how a character in the input string is either in the khmerCharClasses table
+ * (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear
+ * within the syllable, but are not in the table) we also get their type back, or an unknown object
+ * in which case we get _xx (CC_RESERVED) back
+ */
+static KhmerCharClass
+get_char_class (gunichar ch)
+{
+  if (ch == C_SIGN_ZWJ)
+    return CC_ZERO_WIDTH_J_MARK;
+
+  if (ch == C_SIGN_ZWNJ)
+    return CC_ZERO_WIDTH_NJ_MARK;
+
+  if (ch < firstChar || ch > lastChar)
+    return CC_RESERVED;
+
+  return khmerCharClasses[ch - firstChar];
+}
+
+
+/* Given an input string of characters and a location in which to start looking
+ * calculate, using the state table, which one is the last character of the syllable
+ * that starts in the starting position.
+ */
+static glong
+find_syllable (const gunichar *chars,
+              glong           start,
+              glong           char_count)
+{
+  glong cursor = start;
+  gint8 state = 0;
+  KhmerCharClass charClass;
+
+  while (cursor < char_count)
+    {
+      charClass = get_char_class (chars[cursor]) & CF_CLASS_MASK;
+      state = khmerStateTable[state][charClass];
+
+      if (state < 0)
+       break;
+
+      cursor += 1;
+    }
+
+  return cursor;
+}
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"pref", pref},
+  {"blwf", blwf},
+  {"abvf", abvf},
+  {"pstf", pstf},
+  {"pres", pres},
+  {"blws", blws},
+  {"abvs", abvs},
+  {"psts", psts},
+  {"clig", clig},
+  {"calt", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"dist", dist},
+  {"blwm", blwm},
+  {"abvm", abvm},
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static PangoGlyph
+get_index (PangoFcFont *fc_font, gunichar wc)
+{
+  PangoGlyph index = pango_fc_font_get_glyph (fc_font, wc);
+  if (!index)
+    index = PANGO_GET_UNKNOWN_GLYPH ( wc);
+  return index;
+}
+
+
+static void
+khmer_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                   PangoFont        *font,
+                   const char       *text,
+                   int               length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  glong n_chars;
+  gunichar *wcs;
+  const char *p;
+  int i;
+  glong syllable;
+  KhmerCharClass charClass;
+  glong cursor = 0;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+
+  wcs = g_utf8_to_ucs4_fast (text, length, &n_chars);
+
+  p = text;
+  /* This loop only exits when we reach the end of a run, which may contain
+   * several syllables.
+   */
+  while (cursor < n_chars)
+    {
+      /* write a pre vowel or the pre part of a split vowel first
+       * and look out for coeng + ro. RO is the only vowel of type 2, and
+       * therefore the only one that requires saving space before the base.
+       */
+      glong coengRo = -1;  /* There is no Coeng Ro, if found this value will change */
+
+      syllable = find_syllable (wcs, cursor, n_chars);
+
+      for (i = cursor; i < syllable; i += 1)
+       {
+         charClass = get_char_class (wcs[i]);
+
+         /* if a split vowel, write the pre part. In Khmer the pre part
+          * is the same for all split vowels, same glyph as pre vowel C_VOWEL_E
+          */
+         if (charClass & CF_SPLIT_VOWEL)
+           {
+             pango_ot_buffer_add_glyph (buffer, get_index (fc_font, C_VOWEL_E), pref_p, p - text);
+             break; /* there can be only one vowel */
+           }
+
+         /* if a vowel with pos before write it out */
+         if (charClass & CF_POS_BEFORE)
+           {
+             pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), pref_p, p - text);
+             break; /* there can be only one vowel */
+           }
+
+         /* look for coeng + ro and remember position
+          * works because coeng + ro is always in front of a vowel (if there is a vowel)
+          * and because CC_CONSONANT2 is enough to identify it, as it is the only consonant
+          * with this flag
+          */
+         if ((charClass & CF_COENG) && (i + 1 < syllable) &&
+            ((get_char_class (wcs[i + 1]) & CF_CLASS_MASK) == CC_CONSONANT2))
+           {
+             coengRo = i;
+           }
+       }
+
+      /* write coeng + ro if found  */
+      if (coengRo > -1)
+       {
+         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, C_COENG), pref_p, p - text);
+         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, C_RO), pref_p, p - text);
+       }
+
+      /* shall we add a dotted circle?
+      * If in the position in which the base should be (first char in the string) there is
+      * a character that has the Dotted circle flag (a character that cannot be a base)
+      * then write a dotted circle
+      */
+      if (get_char_class (wcs[cursor]) & CF_DOTTED_CIRCLE)
+       {
+         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, C_DOTTED_CIRCLE), default_p, p - text);
+       }
+
+      /* copy what is left to the output, skipping before vowels and
+      * coeng Ro if they are present
+      */
+      for (i = cursor; i < syllable; i += 1)
+       {
+         charClass = get_char_class (wcs[i]);
+
+         /* skip a before vowel, it was already processed */
+         if (charClass & CF_POS_BEFORE)
+           {
+             p = g_utf8_next_char (p);
+             continue;
+           }
+
+         /* skip coeng + ro, it was already processed */
+         if (i == coengRo)
+           {
+             p = g_utf8_next_char (p);
+             i += 1;
+             p = g_utf8_next_char (p);
+             continue;
+           }
+
+         switch (charClass & CF_POS_MASK)
+           {
+             case CF_POS_ABOVE :
+               pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), abvf_p, p - text);
+               break;
+
+             case CF_POS_AFTER :
+               pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), pstf_p, p - text);
+               break;
+
+             case CF_POS_BELOW :
+               pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+               break;
+
+             default:
+                 /* assign the correct flags to a coeng consonant
+                 * Consonants of type 3 are taged as Post forms and those type 1 as below forms
+                 */
+               if ((charClass & CF_COENG) && i + 1 < syllable)
+                 {
+                   if ((get_char_class (wcs[i + 1]) & CF_CLASS_MASK) == CC_CONSONANT3)
+                     {
+                       pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), pstf_p, p - text);
+                       p = g_utf8_next_char (p);
+                       i += 1;
+                       pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), pstf_p, p - text);
+                       break;
+                     }
+                   else
+                     {
+                       pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                       p = g_utf8_next_char (p);
+                       i += 1;
+                       pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                       break;
+                     }
+                 }
+
+                 /* if a shifter is followed by an above vowel change the shifter to below form,
+                 * an above vowel can have two possible positions i + 1 or i + 3
+                 * (position i+1 corresponds to unicode 3, position i+3 to Unicode 4)
+                 * and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two
+                 * different positions, right after the shifter or after a vowel (Unicode 4)
+                 */
+                 if ((charClass & CF_SHIFTER) && (i + 1 < syllable))
+                   {
+                     if (get_char_class (wcs[i + 1]) & CF_ABOVE_VOWEL)
+                       {
+                         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                         break;
+                       }
+                     if (i + 2 < syllable &&
+                         (wcs[i + 1] == C_VOWEL_AA) &&
+                         (wcs[i + 2] == C_SIGN_NIKAHIT) )
+                       {
+                         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                         break;
+                       }
+                     if (i + 3 < syllable && (get_char_class (wcs[i + 3]) & CF_ABOVE_VOWEL) )
+                       {
+                         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                         break;
+                       }
+                     if (i + 4 < syllable &&
+                         (wcs[i + 3] == C_VOWEL_AA) &&
+                         (wcs[i + 4] == C_SIGN_NIKAHIT) )
+                       {
+                         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                         break;
+                       }
+
+                   }
+
+                 /* default - any other characters  */
+                 pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), default_p, p - text);
+                 break;
+           } /* switch */
+         p = g_utf8_next_char (p);
+       } /* for */
+
+      cursor = syllable; /* move the pointer to the start of next syllable */
+    } /* while */
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+  pango_ot_buffer_output (buffer, glyphs);
+
+  g_free (wcs);
+  pango_ot_buffer_destroy (buffer);
+
+  pango_fc_font_unlock_face (fc_font);
+}
+
+
+static void
+khmer_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = khmer_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (KhmerEngineFc, khmer_engine_fc,
+                               khmer_engine_fc_class_init, NULL)
+
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  khmer_engine_fc_register_type (module);
+}
+
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (khmer_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/module.def b/modules/module.def
new file mode 100755 (executable)
index 0000000..6e67387
--- /dev/null
@@ -0,0 +1,5 @@
+EXPORTS
+       script_engine_create
+       script_engine_list
+       script_engine_init
+       script_engine_exit
diff --git a/modules/pangorc b/modules/pangorc
new file mode 100755 (executable)
index 0000000..3b60ece
--- /dev/null
@@ -0,0 +1,8 @@
+#
+# pangorc file for uninstalled operation.
+# We set the path as ../modules, such that it works from any of
+# top level build subdirs.
+#
+
+[Pango]
+ModuleFiles = ../modules/pango.modules
diff --git a/modules/syriac/Makefile.am b/modules/syriac/Makefile.am
new file mode 100755 (executable)
index 0000000..68a4441
--- /dev/null
@@ -0,0 +1,25 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_SYRIAC_FC
+noinst_LTLIBRARIES += libpango-syriac-fc.la
+else
+if DYNAMIC_SYRIAC_FC
+module_LTLIBRARIES += pango-syriac-fc.la
+endif
+endif
+endif
+
+fc_sources = \
+       syriac-fc.c \
+       syriac-ot.c \
+       syriac-ot.h
+
+pango_syriac_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_syriac_fc_la_LIBADD = $(pangoft2libs)
+pango_syriac_fc_la_SOURCES = $(fc_sources)
+libpango_syriac_fc_la_SOURCES = $(fc_sources)
+libpango_syriac_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_syriac_fc
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/syriac/Makefile.in b/modules/syriac/Makefile.in
new file mode 100644 (file)
index 0000000..d7e3cf2
--- /dev/null
@@ -0,0 +1,723 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_SYRIAC_FC_TRUE@am__append_2 = libpango-syriac-fc.la
+@DYNAMIC_SYRIAC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_SYRIAC_FC_FALSE@am__append_3 = pango-syriac-fc.la
+subdir = modules/syriac
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_syriac_fc_la_LIBADD =
+am__objects_1 = libpango_syriac_fc_la-syriac-fc.lo \
+       libpango_syriac_fc_la-syriac-ot.lo
+am_libpango_syriac_fc_la_OBJECTS = $(am__objects_1)
+libpango_syriac_fc_la_OBJECTS = $(am_libpango_syriac_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_SYRIAC_FC_TRUE@am_libpango_syriac_fc_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_syriac_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_2 = syriac-fc.lo syriac-ot.lo
+am_pango_syriac_fc_la_OBJECTS = $(am__objects_2)
+pango_syriac_fc_la_OBJECTS = $(am_pango_syriac_fc_la_OBJECTS)
+@DYNAMIC_SYRIAC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_SYRIAC_FC_FALSE@am_pango_syriac_fc_la_rpath = -rpath \
+@DYNAMIC_SYRIAC_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_SYRIAC_FC_FALSE@  $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_syriac_fc_la_SOURCES) \
+       $(pango_syriac_fc_la_SOURCES)
+DIST_SOURCES = $(libpango_syriac_fc_la_SOURCES) \
+       $(pango_syriac_fc_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3)
+noinst_LTLIBRARIES = $(am__append_2)
+fc_sources = \
+       syriac-fc.c \
+       syriac-ot.c \
+       syriac-ot.h
+
+pango_syriac_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_syriac_fc_la_LIBADD = $(pangoft2libs)
+pango_syriac_fc_la_SOURCES = $(fc_sources)
+libpango_syriac_fc_la_SOURCES = $(fc_sources)
+libpango_syriac_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_syriac_fc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/syriac/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/syriac/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-syriac-fc.la: $(libpango_syriac_fc_la_OBJECTS) $(libpango_syriac_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_syriac_fc_la_rpath) $(libpango_syriac_fc_la_LDFLAGS) $(libpango_syriac_fc_la_OBJECTS) $(libpango_syriac_fc_la_LIBADD) $(LIBS)
+pango-syriac-fc.la: $(pango_syriac_fc_la_OBJECTS) $(pango_syriac_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_syriac_fc_la_rpath) $(pango_syriac_fc_la_LDFLAGS) $(pango_syriac_fc_la_OBJECTS) $(pango_syriac_fc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_syriac_fc_la-syriac-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_syriac_fc_la-syriac-ot.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syriac-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syriac-ot.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_syriac_fc_la-syriac-fc.lo: syriac-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_syriac_fc_la_CFLAGS) $(CFLAGS) -MT libpango_syriac_fc_la-syriac-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_syriac_fc_la-syriac-fc.Tpo" -c -o libpango_syriac_fc_la-syriac-fc.lo `test -f 'syriac-fc.c' || echo '$(srcdir)/'`syriac-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_syriac_fc_la-syriac-fc.Tpo" "$(DEPDIR)/libpango_syriac_fc_la-syriac-fc.Plo"; else rm -f "$(DEPDIR)/libpango_syriac_fc_la-syriac-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='syriac-fc.c' object='libpango_syriac_fc_la-syriac-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_syriac_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_syriac_fc_la-syriac-fc.lo `test -f 'syriac-fc.c' || echo '$(srcdir)/'`syriac-fc.c
+
+libpango_syriac_fc_la-syriac-ot.lo: syriac-ot.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_syriac_fc_la_CFLAGS) $(CFLAGS) -MT libpango_syriac_fc_la-syriac-ot.lo -MD -MP -MF "$(DEPDIR)/libpango_syriac_fc_la-syriac-ot.Tpo" -c -o libpango_syriac_fc_la-syriac-ot.lo `test -f 'syriac-ot.c' || echo '$(srcdir)/'`syriac-ot.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_syriac_fc_la-syriac-ot.Tpo" "$(DEPDIR)/libpango_syriac_fc_la-syriac-ot.Plo"; else rm -f "$(DEPDIR)/libpango_syriac_fc_la-syriac-ot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='syriac-ot.c' object='libpango_syriac_fc_la-syriac-ot.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_syriac_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_syriac_fc_la-syriac-ot.lo `test -f 'syriac-ot.c' || echo '$(srcdir)/'`syriac-ot.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/syriac/syriac-fc.c b/modules/syriac/syriac-fc.c
new file mode 100755 (executable)
index 0000000..7ba05fb
--- /dev/null
@@ -0,0 +1,212 @@
+/* Pango
+ * syriac-fc.h:
+ *
+ * Copyright (C) 2000, 2003, 2007 Red Hat Software
+ * Copyright (C) 2004 Emil Soleyman-Zomalan
+ * Authors:
+ *   Owen Taylor <otaylor@redhat.com>
+ *   Emil Soleyman-Zomalan <emil@soleyman.com>
+ *   Behdad Esfahbod <behdad@behdad.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include <string.h>
+
+#include "syriac-ot.h"
+
+#include "pango-engine.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      SyriacEngineFc;
+typedef PangoEngineShapeClass SyriacEngineFcClass ;
+
+#define SCRIPT_ENGINE_NAME "SyriacScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+static PangoEngineScriptInfo syriac_scripts[] = {
+  { PANGO_SCRIPT_SYRIAC, "*" },
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    syriac_scripts, G_N_ELEMENTS(syriac_scripts)
+  }
+};
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"isol", isolated},
+  {"fina", final},
+  {"fin2", final2},
+  {"fin3", final3},
+  {"medi", medial},
+  {"med2", medial2},
+  {"init", initial},
+  {"rlig", PANGO_OT_ALL_GLYPHS},
+  {"calt", PANGO_OT_ALL_GLYPHS},
+  {"liga", PANGO_OT_ALL_GLYPHS},
+  /* 'dlig' should be turned-on/off-able.  lets turn off for now. */
+  /* {"dlig", PANGO_OT_ALL_GLYPHS}, */
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+syriac_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                    PangoFont        *font,
+                    const char       *text,
+                    gint              length,
+                    const PangoAnalysis *analysis,
+                    PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  gulong *properties = NULL;
+  glong n_chars;
+  gunichar *wcs;
+  const char *p;
+  int cluster = 0;
+  int i;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+  pango_ot_buffer_set_zero_width_marks (buffer, TRUE);
+
+  wcs = g_utf8_to_ucs4_fast (text, length, &n_chars);
+  properties = g_new0 (gulong, n_chars);
+
+  syriac_assign_properties (wcs, properties, n_chars);
+
+  g_free (wcs);
+
+  p = text;
+  for (i=0; i < n_chars; i++)
+    {
+      gunichar wc;
+      PangoGlyph glyph;
+
+      wc = g_utf8_get_char (p);
+
+      if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+       cluster = p - text;
+
+      if (pango_is_zero_width (wc))
+        glyph = PANGO_GLYPH_EMPTY;
+      else
+        {
+         gunichar c = wc;
+
+         if (analysis->level % 2)
+           g_unichar_get_mirror_char (c, &c);
+
+         glyph = pango_fc_font_get_glyph (fc_font, c);
+       }
+
+      if (!glyph)
+       glyph = PANGO_GET_UNKNOWN_GLYPH (wc);
+
+      pango_ot_buffer_add_glyph (buffer, glyph, properties[i], cluster);
+
+      p = g_utf8_next_char (p);
+    }
+
+  g_free (properties);
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+  pango_ot_buffer_output (buffer, glyphs);
+
+  pango_ot_buffer_destroy (buffer);
+
+  pango_fc_font_unlock_face (fc_font);
+}
+
+static void
+syriac_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = syriac_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (SyriacEngineFc, syriac_engine_fc,
+                               syriac_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  syriac_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (syriac_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/syriac/syriac-ot.c b/modules/syriac/syriac-ot.c
new file mode 100755 (executable)
index 0000000..0fbb64e
--- /dev/null
@@ -0,0 +1,361 @@
+/* Pango
+ * syriac-ot.h: Determine what OpenType features to apply to characters based
+ *              on the rules for Syriac from the OpenType standard.
+ *
+ * Copyright (C) 2004 Emil Soleyman-Zomalan
+ * Author: Emil Soleyman-Zomalan <emil@soleyman.com>
+ *
+ * This file is based on the Arabic shaping code from FreeType 1 tree; original
+ * copyright notice:
+ *
+ *  The FreeType project -- a free and portable quality TrueType renderer.
+ *
+ *  Copyright 1996-2000 by
+ *  D. Turner, R.Wilhelm, and W. Lemberg
+ *
+ * The code, like the FreeType code it is derived from is dual-licensed
+ * under the GNU General Public License and the FreeType license. See
+ * pango/opentype/COPYING for full details of this licensing scheme.
+ */
+#include "config.h"
+#include "syriac-ot.h"
+
+/*     Here a table of the joining classes for characters in the range
+ *     U+0700 - U+074F.
+ *
+ *     The following character also has a joining class:
+ *
+ *     U+200C  ZERO WIDTH NON-JOINER  -> causing
+ *
+ *     All other characters are given the joining class `none'.
+ */
+static const JoiningClass syriac[] =
+{
+  /* U+0700 */
+  none, none, none, none,
+  none, none, none, none,
+  none, none, none, none,
+  none, none, none, transparent,
+
+  /* U+0710 */
+  right, none, dual, dual,
+  dual, right, right, right,
+  right, right, dual, dual,
+  dual, dual, right, dual,
+
+  /* U+0720 */
+  dual, dual, dual, dual,
+  dual, dual, dual, dual,
+  right, dual, right, dual,
+  right, none, none, none,
+
+  /* U+0730 */
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+
+  /* U+0740 */
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, transparent,
+  transparent, transparent, transparent, none,
+  none, right, dual, dual
+};
+
+/* `direction' can be -1, 0, or 1 to indicate the last non-transparent
+ * glyph, the current glyph, and the next non-transparent glyph,
+ * respectively.
+ */
+static JoiningClass
+Get_Joining_Class (gunichar*   string,
+                  int         pos,
+                  int         length,
+                  int         direction)
+{
+  JoiningClass  j;
+
+  while (1)
+    {
+      if (pos == 0 && direction < 0)
+       return none;
+
+      pos += direction;
+
+      if (pos >= length)
+       return none;
+
+      if (string[pos] < 0x0700 ||
+         string[pos] >= 0x074F)
+       {
+         if (string[pos] == 0x200C)
+           return causing;
+         else
+           return none;
+       }
+      else
+       j =  syriac[string[pos] - 0x0700];
+
+      if (!direction || j != transparent)
+       return j;
+    }
+}
+
+
+/* The rules here are roughly based on the Arabic rules from the Unicode
+ * 2.0 standard (which differ from the Unicode-4.0 rules), augmented
+ * with the Syriac rules from the Unicode-4.0 standard. The numbers
+ * R1...R11  below do not correspond to either the Arabic or the Syriac
+ * rule numbering from the Unicode standard.
+ *
+ * Characters are here specified as appearing in the byte stream, i.e.
+ * *not* in visual order. Joining classes are given in angle brackets,
+ * glyph forms in square brackets.  Glyphs affected by a specific rule are
+ * enclosed with vertical bars.
+ *
+ *
+ * Glyphs: 0x0715 (Dalath), 0x0716 (Dalath Rish), 0x072A (Rish),
+ *         0x0722 (Nun), 0x071F (Kaph)
+ *
+ *
+ *   R1: <anything1> <transparent> <anything2>
+ *
+ *       apply joining rules for
+ *       <anything1> <anything2> -> [shape1] [shape2]
+ *       -> [shape1] [isolated] [shape2]
+ *
+ *
+ *   R2: <causing|right> <0x0722|0x071F> <!(causing|right|dual)>
+ *       -> [isolated]
+ *
+ *       The Nun and Kaph characters each have 3 different glyphs
+ *       with two of those glyphs coming at the final position.
+ *       However, one of those final glyphs should really be of the
+ *       isolated glyph form where the preceding character cannot be
+ *       joined to and there is no next character.
+ *
+ *       This rule exists to combine similar exception for both
+ *       characters without increasing the complexity in the other
+ *       rules.
+ *
+ *
+ *   R3: <causing|right|dual> && <!(0x0715|0x0716|0x072A)> |<alaph>|
+ *
+ *      -> [final2]
+ *
+ *      If the preceding glyph cannot be joined to the current
+ *      glyph and the preceding character is not a Dalath, Rish,
+ *      or Dotless Dalath Rish, then the Alaph takes this contextual
+ *      position.
+ *
+ *      The [final2] joining rule is placed ahead of the [final] to
+ *      give it greater precedence when choosing the correct glyph.
+ *      If it comes after the [final] rule, the incorrect glyph is
+ *      inserted into position.
+ *
+ *
+ *   R4: <0x0715|0x0715|0x072A> |<alaph>|
+ *
+ *      -> [final3]
+ *
+ *      If the previous glyph is a Dalath, Rish, or Dotless Dalath
+ *      Rish, then the Alaph takes this contextual position.
+ *
+ *      The [final3] joining rule is placed ahead of the [final] to
+ *      give it greater precedence when choosing the correct glyph.
+ *      If it comes after the [final] rule, the incorrect glyph is
+ *      inserted into position.
+ *
+ *
+ *   R5: <causing|right|dual> |<right>|
+ *
+ *      -> [final]
+ *
+ *
+ *   R6: <causing|right|dual> |<dual>| <!(causing|right|dual)>
+ *
+ *      -> [final]
+ *
+ *
+ *   R7: <causing|left|dual> |<dual>| <causing|right|dual>
+ *
+ *      -> [medial]
+ *
+ *
+ *   R8: <causing|right> |<alaph>| <causing|right|dual>
+ *
+ *      -> [medial2]
+ *
+ *       If the Alaph glyph falls in the middle of a Syriac word and
+ *       the preceding character cannot be joined to, then the Alaph
+ *       takes this contextual position.
+ *
+ *
+ *   R9: |<left>| <causing|right|dual>
+ *
+ *      -> [initial]
+ *
+ *
+ *   R10: <!(causing|left|dual)> |<dual>| <causing|right|dual>
+ *
+ *       -> [initial]
+ *
+ *
+ *   R11: <anything> -> [isolated]
+ *
+ *        This joining rule is placed at the end of these features
+ *        because when it is placed at the beginning of all of them
+ *        it tends to break the cursive nature of Syriac writing --
+ *        it inserts the isolated glyph of each character into that
+ *        position with no joining occurring all throughout a text
+ *        document.
+ */
+
+FT_Error
+syriac_assign_properties (gunichar    *string,
+                         gulong      *properties,
+                         int          length)
+{
+  JoiningClass previous, current, next;
+  int i;
+
+  if (!string || !properties || length == 0)
+    return FT_Err_Invalid_Argument;
+
+  for (i = 0; i < length; i++)
+    {
+      previous = Get_Joining_Class (string, i, length, -1);
+      current  = Get_Joining_Class (string, i, length,  0);
+      next     = Get_Joining_Class (string, i, length,  1);
+
+      /* R1 */
+
+      if (current == transparent)
+       {
+         properties[i] |= isolated_p;
+         continue;
+       }
+
+      /* R2 */
+
+      if (string[i] == 0x0722 ||
+         string[i] == 0x071F)
+       if (previous == causing ||
+           previous == right)
+         if (!(next == causing ||
+               next == right ||
+               next == dual))
+         {
+           properties[i] |= isolated_p;
+           continue;
+         }
+
+      /* R3 */
+
+      if (string[i] == 0x0710)
+       if (previous == causing ||
+           previous == right)
+         if (!(string[i - 1] == 0x0715 ||
+               string[i - 1] == 0x0716 ||
+               string[i - 1] == 0x072A))
+         {
+           properties[i] |= final2_p;
+           continue;
+         }
+
+      /* R4 */
+
+      if (string[i] == 0x0710)
+       if (previous == causing ||
+           previous == right)
+        if (string[i - 1] == 0x0715 ||
+             string[i - 1] == 0x0716 ||
+             string[i - 1] == 0x072A)
+         {
+           properties[i] |= final3_p;
+           continue;
+         }
+
+      /* R5 */
+
+      if (previous == causing ||
+         previous == right   ||
+         previous == dual)
+       if (current == right)
+           {
+             properties[i] |= final_p;
+             continue;
+           }
+
+      /* R6 */
+
+      if (previous == causing ||
+         previous == right   ||
+         previous == dual)
+       if (current == dual)
+         if (!(next == causing ||
+                   next == right   ||
+                   next == dual   ))
+             {
+               properties[i] |= final_p;
+               continue;
+             }
+
+      /* R7 */
+
+      if (previous == causing ||
+         previous == left    ||
+         previous == dual)
+       if (current == dual)
+         if (next == causing ||
+             next == right   ||
+             next == dual   )
+             {
+               properties[i] |= medial_p;
+               continue;
+             }
+
+      /* R8 */
+
+      if (string[i] == 0x0710)
+       if (previous == causing ||
+           previous == right)
+           if (next == causing ||
+               next == right ||
+               next == dual)
+           {
+             properties[i] |= medial2_p;
+             continue;
+           }
+
+      /* R9 */
+
+      if (current == left)
+       if (next == causing ||
+           next == right   ||
+           next == dual)
+           {
+             properties[i] |= initial_p;
+             continue;
+           }
+
+      /* R10 */
+
+      if (!(previous == causing ||
+           previous == left ||
+           previous == dual   ))
+       if (current == dual)
+         if (next == causing ||
+             next == right   ||
+             next == dual)
+             {
+               properties[i] |= initial_p;
+               continue;
+             }
+
+      /* R11 */
+
+      properties[i] |= isolated_p;
+    }
+
+  return FT_Err_Ok;
+}
diff --git a/modules/syriac/syriac-ot.h b/modules/syriac/syriac-ot.h
new file mode 100755 (executable)
index 0000000..e9aea54
--- /dev/null
@@ -0,0 +1,69 @@
+/* Pango
+ * syriac-ot.h: Determine what OpenType features to apply to characters based
+ *              on the rules for Syriac from the OpenType standard.
+ *
+ * Copyright (C) 2004 Emil Soleyman-Zomalan
+ * Author: Emil Soleyman-Zomalan <emil@soleyman.com>
+ *
+ * This file is based on the Arabic shaping code from FreeType 1 tree; original
+ * copyright notice:
+ *
+ *  The FreeType project -- a free and portable quality TrueType renderer.
+ *
+ *  Copyright 1996-2000 by
+ *  D. Turner, R.Wilhelm, and W. Lemberg
+ *
+ * The code, like the FreeType code it is derived from is dual-licensed
+ * under the  GNU Public License and the FreeType license. See see
+ * pango/opentype/FT-license.txt for full details of the FreeType
+ * license.
+ */
+
+#ifndef __SYRIAC_OT_H__
+#define __SYRIAC_OT_H__
+
+#include <pango/pango-ot.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+  isolated = 1 << 0,    /* nominal        */
+  final    = 1 << 1,    /* right_joining */
+  initial  = 1 << 2,    /* left_joining   */
+  medial   = 1 << 3,    /* double_joining */
+  medial2  = 1 << 4,    /* double_joining, applies to Alaph only */
+  final2   = 1 << 5,    /* right_joining, applies to Alaph only */
+  final3   = 1 << 6     /* right_joining, applies to Alaph only */
+} JoiningType;
+
+/* A glyph's property value as needed by e.g. TT_GSUB_Apply_String()
+   specifies which features should *not* be applied  */
+typedef enum
+{
+  isolated_p = final    | initial | medial  | medial2 | final2  | final3,
+  final_p    = isolated | initial | medial  | medial2 | final2  | final3,
+  initial_p  = isolated | final   | medial  | medial2 | final2  | final3,
+  medial_p   = isolated | final   | initial | medial2 | final2  | final3,
+  medial2_p  = isolated | final   | initial | medial  | final2  | final3,
+  final2_p   = isolated | final   | initial | medial  | medial2 | final3,
+  final3_p   = isolated | final   | initial | medial  | medial2 | final2
+} SyriacGlyphForm;
+
+typedef enum
+{
+  right,
+  left,                        /* not used */
+  dual,
+  causing,
+  none,
+  transparent
+} JoiningClass;
+
+FT_Error syriac_assign_properties (gunichar *string,
+                                  gulong   *properties,
+                                  int       length);
+
+G_END_DECLS
+
+#endif /* __SYRIAC_OT_H__ */
diff --git a/modules/thai/Makefile.am b/modules/thai/Makefile.am
new file mode 100755 (executable)
index 0000000..870434e
--- /dev/null
@@ -0,0 +1,43 @@
+include $(top_srcdir)/modules/Module.mk
+
+shaper_sources = thai-charprop.c thai-charprop.h thai-shaper.c thai-shaper.h
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_THAI_FC
+noinst_LTLIBRARIES += libpango-thai-fc.la
+else
+if DYNAMIC_THAI_FC
+module_LTLIBRARIES += pango-thai-fc.la
+endif
+endif
+endif
+
+thai_fc_sources = $(shaper_sources) thai-fc.c
+
+pango_thai_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_thai_fc_la_LIBADD = $(pangoft2libs)
+pango_thai_fc_la_SOURCES = $(thai_fc_sources)
+libpango_thai_fc_la_SOURCES = $(thai_fc_sources)
+libpango_thai_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_thai_fc
+
+
+if INCLUDE_THAI_LANG
+noinst_LTLIBRARIES += libpango-thai-lang.la
+else
+if DYNAMIC_THAI_LANG
+module_LTLIBRARIES += pango-thai-lang.la
+endif
+endif
+
+lang_sources = \
+       thai-lang.c
+
+pango_thai_lang_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_thai_lang_la_LIBADD = $(pangolibs) $(LIBTHAI_LIBS)
+pango_thai_lang_la_SOURCES = $(lang_sources)
+libpango_thai_lang_la_SOURCES = $(lang_sources)
+libpango_thai_lang_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_thai_lang $(LIBTHAI_CFLAGS)
+libpango_thai_lang_la_LIBADD = $(LIBTHAI_LIBS)
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/thai/Makefile.in b/modules/thai/Makefile.in
new file mode 100644 (file)
index 0000000..22e07b5
--- /dev/null
@@ -0,0 +1,770 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_THAI_FC_TRUE@am__append_2 = libpango-thai-fc.la
+@DYNAMIC_THAI_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_THAI_FC_FALSE@am__append_3 = pango-thai-fc.la
+@INCLUDE_THAI_LANG_TRUE@am__append_4 = libpango-thai-lang.la
+@DYNAMIC_THAI_LANG_TRUE@@INCLUDE_THAI_LANG_FALSE@am__append_5 = pango-thai-lang.la
+subdir = modules/thai
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_thai_fc_la_LIBADD =
+am__objects_1 = libpango_thai_fc_la-thai-charprop.lo \
+       libpango_thai_fc_la-thai-shaper.lo
+am__objects_2 = $(am__objects_1) libpango_thai_fc_la-thai-fc.lo
+am_libpango_thai_fc_la_OBJECTS = $(am__objects_2)
+libpango_thai_fc_la_OBJECTS = $(am_libpango_thai_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_THAI_FC_TRUE@am_libpango_thai_fc_la_rpath =
+am__DEPENDENCIES_1 =
+libpango_thai_lang_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_3 = libpango_thai_lang_la-thai-lang.lo
+am_libpango_thai_lang_la_OBJECTS = $(am__objects_3)
+libpango_thai_lang_la_OBJECTS = $(am_libpango_thai_lang_la_OBJECTS)
+@INCLUDE_THAI_LANG_TRUE@am_libpango_thai_lang_la_rpath =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_thai_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_4 = thai-charprop.lo thai-shaper.lo
+am__objects_5 = $(am__objects_4) thai-fc.lo
+am_pango_thai_fc_la_OBJECTS = $(am__objects_5)
+pango_thai_fc_la_OBJECTS = $(am_pango_thai_fc_la_OBJECTS)
+@DYNAMIC_THAI_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_THAI_FC_FALSE@am_pango_thai_fc_la_rpath = -rpath \
+@DYNAMIC_THAI_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_THAI_FC_FALSE@      $(moduledir)
+pango_thai_lang_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+       $(am__DEPENDENCIES_1)
+am__objects_6 = thai-lang.lo
+am_pango_thai_lang_la_OBJECTS = $(am__objects_6)
+pango_thai_lang_la_OBJECTS = $(am_pango_thai_lang_la_OBJECTS)
+@DYNAMIC_THAI_LANG_TRUE@@INCLUDE_THAI_LANG_FALSE@am_pango_thai_lang_la_rpath =  \
+@DYNAMIC_THAI_LANG_TRUE@@INCLUDE_THAI_LANG_FALSE@      -rpath \
+@DYNAMIC_THAI_LANG_TRUE@@INCLUDE_THAI_LANG_FALSE@      $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_thai_fc_la_SOURCES) \
+       $(libpango_thai_lang_la_SOURCES) $(pango_thai_fc_la_SOURCES) \
+       $(pango_thai_lang_la_SOURCES)
+DIST_SOURCES = $(libpango_thai_fc_la_SOURCES) \
+       $(libpango_thai_lang_la_SOURCES) $(pango_thai_fc_la_SOURCES) \
+       $(pango_thai_lang_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3) $(am__append_5)
+noinst_LTLIBRARIES = $(am__append_2) $(am__append_4)
+shaper_sources = thai-charprop.c thai-charprop.h thai-shaper.c thai-shaper.h
+thai_fc_sources = $(shaper_sources) thai-fc.c
+pango_thai_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_thai_fc_la_LIBADD = $(pangoft2libs)
+pango_thai_fc_la_SOURCES = $(thai_fc_sources)
+libpango_thai_fc_la_SOURCES = $(thai_fc_sources)
+libpango_thai_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_thai_fc
+lang_sources = \
+       thai-lang.c
+
+pango_thai_lang_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_thai_lang_la_LIBADD = $(pangolibs) $(LIBTHAI_LIBS)
+pango_thai_lang_la_SOURCES = $(lang_sources)
+libpango_thai_lang_la_SOURCES = $(lang_sources)
+libpango_thai_lang_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_thai_lang $(LIBTHAI_CFLAGS)
+libpango_thai_lang_la_LIBADD = $(LIBTHAI_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/thai/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/thai/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-thai-fc.la: $(libpango_thai_fc_la_OBJECTS) $(libpango_thai_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_thai_fc_la_rpath) $(libpango_thai_fc_la_LDFLAGS) $(libpango_thai_fc_la_OBJECTS) $(libpango_thai_fc_la_LIBADD) $(LIBS)
+libpango-thai-lang.la: $(libpango_thai_lang_la_OBJECTS) $(libpango_thai_lang_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_thai_lang_la_rpath) $(libpango_thai_lang_la_LDFLAGS) $(libpango_thai_lang_la_OBJECTS) $(libpango_thai_lang_la_LIBADD) $(LIBS)
+pango-thai-fc.la: $(pango_thai_fc_la_OBJECTS) $(pango_thai_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_thai_fc_la_rpath) $(pango_thai_fc_la_LDFLAGS) $(pango_thai_fc_la_OBJECTS) $(pango_thai_fc_la_LIBADD) $(LIBS)
+pango-thai-lang.la: $(pango_thai_lang_la_OBJECTS) $(pango_thai_lang_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_thai_lang_la_rpath) $(pango_thai_lang_la_LDFLAGS) $(pango_thai_lang_la_OBJECTS) $(pango_thai_lang_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_thai_fc_la-thai-charprop.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_thai_fc_la-thai-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_thai_fc_la-thai-shaper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_thai_lang_la-thai-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thai-charprop.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thai-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thai-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thai-shaper.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_thai_fc_la-thai-charprop.lo: thai-charprop.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_fc_la_CFLAGS) $(CFLAGS) -MT libpango_thai_fc_la-thai-charprop.lo -MD -MP -MF "$(DEPDIR)/libpango_thai_fc_la-thai-charprop.Tpo" -c -o libpango_thai_fc_la-thai-charprop.lo `test -f 'thai-charprop.c' || echo '$(srcdir)/'`thai-charprop.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_thai_fc_la-thai-charprop.Tpo" "$(DEPDIR)/libpango_thai_fc_la-thai-charprop.Plo"; else rm -f "$(DEPDIR)/libpango_thai_fc_la-thai-charprop.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='thai-charprop.c' object='libpango_thai_fc_la-thai-charprop.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_thai_fc_la-thai-charprop.lo `test -f 'thai-charprop.c' || echo '$(srcdir)/'`thai-charprop.c
+
+libpango_thai_fc_la-thai-shaper.lo: thai-shaper.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_fc_la_CFLAGS) $(CFLAGS) -MT libpango_thai_fc_la-thai-shaper.lo -MD -MP -MF "$(DEPDIR)/libpango_thai_fc_la-thai-shaper.Tpo" -c -o libpango_thai_fc_la-thai-shaper.lo `test -f 'thai-shaper.c' || echo '$(srcdir)/'`thai-shaper.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_thai_fc_la-thai-shaper.Tpo" "$(DEPDIR)/libpango_thai_fc_la-thai-shaper.Plo"; else rm -f "$(DEPDIR)/libpango_thai_fc_la-thai-shaper.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='thai-shaper.c' object='libpango_thai_fc_la-thai-shaper.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_thai_fc_la-thai-shaper.lo `test -f 'thai-shaper.c' || echo '$(srcdir)/'`thai-shaper.c
+
+libpango_thai_fc_la-thai-fc.lo: thai-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_fc_la_CFLAGS) $(CFLAGS) -MT libpango_thai_fc_la-thai-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_thai_fc_la-thai-fc.Tpo" -c -o libpango_thai_fc_la-thai-fc.lo `test -f 'thai-fc.c' || echo '$(srcdir)/'`thai-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_thai_fc_la-thai-fc.Tpo" "$(DEPDIR)/libpango_thai_fc_la-thai-fc.Plo"; else rm -f "$(DEPDIR)/libpango_thai_fc_la-thai-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='thai-fc.c' object='libpango_thai_fc_la-thai-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_thai_fc_la-thai-fc.lo `test -f 'thai-fc.c' || echo '$(srcdir)/'`thai-fc.c
+
+libpango_thai_lang_la-thai-lang.lo: thai-lang.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_lang_la_CFLAGS) $(CFLAGS) -MT libpango_thai_lang_la-thai-lang.lo -MD -MP -MF "$(DEPDIR)/libpango_thai_lang_la-thai-lang.Tpo" -c -o libpango_thai_lang_la-thai-lang.lo `test -f 'thai-lang.c' || echo '$(srcdir)/'`thai-lang.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_thai_lang_la-thai-lang.Tpo" "$(DEPDIR)/libpango_thai_lang_la-thai-lang.Plo"; else rm -f "$(DEPDIR)/libpango_thai_lang_la-thai-lang.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='thai-lang.c' object='libpango_thai_lang_la-thai-lang.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_thai_lang_la_CFLAGS) $(CFLAGS) -c -o libpango_thai_lang_la-thai-lang.lo `test -f 'thai-lang.c' || echo '$(srcdir)/'`thai-lang.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/thai/thai-charprop.c b/modules/thai/thai-charprop.c
new file mode 100755 (executable)
index 0000000..a51e3a3
--- /dev/null
@@ -0,0 +1,164 @@
+/* Pango
+ * thai-charprop.c: character property tables
+ *
+ * Copyright (C) 2004 Theppitak Karoonboonyanan
+ * Copyright (C) 2002 Software and Language Engineering Laboratory, NECTEC
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
+ *
+ * Copyright (c) 1996-2000 by Sun Microsystems, Inc.
+ * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include "thai-charprop.h"
+
+const gshort thai_char_type[256] = {
+  /*       0,   1,   2,   3,   4,   5,   6,   7,
+          8,   9,   A,   B,   C,   D,   E,   F  */
+
+        /* CL1 */
+  /*00*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+  /*10*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+
+        /* Lao zone: [U+0E80..U+0EDF] */
+  /*20*/ _ND, _NC, _NC, _ND, _NC, _ND, _ND, _NC,
+        _NC, _ND, _NC, _ND, _ND, _NC, _ND, _ND,
+  /*30*/ _ND, _ND, _ND, _ND, _NC, _NC, _NC, _NC,
+        _ND, _NC, _NC, _UC, _NC, _UC, _NC, _UC,
+  /*40*/ _ND, _NC, _UC, _NC, _ND, _NC, _ND, _NC,
+        _ND, _ND, _NC, _NC, _ND, _NC, _NC, _ND,
+  /*50*/ _ND, _AV, _ND, _AM, _AV, _AV, _AV, _AV,
+        _BV, _BV, _ND, _AV, _BD, _NC, _ND, _ND,
+  /*60*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _AD,
+        _TN, _TN, _TN, _TN, _AD, _AD, _ND, _ND,
+  /*70*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _NC, _NC, _ND, _ND,
+
+        /* CL2 */
+  /*80*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+  /*90*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+
+        /* Thai zone: [U+0E00..U+0E5F] */
+  /*A0*/ _ND, _NC, _NC, _NC, _NC, _NC, _NC, _NC,
+        _NC, _NC, _NC, _NC, _NC, _SC, _BC, _BC,
+  /*B0*/ _SC, _NC, _NC, _NC, _NC, _NC, _NC, _NC,
+        _NC, _NC, _NC, _UC, _NC, _UC, _NC, _UC,
+  /*C0*/ _NC, _NC, _NC, _NC, _ND, _NC, _ND, _NC,
+        _NC, _NC, _NC, _NC, _UC, _NC, _NC, _ND,
+  /*D0*/ _ND, _AV, _ND, _AM, _AV, _AV, _AV, _AV,
+        _BV, _BV, _BD, _ND, _ND, _ND, _ND, _ND,
+  /*E0*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _AD,
+        _TN, _TN, _TN, _TN, _AD, _AD, _AD, _ND,
+  /*F0*/ _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+        _ND, _ND, _ND, _ND, _ND, _ND, _ND, _ND,
+};
+
+const gshort thai_TAC_char_class[256] = {
+  /*      0,   1,   2,   3,   4,   5,   6,   7,
+          8,   9,   A,   B,   C,   D,   E,   F  */
+
+        /* CL1 */
+  /*00*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+        CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+  /*10*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+        CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+
+        /* Lao zone: [U+0E80..U+0EDF] */
+  /*20*/  NON,CONS,CONS, NON,CONS, NON, NON,CONS,
+        CONS, NON,CONS, NON, NON,CONS, NON, NON,
+  /*30*/  NON, NON, NON, NON,CONS,CONS,CONS,CONS,
+         NON,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
+  /*40*/  NON,CONS,CONS,CONS, NON,CONS, NON,CONS,
+         NON, NON,CONS,CONS, NON,CONS,CONS, NON,
+  /*50*/  FV1, AV2, FV1,  AM, AV1, AV3, AV2, AV3,
+         BV1, BV2, NON, AV2,BCON, FV3, NON, NON,
+  /*60*/   LV,  LV,  LV,  LV,  LV, NON, NON, NON,
+        TONE,TONE,TONE,TONE, AD1, AD4, NON, NON,
+  /*70*/  NON, NON, NON, NON, NON, NON, NON, NON,
+         NON, NON, NON, NON,CONS,CONS, NON,CTRL,
+
+        /* CL2 */
+  /*80*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+        CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+  /*90*/ CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+        CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,CTRL,
+
+        /* Thai zone: [U+0E00..U+0E5F] */
+  /*A0*/  NON,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
+        CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
+  /*B0*/ CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
+        CONS,CONS,CONS,CONS,CONS,CONS,CONS,CONS,
+  /*C0*/ CONS,CONS,CONS,CONS, FV3,CONS, FV3,CONS,
+        CONS,CONS,CONS,CONS,CONS,CONS,CONS, NON,
+  /*D0*/  FV1, AV2, FV1,  AM, AV1, AV3, AV2, AV3,
+         BV1, BV2,  BD, NON, NON, NON, NON, NON,
+  /*E0*/   LV,  LV,  LV,  LV,  LV, FV2, NON, AD2,
+        TONE,TONE,TONE,TONE, AD1, AD4, AD3, NON,
+  /*F0*/  NON, NON, NON, NON, NON, NON, NON, NON,
+         NON, NON, NON, NON, NON, NON, NON,CTRL,
+};
+
+const gchar thai_TAC_compose_input[20][20] = {
+      /* row: Cn-1,  column: Cn */
+      /*CTRL NON CONS LV FV1 FV2 FV3  AM BV1 BV2
+       * BD TONE AD1 AD2 AD3 AD4 AV1 AV2 AV3 BCON*/
+/*CTRL*/{'X','A','A','A','A','A','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*NON */{'X','A','A','A','S','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*CONS*/{'X','A','A','A','A','S','A','C','C','C',
+        'C','C','C','C','C','C','C','C','C','C'},
+/*LV  */{'X','S','A','S','S','S','S','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*FV1 */{'X','A','A','A','A','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*FV2 */{'X','A','A','A','A','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*FV3 */{'X','A','A','A','S','A','S','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*AM  */{'X','A','A','A','S','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*BV1 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','C','C','R','R','C','R','R','R','R'},
+/*BV2 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','C','R','R','R','R','R','R','R','R'},
+/*BD  */{'X','A','A','A','S','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*TONE*/{'X','A','A','A','A','A','A','C','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*AD1 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*AD2 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*AD3 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','R','R','R','R','R','R','R','R','R'},
+/*AD4 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','C','R','R','R','R','R','R','R','R'},
+/*AV1 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','C','C','R','R','C','R','R','R','R'},
+/*AV2 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','C','R','R','R','R','R','R','R','R'},
+/*AV3 */{'X','A','A','A','S','S','A','R','R','R',
+        'R','C','R','C','R','R','R','R','R','R'},
+/*BCON*/{'X','A','A','A','A','S','A','C','C','C',
+        'R','C','R','R','R','C','C','C','C','R'},
+};
+
diff --git a/modules/thai/thai-charprop.h b/modules/thai/thai-charprop.h
new file mode 100755 (executable)
index 0000000..98a8f8d
--- /dev/null
@@ -0,0 +1,99 @@
+/* Pango
+ * thai-charprop.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Author: Owen Taylor <otaylor@redhat.com>
+ *
+ * Copyright (C) 2004 Theppitak Karoonboonyanan
+ * Copyright (C) 2002 Software and Language Engineering Laboratory, NECTEC
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
+ *
+ * Copyright (c) 1996-2000 by Sun Microsystems, Inc.
+ * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THAI_CHARPROP_H__
+#define __THAI_CHARPROP_H__
+
+#include <glib.h>
+
+#define isthai(wc)      (0x0E00 <= (wc) && (wc) < 0x0E60)
+#define islao(wc)       (0x0E80 <= (wc) && (wc) < 0x0EE0)
+/* ucs2tis()
+ * Lao:  [0x0E80..0x0EDF] -> [0x20..0x7F]
+ * Thai: [0x0E00..0x0E5F] -> [0xA0..0xFF]
+ */
+#define ucs2tis(wc)     (((wc) - 0x0E00 + 0x20)^0x80)
+
+/* Define TACTIS character classes */
+#define CTRL           0
+#define NON            1
+#define CONS           2
+#define LV             3
+#define FV1            4
+#define FV2            5
+#define FV3            6
+#define AM             7
+#define BV1            8
+#define BV2            9
+#define BD             10
+#define TONE           11
+#define AD1            12
+#define AD2            13
+#define AD3            14
+#define AD4            15
+#define AV1            16
+#define AV2            17
+#define AV3            18
+#define BCON           19
+
+#define _ND            0
+#define _NC            1
+#define _UC            (1<<1)
+#define _BC            (1<<2)
+#define _SC            (1<<3)
+#define _AV            (1<<4)
+#define _BV            (1<<5)
+#define _TN            (1<<6)
+#define _AD            (1<<7)
+#define _BD            (1<<8)
+#define _AM            (1<<9)
+
+#define NoTailCons     _NC
+#define UpTailCons     _UC
+#define BotTailCons    _BC
+#define SpltTailCons   _SC
+#define Cons           (NoTailCons|UpTailCons|BotTailCons|SpltTailCons)
+#define AboveVowel     _AV
+#define BelowVowel     _BV
+#define Tone           _TN
+#define AboveDiac      _AD
+#define BelowDiac      _BD
+#define SaraAm         _AM
+
+#define is_char_type(wc, mask) (thai_char_type[ucs2tis ((wc))] & (mask))
+#define TAC_char_class(wc) \
+       (isthai(wc)||islao(wc) ? thai_TAC_char_class[ucs2tis (wc)] : NON)
+#define TAC_compose_input(wc1,wc2) \
+       thai_TAC_compose_input[TAC_char_class(wc1)][TAC_char_class(wc2)]
+
+extern const gshort thai_char_type[256];
+extern const gshort thai_TAC_char_class[256];
+extern const gchar  thai_TAC_compose_input[20][20];
+
+#endif /* __THAI_CHARPROP_H__ */
diff --git a/modules/thai/thai-fc.c b/modules/thai/thai-fc.c
new file mode 100755 (executable)
index 0000000..837a028
--- /dev/null
@@ -0,0 +1,357 @@
+/* Pango
+ * thai-fc.c:
+ *
+ * Copyright (C) 1999, 2007 Red Hat Software
+ * Copyright (C) 2002 NECTEC
+ * Copyright (c) 1996-2000 by Sun Microsystems, Inc.
+ * Authors:
+ *   Owen Taylor <otaylor@redhat.com>
+ *   Theppitak Karoonboonyanan <thep@links.nectec.or.th>
+ *   Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *   Behdad Esfahbod <behdad@behdad.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#include "config.h"
+#include <string.h>
+
+#include <glib.h>
+#include "pango-ot.h"
+#include "pango-engine.h"
+#include "pangofc-font.h"
+
+#include "thai-shaper.h"
+
+/* No extra fields needed */
+typedef PangoEngineShape      ThaiEngineFc;
+typedef PangoEngineShapeClass ThaiEngineFcClass ;
+
+#define SCRIPT_ENGINE_NAME "ThaiScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+/* We handle the range U+0e01 to U+0e5b exactly
+ */
+static PangoEngineScriptInfo thai_scripts[] = {
+  { PANGO_SCRIPT_THAI, "*" },
+  { PANGO_SCRIPT_LAO,  "*" },
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    thai_scripts, G_N_ELEMENTS(thai_scripts)
+  }
+};
+
+/* TIS-to-Unicode glyph maps for characters 0x80-0xff
+ */
+static const int tis620_0[128] = {
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    0x0020, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+    0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+    0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+    0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+    0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+    0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+    0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+    0x0e38, 0x0e39, 0x0e3a,      0,      0,      0,      0, 0x0e3f,
+    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
+    0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+    0x0e58, 0x0e59, 0x0e5a, 0x0e5b,      0,      0,      0,      0
+};
+
+static const int tis620_1[128] = {
+    0xf89e,      0,      0, 0xf88c, 0xf88f, 0xf892, 0xf895, 0xf898,
+    0xf88b, 0xf88e, 0xf891, 0xf894, 0xf897,      0,      0, 0xf899,
+    0xf89a,      0, 0xf884, 0xf889, 0xf885, 0xf886, 0xf887, 0xf888,
+    0xf88a, 0xf88d, 0xf890, 0xf893, 0xf896,      0,      0,      0,
+    /**/ 0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+    0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+    0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+    0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+    0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+    0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+    0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+    0x0e38, 0x0e39, 0x0e3a,      0,      0,      0,      0, 0x0e3f,
+    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d,      0, 0x0e4f,
+    0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+    0x0e58, 0x0e59,      0,      0, 0xf89b, 0xf89c, 0xf89d,      0
+};
+
+static const int tis620_2[128] = {
+    0xf700, 0xf701, 0xf702, 0xf703, 0xf704, 0x2026, 0xf705, 0xf706,
+    0xf707, 0xf708, 0xf709, 0xf70a, 0xf70b, 0xf70c, 0xf70d, 0xf70e,
+    0xf70f, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+    0xf710, 0xf711, 0xf712, 0xf713, 0xf714, 0xf715, 0xf716, 0xf717,
+    0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+    0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+    0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+    0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+    0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+    0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+    0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+    0x0e38, 0x0e39, 0x0e3a,      0,      0,      0,      0, 0x0e3f,
+    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
+    0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+    0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xf718, 0xf719, 0xf71a,      0
+};
+
+static const int lao_0[128] = {
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    /**/ 0,      0,      0,      0,      0,      0,      0,      0,
+    0x0020, 0x0e81, 0x0e82,      0, 0x0e84,      0,      0, 0x0e87,
+    0x0e88,      0, 0x0e8a,      0,      0, 0x0e8d,      0,      0,
+        0,      0,      0,      0, 0x0e94, 0x0e95, 0x0e96, 0x0e97,
+    /**/ 0, 0x0e99, 0x0e9a, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f,
+    /**/ 0, 0x0ea1, 0x0ea2, 0x0ea3,      0, 0x0ea5,      0, 0x0ea7,
+    /**/ 0,      0, 0x0eaa, 0x0eab,      0, 0x0ead, 0x0eae, 0x0eaf,
+    0x0eb0, 0x0eb1, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7,
+    0x0eb8, 0x0eb9,      0, 0x0ebb, 0x0ebc, 0x0ebd,      0,      0,
+    0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4,      0, 0x0ec6,      0,
+    0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd,      0,      0,
+    0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
+    0x0ed8, 0x0ed9,      0,      0, 0x0edc, 0x0edd,      0,      0
+};
+static int
+contain_glyphs(PangoFont *font, const int glyph_map[128])
+{
+  PangoFcFont *fc_font = (PangoFcFont *)font;
+  unsigned char c;
+
+  for (c = 0; c < 0x80; c++)
+    {
+      if (glyph_map[c])
+       {
+         if (!pango_fc_font_has_char (fc_font, glyph_map[c]))
+           return 0;
+       }
+    }
+  return 1;
+}
+
+/* Returns a structure with information we will use to rendering given the
+ * #PangoFont. This is computed once per font and cached for later retrieval.
+ */
+static ThaiFontInfo *
+thai_get_font_info (PangoFont            *font,
+                   const PangoOTRuleset *ruleset)
+{
+  ThaiFontInfo *font_info;
+  static GQuark info_id = 0;
+  
+  if (G_UNLIKELY (!info_id))
+    info_id = g_quark_from_string ("thai-font-info");
+
+  font_info = g_object_get_qdata (G_OBJECT (font), info_id);
+
+  if (G_UNLIKELY (!font_info))
+    {
+      /* No cached information not found, so we need to compute it
+       * from scratch
+       */
+      font_info = g_new (ThaiFontInfo, 1);
+      font_info->font = font;
+
+      /* detect font set by determining availibility of OT ruleset & glyphs */
+      if (pango_ot_ruleset_get_feature_count (ruleset, NULL, NULL))
+       font_info->font_set = THAI_FONT_TIS;
+      else if (contain_glyphs(font, tis620_2))
+       font_info->font_set = THAI_FONT_TIS_WIN;
+      else if (contain_glyphs(font, tis620_1))
+       font_info->font_set = THAI_FONT_TIS_MAC;
+      else
+       font_info->font_set = THAI_FONT_TIS;
+
+      g_object_set_qdata_full (G_OBJECT (font), info_id, font_info, (GDestroyNotify)g_free);
+    }
+
+  return font_info;
+}
+
+static gunichar
+get_glyph_index_tis (ThaiFontInfo *font_info, guchar c)
+{
+  if (!(c & 0x80))
+    return lao_0[c];
+
+  switch (font_info->font_set) {
+    default:
+    case THAI_FONT_NONE:    return 0;
+    case THAI_FONT_TIS:     return tis620_0[c & 0x7f];
+    case THAI_FONT_TIS_MAC: return tis620_1[c & 0x7f];
+    case THAI_FONT_TIS_WIN: return tis620_2[c & 0x7f];
+  }
+}
+
+PangoGlyph
+thai_get_glyph_tis (ThaiFontInfo *font_info, guchar c)
+{
+  return thai_get_glyph_uni (font_info, get_glyph_index_tis (font_info, c));
+}
+
+PangoGlyph
+thai_make_glyph_tis (ThaiFontInfo *font_info, guchar c)
+{
+  return thai_make_glyph_uni (font_info, get_glyph_index_tis (font_info, c));
+}
+
+PangoGlyph
+thai_get_glyph_uni (ThaiFontInfo *font_info, gunichar uc)
+{
+  return pango_fc_font_get_glyph ((PangoFcFont *)font_info->font, uc);
+}
+
+PangoGlyph
+thai_make_glyph_uni (ThaiFontInfo *font_info, gunichar uc)
+{
+  PangoGlyph result;
+  PangoFcFont *fc_font = (PangoFcFont *)font_info->font;
+
+  result = pango_fc_font_get_glyph (fc_font, uc);
+  if (result)
+    return result;
+  else
+    return PANGO_GET_UNKNOWN_GLYPH ( uc);
+}
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"liga", PANGO_OT_ALL_GLYPHS},
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static void
+thai_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                  PangoFont        *font,
+                  const char       *text,
+                  gint              length,
+                  const PangoAnalysis *analysis,
+                  PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  gint i;
+  ThaiFontInfo *font_info;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  font_info = thai_get_font_info (font, ruleset);
+
+  thai_set_glyphs (font_info, text, length, analysis->script, glyphs); 
+
+  buffer = pango_ot_buffer_new (PANGO_FC_FONT (font));
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    pango_ot_buffer_add_glyph (buffer,
+                              glyphs->glyphs[i].glyph,
+                              0,
+                              glyphs->log_clusters[i]);
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+
+  pango_ot_buffer_output (buffer, glyphs);
+  pango_ot_buffer_destroy (buffer);
+}
+
+PangoGlyph
+thai_make_unknown_glyph (ThaiFontInfo *font_info G_GNUC_UNUSED, gunichar uc)
+{
+  return PANGO_GET_UNKNOWN_GLYPH (uc);
+}
+
+static void
+thai_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = thai_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (ThaiEngineFc, thai_engine_fc,
+                               thai_engine_fc_class_init, NULL)
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  thai_engine_fc_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (thai_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/modules/thai/thai-lang.c b/modules/thai/thai-lang.c
new file mode 100755 (executable)
index 0000000..3157144
--- /dev/null
@@ -0,0 +1,148 @@
+/* Pango
+ * thai-lang.c:
+ *
+ * Copyright (C) 2003 Theppitak Karoonboonyanan <thep@linux.thai.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+
+#include <string.h>
+#include <glib.h>
+#include <pango/pango-engine.h>
+#include <pango/pango-break.h>
+#include <thai/thwchar.h>
+#include <thai/thbrk.h>
+
+/* No extra fields needed */
+typedef PangoEngineLang      ThaiEngineLang;
+typedef PangoEngineLangClass ThaiEngineLangClass;
+
+#define SCRIPT_ENGINE_NAME "ThaiScriptEngineLang"
+
+static PangoEngineScriptInfo thai_scripts[] = {
+  { PANGO_SCRIPT_THAI, "*" }
+};
+
+static PangoEngineInfo script_engines[] = {
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_LANG,
+    PANGO_RENDER_TYPE_NONE,
+    thai_scripts, G_N_ELEMENTS(thai_scripts)
+  }
+};
+
+/*
+ * tis_text is assumed to be large enough to hold the converted string,
+ * i.e. it must be at least g_utf8_strlen(text, len)+1 bytes.
+ */
+static thchar_t *
+utf8_to_tis (const char *text, int len, thchar_t *tis_text, int *tis_cnt)
+{
+  thchar_t   *tis_p;
+  const char *text_p;
+
+  tis_p = tis_text;
+  for (text_p = text; text_p < text + len; text_p = g_utf8_next_char (text_p))
+    *tis_p++ = th_uni2tis (g_utf8_get_char (text_p));
+  *tis_p++ = '\0';
+
+  *tis_cnt = tis_p - tis_text;
+  return tis_text;
+}
+
+static void
+thai_engine_break (PangoEngineLang *engine G_GNUC_UNUSED,
+                  const char      *text,
+                  int              len,
+                  PangoAnalysis   *analysis G_GNUC_UNUSED,
+                  PangoLogAttr    *attrs,
+                  int              attrs_len G_GNUC_UNUSED)
+{
+  thchar_t tis_stack[512];
+  int brk_stack[512];
+  thchar_t *tis_text;
+  int *brk_pnts;
+  int cnt;
+
+  if (len < 0)
+    len = strlen (text);
+  cnt = g_utf8_strlen (text, len) + 1;
+
+  tis_text = tis_stack;
+  if (cnt > (int) G_N_ELEMENTS (tis_stack))
+    tis_text = g_new (thchar_t, cnt);
+
+  utf8_to_tis (text, len, tis_text, &cnt);
+
+  brk_pnts = brk_stack;
+  if (cnt > (int) G_N_ELEMENTS (brk_stack))
+    brk_pnts = g_new (int, cnt);
+
+  /* find line break positions */
+  len = th_brk (tis_text, brk_pnts, len);
+  for (cnt = 0; cnt < len; cnt++)
+    {
+      attrs[brk_pnts[cnt]].is_line_break = TRUE;
+      attrs[brk_pnts[cnt]].is_word_start = TRUE;
+      attrs[brk_pnts[cnt]].is_word_end = TRUE;
+    }
+
+  if (brk_pnts != brk_stack)
+    g_free (brk_pnts);
+
+  if (tis_text != tis_stack)
+    g_free (tis_text);
+}
+
+static void
+thai_engine_lang_class_init (PangoEngineLangClass *class)
+{
+  class->script_break = thai_engine_break;
+}
+
+PANGO_ENGINE_LANG_DEFINE_TYPE (ThaiEngineLang, thai_engine_lang,
+                              thai_engine_lang_class_init, NULL);
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  thai_engine_lang_register_type (module);
+}
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines, gint *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+/* Load a particular engine given the ID for the engine
+ */
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (thai_engine_lang_type, NULL);
+  else
+    return NULL;
+}
+
diff --git a/modules/thai/thai-shaper.c b/modules/thai/thai-shaper.c
new file mode 100755 (executable)
index 0000000..4ed173c
--- /dev/null
@@ -0,0 +1,548 @@
+/* Pango
+ * thai-shaper.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Author: Owen Taylor <otaylor@redhat.com>
+ *
+ * Copyright (C) 2005 Theppitak Karoonboonyanan
+ * Copyright (C) 2002 Software and Language Engineering Laboratory, NECTEC
+ * Author: Theppitak Karoonboonyanan <thep@links.nectec.or.th>
+ *
+ * Copyright (c) 1996-2000 by Sun Microsystems, Inc.
+ * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include <string.h>
+
+#include <glib.h>
+#include "pango-engine.h"
+#include "thai-charprop.h"
+#include "thai-shaper.h"
+
+#define MAX_CLUSTER_CHRS       256
+#define MAX_GLYPHS             256
+
+
+typedef struct {
+  guchar Start_TONE_AD, Start_AV, Start_BV_BD, Start_TailCutCons;
+
+  guchar ShiftDown_TONE_AD[8];
+  guchar ShiftDownLeft_TONE_AD[8];
+  guchar ShiftLeft_TONE_AD[8];
+  guchar ShiftLeft_AV[7];
+  guchar ShiftDown_BV_BD[3];
+  guchar TailCutCons[4];
+
+  guchar AmComp[2];  /* Sara Am components */
+} ThaiShapeTable;
+
+#define shiftdown_tone_ad(c,tbl) \
+       ((tbl)->ShiftDown_TONE_AD[(c)-(tbl)->Start_TONE_AD])
+#define shiftdownleft_tone_ad(c,tbl) \
+       ((tbl)->ShiftDownLeft_TONE_AD[(c)-(tbl)->Start_TONE_AD])
+#define shiftleft_tone_ad(c,tbl) \
+       ((tbl)->ShiftLeft_TONE_AD[(c)-(tbl)->Start_TONE_AD])
+#define shiftleft_av(c,tbl) \
+       ((tbl)->ShiftLeft_AV[(c)-(tbl)->Start_AV])
+#define shiftdown_bv_bd(c,tbl) \
+       ((tbl)->ShiftDown_BV_BD[(c)-(tbl)->Start_BV_BD])
+#define tailcutcons(c,tbl) \
+       ((tbl)->TailCutCons[(c)-(tbl)->Start_TailCutCons])
+
+/* No adjusted vowel/tonemark glyphs (tis620-0)
+ */
+static const ThaiShapeTable tis620_0_shape_table = {
+    0xE7, 0xD1, 0xD8, 0xAD,
+    { 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE },
+    { 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE },
+    { 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE },
+    { 0xD1, 0x00, 0x00, 0xD4, 0xD5, 0xD6, 0xD7 },
+    { 0xD8, 0xD9, 0xDA },
+    { 0xAD, 0x00, 0x00, 0xB0 },
+    { 0xED, 0xD2 }
+};
+
+/* Macintosh
+ */
+static const ThaiShapeTable Mac_shape_table = {
+  0xE7, 0xD1, 0xD8, 0xAD,
+  { 0xE7, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0xED, 0xEE },
+  { 0x93, 0x83, 0x84, 0x85, 0x86, 0x87, 0x8F, 0xEE },
+  { 0x93, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x8F, 0xEE },
+  { 0x92, 0x00, 0x00, 0x94, 0x95, 0x96, 0x97 },
+  { 0xFC, 0xFD, 0xFE },
+  { 0x90, 0x00, 0x00, 0x80 },
+  { 0xED, 0xD2 }
+};
+
+/* Microsoft Window
+ */
+static const ThaiShapeTable Win_shape_table = {
+    0xE7, 0xD1, 0xD8, 0xAD,
+    { 0xE7, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0xED, 0xEE },
+    { 0x9A, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x99, 0xEE },
+    { 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x99, 0xEE },
+    { 0x98, 0x00, 0x00, 0x81, 0x82, 0x83, 0x84 },
+    { 0xFC, 0xFD, 0xFE },
+    { 0x90, 0x00, 0x00, 0x80 },
+    { 0xED, 0xD2 }
+};
+
+static const ThaiShapeTable Lao_shape_table = {
+  0x67, 0x51, 0x58, 0x2D,
+  { 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E },
+  { 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E },
+  { 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E },
+  { 0x51, 0x00, 0x00, 0x54, 0x55, 0x56, 0x57 },
+  { 0x58, 0x59, 0x00 },
+  { 0x2D, 0x00, 0x00, 0x30 },
+  { 0x6D, 0x52 }
+};
+
+static void
+add_glyph (ThaiFontInfo     *font_info,
+          PangoGlyphString *glyphs,
+          gint              cluster_start,
+          PangoGlyph        glyph,
+          gboolean          combining)
+{
+  PangoRectangle ink_rect, logical_rect;
+  gint index = glyphs->num_glyphs;
+
+  pango_glyph_string_set_size (glyphs, index + 1);
+
+  glyphs->glyphs[index].glyph = glyph;
+  glyphs->glyphs[index].attr.is_cluster_start = combining ? 0 : 1;
+
+  glyphs->log_clusters[index] = cluster_start;
+
+  pango_font_get_glyph_extents (font_info->font,
+                               glyphs->glyphs[index].glyph, &ink_rect, &logical_rect);
+
+  if (combining || logical_rect.width > 0)
+    {
+      glyphs->glyphs[index].geometry.x_offset = 0;
+      glyphs->glyphs[index].geometry.width = logical_rect.width;
+    }
+  else
+    {
+      glyphs->glyphs[index].geometry.x_offset = ink_rect.width;
+      glyphs->glyphs[index].geometry.width = ink_rect.width;
+    }
+  glyphs->glyphs[index].geometry.y_offset = 0;
+}
+
+static PangoGlyph
+get_null_base_glyph (ThaiFontInfo *font_info)
+{
+  return thai_get_glyph_uni (font_info, 0x25cc);
+}
+
+static gint
+get_adjusted_glyphs_list (ThaiFontInfo *font_info,
+                         gunichar *cluster,
+                         gint num_chrs,
+                         PangoGlyph *glyph_lists,
+                         const ThaiShapeTable *shaping_table)
+{
+  switch (num_chrs)
+    {
+      case 1:
+       if (is_char_type (cluster[0],
+                         BelowVowel|BelowDiac|AboveVowel|AboveDiac|Tone|SaraAm))
+         {
+           gint n;
+           glyph_lists[0] = get_null_base_glyph (font_info);
+           n = glyph_lists[0] ? 1 : 0;
+           glyph_lists[n++] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           return n;
+         }
+       else
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           return 1;
+         }
+       break;
+
+      case 2:
+       if (is_char_type (cluster[0], NoTailCons|BotTailCons|SpltTailCons) &&
+           is_char_type (cluster[1], SaraAm))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info, shaping_table->AmComp[0]);
+           glyph_lists[2] = thai_make_glyph_tis (font_info, shaping_table->AmComp[1]);
+           return 3;
+         }
+       else if (is_char_type (cluster[0], UpTailCons) &&
+                is_char_type (cluster[1], SaraAm))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                                       shiftleft_tone_ad (shaping_table->AmComp[0], shaping_table));
+           glyph_lists[2] = thai_make_glyph_tis (font_info, shaping_table->AmComp[1]);
+           return 3;
+         }
+       else if (is_char_type (cluster[0], NoTailCons|BotTailCons|SpltTailCons) &&
+                is_char_type (cluster[1], AboveVowel))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           return 2;
+         }
+       else if (is_char_type (cluster[0], NoTailCons|BotTailCons|SpltTailCons) &&
+                is_char_type (cluster[1], AboveDiac|Tone))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                       shiftdown_tone_ad (ucs2tis (cluster[1]), shaping_table));
+           return 2;
+         }
+       else if (is_char_type (cluster[0], UpTailCons) &&
+                is_char_type (cluster[1], AboveVowel))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                       shiftleft_av (ucs2tis (cluster[1]), shaping_table));
+           return 2;
+         }
+       else if (is_char_type (cluster[0], UpTailCons) &&
+                is_char_type (cluster[1], AboveDiac|Tone))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                       shiftdownleft_tone_ad (ucs2tis (cluster[1]), shaping_table));
+           return 2;
+         }
+       else if (is_char_type (cluster[0], NoTailCons|UpTailCons) &&
+                is_char_type (cluster[1], BelowVowel|BelowDiac))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           return 2;
+         }
+       else if (is_char_type (cluster[0], BotTailCons) &&
+                is_char_type (cluster[1], BelowVowel|BelowDiac))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info,
+                       shiftdown_bv_bd (ucs2tis (cluster[1]), shaping_table));
+           return 2;
+         }
+       else if (is_char_type (cluster[0], SpltTailCons) &&
+                is_char_type (cluster[1], BelowVowel|BelowDiac))
+         {
+           glyph_lists[0] = thai_make_glyph_tis (font_info,
+                              tailcutcons (ucs2tis (cluster[0]), shaping_table));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           return 2;
+         }
+       else
+         {
+           gint n;
+           glyph_lists[0] = get_null_base_glyph (font_info);
+           n = glyph_lists[0] ? 1 : 0;
+           glyph_lists[n++] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[n++] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           return n;
+         }
+       break;
+
+      case 3:
+       if (is_char_type (cluster[0], NoTailCons|BotTailCons|SpltTailCons) &&
+           is_char_type (cluster[1], Tone) &&
+           is_char_type (cluster[2], SaraAm))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info, shaping_table->AmComp[0]);
+           glyph_lists[2] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           glyph_lists[3] = thai_make_glyph_tis (font_info, shaping_table->AmComp[1]);
+           return 4;
+         }
+       else if (is_char_type (cluster[0], UpTailCons) &&
+                is_char_type (cluster[1], Tone) &&
+                is_char_type (cluster[2], SaraAm))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                               shiftleft_tone_ad (shaping_table->AmComp[0], shaping_table));
+           glyph_lists[2] = thai_make_glyph_tis (font_info,
+                               shiftleft_tone_ad (ucs2tis (cluster[1]), shaping_table));
+           glyph_lists[3] = thai_make_glyph_tis (font_info, shaping_table->AmComp[1]);
+           return 4;
+         }
+       else if (is_char_type (cluster[0], UpTailCons) &&
+                is_char_type (cluster[1], AboveVowel) &&
+                is_char_type (cluster[2], AboveDiac|Tone))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                               shiftleft_av (ucs2tis (cluster[1]), shaping_table));
+           glyph_lists[2] = thai_make_glyph_tis (font_info,
+                               shiftleft_tone_ad (ucs2tis (cluster[2]), shaping_table));
+           return 3;
+         }
+       else if (is_char_type (cluster[0], UpTailCons) &&
+                is_char_type (cluster[1], BelowVowel) &&
+                is_char_type (cluster[2], AboveDiac|Tone))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           glyph_lists[2] = thai_make_glyph_tis (font_info,
+                       shiftdownleft_tone_ad (ucs2tis (cluster[2]), shaping_table));
+           return 3;
+         }
+       else if (is_char_type (cluster[0], NoTailCons) &&
+                is_char_type (cluster[1], BelowVowel) &&
+                is_char_type (cluster[2], AboveDiac|Tone))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           glyph_lists[2] =
+               thai_make_glyph_tis (font_info,
+                       shiftdown_tone_ad (ucs2tis (cluster[2]), shaping_table));
+           return 3;
+         }
+       else if (is_char_type (cluster[0], SpltTailCons) &&
+                is_char_type (cluster[1], BelowVowel) &&
+                is_char_type (cluster[2], AboveDiac|Tone))
+         {
+           glyph_lists[0] = thai_make_glyph_tis (font_info,
+                               tailcutcons (ucs2tis (cluster[0]), shaping_table));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           glyph_lists[2] = thai_make_glyph_tis (font_info,
+                               shiftdown_tone_ad (ucs2tis (cluster[2]), shaping_table));
+           return 3;
+         }
+       else if (is_char_type (cluster[0], BotTailCons) &&
+                is_char_type (cluster[1], BelowVowel) &&
+                is_char_type (cluster[2], AboveDiac|Tone))
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] = thai_make_glyph_tis (font_info,
+                               shiftdown_bv_bd (ucs2tis (cluster[1]), shaping_table));
+           glyph_lists[2] = thai_make_glyph_tis (font_info,
+                               shiftdown_tone_ad (ucs2tis (cluster[2]), shaping_table));
+           return 3;
+         }
+       else
+         {
+           glyph_lists[0] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[0]));
+           glyph_lists[1] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[1]));
+           glyph_lists[2] =
+               thai_make_glyph_tis (font_info, ucs2tis (cluster[2]));
+           return 3;
+         }
+      break;
+
+      default: /* e.g. Lao cluster with below cons + upper/lower vowel + tone */
+       {
+         gint i;
+         for (i = 0; i < num_chrs; i++)
+           glyph_lists[i] = thai_make_glyph_tis (font_info, ucs2tis (cluster[i]));
+         return num_chrs;
+       }
+    }
+
+    return 0;
+}
+
+static gint
+get_glyphs_list (ThaiFontInfo  *font_info,
+                PangoScript     script,
+                gunichar       *cluster,
+                gint           num_chrs,
+                PangoGlyph     *glyph_lists)
+{
+  gint i;
+
+  switch ((int) script)
+    {
+      case PANGO_SCRIPT_THAI:
+       switch (font_info->font_set)
+         {
+           default:
+           case THAI_FONT_NONE:
+             for (i=0; i < num_chrs; i++)
+               glyph_lists[i] = thai_make_unknown_glyph (font_info, cluster[i]);
+             return num_chrs;
+
+           case THAI_FONT_TIS:
+             /* TIS620-0 + Wtt2.0 Extension
+              */
+             return get_adjusted_glyphs_list (font_info, cluster,
+                     num_chrs, glyph_lists, &tis620_0_shape_table);
+
+           case THAI_FONT_TIS_MAC:
+             /* MacIntosh Extension
+              */
+             return get_adjusted_glyphs_list (font_info, cluster,
+                     num_chrs, glyph_lists, &Mac_shape_table);
+
+           case THAI_FONT_TIS_WIN:
+             /* Microsoft Extension
+              */
+             return get_adjusted_glyphs_list (font_info, cluster,
+                     num_chrs, glyph_lists, &Win_shape_table);
+         }
+       break;
+
+      case PANGO_SCRIPT_LAO:
+       return get_adjusted_glyphs_list (font_info, cluster,
+               num_chrs, glyph_lists, &Lao_shape_table);
+
+      default:
+       for (i=0; i < num_chrs; i++)
+         glyph_lists[i] = thai_make_unknown_glyph (font_info, cluster[i]);
+       return num_chrs;
+    }
+
+  return 0;                    /* Quiet GCC */
+}
+
+static void
+add_cluster (ThaiFontInfo      *font_info,
+            PangoScript         script,
+            PangoGlyphString   *glyphs,
+            gint               cluster_start,
+            gunichar           *cluster,
+            gint               num_chrs)
+{
+  PangoGlyph glyphs_list[MAX_GLYPHS];
+  gint num_glyphs;
+  gint i;
+
+  if (isthai (cluster[0]))
+    {
+      num_glyphs = get_glyphs_list(font_info, script, cluster, num_chrs, glyphs_list);
+      for (i=0; i<num_glyphs; i++)
+       add_glyph (font_info, glyphs, cluster_start, glyphs_list[i],
+                  i == 0 ? FALSE : TRUE);
+    }
+  else if (islao (cluster[0]))
+    {
+      num_glyphs = get_glyphs_list(font_info, script, cluster, num_chrs, glyphs_list);
+      for (i=0; i<num_glyphs; i++)
+       add_glyph (font_info, glyphs, cluster_start, glyphs_list[i],
+                  i == 0 ? FALSE : TRUE);
+    }
+  else
+    {
+      g_assert (num_chrs == 1);
+      add_glyph (font_info, glyphs, cluster_start,
+                thai_make_glyph_uni (font_info, cluster[0]),
+                FALSE);
+    }
+}
+
+static gboolean
+is_wtt_composible (gunichar cur_wc, gunichar nxt_wc)
+{
+  switch (TAC_compose_input(cur_wc, nxt_wc))
+    {
+      case 'A':
+      case 'S':
+      case 'R':
+      case 'X':
+       return FALSE;
+
+      case 'C':
+       return TRUE;
+    }
+
+  g_assert_not_reached ();
+  return FALSE;
+}
+
+static const char *
+get_next_cluster(const char    *text,
+                gint           length,
+                gunichar       *cluster,
+                gint           *num_chrs)
+{
+  PangoScript cluster_script = PANGO_SCRIPT_INVALID_CODE, cur_script;
+  const char *p;
+  gint n_chars = 0;
+  gunichar current;
+
+  for (p = text; p < text + length; p = g_utf8_next_char (p))
+    {
+      current = g_utf8_get_char (p);
+      cur_script = pango_script_for_unichar (current);
+      if (cluster_script == PANGO_SCRIPT_INVALID_CODE)
+       cluster_script = cur_script;
+      if (cur_script != cluster_script ||
+         (n_chars > 0 &&
+          !is_wtt_composible (cluster[n_chars - 1], current)))
+       break;
+      cluster[n_chars++] = current;
+    }
+
+  *num_chrs = n_chars;
+  return p;
+}
+
+void
+thai_set_glyphs (ThaiFontInfo     *font_info,
+                const char       *text,
+                gint              length,
+                PangoScript       script,
+                PangoGlyphString *glyphs)
+{
+  gint n_chars;
+  const char *p;
+  const char *log_cluster;
+  gunichar cluster[MAX_CLUSTER_CHRS];
+
+  pango_glyph_string_set_size (glyphs, 0);
+
+  p = text;
+  while (p < text + length)
+    {
+       log_cluster = p;
+       p = get_next_cluster (p, text + length - p, cluster, &n_chars);
+       add_cluster (font_info, script, glyphs, log_cluster - text, cluster, n_chars);
+    }
+}
diff --git a/modules/thai/thai-shaper.h b/modules/thai/thai-shaper.h
new file mode 100755 (executable)
index 0000000..cb2f7ed
--- /dev/null
@@ -0,0 +1,80 @@
+/* Pango
+ * thai-shaper.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Author: Owen Taylor <otaylor@redhat.com>
+ *
+ * Copyright (C) 2004 Theppitak Karoonboonyanan
+ * Copyright (C) 2002 Software and Language Engineering Laboratory, NECTEC
+ * Author: Theppitak Karoonboonyanan <thep@linux.thai.net>
+ *
+ * Copyright (c) 1996-2000 by Sun Microsystems, Inc.
+ * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __THAI_SHAPER_H__
+#define __THAI_SHAPER_H__
+
+typedef struct _ThaiFontInfo ThaiFontInfo;
+
+/* Font encodings we will use
+ */
+typedef enum {
+  THAI_FONT_NONE,
+  THAI_FONT_TIS,
+  THAI_FONT_TIS_MAC,
+  THAI_FONT_TIS_WIN
+} ThaiFontSet;
+
+typedef enum {
+  THAI_FONTINFO_X,
+  THAI_FONTINFO_XFT
+} ThaiFontInfoType;
+
+struct _ThaiFontInfo
+{
+  PangoFont       *font;
+  ThaiFontSet      font_set;
+};
+
+/*
+ * Abstract methods (implemented by each shaper module)
+ */
+PangoGlyph
+thai_get_glyph_tis (ThaiFontInfo *font_info, guchar c);
+
+PangoGlyph
+thai_make_glyph_tis (ThaiFontInfo *font_info, guchar c);
+
+PangoGlyph
+thai_get_glyph_uni (ThaiFontInfo *font_info, gunichar uc);
+
+PangoGlyph
+thai_make_glyph_uni (ThaiFontInfo *font_info, gunichar uc);
+
+PangoGlyph
+thai_make_unknown_glyph (ThaiFontInfo *font_info, gunichar uc);
+
+void
+thai_set_glyphs (ThaiFontInfo     *font_info,
+                const char       *text,
+                gint              length,
+                PangoScript       script,
+                PangoGlyphString *glyphs);
+
+#endif /* __THAI_SHAPER_H__ */
diff --git a/modules/tibetan/Makefile.am b/modules/tibetan/Makefile.am
new file mode 100755 (executable)
index 0000000..96ee422
--- /dev/null
@@ -0,0 +1,22 @@
+include $(top_srcdir)/modules/Module.mk
+
+if HAVE_FREETYPE
+INCLUDES += $(FREETYPE_CFLAGS)
+if INCLUDE_TIBETAN_FC
+noinst_LTLIBRARIES += libpango-tibetan-fc.la
+else
+if DYNAMIC_TIBETAN_FC
+module_LTLIBRARIES += pango-tibetan-fc.la
+endif
+endif
+endif
+
+tibetan_fc_sources = $(common_sources) tibetan-fc.c
+
+pango_tibetan_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_tibetan_fc_la_LIBADD = $(pangoft2libs)
+pango_tibetan_fc_la_SOURCES = $(tibetan_fc_sources)
+libpango_tibetan_fc_la_SOURCES = $(tibetan_fc_sources)
+libpango_tibetan_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_tibetan_fc
+
+-include $(top_srcdir)/git.mk
diff --git a/modules/tibetan/Makefile.in b/modules/tibetan/Makefile.in
new file mode 100644 (file)
index 0000000..a60718d
--- /dev/null
@@ -0,0 +1,709 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/modules/Module.mk
+@HAVE_FREETYPE_TRUE@am__append_1 = $(FREETYPE_CFLAGS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_TIBETAN_FC_TRUE@am__append_2 = libpango-tibetan-fc.la
+@DYNAMIC_TIBETAN_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_TIBETAN_FC_FALSE@am__append_3 = pango-tibetan-fc.la
+subdir = modules/tibetan
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(moduledir)"
+moduleLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(module_LTLIBRARIES) $(noinst_LTLIBRARIES)
+libpango_tibetan_fc_la_LIBADD =
+am__objects_1 = libpango_tibetan_fc_la-tibetan-fc.lo
+am_libpango_tibetan_fc_la_OBJECTS = $(am__objects_1)
+libpango_tibetan_fc_la_OBJECTS = $(am_libpango_tibetan_fc_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@@INCLUDE_TIBETAN_FC_TRUE@am_libpango_tibetan_fc_la_rpath =
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+pango_tibetan_fc_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__objects_2 = tibetan-fc.lo
+am_pango_tibetan_fc_la_OBJECTS = $(am__objects_2)
+pango_tibetan_fc_la_OBJECTS = $(am_pango_tibetan_fc_la_OBJECTS)
+@DYNAMIC_TIBETAN_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_TIBETAN_FC_FALSE@am_pango_tibetan_fc_la_rpath = -rpath \
+@DYNAMIC_TIBETAN_FC_TRUE@@HAVE_FREETYPE_TRUE@@INCLUDE_TIBETAN_FC_FALSE@        $(moduledir)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_tibetan_fc_la_SOURCES) \
+       $(pango_tibetan_fc_la_SOURCES)
+DIST_SOURCES = $(libpango_tibetan_fc_la_SOURCES) \
+       $(pango_tibetan_fc_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+pangolibs = \
+       $(GLIB_LIBS)                                                    \
+       $(top_builddir)/pango/libpango-$(PANGO_API_VERSION).la
+
+pangoxlibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangox-$(PANGO_API_VERSION).la         \
+       $(X_LIBS)
+
+pangoft2libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangoft2-$(PANGO_API_VERSION).la       \
+       $(FREETYPE_LIBS)
+
+pangowin32libs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangowin32-$(PANGO_API_VERSION).la
+
+pangoatsuilibs = \
+       $(pangolibs)                                                    \
+       $(top_builddir)/pango/libpangocairo-$(PANGO_API_VERSION).la
+
+INCLUDES = -DG_LOG_DOMAIN=\"Pango\" -DPANGO_ENABLE_ENGINE \
+       $(PANGO_DEBUG_FLAGS) -I$(top_srcdir) -I$(top_srcdir)/pango \
+       $(GLIB_CFLAGS) $(am__append_1)
+moduledir = $(libdir)/pango/$(PANGO_MODULE_VERSION)/modules
+module_LTLIBRARIES = $(am__append_3)
+noinst_LTLIBRARIES = $(am__append_2)
+tibetan_fc_sources = $(common_sources) tibetan-fc.c
+pango_tibetan_fc_la_LDFLAGS = -module $(MODULE_LIBTOOL_OPTIONS)
+pango_tibetan_fc_la_LIBADD = $(pangoft2libs)
+pango_tibetan_fc_la_SOURCES = $(tibetan_fc_sources)
+libpango_tibetan_fc_la_SOURCES = $(tibetan_fc_sources)
+libpango_tibetan_fc_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_tibetan_fc
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/modules/Module.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  modules/tibetan/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  modules/tibetan/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-moduleLTLIBRARIES: $(module_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(moduledir)" || $(mkdir_p) "$(DESTDIR)$(moduledir)"
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(moduleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(moduledir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-moduleLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(moduledir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(moduledir)/$$p"; \
+       done
+
+clean-moduleLTLIBRARIES:
+       -test -z "$(module_LTLIBRARIES)" || rm -f $(module_LTLIBRARIES)
+       @list='$(module_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-tibetan-fc.la: $(libpango_tibetan_fc_la_OBJECTS) $(libpango_tibetan_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_libpango_tibetan_fc_la_rpath) $(libpango_tibetan_fc_la_LDFLAGS) $(libpango_tibetan_fc_la_OBJECTS) $(libpango_tibetan_fc_la_LIBADD) $(LIBS)
+pango-tibetan-fc.la: $(pango_tibetan_fc_la_OBJECTS) $(pango_tibetan_fc_la_DEPENDENCIES) 
+       $(LINK) $(am_pango_tibetan_fc_la_rpath) $(pango_tibetan_fc_la_LDFLAGS) $(pango_tibetan_fc_la_OBJECTS) $(pango_tibetan_fc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpango_tibetan_fc_la-tibetan-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tibetan-fc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpango_tibetan_fc_la-tibetan-fc.lo: tibetan-fc.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_tibetan_fc_la_CFLAGS) $(CFLAGS) -MT libpango_tibetan_fc_la-tibetan-fc.lo -MD -MP -MF "$(DEPDIR)/libpango_tibetan_fc_la-tibetan-fc.Tpo" -c -o libpango_tibetan_fc_la-tibetan-fc.lo `test -f 'tibetan-fc.c' || echo '$(srcdir)/'`tibetan-fc.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpango_tibetan_fc_la-tibetan-fc.Tpo" "$(DEPDIR)/libpango_tibetan_fc_la-tibetan-fc.Plo"; else rm -f "$(DEPDIR)/libpango_tibetan_fc_la-tibetan-fc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='tibetan-fc.c' object='libpango_tibetan_fc_la-tibetan-fc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpango_tibetan_fc_la_CFLAGS) $(CFLAGS) -c -o libpango_tibetan_fc_la-tibetan-fc.lo `test -f 'tibetan-fc.c' || echo '$(srcdir)/'`tibetan-fc.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/../../modules
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(moduledir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-moduleLTLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-moduleLTLIBRARIES
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-moduleLTLIBRARIES
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-moduleLTLIBRARIES clean-noinstLTLIBRARIES \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-moduleLTLIBRARIES \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am uninstall-moduleLTLIBRARIES
+
+
+included-modules: $(noinst_LTLIBRARIES)
+dynamic-modules: $(module_LTLIBRARIES)
+
+.PHONY: included-modules dynamic-modules
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/modules/tibetan/tibetan-fc.c b/modules/tibetan/tibetan-fc.c
new file mode 100755 (executable)
index 0000000..4e89416
--- /dev/null
@@ -0,0 +1,574 @@
+/* Pango
+ * tibetan-fc.c: Shaper for Tibetan script
+ *
+ * Copyright (C) 2005 DIT, Government of Bhutan <http://www.dit.gov.bt>
+ * Contact person : Pema Geyleg <pema_geyleg@druknet.bt>
+ *
+ *  Based on code from khmer shapers developed by Jens Herden
+ *  <jens@tibetanos.inf > and Javier Sola <javier@tibetanos.info>
+ *
+ * Based on code from other shapers
+ * Copyright (C) 1999-2004 Red Hat Software
+ * Author: Owen Taylor <otaylor@redhat.com>
+
+ * Partially based on Indic shaper
+ * Copyright (C) 2001, 2002 IBM Corporation
+ * Author: Eric Mader <mader@jtcsv.com>
+ *
+ * The first module for Tibetan shaper was developed by Mr. Karunakar under
+ * PanLocalization project.
+ * Mr. Chris Fynn, Mr.Javier Sola, Mr. Namgay Thinley were involved
+ * while developing this shaper.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The license on the original Indic shaper code is as follows:
+ *
+ *  Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, and/or sell copies of the
+ * Software, and to permit persons to whom the Software is furnished
+ * to do so, provided that the above copyright notice(s) and this
+ * permission notice appear in all copies of the Software and that
+ * both the above copyright notice(s) and this permission notice
+ * appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR
+ * ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization of the copyright holder.
+ */
+#include "config.h"
+#include <string.h>
+
+#include "pango-engine.h"
+#include "pango-ot.h"
+#include "pango-utils.h"
+#include "pangofc-font.h"
+
+
+#define SCRIPT_ENGINE_NAME "TibetanScriptEngineFc"
+#define RENDER_TYPE PANGO_RENDER_TYPE_FC
+
+
+typedef PangoEngineShape      TibetanEngineFc;
+typedef PangoEngineShapeClass TibetanEngineFcClass ;
+
+
+static PangoEngineScriptInfo tibetan_scripts[] =
+{
+  { PANGO_SCRIPT_TIBETAN, "*" }
+};
+
+static PangoEngineInfo script_engines[] =
+{
+  {
+    SCRIPT_ENGINE_NAME,
+    PANGO_ENGINE_TYPE_SHAPE,
+    RENDER_TYPE,
+    tibetan_scripts, G_N_ELEMENTS (tibetan_scripts)
+  }
+};
+
+
+/*
+ * Vocabulary
+ *     Base ->         A consonant in its full (not subscript) form. It is the
+ *                  center of the syllable, it can be souranded by subjoined consonants, vowels,
+ *                  signs... but there is only one base in a stack, it has to be coded as
+ *                  the first character of the syllable.Included here are also groups of base + subjoined
+ *                   which are represented by one single code point in unicode (e.g. 0F43) Also other characters
+ *                   that might take subjoined consonants or other combining characters.
+ *     Subjoined ->    Subjoined consonants and groups of subjoined consonants which have a single code-point
+ *                  to repersent the group (even if each subjoined consonant is represented independently
+ *                  by anothe code-point
+ *     Tsa Phru -->    Tsa Phru character, Bhutanese people will always place it right after the base, but sometimes, due to
+ *                  "normalization" is placed after all the subjoined consonants, and it is also permitted there.
+ *     A Chung  Vowel lengthening mark --> . 0F71 It is placed after the base and any subjoined consonants but before any vowels
+ *     Precomposed Sanskrit vowels --> The are combinations of subjoined consonants + vowels that have been assigned
+ *                  a given code-point (in spite of each single part of them having also a code-point
+ *                  They are avoided, and users are encouraged to use the combination of code-points that
+ *                  represents the same sound instead of using this combined characters. This is included here
+ *                  for compatibility with possible texts that use them (they are not in the Dzongkha keyboard).
+ *     Halanta ->      The Halanta or Virama character 0F84 indicates that a consonant should not use its inheernt vowel,
+ *                  in spite of not having other vowels present. It is usually placed immediatly after a base consonant,
+ *                  but in some special cases it can also be placed after a subjoined consonant, so this is also
+ *                  permitted in this algorithm. (Halanta is always displayed in Tibetan not used as a connecting char)
+ *
+ *     Subjoined vowels -> Dependent vowels (matras) placed below the base and below all subjoined consonants. There
+ *                  might be as much as three subjoined vowels in a given stack (only one in general text, but up
+ *                  to three for abreviations, they have to be permitted).
+ *     Superscript vowels -> There are three superscript vowels, and they can be repeated or combined (up to three
+ *                  times. They can combine with subjoined vowels, and are always coded after these.
+ *     Anusvara -->    Nasalisation sign. Traditioinally placed in absence of vowels, but also after vowels. In some
+ *                  special cases it can be placed before a vowel, so this is also permitted
+ *     Candrabindu ->  Forms of the Anusvara with different glyphs (and different in identity) which can be placed
+ *                  without vowel or after the vowel, but never before. Cannot combine with Anusvara.
+ *     Stress marks -> Marks placed above or below a syllable, affecting the whole syllable. They are combining
+ *                  marks, so they have to be attached to a specific stack. The are using to emphasise a syllable.
+ *
+ *     Digits ->       Digits are not considered as non-combining characters because there are a few characters which
+ *                  combine with them, so they have to be considered independently.
+ *     Digit combining marks -> dependent marks that combine with digits.
+ *
+ *     TODO
+ *     There are a number of characters in the CJK block that are used in Tibetan script, two of these are symbols
+ *     are used as bases for combining glyphs, and have not been encoded in Tibetan. As these characters are outside
+ *     of the tibetan block, they have not been treated in this program.
+*/
+
+
+enum TibetanCharClassValues
+{
+       CC_RESERVED             =  0, /* Non Combining Characters*/
+       CC_BASE                 =  1, /* Base Consonants, Base Consonants with Subjoined attached in code point, Sanskrit base marks*/
+       CC_SUBJOINED            =  2, /* Subjoined Consonats, combination of more than Subjoined Consonants in the code point*/
+       CC_TSA_PHRU             =  3, /* Tsa-Phru character 0F39*/
+       CC_A_CHUNG              =  4, /* Vowel Lenthening a-chung mark 0F71*/
+       CC_COMP_SANSKRIT        =  5, /* Precomposed Sanskrit vowels including Subjoined characters and vowels*/
+       CC_HALANTA              =  6, /* Halanta Character 0F84*/
+       CC_BELOW_VOWEL          =  7, /* Subjoined vowels*/
+       CC_ABOVE_VOWEL          =  8, /* Superscript vowels*/
+       CC_ANUSVARA             =  9, /* Tibetan sign Rjes Su Nga Ro 0F7E*/
+       CC_CANDRABINDU          = 10, /* Tibetan sign Sna Ldan and Nyi Zla Naa Da 0F82, 0F83*/
+       CC_VISARGA              = 11, /* Tibetan sign Rnam Bcad (0F7F)*/
+       CC_ABOVE_S_MARK         = 12, /* Stress Marks placed above the text*/
+       CC_BELOW_S_MARK         = 13, /* Stress Marks placed below the text*/
+       CC_DIGIT                = 14, /* Dzongkha Digits*/
+       CC_PRE_DIGIT_MARK       = 15, /* Mark placed before the digit*/
+       CC_POST_BELOW_DIGIT_M   = 16, /* Mark placed below or after the digit*/
+       CC_COUNT                = 17  /* This is the number of character classes*/
+};
+
+
+enum TibetanCharClassFlags
+{
+       CF_CLASS_MASK    = 0x0000FFFF,
+
+       CF_DOTTED_CIRCLE = 0x04000000,  /* add a dotted circle if a character with this flag is the first in a syllable*/
+       CF_DIGIT         = 0x01000000,  /* flag to speed up comparaisson*/
+       CF_PREDIGIT      = 0x02000000,  /* flag to detect pre-digit marks for reordering*/
+
+       /* position flags*/
+       CF_POS_BEFORE    = 0x00080000,
+       CF_POS_BELOW     = 0x00040000,
+       CF_POS_ABOVE     = 0x00020000,
+       CF_POS_AFTER     = 0x00010000,
+       CF_POS_MASK      = 0x000f0000
+};
+
+
+/* Characters that get refrered to by name */
+enum TibetanChar
+{
+  C_DOTTED_CIRCLE = 0x25CC,
+  C_PRE_NUMBER_MARK = 0x0F3F
+};
+
+
+enum
+{
+    /* simple classes, they are used in the statetable (in this file) to control the length of a syllable
+     * they are also used to know where a character should be placed (location in reference to the base character)
+     * and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
+     * indicate error in syllable construction
+     */
+    _xx = CC_RESERVED,
+    _ba = CC_BASE,
+    _sj = CC_SUBJOINED | CF_DOTTED_CIRCLE | CF_POS_BELOW,
+    _tp = CC_TSA_PHRU  | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
+    _ac = CC_A_CHUNG |  CF_DOTTED_CIRCLE | CF_POS_BELOW,
+    _cs = CC_COMP_SANSKRIT | CF_DOTTED_CIRCLE | CF_POS_BELOW,
+    _ha = CC_HALANTA | CF_DOTTED_CIRCLE | CF_POS_BELOW,
+    _bv = CC_BELOW_VOWEL | CF_DOTTED_CIRCLE | CF_POS_BELOW,
+    _av = CC_ABOVE_VOWEL | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
+    _an = CC_ANUSVARA | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
+    _cb = CC_CANDRABINDU | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
+    _vs = CC_VISARGA | CF_DOTTED_CIRCLE| CF_POS_AFTER,
+    _as = CC_ABOVE_S_MARK | CF_DOTTED_CIRCLE | CF_POS_ABOVE,
+    _bs = CC_BELOW_S_MARK | CF_DOTTED_CIRCLE | CF_POS_BELOW,
+    _di = CC_DIGIT | CF_DIGIT,
+    _pd = CC_PRE_DIGIT_MARK | CF_DOTTED_CIRCLE | CF_PREDIGIT | CF_POS_BEFORE ,
+    _bd = CC_POST_BELOW_DIGIT_M | CF_DOTTED_CIRCLE | CF_POS_AFTER
+};
+
+
+/* Character class: a character class value
+ * ORed with character class flags.
+ */
+typedef glong TibetanCharClass;
+/*_xx Non Combining characters*/
+/*_ba Base Consonants*/
+/*_sj Subjoined consonants*/
+/*_tp Tsa - phru*/
+/*_ac A-chung, Vowel Lengthening mark*/
+/*_cs Precomposed Sanskrit vowel + subjoined consonants*/
+/*_ha Halanta/Virama*/
+/*_bv Below vowel*/
+/*_av above vowel*/
+/*_an Anusvara*/
+/*_cb Candrabindu*/
+/*_vs Visaraga/Post mark*/
+/*_as Upper Stress marks*/
+/*_bs Lower Stress marks*/
+/*_di Digit*/
+/*_pd Number pre combining, Needs reordering*/
+/*_bd Other number combining marks*/
+
+
+static const TibetanCharClass tibetanCharClasses[] =
+{
+  /* 0    1    2    3    4    5    6    7    8    9   a     b   c    d     e   f*/
+    _xx, _ba, _xx, _xx, _ba, _ba, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0F00 - 0F0F 0*/
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _bd, _bd, _xx, _xx, _xx, _xx, _xx, _xx, /* 0F10 - 0F1F 1*/
+    _di, _di, _di, _di, _di, _di, _di, _di, _di, _di, _xx, _xx, _xx, _xx, _xx, _xx, /* 0F20 - 0F2F 2*/
+    _xx, _xx, _xx, _xx, _xx, _bs, _xx, _bs, _xx, _tp, _xx, _xx, _xx, _xx, _bd, _pd, /* 0F30 - 0F3F 3*/
+    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _ba, _ba, _ba, _ba, _ba, _ba, _ba, /* 0F40 - 0F4F 4*/
+    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, /* 0F50 - 0F5F 5*/
+    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, _xx, /* 0F60 - 0F6F 6*/
+    _xx, _ac, _av, _cs, _bv, _bv, _cs, _cs, _cs, _cs, _av, _av, _av, _av, _an, _vs, /* 0F70 - 0F7F 7*/
+    _av, _cs, _cb, _cb, _ha, _xx, _as, _as, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, /* 0F80 - 0F8F 8*/
+    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, _sj, _sj, _sj, _sj, _sj, /* 0F90 - 0F9F 9*/
+    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, /* 0FA0 - 0FAF a*/
+    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, /* 0FB0 - 0FBF b*/
+    _xx, _xx, _xx, _xx, _xx, _xx, _bs, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0FC0 - 0FCF c*/
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0FD0 - 0FDF  d*/
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0FE0 - 0FEF e*/
+    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0FF0 - 0FFF f*/
+};
+
+/* this define must reflect the range of tibetanCharClasses */
+/*First Tibetan Character*/
+#define firstChar 0x0F00
+/*Last Tibetan Character*/
+#define lastChar 0x0FFF
+
+/* The stateTable is used to calculate the end (the length) of a well
+ * formed Tibetan Stack
+ *
+ * Each horizontal line is ordered exactly the same way as the values in TibetanClassTable
+ * CharClassValues.This coincidence of values allows the follow up of the table.
+ *
+ * Each line corresponds to a state, which does not necessarily need to be a type
+ * of component... for example, state 2 is a base, with is always a first character
+ * in the Stack but the state could be produced a consonant of any type when
+ * it is the first character that is analysed (in ground state).
+ */
+
+static const gint8 tibetanStateTable[][CC_COUNT] =
+{
+    /*Dzongkha state table*/
+    /*xx  ba  sj  tp  ac  cs  ha  bv  av  an  cb  vs  as  bs  di  pd  bd*/
+    { 1,  2,  4,  3,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, 20, 21, 21,}, /*  0 - ground state*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, /*  1 - exit state (or sign to the right of the syllable)*/
+    {-1, -1,  4,  3,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /*  2 - Base consonant*/
+    {-1, -1,  5, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /*  3 - Tsa phru after base*/
+    {-1, -1,  4,  6,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /*  4 - Subjoined consonant after base*/
+    {-1, -1,  5, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /*  5 - Subjoined consonant after tsa phru*/
+    {-1, -1, -1, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /*  6 - Tsa phru after subjoined consonant*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, /*  7 - Pre Composed Sanskrit*/
+    {-1, -1, -1, -1, -1, -1, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /*  8 - A-chung*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, -1, 19, 19, -1, -1, -1,}, /*  9 - Halanta*/
+    {-1, -1, -1, -1, -1, -1, -1, 11, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /* 10 - below vowel 1*/
+    {-1, -1, -1, -1, -1, -1, -1, 12, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /* 11 - below vowel 2*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, /* 12 - below vowel 3*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 17, 17, 18, 19, 19, -1, -1, -1,}, /* 13 - Anusvara before vowel*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 17, 18, 19, 19, -1, -1, -1,}, /* 14 - above vowel 1*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, 16, 17, 17, 18, 19, 19, -1, -1, -1,}, /* 15 - above vowel 2*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 18, 19, 19, -1, -1, -1,}, /* 16 - above vowel 3*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, 19, -1, -1, -1,}, /* 17 - Anusvara or Candrabindu after vowel*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, /* 18 - Visarga*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, /* 19 - strss mark*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21,}, /* 20 - digit*/
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, /* 21 - digit mark*/
+};
+
+
+enum property_flags
+{
+  abvf = 0x0001,
+  pref = 0x0002,
+  pstf = 0x0004,
+  blwf = 0x0008,
+
+  pres = 0x0010,
+  blws = 0x0020,
+  abvs = 0x0040,
+  psts = 0x0080,
+  clig = 0x0100,
+
+  dist = 0x0200,
+  blwm = 0x0400,
+  abvm = 0x0800,
+};
+
+
+enum properties
+{
+  blwf_p    = /*(blwf | blws | clig | dist | blwm)*/ (abvf | pref | pstf | pres | abvs | psts | abvm),
+  pstf_p    = /*(blwf | blws | pref | pres | pstf | psts | clig | dist | blwm)*/ (abvf | abvs | abvm),
+  abvf_p    = /*(abvf | abvs | clig | dist | abvm)*/ (pref | pstf | blwf | pres | blws | psts | blwm),
+  pref_p    = /*(pref | pres | clig | dist)*/ (abvf | pstf | blwf | blws | abvs | psts | blwm | abvm),
+  default_p = /*(pres | blws | clig | dist | abvm | blwm)*/ (pref | blwf |abvf | pstf | abvs | psts)
+};
+
+
+/* Below we define how a character in the input string is either in the tibetanCharClasses table
+ * (in which case we get its type back), or an unknown object in which case we get _xx (CC_RESERVED) back
+ */
+static TibetanCharClass
+get_char_class (gunichar ch)
+{
+
+  if (ch < firstChar || ch > lastChar)
+    return CC_RESERVED;
+
+  return tibetanCharClasses[ch - firstChar];
+}
+
+
+/* Given an input string of characters and a location in which to start looking
+ * calculate, using the state table, which one is the last character of the syllable
+ * that starts in the starting position.
+ */
+static glong
+find_syllable (const gunichar *chars,
+              glong           start,
+              glong           char_count)
+{
+  glong cursor = start;
+  gint8 state = 0;
+  TibetanCharClass charClass;
+
+  while (cursor < char_count)
+    {
+      charClass = get_char_class (chars[cursor]) & CF_CLASS_MASK;
+      state = tibetanStateTable[state][charClass];
+
+      if (state < 0)
+       break;
+
+      cursor += 1;
+    }
+
+  return cursor;
+}
+
+static const PangoOTFeatureMap gsub_features[] =
+{
+  {"ccmp", PANGO_OT_ALL_GLYPHS},
+  {"locl", PANGO_OT_ALL_GLYPHS},
+  {"blws", blws},
+  {"abvs", abvs},
+  {"psts", psts},
+  {"clig", clig},
+  {"calt", PANGO_OT_ALL_GLYPHS}
+};
+
+static const PangoOTFeatureMap gpos_features[] =
+{
+  {"dist", dist},
+  {"blwm", blwm},
+  {"abvm", abvm},
+  {"kern", PANGO_OT_ALL_GLYPHS},
+  {"mark", PANGO_OT_ALL_GLYPHS},
+  {"mkmk", PANGO_OT_ALL_GLYPHS}
+};
+
+static PangoGlyph
+get_index (PangoFcFont *fc_font, gunichar wc)
+{
+  PangoGlyph index = pango_fc_font_get_glyph (fc_font, wc);
+  if (!index)
+    index = PANGO_GET_UNKNOWN_GLYPH ( wc);
+  return index;
+}
+
+
+static void
+tibetan_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                   PangoFont        *font,
+                   const char       *text,
+                   int               length,
+                   const PangoAnalysis *analysis,
+                   PangoGlyphString *glyphs)
+{
+  PangoFcFont *fc_font;
+  FT_Face face;
+  PangoOTRulesetDescription desc;
+  const PangoOTRuleset *ruleset;
+  PangoOTBuffer *buffer;
+  glong n_chars;
+  gunichar *wcs;
+  const char *p;
+  int i;
+  glong syllable;
+  TibetanCharClass charClass;
+  glong cursor = 0;
+
+  g_return_if_fail (font != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (analysis != NULL);
+
+  fc_font = PANGO_FC_FONT (font);
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return;
+
+  buffer = pango_ot_buffer_new (fc_font);
+  pango_ot_buffer_set_rtl (buffer, analysis->level % 2 != 0);
+
+  wcs = g_utf8_to_ucs4_fast (text, length, &n_chars);
+
+  p = text;
+  /* This loop only exits when we reach the end of a run, which may contain
+   * several syllables.
+   */
+  while (cursor < n_chars)
+    {
+      syllable = find_syllable (wcs, cursor, n_chars);
+
+      /* shall we add a dotted circle?
+      * If in the position in which the base should be (first char in the string) there is
+      * a character that has the Dotted circle flag (a character that cannot be a base)
+      * then write a dotted circle
+      */
+      if (get_char_class (wcs[cursor]) & CF_DOTTED_CIRCLE)
+       {
+         pango_ot_buffer_add_glyph (buffer, get_index (fc_font, C_DOTTED_CIRCLE), default_p, p - text);
+       }
+
+      /* If it encounters a digit followed by number pre combining mark, then reorder the two characters
+      * coeng Ro if they are present
+      */
+      for (i = cursor; i < syllable; i += 1)
+       {
+         charClass = get_char_class (wcs[i]);
+
+         if ((charClass & CF_DIGIT )
+             && ( get_char_class (wcs[i+1]) & CF_PREDIGIT))
+          {
+                        pango_ot_buffer_add_glyph (buffer, get_index (fc_font, C_PRE_NUMBER_MARK), pref_p, p - text);
+                        p = g_utf8_next_char (p);
+                        pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), pref_p, p - text);
+                              i += 1;
+        } else {
+         switch (charClass & CF_POS_MASK)
+           {
+             case CF_POS_ABOVE :
+                            pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), abvf_p, p - text);
+                            break;
+
+             case CF_POS_AFTER :
+                            pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), pstf_p, p - text);
+                            break;
+
+             case CF_POS_BELOW :
+                            pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), blwf_p, p - text);
+                            break;
+
+             default:
+                  /* default - any other characters  */
+                 pango_ot_buffer_add_glyph (buffer, get_index (fc_font, wcs[i]), default_p, p - text);
+                 break;
+           } /* switch */
+          }
+
+         p = g_utf8_next_char (p);
+       } /* for */
+
+      cursor = syllable; /* move the pointer to the start of next syllable */
+    } /* while */
+
+  desc.script = analysis->script;
+  desc.language = analysis->language;
+
+  desc.n_static_gsub_features = G_N_ELEMENTS (gsub_features);
+  desc.static_gsub_features = gsub_features;
+  desc.n_static_gpos_features = G_N_ELEMENTS (gpos_features);
+  desc.static_gpos_features = gpos_features;
+
+  /* TODO populate other_features from analysis->extra_attrs */
+  desc.n_other_features = 0;
+  desc.other_features = NULL;
+
+  ruleset = pango_ot_ruleset_get_for_description (pango_ot_info_get (face), &desc);
+
+  pango_ot_ruleset_substitute (ruleset, buffer);
+  pango_ot_ruleset_position (ruleset, buffer);
+  pango_ot_buffer_output (buffer, glyphs);
+
+  g_free (wcs);
+  pango_ot_buffer_destroy (buffer);
+
+  pango_fc_font_unlock_face (fc_font);
+}
+
+
+static void
+tibetan_engine_fc_class_init (PangoEngineShapeClass *class)
+{
+  class->script_shape = tibetan_engine_shape;
+}
+
+PANGO_ENGINE_SHAPE_DEFINE_TYPE (TibetanEngineFc, tibetan_engine_fc,
+                               tibetan_engine_fc_class_init, NULL)
+
+
+void
+PANGO_MODULE_ENTRY(init) (GTypeModule *module)
+{
+  tibetan_engine_fc_register_type (module);
+}
+
+
+void
+PANGO_MODULE_ENTRY(exit) (void)
+{
+}
+
+
+void
+PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines,
+                         int              *n_engines)
+{
+  *engines = script_engines;
+  *n_engines = G_N_ELEMENTS (script_engines);
+}
+
+
+PangoEngine *
+PANGO_MODULE_ENTRY(create) (const char *id)
+{
+  if (!strcmp (id, SCRIPT_ENGINE_NAME))
+    return g_object_new (tibetan_engine_fc_type, NULL);
+  else
+    return NULL;
+}
diff --git a/omf.make b/omf.make
new file mode 100644 (file)
index 0000000..cb7acba
--- /dev/null
+++ b/omf.make
@@ -0,0 +1,61 @@
+# 
+# No modifications of this Makefile should be necessary.
+#
+# This file contains the build instructions for installing OMF files.  It is
+# generally called from the makefiles for particular formats of documentation.
+#
+# Note that you must configure your package with --localstatedir=/var
+# so that the scrollkeeper-update command below will update the database
+# in the standard scrollkeeper directory.
+#
+# If it is impossible to configure with --localstatedir=/var, then
+# modify the definition of scrollkeeper_localstate_dir so that
+# it points to the correct location. Note that you must still use 
+# $(localstatedir) in this or when people build RPMs it will update
+# the real database on their system instead of the one under RPM_BUILD_ROOT.
+#
+# Note: This make file is not incorporated into xmldocs.make because, in
+#       general, there will be other documents install besides XML documents
+#       and the makefiles for these formats should also include this file.
+#
+# About this file:
+#      This file was derived from scrollkeeper_example2, a package
+#      illustrating how to install documentation and OMF files for use with
+#      ScrollKeeper 0.3.x and 0.4.x.  For more information, see:
+#              http://scrollkeeper.sourceforge.net/    
+#      Version: 0.1.3 (last updated: March 20, 2002)
+#
+
+omf_dest_dir=$(datadir)/omf/@PACKAGE@
+scrollkeeper_localstate_dir = $(localstatedir)/scrollkeeper
+
+# At some point, it may be wise to change to something like this:
+# scrollkeeper_localstate_dir = @SCROLLKEEPER_STATEDIR@
+
+omf: omf_timestamp
+
+omf_timestamp: $(omffile)
+       -for file in $(omffile); do \
+         scrollkeeper-preinstall $(docdir)/$(docname).xml $(srcdir)/$$file $$file.out; \
+       done; \
+       touch omf_timestamp
+
+install-data-hook-omf:
+       $(mkinstalldirs) $(DESTDIR)$(omf_dest_dir)
+       for file in $(omffile); do \
+               $(INSTALL_DATA) $$file.out $(DESTDIR)$(omf_dest_dir)/$$file; \
+       done
+       -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir) -o $(DESTDIR)$(omf_dest_dir)
+
+uninstall-local-omf:
+       -for file in $(srcdir)/*.omf; do \
+               basefile=`basename $$file`; \
+               rm -f $(DESTDIR)$(omf_dest_dir)/$$basefile; \
+       done
+       -rmdir $(DESTDIR)$(omf_dest_dir)
+       -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir)
+
+clean-local-omf:
+       -for file in $(omffile); do \
+               rm -f $$file.out; \
+       done
diff --git a/packaging/pango.spec b/packaging/pango.spec
new file mode 100644 (file)
index 0000000..843cdde
--- /dev/null
@@ -0,0 +1,122 @@
+%define freetype_version 2.1.3-3
+%define fontconfig_version 2.6
+%define cairo_version 1.7.6
+
+Name:       pango
+Summary:    System for layout and rendering of internationalized text
+Version:    1.26.1
+Release:    1
+Group:      System/GUI/GNOME
+License:    LGPLv2+
+URL:        http://www.pango.org
+Source0:    http://download.gnome.org/sources/pango/1.26/pango-%{version}.tar.gz
+Patch0: 10_scan-module-files-in-dirs.patch
+Patch1: 11_module-files-append-module-files-d.patch
+Patch2: 12_module-files-append-compat-module-files-d.patch
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
+Requires(post): /usr/bin/pango-querymodules
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  pkgconfig(freetype2) >= %{freetype_version}
+BuildRequires:  pkgconfig(fontconfig) >= %{fontconfig_version}
+BuildRequires:  pkgconfig(xt)
+BuildRequires:  pkgconfig(xrender)
+BuildRequires:  pkgconfig(x11)
+BuildRequires:  pkgconfig(xext)
+BuildRequires:  pkgconfig(xft)
+BuildRequires:  pkgconfig(cairo) >= %{cairo_version}
+
+%description
+Pango is a library for laying out and rendering of text, with an emphasis
+on internationalization. Pango can be used anywhere that text layout is needed,
+though most of the work on Pango so far has been done in the context of the
+GTK+ widget toolkit. Pango forms the core of text and font handling for GTK+.
+
+Pango is designed to be modular; the core Pango layout engine can be used
+with different font backends.
+
+The integration of Pango with Cairo provides a complete solution with high
+quality text handling and graphics rendering.
+
+
+%package -n libpango
+Summary:    Pango Library
+Group:      System/Libraries
+
+%description -n libpango
+Pango is a library for laying out and rendering of text, with an emphasis
+on internationalization. Pango can be used anywhere that text layout is needed,
+though most of the work on Pango so far has been done in the context of the
+GTK+ widget toolkit. Pango forms the core of text and font handling for GTK+.
+
+Pango is designed to be modular; the core Pango layout engine can be used
+with different font backends.
+
+The integration of Pango with Cairo provides a complete solution with high
+quality text handling and graphics rendering.
+
+
+%package -n libpango-devel
+Summary:    Development files for pango
+Group:      Development/Libraries
+Requires:   lib%{name} = %{version}-%{release}
+
+%description -n libpango-devel
+The pango-devel package includes the header files and developer documentation
+for the pango package.
+
+%prep
+%setup -q 
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+
+%build
+
+%configure --disable-static \
+        --sysconfdir=/etc \
+        --with-x \
+        --enable-freetype \
+        --disable-glibtest \
+        --enable-explicit-deps=yes \
+        --enable-gtk-doc=no \
+        ac_cv_lib_cairo_cairo_xlib_surface_create=yes \
+        ac_cv_lib_cairo_cairo_ft_scaled_font_lock_face=yes
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+rm -rf $RPM_BUILD_ROOT/usr/share/gtk-doc
+rm -rf $RPM_BUILD_ROOT/usr/share/man
+
+touch $RPM_BUILD_ROOT%{_sysconfdir}/pango/pango.modules
+mkdir -p %{buildroot}/etc/pango
+
+
+
+%post -n libpango -p /sbin/ldconfig
+%{_bindir}/pango-querymodules > %{_sysconfdir}/pango/pango.modules
+
+%postun -n libpango -p /sbin/ldconfig
+
+%files
+%{_bindir}/pango-querymodules
+%{_bindir}/pango-view
+%dir %{_sysconfdir}/pango
+%config %{_sysconfdir}/pango/pangox.aliases
+%ghost %{_sysconfdir}/pango/pango.modules
+
+
+%files -n libpango
+%{_libdir}/libpango*-*.so.*
+%{_libdir}/pango
+%dir /etc/pango
+
+
+%files -n libpango-devel
+%{_libdir}/libpango*.so
+%{_includedir}/*
+%{_libdir}/pkgconfig/*.pc
+
diff --git a/pango-uninstalled.pc.in b/pango-uninstalled.pc.in
new file mode 100755 (executable)
index 0000000..662d545
--- /dev/null
@@ -0,0 +1,6 @@
+Name: Pango Uninstalled
+Description: Internationalized text handling, Not Installed
+Version: @VERSION@
+Requires: glib-2.0,gobject-2.0,gmodule-no-export-2.0
+Libs: ${pc_top_builddir}/${pcfiledir}/pango/libpango-@PANGO_API_VERSION@.la @PKGCONFIG_MATH_LIBS@
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/pango-view/GLASS.txt b/pango-view/GLASS.txt
new file mode 100755 (executable)
index 0000000..8eec334
--- /dev/null
@@ -0,0 +1,168 @@
+I Can Eat Glass
+In various languages
+
+Adopted from http://www.columbia.edu/kermit/utf8.html#glass
+Do not edit.  Submit additions to the URL above and resynch.
+
+Permission is granted by the Kermit project (http://www.columbia.edu/kermit/)
+to redistribute this file, with absolutely no warranty.
+
+
+
+Sanskrit:      काचं शक्नोम्यत्तुम् । नोपहिनस्ति माम् ॥
+Sanskrit (standard transcription):     kācaṃ śaknomyattum; nopahinasti mām.
+Classical Greek:       ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει.
+Greek: Μπορώ να φάω σπασμένα γυαλιά χωρίς να πάθω τίποτα.
+Etruscan:      (NEEDED)
+Latin: Vitrum edere possum; mihi non nocet.
+Old French:    Je puis mangier del voirre. Ne me nuit.
+French:        Je peux manger du verre, ça ne me fait pas de mal.
+Provençal / Occitan:  Pòdi manjar de veire, me nafrariá pas.
+Québécois:   J'peux manger d'la vitre, ça m'fa pas mal.
+Walloon:       Dji pou magnî do vêre, çoula m' freut nén må.
+Champenois:    (NEEDED)
+Lorrain:       (NEEDED)
+Picard:        Ch'peux mingi du verre, cha m'foé mie n'ma.
+Corsican:      (NEEDED)
+Kreyòl Ayisyen:       Mwen kap manje vè, li pa blese'm.
+Basque:        Kristala jan dezaket, ez dit minik ematen.
+Catalan:       Puc menjar vidre que no em fa mal.
+Spanish:       Puedo comer vidrio, no me hace daño.
+Aragones:      Puedo minchar beire, no me'n fa mal .
+Galician:      Eu podo xantar cristais e non cortarme.
+Portuguese:    Posso comer vidro, não me faz mal.
+Brazilian Portuguese:  Posso comer vidro, não me machuca.
+Caboverdiano:  M' podê cumê vidru, ca ta maguâ-m'.
+Papiamentu:    Ami por kome glas anto e no ta hasimi daño.
+Italian:       Posso mangiare il vetro e non mi fa male.
+Milanese:      Sôn bôn de magnà el véder, el me fa minga mal.
+Roman: Me posso magna' er vetro, e nun me fa male.
+Napoletano / Neapolitan:       M' pozz magna' o'vetr, e nun m' fa mal.
+Sicilian:      Puotsu mangiari u vitru, nun mi fa mali.
+Venetian:      Mi posso magnare el vetro, no'l me fa mae.
+Zeneise (Genovese):    Pòsso mangiâ o veddro e o no me fà mâ.
+Rheto-Romance / Romansch:      (NEEDED)
+Romany / Tsigane:      (NEEDED)
+Romanian:      Pot să mănânc sticlă și ea nu mă rănește.
+Esperanto:     Mi povas manĝi vitron, ĝi ne damaĝas min.
+Pictish:       (NEEDED)
+Breton:        (NEEDED)
+Cornish:       Mý a yl dybry gwéder hag éf ny wra ow ankenya.
+Welsh: Dw i'n gallu bwyta gwydr, 'dyw e ddim yn gwneud dolur i mi.
+Manx Gaelic:   Foddym gee glonney agh cha jean eh gortaghey mee.
+Old Irish (Ogham):     ᚛᚛ᚉᚑᚅᚔᚉᚉᚔᚋ ᚔᚈᚔ ᚍᚂᚐᚅᚑ ᚅᚔᚋᚌᚓᚅᚐ᚜
+Old Irish (Latin):     Con·iccim ithi nglano. Ním·géna.
+Irish: Is féidir liom gloinne a ithe. Ní dhéanann sí dochar ar bith dom.
+Scottish Gaelic:       S urrainn dhomh gloinne ithe; cha ghoirtich i mi.
+Anglo-Saxon (Runes):   ᛁᚳ᛫ᛗᚨᚷ᛫ᚷᛚᚨᛋ᛫ᛖᚩᛏᚪᚾ᛫ᚩᚾᛞ᛫ᚻᛁᛏ᛫ᚾᛖ᛫ᚻᛖᚪᚱᛗᛁᚪᚧ᛫ᛗᛖ᛬
+Anglo-Saxon (Latin):   Ic mæg glæs eotan ond hit ne hearmiað me.
+Middle English:        Ich canne glas eten and hit hirtiþ me nouȝt.
+English:       I can eat glass and it doesn't hurt me.
+English (IPA): [aɪ kæn iːt glɑːs ænd ɪt dɐz nɒt hɜːt miː] (Received Pronunciation)
+English (Braille):     ⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
+Lalland Scots / Doric: Ah can eat gless, it disnae hurt us.
+Glaswegian:    (NEEDED)
+Gothic:        𐌼𐌰𐌲 𐌲𐌻𐌴𐍃 𐌹̈𐍄𐌰𐌽, 𐌽𐌹 𐌼𐌹𐍃 𐍅𐌿 𐌽𐌳𐌰𐌽 𐌱𐍂𐌹𐌲𐌲𐌹𐌸.
+Old Norse (Runes):     ᛖᚴ ᚷᛖᛏ ᛖᛏᛁ ᚧ ᚷᛚᛖᚱ ᛘᚾ ᚦᛖᛋᛋ ᚨᚧ ᚡᛖ ᚱᚧᚨ ᛋᚨᚱ
+Old Norse (Latin):     Ek get etið gler án þess að verða sár.
+Norsk / Norwegian Nynorsk:     Eg kan eta glas utan å skada meg.
+Norsk / Norwegian Bokmål:     Jeg kan spise glass uten å skade meg.
+Føroyskt / Faroese:   (NEEDED)
+Íslenska / Icelandic: Ég get etið gler án þess að meiða mig.
+Svenska / Swedish:     Jag kan äta glas utan att skada mig.
+Dansk / Danish:        Jeg kan spise glas, det gør ikke ondt på mig.
+Frysk / Frisian:       Ik kin glês ite, it docht me net sear.
+Nederlands / Dutch:    Ik kan glas eten, het doet mij geen kwaad.
+Afrikaans:     Ek kan glas eet, maar dit doen my nie skade nie.
+Lëtzebuergescht / Luxemburgish:       Ech kan Glas iessen, daat deet mir nët wei.
+Deutsch / German:      Ich kann Glas essen, ohne mir weh zu tun.
+Ruhrdeutsch:   Ich kann Glas verkasematuckeln, ohne dattet mich wat jucken tut.
+Lausitzer Mundart ("Lusatian"):        Ich koann Gloos assn und doas dudd merr ni wii.
+Odenwälderisch:       Iech konn glaasch voschbachteln ohne dass es mir ebbs daun doun dud.
+Sächsisch / Saxon:    'sch kann Glos essn, ohne dass'sch mer wehtue.
+Pfälzisch:    Isch konn Glass fresse ohne dasses mer ebbes ausmache dud.
+Schwäbisch / Swabian: I kå Glas frässa, ond des macht mr nix!
+Bayrisch / Bavarian:   I koh Glos esa, und es duard ma ned wei.
+Allemannisch:  I kaun Gloos essen, es tuat ma ned weh.
+Schwyzerdütsch:       Ich chan Glaas ässe, das tuet mir nöd weeh.
+Hungarian:     Meg tudom enni az üveget, nem lesz tőle bajom.
+Suomi / Finnish:       Voin syödä lasia, se ei vahingoita minua.
+Sami (Northern):       Sáhtán borrat lása, dat ii leat bávččas.
+Erzian:        Мон ярсан суликадо, ды зыян эйстэнзэ а ули.
+Karelian:      (NEEDED)
+Vepsian:       (NEEDED)
+Votian:        (NEEDED)
+Livonian:      (NEEDED)
+Estonian:      Ma võin klaasi süüa, see ei tee mulle midagi.
+Latvian:       Es varu ēst stiklu, tas man nekaitē.
+Lithuanian:    Aš galiu valgyti stiklą ir jis manęs nežeidžia
+Old Prussian:  (NEEDED)
+Sorbian (Wendish):     (NEEDED)
+Czech: Mohu jíst sklo, neublíží mi.
+Slovak:        Môžem jesť sklo. Nezraní ma.
+Polska / Polish:       Mogę jeść szkło i mi nie szkodzi.
+Slovenian:     Lahko jem steklo, ne da bi mi škodovalo.
+Croatian:      Ja mogu jesti staklo i ne boli me.
+Serbian (Latin):       Mogu jesti staklo a da mi ne škodi.
+Serbian (Cyrillic):    Могу јести стакло а да ми не шкоди.
+Macedonian:    Можам да јадам стакло, а не ме штета.
+Russian:       Я могу есть стекло, оно мне не вредит.
+Belarusian (Cyrillic): Я магу есці шкло, яно мне не шкодзіць.
+Belarusian (Lacinka):  Ja mahu jeści škło, jano mne ne škodzić.
+Ukrainian:     Я можу їсти шкло, й воно мені не пошкодить.
+Bulgarian:     Мога да ям стъкло, то не ми вреди.
+Georgian:      მინას ვჭამ და არა მტკივა.
+Armenian:      Կրնամ ապակի ուտել և ինծի անհանգիստ չըներ։
+Albanian:      Unë mund të ha qelq dhe nuk më gjen gjë.
+Turkish:       Cam yiyebilirim, bana zararı dokunmaz.
+Turkish (Ottoman):     جام ييه بلورم بڭا ضررى طوقونمز
+Bangla / Bengali:      আমি কাঁচ খেতে পারি, তাতে আমার কোনো ক্ষতি হয় না।
+Marathi:       मी काच खाऊ शकतो, मला ते दुखत नाही.
+Hindi: मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा नहीं होती.
+Tamil: நான் கண்ணாடி சாப்பிடுவேன், அதனால் எனக்கு ஒரு கேடும் வராது.
+Urdu:  میں کانچ کھا سکتا ہوں اور مجھے تکلیف نہیں ہوتی ۔
+Pashto:        زه شيشه خوړلې شم، هغه ما نه خوږوي
+Farsi / Persian:       .من می‌توانم بدونِ احساسِ درد شيشه بخورم
+Arabic:        أنا قادر على أكل الزجاج و هذا لا يؤلمني.
+Aramaic:       (NEEDED)
+Hebrew:        אני יכול לאכול זכוכית וזה לא מזיק לי.
+Yiddish:       איך קען עסן גלאָז און עס טוט מיר נישט װײ.
+Judeo-Arabic:  (NEEDED)
+Ladino:        (NEEDED)
+Gǝʼǝz:      (NEEDED)
+Amharic:       (NEEDED)
+Twi:   Metumi awe tumpan, ɜnyɜ me hwee.
+Hausa (Latin): Inā iya taunar gilāshi kuma in gamā lāfiyā.
+Hausa (Ajami): إِنا إِىَ تَونَر غِلَاشِ كُمَ إِن غَمَا لَافِىَا
+Yoruba:        Mo lè je̩ dígí, kò ní pa mí lára.
+(Ki)Swahili:   Naweza kula bilauri na sikunyui.
+Malay: Saya boleh makan kaca dan ia tidak mencederakan saya.
+Tagalog:       Kaya kong kumain nang bubog at hindi ako masaktan.
+Chamorro:      Siña yo' chumocho krestat, ti ha na'lalamen yo'.
+Javanese:      Aku isa mangan beling tanpa lara.
+Burmese:       (NEEDED)
+Vietnamese (quốc ngữ):     Tôi có thể ăn thủy tinh mà không hại gì.
+Vietnamese (nôm):     些 𣎏 世 咹 水 晶 𦓡 空 𣎏 害 咦
+Khmer: (NEEDED)
+Lao:   (NEEDED)
+Thai:  ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ
+Mongolian:     ᠪᠢ ᠰᠢᠯᠢ ᠢᠳᠡᠶᠦ ᠴᠢᠳᠠᠨᠠ ᠂ ᠨᠠᠳᠤᠷ ᠬᠣᠤᠷᠠᠳᠠᠢ ᠪᠢᠰᠢ
+Mongolian (Cyrillic):  Би шил идэй чадна, надад хортой биш
+Dzongkha:      (NEEDED)
+Nepali:        (NEEDED)
+Tibetan:       ཤེལ་སྒོ་ཟ་ནས་ང་ན་གི་མ་རེད།
+Chinese Simplified:    我能吞下玻璃而不伤身体。
+Chinese Traditional:   我能吞下玻璃而不傷身體。
+Taiwanese:     Góa ē-tàng chia̍h po-lê, mā bē tio̍h-siong.
+Japanese:      私はガラスを食べられます。それは私を傷つけません。
+Korean:        나는 유리를 먹을 수 있어요. 그래도 아프지 않아요
+Bislama:       Mi save kakae glas, hemi no save katem mi.
+Hawaiian:      Hiki iaʻu ke ʻai i ke aniani; ʻaʻole nō lā au e ʻeha.
+Marquesan:     E koʻana e kai i te karahi, mea ʻā, ʻaʻe hauhau.
+Chinook Jargon:        Naika məkmək kakshət labutay, pi weyk ukuk munk-sik nay.
+Navajo:        Tsésǫʼ yishą́ągo bííníshghah dóó doo shił neezgai da.
+Cherokee (and Cree, Ojibwa, Inuktitut, and other Native American languages):   (NEEDED)
+Garifuna:      (NEEDED)
+Gullah:        (NEEDED)
+Lojban:        mi kakne le nu citka le blaci .iku'i le se go'i na xrani mi
+Nórdicg:      Ljœr ye caudran créneþ ý jor cẃran.
diff --git a/pango-view/HELLO.txt b/pango-view/HELLO.txt
new file mode 100755 (executable)
index 0000000..21acb94
--- /dev/null
@@ -0,0 +1,54 @@
+This is Pango (Παν語)
+
+This is a list of ways to say hello in various languages.
+Its purpose is to illustrate a number of scripts.
+
+---------------------------------------------------------
+Arabic السَّلام عليكُم 
+Bengali (বাঙ্লা)   ষাগতোম
+Burmese မ္ရန္မာ
+Cherokee (ᏣᎳᎩ)   ᎣᏏᏲ
+Czech (česky) Dobrý den
+Danish (Dansk) Hej, Goddag
+English        Hello
+Esperanto      Saluton
+Estonian       Tere, Tervist
+FORTRAN        PROGRAM
+Finnish (Suomi)        Hei
+French (Français)     Bonjour, Salut
+German (Deutsch Nord)  Guten Tag
+German (Deutsch Süd)  Grüß Gott
+Georgian (ქართველი)    გამარჯობა
+Gujarati       ગુજરાતિ
+Greek (Ελληνικά)       Γειά σας
+Hebrew שלום
+Hindi  नमस्ते, नमस्कार।
+Italiano       Ciao, Buon giorno
+IPA English (ɪŋglɪʃ)       hɛləʊ
+Lao    ສບາຍດ
+Maltese        Ċaw, Saħħa
+Nederlands, Vlaams     Hallo, Dag
+Norwegian (Norsk)      Hei, God dag
+Punjabi        ਪੁਂਜਾਬਿ
+Polish Dzień dobry, Hej
+Russian (Русский)       Здравствуйте!
+Sinhala (සිංහල)      ආයුබෝවන්
+Slovak Dobrý deň
+Spanish (Español)     ¡Hola!
+Swedish (Svenska)      Hej, Goddag
+Thai (ภาษาไทย)   สวัสดีครับ, สวัสดีค่ะ
+Tamil  (தமிழ்)       வணக்கம்
+Turkish (Türkçe)     Merhaba
+Vietnamese (Tiếng Việt)    Xin Chào
+Yiddish (ײַדישע)‎      דאָס הײַזעלע 
+
+Japanese (日本語)   こんにちは, コンニチハ
+Chinese (中文,普通话,汉语)      你好
+Cantonese (粵語,廣東話)   早晨, 你好
+Korean (한글)        안녕하세요, 안녕하십니까
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:
+ GB    --      元气  开发
+ JIS   --      元気  開発
+ KSC   --      元氣  開發
+ BIG5  --      元氣  開發
diff --git a/pango-view/Makefile.am b/pango-view/Makefile.am
new file mode 100755 (executable)
index 0000000..2721f97
--- /dev/null
@@ -0,0 +1,114 @@
+## Process this file with automake to create Makefile.in.
+
+TEST_TEXTS =                   \
+       test-arabic.txt         \
+       test-chinese.txt        \
+       test-devanagari.txt     \
+       test-gurmukhi.txt       \
+       test-hebrew.txt         \
+       test-ipa.txt            \
+       test-justify.txt        \
+       test-lao.txt            \
+       test-latin.txt          \
+       test-long-paragraph.txt \
+       test-mixed.markup       \
+       test-mixed.txt          \
+       test-nko.txt            \
+       test-opentype-language.markup \
+       test-syriac.txt         \
+       test-tamil.txt          \
+       test-thai.txt           \
+       test-tibetan.txt        \
+       HELLO.txt               \
+       GLASS.txt
+
+EXTRA_DIST =                   \
+       $(TEST_TEXTS)
+
+CLEANFILES = pangorc
+
+INCLUDES =                             \
+       -I$(top_srcdir)                 \
+       $(PANGO_DEBUG_FLAGS)            \
+       $(GLIB_CFLAGS)                  \
+       $(XFT_CFLAGS)                   \
+       $(CAIRO_CFLAGS)                 \
+       $(FREETYPE_CFLAGS)              \
+       $(X_CFLAGS)
+
+#########################################################
+
+bin_PROGRAMS = pango-view
+pango_view_SOURCES =                                   \
+       viewer-render.h                                 \
+       viewer-render.c                                 \
+       viewer.h                                        \
+       viewer-main.c                                   \
+       pango-view.c
+pango_view_LDADD =                                     \
+       ../pango/libpango-$(PANGO_API_VERSION).la       \
+       $(GLIB_LIBS)
+if HAVE_X
+pango_view_SOURCES +=                                  \
+       viewer-x.h                                      \
+       viewer-x.c                                      \
+       viewer-pangox.c
+pango_view_LDADD +=                                    \
+       ../pango/libpangox-$(PANGO_API_VERSION).la      \
+       $(X_LIBS)
+endif
+if HAVE_FREETYPE
+pango_view_SOURCES +=                                  \
+       viewer-pangoft2.c
+pango_view_LDADD +=                                    \
+       ../pango/libpangoft2-$(PANGO_API_VERSION).la    \
+       $(FREETYPE_LIBS)
+endif
+if HAVE_XFT
+pango_view_SOURCES +=                                  \
+       viewer-pangoxft.c
+pango_view_LDADD +=                                    \
+       ../pango/libpangoft2-$(PANGO_API_VERSION).la    \
+       ../pango/libpangoxft-$(PANGO_API_VERSION).la    \
+       $(XFT_LIBS)
+endif
+if HAVE_CAIRO
+pango_view_SOURCES +=                                  \
+       viewer-cairo.h                                  \
+       viewer-cairo.c                                  \
+       viewer-pangocairo.c
+pango_view_LDADD +=                                    \
+       ../pango/libpangocairo-$(PANGO_API_VERSION).la  \
+       $(CAIRO_LIBS)
+endif
+
+#########################################################
+
+MAINTAINERCLEANFILES = pango-view.1.in
+EXTRA_DIST += pango-view.1.in
+CLEANFILES += pango-view.1
+
+nodist_man_MANS = pango-view.1
+
+# The indirection through pango-view.1.in is to make parallel build work.
+# See bug 587768.
+$(srcdir)/pango-view.1.in: ../configure.in $(pango_view_SOURCES)
+       $(AM_V_GEN) $(top_builddir)/missing --run \
+          help2man --no-info --section=1 \
+                   --help-option="--help-all" --output="$@.tmp" \
+                   --name 'Pango text viewer' ./pango-view \
+        && mv "$@.tmp" "$@" \
+         || (echo Failed to update pango-view.1, the man page may be outdated >&2; \
+             (test -f "$@" || echo help2man is required to generate this file. >> "$@"));
+pango-view.1: pango-view$(EXEEXT)
+       $(AM_V_GEN) $(MAKE) $(AM_MAKEFLAGS) pango-view.1.in && \
+       cp $(srcdir)/pango-view.1.in $@
+
+#########################################################
+
+BUILT_SOURCES = pangorc
+
+pangorc: $(srcdir)/../modules/pangorc
+       cp $(srcdir)/../modules/pangorc $@
+
+-include $(top_srcdir)/git.mk
diff --git a/pango-view/Makefile.in b/pango-view/Makefile.in
new file mode 100644 (file)
index 0000000..d3b8029
--- /dev/null
@@ -0,0 +1,829 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = pango-view$(EXEEXT)
+@HAVE_X_TRUE@am__append_1 = \
+@HAVE_X_TRUE@  viewer-x.h                                      \
+@HAVE_X_TRUE@  viewer-x.c                                      \
+@HAVE_X_TRUE@  viewer-pangox.c
+
+@HAVE_X_TRUE@am__append_2 = \
+@HAVE_X_TRUE@  ../pango/libpangox-$(PANGO_API_VERSION).la      \
+@HAVE_X_TRUE@  $(X_LIBS)
+
+@HAVE_FREETYPE_TRUE@am__append_3 = \
+@HAVE_FREETYPE_TRUE@   viewer-pangoft2.c
+
+@HAVE_FREETYPE_TRUE@am__append_4 = \
+@HAVE_FREETYPE_TRUE@   ../pango/libpangoft2-$(PANGO_API_VERSION).la    \
+@HAVE_FREETYPE_TRUE@   $(FREETYPE_LIBS)
+
+@HAVE_XFT_TRUE@am__append_5 = \
+@HAVE_XFT_TRUE@        viewer-pangoxft.c
+
+@HAVE_XFT_TRUE@am__append_6 = \
+@HAVE_XFT_TRUE@        ../pango/libpangoft2-$(PANGO_API_VERSION).la    \
+@HAVE_XFT_TRUE@        ../pango/libpangoxft-$(PANGO_API_VERSION).la    \
+@HAVE_XFT_TRUE@        $(XFT_LIBS)
+
+@HAVE_CAIRO_TRUE@am__append_7 = \
+@HAVE_CAIRO_TRUE@      viewer-cairo.h                                  \
+@HAVE_CAIRO_TRUE@      viewer-cairo.c                                  \
+@HAVE_CAIRO_TRUE@      viewer-pangocairo.c
+
+@HAVE_CAIRO_TRUE@am__append_8 = \
+@HAVE_CAIRO_TRUE@      ../pango/libpangocairo-$(PANGO_API_VERSION).la  \
+@HAVE_CAIRO_TRUE@      $(CAIRO_LIBS)
+
+subdir = pango-view
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am__pango_view_SOURCES_DIST = viewer-render.h viewer-render.c viewer.h \
+       viewer-main.c pango-view.c viewer-x.h viewer-x.c \
+       viewer-pangox.c viewer-pangoft2.c viewer-pangoxft.c \
+       viewer-cairo.h viewer-cairo.c viewer-pangocairo.c
+@HAVE_X_TRUE@am__objects_1 = viewer-x.$(OBJEXT) \
+@HAVE_X_TRUE@  viewer-pangox.$(OBJEXT)
+@HAVE_FREETYPE_TRUE@am__objects_2 = viewer-pangoft2.$(OBJEXT)
+@HAVE_XFT_TRUE@am__objects_3 = viewer-pangoxft.$(OBJEXT)
+@HAVE_CAIRO_TRUE@am__objects_4 = viewer-cairo.$(OBJEXT) \
+@HAVE_CAIRO_TRUE@      viewer-pangocairo.$(OBJEXT)
+am_pango_view_OBJECTS = viewer-render.$(OBJEXT) viewer-main.$(OBJEXT) \
+       pango-view.$(OBJEXT) $(am__objects_1) $(am__objects_2) \
+       $(am__objects_3) $(am__objects_4)
+pango_view_OBJECTS = $(am_pango_view_OBJECTS)
+am__DEPENDENCIES_1 =
+@HAVE_X_TRUE@am__DEPENDENCIES_2 =  \
+@HAVE_X_TRUE@  ../pango/libpangox-$(PANGO_API_VERSION).la \
+@HAVE_X_TRUE@  $(am__DEPENDENCIES_1)
+@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_3 = ../pango/libpangoft2-$(PANGO_API_VERSION).la \
+@HAVE_FREETYPE_TRUE@   $(am__DEPENDENCIES_1)
+@HAVE_XFT_TRUE@am__DEPENDENCIES_4 =  \
+@HAVE_XFT_TRUE@        ../pango/libpangoft2-$(PANGO_API_VERSION).la \
+@HAVE_XFT_TRUE@        ../pango/libpangoxft-$(PANGO_API_VERSION).la \
+@HAVE_XFT_TRUE@        $(am__DEPENDENCIES_1)
+@HAVE_CAIRO_TRUE@am__DEPENDENCIES_5 = ../pango/libpangocairo-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_TRUE@      $(am__DEPENDENCIES_1)
+pango_view_DEPENDENCIES = ../pango/libpango-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+       $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+       $(am__DEPENDENCIES_5)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(pango_view_SOURCES)
+DIST_SOURCES = $(am__pango_view_SOURCES_DIST)
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(nodist_man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+TEST_TEXTS = \
+       test-arabic.txt         \
+       test-chinese.txt        \
+       test-devanagari.txt     \
+       test-gurmukhi.txt       \
+       test-hebrew.txt         \
+       test-ipa.txt            \
+       test-justify.txt        \
+       test-lao.txt            \
+       test-latin.txt          \
+       test-long-paragraph.txt \
+       test-mixed.markup       \
+       test-mixed.txt          \
+       test-nko.txt            \
+       test-opentype-language.markup \
+       test-syriac.txt         \
+       test-tamil.txt          \
+       test-thai.txt           \
+       test-tibetan.txt        \
+       HELLO.txt               \
+       GLASS.txt
+
+EXTRA_DIST = $(TEST_TEXTS) pango-view.1.in
+CLEANFILES = pangorc pango-view.1
+INCLUDES = \
+       -I$(top_srcdir)                 \
+       $(PANGO_DEBUG_FLAGS)            \
+       $(GLIB_CFLAGS)                  \
+       $(XFT_CFLAGS)                   \
+       $(CAIRO_CFLAGS)                 \
+       $(FREETYPE_CFLAGS)              \
+       $(X_CFLAGS)
+
+pango_view_SOURCES = viewer-render.h viewer-render.c viewer.h \
+       viewer-main.c pango-view.c $(am__append_1) $(am__append_3) \
+       $(am__append_5) $(am__append_7)
+pango_view_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la \
+       $(GLIB_LIBS) $(am__append_2) $(am__append_4) $(am__append_6) \
+       $(am__append_8)
+
+#########################################################
+MAINTAINERCLEANFILES = pango-view.1.in
+nodist_man_MANS = pango-view.1
+
+#########################################################
+BUILT_SOURCES = pangorc
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  pango-view/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  pango-view/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+       bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+         case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+          *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+         esac; \
+         f=`echo "$$p" | \
+            sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         for opt in --help --version; do \
+           if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+                2>c$${pid}_.err </dev/null \
+                && test -n "`cat c$${pid}_.out`" \
+                && test -z "`cat c$${pid}_.err`"; then :; \
+           else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+         done; \
+       done; rm -f c$${pid}_.???; exit $$bad
+pango-view$(EXEEXT): $(pango_view_OBJECTS) $(pango_view_DEPENDENCIES) 
+       @rm -f pango-view$(EXEEXT)
+       $(LINK) $(pango_view_LDFLAGS) $(pango_view_OBJECTS) $(pango_view_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-view.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-cairo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-pangocairo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-pangoft2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-pangox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-pangoxft.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-render.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewer-x.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+         else file=$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am: installcheck-binPROGRAMS
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-man1 install-strip installcheck installcheck-am \
+       installcheck-binPROGRAMS installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-binPROGRAMS \
+       uninstall-info-am uninstall-man uninstall-man1
+
+
+# The indirection through pango-view.1.in is to make parallel build work.
+# See bug 587768.
+$(srcdir)/pango-view.1.in: ../configure.in $(pango_view_SOURCES)
+       $(AM_V_GEN) $(top_builddir)/missing --run \
+          help2man --no-info --section=1 \
+                   --help-option="--help-all" --output="$@.tmp" \
+                   --name 'Pango text viewer' ./pango-view \
+        && mv "$@.tmp" "$@" \
+         || (echo Failed to update pango-view.1, the man page may be outdated >&2; \
+             (test -f "$@" || echo help2man is required to generate this file. >> "$@"));
+pango-view.1: pango-view$(EXEEXT)
+       $(AM_V_GEN) $(MAKE) $(AM_MAKEFLAGS) pango-view.1.in && \
+       cp $(srcdir)/pango-view.1.in $@
+
+pangorc: $(srcdir)/../modules/pangorc
+       cp $(srcdir)/../modules/pangorc $@
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pango-view/pango-view.1.in b/pango-view/pango-view.1.in
new file mode 100755 (executable)
index 0000000..73f8c61
--- /dev/null
@@ -0,0 +1,115 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.36.
+.TH PANGO-VIEW "1" "November 2009" "pango-view (pango) 1.26.0" "User Commands"
+.SH NAME
+pango-view \- Pango text viewer
+.SH DESCRIPTION
+.SS "Usage:"
+.IP
+pango\-view [OPTION...] \- FILE
+.SS "Help Options:"
+.TP
+\-?, \fB\-\-help\fR
+Show help options
+.TP
+\fB\-\-help\-all\fR
+Show all help options
+.TP
+\fB\-\-help\-cairo\fR
+Options understood by the cairo backend
+.SS "Cairo backend options:"
+.TP
+\fB\-\-annotate\fR=\fI1\fR or 2
+Annotate the output
+.SS "Application Options:"
+.TP
+\fB\-\-no\-auto\-dir\fR
+No layout direction according to contents
+.TP
+\fB\-\-backend\fR=\fIcairo\fR/xft/ft2/x
+Pango backend to use for rendering (default: cairo)
+.TP
+\fB\-\-background\fR=\fIred\fR/#rrggbb/#rrggbbaa/transparent
+Set the background color
+.TP
+\fB\-q\fR, \fB\-\-no\-display\fR
+Do not display (just write to file or whatever)
+.TP
+\fB\-\-dpi\fR=\fInumber\fR
+Set the resolution
+.TP
+\fB\-\-align\fR=\fIleft\fR/center/right
+Text alignment
+.TP
+\fB\-\-ellipsize\fR=\fIstart\fR/middle/end
+Ellipsization mode
+.TP
+\fB\-\-font\fR=\fIdescription\fR
+Set the font description
+.TP
+\fB\-\-foreground\fR=\fIred\fR/#rrggbb/#rrggbbaa
+Set the text color
+.TP
+\fB\-\-gravity\fR=\fIsouth\fR/east/north/west/auto
+Base gravity: glyph rotation
+.TP
+\fB\-\-gravity\-hint\fR=\fInatural\fR/strong/line
+Gravity hint
+.TP
+\fB\-\-header\fR
+Display the options in the output
+.TP
+\fB\-\-height=\fR+points/\-numlines
+Height in points (positive) or number of lines (negative) for ellipsizing
+.TP
+\fB\-\-hinting\fR=\fInone\fR/auto/full
+Hinting style
+.TP
+\fB\-\-indent\fR=\fIpoints\fR
+Width in points to indent paragraphs
+.TP
+\fB\-\-justify\fR
+Align paragraph lines to be justified
+.TP
+\fB\-\-language\fR=\fIen_US\fR/etc
+Language to use for font selection
+.TP
+\fB\-\-margin\fR=\fIpixels\fR
+Set the margin on the output in pixels
+.TP
+\fB\-\-markup\fR
+Interpret text as Pango markup
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIfile\fR
+Save rendered image to output file
+.TP
+\fB\-\-pangorc\fR=\fIfile\fR
+pangorc file to use (default is ./pangorc)
+.TP
+\fB\-\-rtl\fR
+Set base direction to right\-to\-left
+.TP
+\fB\-\-rotate\fR=\fIdegrees\fR
+Angle at which to rotate results
+.TP
+\fB\-n\fR, \fB\-\-runs\fR=\fIinteger\fR
+Run Pango layout engine this many times
+.TP
+\fB\-\-single\-par\fR
+Enable single\-paragraph mode
+.TP
+\fB\-t\fR, \fB\-\-text\fR=\fIstring\fR
+Text to display (instead of a file)
+.TP
+\fB\-\-version\fR
+Show version numbers
+.TP
+\fB\-\-waterfall\fR
+Create a waterfall display
+.TP
+\fB\-w\fR, \fB\-\-width\fR=\fIpoints\fR
+Width in points to which to wrap lines or ellipsize
+.TP
+\fB\-\-wrap\fR=\fIword\fR/char/word\-char
+Text wrapping mode (needs a width to be set)
+.PP
+Pango module interface version: 1.6.0
diff --git a/pango-view/pango-view.c b/pango-view/pango-view.c
new file mode 100755 (executable)
index 0000000..fec00be
--- /dev/null
@@ -0,0 +1,23 @@
+#include "config.h"
+#include "viewer.h"
+
+extern const PangoViewer pangocairo_viewer;
+extern const PangoViewer pangoxft_viewer;
+extern const PangoViewer pangoft2_viewer;
+extern const PangoViewer pangox_viewer;
+
+const PangoViewer *viewers[] = {
+#ifdef HAVE_CAIRO
+  &pangocairo_viewer,
+#endif
+#ifdef HAVE_XFT
+  &pangoxft_viewer,
+#endif
+#ifdef HAVE_FREETYPE
+  &pangoft2_viewer,
+#endif
+#ifdef HAVE_X
+  &pangox_viewer,
+#endif
+  NULL
+};
diff --git a/pango-view/test-arabic.txt b/pango-view/test-arabic.txt
new file mode 100755 (executable)
index 0000000..58653a6
--- /dev/null
@@ -0,0 +1,7 @@
+بِسْمِ ٱللّٰهِ ٱلرَّحْمٰنِ ٱلرَّحِيمِ
+اَلْحَمْدُ لِلّٰهِ رَبِّ الْعَالَمِينَ
+اَلرَّحْمٰنِ الرَّحِيمِ
+مَالِكِ يَوْمِ الدِّينِ
+اِيَّاكَ نَعْبُدُ وَ اِيَّاكَ نَسْتَعِينُ
+اِهْدِنَا الصِّرَاطَ الْمُسْتَقِيمَ
+صِرَاطَ الَّذِينَ اَنْعَمْتَ عَلَيهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِم وَ لَا الضَّٓالِّينَ
diff --git a/pango-view/test-chinese.txt b/pango-view/test-chinese.txt
new file mode 100755 (executable)
index 0000000..d4fb796
--- /dev/null
@@ -0,0 +1,7 @@
+你好,这是中文竖排测试。
+欢迎来到中国北京。
+白日依山尽,
+黄河入海流。
+欲穷千里目,
+更上一层楼。
+谢谢!
diff --git a/pango-view/test-devanagari.txt b/pango-view/test-devanagari.txt
new file mode 100755 (executable)
index 0000000..9cfccc5
--- /dev/null
@@ -0,0 +1,9 @@
+कि KI
+किकि KIKI
+क्कि KKI
+क्क्कि KKKI
+क््कि KKI (sp)
+क़्कि KKI (sp)
+क््क्कि KKKI (sp)
+क््क््कि KKKI (sp)
+क़्क़्कि KKKI (sp)
diff --git a/pango-view/test-gurmukhi.txt b/pango-view/test-gurmukhi.txt
new file mode 100755 (executable)
index 0000000..f3d0592
--- /dev/null
@@ -0,0 +1,26 @@
+ਹਰੀ ਸਿੰਘ ਨਲੂਆ
+
+ਹਰੀ ਸਿੰਘ ਨਲੂਆ (ਨਲਵਾ)
+
+
+ਸਿੱਖ ਕੌਮ ਦਾ ਅਣਖੀ ਅਤੇ ਬਹਾਦਰ ਜਰਨੈਲ, ਜਿਸ ਦੇ ਨਾਂ ਤੋਂ ਪਠਾਣੀਆਂ ਆਪਣੇ ਬੱਚਿਆਂ ਨੂੰ ਡਰਾਉਦੀਆਂ ਸਨ ਕਿ ਪੁੱਤ ਸੌਂ ਜਾ ਨਹੀਂ ਤਾਂ ਨਲੂਆ ਆ ਜਾਵੇਗਾ।
+
+
+ਵਿਸ਼ਾ-ਸੂਚੀ
+[ਛੁਪਾਓ]
+
+    * ੧ ਜਨਮ ਅਤੇ ਸਿਖਲਾਈ
+    * ੨ ਨਲੂਆ
+    * ੩ ਖਾਲਸਾ ਫੌਜ
+    * ੪ ਕਸ਼ਮੀਰ
+    * ੫ ਜੰਗ ਜਮਰੌਦ
+    * ੬ ਜਾਗੀਰ ਵਾਪਸੀ
+
+ ਜਨਮ ਅਤੇ ਸਿਖਲਾਈ
+
+ਸਰਦਾਰ ਹਰੀ ਸਿੰਘ ਦਾ ਜਨਮ ਗੁੱਜਰਾਵਾਲੇ ਵਿਖੇ ਹੋਇਆ। ਪਿਤਾ ਦੀ ਮੌਤ ਨਿੱਕੀ ਉਮਰ ਵਿੱਚ ਹੋਣ ਉਪਰੰਤ, ਉਹਨਾਂ ਦਾ ਪਾਲਣ ਪੋਸ਼ਣ ਉਹਨਾਂ ਦੇ ਨਾਨਕੇ ਪਰਿਵਾਰ ਵਿੱਚ ਹੋਇਆ।
+
+ਸਰਦਾਰ ਹਰੀ ਸਿੰਘ ਨਲੂਆ ਦੇ ਪਰਿਵਾਰ ਵਿੱਚ ਦੋ ਪਤਨੀਆਂ, ਜਿੰਨ੍ਹਾਂ ਦਾ ਜ਼ੋਰਾਵਰ ਸਿੰਘ ਤੇ ਗੁਰਦਿੱਤ ਸਿੰਘ, ਅਤੇ ਅਰਜਨ ਸਿੰਘ ਤੇ ਪੰਜਾਬ ਸਿੰਘ ਨਾਂ ਦੇ ਚਾਰ ਪੁੱਤਰ ਸਨ। ਚਾਰੇ ਪੁੱਤਰ ਆਪਣੇ ਪਿਓ ਵਾਂਗ ਬਹਾਦਰ ਨਹੀਂ ਸਨ। 
+ਇਹਨਾਂ ਕਰਕੇ ਮਹਾਰਾਜਾ ਰਣਜੀਤ ਸਿੰਘ ਨੇ ਅੰਤ ਵਿੱਚ ਸਰਦਾਰ ਹਰੀ ਸਿੰਘ ਦੀ ਸਾਰੀ ਜਾਗੀਰ ਨੂੰ ਵਾਪਸ ਲੈ ਲਈ ਆਪਣੇ ਸਰਦਾਰ ਵਿੱਚ ਵੰਡ ਦਿੱਤੀ। 
+ਸਰਦਾਰ ਹਰੀ ਸਿੰਘ ਦੇ ਬਾਅਦ ਇਹਨਾਂ ਕੋਲ 40,000 ਹਜ਼ਾਰ ਦੀ ਸਲਾਨਾ ਜਾਗੀਰ ਅਤੇ 60 ਤੋਂ 70 ਸਵਾਰ ਰਹੇ।
+
diff --git a/pango-view/test-hebrew.txt b/pango-view/test-hebrew.txt
new file mode 100755 (executable)
index 0000000..15467d8
--- /dev/null
@@ -0,0 +1,13 @@
+בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃
+וְהָאָ֗רֶץ הָֽיְתָ֥ה תֹ֨הוּ֙ וָבֹ֔הוּ וְחֹ֖שֶׁךְ עַל־פְּנֵ֣י תְה֑וֹם וְר֣וּחַ אֱלֹהִ֔ים מְרַחֶ֖פֶת עַל־פְּנֵ֥י הַמָּֽיִם׃
+וַיֹּ֥אמֶר אֱלֹהִ֖ים יְהִ֣י א֑וֹר וַֽיְהִי־אֽוֹר׃
+וַיַּ֧רְא אֱלֹהִ֛ים אֶת־הָא֖וֹר כִּי־ט֑וֹב וַיַּבְדֵּ֣ל אֱלֹהִ֔ים בֵּ֥ין הָא֖וֹר וּבֵ֥ין הַחֹֽשֶׁךְ׃
+וַיִּקְרָ֨א אֱלֹהִ֤ים ׀ לָאוֹר֙ י֔וֹם וְלַחֹ֖שֶׁךְ קָ֣רָא לָ֑יְלָה וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֶר י֥וֹם אֶחָֽד׃
+וַיֹּ֣אמֶר אֱלֹהִ֔ים יְהִ֥י רָקִ֖יעַ בְּת֣וֹךְ הַמָּ֑יִם וִיהִ֣י מַבְדִּ֔יל בֵּ֥ין מַ֖יִם לָמָֽיִם׃
+וַיַּ֣עַשׂ אֱלֹהִים֮ אֶת־הָֽרָקִיעַ֒ וַיַּבְדֵּ֗ל בֵּ֤ין הַמַּ֨יִם֙ אֲשֶׁר֙ מִתַּ֣חַת לָֽרָקִ֔יעַ וּבֵ֣ין הַמַּ֔יִם אֲשֶׁ֖ר מֵעַ֣ל לָֽרָקִ֑יעַ וַֽיְהִי־כֵֽן׃
+וַיִּקְרָ֧א אֱלֹהִ֛ים לָֽרָקִ֖יעַ שָׁמָ֑יִם וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֶר י֥וֹם שֵׁנִֽי׃
+וַיֹּ֣אמֶר אֱלֹהִ֗ים יִקָּו֨וּ הַמַּ֜יִם מִתַּ֤חַת הַשָּׁמַ֨יִם֙ אֶל־מָק֣וֹם אֶחָ֔ד וְתֵֽרָאֶ֖ה הַיַּבָּשָׁ֑ה וַֽיְהִי־כֵֽן׃
+וַיִּקְרָ֨א אֱלֹהִ֤ים ׀ לַיַּבָּשָׁה֙ אֶ֔רֶץ וּלְמִקְוֵ֥ה הַמַּ֖יִם קָרָ֣א יַמִּ֑ים וַיַּ֥רְא אֱלֹהִ֖ים כִּי־טֽוֹב׃
+וַיֹּ֣אמֶר אֱלֹהִ֗ים תַּֽדְשֵׁ֤א הָאָ֨רֶץ֙ דֶּ֗שֶׁא עֵ֚שֶׂב מַזְרִ֣יעַ זֶ֔רַע עֵ֣ץ פְּרִ֞י עֹ֤שֶׂה פְּרִי֙ לְמִינ֔וֹ אֲשֶׁ֥ר זַרְעוֹ־ב֖וֹ עַל־הָאָ֑רֶץ וַֽיְהִי־כֵֽן׃
+וַתּוֹצֵ֨א הָאָ֜רֶץ דֶּ֠שֶׁא עֵ֣שֶׂב מַזְרִ֤יעַ זֶ֨רַע֙ לְמִינֵ֔הוּ וְעֵ֧ץ עֹֽשֶׂה־פְּרִ֛י אֲשֶׁ֥ר זַרְעוֹ־ב֖וֹ לְמִינֵ֑הוּ וַיַּ֥רְא אֱלֹהִ֖ים כִּי־טֽוֹב׃
+וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֶר י֥וֹם שְׁלִישִֽׁי׃
diff --git a/pango-view/test-ipa.txt b/pango-view/test-ipa.txt
new file mode 100755 (executable)
index 0000000..2fdd5e2
--- /dev/null
@@ -0,0 +1,8 @@
+n̩    a̩    m̩    w̩    i̩    l̩    j̩̩    ɳ̩    ŋ̩
+n̽    a̽    m̽    w̽    i̽    l̽    j̽    ɳ̽    ŋ̽
+ff   fi    fl    e˥˩  i˦˨˥
+ä̃́    ɛ̃̈̀    ɩ̂́    ɔ̃̂    ʉ̄̈    ɠ̪̥̈
+ŋ̥    n̥    n̪̰
+k͡p  m͡i  l͡w  l͡i  m͡w
+
+
diff --git a/pango-view/test-justify.txt b/pango-view/test-justify.txt
new file mode 100755 (executable)
index 0000000..754ed28
--- /dev/null
@@ -0,0 +1,5 @@
+<span letter_spacing="2048">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc sit amet nulla. Cras elit. Fusce nibh orci, vehicula ut, congue ut, auctor quis, turpis.</span>
+
+Fusce ullamcorper porttitor quam. Nullam at nulla sit amet neque rutrum porttitor. Quisque mattis blandit velit. Aenean nec risus sed libero rhoncus suscipit. Cras dapibus. 
+
+قصابه با بابام رفیقه. پشت خونمون یه دباغیه. اینقده بچه گوسفند توشه! خونه‌مون ساس داره. ساس کوچیک و سیاس. هر جا بزنه جاش باد می‌کنه. وقتی داره از دیوار اتاق می‌ره بالا، نمی‌تونه خودشو نگه داره، می‌افته رو تن ما، می‌گیره خونمونو می‌مکه. یه دفعه همه اثاث مثاثامونو ریختیم بیرون، یه عالمه دوا خریدیم زدیم همه جا: به رختخوابا،‌ زیر زیلو، سوراخ سنبه‌ها. ولی ساسها بیشتر شدن، کمتر نشدن. بابام توی حموم کار می‌کنه.
diff --git a/pango-view/test-lao.txt b/pango-view/test-lao.txt
new file mode 100755 (executable)
index 0000000..012025e
--- /dev/null
@@ -0,0 +1,2 @@
+ເກັບພາບງາມໆມາຝາກໃຫ້ແຟນໆໄດ້ເຫັນເຕັມໆຕາທີ່ມະຫາສານ.ຄອມ 
+ ປະຈຸບັນ, ຕ້ອງຍອມຮັບກັນວ່າ   ກະແສຕອບຮັບແນວເພງສະຕິງກຳລັງມາແຮງອີ່ຫລີ,   ບາງບົດເພງນອກຈາກຈະເປັນທີ່ນິຍົມໃນບ້ານເຮົາ ເມືອງເຮົາແລ້ວ   ຍັງຂ້າມຝັ່ງໄປດັງຢູ່ບ້ານເພີ່ນອີກ.   ບໍ່ແມ່ນຕັ້ງເວົ້າ ເມື່ອກ່ອນນັກທ່ອງທ່ຽວຊາວຕ່າງຊາດທີ່ເຂົ້າມາທ່ຽວບ້ານເຮົາເພິ່ນມັກຖາມວ່າ   ເປັນຫຍັງຄົນລາວຈຶ່ງບໍ່ມັກເປິດເພງລາວໂດຍສະເພາະໃນຮ້ານກິນດື່ມ,   ຮ້ານອາຫານ ຫລື ແມ່ນແຕ່ຕາມບ້ານເຮືອນ ແລະ ຕະຫລາດ,   ແຕ່ດຽວນີ້ຂໍປະທານໂທດ ເພິ່ນຫັນມາເປີດເພງລາວກັນແລ້ວ   ເນື່ອງຈາກສັງຄົມກໍ່ຍອມຮັບ, ບົດເພງກໍ່ມ່ວນ ເນື້ອຫາກໍ່ຖືກໃຈແຖມຍັງເປັນການສົ່ງເສີມໃຫ້ສິລະປິນລາວ   ແລະ ຜູ້ຢູ່ເບື້ອງຫລັງມີກຳລັງໃຈພັດທະນາວຽກ ແລະ   ຜົນງານຂອງຕົນອີກ...   ອີກດ້ານໜື່ງນອກຈານສິລະປິນຈະຕ້ອງບຸກບືນ ເພື່ອໃຫ້ຕົວເອງໄດ້ເຂົ້າມາຢູ່ໃນວົງການແລ້ວ,   ຝ່າຍເຈົ້າຂອງຄ້າຍເພງກໍ່ພະຍາຍາມເຟັ້ນຫານັກຮ້ອງສຽງດີ   ມີແວວດັງເຂົ້າມາເປັນສະມາຊິກຂອງຄ້າຍເພງຕົນເອງເຊັ່ນກັນ. 
diff --git a/pango-view/test-latin.txt b/pango-view/test-latin.txt
new file mode 100755 (executable)
index 0000000..31fe90b
--- /dev/null
@@ -0,0 +1,9 @@
+'Twas brillig, and the slithy toves
+Did gyre and gimble in the wabe;
+All mimsy were the borogoves,
+And the mome raths outgrabe.
+
+'Beware the Jabberwock, my son!
+The jaws that bite, the claws that catch!
+Beware the Jubjub bird, and shun
+The frumious Bandersnatch!' 
diff --git a/pango-view/test-long-paragraph.txt b/pango-view/test-long-paragraph.txt
new file mode 100755 (executable)
index 0000000..95c795b
--- /dev/null
@@ -0,0 +1,18 @@
+از طرف من و بچه‌ها برای
+شادان حکمت
+
+آقا باور کن، آقا!
+
+-دل من و این تلخی بی‌نهایت
+        سر چشمه‌اش کجاست؟
+- آب دریاها
+             سخت تلخ است آقا!
+            فدریکو گارسیا لورکا
+
+
+
+
+
+
+
+من اسمم کاظمه. ما توی یه کوچه بن بست خونه داریم. کوچه‌مون خاکیه. اونوقت خیلی پایئن تر از خونه ما - زیاد پایین نه - اینور می‌پیچی یه نونواس. از اونجا صاف می‌ریم اینجا. یه خیابونه اینجا. اونوقت خیلی پایین‌ترش یه حمومه. بعداً یه بقالی هم دم خونمونه. یه خرده انور خرابه، یه قصابیه. قصابه با بابام رفیقه. پشت خونمون یه دباغیه. اینقده بچه گوسفند توشه! خونه‌مون ساس داره. ساس کوچیک و سیاس. هر جا بزنه جاش باد می‌کنه. وقتی داره از دیوار اتاق می‌ره بالا، نمی‌تونه خودشو نگه داره، می‌افته رو تن ما، می‌گیره خونمونو می‌مکه. یه دفعه همه اثاث مثاثامونو ریختیم بیرون، یه عالمه دوا خریدیم زدیم همه جا: به رختخوابا،‌ زیر زیلو، سوراخ سنبه‌ها. ولی ساسها بیشتر شدن، کمتر نشدن. بابام توی حموم کار می‌کنه. دوتا برادر داریم، یه خواهر: من و مصطفی و زهرا کوچولو. بابا وقتی داره شب می‌شه برمی‌گرده خونه. همیشه استخوناش درد می‌کنه. سر هیچی به هیچی می‌گیره می‌زنه‌مون، بازهم طلبکاره. مثلاً وسط سال، صبح ساعت شیش می‌آد می‌گه، «پاشو برو سیگار بفروش، پول دربیار لباس بخر!» من هم می‌گم: «لباس می‌خوام چی‌ کار؟» اون هم می‌گیره با کمربند حالمونو جا می‌آره. باز خوبه سه ماه تعطیلی خودمون می‌ریم کار می‌کنیم. یه کارخونه هست. می‌ریم اونجا قابلمه درست می‌کنیم، کاسه درست می‌کنیم، عصر که شونصد تا کاسه درست کردیم، دستگارو تمیز می‌کنیم برمی‌گردیم خونه. پارسال هفته‌ای پنجاه تومن مزد می‌دادن. امسال دیگه خدا می‌دونه. با همه این حرفا، بمیریم بهتره آقا! هر روز هر روز کتک.  بابام دیشب بیخودی مصطفی رو گرفت زد. گرفت زدش گفت: «چرا وقتی می‌ری دست به آب، سر پا می‌شاشی؟ بشی بشاش!» مصطفی‌مون هیچی حالیش نمی‌شه. قد زهرامون بوده که از بالا پشت بوم افتاده، رگ کله‌اش تکون خرده. حالا سیزده سالشه. نه چارده،‌ چارده سالشه. داداش بزرگ‌ مونه. الان مدرسه عقب افتاده‌ها درس می‌خونه. آب، بابا، بار میخونه یاد بگیره، بیاد جلو. دو سه کلمه بلده حرف بزنه ولی چیزه... نمیتونه قشنگ حرف بزنه. بابام می‌خواد از مدرسه ورش داره، بذاره یه جا که کار یاد بگیره. بابا زهرا را از همه بیشتر می‌خواد. اون هم هر کاری دلش بخواد می‌کنه. هرچی می‌گیم گوش نمی‌کنه، می‌ره تو جوب محل کثافت‌کاری می‌کنه. اون روزی حواسم نبود، رفت یه مشت دیگ مونده سر کوچه بود ورداشت خورد. شب دلش درد گرفت نزدیک بود بمیره. اونوقت بابام اومد گرفت منو با شیلنگ کشت. آقا مگه شهر هرته؟ خر کتک می‌خوره. دیگه چرا ما رو می‌زنن؟ برن به خر بزنن! آخه من که نمی‌تونم همه‌ش مواظب زهرا باشم. راستی یه صاحب حیاط داریم، خیلی بد اخلاقه آقا! اسمش عباس آقاس. صبح می‌ره ظهر می‌آد. سپور شهرداریه. بیست و چار ساعت می‌آد بند میکنه به ما، میگه: «آب زیاد مصرف نکنین، چاه پر میشه.» زهرامون که گاهی گریه می‌کنه، دادش بلند می‌شه می‌گه: «صدای این تخم‌سگو خفه کنین!» اونوقت که مادرمون زنده بود، یه دفعه می‌خواست از دست عباس آقا نفت بریزه سرش، خودشو آتیش بزنه. عباس آقا اصلاً رحم حالیش نمی‌شه؛ پسر سیزده ساله‌شو گرفته از خونه انداخته بیرون. اون هم رفته توی کوچه‌ پس ‌کوچه‌‌ها ول شده. حالا خدا می‌دونه کجاس، چه کار می‌کنه،‌ از کجا می‌آره می‌خوره. بچه‌ها می‌گن: «شب‌ها می‌ره توی پارک‌ها پیش سگها می‌خوابه.» که رفته دهات خونهٔ باباش، می‌گه دیگه نمی‌آم تهران. آقا، ما هم دلمون می‌خواد میرفتیم دهمون با گوسفندها بازی می‌کردیم؛ با بابا بزرگ‌مون می‌رفتیم دشت بز می‌چروندیم،‌ بادوم پاک می‌کردیم، انگور می‌چیدیم. دهمون ولی خیلی دوره آخه! زن عباس آقا حق داره، آقا! محله‌مون خیلی بده. هر روز اونجا دعواس، دعوا، چاقو کشی. توی خرابه هم پر معتاده، بگی دوهزار تا هم بیشتر. می‌رن اونجا قمار می‌کنن، شیره می‌کشن، آمپول می‌زنن تو رگشون. ماهم از ترس معتادها جرأت نمی‌کنیم از خونه بریم کوچه، یه ذره بازی کنیم. از کمیته‌م نمی‌ترسن، میگیرن بچه‌های مردمو می‌دزدن، میبرن توی کوره‌ها،‌ توی دلاشون چیز قایم می‌کنن؛ هروئین قایم میکنن. یه امیر ریزه هست تریاکیه، اون روزی اومد خرم کنه، گفت: «بیا سوار ماشین بشیم، بریم یه جائی.» من هم از ترسم خر نشدم. یه چیز خنده دار بگم بخندی، آقا: اینورمون یه همسایه داریم، اسمش ربابه. انوقت توپ،‌ لنگه کفش، تنکه، هرچی بیفته خونشون،‌ شوهرش ور می‌داره می‌اندازه توی آب انبارشون. هروقت هم کوچه شلوغ بشه، شوهر رباب می‌آد بیرون می‌گه: «واق، عو!» اون هم مث مصطفی‌ ما لقوه‌ایه‌؛ دستش می‌لزره، همه جاش می‌لرزه. اون روز اومد دم دکون، رفت اونور جوب نشت. این یکی همسایه‌مون رفت یه کتاب دربارهٔ خدا و فرشته‌ها آورد براش خوند. رباب خانم خودش خونه یه اعیونه کار می‌کنه؛ چیزاشونو می‌شوره، باغ‌شونو آب می‌ده؛ کلفتی می‌کنه. بعد همه‌ش می‌آد پز اربابشو می‌ده. الان دیگه همه اهل محل می‌دونن باغ خونهٔ ارباب رباب خانوم اندازه پارک شهره. استخرش از مال پارک شهر هم گنده‌تره. هروقت هم که ارباب می‌خواد‌ آبتنی کنه،‌ اول یه قطره دوای مخصوص هست، می‌ریزه توی استخر که آب‌شو می‌کنه مث اشک چشم. بعد می‌ره زیر دوش، با عطر و گلاب خودشو می‌شوره. بعد می‌پره توی استخر، می‌گیره شوخی شوخی آب می‌پاشه به رباب خانوم. زن اربابش هم خارجیه. مال همون کشوریه که شیش ماه شبه، شیش ماه روز. رباب یه چاخان‌هایی می‌کنه که کلهٔ آدم سوت می‌کشه! می‌گه ارباب یه سگ پشمالو داره،‌ اسمش مونیکاس. قسم می‌خوره می‌گه مونیکا غذاشو با کارد و چنگال می‌خوره. اللَه اکبر به این دروغ. یه پیرزنه هم هست سر کوچمونه. با خودش تنهایی زندگی می‌کنه. اسمش ننه غلامه. هشتاد نود سالشه ولی خجالت نمی‌کشه،‌ از امریکا خوشش می‌آد. همه ازش می‌ترسن؛ هر وفت بیاد بیرون، فحش می‌ده، جیغ و ویغ می‌زنه. مثلا من اذیتش کردم، می‌آد سر فحش‌رو می‌کشه به تو. وقتی بچه‌ها بخوان لج‌شو در‌بیارن، می‌گن: «مرگ بر امریکا!» اونوقت اون هم حرصش می‌گیره، هزار تا فحش بی‌ناموسی و خوار و مادر می‌کشه به جون همه. ننه غلام دیونه‌س. بعضی وقتا هم با‌ آدم خوبه. یه روز من و زهرا رو گرفت به زور برد خونه‌ش، کله پاچه داد، گفت «بخورین!» ما هم خوردیم. ته کاسه یه لقمه موند که روش یه عالمه مو بود. گفت: «اگه نخورین با همین چاقو سرتونو می‌برم.» ما هم از ترس جونمون خوردیم. ننه غلام وقتی سر حاله، چیز می‌آره می‌ده آدم. مثلا یکی زخمه،‌ دوا می‌آره بهش می‌ده. مثلا کسی چیزی نداره، چیز می‌آره بهش می‌ده، وسط کوچه‌مون یه خونه‌س که دخترهاش خرابن، آقا. اونوقت شیره‌ای‌ها و چاقوکش‌ها می‌رن خونه‌شون، کار بد می‌کنن. بعضی وقتا هم دختر‌هاش لباس سرخ و زرد تن می‌کنن و کفش پاشنه بلند تق‌تقی می‌پوشن، می‌رن واسه بالاشهری‌ها قر می‌دن. یه دفعه هم داشتم می‌رفتم پیش بچه‌ها «لیس پس لیس» بازی کنم که دختر کوچیکه‌ش امیر ریزه رو صدا کرد و بهش گفت: «تو چقدر پاهات لاغره!» بعد امیر ریزه هم نامردی نکرد. گفت:«خودت چرا لمبه‌هات چاقه؟» بعد دوتایی کرکر خندیدن. خودم با همین دو تا چشمام دیدم، آقا! اونوقت ما هم که می‌بینیم محله‌مون پر از بی‌تربیتی‌یه، زدیم با هفت‌تا از بچه محلامون قهر کردیم. با اون هفت‌تا هم بمیرم آشتی نمی‌کنم، آقا. با یکی‌شون یه ساله قهریم، اسمش محمده. یه روز سر کوچه‌مون عروسی بود، ما هم داشتیم بازی می‌کردیم. من دراومدم به محمد گفتم: «محمد امشب چه خبره؟ آبجی‌ت می‌ره حجله؟» ناراحت شد، گفت: «باهات قهرم.» من هم گفتم: «چه بهتر! می‌رم درسامو می‌خونم.» به خدا ما چه می‌دونستیم، به خیالمون عروسی آبجیشه، آقا! فقط با دو نفر دوستیم: مهدی ملخ و حسن گامبو. مهدی از بس مردنیه، همه ملخ صداش می‌کنن. باباش قوری بست می‌زنه. وسط بازی یهو پیداش می‌شه، می‌آد می‌گه: «اگه منو بازی ندین، بازی‌تونو بهم می‌زنم.» اونوقت تا که دس بهش می‌خوره، جیغش می‌ره هوا، میگه: «گه خوردم، گه خوردم.» اونوقت می‌ره از حرصش با میخ یه شکل‌هایی می‌کشه روی دیوار، می‌گه: «این عکس کاظمه.» فسقلی فوتش کنی، قل می‌خوره، ها. آقا، ما دوچرخه خیلی دوست داریم، بعضی وقتا می‌ریم یه تومن می‌دیم چرخ کرایه می‌کنیم. حسن گامبو زورش می‌آد، با سنگ می‌زنه، می‌گه: «منو باید سوار کنی.» من هم می‌بینم داره دلش می‌شکنه، می‌گم: «بیا تو هم سوار شو!» داداش حسن گامبو پنج ماهه رفته لب مرز با خارجیا بجنگه. حسن می‌گه: «رفته امریکا رو نابود کنه، برگرده.» بابای حسن آهنکاره؛ یعنی قالب می‌سازه، پشقاب می‌سازه، همه‌چی می‌سازه. نه که حسن خیکیه، بچه‌ها صداش می‌کنن: «حسن گامبو، سرت تو شامپو!» می‌خواییم با این دو نفر هم قهر کنیم بره. هی می‌آن در خونمون داد می‌زنن: «کاظم، بیا بازی، بیا بازی!» بازی چیه، آقا؟ بده بچه بازی کنه. رفوزه بشیم چه کار؟ دلم می‌خواد دکتر، مهندس، بازنشست، نیرو هوایی، هرچی شد بشیم، بریم پی کارمون بره. ولی تو خونه ما نمی‌شه درس خوند. تا می‌آم بشینم، باید پاشم برم نون بخرم، جارو کنم، خشتک زهرامونو بشورم. پارسال که رفوزه شدم، همه‌ش نیم نمره می‌خواستم قبول بشم. مدرسه‌مونم خیلی هردمبیه، آقا! بچه‌هاش دزدن، می‌آن دفترامونو می‌دزدن. سر کلاس یکی گچ پرت می‌کنه، یکی رو نیمکت ضرب می‌گیره، یکی پا می‌شه می‌رقصه. ما هم که می‌بینیم خر تو خره، حوصله‌مون سر می‌ره، از مدرسه جیم می‌شیم، می‌ریم فروشگاه بزرگ. اونجا پله‌برقی داره. می‌ریم می‌ایستیم خودمونو می‌زینم به اون راه. الکی نگاه می‌کنیم به جنس منس‌ها؛ یعنی مثلا ما هم اومدیم چیز بخریم. بعد می‌ریم سوار پله‌برقی می‌شیم، می‌ریم سواری می‌خوریم، عشق می‌کنیم. آقا، اجازه؟ سه تا دایی هم دارم، آقا! یکی‌شون دایی ضامن، یکی‌شونم دایی مرتضی. اونی که وضعش خوبه اسمش دایی رضوانه. یه وانت داره با یه اتوشویی. تا پامونو می‌ذاریم در دکونش، نامرد یه لگد می‌زنه در اونجامون، می‌گه: «بزن به چاک! باز اومدی از دخل کف ببری» به خدا تهمت می‌زنه، آقا! آقا، به خدا هیچکی به اندازه ما از دزدی بدش نمی‌آد. آقا، دایی مرتضی‌مون اولها کارگر بلورسازی بود، ولی وقتی من هنوز تو دل مادرم بودم، افتاد زندان. یه شب هفت نفر ریختن سرش، اون هم چاقو کشید، زد یکی‌شونو کشت. بعد دادگاه هم اومد بیخودی تقصیر رو گذاشت گردن دایی ما. قبل انقلاب از زندان اومد بیرون، رفت معتاد شد. حالا هم همیشه با زنش دعوا مرافعه داره. گاهی می‌ذاره از خونه‌ش می‌ره، می‌ره می‌ره پیداش نمی‌شه. بعد که برمی‌گرده، الکی به زنش می‌گه، رفته بودم بیمارستان ترک کنم. دایی مرتضی یه بچه کوچولو داره، هروقت می‌آد خونمون، می‌خواد از پله‌هامون بره بالا، بیاد پایین. ما هم می‌ریم دنبالش که نیفته سرش بشکنه. می‌ریم بغلش می‌کنیم. اونوقت می‌ترسه، سفت آدمو می‌گیره. دایی ضامن‌مون توی دولت آباد نفتیه، بعضی روزها که می‌ره نفت پخش کنه منو هم با خودش می‌بره. اون تا می‌ره نفت بده به خونه‌ها، بچه‌ها می‌گیرن مسخره‌م می‌کنن، می‌گن: «ای عرب پا نفتی، کی اومدی، کی رفتی؟» سنگ می‌زنن تو کله‌ام. من هم که زورم نمی‌رسه، گریه‌م می‌گیره. یه روز رفتیم در یه خونه نفت بدیم، اونوقت یه پسره بود - لال بود - دنبالمون کرد تا سر کوچه‌شون. فحش مادر داد، گفت: «دیگه در خونه ما نیا!» لال بود، آقا! نمی‌دونیم چی می‌گفت... آقا، هر وقت از مادرمون حرف می‌زنیم، بغض می‌آد گلومونو می‌گیره، ول‌مون نمی‌کنه... مادرمون سر بچه مرد، آقا! شب درد بچه گرفتش. رفتیم نبات خانومو آوردیم. نبات خانوم مامای محله‌س، شله، یه چشمش هم چپه. صبح که بچه اومد دنیا، مادرمون گذاشت از دنیا رفت. بچه‌ هم پشت سرش مرد، آقا!... مادرمون اون وقت که زنده بود، توی کارخونهٔ استارلایت کار می‌کرد. جوراب شلواری می‌بافت. وقتی شکمش اومد بالا، از اونجا بیرونش کردن. مادرمون اینقده سختی کشیده که خدا بگه، بس! همیشه مریض بود، بعضی وقتا هم غش می‌کرد. پاهاش قد یه متکا باد کرده بود، آقا!... آقا، باور کن، آقا... وقتی مادرمون مرد ما صد برابر الان بغض کردیم. من و زهرا و مصطفی شب تا صبح خوابمون نبرد. بابام اون شب هزار تا سیگار کشید،‌ ولی صبحش مادرمون مرد. وقتی رفتیم خاکش کنیم، ننه غلام نمی‌خواست بذاره ما بریم تماشا، می‌گفت، ما بچه‌ایم، گناه داریم. ولی من دزدکی توی مرده‌شور خونه هم رفتم. بوی بدی می‌ده مرده‌شور خونه، بوی گربهٔ مرده. آدم می‌خواد دل و روده‌شو بالا بیاره. وقتی مادرمونو اوردن گذاشتن توی سالن مرده‌شور خونه، هفت تا مرده زودتر مرده بودن. مادرمون نفر هشتم بود. مرده‌ها منتظر بودن دوش خالی بشه، سر نوبت برن تو، غسل کنن. جنازه یه دختر مدرسه هم بود. نمی‌دونی فک و فامیل دختره چی‌کار می‌کردن؛ یکی سرشو می‌زد به دیوار، یکی کفش‌شو دراورده بود می‌زد تو سر خودش. مادرمونو که اوردن بذارن توی قبر، سروکله‌ٔ مصطفی هم پیداش شد. مادرمون با مصطفی خوب بود. خدا بیامرز که رفت توی قبر، نمی‌دونم از کجا یه مگس اومد نشست روی کفنش. تا مصطفی کیش‌اش کرد، مگسه گذاشت در رفت. بعد شروع کردن با بیل خاک ریختن روی سر مادرمون. رباب خانم با ناخن صورتشو می‌کند. بابام داشت توی دل خودش گریه می‌کرد. اگه مصطفی نمی‌زد زیر گریه و توی خاک و خل غلت نمی‌خورد، من هم گریه نمی‌کردم... مادرمونو که خاک کردیم، دم قبرستان حلوای نذری پخش می‌کردن. واسه اینکه بوی گربهٔ مرده از دماغم بره، یه قاشق حلوا گذاشتم دهنم. ولی صاحب عذا که روشو برگردوند، تفش کردم. آقا، هیچی نمی‌تونستیم بخوریم. آقا، ما دلمون خیلی تنگه، هیشکی نیست ما را زفت کنه. دل‌مون می‌خواد از این دنیا می‌رفتیم. آقا، باورتون نمی‌شه، توی محله ما ملت تند تند می‌میرن، آقا! زهرامون یه همبازی داره، همقد خودشه. اسمش الهامه، پنج سالشه. ده بیست روز پیش باباش از داربست افتاد زمین عکس برگردون شد، مرد. دیروز الهام اومده بود خونه‌مون، یه عکس از باباش هم اورده بود، می‌گفت، هر شب خواب باباشو می‌بینه که اون دنیا آتیش درست کرده، می‌خواد بیاد  بگیره اونو کباب کنه بخوره. یه حرفهایی می‌زد که مو به تن آدم سیخ می‌شد. اونوقت شب که خوابم برد، خوابیدم، خواب دیدم عزرائیل و شمر با آتیش اومدن بالای سرم، هی می‌چرخن و چه‌چه می‌خندن. عزرائیل نصفه‌س، آقا! یعنی پا نداره. من هم اومدم از دست‌شون در برم که دیدم یه خرگوشه داره با مامانش قایم موشک بازی می‌کنه. رفتم بگم، من هم بازی که گذاشتن در رفتن. من هم دنبالشون کردم. خسته که شدم دیدم سوار یه قایقم، یه سگ هم داشتم. داشتم با سگ بازی می‌کردم که یهو امیر ریزه پشت پا انداخت، افتادم توی آب. من هم رفتم سوار دوچرخه شدم، زدم به چاک. سگ هم از توی قایق پرید، اومد دنبالم. بعدش دیدم یه هلی‌کوپتر بالای سرمه، می‌خواد باید بستنی لیوانی‌مو قاپ بزنه. من هم با سنگ زدم شیشه‌شو شکوندم. اون هم ترسید در رفت، توی کوچه دباغ‌ها غیب شد. بعدش دیدم عباس آقا گرگ شده، می‌خواد بیاد زهرامونو بگیره لقمه‌ٔ چپش کنه. از ترسم دویدم توی پارک و رفتم سوار تاب شدم. اینقده تاب بازی کردم تا حسابی سرم گیج رفت. اومدم از تاب بپرم پایین، دیدیم زیر پام یه چاهه، یه چاه به این گندگی. داشتم ول می‌شدم ته چاه که از خواب پریدم. نشستم گریه کردم. اونوقت بابام بیدار شد، پرسید: «باز چی شده؟ شاشیدی؟» گفتم: «می‌ترسم.» گفت: «بگیر بخواب بابا تو هم دلت خوشه!» من هم لحافو که کشیدم روی سرم، همه‌ش خدا خدا می‌کردم ایم دفعه که خوابم برد، شانسم بگه، بزنه خواب خوشبختی ببینم، دلم خوش بشه. ولی اگه ما شانس داشتیم، آقا، اسم‌مونو می‌ذاشتن شانسعلی.
diff --git a/pango-view/test-mixed.markup b/pango-view/test-mixed.markup
new file mode 100755 (executable)
index 0000000..894a1b8
--- /dev/null
@@ -0,0 +1,9 @@
+<span lang="zh-cn">你好,这是中文竖排测试。
+欢迎来到中国北京。
+白日依山尽,</span>
+<span lang="en">Roses are Red,
+Grass is Green. 2006</span>
+<span lang="fa">Arabic is گل‌ها قرمزند،‏
+چمن سبز. ۲۰۰۶</span>
+<span lang="zh-cn">ABC 白日依山尽, 2006</span>
+<span lang="ja">「ノートを買った。」</span>
diff --git a/pango-view/test-mixed.txt b/pango-view/test-mixed.txt
new file mode 100755 (executable)
index 0000000..e23f031
--- /dev/null
@@ -0,0 +1,9 @@
+你好,这是中文竖排测试。
+欢迎来到中国北京。
+白日依山尽,
+Roses are Red,
+Grass is Green. 2006
+Arabic is گل‌ها قرمزند،‏
+چمن سبز. ۲۰۰۶
+ABC 白日依山尽, 2006
+「ノートを買った。」
diff --git a/pango-view/test-nko.txt b/pango-view/test-nko.txt
new file mode 100755 (executable)
index 0000000..65a4347
--- /dev/null
@@ -0,0 +1,15 @@
+ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߟߊ߬ߘߏ߲߬ߞߏ߬ߦߊ߬ߟߌ ߜߙߋ߬ߡߊ߬ߕߍ߰ߟߌ
+ߞߖ߭ߊߓߎߟߊ߲ߞߊ ߓߍ߲߬ߡߊ߬ߞߊ߲ ߠߎ߬ :
+
+ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߘߎ߰ߙߋ߲ ߠߎ߬ ߟߊ߫ ߢߐ߲߯ߓߍ߲ ߟߊ߬ߘߏ߲߬ߞߏ߬ߦߊ߬ߟߌ ߞߊߡߊ߬ ߞߖ߭ߊߓߎߟߊߟߊ߲ߞߊ߫߸ ( ߞߊ߬ߓߌߛߊ߬ ) ߣߌ߫ ( ߓߌ߬ߛ߭ߊ߯ߙߊ ) ߘߍ߬ߘߊ ߟߎ߬ ߟߊ߫ ߓߊ߯ߙߊ߫
+ߘߊߞߎ߲ ߡߌ߬ߘߊ߬ ߞߣߍ ߞߊ߲߬߸ (IDRC = ߞߣߊߘߊ߫ ߝߘߏ߬ߓߊ߬ ߡߣߊ߬ߙߏ߲߬ߠߌ߲ ߝߊ߲ߓߊ ߞ.ߝ.ߡ.ߝ.) ߞߊ߬ ߡߍ߲ ߖߐ߰ߣߍ ߓߐ߫ ߸ (MTDS =
+ߡߊ߬ߙߐߞߎ߫ ߖߊ߬ߥߏ ߟߊ߬ߥߙߎ߬ߞߌ߬ߟߌ ߗߋߢߊߟߌ ߡ.ߖ.ߥߗ.) ߝߊ߬ߙߊ ߘߐ߫ ߊ߬ ߞߊ߲߬ ( ߞߖ߭ߊߓߎߟߊ߲ߞߊ߫ ߕߎߞߑߣߏߔߊߞ ) ߘߍ߬ߞߙߎ ߝߊ߲ߓߊ ߝߍ߬.
+
+ߞߎ߲߬ߜߙߊ ߣߌ߲߬ ߞߊ߬ ߕߣߐ߬ߓߊ߫ ߛߐ߬ߘߐ߲߬ ߡߊߙߐߞߎ߬ ߖߡߊ߬ߣߊ ߡߊ߬ߞߐ߬ߙߐ߲߬ߞߐ߬ߙߐ߲߬ߠߌ ߞߏߕߌ߮ ߣߴߊ߬ ߣߐ߬ߝߍ߬ ߖߡߊ ߟߊ߫ ߸ ߏ߬ ߟߎ߬ ߡߍ߲ ߠߎ߫ ߣߊ߬ ߘߊ߫
+ߞߏߕߌ߯ ߟߎ߬ ߞߊ߲ߕߌ߮ ߞߐߦߌ߬ߘߊ߬، ߞߊ߬ ߕߐ߬ߣߐ߫ ߛߐ߬ߘߐ߲߬ ߞߣߊߘߊ߫ ߟߊ߬ߛߌ߰ߘߋ߲ ߝߣߊ߫ ߟߊ߫ ߣߊ߬ߟߌ ߣߌ߫ ߜߙߋ߫ ߜߘߍ ߘߎ߰ߙߋ߲߫ ߣߊ߬ߓߊ߮ ߟߎ߬ ߟߊ߫.
+
+ߕߋ߬ߟߋ߫ ߛߓߊ߬ ߖߊ߬ߣߍ߲߬ ߓߊ߯ߙߊ ߘߝߊߣߍ߲ ߞߐ߫ ߸ ߞߎ߲߬ߜߙߊ ߕߘߍ߬ߒ߬ߘߐ߬ߓߊ߰ߕߐ ߟߎ߫ ߓߍ߲߬ ߘߊ߫ ߞߊ߲߫ ߣߊ߬ߕߐ ߢߌ߲߬ ߠߎ߫ ߡߊ߬ :
+
+• ߕߟߋ߬ߓߊ߮ ߛߋߒߞߏߟߦߊ ߣߌ߫ ߟߐ߲ߕߊ ( ߕ.ߛ.ߟ. ICT ) ߘߊ߲߬ߠߊߕߍ߭ ߥߊߟߌ߫ ߞߊ߲߫ ߞߋߟߋ߲߫ ߡߊ߬ ߕߋ߲߬ ߸ ߏ߬ ߦߋ߫ ߡߌ߬ߙߌ߲߬ߘߌ ߟߎ߬ ߢߐ߲߯
+ߕߍ߫ ߞߣߍ ߝߏ߬ߣߊ߲ ߥߙߊ߬ ߟߊ߫ ߟߋ߬، ߞߊ߬ ߕߟߋ߬ߓߊ߮ ߟߐ߲ߠߌ߲ ߓߊߓߋ߭ ߥߎ߬ߛߎ ߖߊ߲߬ߧߊ߫ ߸ ߞߵߊ߬ ߞߊ߬ߙߊ߲ ߣߴߊ߬ ߘߊ ߜߟߍ߬ߦߊ߫، ߞߊ߬ߕߎ߯ ߸ ߊ߬
+ߘߌ߫ ߦߙߐ ߟߐ߲ߠߌ߲ߧߊ ߝߣߊ߫ ߖߐ߲ߝߐ߲߫ ߞߏߛߓߍ߫.
\ No newline at end of file
diff --git a/pango-view/test-opentype-language.markup b/pango-view/test-opentype-language.markup
new file mode 100755 (executable)
index 0000000..3d956aa
--- /dev/null
@@ -0,0 +1,6 @@
+Rendering U+0431 CYRILLIC SMALL LETTER BE
+using DejaVu Sans:
+<span font_desc="DejaVu Sans">
+Russian:       <span lang="ru">б</span>
+Serbian:       <span lang="sr">б</span>
+</span>
diff --git a/pango-view/test-syriac.txt b/pango-view/test-syriac.txt
new file mode 100755 (executable)
index 0000000..05fedc7
--- /dev/null
@@ -0,0 +1,18 @@
+ܠܫܢܢ
+ܒܝܕܦܪܝܕܐ ܒܢܝܡܝܢ ܐܕܡ
+
+ܐܬܐܡܘܢ ܥܠܝܡܢ ܘܥܠܝܡܬܢ
+ܠܫܢܢ ܡܪܢܝܐ 
+ܦܪܝܣܐ ܡܕܘܪܐ ܩܕܡܝܐ
+
+ܠܫܢܢ ܝܠܗ ܐܝܬܘܬܢ
+ܘܬܘܕܝܬܢ ܘܣܦܪܝܘܬܢ
+ܝܠܦܚܠܗ ܒܟܠ ܫܘܒ݂ܗܪܐ
+
+ܡܒܘܥܐ ܗܘܐ ܕܝܘܠܦܢܐ
+ܚܠܝܐ ܒܪܬܡܐ ܘܩܪܝܢܐ
+ܬܓ݂ܐ ܝܠܗ ܠܪܫܢ ܪܡܐ
+
+ܡܠܦܢܢ ܐܢܝ ܓܢܒܪܐ
+ܡܫܘܬܐܣܠܗܘܢ ܡܕܪܫܝܬܐ
+ܡܫܘܬܐܣܠܗܘܢ ܓܘ ܐܡܘܬܐ
diff --git a/pango-view/test-tamil.txt b/pango-view/test-tamil.txt
new file mode 100755 (executable)
index 0000000..ff080a2
--- /dev/null
@@ -0,0 +1,13 @@
+முருகன் அல்லது அழகு
+திரு வி.க.
+
+                       குமரகுருபரர்
+
+உலகு குளிர எமது மதியில் ஒழுகு மமுத கிரணமே
+       உருகு மடிய ரிதய நெகிழ உணர்வி லெழுந லுதயமே
+கலையு நிறைவு மறிவு முதிர முதிரு மதுர நறவமே
+       கழுவு துகளர் முழுக நெடிய கருணை பெருகு சலதியே
+அலகில் புவன முடியும் வெளியில் அளியு மொளியி னிலயமே
+       அறிவு ளறிவை யறிவு மவரும் அறிய வரிய பிரமமே
+மலையின் மகள்கண் மணியை யனைய மதலை வருக வருகவே
+       வளமை தழுவு பரிதி புரியின் மருவு குமரன் வருகவே
diff --git a/pango-view/test-thai.txt b/pango-view/test-thai.txt
new file mode 100755 (executable)
index 0000000..4bb8d2e
--- /dev/null
@@ -0,0 +1,11 @@
+ลำดับนั้น เทวดากล่าวคาถากะพระมหาสัตว์ว่า:
+
+“การงานอันใด ยังไม่ถึงที่สุดด้วยความพยายาม การงานอันนั้นก็ไร้ผล มีความลำบากเกิดขึ้น การทำความพยายามในฐานะอันไม่สมควรใด จนความตายปรากฏขึ้น ความพยายามในฐานะอันไม่สมควรนั้น จะมีประโยชน์อะไร”
+
+เมื่อนางมณีเมขลากล่าวอย่างนี้แล้ว พระมหาสัตว์เมื่อจะทำนางมณีเมขลาให้จำนนต่อถ้อยคำ จึงได้ตรัสคาถาต่อไปว่า:
+
+“ดูก่อนเทวดา ผู้ใดรู้แจ้งการงานที่ทำจะไม่ลุล่วงไปได้จริง ๆ ชื่อว่าไม่รักษาชีวิตของตน ถ้าผู้นั้นละความเพียรในฐานะเช่นนั้นเสีย ก็จะพึงรู้ผลแห่งความเกียจคร้าน ดูก่อนเทวดา คนบางพวกในโลกนี้เห็นผลแห่งความประสงค์ของตน จึงประกอบการงานทั้งหลาย การงานเหล่านั้นจะสำเร็จหรือไม่ก็ตาม ดูก่อนเทวดา ท่านก็เห็นผลแห่งกรรมประจักษ์แก่ตนแล้วมิใช่หรือ คนอื่น ๆ จมในมหาสมุทรหมด เราคนเดียวยังว่ายข้ามอยู่ และได้เห็น ท่าน มาสถิตอยู่ใกล้ ๆ เรา เรานั้นจักพยายามตามสติกำลัง จักทำความเพียรที่บุรุษควรทำ ไปให้ถึงฝั่งแห่งมหาสมุทร”
+
+--
+พระมหาชนก
+พระราชนิพนธ์ พระบาทสมเด็จพระเจ้าอยู่หัว ภูมิพลอดุลยเดชฯ
diff --git a/pango-view/test-tibetan.txt b/pango-view/test-tibetan.txt
new file mode 100755 (executable)
index 0000000..83d44aa
--- /dev/null
@@ -0,0 +1,12 @@
+Regular letters འབྲུག་རྒྱལ་ཁབ་འདི་དགའ་ཏོག་ཏོ་ཡོད།
+Reordering of Digits ༡༿༢༿༣༿        Illegal ཀ༿ སྐ༿༾
+Digits with other combining marks ༡༾༢༘༤༥༦        Illegal ཀ༘ཁ༙སྐ༘༙
+Tsa phru after base ཀ༹     Illegal ཀྱུ༹ ཀི༹
+Tsa phru after subjoined སྐ༹ རྒྱ༹
+A-Chung  ཀཱ ཀྲཱ གླཱ གྱཱ༹       Illegal ཀཱུ ཀཱི
+Halanta  ཀ྄  ཀ྄ཱ  སྐ྄   སྐྱ྄
+Vowels  ཀྱུ   སྐྱིུ    ཀྀ   ཀེ  ཀོ   ལྐཻ   ཀཽ
+Anusvara   ཀུཾ    ཀིཾ     ཀཾི ཀིཾ ཀཾིཾ
+Visaraga   ཀཿ      Illegal ཀ༵ཿ
+Lower Stress Mark ཀ༷ ཀཱ༵
+Candrabindu  ཀྃ  ཀིྃ Illegal ཀིྃ
diff --git a/pango-view/viewer-cairo.c b/pango-view/viewer-cairo.c
new file mode 100755 (executable)
index 0000000..ae8e01d
--- /dev/null
@@ -0,0 +1,369 @@
+/* viewer-cairo.c: Common code for Cairo-based viewers
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+
+#include "viewer-cairo.h"
+#include "viewer-render.h"
+
+#include <cairo.h>
+
+#include <string.h>
+
+
+
+#ifdef HAVE_CAIRO_XLIB
+#ifdef HAVE_X
+#include "viewer-x.h"
+#include <cairo-xlib.h>
+
+
+
+static cairo_surface_t *
+cairo_x_view_iface_create_surface (gpointer instance,
+                                  gpointer surface,
+                                  int      width,
+                                  int      height)
+{
+  XViewer *x = (XViewer *)instance;
+  Drawable drawable = (Drawable) surface;
+
+  return cairo_xlib_surface_create (x->display, drawable,
+                                   DefaultVisual (x->display, x->screen),
+                                   width, height);
+}
+
+static void
+cairo_x_view_iface_paint_background (gpointer  instance G_GNUC_UNUSED,
+                                    cairo_t  *cr)
+{
+  cairo_set_source_rgb (cr, 1, 1, 1);
+  cairo_paint (cr);
+
+  if (opt_bg_set)
+    {
+      cairo_set_source_rgba (cr,
+                            opt_bg_color.red / 65535.,
+                            opt_bg_color.green / 65535.,
+                            opt_bg_color.blue / 65535.,
+                            opt_bg_alpha / 65535.);
+      cairo_paint (cr);
+    }
+}
+
+static CairoViewerIface cairo_x_viewer_iface = {
+  &x_viewer,
+  cairo_x_view_iface_create_surface,
+  cairo_x_view_iface_paint_background
+};
+#endif /* HAVE_X */
+#endif /* HAVE_CAIRO_XLIB */
+
+
+
+
+static cairo_surface_t *
+cairo_view_iface_create_surface (gpointer instance,
+                                gpointer surface,
+                                int      width,
+                                int      height)
+{
+  return cairo_surface_reference (surface);
+}
+
+
+
+static gpointer
+cairo_image_view_create (const PangoViewer *klass G_GNUC_UNUSED)
+{
+  return NULL;
+}
+
+static void
+cairo_image_view_destroy (gpointer instance G_GNUC_UNUSED)
+{
+}
+
+static gpointer
+cairo_image_view_create_surface (gpointer instance,
+                                int      width,
+                                int      height)
+{
+  cairo_t *cr;
+  cairo_surface_t *surface;
+
+  /* TODO: Be smarter about format? */
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+
+  cr = cairo_create (surface);
+  cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+  cairo_paint (cr);
+  cairo_destroy (cr);
+
+  return surface;
+}
+
+static void
+cairo_image_view_destroy_surface (gpointer instance,
+                                 gpointer surface)
+{
+  cairo_surface_destroy (surface);
+}
+
+const PangoViewer cairo_image_viewer = {
+  "CairoImage",
+  NULL,
+  NULL,
+  cairo_image_view_create,
+  cairo_image_view_destroy,
+  NULL,
+  cairo_image_view_create_surface,
+  cairo_image_view_destroy_surface,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL
+};
+
+static void
+cairo_image_view_iface_paint_background (gpointer  instance G_GNUC_UNUSED,
+                                        cairo_t  *cr)
+{
+  cairo_set_source_rgb (cr, 1, 1, 1);
+  cairo_paint (cr);
+
+  if (opt_bg_set)
+    {
+      cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+      cairo_set_source_rgba (cr,
+                            opt_bg_color.red / 65535.,
+                            opt_bg_color.green / 65535.,
+                            opt_bg_color.blue / 65535.,
+                            opt_bg_alpha / 65535.);
+      cairo_paint (cr);
+    }
+}
+
+static CairoViewerIface cairo_image_viewer_iface = {
+  &cairo_image_viewer,
+  cairo_view_iface_create_surface,
+  cairo_image_view_iface_paint_background
+};
+
+
+
+
+#ifdef CAIRO_HAS_SVG_SURFACE
+#    include <cairo-svg.h>
+#endif
+#ifdef CAIRO_HAS_PDF_SURFACE
+#    include <cairo-pdf.h>
+#endif
+#ifdef CAIRO_HAS_PS_SURFACE
+#    include <cairo-ps.h>
+#  if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1,6,0)
+#    define HAS_EPS 1
+
+static cairo_surface_t *
+_cairo_eps_surface_create (const char *filename,
+                          double      width,
+                          double      height)
+{
+  cairo_surface_t *surface;
+
+  surface = cairo_ps_surface_create (filename, width, height);
+  cairo_ps_surface_set_eps (surface, TRUE);
+
+  return surface;
+}
+
+#  else
+#    undef HAS_EPS
+#  endif
+#endif
+
+typedef cairo_surface_t *(*CairoVectorFileCreateFunc) (const char *filename,
+                                                      double width,
+                                                      double height);
+
+typedef struct
+{
+  const char *filename;
+  CairoVectorFileCreateFunc constructor;
+} CairoVectorViewer;
+
+static gpointer
+cairo_vector_view_create (const PangoViewer *klass G_GNUC_UNUSED)
+{
+  const char *extension = NULL;
+  CairoVectorFileCreateFunc constructor = NULL;
+
+  if (opt_output)
+    {
+      extension = strrchr (opt_output, '.');
+      if (extension)
+         extension++; /* skip the dot */
+    }
+
+  if (!extension)
+    return NULL;
+
+  if (0)
+    ;
+  #ifdef CAIRO_HAS_SVG_SURFACE
+    else if (0 == strcasecmp (extension, "svg"))
+      constructor = cairo_svg_surface_create;
+  #endif
+  #ifdef CAIRO_HAS_PDF_SURFACE
+    else if (0 == strcasecmp (extension, "pdf"))
+      constructor = cairo_pdf_surface_create;
+  #endif
+  #ifdef CAIRO_HAS_PS_SURFACE
+    else if (0 == strcasecmp (extension, "ps"))
+      constructor = cairo_ps_surface_create;
+   #ifdef HAS_EPS
+    else if (0 == strcasecmp (extension, "eps"))
+      constructor = _cairo_eps_surface_create;
+   #endif
+  #endif
+
+  if (constructor)
+    {
+      CairoVectorViewer *instance;
+
+      instance = g_slice_new (CairoVectorViewer);
+
+      /* save output filename and unset it such that the viewer layer
+       * doesn't try to save to file.
+       */
+     instance->filename = opt_output;
+     opt_output = NULL;
+
+     instance->constructor = constructor;
+
+     /* Fix dpi on 72.  That's what cairo vector surfaces are. */
+     opt_dpi = 72;
+
+     return instance;
+    }
+
+  return NULL;
+}
+
+static void
+cairo_vector_view_destroy (gpointer instance G_GNUC_UNUSED)
+{
+  CairoVectorViewer *c = (CairoVectorViewer *) instance;
+
+  g_slice_free (CairoVectorViewer, c);
+}
+
+static gpointer
+cairo_vector_view_create_surface (gpointer instance,
+                                 int      width,
+                                 int      height)
+{
+  CairoVectorViewer *c = (CairoVectorViewer *) instance;
+  cairo_surface_t *surface;
+
+  surface = c->constructor (c->filename, width, height);
+
+    /*cairo_surface_set_fallback_resolution (surface, fallback_resolution_x, fallback_resolution_y);*/
+
+  return surface;
+}
+
+static void
+cairo_vector_view_destroy_surface (gpointer instance,
+                                  gpointer surface)
+{
+  /* TODO: check for errors */
+  cairo_surface_destroy (surface);
+}
+
+const PangoViewer cairo_vector_viewer = {
+  "CairoFile",
+  NULL,
+  NULL,
+  cairo_vector_view_create,
+  cairo_vector_view_destroy,
+  NULL,
+  cairo_vector_view_create_surface,
+  cairo_vector_view_destroy_surface,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL
+};
+
+static void
+cairo_vector_view_iface_paint_background (gpointer  instance G_GNUC_UNUSED,
+                                         cairo_t  *cr)
+{
+  if (opt_bg_set)
+    {
+      cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+      cairo_set_source_rgba (cr,
+                            opt_bg_color.red / 65535.,
+                            opt_bg_color.green / 65535.,
+                            opt_bg_color.blue / 65535.,
+                            opt_bg_alpha / 65535.);
+      cairo_paint (cr);
+    }
+}
+
+static CairoViewerIface cairo_vector_viewer_iface = {
+  &cairo_vector_viewer,
+  cairo_view_iface_create_surface,
+  cairo_vector_view_iface_paint_background
+};
+
+
+
+gpointer
+cairo_viewer_iface_create (const CairoViewerIface **iface)
+{
+  gpointer ret;
+
+  *iface = &cairo_vector_viewer_iface;
+  ret = (*iface)->backend_class->create ((*iface)->backend_class);
+  if (ret)
+    return ret;
+
+#ifdef HAVE_CAIRO_XLIB
+#ifdef HAVE_X
+  if (opt_display)
+    {
+      *iface = &cairo_x_viewer_iface;
+      return (*iface)->backend_class->create ((*iface)->backend_class);
+    }
+#endif /* HAVE_X */
+#endif /* HAVE_CAIRO_XLIB */
+
+  *iface = &cairo_image_viewer_iface;
+  return (*iface)->backend_class->create ((*iface)->backend_class);
+}
+
+void
+cairo_viewer_add_options (GOptionGroup *group G_GNUC_UNUSED)
+{
+}
diff --git a/pango-view/viewer-cairo.h b/pango-view/viewer-cairo.h
new file mode 100755 (executable)
index 0000000..e843664
--- /dev/null
@@ -0,0 +1,47 @@
+/* viewer-cairo.h: Common headers for Cairo-based viewers
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef VIEWER_CAIRO_H
+#define VIEWER_CAIRO_H
+
+#include <cairo.h>
+
+#include "viewer.h"
+
+typedef struct _CairoViewerIface CairoViewerIface;
+
+struct _CairoViewerIface
+{
+  const PangoViewer *backend_class;
+
+  cairo_surface_t * (*create_surface) (gpointer instance,
+                                      gpointer surface,
+                                      int      width,
+                                      int      height);
+
+  void (*paint_background) (gpointer  instance,
+                           cairo_t  *cr);
+};
+
+gpointer cairo_viewer_iface_create (const CairoViewerIface **iface_out);
+
+void cairo_viewer_add_options (GOptionGroup *group);
+
+#endif /* VIEWER_CAIRO_H */
diff --git a/pango-view/viewer-main.c b/pango-view/viewer-main.c
new file mode 100755 (executable)
index 0000000..8ff76bb
--- /dev/null
@@ -0,0 +1,180 @@
+/* viewer-main.c: Main routine for viewers
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ * Copyright (C) 2006 Behdad Esfahbod
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#ifdef G_OS_UNIX
+#include <sys/wait.h>
+#endif
+
+#include "viewer.h"
+#include "viewer-render.h"
+
+int
+main (int    argc,
+      char **argv)
+{
+  const PangoViewer *view;
+  gpointer instance;
+  PangoContext *context;
+  int run;
+  int width, height;
+  gpointer surface;
+
+  g_type_init();
+  g_set_prgname ("pango-view");
+  setlocale (LC_ALL, "");
+  parse_options (argc, argv);
+
+  view = opt_viewer;
+
+  g_assert (view->id);
+
+  instance = view->create (view);
+  context = view->get_context (instance);
+  width = height = 1;
+  surface = view->create_surface (instance, width, height);
+  view->render (instance, surface, context, &width, &height, NULL);
+  view->destroy_surface (instance, surface);
+  surface = view->create_surface (instance, width, height);
+  for (run = 0; run < MAX(1,opt_runs); run++)
+    view->render (instance, surface, context, &width, &height, NULL);
+
+  if (opt_output)
+    {
+      if (!view->write)
+       fail ("%s viewer backend does not support writing", view->name);
+      else
+       {
+         FILE *stream;
+         GPid pid = 0;
+
+         if (view->write_suffix && g_str_has_suffix (opt_output, view->write_suffix))
+           {
+             stream = g_fopen (opt_output, "wb");
+             if (!stream)
+               fail ("Cannot open output file %s: %s\n",
+                     opt_output, g_strerror (errno));
+           }
+         else
+           {
+             int fd;
+             const gchar *convert_argv[4] = {"convert", "-", "%s"};
+             GError *error;
+
+             convert_argv[2] = opt_output;
+
+             if (!g_spawn_async_with_pipes (NULL, (gchar **)(void*)convert_argv, NULL,
+                                            G_SPAWN_DO_NOT_REAP_CHILD |
+                                            G_SPAWN_SEARCH_PATH |
+                                            G_SPAWN_STDOUT_TO_DEV_NULL |
+                                            G_SPAWN_STDERR_TO_DEV_NULL,
+                                            NULL, NULL, &pid, &fd, NULL, NULL, &error))
+               fail ("When running ImageMagick 'convert' command: %s\n", error->message);
+             stream = fdopen (fd, "wb");
+           }
+         view->write (instance, surface, stream, width, height);
+         fclose (stream);
+#ifdef G_OS_UNIX
+         if (pid)
+           waitpid (pid, NULL, 0);
+#endif
+       }
+    }
+
+  if (opt_display)
+    {
+      char *title;
+      title = get_options_string ();
+
+      if (view->display)
+       {
+         gpointer window = NULL;
+         gpointer state = NULL;
+
+         if (view->create_window)
+           {
+             window = view->create_window (instance, title, width, height);
+             if (!window)
+               goto no_display;
+           }
+
+         opt_display = FALSE;
+         while (1)
+           {
+             state = view->display (instance, surface, window, width, height, state);
+             if (state == GINT_TO_POINTER (-1))
+               break;
+
+             view->render (instance, surface, context, &width, &height, state);
+           }
+
+         if (view->destroy_window)
+           view->destroy_window (instance, window);
+       }
+no_display:
+
+      /* If failed to display natively, call ImageMagick */
+      if (opt_display)
+       {
+         int fd;
+         FILE *stream;
+         const gchar *display_argv[5] = {"display", "-title", "%s", "-"};
+         GError *error = NULL;
+         GPid pid;
+
+         if (!view->write)
+           fail ("%s viewer backend does not support displaying or writing", view->name);
+         display_argv[2] = title;
+
+         if (!g_spawn_async_with_pipes (NULL, (gchar **)(void*)display_argv, NULL,
+                                        G_SPAWN_DO_NOT_REAP_CHILD |
+                                        G_SPAWN_SEARCH_PATH |
+                                        G_SPAWN_STDOUT_TO_DEV_NULL |
+                                        G_SPAWN_STDERR_TO_DEV_NULL,
+                                        NULL, NULL, &pid, &fd, NULL, NULL, &error))
+           fail ("When running ImageMagick 'display' command: %s\n", error->message);
+         stream = fdopen (fd, "wb");
+         view->write (instance, surface, stream, width, height);
+         fclose (stream);
+#ifdef G_OS_UNIX
+         waitpid (pid, NULL, 0);
+#endif
+         g_spawn_close_pid (pid);
+       }
+
+      g_free (title);
+    }
+
+  view->destroy_surface (instance, surface);
+  g_object_unref (context);
+  view->destroy (instance);
+  finalize ();
+  return 0;
+}
diff --git a/pango-view/viewer-pangocairo.c b/pango-view/viewer-pangocairo.c
new file mode 100755 (executable)
index 0000000..3d19668
--- /dev/null
@@ -0,0 +1,460 @@
+/* viewer-pangocairo.c: PangoCairo viewer backend.
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "viewer-render.h"
+#include "viewer-cairo.h"
+
+#include <pango/pangocairo.h>
+
+static int opt_annotate = 0;
+
+typedef struct
+{
+  const CairoViewerIface *iface;
+
+  gpointer backend;
+
+  PangoFontMap *fontmap;
+  cairo_font_options_t *font_options;
+} CairoViewer;
+
+static gpointer
+pangocairo_view_create (const PangoViewer *klass G_GNUC_UNUSED)
+{
+  CairoViewer *instance;
+
+  instance = g_slice_new (CairoViewer);
+
+  instance->backend = cairo_viewer_iface_create (&instance->iface);
+
+  instance->fontmap = pango_cairo_font_map_new ();
+  pango_cairo_font_map_set_resolution (PANGO_CAIRO_FONT_MAP (instance->fontmap), opt_dpi);
+
+  instance->font_options = cairo_font_options_create ();
+  if (opt_hinting != HINT_DEFAULT)
+    {
+      if (opt_hinting == HINT_NONE)
+       cairo_font_options_set_hint_style (instance->font_options, CAIRO_HINT_STYLE_NONE);
+      else if (opt_hinting == HINT_FULL)
+       cairo_font_options_set_hint_style (instance->font_options, CAIRO_HINT_STYLE_FULL);
+    }
+
+  return instance;
+}
+
+static void
+pangocairo_view_destroy (gpointer instance)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+
+  cairo_font_options_destroy (c->font_options);
+
+  g_object_unref (c->fontmap);
+
+  c->iface->backend_class->destroy (c->backend);
+
+  cairo_debug_reset_static_data ();
+
+  g_slice_free (CairoViewer, c);
+}
+
+static PangoContext *
+pangocairo_view_get_context (gpointer instance)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+  PangoContext *context;
+
+  context = pango_font_map_create_context (c->fontmap);
+  pango_cairo_context_set_font_options (context, c->font_options);
+
+  return context;
+}
+
+typedef struct
+{
+  gpointer backend;
+
+  cairo_surface_t *cairo;
+} CairoSurface;
+
+static gpointer
+pangocairo_view_create_surface (gpointer instance,
+                               int      width,
+                               int      height)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+  CairoSurface *surface;
+
+  surface = g_slice_new (CairoSurface);
+
+  surface->backend = c->iface->backend_class->create_surface (c->backend,
+                                                             width, height);
+
+  surface->cairo = c->iface->create_surface (c->backend,
+                                            surface->backend,
+                                            width, height);
+
+  return surface;
+}
+
+static void
+pangocairo_view_destroy_surface (gpointer instance,
+                                gpointer surface)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+  CairoSurface *c_surface = (CairoSurface *) surface;
+
+  c->iface->backend_class->destroy_surface (c->backend, c_surface->backend);
+  cairo_surface_destroy (c_surface->cairo);
+
+  g_slice_free (CairoSurface, surface);
+}
+
+static void
+render_callback (PangoLayout *layout,
+                int          x,
+                int          y,
+                gpointer     context,
+                gpointer     state)
+{
+  cairo_t *cr = (cairo_t *) context;
+  int annotate = (GPOINTER_TO_INT (state) + opt_annotate) % 3;
+
+  cairo_save (cr);
+  cairo_translate (cr, x, y);
+
+  if (annotate)
+    {
+      cairo_pattern_t *pattern;
+      PangoRectangle ink, logical;
+      double lw = cairo_get_line_width (cr);
+      PangoLayoutIter* iter;
+
+      pango_layout_get_extents (layout, &ink, &logical);
+
+      if (annotate >= 2)
+        {
+         /* draw resolved gravity "roof" in blue */
+         cairo_save (cr);
+         cairo_translate (cr,
+                          (double)logical.x / PANGO_SCALE,
+                          (double)logical.y / PANGO_SCALE);
+         cairo_scale     (cr,
+                          (double)logical.width / PANGO_SCALE * 0.5,
+                          (double)logical.height / PANGO_SCALE * 0.5);
+         cairo_translate   (cr,  1.0,  1.0);
+         cairo_rotate (cr,
+           pango_gravity_to_rotation (
+             pango_context_get_gravity (
+               pango_layout_get_context (layout))));
+         cairo_move_to     (cr, -1.0, -1.0);
+         cairo_rel_line_to (cr, +1.0, -0.2); /* /   */
+         cairo_rel_line_to (cr, +1.0, +0.2); /*   \ */
+         cairo_close_path  (cr);             /*  -  */
+         pattern = cairo_pattern_create_linear (0, -1.0, 0, -1.2);
+         cairo_pattern_add_color_stop_rgba (pattern, 0.0, 0.0, 0.0, 1.0, 0.0);
+         cairo_pattern_add_color_stop_rgba (pattern, 1.0, 0.0, 0.0, 1.0, 0.15);
+         cairo_set_source (cr, pattern);
+         cairo_fill (cr);
+         /* once more, without close_path this time */
+         cairo_move_to     (cr, -1.0, -1.0);
+         cairo_rel_line_to (cr, +1.0, -0.2); /* /   */
+         cairo_rel_line_to (cr, +1.0, +0.2); /*   \ */
+         /* silly line_width is not locked :(. get rid of scale. */
+         cairo_restore (cr);
+         cairo_save (cr);
+         cairo_set_source_rgba (cr, 0.0, 0.0, 0.7, 0.2);
+         cairo_stroke (cr);
+         cairo_restore (cr);
+
+
+         /* draw block progression arrow in green */
+         cairo_save (cr);
+         cairo_translate (cr,
+                          (double)logical.x / PANGO_SCALE,
+                          (double)logical.y / PANGO_SCALE);
+         cairo_scale     (cr,
+                          (double)logical.width / PANGO_SCALE * 0.5,
+                          (double)logical.height / PANGO_SCALE * 0.5);
+         cairo_translate   (cr,  1.0,  1.0);
+         cairo_move_to     (cr, -0.4, -0.7);
+         cairo_rel_line_to (cr, +0.8,  0.0); /*  --   */
+         cairo_rel_line_to (cr,  0.0, +0.9); /*    |  */
+         cairo_rel_line_to (cr, +0.4,  0.0); /*     - */
+         cairo_rel_line_to (cr, -0.8, +0.5); /*    /  */
+         cairo_rel_line_to (cr, -0.8, -0.5); /*  \    */
+         cairo_rel_line_to (cr, +0.4,  0.0); /* -     */
+         cairo_close_path  (cr);             /*  |    */
+         pattern = cairo_pattern_create_linear (0, -0.7, 0, 0.7);
+         cairo_pattern_add_color_stop_rgba (pattern, 0.0, 0.0, 1.0, 0.0, 0.0);
+         cairo_pattern_add_color_stop_rgba (pattern, 1.0, 0.0, 1.0, 0.0, 0.15);
+         cairo_set_source (cr, pattern);
+         cairo_fill_preserve (cr);
+         /* silly line_width is not locked :(. get rid of scale. */
+         cairo_restore (cr);
+         cairo_save (cr);
+         cairo_set_source_rgba (cr, 0.0, 0.7, 0.0, 0.2);
+         cairo_stroke (cr);
+         cairo_restore (cr);
+       }
+
+      /* draw baselines with line direction arrow in orange */
+      cairo_save (cr);
+      cairo_set_source_rgba (cr, 1.0, 0.5, 0.0, 0.5);
+      iter = pango_layout_get_iter (layout);
+      do
+       {
+         PangoLayoutLine *line = pango_layout_iter_get_line (iter);
+         double width = (double)logical.width / PANGO_SCALE;
+
+         y = pango_layout_iter_get_baseline (iter);
+         cairo_save (cr);
+         cairo_translate (cr,
+                        (double)logical.x / PANGO_SCALE + width * 0.5,
+                        (double)y / PANGO_SCALE);
+         if (line->resolved_dir)
+           cairo_scale (cr, -1, 1);
+         cairo_move_to     (cr, -width * .5, -lw*0.2);
+         cairo_rel_line_to (cr, +width * .9, -lw*0.3);
+         cairo_rel_line_to (cr,  0,          -lw);
+         cairo_rel_line_to (cr, +width * .1, +lw*1.5);
+         cairo_rel_line_to (cr, -width * .1, +lw*1.5);
+         cairo_rel_line_to (cr, 0,           -lw);
+         cairo_rel_line_to (cr, -width * .9, -lw*0.3);
+         cairo_close_path (cr);
+         cairo_fill (cr);
+         cairo_restore (cr);
+       }
+      while (pango_layout_iter_next_line (iter));
+      pango_layout_iter_free (iter);
+      cairo_restore (cr);
+
+      /* draw the logical rect in red */
+      cairo_save (cr);
+      cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 0.5);
+      cairo_rectangle (cr,
+                      (double)logical.x / PANGO_SCALE - lw / 2,
+                      (double)logical.y / PANGO_SCALE - lw / 2,
+                      (double)logical.width / PANGO_SCALE + lw,
+                      (double)logical.height / PANGO_SCALE + lw);
+      cairo_stroke (cr);
+      cairo_restore (cr);
+
+      /* draw the ink rect in green */
+      cairo_save (cr);
+      cairo_set_source_rgba (cr, 0.0, 1.0, 0.0, 0.5);
+      cairo_rectangle (cr,
+                      (double)ink.x / PANGO_SCALE - lw / 2,
+                      (double)ink.y / PANGO_SCALE - lw / 2,
+                      (double)ink.width / PANGO_SCALE + lw,
+                      (double)ink.height / PANGO_SCALE + lw);
+      cairo_stroke (cr);
+      cairo_restore (cr);
+    }
+
+  cairo_move_to (cr, 0, 0);
+  pango_cairo_show_layout (cr, layout);
+
+  cairo_restore (cr);
+}
+
+static void
+transform_callback (PangoContext *context,
+                   PangoMatrix  *matrix,
+                   gpointer      cr_context,
+                   gpointer      state G_GNUC_UNUSED)
+{
+  cairo_t *cr = (cairo_t *)cr_context;
+  cairo_matrix_t cairo_matrix;
+
+  if (matrix)
+    {
+      cairo_matrix.xx = matrix->xx;
+      cairo_matrix.yx = matrix->yx;
+      cairo_matrix.xy = matrix->xy;
+      cairo_matrix.yy = matrix->yy;
+      cairo_matrix.x0 = matrix->x0;
+      cairo_matrix.y0 = matrix->y0;
+    }
+  else
+    {
+      cairo_matrix_init_identity (&cairo_matrix);
+    }
+
+  cairo_set_matrix (cr, &cairo_matrix);
+
+  pango_cairo_update_context (cr, context);
+}
+
+static void
+pangocairo_view_render (gpointer      instance,
+                       gpointer      surface,
+                       PangoContext *context,
+                       int          *width,
+                       int          *height,
+                       gpointer      state)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+  cairo_t *cr;
+  CairoSurface *c_surface = (CairoSurface *) surface;
+
+  g_assert (surface);
+
+  cr = cairo_create (c_surface->cairo);
+
+  transform_callback (context, NULL, cr, state);
+
+  c->iface->paint_background (instance, cr);
+
+  cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+  cairo_set_source_rgba (cr,
+                        opt_fg_color.red / 65535.,
+                        opt_fg_color.green / 65535.,
+                        opt_fg_color.blue / 65535.,
+                        opt_fg_alpha / 65535.);
+
+  do_output (context, render_callback, transform_callback, cr, state, width, height);
+
+  cairo_destroy (cr);
+}
+
+#ifdef HAVE_CAIRO_PNG
+static cairo_status_t
+write_func (void                *closure,
+           const unsigned char *data,
+           unsigned int         length)
+{
+  FILE *stream = (FILE *) closure;
+  unsigned int l;
+
+  l = fwrite (data, 1, length, stream);
+
+  return l == length ? CAIRO_STATUS_SUCCESS : CAIRO_STATUS_WRITE_ERROR;
+}
+
+static void
+pangocairo_view_write (gpointer instance G_GNUC_UNUSED,
+                      gpointer surface,
+                      FILE    *stream,
+                      int      width G_GNUC_UNUSED,
+                      int      height G_GNUC_UNUSED)
+{
+  CairoSurface *c_surface = (CairoSurface *) surface;
+
+  cairo_surface_write_to_png_stream (c_surface->cairo, write_func, stream);
+}
+#endif
+
+static gpointer
+pangocairo_view_create_window (gpointer    instance,
+                              const char *title,
+                              int         width,
+                              int         height)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+
+  if (!c->iface->backend_class->create_window)
+    return NULL;
+
+  return c->iface->backend_class->create_window (c->backend,
+                                                title,
+                                                width, height);
+}
+
+static void
+pangocairo_view_destroy_window (gpointer instance,
+                               gpointer window)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+
+  c->iface->backend_class->destroy_window (c->backend,
+                                          window);
+}
+
+static gpointer
+pangocairo_view_display (gpointer instance,
+                        gpointer surface,
+                        gpointer window,
+                        int width, int height,
+                        gpointer state)
+{
+  CairoViewer *c = (CairoViewer *) instance;
+  CairoSurface *c_surface = (CairoSurface *) surface;
+
+  return c->iface->backend_class->display (c->backend,
+                                          c_surface->backend,
+                                          window,
+                                          width, height,
+                                          state);
+}
+
+static GOptionGroup *
+pangocairo_view_get_option_group (const PangoViewer *klass G_GNUC_UNUSED)
+{
+  GOptionEntry entries[] =
+  {
+    {"annotate",       0, 0, G_OPTION_ARG_INT, &opt_annotate,
+     "Annotate the output",                            "1 or 2"},
+    {NULL}
+  };
+  GOptionGroup *group;
+
+  group = g_option_group_new ("cairo",
+                             "Cairo backend options:",
+                             "Options understood by the cairo backend",
+                             NULL,
+                             NULL);
+
+  g_option_group_add_entries (group, entries);
+
+  cairo_viewer_add_options (group);
+
+  return group;
+}
+
+const PangoViewer pangocairo_viewer = {
+  "PangoCairo",
+  "cairo",
+#ifdef HAVE_CAIRO_PNG
+  "png",
+#else
+  NULL,
+#endif
+  pangocairo_view_create,
+  pangocairo_view_destroy,
+  pangocairo_view_get_context,
+  pangocairo_view_create_surface,
+  pangocairo_view_destroy_surface,
+  pangocairo_view_render,
+#ifdef HAVE_CAIRO_PNG
+  pangocairo_view_write,
+#else
+  NULL,
+#endif
+  pangocairo_view_create_window,
+  pangocairo_view_destroy_window,
+  pangocairo_view_display,
+  NULL,
+  NULL,
+  pangocairo_view_get_option_group
+};
diff --git a/pango-view/viewer-pangoft2.c b/pango-view/viewer-pangoft2.c
new file mode 100755 (executable)
index 0000000..2699b74
--- /dev/null
@@ -0,0 +1,162 @@
+/* viewer-pangoft2.c: PangoFT2 viewer backend.
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "viewer-render.h"
+#include "viewer.h"
+
+#include <pango/pangoft2.h>
+
+static void
+substitute_func (FcPattern *pattern,
+                gpointer   data G_GNUC_UNUSED)
+{
+  if (opt_hinting != HINT_DEFAULT)
+    {
+      FcPatternDel (pattern, FC_HINTING);
+      FcPatternAddBool (pattern, FC_HINTING, opt_hinting != HINT_NONE);
+
+      FcPatternDel (pattern, FC_AUTOHINT);
+      FcPatternAddBool (pattern, FC_AUTOHINT, opt_hinting == HINT_AUTO);
+    }
+}
+
+static gpointer
+pangoft2_view_create (const PangoViewer *klass G_GNUC_UNUSED)
+{
+  PangoFontMap *fontmap;
+  fontmap = pango_ft2_font_map_new ();
+
+  pango_ft2_font_map_set_resolution (PANGO_FT2_FONT_MAP (fontmap), opt_dpi, opt_dpi);
+  pango_ft2_font_map_set_default_substitute (PANGO_FT2_FONT_MAP (fontmap), substitute_func, NULL, NULL);
+
+  return fontmap;
+}
+
+static void
+pangoft2_view_destroy (gpointer instance)
+{
+  g_object_unref (instance);
+}
+
+static PangoContext *
+pangoft2_view_get_context (gpointer instance)
+{
+  return pango_font_map_create_context (PANGO_FONT_MAP (instance));
+}
+
+static gpointer
+pangoft2_view_create_surface (gpointer instance G_GNUC_UNUSED,
+                             int      width,
+                             int      height)
+{
+  FT_Bitmap *bitmap;
+
+  bitmap = g_slice_new (FT_Bitmap);
+  bitmap->width = width;
+  bitmap->pitch = (bitmap->width + 3) & ~3;
+  bitmap->rows = height;
+  bitmap->buffer = g_malloc (bitmap->pitch * bitmap->rows);
+  bitmap->num_grays = 256;
+  bitmap->pixel_mode = ft_pixel_mode_grays;
+  memset (bitmap->buffer, 0x00, bitmap->pitch * bitmap->rows);
+
+  return bitmap;
+}
+
+static void
+pangoft2_view_destroy_surface (gpointer instance G_GNUC_UNUSED,
+                              gpointer surface)
+{
+  FT_Bitmap *bitmap = (FT_Bitmap *) surface;
+
+  g_free (bitmap->buffer);
+  g_slice_free (FT_Bitmap, bitmap);
+}
+
+static void
+render_callback (PangoLayout *layout,
+                int          x,
+                int          y,
+                gpointer     context,
+                gpointer     state G_GNUC_UNUSED)
+{
+  pango_ft2_render_layout ((FT_Bitmap *)context,
+                          layout,
+                          x, y);
+}
+
+static void
+pangoft2_view_render (gpointer      instance G_GNUC_UNUSED,
+                     gpointer      surface,
+                     PangoContext *context,
+                     int          *width,
+                     int          *height,
+                     gpointer      state)
+{
+  int pix_idx;
+  FT_Bitmap *bitmap = (FT_Bitmap *) surface;
+
+  do_output (context, render_callback, NULL, surface, state, width, height);
+
+  for (pix_idx=0; pix_idx<bitmap->pitch * bitmap->rows; pix_idx++)
+    bitmap->buffer[pix_idx] = 255 - bitmap->buffer[pix_idx];
+}
+
+static void
+pangoft2_view_write (gpointer instance G_GNUC_UNUSED,
+                    gpointer surface,
+                    FILE    *stream,
+                    int      width,
+                    int      height)
+{
+  int row, bytes;
+  FT_Bitmap *bitmap = (FT_Bitmap *) surface;
+
+  /* Write it as pgm to output */
+  fprintf(stream,
+         "P5\n"
+         "%d %d\n"
+         "255\n", width, height);
+  for (row = 0; row < height; row++)
+    bytes = fwrite(bitmap->buffer + row * bitmap->pitch, 1, width, stream);
+}
+
+const PangoViewer pangoft2_viewer = {
+  "PangoFT2",
+  "ft2",
+  ".pgm",
+  pangoft2_view_create,
+  pangoft2_view_destroy,
+  pangoft2_view_get_context,
+  pangoft2_view_create_surface,
+  pangoft2_view_destroy_surface,
+  pangoft2_view_render,
+  pangoft2_view_write,
+  NULL,
+  NULL,
+  NULL
+};
diff --git a/pango-view/viewer-pangox.c b/pango-view/viewer-pangox.c
new file mode 100755 (executable)
index 0000000..137319d
--- /dev/null
@@ -0,0 +1,122 @@
+/* viewer-pangox.c: PangoX viewer backend.
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+
+#include "viewer-render.h"
+#include "viewer-x.h"
+
+#include <pango/pangox.h>
+
+static void
+pangox_view_destroy (gpointer instance)
+{
+  XViewer *x = (XViewer *)instance;
+
+  pango_x_shutdown_display (x->display);
+
+  x_view_destroy (instance);
+}
+
+static PangoContext *
+pangox_view_get_context (gpointer instance)
+{
+  XViewer *x = (XViewer *) instance;
+  PangoContext *context;
+  PangoMatrix matrix = {0., 0., 0., 0., 0., 0.};
+
+  context = pango_font_map_create_context (pango_x_font_map_for_display (x->display));
+
+  /* We set an all-zero matrix on the context, to negotiate that
+   * this backend doesn't support transformations.
+   */
+  pango_context_set_matrix (context, &matrix);
+
+  return context;
+}
+
+typedef struct
+{
+  XViewer *x;
+  Drawable drawable;
+  GC gc;
+} MyXContext;
+
+static void
+render_callback (PangoLayout *layout,
+                int          x,
+                int          y,
+                gpointer     context,
+                gpointer     state G_GNUC_UNUSED)
+{
+  MyXContext *x_context = (MyXContext *) context;
+
+  pango_x_render_layout (x_context->x->display,
+                        x_context->drawable,
+                        x_context->gc,
+                        layout,
+                        x, y);
+}
+
+static void
+pangox_view_render (gpointer      instance,
+                   gpointer      surface,
+                   PangoContext *context,
+                   int          *width,
+                   int          *height,
+                   gpointer      state)
+{
+  XViewer *x = (XViewer *) instance;
+  Pixmap pixmap = (Pixmap) surface;
+  GC gc;
+  MyXContext x_context;
+
+  gc = XCreateGC (x->display, pixmap, 0, NULL);
+
+  XSetForeground(x->display, gc, WhitePixel(x->display, x->screen));
+  XFillRectangle (x->display, pixmap, gc, 0, 0, *width, *height);
+
+  x_context.x = x;
+  x_context.drawable = pixmap;
+  x_context.gc = gc;
+
+  XSetForeground(x->display, gc, BlackPixel(x->display, x->screen));
+  do_output (context, render_callback, NULL, &x_context, state, width, height);
+
+  XFlush(x->display);
+
+  XFreeGC (x->display, gc);
+}
+
+const PangoViewer pangox_viewer = {
+  "PangoX",
+  "x",
+  NULL,
+  x_view_create,
+  pangox_view_destroy,
+  pangox_view_get_context,
+  x_view_create_surface,
+  x_view_destroy_surface,
+  pangox_view_render,
+  NULL,
+  x_view_create_window,
+  x_view_destroy_window,
+  x_view_display
+};
diff --git a/pango-view/viewer-pangoxft.c b/pango-view/viewer-pangoxft.c
new file mode 100755 (executable)
index 0000000..948cd90
--- /dev/null
@@ -0,0 +1,154 @@
+/* viewer-pangoxft.c: PangoXft viewer backend.
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+
+#include "viewer-render.h"
+#include "viewer-x.h"
+
+#include <pango/pangoxft.h>
+
+static void
+default_substitute (FcPattern *pattern,
+                   gpointer   data G_GNUC_UNUSED)
+{
+  FcPatternDel (pattern, FC_DPI);
+  FcPatternAddInteger (pattern, FC_DPI, opt_dpi);
+
+  if (opt_hinting != HINT_DEFAULT)
+    {
+      FcPatternDel (pattern, FC_HINTING);
+      FcPatternAddBool (pattern, FC_HINTING, opt_hinting != HINT_NONE);
+
+      FcPatternDel (pattern, FC_AUTOHINT);
+      FcPatternAddBool (pattern, FC_AUTOHINT, opt_hinting == HINT_AUTO);
+    }
+}
+
+static gpointer
+pangoxft_view_create (const PangoViewer *klass)
+{
+  XViewer *instance;
+
+  instance = x_view_create (klass);
+
+  XftInit (NULL);
+
+  pango_xft_set_default_substitute (instance->display, instance->screen,
+                                   default_substitute, NULL, NULL);
+
+  return instance;
+}
+
+static void
+pangoxft_view_destroy (gpointer instance)
+{
+  XViewer *x = (XViewer *)instance;
+
+  pango_xft_shutdown_display (x->display, x->screen);
+
+  x_view_destroy (instance);
+}
+
+static PangoContext *
+pangoxft_view_get_context (gpointer instance)
+{
+  XViewer *x = (XViewer *) instance;
+
+  return pango_font_map_create_context (pango_xft_get_font_map (x->display, x->screen));
+}
+
+typedef struct
+{
+  XftDraw *draw;
+  XftColor color;
+} MyXftContext;
+
+static void
+render_callback (PangoLayout *layout,
+                int          x,
+                int          y,
+                gpointer     context,
+                gpointer     state G_GNUC_UNUSED)
+{
+  MyXftContext *xft_context = (MyXftContext *) context;
+
+  pango_xft_render_layout (xft_context->draw,
+                          &xft_context->color,
+                          layout,
+                          x * PANGO_SCALE, y * PANGO_SCALE);
+}
+
+static void
+pangoxft_view_render (gpointer      instance,
+                     gpointer      surface,
+                     PangoContext *context,
+                     int          *width,
+                     int          *height,
+                     gpointer      state)
+{
+  XViewer *x = (XViewer *) instance;
+  Pixmap pixmap = (Pixmap) surface;
+  MyXftContext xft_context;
+  XftDraw *draw;
+  XftColor color;
+
+  draw = XftDrawCreate (x->display, pixmap,
+                       DefaultVisual (x->display, x->screen),
+                       DefaultColormap (x->display, x->screen));
+
+  /* XftDrawRect only fills solid.
+   * Flatten with white.
+   */
+  color.color.red = ((opt_bg_color.red * opt_bg_alpha) >> 16) + (65535 - opt_bg_alpha);
+  color.color.green = ((opt_bg_color.green * opt_bg_alpha) >> 16) + (65535 - opt_bg_alpha);
+  color.color.blue = ((opt_bg_color.blue * opt_bg_alpha) >> 16) + (65535 - opt_bg_alpha);
+  color.color.alpha = 65535;
+
+  XftDrawRect (draw, &color, 0, 0, *width, *height);
+
+  color.color.red = opt_fg_color.red;
+  color.color.blue = opt_fg_color.green;
+  color.color.green = opt_fg_color.blue;
+  color.color.alpha = opt_fg_alpha;
+
+  xft_context.draw = draw;
+  xft_context.color = color;
+
+  do_output (context, render_callback, NULL, &xft_context, state, width, height);
+
+  XftDrawDestroy (draw);
+}
+
+const PangoViewer pangoxft_viewer = {
+  "PangoXft",
+  "xft",
+  NULL,
+  pangoxft_view_create,
+  pangoxft_view_destroy,
+  pangoxft_view_get_context,
+  x_view_create_surface,
+  x_view_destroy_surface,
+  pangoxft_view_render,
+  NULL,
+  x_view_create_window,
+  x_view_destroy_window,
+  x_view_display
+};
diff --git a/pango-view/viewer-render.c b/pango-view/viewer-render.c
new file mode 100755 (executable)
index 0000000..c698b45
--- /dev/null
@@ -0,0 +1,797 @@
+/* viewer-render.c: Common code for rendering in viewers
+ *
+ * Copyright (C) 1999, 2004 Red Hat Software
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include <errno.h>
+#include <math.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <pango/pango.h>
+
+#include "viewer-render.h"
+
+gboolean opt_display = TRUE;
+int opt_dpi = 96;
+const char *opt_font = "";
+gboolean opt_header = FALSE;
+const char *opt_output = NULL;
+int opt_margin = 10;
+int opt_markup = FALSE;
+gboolean opt_rtl = FALSE;
+double opt_rotate = 0;
+gboolean opt_auto_dir = TRUE;
+const char *opt_text = NULL;
+gboolean opt_waterfall = FALSE;
+int opt_width = -1;
+int opt_height = -1;
+int opt_indent = 0;
+gboolean opt_justify = 0;
+int opt_runs = 1;
+PangoAlignment opt_align = PANGO_ALIGN_LEFT;
+PangoEllipsizeMode opt_ellipsize = PANGO_ELLIPSIZE_NONE;
+PangoGravity opt_gravity = PANGO_GRAVITY_SOUTH;
+PangoGravityHint opt_gravity_hint = PANGO_GRAVITY_HINT_NATURAL;
+HintMode opt_hinting = HINT_DEFAULT;
+PangoWrapMode opt_wrap = PANGO_WRAP_WORD_CHAR;
+gboolean opt_wrap_set = FALSE;
+const char *opt_pangorc = NULL;
+const PangoViewer *opt_viewer = NULL;
+const char *opt_language = NULL;
+gboolean opt_single_par = FALSE;
+PangoColor opt_fg_color = {0, 0, 0};
+guint16 opt_fg_alpha = 65535;
+gboolean opt_bg_set = FALSE;
+PangoColor opt_bg_color = {65535, 65535, 65535};
+guint16 opt_bg_alpha = 65535;
+
+/* Text (or markup) to render */
+static char *text;
+
+void
+fail (const char *format, ...)
+{
+  const char *msg;
+
+  va_list vap;
+  va_start (vap, format);
+  msg = g_strdup_vprintf (format, vap);
+  g_printerr ("%s: %s\n", g_get_prgname (), msg);
+
+  exit (1);
+}
+
+static PangoLayout *
+make_layout(PangoContext *context,
+           const char   *text,
+           double        size)
+{
+  static PangoFontDescription *font_description;
+  PangoAlignment align;
+  PangoLayout *layout;
+
+  layout = pango_layout_new (context);
+  if (opt_markup)
+    pango_layout_set_markup (layout, text, -1);
+  else
+    pango_layout_set_text (layout, text, -1);
+
+  pango_layout_set_auto_dir (layout, opt_auto_dir);
+  pango_layout_set_ellipsize (layout, opt_ellipsize);
+  pango_layout_set_justify (layout, opt_justify);
+  pango_layout_set_single_paragraph_mode (layout, opt_single_par);
+  pango_layout_set_wrap (layout, opt_wrap);
+
+  font_description = pango_font_description_from_string (opt_font);
+  if (size > 0)
+    pango_font_description_set_size (font_description, size * PANGO_SCALE);
+
+  if (opt_width > 0)
+    pango_layout_set_width (layout, (opt_width * opt_dpi * PANGO_SCALE + 36) / 72);
+
+  if (opt_height > 0)
+    pango_layout_set_height (layout, (opt_height * opt_dpi * PANGO_SCALE + 36) / 72);
+  else
+    pango_layout_set_height (layout, opt_height);
+
+  if (opt_indent != 0)
+    pango_layout_set_indent (layout, (opt_indent * opt_dpi * PANGO_SCALE + 36) / 72);
+
+  align = opt_align;
+  if (align != PANGO_ALIGN_CENTER &&
+      pango_context_get_base_dir (context) != PANGO_DIRECTION_LTR) {
+    /* pango reverses left and right if base dir ir rtl.  so we should
+     * reverse to cancel that.  unfortunately it also does that for
+     * rtl paragraphs, so we cannot really get left/right.  all we get
+     * is default/other-side. */
+    align = PANGO_ALIGN_LEFT + PANGO_ALIGN_RIGHT - align;
+  }
+  pango_layout_set_alignment (layout, align);
+
+  pango_layout_set_font_description (layout, font_description);
+
+  pango_font_description_free (font_description);
+
+  return layout;
+}
+
+gchar *
+get_options_string (void)
+{
+  PangoFontDescription *font_description = pango_font_description_from_string (opt_font);
+  gchar *font_name;
+  gchar *result;
+
+  if (opt_waterfall)
+    pango_font_description_unset_fields (font_description, PANGO_FONT_MASK_SIZE);
+
+  font_name = pango_font_description_to_string (font_description);
+  result = g_strdup_printf ("%s: %s (%d dpi)", opt_viewer->name, font_name, opt_dpi);
+  pango_font_description_free (font_description);
+  g_free (font_name);
+
+  return result;
+}
+
+static void
+output_body (PangoLayout    *layout,
+            RenderCallback  render_cb,
+            gpointer        cb_context,
+            gpointer        cb_data,
+            int            *width,
+            int            *height,
+            gboolean        supports_matrix)
+{
+  PangoRectangle logical_rect;
+  int size, start_size, end_size, increment;
+  int x = 0, y = 0;
+
+  if (!supports_matrix)
+    {
+      const PangoMatrix* matrix;
+      const PangoMatrix identity = PANGO_MATRIX_INIT;
+      PangoContext *context = pango_layout_get_context (layout);
+      matrix = pango_context_get_matrix (context);
+      if (matrix)
+       {
+         x += matrix->x0;
+         y += matrix->y0;
+       }
+      pango_context_set_matrix (context, &identity);
+      pango_layout_context_changed (layout);
+    }
+
+  if (opt_waterfall)
+    {
+      start_size = 8;
+      end_size = 48;
+      increment = 4;
+    }
+  else
+    {
+      start_size = end_size = -1;
+      increment = 1;
+    }
+
+  *width = 0;
+  *height = 0;
+
+  for (size = start_size; size <= end_size; size += increment)
+    {
+      if (size > 0)
+        {
+         PangoFontDescription *desc = pango_font_description_copy (pango_layout_get_font_description (layout));
+         pango_font_description_set_size (desc, size * PANGO_SCALE);
+         pango_layout_set_font_description (layout, desc);
+         pango_font_description_free (desc);
+       }
+
+      pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+
+      if (render_cb)
+       (*render_cb) (layout, x, y+*height, cb_context, cb_data);
+
+      *width = MAX (*width, 
+                   MAX (logical_rect.x + logical_rect.width,
+                        PANGO_PIXELS (pango_layout_get_width (layout))));
+      *height +=    MAX (logical_rect.y + logical_rect.height,
+                        PANGO_PIXELS (pango_layout_get_height (layout)));
+    }
+}
+
+static void
+set_transform (PangoContext     *context,
+              TransformCallback transform_cb,
+              gpointer          cb_context,
+              gpointer          cb_data,
+              PangoMatrix      *matrix)
+{
+  pango_context_set_matrix (context, matrix);
+  if (transform_cb)
+    (*transform_cb) (context, matrix, cb_context, cb_data);
+}
+
+void
+do_output (PangoContext     *context,
+          RenderCallback    render_cb,
+          TransformCallback transform_cb,
+          gpointer          cb_context,
+          gpointer          cb_data,
+          int              *width_out,
+          int              *height_out)
+{
+  PangoLayout *layout;
+  PangoRectangle rect;
+  PangoMatrix matrix = PANGO_MATRIX_INIT;
+  PangoMatrix *orig_matrix;
+  gboolean supports_matrix;
+  int rotated_width, rotated_height;
+  int x = opt_margin;
+  int y = opt_margin;
+  int width, height;
+
+  width = 0;
+  height = 0;
+
+  orig_matrix = pango_matrix_copy (pango_context_get_matrix (context));
+  /* If the backend sets an all-zero matrix on the context,
+   * means that it doesn't support transformations.
+   */
+  supports_matrix = !orig_matrix ||
+                   (orig_matrix->xx != 0. || orig_matrix->xy != 0. ||
+                    orig_matrix->yx != 0. || orig_matrix->yy != 0. ||
+                    orig_matrix->x0 != 0. || orig_matrix->y0 != 0.);
+
+  set_transform (context, transform_cb, cb_context, cb_data, NULL);
+
+  pango_context_set_language (context,
+                             opt_language ? pango_language_from_string (opt_language)
+                                          : pango_language_get_default ());
+  pango_context_set_base_dir (context,
+                             opt_rtl ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR);
+
+  if (opt_header)
+    {
+      char *options_string = get_options_string ();
+      pango_context_set_base_gravity (context, PANGO_GRAVITY_SOUTH);
+      layout = make_layout (context, options_string, 10);
+      pango_layout_get_extents (layout, NULL, &rect);
+
+      width = MAX (width, PANGO_PIXELS (rect.width));
+      height += PANGO_PIXELS (rect.height);
+
+      if (render_cb)
+       (*render_cb) (layout, x, y, cb_context, cb_data);
+
+      y += PANGO_PIXELS (rect.height);
+
+      g_object_unref (layout);
+      g_free (options_string);
+    }
+
+  if (opt_rotate != 0)
+    {
+      if (supports_matrix)
+       pango_matrix_rotate (&matrix, opt_rotate);
+      else
+       g_printerr ("The backend does not support rotated text\n");
+    }
+
+  pango_context_set_base_gravity (context, opt_gravity);
+  pango_context_set_gravity_hint (context, opt_gravity_hint);
+
+  layout = make_layout (context, text, -1);
+
+  set_transform (context, transform_cb, cb_context, cb_data, &matrix);
+
+  output_body (layout,
+              NULL, NULL, NULL,
+              &rotated_width, &rotated_height,
+              supports_matrix);
+
+  rect.x = rect.y = 0;
+  rect.width = rotated_width;
+  rect.height = rotated_height;
+
+  pango_matrix_transform_pixel_rectangle (&matrix, &rect);
+
+  matrix.x0 = x - rect.x;
+  matrix.y0 = y - rect.y;
+
+  set_transform (context, transform_cb, cb_context, cb_data, &matrix);
+
+  if (render_cb)
+    output_body (layout,
+                render_cb, cb_context, cb_data,
+                &rotated_width, &rotated_height,
+                supports_matrix);
+
+  width = MAX (width, rect.width);
+  height += rect.height;
+
+  width += 2 * opt_margin;
+  height += 2 * opt_margin;
+
+  if (width_out)
+    *width_out = width;
+  if (height_out)
+    *height_out = height;
+
+  pango_context_set_matrix (context, orig_matrix);
+  pango_matrix_free (orig_matrix);
+  g_object_unref (layout);
+}
+
+static gboolean
+parse_enum (GType       type,
+           int        *value,
+           const char *name,
+           const char *arg,
+           gpointer    data G_GNUC_UNUSED,
+           GError **error)
+{
+  char *possible_values = NULL;
+  gboolean ret;
+
+  ret = pango_parse_enum (type,
+                         arg,
+                         value,
+                         FALSE,
+                         &possible_values);
+
+  if (!ret && error)
+    {
+      g_set_error(error,
+                 G_OPTION_ERROR,
+                 G_OPTION_ERROR_BAD_VALUE,
+                 "Argument for %s must be one of %s",
+                 name,
+                 possible_values);
+    }
+
+  g_free (possible_values);
+
+  return ret;
+}
+
+static gboolean
+parse_align (const char *name,
+            const char *arg,
+            gpointer    data,
+            GError **error)
+{
+  return parse_enum (PANGO_TYPE_ALIGNMENT, (int*)(void*)&opt_align,
+                    name, arg, data, error);
+}
+
+static gboolean
+parse_ellipsis (const char *name,
+               const char *arg,
+               gpointer    data,
+               GError **error)
+{
+  return parse_enum (PANGO_TYPE_ELLIPSIZE_MODE, (int*)(void*)&opt_ellipsize,
+                    name, arg, data, error);
+}
+
+static gboolean
+parse_gravity (const char *name,
+              const char *arg,
+              gpointer    data,
+              GError **error)
+{
+  return parse_enum (PANGO_TYPE_GRAVITY, (int*)(void*)&opt_gravity,
+                    name, arg, data, error);
+}
+
+static gboolean
+parse_gravity_hint (const char *name,
+                   const char *arg,
+                   gpointer    data,
+                   GError **error)
+{
+  return parse_enum (PANGO_TYPE_GRAVITY_HINT, (int*)(void*)&opt_gravity_hint,
+                    name, arg, data, error);
+}
+
+static gboolean
+parse_hinting (const char *name G_GNUC_UNUSED,
+              const char *arg,
+              gpointer    data G_GNUC_UNUSED,
+              GError    **error)
+{
+  gboolean ret = TRUE;
+
+  if (strcmp (arg, "none") == 0)
+    opt_hinting = HINT_NONE;
+  else if (strcmp (arg, "auto") == 0)
+    opt_hinting = HINT_AUTO;
+  else if (strcmp (arg, "full") == 0)
+    opt_hinting = HINT_FULL;
+  else
+    {
+      g_set_error(error,
+                 G_OPTION_ERROR,
+                 G_OPTION_ERROR_BAD_VALUE,
+                 "Argument for --hinting must be one of none/auto/full");
+      ret = FALSE;
+    }
+
+  return ret;
+}
+
+static gboolean
+parse_wrap (const char *name,
+           const char *arg,
+           gpointer    data,
+           GError    **error)
+{
+  gboolean ret;
+  if ((ret = parse_enum (PANGO_TYPE_WRAP_MODE, (int*)(void*)&opt_wrap,
+                        name, arg, data, error)))
+    {
+      opt_wrap_set = TRUE;
+    }
+  return ret;
+}
+
+static gboolean
+parse_rgba_color (PangoColor *color,
+                 guint16    *alpha,
+                 const char *name,
+                 const char *arg,
+                 gpointer    data G_GNUC_UNUSED,
+                 GError    **error)
+{
+  gboolean ret;
+  char buf[32];
+  int len;
+
+  len = strlen (arg);
+  /* handle alpha */
+  if (*arg == '#' && (len == 5 || len == 9 || len == 17))
+    {
+      int width, bits;
+      unsigned int a;
+
+      bits = len - 1;
+      width = bits >> 2;
+
+      strcpy (buf, arg);
+      arg = buf;
+
+      if (!sscanf (buf + len - width, "%x", &a))
+        {
+         ret = FALSE;
+         goto err;
+       }
+      buf[len - width] = '\0';
+
+      a <<= (16 - bits);
+      while (bits < 16)
+        {
+         a |= (a >> bits);
+         bits *= 2;
+       }
+      *alpha = a;
+    }
+  else
+    *alpha = 65535;
+
+  ret = pango_color_parse (color, arg);
+
+err:
+  if (!ret && error)
+    {
+      g_set_error(error,
+                 G_OPTION_ERROR,
+                 G_OPTION_ERROR_BAD_VALUE,
+                 "Argument for %s must be a color name like red, or CSS-style #rrggbb / #rrggbbaa",
+                 name);
+    }
+
+  return ret;
+}
+
+static gboolean
+parse_foreground (const char *name,
+                 const char *arg,
+                 gpointer    data,
+                 GError **error)
+{
+  return parse_rgba_color (&opt_fg_color, &opt_fg_alpha,
+                          name, arg, data, error);
+}
+
+static gboolean
+parse_background (const char *name,
+                 const char *arg,
+                 gpointer    data,
+                 GError **error)
+{
+  opt_bg_set = TRUE;
+
+  if (0 == strcmp ("transparent", arg))
+    {
+      opt_bg_alpha = 0;
+      return TRUE;
+    }
+
+  return parse_rgba_color (&opt_bg_color, &opt_bg_alpha,
+                          name, arg, data, error);
+}
+
+static gchar *
+backends_to_string (void)
+{
+  GString *backends = g_string_new (NULL);
+  const PangoViewer **viewer;
+
+  for (viewer = viewers; *viewer; viewer++)
+    if ((*viewer)->id)
+      {
+       g_string_append (backends, (*viewer)->id);
+       g_string_append_c (backends, '/');
+      }
+  g_string_truncate (backends, MAX (0, (gint)backends->len - 1));
+
+  return g_string_free(backends,FALSE);
+}
+
+static int
+backends_get_count (void)
+{
+  const PangoViewer **viewer;
+  int i = 0;
+
+  for (viewer = viewers; *viewer; viewer++)
+    if ((*viewer)->id)
+      i++;
+
+  return i;
+}
+
+
+static gchar *
+backend_description (void)
+{
+ GString *description  = g_string_new("Pango backend to use for rendering ");
+ int backends_count = backends_get_count ();
+
+ if (backends_count > 1)
+   g_string_append_printf(description,"(default: %s)", (*viewers)->id);
+ else if (backends_count == 1)
+   g_string_append_printf(description,"(only available: %s)", (*viewers)->id);
+ else
+   g_string_append_printf(description,"(no backends found!)");
+
+ return g_string_free(description,FALSE);
+
+}
+
+static gboolean
+parse_backend (const char *name G_GNUC_UNUSED,
+              const char *arg,
+              gpointer    data G_GNUC_UNUSED,
+              GError    **error)
+{
+  gboolean ret = TRUE;
+  const PangoViewer **viewer;
+
+  for (viewer = viewers; *viewer; viewer++)
+    if (!g_ascii_strcasecmp ((*viewer)->id, arg))
+      break;
+
+  if (*viewer)
+    opt_viewer = *viewer;
+  else
+    {
+      gchar *backends = backends_to_string ();
+
+      g_set_error(error,
+                 G_OPTION_ERROR,
+                 G_OPTION_ERROR_BAD_VALUE,
+                 "Available --backend options are: %s",
+                 backends);
+      g_free(backends);
+      ret = FALSE;
+    }
+
+  return ret;
+}
+
+
+static gboolean
+show_version(const char *name G_GNUC_UNUSED,
+            const char *arg G_GNUC_UNUSED,
+            gpointer    data G_GNUC_UNUSED,
+            GError    **error G_GNUC_UNUSED)
+{
+  g_printf("%s (%s) %s\n", g_get_prgname (), PACKAGE_NAME, PACKAGE_VERSION);
+  g_printf("\nPango module interface version: %s\n", MODULE_VERSION);
+
+  if (PANGO_VERSION != pango_version())
+    g_printf("Linked Pango library has a different version: %s\n", pango_version_string ());
+
+  exit(0);
+}
+
+void
+parse_options (int argc, char *argv[])
+{
+  gchar *backend_options = backends_to_string ();
+  GOptionFlags backend_flag = backends_get_count () > 1 ? 0 : G_OPTION_FLAG_HIDDEN;
+  gchar *backend_desc = backend_description ();
+  GOptionEntry entries[] =
+  {
+    {"no-auto-dir",    0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,    &opt_auto_dir,
+     "No layout direction according to contents",                      NULL},
+    {"backend",                0, backend_flag, G_OPTION_ARG_CALLBACK,         &parse_backend,
+     backend_desc,                                          backend_options},
+    {"background",     0, 0, G_OPTION_ARG_CALLBACK,                    &parse_background,
+     "Set the background color",     "red/#rrggbb/#rrggbbaa/transparent"},
+    {"no-display",     'q', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,  &opt_display,
+     "Do not display (just write to file or whatever)",                        NULL},
+    {"dpi",            0, 0, G_OPTION_ARG_INT,                         &opt_dpi,
+     "Set the resolution",                                         "number"},
+    {"align",          0, 0, G_OPTION_ARG_CALLBACK,                    &parse_align,
+     "Text alignment",                                  "left/center/right"},
+    {"ellipsize",      0, 0, G_OPTION_ARG_CALLBACK,                    &parse_ellipsis,
+     "Ellipsization mode",                               "start/middle/end"},
+    {"font",           0, 0, G_OPTION_ARG_STRING,                      &opt_font,
+     "Set the font description",                              "description"},
+    {"foreground",     0, 0, G_OPTION_ARG_CALLBACK,                    &parse_foreground,
+     "Set the text color",                      "red/#rrggbb/#rrggbbaa"},
+    {"gravity",                0, 0, G_OPTION_ARG_CALLBACK,                    &parse_gravity,
+     "Base gravity: glyph rotation",           "south/east/north/west/auto"},
+    {"gravity-hint",   0, 0, G_OPTION_ARG_CALLBACK,                    &parse_gravity_hint,
+     "Gravity hint",                                  "natural/strong/line"},
+    {"header",         0, 0, G_OPTION_ARG_NONE,                        &opt_header,
+     "Display the options in the output",                              NULL},
+    {"height",         0, 0, G_OPTION_ARG_INT,                         &opt_height,
+     "Height in points (positive) or number of lines (negative) for ellipsizing", "+points/-numlines"},
+    {"hinting",                0, 0, G_OPTION_ARG_CALLBACK,                    &parse_hinting,
+     "Hinting style",                                      "none/auto/full"},
+    {"indent",         0, 0, G_OPTION_ARG_INT,                         &opt_indent,
+     "Width in points to indent paragraphs",                       "points"},
+    {"justify",                0, 0, G_OPTION_ARG_NONE,                        &opt_justify,
+     "Align paragraph lines to be justified",                          NULL},
+    {"language",       0, 0, G_OPTION_ARG_STRING,                      &opt_language,
+     "Language to use for font selection",                         "en_US/etc"},
+    {"margin",         0, 0, G_OPTION_ARG_INT,                         &opt_margin,
+     "Set the margin on the output in pixels",                     "pixels"},
+    {"markup",         0, 0, G_OPTION_ARG_NONE,                        &opt_markup,
+     "Interpret text as Pango markup",                                 NULL},
+    {"output",         'o', 0, G_OPTION_ARG_STRING,                    &opt_output,
+     "Save rendered image to output file",                           "file"},
+    {"pangorc",                0, 0, G_OPTION_ARG_STRING,                      &opt_pangorc,
+     "pangorc file to use (default is ./pangorc)",                   "file"},
+    {"rtl",            0, 0, G_OPTION_ARG_NONE,                        &opt_rtl,
+     "Set base direction to right-to-left",                            NULL},
+    {"rotate",         0, 0, G_OPTION_ARG_DOUBLE,                      &opt_rotate,
+     "Angle at which to rotate results",                          "degrees"},
+    {"runs",           'n', 0, G_OPTION_ARG_INT,                       &opt_runs,
+     "Run Pango layout engine this many times",                           "integer"},
+    {"single-par",     0, 0, G_OPTION_ARG_NONE,                        &opt_single_par,
+     "Enable single-paragraph mode",                                   NULL},
+    {"text",           't', 0, G_OPTION_ARG_STRING,                    &opt_text,
+     "Text to display (instead of a file)",                        "string"},
+    {"version",                0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &show_version,
+     "Show version numbers",                                           NULL},
+    {"waterfall",      0, 0, G_OPTION_ARG_NONE,                        &opt_waterfall,
+     "Create a waterfall display",                                     NULL},
+    {"width",          'w', 0, G_OPTION_ARG_INT,                       &opt_width,
+     "Width in points to which to wrap lines or ellipsize",        "points"},
+    {"wrap",           0, 0, G_OPTION_ARG_CALLBACK,                    &parse_wrap,
+     "Text wrapping mode (needs a width to be set)",   "word/char/word-char"},
+    {NULL}
+  };
+  GError *error = NULL;
+  GError *parse_error = NULL;
+  GOptionContext *context;
+  size_t len;
+  const PangoViewer **viewer;
+
+  context = g_option_context_new ("- FILE");
+  g_option_context_add_main_entries (context, entries, NULL);
+
+  for (viewer = viewers; *viewer; viewer++)
+    if ((*viewer)->get_option_group)
+      {
+        GOptionGroup *group = (*viewer)->get_option_group (*viewer);
+       if (group)
+         g_option_context_add_group (context, group);
+      }
+
+  if (!g_option_context_parse (context, &argc, &argv, &parse_error))
+  {
+    if (parse_error != NULL)
+      fail("%s", parse_error->message);
+    else
+      fail("Option parse error");
+    exit(1);
+  }
+  g_option_context_free(context);
+  g_free(backend_options);
+  g_free(backend_desc);
+
+  if ((opt_text && argc != 1) || (!opt_text && argc != 2))
+    {
+      if (opt_text && argc != 1)
+       fail ("When specifying --text, no file should be given");
+
+      g_printerr ("Usage: %s [OPTION...] FILE\n", g_get_prgname ());
+      exit (1);
+    }
+
+  /* set up the backend */
+  if (!opt_viewer)
+    {
+      opt_viewer = *viewers;
+      if (!opt_viewer)
+       fail ("No viewer backend found");
+    }
+
+  /* Get the text
+   */
+  if (opt_text)
+    {
+      text = g_strdup (opt_text);
+      len = strlen (text);
+    }
+  else
+    {
+      if (!g_file_get_contents (argv[1], &text, &len, &error))
+       fail ("%s\n", error->message);
+    }
+
+  /* Strip one trailing newline
+   */
+  if (len > 0 && text[len - 1] == '\n')
+    len--;
+  if (len > 0 && text[len - 1] == '\r')
+    len--;
+  text[len] = '\0';
+
+  /* Make sure we have valid markup
+   */
+  if (opt_markup &&
+      !pango_parse_markup (text, -1, 0, NULL, NULL, NULL, &error))
+    fail ("Cannot parse input as markup: %s", error->message);
+
+  /* Setup PANGO_RC_FILE
+   */
+  if (!opt_pangorc)
+    if (g_file_test ("./pangorc", G_FILE_TEST_IS_REGULAR))
+      opt_pangorc = "./pangorc";
+  if (opt_pangorc)
+    g_setenv ("PANGO_RC_FILE", opt_pangorc, TRUE);
+}
+
+
+void
+finalize (void)
+{
+  g_free (text);
+}
diff --git a/pango-view/viewer-render.h b/pango-view/viewer-render.h
new file mode 100755 (executable)
index 0000000..9598054
--- /dev/null
@@ -0,0 +1,91 @@
+/* viewer-render.c: Common code for rendering in viewers
+ *
+ * Copyright (C) 1999, 2004 Red Hat Software
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef VIEWER_RENDER_H
+#define VIEWER_RENDER_H
+
+#include <pango/pango-layout.h>
+
+#include "viewer.h"
+
+typedef enum {
+  HINT_DEFAULT,
+  HINT_NONE,
+  HINT_AUTO,
+  HINT_FULL
+} HintMode;
+
+typedef void (*RenderCallback) (PangoLayout *layout,
+                               int          x,
+                               int          y,
+                               gpointer     cb_context,
+                               gpointer     cb_data);
+typedef void (*TransformCallback) (PangoContext *context,
+                                  PangoMatrix  *transform,
+                                  gpointer      cb_context,
+                                  gpointer      cb_data);
+
+void fail (const char *format, ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN;
+
+void   parse_options      (int               argc,
+                          char             *argv[]);
+void   do_output          (PangoContext     *context,
+                          RenderCallback    render_cb,
+                          TransformCallback transform_cb,
+                          gpointer          cb_context,
+                          gpointer          cb_data,
+                          int              *width,
+                          int              *height);
+void   finalize           (void);
+gchar *get_options_string (void);
+
+extern const char *prog_name;
+
+/* handled by viewer-render.c */
+extern const char *opt_font;
+extern gboolean opt_header;
+extern int opt_margin;
+extern int opt_markup;
+extern gboolean opt_rtl;
+extern double opt_rotate;
+extern gboolean opt_auto_dir;
+extern const char *opt_text;
+extern gboolean opt_waterfall;
+extern int opt_width;
+extern int opt_indent;
+extern PangoEllipsizeMode opt_ellipsize;
+extern const char *opt_pangorc;
+
+/* handled by viewer-main.c */
+extern gboolean opt_display;
+extern const char *opt_output;
+extern int opt_runs;
+extern const PangoViewer *opt_viewer;
+
+/* handled by backend-specific code */
+extern int opt_dpi;
+extern HintMode opt_hinting;
+extern PangoColor opt_fg_color;
+extern guint16 opt_fg_alpha;
+extern gboolean opt_bg_set;
+extern PangoColor opt_bg_color;
+extern guint16 opt_bg_alpha;
+
+#endif /* VIEWER_RENDER_H */
diff --git a/pango-view/viewer-x.c b/pango-view/viewer-x.c
new file mode 100755 (executable)
index 0000000..ad1c9a8
--- /dev/null
@@ -0,0 +1,234 @@
+/* viewer-x.c: Common code for X-based viewers
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include <string.h>
+
+#include "viewer-render.h"
+#include "viewer-x.h"
+
+void
+x_view_init (gpointer           instance,
+            const PangoViewer *klass G_GNUC_UNUSED)
+{
+  XViewer *x = (XViewer *)instance;
+
+  x->display = XOpenDisplay (NULL);
+  if (!x->display)
+    fail ("Cannot open display %s", XDisplayName (NULL));
+
+  x->screen = DefaultScreen (x->display);
+}
+
+gpointer
+x_view_create (const PangoViewer *klass)
+{
+  XViewer *instance;
+
+  instance = g_slice_new (XViewer);
+
+  x_view_init (instance, klass);
+
+  return instance;
+}
+
+void
+x_view_destroy (gpointer instance)
+{
+  XViewer *x = (XViewer *)instance;
+
+  XCloseDisplay (x->display);
+
+  g_slice_free (XViewer, instance);
+}
+
+gpointer
+x_view_create_surface (gpointer instance,
+                      int      width,
+                      int      height)
+{
+  XViewer *x = (XViewer *) instance;
+  Pixmap pixmap;
+
+  pixmap = XCreatePixmap (x->display, DefaultRootWindow (x->display), width, height,
+                         DefaultDepth (x->display, x->screen));
+
+  return (gpointer) pixmap;
+}
+
+void
+x_view_destroy_surface (gpointer instance,
+                       gpointer surface)
+{
+  XViewer *x = (XViewer *) instance;
+  Pixmap pixmap = (Pixmap) surface;
+
+  XFreePixmap (x->display, pixmap);
+}
+
+static void
+update (Display *display,
+       Pixmap   pixmap,
+       Window   window,
+       Region  *update_region)
+{
+  GC gc;
+  XRectangle extents;
+
+  XClipBox (*update_region, &extents);
+
+  gc = XCreateGC (display, pixmap, 0, NULL);
+
+  XCopyArea (display, pixmap, window, gc,
+            extents.x, extents.y,
+            extents.width, extents.height,
+            extents.x, extents.y);
+
+  XFreeGC (display, gc);
+
+  XDestroyRegion (*update_region);
+  *update_region = NULL;
+}
+
+static void
+expose (XExposeEvent *xev,
+       Region       *update_region)
+{
+  XRectangle  r;
+
+  if (!*update_region)
+    *update_region = XCreateRegion ();
+
+  r.x = xev->x;
+  r.y = xev->y;
+  r.width = xev->width;
+  r.height = xev->height;
+
+  XUnionRectWithRegion (&r, *update_region, *update_region);
+}
+
+gpointer
+x_view_create_window (gpointer    instance,
+                     const char *title,
+                     int         width,
+                     int         height)
+{
+  XViewer *x = (XViewer *) instance;
+  unsigned long bg;
+  Window window;
+  XSizeHints size_hints;
+
+  bg = WhitePixel (x->display, x->screen);
+  window = XCreateSimpleWindow (x->display, DefaultRootWindow (x->display),
+                               0, 0, width, height, 0,
+                               bg, bg);
+
+  XSelectInput (x->display, window, ExposureMask | KeyPressMask);
+
+  XMapWindow (x->display, window);
+  XmbSetWMProperties (x->display, window,
+                     title,
+                     NULL, NULL, 0, NULL, NULL, NULL);
+
+  memset ((char *)&size_hints, 0, sizeof (XSizeHints));
+  size_hints.flags = PSize | PMaxSize;
+  size_hints.width = width; size_hints.height = height; /* for compat only */
+  size_hints.max_width = width; size_hints.max_height = height;
+
+  XSetWMNormalHints (x->display, window, &size_hints);
+
+  return (gpointer) window;
+}
+
+void
+x_view_destroy_window (gpointer instance,
+                      gpointer window)
+{
+  XViewer *x = (XViewer *) instance;
+  Window win = (Window) window;
+
+  XDestroyWindow (x->display, win);
+}
+
+gpointer
+x_view_display (gpointer instance,
+               gpointer surface,
+               gpointer win,
+               int      width,
+               int      height,
+               gpointer state)
+{
+  XViewer *x = (XViewer *) instance;
+  Pixmap pixmap = (Pixmap) surface;
+  Window window = (Window) win;
+  XEvent xev;
+  XRectangle  r;
+  Region update_region;
+  unsigned int quit_keycode;
+  unsigned int annotate_keycode;
+
+  /* force a full redraw */
+  update_region = XCreateRegion ();
+  r.x = 0;
+  r.y = 0;
+  r.width = width;
+  r.height = height;
+  XUnionRectWithRegion (&r, update_region, update_region);
+
+  annotate_keycode = XKeysymToKeycode(x->display, 'B');
+  quit_keycode = XKeysymToKeycode(x->display, 'Q');
+
+  while (1)
+    {
+      if (!XPending (x->display) && update_region)
+       update (x->display, pixmap, window, &update_region);
+
+      XNextEvent (x->display, &xev);
+      switch (xev.xany.type) {
+      case KeyPress:
+       if (xev.xkey.keycode == quit_keycode)
+         return GINT_TO_POINTER (-1);
+       else if (xev.xkey.keycode == annotate_keycode)
+         {
+           return GUINT_TO_POINTER (GPOINTER_TO_INT (state) + 1);
+         }
+       break;
+      case Expose:
+       expose (&xev.xexpose, &update_region);
+       break;
+      }
+    }
+}
+
+const PangoViewer x_viewer = {
+  "X",
+  NULL,
+  NULL,
+  x_view_create,
+  x_view_destroy,
+  NULL,
+  x_view_create_surface,
+  x_view_destroy_surface,
+  NULL,
+  NULL,
+  x_view_create_window,
+  x_view_destroy_window,
+  x_view_display
+};
diff --git a/pango-view/viewer-x.h b/pango-view/viewer-x.h
new file mode 100755 (executable)
index 0000000..28f61f6
--- /dev/null
@@ -0,0 +1,70 @@
+/* viewer-x.h: Common headers for X-based viewers
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef VIEWER_X_H
+#define VIEWER_X_H
+
+#include <pango/pango.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include "viewer.h"
+
+
+typedef struct
+{
+  Display *display;
+  int screen;
+} XViewer;
+
+
+extern const PangoViewer x_viewer;
+
+void x_view_init (gpointer           instance,
+                 const PangoViewer *klass);
+
+gpointer x_view_create (const PangoViewer *klass);
+
+void x_view_destroy (gpointer instance);
+
+gpointer x_view_create_surface (gpointer instance,
+                               int      width,
+                               int      height);
+
+void x_view_destroy_surface (gpointer instance,
+                            gpointer surface);
+
+gpointer x_view_create_window (gpointer    instance,
+                              const char *title,
+                              int         width,
+                              int         height);
+
+void x_view_destroy_window (gpointer instance,
+                           gpointer window);
+
+gpointer x_view_display (gpointer instance,
+                        gpointer surface,
+                        gpointer window,
+                        int      width,
+                        int      height,
+                        gpointer state);
+
+#endif /* VIEWER_X_H */
diff --git a/pango-view/viewer.h b/pango-view/viewer.h
new file mode 100755 (executable)
index 0000000..a493769
--- /dev/null
@@ -0,0 +1,99 @@
+/* viewer.h: PangoViewer class
+ *
+ * Copyright (C) 1999,2004,2005 Red Hat, Inc.
+ * Copyright (C) 2001 Sun Microsystems
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef VIEWER_H
+#define VIEWER_H
+
+#include <stdio.h>
+#include <pango/pango.h>
+
+typedef struct _PangoViewer PangoViewer;
+
+struct _PangoViewer {
+
+  const char *name;
+
+  const char *id;
+
+  const char *write_suffix;
+
+  gpointer (*create) (const PangoViewer *klass);
+
+  void (*destroy) (gpointer instance);
+
+  PangoContext * (*get_context) (gpointer instance);
+
+  gpointer (*create_surface) (gpointer instance,
+                             int      width,
+                             int      height);
+
+  void (*destroy_surface) (gpointer instance,
+                          gpointer surface);
+
+  void (*render) (gpointer      instance,
+                 gpointer      surface,
+                 PangoContext *context,
+                 int          *width,
+                 int          *height,
+                 gpointer      state);
+
+  /* The following can be NULL */
+
+  void (*write) (gpointer instance,
+                gpointer surface,
+                FILE    *stream,
+                int      width,
+                int      height);
+
+  gpointer (*create_window) (gpointer    instance,
+                            const char *title,
+                            int         width,
+                            int         height);
+
+  void (*destroy_window) (gpointer instance,
+                         gpointer window);
+
+  gpointer (*display) (gpointer instance,
+                      gpointer surface,
+                      gpointer window,
+                      int      width,
+                      int      height,
+                      gpointer state);
+
+  void (*load) (gpointer instance,
+               gpointer surface,
+               guchar  *buffer,
+               int      width,
+               int      height,
+               int      stride);
+
+  void (*save) (gpointer instance,
+               gpointer surface,
+               guchar  *buffer,
+               int      width,
+               int      height,
+               int      stride);
+
+  GOptionGroup * (*get_option_group) (const PangoViewer *klass);
+};
+
+extern const PangoViewer *viewers[];
+
+#endif /* VIEWER_H */
diff --git a/pango-zip.sh.in b/pango-zip.sh.in
new file mode 100755 (executable)
index 0000000..58129c2
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# Build zipfiles for Pango on Win32: separate runtime and developer packages
+
+ZIP=/tmp/pango-@PANGO_VERSION@.zip
+DEVZIP=/tmp/pango-dev-@PANGO_VERSION@.zip
+cd @prefix@
+
+mkdir -p share/doc/pango-@PANGO_VERSION@
+cp -p @abs_srcdir@/COPYING share/doc/pango-@PANGO_VERSION@
+
+mkdir -p share/doc/pango-dev-@PANGO_VERSION@
+cp -p @abs_srcdir@/COPYING share/doc/pango-dev-@PANGO_VERSION@
+
+rm $ZIP
+zip $ZIP -@ <<EOF
+bin/pango-querymodules.exe
+etc/pango/pango.modules
+bin/libpango-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll
+bin/libpangoft2-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll
+bin/libpangowin32-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll
+bin/libpangocairo-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll
+EOF
+
+zip $ZIP lib/pango/@PANGO_MODULE_VERSION@/modules/*.dll
+
+zip -r $ZIP share/doc/pango-@PANGO_VERSION@
+
+rm $DEVZIP
+zip -r $DEVZIP -@ <<EOF
+include/pango-1.0
+lib/libpango-@PANGO_API_VERSION@.dll.a
+lib/pango-@PANGO_API_VERSION@.lib
+lib/pango-@PANGO_API_VERSION@.def
+lib/libpangoft2-@PANGO_API_VERSION@.dll.a
+lib/pangoft2-@PANGO_API_VERSION@.lib
+lib/pangoft2-@PANGO_API_VERSION@.def
+lib/libpangowin32-@PANGO_API_VERSION@.dll.a
+lib/pangowin32-@PANGO_API_VERSION@.lib
+lib/pangowin32-@PANGO_API_VERSION@.def
+lib/libpangocairo-@PANGO_API_VERSION@.dll.a
+lib/pangocairo-@PANGO_API_VERSION@.lib
+lib/pangocairo-@PANGO_API_VERSION@.def
+lib/pkgconfig/pango.pc
+lib/pkgconfig/pangoft2.pc
+lib/pkgconfig/pangowin32.pc
+lib/pkgconfig/pangocairo.pc
+share/gtk-doc/html/pango
+EOF
+
+zip -r $DEVZIP share/doc/pango-dev-@PANGO_VERSION@
diff --git a/pango.doap b/pango.doap
new file mode 100755 (executable)
index 0000000..a044ec0
--- /dev/null
@@ -0,0 +1,34 @@
+<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+         xmlns:foaf="http://xmlns.com/foaf/0.1/"
+         xmlns:gnome="http://api.gnome.org/doap-extensions#"
+         xmlns="http://usefulinc.com/ns/doap#">
+
+  <name xml:lang="en">pango</name>
+  <shortdesc xml:lang="en">Internationalized text layout and rendering library</shortdesc>
+  <category rdf:resource="http://api.gnome.org/doap-extensions#platform" />
+
+  <homepage
+  rdf:resource="http://www.pango.org/" />
+  <mailing-list
+  rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-i18n-list" />
+  <download-page
+  rdf:resource="http://download.gnome.org/sources/pango/"/>
+  <bug-database
+  rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=pango"/>
+
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Owen Taylor</foaf:name>
+      <foaf:mbox rdf:resource="mailto:otaylor@redhat.com" />
+      <gnome:userid>otaylor</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Behdad Esfahbod</foaf:name>
+      <foaf:mbox rdf:resource="mailto:behdad@gnome.org" />
+      <gnome:userid>behdad</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+</Project>
diff --git a/pango.pc.in b/pango.pc.in
new file mode 100755 (executable)
index 0000000..5cc3ef8
--- /dev/null
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+pango_module_version=@PANGO_MODULE_VERSION@
+
+Name: Pango
+Description: Internationalized text handling
+Version: @VERSION@
+Requires: glib-2.0,gobject-2.0,gmodule-no-export-2.0
+Libs: -L${libdir} -lpango-@PANGO_API_VERSION@ @PKGCONFIG_MATH_LIBS@
+Cflags: -I${includedir}/pango-1.0
diff --git a/pango/Makefile.am b/pango/Makefile.am
new file mode 100755 (executable)
index 0000000..3480af0
--- /dev/null
@@ -0,0 +1,662 @@
+## Process this file with automake to create Makefile.in.
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH.
+GPATH = $(srcdir)
+
+if HAVE_FREETYPE
+OPENTYPE_SUBDIR=opentype
+endif
+
+EXTRA_DIST = 
+BUILT_GIRSOURCES =
+
+FRIBIDI_SUBDIR=mini-fribidi
+
+SUBDIRS = $(OPENTYPE_SUBDIR) $(FRIBIDI_SUBDIR)
+
+DIST_SUBDIRS = mini-fribidi opentype
+
+INCLUDES =                                             \
+       -DG_LOG_DOMAIN=\"Pango\"                        \
+       -DPANGO_ENABLE_BACKEND                          \
+       -DPANGO_ENABLE_ENGINE                           \
+       -DSYSCONFDIR=\"$(sysconfdir)\"                  \
+       -DLIBDIR=\"$(libdir)\"                          \
+       -I$(top_srcdir)                                 \
+       $(PANGO_DEBUG_FLAGS)                            \
+       $(GLIB_CFLAGS)                                  \
+       $(XFT_CFLAGS)                                   \
+       $(CAIRO_CFLAGS)                                 \
+       $(FREETYPE_CFLAGS)                              \
+       $(X_CFLAGS)
+
+BUILT_SOURCES = pango-enum-types.h pango-enum-types.c pango-features.h
+
+pangoincludedir=$(includedir)/pango-1.0/pango
+
+if OS_WIN32
+else
+libm = -lm
+endif
+
+# ------------------- libpango -------------------
+
+lib_LTLIBRARIES = libpango-1.0.la
+BUILT_GIRSOURCES += Pango-1.0.gir
+
+libpango_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
+libpango_1_0_la_LIBADD =               \
+       $(GLIB_LIBS)                    \
+       $(libm)                         \
+       $(INCLUDED_LANG_MODULES)
+libpango_1_0_la_DEPENDENCIES =                 \
+       $(INCLUDED_LANG_MODULES)
+
+libpango_1_0_la_LIBADD += mini-fribidi/libmini-fribidi.la
+libpango_1_0_la_DEPENDENCIES += mini-fribidi/libmini-fribidi.la
+
+if PLATFORM_WIN32
+libpango_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pango.def -Wl,pango-win32-res.o
+libpango_1_0_la_DEPENDENCIES += pango-win32-res.o pango.def
+endif
+pango-win32-res.o: pango.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+libpango_1_0_la_SOURCES =                      \
+       break.c                                 \
+       ellipsize.c                             \
+       fonts.c                                 \
+       glyphstring.c                           \
+       modules.c                               \
+       pango-attributes.c                      \
+       pango-bidi-type.c                       \
+       pango-color.c                           \
+       pango-color-table.h                     \
+       pango-context.c                         \
+       pango-coverage.c                        \
+       pango-engine.c                          \
+       pango-engine-private.h                  \
+       pango-fontmap.c                         \
+       pango-fontset.c                         \
+       pango-glyph-item.c                      \
+       pango-gravity.c                         \
+       pango-impl-utils.h                      \
+       pango-item.c                            \
+       pango-language.c                        \
+       pango-language-sample-table.h           \
+       pango-layout.c                          \
+       pango-layout-private.h                  \
+       pango-markup.c                          \
+       pango-matrix.c                          \
+       pango-renderer.c                        \
+       pango-script.c                          \
+       pango-script-lang-table.h               \
+       pango-script-private.h                          \
+       pango-tabs.c                            \
+       pango-utils.c                           \
+       reorder-items.c                         \
+       shape.c                                 \
+       pango-enum-types.c                      \
+       module-defs-lang.c
+
+pango_headers =                   \
+       pango.h            \
+       pango-attributes.h \
+       pango-bidi-type.h  \
+       pango-break.h      \
+       pango-context.h    \
+       pango-coverage.h   \
+       pango-engine.h     \
+       pango-font.h       \
+       pango-fontmap.h    \
+       pango-fontset.h    \
+       pango-glyph.h      \
+       pango-glyph-item.h \
+       pango-gravity.h    \
+       pango-item.h       \
+       pango-language.h   \
+       pango-layout.h     \
+       pango-matrix.h     \
+       pango-modules.h    \
+       pango-renderer.h   \
+       pango-script.h     \
+       pango-tabs.h       \
+       pango-types.h      \
+       pango-utils.h
+
+pangoinclude_HEADERS =    \
+       $(pango_headers)   \
+       pango-features.h   \
+       pango-enum-types.h
+
+pango-enum-types.h: s-enum-types-h
+       $(AM_V_GEN) true
+s-enum-types-h: $(pango_headers) Makefile
+       $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) \
+                       --fhead "#ifndef __PANGO_ENUM_TYPES_H__\n#define __PANGO_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+                       --fprod "/* enumerations from \"@filename@\" */\n" \
+                       --vhead "GType @enum_name@_get_type (void);\n#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"  \
+                       --ftail "G_END_DECLS\n\n#endif /* __PANGO_ENUM_TYPES_H__ */" \
+               $(pango_headers) ) > tmp-pango-enum-types.h \
+       && (cmp -s tmp-pango-enum-types.h pango-enum-types.h || cp tmp-pango-enum-types.h pango-enum-types.h ) \
+       && rm -f tmp-pango-enum-types.h \
+       && echo timestamp > $(@F)
+
+pango-enum-types.c: s-enum-types-c
+       $(AM_V_GEN) true
+s-enum-types-c: $(pango_headers) Makefile
+       $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) \
+                       --fhead "#include <pango.h>" \
+                       --fprod "\n/* enumerations from \"@filename@\" */" \
+                       --vhead "GType\n@enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G@Type@Value values[] = {"     \
+                       --vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+                       --vtail "      { 0, NULL, NULL }\n    };\n    etype = g_@type@_register_static (g_intern_static_string (\"@EnumName@\"), values);\n  }\n  return etype;\n}\n" \
+               $(pango_headers) ) > tmp-pango-enum-types.c \
+       && (cmp -s tmp-pango-enum-types.c pango-enum-types.c || cp tmp-pango-enum-types.c pango-enum-types.c ) \
+       && rm -f tmp-pango-enum-types.c \
+       && echo timestamp > $(@F)
+
+pango-features.h:
+       $(AM_V_GEN) cd $(top_builddir) && ./config.status pango/pango-features.h
+
+Pango-1.0.gir: $(libpango_1_0_la_SOURCES)
+Pango-1.0.gir: $(pango_headers)
+Pango-1.0.gir: libpango-1.0.la
+Pango-1.0.gir: $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace Pango --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=cairo-1.0 \
+            --library=libpango-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg cairo \
+            --pkg freetype2 \
+           -I$(top_srcdir) \
+           $(PANGO_CFLAGS) \
+            $(libpango_1_0_la_SOURCES) \
+           $(pango_headers) \
+           pango-enum-types.h
+
+# ------------------- libpangox -------------------
+
+if HAVE_X
+pangoinclude_HEADERS += $(pangox_headers)
+lib_LTLIBRARIES += libpangox-1.0.la
+aliasdir = $(sysconfdir)/pango
+alias_DATA = pangox.aliases
+endif
+
+pangox_headers = pangox.h
+pangox_public_sources = pangox.c
+
+libpangox_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
+libpangox_1_0_la_LIBADD =                      \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_X_MODULES)                   \
+       $(GLIB_LIBS)                            \
+       $(X_LIBS)                               \
+       $(X_EXTRA_LIBS)
+libpangox_1_0_la_DEPENDENCIES =                        \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_X_MODULES)
+
+if PLATFORM_WIN32
+libpangox_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangox.def -Wl,pangox-win32-res.o
+libpangox_1_0_la_DEPENDENCIES += pangox-win32-res.o pangox.def
+endif
+
+pangox-win32-res.o: pangox.rc
+       $(WINDRES) $< $@
+
+libpangox_1_0_la_SOURCES =                     \
+       $(pangox_public_sources)                \
+       modules.h                               \
+       module-defs-x.c                         \
+       pangox-private.h                        \
+       pangox-fontcache.c                      \
+       pangox-fontmap.c
+
+# ------------------- libpangoft2 -------------------
+
+if HAVE_FREETYPE
+pangoinclude_HEADERS += $(pangoft2_headers)
+lib_LTLIBRARIES += libpangoft2-1.0.la
+BUILT_GIRSOURCES += PangoFT2-1.0.gir
+endif
+
+pangoft2_headers =             \
+       pango-ot.h              \
+       pangofc-font.h          \
+       pangofc-fontmap.h       \
+       pangofc-decoder.h       \
+       pangoft2.h
+
+pangoft2_public_sources =      \
+       pangofc-font.c          \
+       pangofc-fontmap.c       \
+       pangofc-decoder.c       \
+       pangoft2.c
+
+libpangoft2_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
+libpangoft2_1_0_la_LIBADD =                    \
+       opentype/libharfbuzz.la                 \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_FC_MODULES)                  \
+       $(GLIB_LIBS)                            \
+       $(FREETYPE_LIBS)                        \
+       $(libm)
+libpangoft2_1_0_la_DEPENDENCIES =              \
+       opentype/libharfbuzz.la                 \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_FC_MODULES)
+libpangoft2_1_0_la_SOURCES =           \
+       $(pangoft2_public_sources) \
+       modules.h               \
+       module-defs-fc.c        \
+       pangofc-private.h       \
+       pangoft2.h              \
+       pangoft2-private.h      \
+       pangoft2-fontmap.c      \
+       pangoft2-render.c       \
+       pango-ot-private.h      \
+       pango-ot-buffer.c       \
+       pango-ot-info.c         \
+       pango-ot-ruleset.c      \
+       pango-ot-tag.c
+
+
+if PLATFORM_WIN32
+libpangoft2_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangoft2.def -Wl,pangoft2-win32-res.o
+libpangoft2_1_0_la_DEPENDENCIES += pangoft2-win32-res.o pangoft2.def
+endif
+pangoft2-win32-res.o: pangoft2.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+PangoFT2-1.0.gir: $(pangoft2_headers)
+PangoFT2-1.0.gir: $(libpangoft2_1_0_la_SOURCES)
+PangoFT2-1.0.gir: libpangoft2-1.0.la
+PangoFT2-1.0.gir: Pango-1.0.gir $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace PangoFT2 --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=Pango-1.0 \
+            --include=freetype2-2.0 \
+            --include=fontconfig-2.0 \
+            --library=libpangoft2-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg freetype2 \
+            --pkg pangoft2 \
+           -I$(top_srcdir) \
+            $(pangoft2_headers) \
+            $(pangoft2_public_sources)
+
+# ------------------- libpangoxft -------------------
+
+if HAVE_XFT
+pangoinclude_HEADERS += $(pangoxft_headers)
+lib_LTLIBRARIES += libpangoxft-1.0.la
+BUILT_GIRSOURCES += PangoXft-1.0.gir
+endif
+
+pangoxft_headers = pangoxft.h pangoxft-render.h
+
+libpangoxft_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
+libpangoxft_1_0_la_LIBADD =                    \
+       libpangoft2-$(PANGO_API_VERSION).la     \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(GLIB_LIBS)                            \
+       $(X_LIBS)                               \
+       $(XFT_LIBS)                             \
+       $(FREETYPE_LIBS)                        \
+       $(libm)
+libpangoxft_1_0_la_DEPENDENCIES =              \
+       libpangoft2-$(PANGO_API_VERSION).la     \
+       libpango-$(PANGO_API_VERSION).la
+
+if PLATFORM_WIN32
+libpangoxft_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangoxft.def -Wl,pangoxft-win32-res.o
+libpangoxft_1_0_la_DEPENDENCIES += pangoxft-win32-res.o pangoxft.def
+endif
+pangoxft-win32-res.o: pangoxft.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+libpangoxft_1_0_la_SOURCES =           \
+       pangoxft-font.c         \
+       pangoxft-fontmap.c      \
+       pangoxft-private.h      \
+       pangoxft-render.c
+
+
+PangoXft-1.0.gir: $(pangoxft_headers)
+PangoXft-1.0.gir: $(libpangoxft_1_0_la_SOURCES)
+PangoXft-1.0.gir: libpangoxft-1.0.la
+PangoXft-1.0.gir: Pango-1.0.gir PangoFT2-1.0.gir $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace PangoXft --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=xft-2.0 \
+            --include=xlib-2.0 \
+            --include=PangoFT2-1.0 \
+            --library=libpangoxft-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg freetype2 \
+           -I$(top_srcdir) \
+           $(PANGO_CFLAGS) \
+            $(pangoxft_headers) \
+            $(libpangoxft_1_0_la_SOURCES)
+
+# ------------------- libpangocairo -------------------
+
+if HAVE_CAIRO
+pangoinclude_HEADERS += $(pangocairo_headers)
+lib_LTLIBRARIES += libpangocairo-1.0.la
+BUILT_GIRSOURCES += PangoCairo-1.0.gir
+endif
+
+pangocairo_headers = pangocairo.h
+
+libpangocairo_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
+libpangocairo_1_0_la_LIBADD =                  \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(GLIB_LIBS)                            \
+       $(CAIRO_LIBS)                           \
+       $(libm)
+libpangocairo_1_0_la_DEPENDENCIES =            \
+       libpango-$(PANGO_API_VERSION).la
+libpangocairo_1_0_la_SOURCES =  \
+       pangocairo-context.c    \
+       pangocairo-font.c       \
+       pangocairo-fontmap.c    \
+       pangocairo-render.c     \
+       pangocairo-private.h
+
+if HAVE_CAIRO_WIN32
+if PLATFORM_WIN32
+libpangocairo_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangocairo.def
+libpangocairo_1_0_la_DEPENDENCIES += pangocairo.def
+endif
+
+libpangocairo_1_0_la_LIBADD += libpangowin32-$(PANGO_API_VERSION).la $(WIN32_LIBS)
+libpangocairo_1_0_la_DEPENDENCIES += libpangowin32-$(PANGO_API_VERSION).la 
+
+libpangocairo_1_0_la_SOURCES += pangocairo-win32font.c pangocairo-win32fontmap.c pangocairo-win32.h
+endif
+
+if HAVE_CAIRO_FREETYPE
+libpangocairo_1_0_la_LIBADD +=  libpangoft2-$(PANGO_API_VERSION).la $(FREETYPE_LIBS)
+libpangocairo_1_0_la_DEPENDENCIES += libpangoft2-$(PANGO_API_VERSION).la 
+PANGOCAIRO_FONT_BACKEND_GI_MODULE = PangoFT2-1.0
+
+libpangocairo_1_0_la_SOURCES += \
+       pangocairo-fcfont.c     \
+       pangocairo-fcfontmap.c  \
+       pangocairo-fc.h
+endif
+
+if HAVE_CAIRO_ATSUI
+libpangocairo_1_0_la_SOURCES += \
+       modules.h               \
+       module-defs-atsui.c     \
+       pangoatsui.h            \
+       pangoatsui.c            \
+       pangoatsui-private.h    \
+       pangoatsui-fontmap.c    \
+       pangocairo-atsui.h      \
+       pangocairo-atsuifont.c  \
+       pangocairo-atsuifont.h  \
+       pangocairo-atsuifontmap.c
+pangoinclude_HEADERS += pangoatsui.h
+
+libpangocairo_1_0_la_CFLAGS = -xobjective-c
+libpangocairo_1_0_la_LDFLAGS += -framework CoreFoundation -framework Carbon -framework Cocoa
+libpangocairo_1_0_la_LIBADD += $(INCLUDED_ATSUI_MODULES)
+# We don't have an ATSUI GIR right now, so this is just hypothetical
+PANGOCAIRO_FONT_BACKEND_GI_MODULE = PangoATSUI-1.0
+endif
+
+PangoCairo-1.0.gir: $(libpangocairo_1_0_la_SOURCES)
+PangoCairo-1.0.gir: $(pangocairo_headers)
+PangoCairo-1.0.gir: libpangocairo-1.0.la
+PangoCairo-1.0.gir: Pango-1.0.gir $(PANGOCAIRO_FONT_BACKEND_GI_MODULE).gir $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace PangoCairo --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=cairo-1.0 \
+            --include=Pango-1.0 \
+           --add-include-path=. \
+           --include=$(PANGOCAIRO_FONT_BACKEND_GI_MODULE) \
+            --library=libpangocairo-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg cairo \
+           -I$(top_srcdir) \
+           $(PANGO_CFLAGS) \
+            $(libpangocairo_1_0_la_SOURCES) \
+           $(pangocairo_headers)
+
+# ------------------- libpangowin32 -------------------
+
+if HAVE_WIN32
+pangoinclude_HEADERS += pangowin32.h
+lib_LTLIBRARIES += libpangowin32-1.0.la
+endif
+
+libpangowin32_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
+libpangowin32_1_0_la_LIBADD =                  \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_WIN32_MODULES)               \
+       $(GLIB_LIBS)                            \
+       $(WIN32_LIBS)
+libpangowin32_1_0_la_DEPENDENCIES =            \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_WIN32_MODULES)
+libpangowin32_1_0_la_SOURCES = \
+       modules.h               \
+       module-defs-win32.c     \
+       pangowin32.h            \
+       pangowin32.c            \
+       pangowin32-private.h    \
+       pangowin32-fontcache.c  \
+       pangowin32-fontmap.c
+
+if PLATFORM_WIN32
+libpangowin32_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangowin32.def -Wl,pangowin32-win32-res.o
+libpangowin32_1_0_la_DEPENDENCIES += pangowin32-win32-res.o pangowin32.def
+endif
+pangowin32-win32-res.o: pangowin32.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+
+# ------------------- win32 build stuff -------------------
+
+if OS_WIN32
+install-def-files:
+       $(AM_V_GEN) mkdir -p $(DESTDIR)$(libdir) && \
+       $(INSTALL) $(srcdir)/pango.def $(DESTDIR)$(libdir)/pango-$(PANGO_API_VERSION).def
+if HAVE_FREETYPE
+       $(INSTALL) $(srcdir)/pangoft2.def $(DESTDIR)$(libdir)/pangoft2-$(PANGO_API_VERSION).def
+endif
+       $(INSTALL) $(srcdir)/pangowin32.def $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).def
+       $(INSTALL) $(srcdir)/pangocairo.def $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).def
+if HAVE_X
+       $(INSTALL) $(srcdir)/pangox.def $(DESTDIR)$(libdir)/pangox-$(PANGO_API_VERSION).def
+       $(INSTALL) $(srcdir)/pangoxft.def $(DESTDIR)$(libdir)/pangoxft-$(PANGO_API_VERSION).def
+endif
+uninstall-def-files:
+       -rm $(DESTDIR)$(libdir)/pango$(PANGO_API_VERSION).def
+if HAVE_FREETYPE
+       -rm $(DESTDIR)$(libdir)/pangoft2-$(PANGO_API_VERSION).def
+endif
+       -rm $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).def
+       -rm $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).def
+if HAVE_X
+       -rm $(DESTDIR)$(libdir)/pangox-$(PANGO_API_VERSION).def
+       -rm $(DESTDIR)$(libdir)/pangoxft-$(PANGO_API_VERSION).def
+endif
+else
+install-def-files:
+uninstall-def-files:
+
+endif
+
+if MS_LIB_AVAILABLE
+MS_LIB_FILES = pango-$(PANGO_API_VERSION).lib pangowin32-$(PANGO_API_VERSION).lib pangocairo-$(PANGO_API_VERSION).lib
+
+if HAVE_FREETYPE
+MS_LIB_FILES += pangoft2-$(PANGO_API_VERSION).lib 
+endif
+
+noinst_DATA = $(MS_LIB_FILES)
+
+install-ms-lib: $(MS_LIB_FILES)
+       $(INSTALL) pango-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+if HAVE_FREETYPE
+       $(INSTALL) pangoft2-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+endif
+       $(INSTALL) pangowin32-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+       $(INSTALL) pangocairo-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+
+uninstall-ms-lib:
+       -rm $(DESTDIR)$(libdir)/pango-$(PANGO_API_VERSION).lib
+       -rm $(DESTDIR)$(libdir)/pangoft2-$(PANGO_API_VERSION).lib
+       -rm $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).lib
+       -rm $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).lib
+else
+install-ms-lib:
+uninstall-ms-lib:
+endif
+
+pango-$(PANGO_API_VERSION).lib: libpango-$(PANGO_API_VERSION).la $(srcdir)/pango.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpango-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pango.def -out:$@
+
+pangoft2-$(PANGO_API_VERSION).lib: libpangoft2-$(PANGO_API_VERSION).la $(srcdir)/pangoft2.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpangoft2-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pangoft2.def -out:$@
+
+pangowin32-$(PANGO_API_VERSION).lib: libpangowin32-$(PANGO_API_VERSION).la $(srcdir)/pangowin32.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpangowin32-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pangowin32.def -out:$@
+
+pangocairo-$(PANGO_API_VERSION).lib: libpangocairo-$(PANGO_API_VERSION).la $(srcdir)/pangocairo.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpangocairo-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pangocairo.def -out:$@
+
+
+# ------------------- introspection -------------------
+
+if HAVE_INTROSPECTION
+
+girdir = $(GIRDIR)
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(TYPELIBDIR)
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(G_IR_COMPILER)
+       $(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) --includedir=$(srcdir) --includedir=. $(G_IR_COMPILER_OPTS) $< -o $(builddir)/$(@F)
+
+endif # HAVE_INTROSPECTION
+
+# ------------------- pango-querymodules -------------------
+
+bin_PROGRAMS = pango-querymodules
+
+#
+# As a temporary hack, we pull in libpangox here so that we can link
+#
+pango_querymodules_SOURCES = \
+       querymodules.c
+
+pango_querymodules_LDADD =
+if HAVE_X
+pango_querymodules_LDADD += libpangox-$(PANGO_API_VERSION).la
+endif
+if HAVE_XFT
+pango_querymodules_LDADD += libpangoxft-$(PANGO_API_VERSION).la
+endif
+if HAVE_FREETYPE
+pango_querymodules_LDADD += libpangoft2-$(PANGO_API_VERSION).la
+endif
+if HAVE_WIN32
+pango_querymodules_LDADD += libpangowin32-$(PANGO_API_VERSION).la
+endif
+pango_querymodules_LDADD += libpango-$(PANGO_API_VERSION).la $(GLIB_LIBS)
+
+EXTRA_DIST +=                                  \
+       pango-enum-types.h                      \
+       module-defs.h                           \
+       module-defs-fc.c.win32                  \
+       module-defs-win32.c.win32               \
+       pango.def                               \
+       pangocairo.def                          \
+       pangowin32.def                          \
+       pangoft2.def                            \
+       makefile.msc                            \
+       pango.rc                                \
+       pango.rc.in                             \
+       pangox.aliases                          \
+       pangoft2.rc                             \
+       pangoft2.rc.in                          \
+       pangowin32.rc                           \
+       pangowin32.rc.in                        \
+       pangox.rc                               \
+       pangox.rc.in                            \
+       pangoxft.rc                             \
+       pangoxft.rc.in                          \
+       check.defs
+
+
+if HAVE_INCLUDED_MODULES
+included-modules:
+       $(AM_V_GEN) cd $(top_builddir)/modules && $(MAKE) $(AM_MAKEFLAGS) included-modules
+
+$(INCLUDED_LANG_MODULES) $(INCLUDED_X_MODULES) $(INCLUDED_FC_MODULES) $(INCLUDED_WIN32_MODULES) $(INCLUDED_ATSUI_MODULES): included-modules
+       $(AM_V_GEN) true
+
+.PHONY: included-modules
+endif
+
+MODULE_DEF_FILES = \
+       module-defs.h \
+       module-defs-lang.c \
+       module-defs-x.c \
+       module-defs-fc.c \
+       module-defs-win32.c \
+       module-defs-atsui.c
+
+$(MODULE_DEF_FILES): $(top_builddir)/config.status
+       $(AM_V_GEN) cd $(top_builddir) && $(SHELL) ./config.status pango/$@
+
+CLEANFILES =                   \
+       pango-enum-types.h      \
+       s-enum-types-h          \
+       pango-enum-types.c      \
+       s-enum-types-c
+
+MOSTLYCLEANFILES =             \
+       *.list                  \
+       *.expected
+
+DISTCLEANFILES =               \
+       pango-features.h        \
+       $(MODULE_DEF_FILES)
+
+install-data-local: install-ms-lib install-def-files
+
+install-exec-hook: 
+if DISABLE_EXPLICIT_DEPS
+       -for i in libpangoft2-$(PANGO_API_VERSION).la libpangoxft-$(PANGO_API_VERSION).la libpangox-$(PANGO_API_VERSION).la libpangowin32-$(PANGO_API_VERSION).la; do \
+         test -f $(DESTDIR)$(libdir)/$$i && $(SHELL) $(top_srcdir)/sanitize-la.sh $(DESTDIR)$(libdir)/$$i ; \
+       done
+endif
+
+uninstall-local: uninstall-ms-lib uninstall-def-files
+
+TESTS = check.defs
+
+-include $(top_srcdir)/git.mk
diff --git a/pango/Makefile.in b/pango/Makefile.in
new file mode 100644 (file)
index 0000000..b55c197
--- /dev/null
@@ -0,0 +1,1758 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@PLATFORM_WIN32_TRUE@am__append_1 = -export-symbols $(srcdir)/pango.def -Wl,pango-win32-res.o
+@PLATFORM_WIN32_TRUE@am__append_2 = pango-win32-res.o pango.def
+
+# ------------------- libpangox -------------------
+@HAVE_X_TRUE@am__append_3 = $(pangox_headers)
+@HAVE_X_TRUE@am__append_4 = libpangox-1.0.la
+@PLATFORM_WIN32_TRUE@am__append_5 = -export-symbols $(srcdir)/pangox.def -Wl,pangox-win32-res.o
+@PLATFORM_WIN32_TRUE@am__append_6 = pangox-win32-res.o pangox.def
+
+# ------------------- libpangoft2 -------------------
+@HAVE_FREETYPE_TRUE@am__append_7 = $(pangoft2_headers)
+@HAVE_FREETYPE_TRUE@am__append_8 = libpangoft2-1.0.la
+@HAVE_FREETYPE_TRUE@am__append_9 = PangoFT2-1.0.gir
+@PLATFORM_WIN32_TRUE@am__append_10 = -export-symbols $(srcdir)/pangoft2.def -Wl,pangoft2-win32-res.o
+@PLATFORM_WIN32_TRUE@am__append_11 = pangoft2-win32-res.o pangoft2.def
+
+# ------------------- libpangoxft -------------------
+@HAVE_XFT_TRUE@am__append_12 = $(pangoxft_headers)
+@HAVE_XFT_TRUE@am__append_13 = libpangoxft-1.0.la
+@HAVE_XFT_TRUE@am__append_14 = PangoXft-1.0.gir
+@PLATFORM_WIN32_TRUE@am__append_15 = -export-symbols $(srcdir)/pangoxft.def -Wl,pangoxft-win32-res.o
+@PLATFORM_WIN32_TRUE@am__append_16 = pangoxft-win32-res.o pangoxft.def
+
+# ------------------- libpangocairo -------------------
+@HAVE_CAIRO_TRUE@am__append_17 = $(pangocairo_headers)
+@HAVE_CAIRO_TRUE@am__append_18 = libpangocairo-1.0.la
+@HAVE_CAIRO_TRUE@am__append_19 = PangoCairo-1.0.gir
+@HAVE_CAIRO_WIN32_TRUE@@PLATFORM_WIN32_TRUE@am__append_20 = -export-symbols $(srcdir)/pangocairo.def
+@HAVE_CAIRO_WIN32_TRUE@@PLATFORM_WIN32_TRUE@am__append_21 = pangocairo.def
+@HAVE_CAIRO_WIN32_TRUE@am__append_22 = libpangowin32-$(PANGO_API_VERSION).la $(WIN32_LIBS)
+@HAVE_CAIRO_WIN32_TRUE@am__append_23 = libpangowin32-$(PANGO_API_VERSION).la 
+@HAVE_CAIRO_WIN32_TRUE@am__append_24 = pangocairo-win32font.c pangocairo-win32fontmap.c pangocairo-win32.h
+@HAVE_CAIRO_FREETYPE_TRUE@am__append_25 = libpangoft2-$(PANGO_API_VERSION).la $(FREETYPE_LIBS)
+@HAVE_CAIRO_FREETYPE_TRUE@am__append_26 = libpangoft2-$(PANGO_API_VERSION).la 
+@HAVE_CAIRO_FREETYPE_TRUE@am__append_27 = \
+@HAVE_CAIRO_FREETYPE_TRUE@     pangocairo-fcfont.c     \
+@HAVE_CAIRO_FREETYPE_TRUE@     pangocairo-fcfontmap.c  \
+@HAVE_CAIRO_FREETYPE_TRUE@     pangocairo-fc.h
+
+@HAVE_CAIRO_ATSUI_TRUE@am__append_28 = \
+@HAVE_CAIRO_ATSUI_TRUE@        modules.h               \
+@HAVE_CAIRO_ATSUI_TRUE@        module-defs-atsui.c     \
+@HAVE_CAIRO_ATSUI_TRUE@        pangoatsui.h            \
+@HAVE_CAIRO_ATSUI_TRUE@        pangoatsui.c            \
+@HAVE_CAIRO_ATSUI_TRUE@        pangoatsui-private.h    \
+@HAVE_CAIRO_ATSUI_TRUE@        pangoatsui-fontmap.c    \
+@HAVE_CAIRO_ATSUI_TRUE@        pangocairo-atsui.h      \
+@HAVE_CAIRO_ATSUI_TRUE@        pangocairo-atsuifont.c  \
+@HAVE_CAIRO_ATSUI_TRUE@        pangocairo-atsuifont.h  \
+@HAVE_CAIRO_ATSUI_TRUE@        pangocairo-atsuifontmap.c
+
+@HAVE_CAIRO_ATSUI_TRUE@am__append_29 = pangoatsui.h
+@HAVE_CAIRO_ATSUI_TRUE@am__append_30 = -framework CoreFoundation -framework Carbon -framework Cocoa
+@HAVE_CAIRO_ATSUI_TRUE@am__append_31 = $(INCLUDED_ATSUI_MODULES)
+
+# ------------------- libpangowin32 -------------------
+@HAVE_WIN32_TRUE@am__append_32 = pangowin32.h
+@HAVE_WIN32_TRUE@am__append_33 = libpangowin32-1.0.la
+@PLATFORM_WIN32_TRUE@am__append_34 = -export-symbols $(srcdir)/pangowin32.def -Wl,pangowin32-win32-res.o
+@PLATFORM_WIN32_TRUE@am__append_35 = pangowin32-win32-res.o pangowin32.def
+@HAVE_FREETYPE_TRUE@@MS_LIB_AVAILABLE_TRUE@am__append_36 = pangoft2-$(PANGO_API_VERSION).lib 
+bin_PROGRAMS = pango-querymodules$(EXEEXT)
+@HAVE_X_TRUE@am__append_37 = libpangox-$(PANGO_API_VERSION).la
+@HAVE_XFT_TRUE@am__append_38 = libpangoxft-$(PANGO_API_VERSION).la
+@HAVE_FREETYPE_TRUE@am__append_39 = libpangoft2-$(PANGO_API_VERSION).la
+@HAVE_WIN32_TRUE@am__append_40 = libpangowin32-$(PANGO_API_VERSION).la
+subdir = pango
+DIST_COMMON = $(am__pangoinclude_HEADERS_DIST) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/pango.rc.in \
+       $(srcdir)/pangoft2.rc.in $(srcdir)/pangowin32.rc.in \
+       $(srcdir)/pangox.rc.in $(srcdir)/pangoxft.rc.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = pango.rc pangoft2.rc pangowin32.rc pangox.rc \
+       pangoxft.rc
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+       "$(DESTDIR)$(aliasdir)" "$(DESTDIR)$(girdir)" \
+       "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(pangoincludedir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_libpango_1_0_la_OBJECTS = break.lo ellipsize.lo fonts.lo \
+       glyphstring.lo modules.lo pango-attributes.lo \
+       pango-bidi-type.lo pango-color.lo pango-context.lo \
+       pango-coverage.lo pango-engine.lo pango-fontmap.lo \
+       pango-fontset.lo pango-glyph-item.lo pango-gravity.lo \
+       pango-item.lo pango-language.lo pango-layout.lo \
+       pango-markup.lo pango-matrix.lo pango-renderer.lo \
+       pango-script.lo pango-tabs.lo pango-utils.lo reorder-items.lo \
+       shape.lo pango-enum-types.lo module-defs-lang.lo
+libpango_1_0_la_OBJECTS = $(am_libpango_1_0_la_OBJECTS)
+@HAVE_CAIRO_WIN32_TRUE@am__DEPENDENCIES_2 =  \
+@HAVE_CAIRO_WIN32_TRUE@        libpangowin32-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_WIN32_TRUE@        $(am__DEPENDENCIES_1)
+@HAVE_CAIRO_FREETYPE_TRUE@am__DEPENDENCIES_3 =  \
+@HAVE_CAIRO_FREETYPE_TRUE@     libpangoft2-$(PANGO_API_VERSION).la \
+@HAVE_CAIRO_FREETYPE_TRUE@     $(am__DEPENDENCIES_1)
+@HAVE_CAIRO_ATSUI_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+am__libpangocairo_1_0_la_SOURCES_DIST = pangocairo-context.c \
+       pangocairo-font.c pangocairo-fontmap.c pangocairo-render.c \
+       pangocairo-private.h pangocairo-win32font.c \
+       pangocairo-win32fontmap.c pangocairo-win32.h \
+       pangocairo-fcfont.c pangocairo-fcfontmap.c pangocairo-fc.h \
+       modules.h module-defs-atsui.c pangoatsui.h pangoatsui.c \
+       pangoatsui-private.h pangoatsui-fontmap.c pangocairo-atsui.h \
+       pangocairo-atsuifont.c pangocairo-atsuifont.h \
+       pangocairo-atsuifontmap.c
+@HAVE_CAIRO_WIN32_TRUE@am__objects_1 = libpangocairo_1_0_la-pangocairo-win32font.lo \
+@HAVE_CAIRO_WIN32_TRUE@        libpangocairo_1_0_la-pangocairo-win32fontmap.lo
+@HAVE_CAIRO_FREETYPE_TRUE@am__objects_2 = libpangocairo_1_0_la-pangocairo-fcfont.lo \
+@HAVE_CAIRO_FREETYPE_TRUE@     libpangocairo_1_0_la-pangocairo-fcfontmap.lo
+@HAVE_CAIRO_ATSUI_TRUE@am__objects_3 = libpangocairo_1_0_la-module-defs-atsui.lo \
+@HAVE_CAIRO_ATSUI_TRUE@        libpangocairo_1_0_la-pangoatsui.lo \
+@HAVE_CAIRO_ATSUI_TRUE@        libpangocairo_1_0_la-pangoatsui-fontmap.lo \
+@HAVE_CAIRO_ATSUI_TRUE@        libpangocairo_1_0_la-pangocairo-atsuifont.lo \
+@HAVE_CAIRO_ATSUI_TRUE@        libpangocairo_1_0_la-pangocairo-atsuifontmap.lo
+am_libpangocairo_1_0_la_OBJECTS =  \
+       libpangocairo_1_0_la-pangocairo-context.lo \
+       libpangocairo_1_0_la-pangocairo-font.lo \
+       libpangocairo_1_0_la-pangocairo-fontmap.lo \
+       libpangocairo_1_0_la-pangocairo-render.lo $(am__objects_1) \
+       $(am__objects_2) $(am__objects_3)
+libpangocairo_1_0_la_OBJECTS = $(am_libpangocairo_1_0_la_OBJECTS)
+@HAVE_CAIRO_TRUE@am_libpangocairo_1_0_la_rpath = -rpath $(libdir)
+am__objects_4 = pangofc-font.lo pangofc-fontmap.lo pangofc-decoder.lo \
+       pangoft2.lo
+am_libpangoft2_1_0_la_OBJECTS = $(am__objects_4) module-defs-fc.lo \
+       pangoft2-fontmap.lo pangoft2-render.lo pango-ot-buffer.lo \
+       pango-ot-info.lo pango-ot-ruleset.lo pango-ot-tag.lo
+libpangoft2_1_0_la_OBJECTS = $(am_libpangoft2_1_0_la_OBJECTS)
+@HAVE_FREETYPE_TRUE@am_libpangoft2_1_0_la_rpath = -rpath $(libdir)
+am_libpangowin32_1_0_la_OBJECTS = module-defs-win32.lo pangowin32.lo \
+       pangowin32-fontcache.lo pangowin32-fontmap.lo
+libpangowin32_1_0_la_OBJECTS = $(am_libpangowin32_1_0_la_OBJECTS)
+@HAVE_WIN32_TRUE@am_libpangowin32_1_0_la_rpath = -rpath $(libdir)
+am__objects_5 = pangox.lo
+am_libpangox_1_0_la_OBJECTS = $(am__objects_5) module-defs-x.lo \
+       pangox-fontcache.lo pangox-fontmap.lo
+libpangox_1_0_la_OBJECTS = $(am_libpangox_1_0_la_OBJECTS)
+@HAVE_X_TRUE@am_libpangox_1_0_la_rpath = -rpath $(libdir)
+am_libpangoxft_1_0_la_OBJECTS = pangoxft-font.lo pangoxft-fontmap.lo \
+       pangoxft-render.lo
+libpangoxft_1_0_la_OBJECTS = $(am_libpangoxft_1_0_la_OBJECTS)
+@HAVE_XFT_TRUE@am_libpangoxft_1_0_la_rpath = -rpath $(libdir)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_pango_querymodules_OBJECTS = querymodules.$(OBJEXT)
+pango_querymodules_OBJECTS = $(am_pango_querymodules_OBJECTS)
+@HAVE_X_TRUE@am__DEPENDENCIES_5 = libpangox-$(PANGO_API_VERSION).la
+@HAVE_XFT_TRUE@am__DEPENDENCIES_6 =  \
+@HAVE_XFT_TRUE@        libpangoxft-$(PANGO_API_VERSION).la
+@HAVE_FREETYPE_TRUE@am__DEPENDENCIES_7 =  \
+@HAVE_FREETYPE_TRUE@   libpangoft2-$(PANGO_API_VERSION).la
+@HAVE_WIN32_TRUE@am__DEPENDENCIES_8 =  \
+@HAVE_WIN32_TRUE@      libpangowin32-$(PANGO_API_VERSION).la
+pango_querymodules_DEPENDENCIES = $(am__DEPENDENCIES_5) \
+       $(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7) \
+       $(am__DEPENDENCIES_8) libpango-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libpango_1_0_la_SOURCES) $(libpangocairo_1_0_la_SOURCES) \
+       $(libpangoft2_1_0_la_SOURCES) $(libpangowin32_1_0_la_SOURCES) \
+       $(libpangox_1_0_la_SOURCES) $(libpangoxft_1_0_la_SOURCES) \
+       $(pango_querymodules_SOURCES)
+DIST_SOURCES = $(libpango_1_0_la_SOURCES) \
+       $(am__libpangocairo_1_0_la_SOURCES_DIST) \
+       $(libpangoft2_1_0_la_SOURCES) $(libpangowin32_1_0_la_SOURCES) \
+       $(libpangox_1_0_la_SOURCES) $(libpangoxft_1_0_la_SOURCES) \
+       $(pango_querymodules_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-exec-recursive install-info-recursive \
+       install-recursive installcheck-recursive installdirs-recursive \
+       pdf-recursive ps-recursive uninstall-info-recursive \
+       uninstall-recursive
+aliasDATA_INSTALL = $(INSTALL_DATA)
+girDATA_INSTALL = $(INSTALL_DATA)
+typelibsDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(alias_DATA) $(gir_DATA) $(noinst_DATA) $(typelibs_DATA)
+am__pangoinclude_HEADERS_DIST = pango.h pango-attributes.h \
+       pango-bidi-type.h pango-break.h pango-context.h \
+       pango-coverage.h pango-engine.h pango-font.h pango-fontmap.h \
+       pango-fontset.h pango-glyph.h pango-glyph-item.h \
+       pango-gravity.h pango-item.h pango-language.h pango-layout.h \
+       pango-matrix.h pango-modules.h pango-renderer.h pango-script.h \
+       pango-tabs.h pango-types.h pango-utils.h pango-features.h \
+       pango-enum-types.h pangox.h pango-ot.h pangofc-font.h \
+       pangofc-fontmap.h pangofc-decoder.h pangoft2.h pangoxft.h \
+       pangoxft-render.h pangocairo.h pangoatsui.h pangowin32.h
+pangoincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(pangoinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH.
+GPATH = $(srcdir)
+@HAVE_FREETYPE_TRUE@OPENTYPE_SUBDIR = opentype
+EXTRA_DIST = pango-enum-types.h module-defs.h module-defs-fc.c.win32 \
+       module-defs-win32.c.win32 pango.def pangocairo.def \
+       pangowin32.def pangoft2.def makefile.msc pango.rc pango.rc.in \
+       pangox.aliases pangoft2.rc pangoft2.rc.in pangowin32.rc \
+       pangowin32.rc.in pangox.rc pangox.rc.in pangoxft.rc \
+       pangoxft.rc.in check.defs
+BUILT_GIRSOURCES = Pango-1.0.gir $(am__append_9) $(am__append_14) \
+       $(am__append_19)
+FRIBIDI_SUBDIR = mini-fribidi
+SUBDIRS = $(OPENTYPE_SUBDIR) $(FRIBIDI_SUBDIR)
+DIST_SUBDIRS = mini-fribidi opentype
+INCLUDES = \
+       -DG_LOG_DOMAIN=\"Pango\"                        \
+       -DPANGO_ENABLE_BACKEND                          \
+       -DPANGO_ENABLE_ENGINE                           \
+       -DSYSCONFDIR=\"$(sysconfdir)\"                  \
+       -DLIBDIR=\"$(libdir)\"                          \
+       -I$(top_srcdir)                                 \
+       $(PANGO_DEBUG_FLAGS)                            \
+       $(GLIB_CFLAGS)                                  \
+       $(XFT_CFLAGS)                                   \
+       $(CAIRO_CFLAGS)                                 \
+       $(FREETYPE_CFLAGS)                              \
+       $(X_CFLAGS)
+
+BUILT_SOURCES = pango-enum-types.h pango-enum-types.c pango-features.h
+pangoincludedir = $(includedir)/pango-1.0/pango
+@OS_WIN32_FALSE@libm = -lm
+
+# ------------------- libpango -------------------
+lib_LTLIBRARIES = libpango-1.0.la $(am__append_4) $(am__append_8) \
+       $(am__append_13) $(am__append_18) $(am__append_33)
+libpango_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS) $(am__append_1)
+libpango_1_0_la_LIBADD = $(GLIB_LIBS) $(libm) $(INCLUDED_LANG_MODULES) \
+       mini-fribidi/libmini-fribidi.la
+libpango_1_0_la_DEPENDENCIES = $(INCLUDED_LANG_MODULES) \
+       mini-fribidi/libmini-fribidi.la $(am__append_2)
+libpango_1_0_la_SOURCES = \
+       break.c                                 \
+       ellipsize.c                             \
+       fonts.c                                 \
+       glyphstring.c                           \
+       modules.c                               \
+       pango-attributes.c                      \
+       pango-bidi-type.c                       \
+       pango-color.c                           \
+       pango-color-table.h                     \
+       pango-context.c                         \
+       pango-coverage.c                        \
+       pango-engine.c                          \
+       pango-engine-private.h                  \
+       pango-fontmap.c                         \
+       pango-fontset.c                         \
+       pango-glyph-item.c                      \
+       pango-gravity.c                         \
+       pango-impl-utils.h                      \
+       pango-item.c                            \
+       pango-language.c                        \
+       pango-language-sample-table.h           \
+       pango-layout.c                          \
+       pango-layout-private.h                  \
+       pango-markup.c                          \
+       pango-matrix.c                          \
+       pango-renderer.c                        \
+       pango-script.c                          \
+       pango-script-lang-table.h               \
+       pango-script-private.h                          \
+       pango-tabs.c                            \
+       pango-utils.c                           \
+       reorder-items.c                         \
+       shape.c                                 \
+       pango-enum-types.c                      \
+       module-defs-lang.c
+
+pango_headers = \
+       pango.h            \
+       pango-attributes.h \
+       pango-bidi-type.h  \
+       pango-break.h      \
+       pango-context.h    \
+       pango-coverage.h   \
+       pango-engine.h     \
+       pango-font.h       \
+       pango-fontmap.h    \
+       pango-fontset.h    \
+       pango-glyph.h      \
+       pango-glyph-item.h \
+       pango-gravity.h    \
+       pango-item.h       \
+       pango-language.h   \
+       pango-layout.h     \
+       pango-matrix.h     \
+       pango-modules.h    \
+       pango-renderer.h   \
+       pango-script.h     \
+       pango-tabs.h       \
+       pango-types.h      \
+       pango-utils.h
+
+pangoinclude_HEADERS = $(pango_headers) pango-features.h \
+       pango-enum-types.h $(am__append_3) $(am__append_7) \
+       $(am__append_12) $(am__append_17) $(am__append_29) \
+       $(am__append_32)
+@HAVE_X_TRUE@aliasdir = $(sysconfdir)/pango
+@HAVE_X_TRUE@alias_DATA = pangox.aliases
+pangox_headers = pangox.h
+pangox_public_sources = pangox.c
+libpangox_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS) $(am__append_5)
+libpangox_1_0_la_LIBADD = \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_X_MODULES)                   \
+       $(GLIB_LIBS)                            \
+       $(X_LIBS)                               \
+       $(X_EXTRA_LIBS)
+
+libpangox_1_0_la_DEPENDENCIES = libpango-$(PANGO_API_VERSION).la \
+       $(INCLUDED_X_MODULES) $(am__append_6)
+libpangox_1_0_la_SOURCES = \
+       $(pangox_public_sources)                \
+       modules.h                               \
+       module-defs-x.c                         \
+       pangox-private.h                        \
+       pangox-fontcache.c                      \
+       pangox-fontmap.c
+
+pangoft2_headers = \
+       pango-ot.h              \
+       pangofc-font.h          \
+       pangofc-fontmap.h       \
+       pangofc-decoder.h       \
+       pangoft2.h
+
+pangoft2_public_sources = \
+       pangofc-font.c          \
+       pangofc-fontmap.c       \
+       pangofc-decoder.c       \
+       pangoft2.c
+
+libpangoft2_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS) \
+       $(am__append_10)
+libpangoft2_1_0_la_LIBADD = \
+       opentype/libharfbuzz.la                 \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_FC_MODULES)                  \
+       $(GLIB_LIBS)                            \
+       $(FREETYPE_LIBS)                        \
+       $(libm)
+
+libpangoft2_1_0_la_DEPENDENCIES = opentype/libharfbuzz.la \
+       libpango-$(PANGO_API_VERSION).la $(INCLUDED_FC_MODULES) \
+       $(am__append_11)
+libpangoft2_1_0_la_SOURCES = \
+       $(pangoft2_public_sources) \
+       modules.h               \
+       module-defs-fc.c        \
+       pangofc-private.h       \
+       pangoft2.h              \
+       pangoft2-private.h      \
+       pangoft2-fontmap.c      \
+       pangoft2-render.c       \
+       pango-ot-private.h      \
+       pango-ot-buffer.c       \
+       pango-ot-info.c         \
+       pango-ot-ruleset.c      \
+       pango-ot-tag.c
+
+pangoxft_headers = pangoxft.h pangoxft-render.h
+libpangoxft_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS) \
+       $(am__append_15)
+libpangoxft_1_0_la_LIBADD = \
+       libpangoft2-$(PANGO_API_VERSION).la     \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(GLIB_LIBS)                            \
+       $(X_LIBS)                               \
+       $(XFT_LIBS)                             \
+       $(FREETYPE_LIBS)                        \
+       $(libm)
+
+libpangoxft_1_0_la_DEPENDENCIES = libpangoft2-$(PANGO_API_VERSION).la \
+       libpango-$(PANGO_API_VERSION).la $(am__append_16)
+libpangoxft_1_0_la_SOURCES = \
+       pangoxft-font.c         \
+       pangoxft-fontmap.c      \
+       pangoxft-private.h      \
+       pangoxft-render.c
+
+pangocairo_headers = pangocairo.h
+libpangocairo_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS) \
+       $(am__append_20) $(am__append_30)
+libpangocairo_1_0_la_LIBADD = libpango-$(PANGO_API_VERSION).la \
+       $(GLIB_LIBS) $(CAIRO_LIBS) $(libm) $(am__append_22) \
+       $(am__append_25) $(am__append_31)
+libpangocairo_1_0_la_DEPENDENCIES = libpango-$(PANGO_API_VERSION).la \
+       $(am__append_21) $(am__append_23) $(am__append_26)
+libpangocairo_1_0_la_SOURCES = pangocairo-context.c pangocairo-font.c \
+       pangocairo-fontmap.c pangocairo-render.c pangocairo-private.h \
+       $(am__append_24) $(am__append_27) $(am__append_28)
+# We don't have an ATSUI GIR right now, so this is just hypothetical
+@HAVE_CAIRO_ATSUI_TRUE@PANGOCAIRO_FONT_BACKEND_GI_MODULE = PangoATSUI-1.0
+@HAVE_CAIRO_FREETYPE_TRUE@PANGOCAIRO_FONT_BACKEND_GI_MODULE = PangoFT2-1.0
+@HAVE_CAIRO_ATSUI_TRUE@libpangocairo_1_0_la_CFLAGS = -xobjective-c
+libpangowin32_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS) \
+       $(am__append_34)
+libpangowin32_1_0_la_LIBADD = \
+       libpango-$(PANGO_API_VERSION).la        \
+       $(INCLUDED_WIN32_MODULES)               \
+       $(GLIB_LIBS)                            \
+       $(WIN32_LIBS)
+
+libpangowin32_1_0_la_DEPENDENCIES = libpango-$(PANGO_API_VERSION).la \
+       $(INCLUDED_WIN32_MODULES) $(am__append_35)
+libpangowin32_1_0_la_SOURCES = \
+       modules.h               \
+       module-defs-win32.c     \
+       pangowin32.h            \
+       pangowin32.c            \
+       pangowin32-private.h    \
+       pangowin32-fontcache.c  \
+       pangowin32-fontmap.c
+
+@MS_LIB_AVAILABLE_TRUE@MS_LIB_FILES = pango-$(PANGO_API_VERSION).lib \
+@MS_LIB_AVAILABLE_TRUE@        pangowin32-$(PANGO_API_VERSION).lib \
+@MS_LIB_AVAILABLE_TRUE@        pangocairo-$(PANGO_API_VERSION).lib \
+@MS_LIB_AVAILABLE_TRUE@        $(am__append_36)
+@MS_LIB_AVAILABLE_TRUE@noinst_DATA = $(MS_LIB_FILES)
+
+# ------------------- introspection -------------------
+@HAVE_INTROSPECTION_TRUE@girdir = $(GIRDIR)
+@HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
+@HAVE_INTROSPECTION_TRUE@typelibsdir = $(TYPELIBDIR)
+@HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+#
+# As a temporary hack, we pull in libpangox here so that we can link
+#
+pango_querymodules_SOURCES = \
+       querymodules.c
+
+pango_querymodules_LDADD = $(am__append_37) $(am__append_38) \
+       $(am__append_39) $(am__append_40) \
+       libpango-$(PANGO_API_VERSION).la $(GLIB_LIBS)
+MODULE_DEF_FILES = \
+       module-defs.h \
+       module-defs-lang.c \
+       module-defs-x.c \
+       module-defs-fc.c \
+       module-defs-win32.c \
+       module-defs-atsui.c
+
+CLEANFILES = \
+       pango-enum-types.h      \
+       s-enum-types-h          \
+       pango-enum-types.c      \
+       s-enum-types-c
+
+MOSTLYCLEANFILES = \
+       *.list                  \
+       *.expected
+
+DISTCLEANFILES = \
+       pango-features.h        \
+       $(MODULE_DEF_FILES)
+
+TESTS = check.defs
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  pango/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  pango/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+pango.rc: $(top_builddir)/config.status $(srcdir)/pango.rc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+pangoft2.rc: $(top_builddir)/config.status $(srcdir)/pangoft2.rc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+pangowin32.rc: $(top_builddir)/config.status $(srcdir)/pangowin32.rc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+pangox.rc: $(top_builddir)/config.status $(srcdir)/pangox.rc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+pangoxft.rc: $(top_builddir)/config.status $(srcdir)/pangoxft.rc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+           $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+         $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libpango-1.0.la: $(libpango_1_0_la_OBJECTS) $(libpango_1_0_la_DEPENDENCIES) 
+       $(LINK) -rpath $(libdir) $(libpango_1_0_la_LDFLAGS) $(libpango_1_0_la_OBJECTS) $(libpango_1_0_la_LIBADD) $(LIBS)
+libpangocairo-1.0.la: $(libpangocairo_1_0_la_OBJECTS) $(libpangocairo_1_0_la_DEPENDENCIES) 
+       $(LINK) $(am_libpangocairo_1_0_la_rpath) $(libpangocairo_1_0_la_LDFLAGS) $(libpangocairo_1_0_la_OBJECTS) $(libpangocairo_1_0_la_LIBADD) $(LIBS)
+libpangoft2-1.0.la: $(libpangoft2_1_0_la_OBJECTS) $(libpangoft2_1_0_la_DEPENDENCIES) 
+       $(LINK) $(am_libpangoft2_1_0_la_rpath) $(libpangoft2_1_0_la_LDFLAGS) $(libpangoft2_1_0_la_OBJECTS) $(libpangoft2_1_0_la_LIBADD) $(LIBS)
+libpangowin32-1.0.la: $(libpangowin32_1_0_la_OBJECTS) $(libpangowin32_1_0_la_DEPENDENCIES) 
+       $(LINK) $(am_libpangowin32_1_0_la_rpath) $(libpangowin32_1_0_la_LDFLAGS) $(libpangowin32_1_0_la_OBJECTS) $(libpangowin32_1_0_la_LIBADD) $(LIBS)
+libpangox-1.0.la: $(libpangox_1_0_la_OBJECTS) $(libpangox_1_0_la_DEPENDENCIES) 
+       $(LINK) $(am_libpangox_1_0_la_rpath) $(libpangox_1_0_la_LDFLAGS) $(libpangox_1_0_la_OBJECTS) $(libpangox_1_0_la_LIBADD) $(LIBS)
+libpangoxft-1.0.la: $(libpangoxft_1_0_la_OBJECTS) $(libpangoxft_1_0_la_DEPENDENCIES) 
+       $(LINK) $(am_libpangoxft_1_0_la_rpath) $(libpangoxft_1_0_la_LDFLAGS) $(libpangoxft_1_0_la_OBJECTS) $(libpangoxft_1_0_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+       bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+         case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+          *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+         esac; \
+         f=`echo "$$p" | \
+            sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         for opt in --help --version; do \
+           if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+                2>c$${pid}_.err </dev/null \
+                && test -n "`cat c$${pid}_.out`" \
+                && test -z "`cat c$${pid}_.err`"; then :; \
+           else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+         done; \
+       done; rm -f c$${pid}_.???; exit $$bad
+pango-querymodules$(EXEEXT): $(pango_querymodules_OBJECTS) $(pango_querymodules_DEPENDENCIES) 
+       @rm -f pango-querymodules$(EXEEXT)
+       $(LINK) $(pango_querymodules_LDFLAGS) $(pango_querymodules_OBJECTS) $(pango_querymodules_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/break.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ellipsize.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fonts.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glyphstring.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-module-defs-atsui.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangoatsui-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangoatsui.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifont.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-context.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfont.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-render.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module-defs-fc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module-defs-lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module-defs-win32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module-defs-x.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modules.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-attributes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-bidi-type.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-color.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-context.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-coverage.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-engine.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-enum-types.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-fontset.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-glyph-item.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-gravity.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-item.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-language.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-layout.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-markup.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-matrix.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-ot-buffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-ot-info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-ot-ruleset.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-ot-tag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-renderer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-script.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-tabs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pango-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangofc-decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangofc-font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangofc-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangoft2-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangoft2-render.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangoft2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangowin32-fontcache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangowin32-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangowin32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangox-fontcache.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangox-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangox.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangoxft-font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangoxft-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pangoxft-render.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/querymodules.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reorder-items.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shape.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libpangocairo_1_0_la-pangocairo-context.lo: pangocairo-context.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-context.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-context.Tpo" -c -o libpangocairo_1_0_la-pangocairo-context.lo `test -f 'pangocairo-context.c' || echo '$(srcdir)/'`pangocairo-context.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-context.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-context.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-context.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-context.c' object='libpangocairo_1_0_la-pangocairo-context.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-context.lo `test -f 'pangocairo-context.c' || echo '$(srcdir)/'`pangocairo-context.c
+
+libpangocairo_1_0_la-pangocairo-font.lo: pangocairo-font.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-font.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-font.Tpo" -c -o libpangocairo_1_0_la-pangocairo-font.lo `test -f 'pangocairo-font.c' || echo '$(srcdir)/'`pangocairo-font.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-font.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-font.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-font.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-font.c' object='libpangocairo_1_0_la-pangocairo-font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-font.lo `test -f 'pangocairo-font.c' || echo '$(srcdir)/'`pangocairo-font.c
+
+libpangocairo_1_0_la-pangocairo-fontmap.lo: pangocairo-fontmap.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-fontmap.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fontmap.Tpo" -c -o libpangocairo_1_0_la-pangocairo-fontmap.lo `test -f 'pangocairo-fontmap.c' || echo '$(srcdir)/'`pangocairo-fontmap.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fontmap.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fontmap.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fontmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-fontmap.c' object='libpangocairo_1_0_la-pangocairo-fontmap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-fontmap.lo `test -f 'pangocairo-fontmap.c' || echo '$(srcdir)/'`pangocairo-fontmap.c
+
+libpangocairo_1_0_la-pangocairo-render.lo: pangocairo-render.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-render.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-render.Tpo" -c -o libpangocairo_1_0_la-pangocairo-render.lo `test -f 'pangocairo-render.c' || echo '$(srcdir)/'`pangocairo-render.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-render.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-render.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-render.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-render.c' object='libpangocairo_1_0_la-pangocairo-render.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-render.lo `test -f 'pangocairo-render.c' || echo '$(srcdir)/'`pangocairo-render.c
+
+libpangocairo_1_0_la-pangocairo-win32font.lo: pangocairo-win32font.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-win32font.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32font.Tpo" -c -o libpangocairo_1_0_la-pangocairo-win32font.lo `test -f 'pangocairo-win32font.c' || echo '$(srcdir)/'`pangocairo-win32font.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32font.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32font.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32font.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-win32font.c' object='libpangocairo_1_0_la-pangocairo-win32font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-win32font.lo `test -f 'pangocairo-win32font.c' || echo '$(srcdir)/'`pangocairo-win32font.c
+
+libpangocairo_1_0_la-pangocairo-win32fontmap.lo: pangocairo-win32fontmap.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-win32fontmap.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32fontmap.Tpo" -c -o libpangocairo_1_0_la-pangocairo-win32fontmap.lo `test -f 'pangocairo-win32fontmap.c' || echo '$(srcdir)/'`pangocairo-win32fontmap.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32fontmap.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32fontmap.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-win32fontmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-win32fontmap.c' object='libpangocairo_1_0_la-pangocairo-win32fontmap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-win32fontmap.lo `test -f 'pangocairo-win32fontmap.c' || echo '$(srcdir)/'`pangocairo-win32fontmap.c
+
+libpangocairo_1_0_la-pangocairo-fcfont.lo: pangocairo-fcfont.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-fcfont.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfont.Tpo" -c -o libpangocairo_1_0_la-pangocairo-fcfont.lo `test -f 'pangocairo-fcfont.c' || echo '$(srcdir)/'`pangocairo-fcfont.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfont.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfont.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfont.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-fcfont.c' object='libpangocairo_1_0_la-pangocairo-fcfont.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-fcfont.lo `test -f 'pangocairo-fcfont.c' || echo '$(srcdir)/'`pangocairo-fcfont.c
+
+libpangocairo_1_0_la-pangocairo-fcfontmap.lo: pangocairo-fcfontmap.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-fcfontmap.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfontmap.Tpo" -c -o libpangocairo_1_0_la-pangocairo-fcfontmap.lo `test -f 'pangocairo-fcfontmap.c' || echo '$(srcdir)/'`pangocairo-fcfontmap.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfontmap.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfontmap.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-fcfontmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-fcfontmap.c' object='libpangocairo_1_0_la-pangocairo-fcfontmap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-fcfontmap.lo `test -f 'pangocairo-fcfontmap.c' || echo '$(srcdir)/'`pangocairo-fcfontmap.c
+
+libpangocairo_1_0_la-module-defs-atsui.lo: module-defs-atsui.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-module-defs-atsui.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-module-defs-atsui.Tpo" -c -o libpangocairo_1_0_la-module-defs-atsui.lo `test -f 'module-defs-atsui.c' || echo '$(srcdir)/'`module-defs-atsui.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-module-defs-atsui.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-module-defs-atsui.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-module-defs-atsui.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='module-defs-atsui.c' object='libpangocairo_1_0_la-module-defs-atsui.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-module-defs-atsui.lo `test -f 'module-defs-atsui.c' || echo '$(srcdir)/'`module-defs-atsui.c
+
+libpangocairo_1_0_la-pangoatsui.lo: pangoatsui.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangoatsui.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui.Tpo" -c -o libpangocairo_1_0_la-pangoatsui.lo `test -f 'pangoatsui.c' || echo '$(srcdir)/'`pangoatsui.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangoatsui.c' object='libpangocairo_1_0_la-pangoatsui.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangoatsui.lo `test -f 'pangoatsui.c' || echo '$(srcdir)/'`pangoatsui.c
+
+libpangocairo_1_0_la-pangoatsui-fontmap.lo: pangoatsui-fontmap.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangoatsui-fontmap.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui-fontmap.Tpo" -c -o libpangocairo_1_0_la-pangoatsui-fontmap.lo `test -f 'pangoatsui-fontmap.c' || echo '$(srcdir)/'`pangoatsui-fontmap.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui-fontmap.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui-fontmap.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangoatsui-fontmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangoatsui-fontmap.c' object='libpangocairo_1_0_la-pangoatsui-fontmap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangoatsui-fontmap.lo `test -f 'pangoatsui-fontmap.c' || echo '$(srcdir)/'`pangoatsui-fontmap.c
+
+libpangocairo_1_0_la-pangocairo-atsuifont.lo: pangocairo-atsuifont.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-atsuifont.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifont.Tpo" -c -o libpangocairo_1_0_la-pangocairo-atsuifont.lo `test -f 'pangocairo-atsuifont.c' || echo '$(srcdir)/'`pangocairo-atsuifont.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifont.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifont.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifont.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-atsuifont.c' object='libpangocairo_1_0_la-pangocairo-atsuifont.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-atsuifont.lo `test -f 'pangocairo-atsuifont.c' || echo '$(srcdir)/'`pangocairo-atsuifont.c
+
+libpangocairo_1_0_la-pangocairo-atsuifontmap.lo: pangocairo-atsuifontmap.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -MT libpangocairo_1_0_la-pangocairo-atsuifontmap.lo -MD -MP -MF "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifontmap.Tpo" -c -o libpangocairo_1_0_la-pangocairo-atsuifontmap.lo `test -f 'pangocairo-atsuifontmap.c' || echo '$(srcdir)/'`pangocairo-atsuifontmap.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifontmap.Tpo" "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifontmap.Plo"; else rm -f "$(DEPDIR)/libpangocairo_1_0_la-pangocairo-atsuifontmap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pangocairo-atsuifontmap.c' object='libpangocairo_1_0_la-pangocairo-atsuifontmap.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpangocairo_1_0_la_CFLAGS) $(CFLAGS) -c -o libpangocairo_1_0_la-pangocairo-atsuifontmap.lo `test -f 'pangocairo-atsuifontmap.c' || echo '$(srcdir)/'`pangocairo-atsuifontmap.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+install-aliasDATA: $(alias_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(aliasdir)" || $(mkdir_p) "$(DESTDIR)$(aliasdir)"
+       @list='$(alias_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(aliasDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(aliasdir)/$$f'"; \
+         $(aliasDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(aliasdir)/$$f"; \
+       done
+
+uninstall-aliasDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(alias_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(aliasdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(aliasdir)/$$f"; \
+       done
+install-girDATA: $(gir_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(girdir)" || $(mkdir_p) "$(DESTDIR)$(girdir)"
+       @list='$(gir_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(girDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(girdir)/$$f'"; \
+         $(girDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(girdir)/$$f"; \
+       done
+
+uninstall-girDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(gir_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(girdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(girdir)/$$f"; \
+       done
+install-typelibsDATA: $(typelibs_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(typelibsdir)" || $(mkdir_p) "$(DESTDIR)$(typelibsdir)"
+       @list='$(typelibs_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(typelibsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(typelibsdir)/$$f'"; \
+         $(typelibsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(typelibsdir)/$$f"; \
+       done
+
+uninstall-typelibsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(typelibs_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(typelibsdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(typelibsdir)/$$f"; \
+       done
+install-pangoincludeHEADERS: $(pangoinclude_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pangoincludedir)" || $(mkdir_p) "$(DESTDIR)$(pangoincludedir)"
+       @list='$(pangoinclude_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pangoincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pangoincludedir)/$$f'"; \
+         $(pangoincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pangoincludedir)/$$f"; \
+       done
+
+uninstall-pangoincludeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pangoinclude_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pangoincludedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pangoincludedir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list='$(TESTS)'; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *" $$tst "*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *" $$tst "*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="All $$all tests passed"; \
+           else \
+             banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all tests failed"; \
+           else \
+             banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           skipped="($$skip tests were not run)"; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(mkdir_p) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS)
+install-binPROGRAMS: install-libLTLIBRARIES
+
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(aliasdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(pangoincludedir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+       clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-aliasDATA install-data-local install-girDATA \
+       install-pangoincludeHEADERS install-typelibsDATA
+
+install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am: installcheck-binPROGRAMS
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-aliasDATA uninstall-binPROGRAMS \
+       uninstall-girDATA uninstall-info-am uninstall-libLTLIBRARIES \
+       uninstall-local uninstall-pangoincludeHEADERS \
+       uninstall-typelibsDATA
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-TESTS \
+       check-am clean clean-binPROGRAMS clean-generic \
+       clean-libLTLIBRARIES clean-libtool clean-recursive ctags \
+       ctags-recursive distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-recursive distclean-tags distdir \
+       dvi dvi-am html html-am info info-am install install-aliasDATA \
+       install-am install-binPROGRAMS install-data install-data-am \
+       install-data-local install-exec install-exec-am \
+       install-exec-hook install-girDATA install-info install-info-am \
+       install-libLTLIBRARIES install-man install-pangoincludeHEADERS \
+       install-strip install-typelibsDATA installcheck \
+       installcheck-am installcheck-binPROGRAMS installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       maintainer-clean-recursive mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
+       pdf pdf-am ps ps-am tags tags-recursive uninstall \
+       uninstall-aliasDATA uninstall-am uninstall-binPROGRAMS \
+       uninstall-girDATA uninstall-info-am uninstall-libLTLIBRARIES \
+       uninstall-local uninstall-pangoincludeHEADERS \
+       uninstall-typelibsDATA
+
+pango-win32-res.o: pango.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+pango-enum-types.h: s-enum-types-h
+       $(AM_V_GEN) true
+s-enum-types-h: $(pango_headers) Makefile
+       $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) \
+                       --fhead "#ifndef __PANGO_ENUM_TYPES_H__\n#define __PANGO_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+                       --fprod "/* enumerations from \"@filename@\" */\n" \
+                       --vhead "GType @enum_name@_get_type (void);\n#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"  \
+                       --ftail "G_END_DECLS\n\n#endif /* __PANGO_ENUM_TYPES_H__ */" \
+               $(pango_headers) ) > tmp-pango-enum-types.h \
+       && (cmp -s tmp-pango-enum-types.h pango-enum-types.h || cp tmp-pango-enum-types.h pango-enum-types.h ) \
+       && rm -f tmp-pango-enum-types.h \
+       && echo timestamp > $(@F)
+
+pango-enum-types.c: s-enum-types-c
+       $(AM_V_GEN) true
+s-enum-types-c: $(pango_headers) Makefile
+       $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) \
+                       --fhead "#include <pango.h>" \
+                       --fprod "\n/* enumerations from \"@filename@\" */" \
+                       --vhead "GType\n@enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G@Type@Value values[] = {"     \
+                       --vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+                       --vtail "      { 0, NULL, NULL }\n    };\n    etype = g_@type@_register_static (g_intern_static_string (\"@EnumName@\"), values);\n  }\n  return etype;\n}\n" \
+               $(pango_headers) ) > tmp-pango-enum-types.c \
+       && (cmp -s tmp-pango-enum-types.c pango-enum-types.c || cp tmp-pango-enum-types.c pango-enum-types.c ) \
+       && rm -f tmp-pango-enum-types.c \
+       && echo timestamp > $(@F)
+
+pango-features.h:
+       $(AM_V_GEN) cd $(top_builddir) && ./config.status pango/pango-features.h
+
+Pango-1.0.gir: $(libpango_1_0_la_SOURCES)
+Pango-1.0.gir: $(pango_headers)
+Pango-1.0.gir: libpango-1.0.la
+Pango-1.0.gir: $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace Pango --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=cairo-1.0 \
+            --library=libpango-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg cairo \
+            --pkg freetype2 \
+           -I$(top_srcdir) \
+           $(PANGO_CFLAGS) \
+            $(libpango_1_0_la_SOURCES) \
+           $(pango_headers) \
+           pango-enum-types.h
+
+pangox-win32-res.o: pangox.rc
+       $(WINDRES) $< $@
+pangoft2-win32-res.o: pangoft2.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+PangoFT2-1.0.gir: $(pangoft2_headers)
+PangoFT2-1.0.gir: $(libpangoft2_1_0_la_SOURCES)
+PangoFT2-1.0.gir: libpangoft2-1.0.la
+PangoFT2-1.0.gir: Pango-1.0.gir $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace PangoFT2 --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=Pango-1.0 \
+            --include=freetype2-2.0 \
+            --include=fontconfig-2.0 \
+            --library=libpangoft2-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg freetype2 \
+            --pkg pangoft2 \
+           -I$(top_srcdir) \
+            $(pangoft2_headers) \
+            $(pangoft2_public_sources)
+pangoxft-win32-res.o: pangoxft.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+PangoXft-1.0.gir: $(pangoxft_headers)
+PangoXft-1.0.gir: $(libpangoxft_1_0_la_SOURCES)
+PangoXft-1.0.gir: libpangoxft-1.0.la
+PangoXft-1.0.gir: Pango-1.0.gir PangoFT2-1.0.gir $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace PangoXft --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=xft-2.0 \
+            --include=xlib-2.0 \
+            --include=PangoFT2-1.0 \
+            --library=libpangoxft-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg freetype2 \
+           -I$(top_srcdir) \
+           $(PANGO_CFLAGS) \
+            $(pangoxft_headers) \
+            $(libpangoxft_1_0_la_SOURCES)
+
+PangoCairo-1.0.gir: $(libpangocairo_1_0_la_SOURCES)
+PangoCairo-1.0.gir: $(pangocairo_headers)
+PangoCairo-1.0.gir: libpangocairo-1.0.la
+PangoCairo-1.0.gir: Pango-1.0.gir $(PANGOCAIRO_FONT_BACKEND_GI_MODULE).gir $(G_IR_SCANNER) Makefile
+       $(AM_V_GEN) $(G_IR_SCANNER) -v --namespace PangoCairo --nsversion=1.0 \
+           --add-include-path=$(srcdir) --add-include-path=. \
+            --include=GObject-2.0 \
+            --include=cairo-1.0 \
+            --include=Pango-1.0 \
+           --add-include-path=. \
+           --include=$(PANGOCAIRO_FONT_BACKEND_GI_MODULE) \
+            --library=libpangocairo-1.0.la \
+           --libtool="$(LIBTOOL)" \
+            --output $@ \
+            --pkg gobject-2.0 \
+            --pkg cairo \
+           -I$(top_srcdir) \
+           $(PANGO_CFLAGS) \
+            $(libpangocairo_1_0_la_SOURCES) \
+           $(pangocairo_headers)
+pangowin32-win32-res.o: pangowin32.rc
+       $(AM_V_GEN) $(WINDRES) $< $@
+
+# ------------------- win32 build stuff -------------------
+
+@OS_WIN32_TRUE@install-def-files:
+@OS_WIN32_TRUE@        $(AM_V_GEN) mkdir -p $(DESTDIR)$(libdir) && \
+@OS_WIN32_TRUE@        $(INSTALL) $(srcdir)/pango.def $(DESTDIR)$(libdir)/pango-$(PANGO_API_VERSION).def
+@HAVE_FREETYPE_TRUE@@OS_WIN32_TRUE@    $(INSTALL) $(srcdir)/pangoft2.def $(DESTDIR)$(libdir)/pangoft2-$(PANGO_API_VERSION).def
+@OS_WIN32_TRUE@        $(INSTALL) $(srcdir)/pangowin32.def $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).def
+@OS_WIN32_TRUE@        $(INSTALL) $(srcdir)/pangocairo.def $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).def
+@HAVE_X_TRUE@@OS_WIN32_TRUE@   $(INSTALL) $(srcdir)/pangox.def $(DESTDIR)$(libdir)/pangox-$(PANGO_API_VERSION).def
+@HAVE_X_TRUE@@OS_WIN32_TRUE@   $(INSTALL) $(srcdir)/pangoxft.def $(DESTDIR)$(libdir)/pangoxft-$(PANGO_API_VERSION).def
+@OS_WIN32_TRUE@uninstall-def-files:
+@OS_WIN32_TRUE@        -rm $(DESTDIR)$(libdir)/pango$(PANGO_API_VERSION).def
+@HAVE_FREETYPE_TRUE@@OS_WIN32_TRUE@    -rm $(DESTDIR)$(libdir)/pangoft2-$(PANGO_API_VERSION).def
+@OS_WIN32_TRUE@        -rm $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).def
+@OS_WIN32_TRUE@        -rm $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).def
+@HAVE_X_TRUE@@OS_WIN32_TRUE@   -rm $(DESTDIR)$(libdir)/pangox-$(PANGO_API_VERSION).def
+@HAVE_X_TRUE@@OS_WIN32_TRUE@   -rm $(DESTDIR)$(libdir)/pangoxft-$(PANGO_API_VERSION).def
+@OS_WIN32_FALSE@install-def-files:
+@OS_WIN32_FALSE@uninstall-def-files:
+
+@MS_LIB_AVAILABLE_TRUE@install-ms-lib: $(MS_LIB_FILES)
+@MS_LIB_AVAILABLE_TRUE@        $(INSTALL) pango-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+@HAVE_FREETYPE_TRUE@@MS_LIB_AVAILABLE_TRUE@    $(INSTALL) pangoft2-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+@MS_LIB_AVAILABLE_TRUE@        $(INSTALL) pangowin32-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+@MS_LIB_AVAILABLE_TRUE@        $(INSTALL) pangocairo-$(PANGO_API_VERSION).lib $(DESTDIR)$(libdir)
+
+@MS_LIB_AVAILABLE_TRUE@uninstall-ms-lib:
+@MS_LIB_AVAILABLE_TRUE@        -rm $(DESTDIR)$(libdir)/pango-$(PANGO_API_VERSION).lib
+@MS_LIB_AVAILABLE_TRUE@        -rm $(DESTDIR)$(libdir)/pangoft2-$(PANGO_API_VERSION).lib
+@MS_LIB_AVAILABLE_TRUE@        -rm $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).lib
+@MS_LIB_AVAILABLE_TRUE@        -rm $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).lib
+@MS_LIB_AVAILABLE_FALSE@install-ms-lib:
+@MS_LIB_AVAILABLE_FALSE@uninstall-ms-lib:
+
+pango-$(PANGO_API_VERSION).lib: libpango-$(PANGO_API_VERSION).la $(srcdir)/pango.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpango-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pango.def -out:$@
+
+pangoft2-$(PANGO_API_VERSION).lib: libpangoft2-$(PANGO_API_VERSION).la $(srcdir)/pangoft2.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpangoft2-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pangoft2.def -out:$@
+
+pangowin32-$(PANGO_API_VERSION).lib: libpangowin32-$(PANGO_API_VERSION).la $(srcdir)/pangowin32.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpangowin32-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pangowin32.def -out:$@
+
+pangocairo-$(PANGO_API_VERSION).lib: libpangocairo-$(PANGO_API_VERSION).la $(srcdir)/pangocairo.def
+       $(AM_V_GEN) lib -machine:$(LIB_EXE_MACHINE_FLAG) -name:libpangocairo-$(PANGO_API_VERSION)-$(PANGO_CURRENT_MINUS_AGE).dll -def:$(srcdir)/pangocairo.def -out:$@
+
+@HAVE_INTROSPECTION_TRUE@%.typelib: %.gir $(G_IR_COMPILER)
+@HAVE_INTROSPECTION_TRUE@      $(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) --includedir=$(srcdir) --includedir=. $(G_IR_COMPILER_OPTS) $< -o $(builddir)/$(@F)
+
+@HAVE_INCLUDED_MODULES_TRUE@included-modules:
+@HAVE_INCLUDED_MODULES_TRUE@   $(AM_V_GEN) cd $(top_builddir)/modules && $(MAKE) $(AM_MAKEFLAGS) included-modules
+
+@HAVE_INCLUDED_MODULES_TRUE@$(INCLUDED_LANG_MODULES) $(INCLUDED_X_MODULES) $(INCLUDED_FC_MODULES) $(INCLUDED_WIN32_MODULES) $(INCLUDED_ATSUI_MODULES): included-modules
+@HAVE_INCLUDED_MODULES_TRUE@   $(AM_V_GEN) true
+
+@HAVE_INCLUDED_MODULES_TRUE@.PHONY: included-modules
+
+$(MODULE_DEF_FILES): $(top_builddir)/config.status
+       $(AM_V_GEN) cd $(top_builddir) && $(SHELL) ./config.status pango/$@
+
+install-data-local: install-ms-lib install-def-files
+
+install-exec-hook: 
+@DISABLE_EXPLICIT_DEPS_TRUE@   -for i in libpangoft2-$(PANGO_API_VERSION).la libpangoxft-$(PANGO_API_VERSION).la libpangox-$(PANGO_API_VERSION).la libpangowin32-$(PANGO_API_VERSION).la; do \
+@DISABLE_EXPLICIT_DEPS_TRUE@     test -f $(DESTDIR)$(libdir)/$$i && $(SHELL) $(top_srcdir)/sanitize-la.sh $(DESTDIR)$(libdir)/$$i ; \
+@DISABLE_EXPLICIT_DEPS_TRUE@   done
+
+uninstall-local: uninstall-ms-lib uninstall-def-files
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pango/break.c b/pango/break.c
new file mode 100755 (executable)
index 0000000..b17dc60
--- /dev/null
@@ -0,0 +1,1924 @@
+/* Pango
+ * break.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-break.h"
+#include "pango-modules.h"
+#include "pango-script-private.h"
+#include "pango-impl-utils.h"
+#include <string.h>
+
+#define PARAGRAPH_SEPARATOR 0x2029
+#define PARAGRAPH_SEPARATOR_STRING "\xE2\x80\xA9"
+
+/* See http://www.unicode.org/unicode/reports/tr14/ if you hope
+ * to understand the line breaking code.
+ */
+
+typedef enum
+{
+  BREAK_ALREADY_HANDLED,   /* didn't use the table */
+  BREAK_PROHIBITED, /* no break, even if spaces intervene */
+  BREAK_IF_SPACES,  /* "indirect break" (only if there are spaces) */
+  BREAK_ALLOWED     /* "direct break" (can always break here) */
+  /* TR 14 has one more break-opportunity class,
+   * "indirect break opportunity for combining marks following a space"
+   * but we handle that inline in the code.
+   */
+} BreakOpportunity;
+
+
+enum
+{
+  INDEX_OPEN_PUNCTUATION,
+  INDEX_CLOSE_PUNCTUATION,
+  INDEX_QUOTATION,
+  INDEX_NON_BREAKING_GLUE,
+  INDEX_NON_STARTER,
+  INDEX_EXCLAMATION,
+  INDEX_SYMBOL,
+  INDEX_INFIX_SEPARATOR,
+  INDEX_PREFIX,
+  INDEX_POSTFIX,
+  INDEX_NUMERIC,
+  INDEX_ALPHABETIC,
+  INDEX_IDEOGRAPHIC,
+  INDEX_INSEPARABLE,
+  INDEX_HYPHEN,
+  INDEX_AFTER,
+  INDEX_BEFORE,
+  INDEX_BEFORE_AND_AFTER,
+  INDEX_ZERO_WIDTH_SPACE,
+  INDEX_COMBINING_MARK,
+  INDEX_WORD_JOINER,
+
+  /* End of the table */
+
+  INDEX_END_OF_TABLE,
+
+  /* The following are not in the tables */
+  INDEX_MANDATORY,
+  INDEX_CARRIAGE_RETURN,
+  INDEX_LINE_FEED,
+  INDEX_SURROGATE,
+  INDEX_CONTINGENT,
+  INDEX_SPACE,
+  INDEX_COMPLEX_CONTEXT,
+  INDEX_AMBIGUOUS,
+  INDEX_UNKNOWN,
+  INDEX_NEXT_LINE,
+  INDEX_HANGUL_L_JAMO,
+  INDEX_HANGUL_V_JAMO,
+  INDEX_HANGUL_T_JAMO,
+  INDEX_HANGUL_LV_SYLLABLE,
+  INDEX_HANGUL_LVT_SYLLABLE,
+};
+
+static const BreakOpportunity row_OPEN_PUNCTUATION[INDEX_END_OF_TABLE] = {
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_CLOSE_PUNCTUATION[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_QUOTATION[INDEX_END_OF_TABLE] = {
+  BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_NON_BREAKING_GLUE[INDEX_END_OF_TABLE] = {
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_NON_STARTER[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_EXCLAMATION[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_SYMBOL[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_INFIX_SEPARATOR[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_PREFIX[INDEX_END_OF_TABLE] = {
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_POSTFIX[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_NUMERIC[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_ALPHABETIC[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_IDEOGRAPHIC[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_INSEPARABLE[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_HYPHEN[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_AFTER[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_BEFORE[INDEX_END_OF_TABLE] = {
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_BEFORE_AND_AFTER[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_ZERO_WIDTH_SPACE[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED, BREAK_ALLOWED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED
+};
+
+static const BreakOpportunity row_COMBINING_MARK[INDEX_END_OF_TABLE] = {
+  BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_ALLOWED, BREAK_ALLOWED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity row_WORD_JOINER[INDEX_END_OF_TABLE] = {
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_IF_SPACES,
+  BREAK_IF_SPACES, BREAK_IF_SPACES, BREAK_PROHIBITED, BREAK_PROHIBITED,
+  BREAK_PROHIBITED
+};
+
+static const BreakOpportunity *const line_break_rows[INDEX_END_OF_TABLE] = {
+  row_OPEN_PUNCTUATION, /* INDEX_OPEN_PUNCTUATION */
+  row_CLOSE_PUNCTUATION, /* INDEX_CLOSE_PUNCTUATION */
+  row_QUOTATION, /* INDEX_QUOTATION */
+  row_NON_BREAKING_GLUE, /* INDEX_NON_BREAKING_GLUE */
+  row_NON_STARTER, /* INDEX_NON_STARTER */
+  row_EXCLAMATION, /* INDEX_EXCLAMATION */
+  row_SYMBOL, /* INDEX_SYMBOL */
+  row_INFIX_SEPARATOR, /* INDEX_INFIX_SEPARATOR */
+  row_PREFIX, /* INDEX_PREFIX */
+  row_POSTFIX, /* INDEX_POSTFIX */
+  row_NUMERIC, /* INDEX_NUMERIC */
+  row_ALPHABETIC, /* INDEX_ALPHABETIC */
+  row_IDEOGRAPHIC, /* INDEX_IDEOGRAPHIC */
+  row_INSEPARABLE, /* INDEX_INSEPARABLE */
+  row_HYPHEN, /* INDEX_HYPHEN */
+  row_AFTER, /* INDEX_AFTER */
+  row_BEFORE, /* INDEX_BEFORE */
+  row_BEFORE_AND_AFTER, /* INDEX_BEFORE_AND_AFTER */
+  row_ZERO_WIDTH_SPACE, /* INDEX_ZERO_WIDTH_SPACE */
+  row_COMBINING_MARK, /* INDEX_COMBINING_MARK */
+  row_WORD_JOINER /* INDEX_WORD_JOINER */
+};
+
+/* Map GUnicodeBreakType to table indexes */
+static const int line_break_indexes[] = {
+  INDEX_MANDATORY,
+  INDEX_CARRIAGE_RETURN,
+  INDEX_LINE_FEED,
+  INDEX_COMBINING_MARK,
+  INDEX_SURROGATE,
+  INDEX_ZERO_WIDTH_SPACE,
+  INDEX_INSEPARABLE,
+  INDEX_NON_BREAKING_GLUE,
+  INDEX_CONTINGENT,
+  INDEX_SPACE,
+  INDEX_AFTER,
+  INDEX_BEFORE,
+  INDEX_BEFORE_AND_AFTER,
+  INDEX_HYPHEN,
+  INDEX_NON_STARTER,
+  INDEX_OPEN_PUNCTUATION,
+  INDEX_CLOSE_PUNCTUATION,
+  INDEX_QUOTATION,
+  INDEX_EXCLAMATION,
+  INDEX_IDEOGRAPHIC,
+  INDEX_NUMERIC,
+  INDEX_INFIX_SEPARATOR,
+  INDEX_SYMBOL,
+  INDEX_ALPHABETIC,
+  INDEX_PREFIX,
+  INDEX_POSTFIX,
+  INDEX_COMPLEX_CONTEXT,
+  INDEX_AMBIGUOUS,
+  INDEX_UNKNOWN,
+  INDEX_NEXT_LINE,
+  INDEX_WORD_JOINER,
+  INDEX_HANGUL_L_JAMO,
+  INDEX_HANGUL_V_JAMO,
+  INDEX_HANGUL_T_JAMO,
+  INDEX_HANGUL_LV_SYLLABLE,
+  INDEX_HANGUL_LVT_SYLLABLE
+};
+
+#define BREAK_TYPE_SAFE(btype)            \
+        ((btype) < G_N_ELEMENTS(line_break_indexes) ? (btype) : G_UNICODE_BREAK_UNKNOWN)
+#define BREAK_INDEX(btype)                \
+        (line_break_indexes[(btype)])
+#define BREAK_ROW(before_type)            \
+        (line_break_rows[BREAK_INDEX (before_type)])
+#define BREAK_OP(before_type, after_type) \
+        (BREAK_ROW (before_type)[BREAK_INDEX (after_type)])
+#define IN_BREAK_TABLE(btype)             \
+        ((btype) < G_N_ELEMENTS(line_break_indexes) && BREAK_INDEX((btype)) < INDEX_END_OF_TABLE)
+
+
+
+/*
+ * Hangul Conjoining Jamo handling.
+ *
+ * The way we implement it is just a bit different from TR14,
+ * but produces the same results.
+ * The same algorithm is also used in TR29 for cluster boundaries.
+ *
+ */
+
+
+/* An enum that works as the states of the Hangul syllables system.
+ **/
+typedef enum
+{
+  JAMO_L,      /* G_UNICODE_BREAK_HANGUL_L_JAMO */
+  JAMO_V,      /* G_UNICODE_BREAK_HANGUL_V_JAMO */
+  JAMO_T,      /* G_UNICODE_BREAK_HANGUL_T_JAMO */
+  JAMO_LV,     /* G_UNICODE_BREAK_HANGUL_LV_SYLLABLE */
+  JAMO_LVT,    /* G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE */
+  NO_JAMO      /* Other */
+} JamoType;
+
+/* There are Hangul syllables encoded as characters, that act like a
+ * sequence of Jamos. For each character we define a JamoType
+ * that the character starts with, and one that it ends with.  This
+ * decomposes JAMO_LV and JAMO_LVT to simple other JAMOs.  So for
+ * example, a character with LineBreak type
+ * G_UNICODE_BREAK_HANGUL_LV_SYLLABLE has start=JAMO_L and end=JAMO_V.
+ */
+typedef struct _CharJamoProps
+{
+  JamoType start, end;
+} CharJamoProps;
+
+/* Map from JamoType to CharJamoProps that hold only simple
+ * JamoTypes (no LV or LVT) or none.
+ */
+static const CharJamoProps HangulJamoProps[] = {
+  {JAMO_L, JAMO_L},    /* JAMO_L */
+  {JAMO_V, JAMO_V},    /* JAMO_V */
+  {JAMO_T, JAMO_T},    /* JAMO_T */
+  {JAMO_L, JAMO_V},    /* JAMO_LV */
+  {JAMO_L, JAMO_T},    /* JAMO_LVT */
+  {NO_JAMO, NO_JAMO}   /* NO_JAMO */
+};
+
+/* A character forms a syllable with the previous character if and only if:
+ * JamoType(this) is not NO_JAMO and:
+ *
+ * HangulJamoProps[JamoType(prev)].end and
+ * HangulJamoProps[JamoType(this)].start are equal,
+ * or the former is one less than the latter.
+ */
+
+#define IS_JAMO(btype)              \
+       ((btype >= G_UNICODE_BREAK_HANGUL_L_JAMO) && \
+        (btype <= G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE))
+#define JAMO_TYPE(btype)      \
+       (IS_JAMO(btype) ? (btype - G_UNICODE_BREAK_HANGUL_L_JAMO) : NO_JAMO)
+
+/* Types of Japanese characters */
+#define JAPANESE(wc) ((wc) >= 0x2F00 && (wc) <= 0x30FF)
+#define KANJI(wc)    ((wc) >= 0x2F00 && (wc) <= 0x2FDF)
+#define HIRAGANA(wc) ((wc) >= 0x3040 && (wc) <= 0x309F)
+#define KATAKANA(wc) ((wc) >= 0x30A0 && (wc) <= 0x30FF)
+
+#define LATIN(wc) (((wc) >= 0x0020 && (wc) <= 0x02AF) || ((wc) >= 0x1E00 && (wc) <= 0x1EFF))
+#define CYRILLIC(wc) (((wc) >= 0x0400 && (wc) <= 0x052F))
+#define GREEK(wc) (((wc) >= 0x0370 && (wc) <= 0x3FF) || ((wc) >= 0x1F00 && (wc) <= 0x1FFF))
+#define KANA(wc) ((wc) >= 0x3040 && (wc) <= 0x30FF)
+#define HANGUL(wc) ((wc) >= 0xAC00 && (wc) <= 0xD7A3)
+#define BACKSPACE_DELETES_CHARACTER(wc) (!LATIN (wc) && !CYRILLIC (wc) && !GREEK (wc) && !KANA(wc) && !HANGUL(wc))
+
+/* p. 132-133 of Unicode spec table 5-6 will help understand this */
+typedef enum
+{
+  STATE_SENTENCE_OUTSIDE,
+  STATE_SENTENCE_BODY,
+  STATE_SENTENCE_TERM,
+  STATE_SENTENCE_POST_TERM_CLOSE,
+  STATE_SENTENCE_POST_TERM_SPACE,
+  STATE_SENTENCE_POST_TERM_SEP,
+  STATE_SENTENCE_DOT,
+  STATE_SENTENCE_POST_DOT_CLOSE,
+  STATE_SENTENCE_POST_DOT_SPACE,
+  STATE_SENTENCE_POST_DOT_OPEN,
+  /* never include line/para separators in a sentence for now */
+  /* This isn't in the spec, but I can't figure out why they'd include
+   * one line/para separator in lines ending with Term but not with
+   * period-terminated lines, so I'm doing it for the dot lines also
+   */
+  STATE_SENTENCE_POST_DOT_SEP
+} SentenceState;
+
+/* We call "123" and "foobar" words, but "123foo" is two words;
+ * the Unicode spec just calls "123" a non-word
+ */
+typedef enum
+{
+  WordNone,
+  WordLetters,
+  WordNumbers
+} WordType;
+
+
+/**
+ * pango_default_break:
+ * @text: text to break
+ * @length: length of text in bytes (may be -1 if @text is nul-terminated)
+ * @analysis: a #PangoAnalysis for the @text
+ * @attrs: logical attributes to fill in
+ * @attrs_len: size of the array passed as @attrs
+ *
+ * This is the default break algorithm, used if no language
+ * engine overrides it. Normally you should use pango_break()
+ * instead. Unlike pango_break(),
+ * @analysis can be %NULL, but only do that if you know what
+ * you're doing. If you need an analysis to pass to pango_break(),
+ * you need to pango_itemize().  In most cases however you should
+ * simply use pango_get_log_attrs().
+ **/
+void
+pango_default_break (const gchar   *text,
+                    gint           length,
+                    PangoAnalysis *analysis G_GNUC_UNUSED,
+                    PangoLogAttr  *attrs,
+                    int            attrs_len G_GNUC_UNUSED)
+{
+  /* The rationale for all this is in section 5.15 of the Unicode 3.0 book,
+   * the line breaking stuff is also in TR14 on unicode.org
+   */
+
+  /* This is a default break implementation that should work for nearly all
+   * languages. Language engines can override it optionally.
+   */
+
+  /* FIXME one cheesy optimization here would be to memset attrs to 0
+   * before we start, and then never assign %FALSE to anything
+   */
+
+  const gchar *next;
+  gint i;
+
+  gunichar prev_wc;
+  gunichar next_wc;
+
+  JamoType prev_jamo;
+
+  GUnicodeBreakType next_break_type;
+  GUnicodeType prev_type;
+  GUnicodeBreakType prev_break_type; /* skips spaces */
+  gboolean prev_was_break_space;
+
+  /* See Grapheme_Cluster_Break Property Values table of UAX#29 */
+  typedef enum
+  {
+    GB_Other,
+    GB_ControlCRLF,
+    GB_Extend,
+    GB_Prepend,
+    GB_SpacingMark,
+    GB_InHangulSyllable, /* Handles all of L, V, T, LV, LVT rules */
+  } GraphemeBreakType;
+  GraphemeBreakType prev_GB_type = GB_Other;
+
+  /* See Word_Break Property Values table of UAX#29 */
+  typedef enum
+  {
+    WB_Other,
+    WB_NewlineCRLF,
+    WB_ExtendFormat,
+    WB_Katakana,
+    WB_ALetter,
+    WB_MidNumLet,
+    WB_MidLetter,
+    WB_MidNum,
+    WB_Numeric,
+    WB_ExtendNumLet,
+  } WordBreakType;
+  WordBreakType prev_prev_WB_type = WB_Other, prev_WB_type = WB_Other;
+  gint prev_WB_i = -1;
+
+  WordType current_word_type = WordNone;
+  gunichar last_word_letter = 0;
+  gunichar base_character = 0;
+
+  SentenceState sentence_state = STATE_SENTENCE_OUTSIDE;
+  /* Tracks what will be the end of the sentence if a period is
+   * determined to actually be a sentence-ending period.
+   */
+  gint possible_sentence_end = -1;
+  /* possible sentence break before Open* after a period-ended sentence */
+  gint possible_sentence_boundary = -1;
+  gboolean almost_done = FALSE;
+  gboolean done = FALSE;
+
+  g_return_if_fail (length == 0 || text != NULL);
+  g_return_if_fail (attrs != NULL);
+
+  next = text;
+
+  prev_type = G_UNICODE_PARAGRAPH_SEPARATOR;
+  prev_break_type = G_UNICODE_BREAK_UNKNOWN;
+  prev_was_break_space = FALSE;
+  prev_wc = 0;
+  prev_jamo = NO_JAMO;
+
+  if (length == 0 || *text == '\0')
+    {
+      next_wc = PARAGRAPH_SEPARATOR;
+      almost_done = TRUE;
+    }
+  else
+    next_wc = g_utf8_get_char (next);
+
+  next_break_type = g_unichar_break_type (next_wc);
+  next_break_type = BREAK_TYPE_SAFE (next_break_type);
+
+  for (i = 0; !done ; i++)
+    {
+      GUnicodeType type;
+      gunichar wc;
+      GUnicodeBreakType break_type;
+      BreakOpportunity break_op;
+      JamoType jamo;
+      gboolean makes_hangul_syllable;
+
+      /* UAX#29 boundaries */
+      gboolean is_grapheme_boundary;
+      gboolean is_word_boundary;
+
+
+      wc = next_wc;
+      break_type = next_break_type;
+
+      if (almost_done)
+       {
+         /*
+          * If we have already reached the end of @text g_utf8_next_char()
+          * may not increment next
+          */
+         next_wc = 0;
+         next_break_type = G_UNICODE_BREAK_UNKNOWN;
+         done = TRUE;
+       }
+      else
+       {
+         next = g_utf8_next_char (next);
+
+         if ((length >= 0 && next >= text + length) || *next == '\0')
+           {
+             /* This is how we fill in the last element (end position) of the
+              * attr array - assume there's a paragraph separators off the end
+              * of @text.
+              */
+             next_wc = PARAGRAPH_SEPARATOR;
+             almost_done = TRUE;
+           }
+         else
+           next_wc = g_utf8_get_char (next);
+
+         next_break_type = g_unichar_break_type (next_wc);
+         next_break_type = BREAK_TYPE_SAFE (next_break_type);
+       }
+
+      type = g_unichar_type (wc);
+      jamo = JAMO_TYPE (break_type);
+
+      /* Determine wheter this forms a Hangul syllable with prev. */
+      if (jamo == NO_JAMO)
+       makes_hangul_syllable = FALSE;
+      else
+       {
+         JamoType prev_end   = HangulJamoProps[prev_jamo].end  ;
+         JamoType this_start = HangulJamoProps[     jamo].start;
+
+         /* See comments before IS_JAMO */
+         makes_hangul_syllable = (prev_end == this_start) || (prev_end + 1 == this_start);
+       }
+
+      /* Can't just use the type here since isspace() doesn't
+       * correspond to a Unicode character type
+       */
+      attrs[i].is_white = g_unichar_isspace (wc);
+
+      /* Just few spaces have variable width. So explicitly mark them.
+       */
+      attrs[i].is_expandable_space = (0x0020 == wc || 0x00A0 == wc);
+
+      /* ---- UAX#29 Grapheme Boundaries ---- */
+      {
+       GraphemeBreakType GB_type;
+        /* Find the GraphemeBreakType of wc */
+       GB_type = GB_Other;
+       switch ((int) type)
+         {
+         case G_UNICODE_FORMAT:
+           if (wc == 0x200C && wc == 0x200D)
+             {
+               GB_type = GB_Extend; /* U+200C and U+200D are Other_Grapheme_Extend */
+               break;
+             }
+           /* fall through */
+         case G_UNICODE_CONTROL:
+         case G_UNICODE_LINE_SEPARATOR:
+         case G_UNICODE_PARAGRAPH_SEPARATOR:
+           GB_type = GB_ControlCRLF;
+           break;
+
+         case G_UNICODE_OTHER_LETTER:
+           if (makes_hangul_syllable)
+             GB_type = GB_InHangulSyllable;
+           else if ((wc & 0x0E00) == 0x0E00)
+             {
+               /* Thai and Lao stuff hardcoded in UAX#29 */
+               if ((wc >= 0x0E40 && wc <= 0x0E44) || (wc >= 0x0EC0 && wc <= 0x0EC4))
+                 GB_type = GB_Prepend; /* Prepend */
+               else if (wc == 0x0E30 || wc == 0x0E32 || wc == 0x0E33 || wc == 0x0E45 ||
+                        wc == 0x0EB0 || wc == 0x0EB2 || wc == 0x0EB3)
+                 GB_type = GB_Extend; /* Exceptions in the Extend definition */
+             }
+           break;
+
+         case G_UNICODE_MODIFIER_LETTER:
+           if (wc >= 0xFF9E && wc <= 0xFF9F)
+             GB_type = GB_Extend; /* Other_Grapheme_Extend */
+           break;
+
+         case G_UNICODE_COMBINING_MARK:
+           GB_type = GB_SpacingMark; /* SpacingMark */
+           if (wc >= 0x0900)
+             {
+               if (wc == 0x09BE || wc == 0x09D7 ||
+                   wc == 0x0B3E || wc == 0x0B57 || wc == 0x0BBE || wc == 0x0BD7 ||
+                   wc == 0x0CC2 || wc == 0x0CD5 || wc == 0x0CD6 ||
+                   wc == 0x0D3E || wc == 0x0D57 || wc == 0x0DCF || wc == 0x0DDF ||
+                   wc == 0x1D165 || (wc >= 0x1D16E && wc <= 0x1D172))
+                 GB_type = GB_Extend; /* Other_Grapheme_Extend */
+             }
+           break;
+
+         case G_UNICODE_ENCLOSING_MARK:
+         case G_UNICODE_NON_SPACING_MARK:
+           GB_type = GB_Extend; /* Grapheme_Extend */
+           break;
+         }
+
+       /* Grapheme Cluster Boundary Rules */
+       /* We apply Rules GB1 and GB2 at the end of the function */
+       if (wc == '\n' && prev_wc == '\r')
+         is_grapheme_boundary = FALSE; /* Rule GB3 */
+       else if (prev_GB_type == GB_ControlCRLF || GB_type == GB_ControlCRLF)
+         is_grapheme_boundary = TRUE; /* Rules GB4 and GB5 */
+       else if (GB_type == GB_InHangulSyllable)
+         is_grapheme_boundary = FALSE; /* Rules GB6, GB7, GB8 */
+       else if (GB_type == GB_Extend)
+         is_grapheme_boundary = FALSE; /* Rule GB9 */
+       else if (GB_type == GB_SpacingMark)
+         is_grapheme_boundary = FALSE; /* Rule GB9a */
+       else if (prev_GB_type == GB_Prepend)
+         is_grapheme_boundary = FALSE; /* Rule GB9b */
+       else
+         is_grapheme_boundary = TRUE;  /* Rule GB10 */
+
+       prev_GB_type = GB_type;
+
+       attrs[i].is_cursor_position = is_grapheme_boundary;
+       /* If this is a grapheme boundary, we have to decide if backspace
+        * deletes a character or the whole grapheme cluster */
+       if (is_grapheme_boundary)
+         attrs[i].backspace_deletes_character = BACKSPACE_DELETES_CHARACTER (base_character);
+       else
+         attrs[i].backspace_deletes_character = FALSE;
+      }
+
+      /* ---- UAX#29 Word Boundaries ---- */
+      {
+       is_word_boundary = FALSE;
+       if (is_grapheme_boundary) /* Rules WB3 and WB4 */
+         {
+           PangoScript script;
+           WordBreakType WB_type;
+
+           script = pango_script_for_unichar (wc);
+
+           /* Find the WordBreakType of wc */
+           WB_type = WB_Other;
+
+           if (script == PANGO_SCRIPT_KATAKANA)
+             WB_type = WB_Katakana;
+
+           if (WB_type == WB_Other)
+             switch (wc >> 8)
+               {
+               case 0x30:
+                 if (wc == 0x3031 || wc == 0x3032 || wc == 0x3033 || wc == 0x3034 || wc == 0x3035 ||
+                     wc == 0x309b || wc == 0x309c || wc == 0x30a0 || wc == 0x30fc)
+                   WB_type = WB_Katakana; /* Katakana exceptions */
+                 break;
+               case 0xFF:
+                 if (wc == 0xFF70)
+                   WB_type = WB_Katakana; /* Katakana exceptions */
+                 else if (wc >= 0xFF9E || wc <= 0xFF9F)
+                   WB_type = WB_ExtendFormat; /* Other_Grapheme_Extend */
+                 break;
+               case 0x05:
+                 if (wc == 0x05F3)
+                   WB_type = WB_ALetter; /* ALetter exceptions */
+                 break;
+               }
+
+           if (WB_type == WB_Other)
+             switch ((int) break_type)
+               {
+               case G_UNICODE_BREAK_NUMERIC:
+                 if (wc != 0x066C)
+                   WB_type = WB_Numeric; /* Numeric */
+                 break;
+               case G_UNICODE_BREAK_INFIX_SEPARATOR:
+                 if (wc != 0x003A && wc != 0xFE13 && wc != 0x002E)
+                   WB_type = WB_MidNum; /* MidNum */
+                 break;
+               }
+
+           if (WB_type == WB_Other)
+             switch ((int) type)
+               {
+               case G_UNICODE_CONTROL:
+                 if (wc != 0x000D && wc != 0x000A && wc != 0x000B && wc != 0x000C && wc != 0x0085)
+                   break;
+                 /* fall through */
+               case G_UNICODE_LINE_SEPARATOR:
+               case G_UNICODE_PARAGRAPH_SEPARATOR:
+                 WB_type = WB_NewlineCRLF; /* CR, LF, Newline */
+                 break;
+
+               case G_UNICODE_FORMAT:
+               case G_UNICODE_COMBINING_MARK:
+               case G_UNICODE_ENCLOSING_MARK:
+               case G_UNICODE_NON_SPACING_MARK:
+                 WB_type = WB_ExtendFormat; /* Extend, Format */
+                 break;
+
+               case G_UNICODE_CONNECT_PUNCTUATION:
+                 WB_type = WB_ExtendNumLet; /* ExtendNumLet */
+                 break;
+
+               case G_UNICODE_INITIAL_PUNCTUATION:
+               case G_UNICODE_FINAL_PUNCTUATION:
+                 if (wc == 0x2018 || wc == 0x2019)
+                   WB_type = WB_MidNumLet; /* MidNumLet */
+                 break;
+               case G_UNICODE_OTHER_PUNCTUATION:
+                 if (wc == 0x0027 || wc == 0x002e || wc == 0x2024 ||
+                     wc == 0xfe52 || wc == 0xff07 || wc == 0xff0e)
+                   WB_type = WB_MidNumLet; /* MidNumLet */
+                 else if (wc == 0x00b7 || wc == 0x05f4 || wc == 0x2027 || wc == 0x003a || wc == 0x0387 ||
+                          wc == 0xfe13 || wc == 0xfe55 || wc == 0xff1a)
+                   WB_type = WB_MidLetter; /* WB_MidLetter */
+                 else if (wc == 0x066c ||
+                          wc == 0xfe50 || wc == 0xfe54 || wc == 0xff0c || wc == 0xff1b)
+                   WB_type = WB_MidNum; /* MidNum */
+                 break;
+
+               case G_UNICODE_OTHER_SYMBOL:
+                 if (wc >= 0x24B6 && wc <= 0x24E9) /* Other_Alphabetic */
+                   goto Alphabetic;
+                 break;
+
+               case G_UNICODE_OTHER_LETTER:
+               case G_UNICODE_LETTER_NUMBER:
+                 if (wc == 0x3006 || wc == 0x3007 ||
+                     (wc >= 0x3021 && wc <= 0x3029) ||
+                     (wc >= 0x3038 && wc <= 0x303A) ||
+                     (wc >= 0x3400 && wc <= 0x4DB5) ||
+                     (wc >= 0x4E00 && wc <= 0x9FC3) ||
+                     (wc >= 0xF900 && wc <= 0xFA2D) ||
+                     (wc >= 0xFA30 && wc <= 0xFA6A) ||
+                     (wc >= 0xFA70 && wc <= 0xFAD9) ||
+                     (wc >= 0x20000 && wc <= 0x2A6D6) ||
+                     (wc >= 0x2F800 && wc <= 0x2FA1D))
+                   break; /* ALetter exceptions: Ideographic */
+                 goto Alphabetic;
+
+               case G_UNICODE_LOWERCASE_LETTER:
+               case G_UNICODE_MODIFIER_LETTER:
+               case G_UNICODE_TITLECASE_LETTER:
+               case G_UNICODE_UPPERCASE_LETTER:
+               Alphabetic:
+                 if (break_type != G_UNICODE_BREAK_COMPLEX_CONTEXT && script != PANGO_SCRIPT_HIRAGANA)
+                   WB_type = WB_ALetter; /* ALetter */
+                 break;
+               }
+
+           /* Grapheme Cluster Boundary Rules */
+
+           /* We apply Rules WB1 and WB2 at the end of the function */
+
+           if (prev_wc == 0x3031 && wc == 0x41)
+             g_debug ("Y %d %d", prev_WB_type, WB_type);
+           if (prev_WB_type == WB_NewlineCRLF && prev_WB_i + 1 == i)
+             {
+               /* The extra check for prev_WB_i is to correctly handle sequences like
+                * Newline ÷ Extend × Extend
+                * since we have not skipped ExtendFormat yet.
+                */
+               is_word_boundary = TRUE; /* Rule WB3a */
+             }
+           else if (WB_type == WB_NewlineCRLF)
+             is_word_boundary = TRUE; /* Rule WB3b */
+           else if (WB_type == WB_ExtendFormat)
+             is_word_boundary = FALSE; /* Rules WB4? */
+           else if ((prev_WB_type == WB_ALetter  ||
+                     prev_WB_type == WB_Numeric  ||
+                     prev_WB_type == WB_ExtendNumLet) &&
+                    (     WB_type == WB_ALetter  ||
+                          WB_type == WB_Numeric  ||
+                          WB_type == WB_ExtendNumLet))
+             is_word_boundary = FALSE; /* Rules WB5, WB8, WB9, WB10, WB13a, WB13b */
+           else if ((prev_WB_type == WB_Katakana ||
+                     prev_WB_type == WB_ExtendNumLet) &&
+                    (     WB_type == WB_Katakana ||
+                          WB_type == WB_ExtendNumLet))
+             is_word_boundary = FALSE; /* Rules WB13, WB13a, WB13b */
+           else if ((prev_prev_WB_type == WB_ALetter && WB_type == WB_ALetter) &&
+                    (prev_WB_type == WB_MidLetter || prev_WB_type == WB_MidNumLet))
+             {
+               attrs[prev_WB_i].is_word_boundary = FALSE; /* Rule WB6 */
+               is_word_boundary = FALSE; /* Rule WB7 */
+             }
+           else if ((prev_prev_WB_type == WB_Numeric && WB_type == WB_Numeric) &&
+                    (prev_WB_type == WB_MidNum || prev_WB_type == WB_MidNumLet))
+             {
+               is_word_boundary = FALSE; /* Rule WB11 */
+               attrs[prev_WB_i].is_word_boundary = FALSE; /* Rule WB12 */
+             }
+           else
+             is_word_boundary = TRUE; /* Rule WB14 */
+
+           if (WB_type != WB_ExtendFormat)
+             {
+               prev_prev_WB_type = prev_WB_type;
+               prev_WB_type = WB_type;
+               prev_WB_i = i;
+             }
+         }
+
+       attrs[i].is_word_boundary = is_word_boundary;
+      }
+
+
+      /* ---- Line breaking ---- */
+
+      break_op = BREAK_ALREADY_HANDLED;
+
+      g_assert (prev_break_type != G_UNICODE_BREAK_SPACE);
+
+      attrs[i].is_line_break = FALSE;
+      attrs[i].is_mandatory_break = FALSE;
+
+      if (attrs[i].is_cursor_position) /* If it's not a grapheme boundary,
+                                       * it's not a line break either
+                                       */
+       {
+         /* space followed by a combining mark is handled
+          * specially; (rule 7a from TR 14)
+          */
+         if (break_type == G_UNICODE_BREAK_SPACE &&
+             next_break_type == G_UNICODE_BREAK_COMBINING_MARK)
+           break_type = G_UNICODE_BREAK_IDEOGRAPHIC;
+
+         /* Unicode doesn't specify char wrap; we wrap around all chars
+          * except where a line break is prohibited, which means we
+          * effectively break everywhere except inside runs of spaces.
+          */
+         attrs[i].is_char_break = TRUE;
+
+         /* Make any necessary replacements first */
+         switch ((int) prev_break_type)
+           {
+           case G_UNICODE_BREAK_HANGUL_L_JAMO:
+           case G_UNICODE_BREAK_HANGUL_V_JAMO:
+           case G_UNICODE_BREAK_HANGUL_T_JAMO:
+           case G_UNICODE_BREAK_HANGUL_LV_SYLLABLE:
+           case G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE:
+             /* treat Jamo as IDEOGRAPHIC from now
+              */
+             prev_break_type = G_UNICODE_BREAK_IDEOGRAPHIC;
+             break;
+
+           case G_UNICODE_BREAK_AMBIGUOUS:
+             /* FIXME
+              * we need to resolve the East Asian width
+              * to decide what to do here
+              */
+           case G_UNICODE_BREAK_COMPLEX_CONTEXT:
+             /* FIXME
+              * language engines should handle this case...
+              */
+           case G_UNICODE_BREAK_UNKNOWN:
+             /* convert unknown, complex, ambiguous to ALPHABETIC
+              */
+             prev_break_type = G_UNICODE_BREAK_ALPHABETIC;
+             break;
+
+           default:
+             ;
+           }
+
+         switch ((int) prev_break_type)
+           {
+           case G_UNICODE_BREAK_MANDATORY:
+           case G_UNICODE_BREAK_LINE_FEED:
+           case G_UNICODE_BREAK_NEXT_LINE:
+             attrs[i].is_line_break = TRUE;
+             attrs[i].is_mandatory_break = TRUE;
+             break;
+
+           case G_UNICODE_BREAK_CARRIAGE_RETURN:
+             if (wc != '\n')
+               {
+                 attrs[i].is_line_break = TRUE;
+                 attrs[i].is_mandatory_break = TRUE;
+               }
+             break;
+
+           case G_UNICODE_BREAK_CONTINGENT:
+             /* can break after 0xFFFC by default, though we might want
+              * to eventually have a PangoLayout setting or
+              * PangoAttribute that disables this, if for some
+              * application breaking after objects is not desired.
+              */
+             break_op = BREAK_ALLOWED;
+             break;
+
+           case G_UNICODE_BREAK_SURROGATE:
+             g_assert_not_reached ();
+             break;
+
+           default:
+             g_assert (IN_BREAK_TABLE (prev_break_type));
+
+             /* Note that our table assumes that combining marks
+              * are only applied to alphabetic characters;
+              * tech report 14 explains how to remove this assumption
+              * from the code, if anyone ever cares, but it shouldn't
+              * be a problem. Also this issue sort of goes
+              * away since we only look for breaks on grapheme
+              * boundaries.
+              */
+
+             switch ((int) break_type)
+               {
+               case G_UNICODE_BREAK_MANDATORY:
+               case G_UNICODE_BREAK_LINE_FEED:
+               case G_UNICODE_BREAK_CARRIAGE_RETURN:
+               case G_UNICODE_BREAK_NEXT_LINE:
+               case G_UNICODE_BREAK_SPACE:
+                 /* These types all "pile up" at the end of lines and
+                  * get elided.
+                  */
+                 break_op = BREAK_PROHIBITED;
+                 break;
+
+               case G_UNICODE_BREAK_CONTINGENT:
+                 /* break before 0xFFFC by default, eventually
+                  * make this configurable?
+                  */
+                 break_op = BREAK_ALLOWED;
+                 break;
+
+               case G_UNICODE_BREAK_SURROGATE:
+                 g_assert_not_reached ();
+                 break;
+
+               /* Hangul additions are from Unicode 4.1 UAX#14 */
+               case G_UNICODE_BREAK_HANGUL_L_JAMO:
+               case G_UNICODE_BREAK_HANGUL_V_JAMO:
+               case G_UNICODE_BREAK_HANGUL_T_JAMO:
+               case G_UNICODE_BREAK_HANGUL_LV_SYLLABLE:
+               case G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE:
+                 /* treat Jamo as IDEOGRAPHIC from now
+                  */
+                 break_type = G_UNICODE_BREAK_IDEOGRAPHIC;
+
+                 if (makes_hangul_syllable)
+                   break_op = BREAK_IF_SPACES;
+                 else
+                   break_op = BREAK_ALLOWED;
+                 break;
+
+               case G_UNICODE_BREAK_AMBIGUOUS:
+                 /* FIXME:
+                  * we need to resolve the East Asian width
+                  * to decide what to do here
+                  */
+               case G_UNICODE_BREAK_COMPLEX_CONTEXT:
+                 /* FIXME:
+                  * language engines should handle this case...
+                  */
+               case G_UNICODE_BREAK_UNKNOWN:
+                 /* treat unknown, complex, and ambiguous like ALPHABETIC
+                  * for now
+                  */
+                 break_op = BREAK_OP (prev_break_type, G_UNICODE_BREAK_ALPHABETIC);
+                 break;
+
+               default:
+
+                 g_assert (IN_BREAK_TABLE (break_type));
+                 break_op = BREAK_OP (prev_break_type, break_type);
+                 break;
+               }
+             break;
+           }
+
+         switch (break_op)
+           {
+           case BREAK_PROHIBITED:
+             /* can't break here */
+             attrs[i].is_char_break = FALSE;
+             break;
+
+           case BREAK_IF_SPACES:
+             /* break if prev char was space */
+             if (prev_was_break_space)
+               attrs[i].is_line_break = TRUE;
+             break;
+
+           case BREAK_ALLOWED:
+             attrs[i].is_line_break = TRUE;
+             break;
+
+           case BREAK_ALREADY_HANDLED:
+             break;
+
+           default:
+             g_assert_not_reached ();
+             break;
+           }
+       }
+
+      if (break_type != G_UNICODE_BREAK_SPACE)
+       {
+         prev_break_type = break_type;
+         prev_was_break_space = FALSE;
+         prev_jamo = jamo;
+       }
+      else
+       prev_was_break_space = TRUE;
+
+      /* ---- Word breaks ---- */
+
+      /* default to not a word start/end */
+      attrs[i].is_word_start = FALSE;
+      attrs[i].is_word_end = FALSE;
+
+      if (current_word_type != WordNone)
+       {
+         /* Check for a word end */
+         switch ((int) type)
+           {
+           case G_UNICODE_COMBINING_MARK:
+           case G_UNICODE_ENCLOSING_MARK:
+           case G_UNICODE_NON_SPACING_MARK:
+           case G_UNICODE_FORMAT:
+             /* nothing, we just eat these up as part of the word */
+             break;
+
+           case G_UNICODE_LOWERCASE_LETTER:
+           case G_UNICODE_MODIFIER_LETTER:
+           case G_UNICODE_OTHER_LETTER:
+           case G_UNICODE_TITLECASE_LETTER:
+           case G_UNICODE_UPPERCASE_LETTER:
+             if (current_word_type == WordLetters)
+               {
+                 /* Japanese special cases for ending the word */
+                 if (JAPANESE (last_word_letter) ||
+                     JAPANESE (wc))
+                   {
+                     if ((HIRAGANA (last_word_letter) &&
+                          !HIRAGANA (wc)) ||
+                         (KATAKANA (last_word_letter) &&
+                          !(KATAKANA (wc) || HIRAGANA (wc))) ||
+                         (KANJI (last_word_letter) &&
+                          !(HIRAGANA (wc) || KANJI (wc))) ||
+                         (JAPANESE (last_word_letter) &&
+                          !JAPANESE (wc)) ||
+                         (!JAPANESE (last_word_letter) &&
+                          JAPANESE (wc)))
+                       attrs[i].is_word_end = TRUE;
+                   }
+               }
+             else
+               {
+                 /* end the number word, start the letter word */
+                 attrs[i].is_word_end = TRUE;
+                 attrs[i].is_word_start = TRUE;
+                 current_word_type = WordLetters;
+               }
+
+             last_word_letter = wc;
+             break;
+
+           case G_UNICODE_DECIMAL_NUMBER:
+           case G_UNICODE_LETTER_NUMBER:
+           case G_UNICODE_OTHER_NUMBER:
+             if (current_word_type != WordNumbers)
+               {
+                 attrs[i].is_word_end = TRUE;
+                 attrs[i].is_word_start = TRUE;
+                 current_word_type = WordNumbers;
+               }
+
+             last_word_letter = wc;
+             break;
+
+           default:
+             /* Punctuation, control/format chars, etc. all end a word. */
+             attrs[i].is_word_end = TRUE;
+             current_word_type = WordNone;
+             break;
+           }
+       }
+      else
+       {
+         /* Check for a word start */
+         switch ((int) type)
+           {
+           case G_UNICODE_LOWERCASE_LETTER:
+           case G_UNICODE_MODIFIER_LETTER:
+           case G_UNICODE_OTHER_LETTER:
+           case G_UNICODE_TITLECASE_LETTER:
+           case G_UNICODE_UPPERCASE_LETTER:
+             current_word_type = WordLetters;
+             last_word_letter = wc;
+             attrs[i].is_word_start = TRUE;
+             break;
+
+           case G_UNICODE_DECIMAL_NUMBER:
+           case G_UNICODE_LETTER_NUMBER:
+           case G_UNICODE_OTHER_NUMBER:
+             current_word_type = WordNumbers;
+             last_word_letter = wc;
+             attrs[i].is_word_start = TRUE;
+             break;
+
+           default:
+             /* No word here */
+             break;
+           }
+       }
+
+      /* ---- Sentence breaks ---- */
+
+      /* The Unicode spec specifies sentence breakpoints, so that a piece of
+       * text would be partitioned into sentences, and all characters would
+       * be inside some sentence. This code implements that for is_sentence_boundary,
+       * but tries to keep leading/trailing whitespace out of sentences for
+       * the start/end flags
+       */
+
+      /* The Unicode spec seems to say that one trailing line/para
+       * separator can be tacked on to a sentence ending in ! or ?,
+       * but not a sentence ending in period; I think they're on crack
+       * so am allowing one to be tacked onto a sentence ending in period.
+       */
+
+#define MAYBE_START_NEW_SENTENCE                                \
+             switch ((int) type)                               \
+               {                                               \
+               case G_UNICODE_LINE_SEPARATOR:                  \
+               case G_UNICODE_PARAGRAPH_SEPARATOR:             \
+               case G_UNICODE_CONTROL:                         \
+               case G_UNICODE_FORMAT:                          \
+               case G_UNICODE_SPACE_SEPARATOR:                 \
+                 sentence_state = STATE_SENTENCE_OUTSIDE;      \
+                 break;                                        \
+                                                               \
+               default:                                        \
+                 sentence_state = STATE_SENTENCE_BODY;         \
+                 attrs[i].is_sentence_start = TRUE;            \
+                 break;                                        \
+               }
+
+      /* No sentence break at the start of the text */
+
+      /* default to not a sentence breakpoint */
+      attrs[i].is_sentence_boundary = FALSE;
+      attrs[i].is_sentence_start = FALSE;
+      attrs[i].is_sentence_end = FALSE;
+
+      /* FIXME the Unicode spec lumps control/format chars with
+       * line/para separators in descriptive text, but not in the
+       * character class specs, in table 5-6, so who knows whether you
+       * are actually supposed to break on control/format
+       * characters. Seems semi-broken to break on tabs...
+       */
+
+      /* Break after line/para separators except carriage return
+       * followed by newline
+       */
+      switch ((int) prev_type)
+       {
+       case G_UNICODE_LINE_SEPARATOR:
+       case G_UNICODE_PARAGRAPH_SEPARATOR:
+       case G_UNICODE_CONTROL:
+       case G_UNICODE_FORMAT:
+         if (wc == '\r')
+           {
+             if (next_wc != '\n')
+               attrs[i].is_sentence_boundary = TRUE;
+           }
+         else
+           attrs[i].is_sentence_boundary = TRUE;
+         break;
+
+       default:
+         break;
+       }
+
+      /* break before para/line separators except newline following
+       * carriage return
+       */
+      switch ((int) type)
+       {
+       case G_UNICODE_LINE_SEPARATOR:
+       case G_UNICODE_PARAGRAPH_SEPARATOR:
+       case G_UNICODE_CONTROL:
+       case G_UNICODE_FORMAT:
+         if (wc == '\n')
+           {
+             if (prev_wc != '\r')
+               attrs[i].is_sentence_boundary = TRUE;
+           }
+         else
+           attrs[i].is_sentence_boundary = TRUE;
+         break;
+
+       default:
+         break;
+       }
+
+      switch (sentence_state)
+       {
+       case STATE_SENTENCE_OUTSIDE:
+         /* Start sentence if we have non-whitespace/format/control */
+         switch ((int) type)
+           {
+           case G_UNICODE_LINE_SEPARATOR:
+           case G_UNICODE_PARAGRAPH_SEPARATOR:
+           case G_UNICODE_CONTROL:
+           case G_UNICODE_FORMAT:
+           case G_UNICODE_SPACE_SEPARATOR:
+             break;
+
+           default:
+             attrs[i].is_sentence_start = TRUE;
+             sentence_state = STATE_SENTENCE_BODY;
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_BODY:
+         /* If we already broke here due to separators, end the sentence. */
+         if (attrs[i].is_sentence_boundary)
+           {
+             attrs[i].is_sentence_end = TRUE;
+
+             MAYBE_START_NEW_SENTENCE;
+           }
+         else
+           {
+             if (wc == '.')
+               sentence_state = STATE_SENTENCE_DOT;
+             else if (wc == '?' || wc == '!')
+               sentence_state = STATE_SENTENCE_TERM;
+           }
+         break;
+
+       case STATE_SENTENCE_TERM:
+         /* End sentence on anything but close punctuation and some
+          * loosely-specified OTHER_PUNCTUATION such as period,
+          * comma, etc.; follow Unicode rules for breaks
+          */
+         switch ((int) type)
+           {
+           case G_UNICODE_OTHER_PUNCTUATION:
+           case G_UNICODE_CLOSE_PUNCTUATION:
+             if (type == G_UNICODE_CLOSE_PUNCTUATION ||
+                 wc == '.' ||
+                 wc == ',' ||
+                 wc == '?' ||
+                 wc == '!')
+               sentence_state = STATE_SENTENCE_POST_TERM_CLOSE;
+             else
+               {
+                 attrs[i].is_sentence_end = TRUE;
+                 attrs[i].is_sentence_boundary = TRUE;
+
+                 MAYBE_START_NEW_SENTENCE;
+               }
+             break;
+
+           case G_UNICODE_SPACE_SEPARATOR:
+             attrs[i].is_sentence_end = TRUE;
+             sentence_state = STATE_SENTENCE_POST_TERM_SPACE;
+             break;
+
+           case G_UNICODE_LINE_SEPARATOR:
+           case G_UNICODE_PARAGRAPH_SEPARATOR:
+             attrs[i].is_sentence_end = TRUE;
+             sentence_state = STATE_SENTENCE_POST_TERM_SEP;
+             break;
+
+           default:
+             attrs[i].is_sentence_end = TRUE;
+             attrs[i].is_sentence_boundary = TRUE;
+
+             MAYBE_START_NEW_SENTENCE;
+
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_TERM_CLOSE:
+         /* End sentence on anything besides more punctuation; follow
+          * rules for breaks
+          */
+         switch ((int) type)
+           {
+           case G_UNICODE_OTHER_PUNCTUATION:
+           case G_UNICODE_CLOSE_PUNCTUATION:
+             if (type == G_UNICODE_CLOSE_PUNCTUATION ||
+                 wc == '.' ||
+                 wc == ',' ||
+                 wc == '?' ||
+                 wc == '!')
+               /* continue in this state */
+               ;
+             else
+               {
+                 attrs[i].is_sentence_end = TRUE;
+                 attrs[i].is_sentence_boundary = TRUE;
+
+                 MAYBE_START_NEW_SENTENCE;
+               }
+             break;
+
+           case G_UNICODE_SPACE_SEPARATOR:
+             attrs[i].is_sentence_end = TRUE;
+             sentence_state = STATE_SENTENCE_POST_TERM_SPACE;
+             break;
+
+           case G_UNICODE_LINE_SEPARATOR:
+           case G_UNICODE_PARAGRAPH_SEPARATOR:
+             attrs[i].is_sentence_end = TRUE;
+             /* undo the unconditional break-at-all-line/para-separators
+              * from above; I'm not sure this is what the Unicode spec
+              * intends, but it seems right - we get to include
+              * a single line/para separator in the sentence according
+              * to their rules
+              */
+             attrs[i].is_sentence_boundary = FALSE;
+             sentence_state = STATE_SENTENCE_POST_TERM_SEP;
+             break;
+
+           default:
+             attrs[i].is_sentence_end = TRUE;
+             attrs[i].is_sentence_boundary = TRUE;
+
+             MAYBE_START_NEW_SENTENCE;
+
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_TERM_SPACE:
+
+         /* Sentence is definitely already ended; to enter this state
+          * we had to see a space, which ends the sentence.
+          */
+
+         switch ((int) type)
+           {
+           case G_UNICODE_SPACE_SEPARATOR:
+             /* continue in this state */
+             break;
+
+           case G_UNICODE_LINE_SEPARATOR:
+           case G_UNICODE_PARAGRAPH_SEPARATOR:
+             /* undo the unconditional break-at-all-line/para-separators
+              * from above; I'm not sure this is what the Unicode spec
+              * intends, but it seems right
+              */
+             attrs[i].is_sentence_boundary = FALSE;
+             sentence_state = STATE_SENTENCE_POST_TERM_SEP;
+             break;
+
+           default:
+             attrs[i].is_sentence_boundary = TRUE;
+
+             MAYBE_START_NEW_SENTENCE;
+
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_TERM_SEP:
+         /* Break is forced at this point, unless we're a newline
+          * after a CR, then we will break after the newline on the
+          * next iteration. Only a single Sep can be in the
+          * sentence.
+          */
+         if (!(prev_wc == '\r' && wc == '\n'))
+           attrs[i].is_sentence_boundary = TRUE;
+
+         MAYBE_START_NEW_SENTENCE;
+
+         break;
+
+       case STATE_SENTENCE_DOT:
+         switch ((int) type)
+           {
+           case G_UNICODE_CLOSE_PUNCTUATION:
+             sentence_state = STATE_SENTENCE_POST_DOT_CLOSE;
+             break;
+
+           case G_UNICODE_SPACE_SEPARATOR:
+             possible_sentence_end = i;
+             sentence_state = STATE_SENTENCE_POST_DOT_SPACE;
+             break;
+
+           default:
+             /* If we broke on a control/format char, end the
+              * sentence; else this was not a sentence end, since
+              * we didn't enter the POST_DOT_SPACE state.
+              */
+             if (attrs[i].is_sentence_boundary)
+               {
+                 attrs[i].is_sentence_end = TRUE;
+
+                 MAYBE_START_NEW_SENTENCE;
+               }
+             else
+               sentence_state = STATE_SENTENCE_BODY;
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_DOT_CLOSE:
+         switch ((int) type)
+           {
+           case G_UNICODE_SPACE_SEPARATOR:
+             possible_sentence_end = i;
+             sentence_state = STATE_SENTENCE_POST_DOT_SPACE;
+             break;
+
+           default:
+             /* If we broke on a control/format char, end the
+              * sentence; else this was not a sentence end, since
+              * we didn't enter the POST_DOT_SPACE state.
+              */
+             if (attrs[i].is_sentence_boundary)
+               {
+                 attrs[i].is_sentence_end = TRUE;
+
+                 MAYBE_START_NEW_SENTENCE;
+               }
+             else
+               sentence_state = STATE_SENTENCE_BODY;
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_DOT_SPACE:
+
+         possible_sentence_boundary = i;
+
+         switch ((int) type)
+           {
+           case G_UNICODE_SPACE_SEPARATOR:
+             /* remain in current state */
+             break;
+
+           case G_UNICODE_OPEN_PUNCTUATION:
+             sentence_state = STATE_SENTENCE_POST_DOT_OPEN;
+             break;
+
+           case G_UNICODE_LOWERCASE_LETTER:
+             /* wasn't a sentence-ending period; so re-enter the sentence
+              * body
+              */
+             sentence_state = STATE_SENTENCE_BODY;
+             break;
+
+           default:
+             /* End the sentence, break, maybe start a new one */
+
+             g_assert (possible_sentence_end >= 0);
+             g_assert (possible_sentence_boundary >= 0);
+
+             attrs[possible_sentence_boundary].is_sentence_boundary = TRUE;
+             attrs[possible_sentence_end].is_sentence_end = TRUE;
+
+             possible_sentence_end = -1;
+             possible_sentence_boundary = -1;
+
+             MAYBE_START_NEW_SENTENCE;
+
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_DOT_OPEN:
+         switch ((int) type)
+           {
+           case G_UNICODE_OPEN_PUNCTUATION:
+             /* continue in current state */
+             break;
+
+           case G_UNICODE_LOWERCASE_LETTER:
+             /* wasn't a sentence-ending period; so re-enter the sentence
+              * body
+              */
+             sentence_state = STATE_SENTENCE_BODY;
+             break;
+
+           default:
+             /* End the sentence, break, maybe start a new one */
+
+             g_assert (possible_sentence_end >= 0);
+             g_assert (possible_sentence_boundary >= 0);
+
+             attrs[possible_sentence_boundary].is_sentence_boundary = TRUE;
+             attrs[possible_sentence_end].is_sentence_end = TRUE;
+
+             possible_sentence_end = -1;
+             possible_sentence_boundary = -1;
+
+             MAYBE_START_NEW_SENTENCE;
+
+             break;
+           }
+         break;
+
+       case STATE_SENTENCE_POST_DOT_SEP:
+         /* Break is forced at this point, unless we're a newline
+          * after a CR, then we will break after the newline on the
+          * next iteration. Only a single Sep can be in the
+          * sentence.
+          */
+         if (!(prev_wc == '\r' && wc == '\n'))
+           attrs[i].is_sentence_boundary = TRUE;
+
+         g_assert (possible_sentence_end >= 0);
+         g_assert (possible_sentence_boundary >= 0);
+
+         attrs[possible_sentence_end].is_sentence_end = TRUE;
+
+         possible_sentence_end = -1;
+         possible_sentence_boundary = -1;
+
+         MAYBE_START_NEW_SENTENCE;
+
+         break;
+
+       default:
+         g_assert_not_reached ();
+         break;
+       }
+
+      prev_type = type;
+      prev_wc = wc;
+
+      /* wc might not be a valid Unicode base character, but really all we
+       * need to know is the last non-combining character */
+      if (type != G_UNICODE_COMBINING_MARK &&
+         type != G_UNICODE_ENCLOSING_MARK &&
+         type != G_UNICODE_NON_SPACING_MARK)
+       base_character = wc;
+    }
+  i--;
+
+  attrs[i].is_cursor_position = TRUE;  /* Rule GB2 */
+  attrs[0].is_cursor_position = TRUE;  /* Rule GB1 */
+
+  attrs[i].is_word_boundary = TRUE;  /* Rule WB2 */
+  attrs[0].is_word_boundary = TRUE;  /* Rule WB1 */
+
+  attrs[i].is_line_break = TRUE;  /* Rule LB3 */
+  attrs[0].is_line_break = FALSE; /* Rule LB2 */
+
+}
+
+static gboolean
+tailor_break (const gchar   *text,
+            gint           length,
+            PangoAnalysis *analysis,
+            PangoLogAttr  *attrs,
+            int            attrs_len)
+{
+  if (analysis->lang_engine && PANGO_ENGINE_LANG_GET_CLASS (analysis->lang_engine)->script_break)
+    {
+      if (length < 0)
+       length = strlen (text);
+      else if (text == NULL)
+       text = "";
+
+      PANGO_ENGINE_LANG_GET_CLASS (analysis->lang_engine)->script_break (analysis->lang_engine, text, length, analysis, attrs, attrs_len);
+      return TRUE;
+    }
+  return FALSE;
+}
+
+/**
+ * pango_break:
+ * @text:      the text to process
+ * @length:    length of @text in bytes (may be -1 if @text is nul-terminated)
+ * @analysis:  #PangoAnalysis structure from pango_itemize()
+ * @attrs:     an array to store character information in
+ * @attrs_len: size of the array passed as @attrs
+ *
+ * Determines possible line, word, and character breaks
+ * for a string of Unicode text with a single analysis.  For most
+ * purposes you may want to use pango_get_log_attrs().
+ */
+void
+pango_break (const gchar   *text,
+            gint           length,
+            PangoAnalysis *analysis,
+            PangoLogAttr  *attrs,
+            int            attrs_len)
+{
+  g_return_if_fail (analysis != NULL);
+  g_return_if_fail (attrs != NULL);
+
+  pango_default_break (text, length, analysis, attrs, attrs_len);
+  tailor_break        (text, length, analysis, attrs, attrs_len);
+}
+
+/**
+ * pango_find_paragraph_boundary:
+ * @text: UTF-8 text
+ * @length: length of @text in bytes, or -1 if nul-terminated
+ * @paragraph_delimiter_index: return location for index of delimiter
+ * @next_paragraph_start: return location for start of next paragraph
+ *
+ * Locates a paragraph boundary in @text. A boundary is caused by
+ * delimiter characters, such as a newline, carriage return, carriage
+ * return-newline pair, or Unicode paragraph separator character.  The
+ * index of the run of delimiters is returned in
+ * @paragraph_delimiter_index. The index of the start of the paragraph
+ * (index after all delimiters) is stored in @next_paragraph_start.
+ *
+ * If no delimiters are found, both @paragraph_delimiter_index and
+ * @next_paragraph_start are filled with the length of @text (an index one
+ * off the end).
+ **/
+void
+pango_find_paragraph_boundary (const gchar *text,
+                              gint         length,
+                              gint        *paragraph_delimiter_index,
+                              gint        *next_paragraph_start)
+{
+  const gchar *p = text;
+  const gchar *end;
+  const gchar *start = NULL;
+  const gchar *delimiter = NULL;
+
+  /* Only one character has type G_UNICODE_PARAGRAPH_SEPARATOR in
+   * Unicode 5.0; update the following code if that changes.
+   */
+
+  /* prev_sep is the first byte of the previous separator.  Since
+   * the valid separators are \r, \n, and PARAGRAPH_SEPARATOR, the
+   * first byte is enough to identify it.
+   */
+  gchar prev_sep;
+
+
+  if (length < 0)
+    length = strlen (text);
+
+  end = text + length;
+
+  if (paragraph_delimiter_index)
+    *paragraph_delimiter_index = length;
+
+  if (next_paragraph_start)
+    *next_paragraph_start = length;
+
+  if (length == 0)
+    return;
+
+  prev_sep = 0;
+
+  while (p != end)
+    {
+      if (prev_sep == '\n' ||
+         prev_sep == PARAGRAPH_SEPARATOR_STRING[0])
+       {
+         g_assert (delimiter);
+         start = p;
+         break;
+       }
+      else if (prev_sep == '\r')
+       {
+         /* don't break between \r and \n */
+         if (*p != '\n')
+           {
+             g_assert (delimiter);
+             start = p;
+             break;
+           }
+       }
+
+      if (*p == '\n' ||
+          *p == '\r' ||
+          !strncmp(p, PARAGRAPH_SEPARATOR_STRING,
+                   strlen(PARAGRAPH_SEPARATOR_STRING)))
+       {
+         if (delimiter == NULL)
+           delimiter = p;
+         prev_sep = *p;
+       }
+      else
+       prev_sep = 0;
+
+      p = g_utf8_next_char (p);
+    }
+
+  if (delimiter && paragraph_delimiter_index)
+    *paragraph_delimiter_index = delimiter - text;
+
+  if (start && next_paragraph_start)
+    *next_paragraph_start = start - text;
+}
+
+static int
+tailor_segment (const char      *range_start,
+               const char      *range_end,
+               PangoEngineLang *range_engine,
+               int              chars_broken,
+               PangoAnalysis   *analysis,
+               PangoLogAttr    *log_attrs)
+{
+  int chars_in_range;
+  PangoLogAttr attr_before = log_attrs[0];
+
+  analysis->lang_engine = range_engine;
+  chars_in_range = pango_utf8_strlen (range_start, range_end - range_start);
+
+
+  if (tailor_break (range_start,
+                   range_end - range_start,
+                   analysis,
+                   log_attrs + chars_broken,
+                   chars_in_range + 1))
+    {
+      /* if tailored, we enforce some of the attrs from before tailoring at
+       * the boundary
+       */
+
+     log_attrs[0].backspace_deletes_character  = attr_before.backspace_deletes_character;
+
+     log_attrs[0].is_line_break      |= attr_before.is_line_break;
+     log_attrs[0].is_mandatory_break |= attr_before.is_mandatory_break;
+     log_attrs[0].is_cursor_position |= attr_before.is_cursor_position;
+    }
+
+  return chars_in_range;
+}
+
+/**
+ * pango_get_log_attrs:
+ * @text: text to process
+ * @length: length in bytes of @text
+ * @level: embedding level, or -1 if unknown
+ * @language: language tag
+ * @log_attrs: array with one #PangoLogAttr per character in @text, plus one extra, to be filled in
+ * @attrs_len: length of @log_attrs array
+ *
+ * Computes a #PangoLogAttr for each character in @text. The @log_attrs
+ * array must have one #PangoLogAttr for each position in @text; if
+ * @text contains N characters, it has N+1 positions, including the
+ * last position at the end of the text. @text should be an entire
+ * paragraph; logical attributes can't be computed without context
+ * (for example you need to see spaces on either side of a word to know
+ * the word is a word).
+ */
+void
+pango_get_log_attrs (const char    *text,
+                    int            length,
+                    int            level,
+                    PangoLanguage *language,
+                    PangoLogAttr  *log_attrs,
+                    int            attrs_len)
+{
+  PangoMap *lang_map;
+  int chars_broken;
+  const char *range_start, *range_end;
+  PangoScript script;
+  PangoEngineLang *range_engine;
+  static guint engine_type_id = 0;
+  static guint render_type_id = 0;
+  PangoAnalysis analysis = { NULL };
+  PangoScriptIter iter;
+
+  g_return_if_fail (length == 0 || text != NULL);
+  g_return_if_fail (log_attrs != NULL);
+
+  analysis.level = level;
+
+  pango_default_break (text, length, &analysis, log_attrs, attrs_len);
+
+  if (engine_type_id == 0)
+    {
+      engine_type_id = g_quark_from_static_string (PANGO_ENGINE_TYPE_LANG);
+      render_type_id = g_quark_from_static_string (PANGO_RENDER_TYPE_NONE);
+    }
+
+  lang_map = pango_find_map (language, engine_type_id, render_type_id);
+
+  chars_broken = 0;
+
+  _pango_script_iter_init (&iter, text, length);
+  pango_script_iter_get_range (&iter, &range_start, &range_end, &script);
+  range_engine = (PangoEngineLang*) pango_map_get_engine (lang_map, script);
+  g_assert (range_start == text);
+
+  while (pango_script_iter_next (&iter))
+    {
+      const char *run_start, *run_end;
+      PangoEngineLang* run_engine;
+
+      pango_script_iter_get_range (&iter, &run_start, &run_end, &script);
+      run_engine = (PangoEngineLang*) pango_map_get_engine (lang_map, script);
+      g_assert (range_end == run_start);
+
+      if (range_engine != run_engine)
+       {
+         /* Engine has changed; do the tailoring for the current range,
+          * then start a new range.
+          */
+         chars_broken += tailor_segment (range_start, range_end, range_engine, chars_broken, &analysis, log_attrs);
+
+         range_start = run_start;
+         range_engine = run_engine;
+       }
+      range_end = run_end;
+    }
+  _pango_script_iter_fini (&iter);
+
+  g_assert (length < 0 || range_end == text + length);
+
+  chars_broken += tailor_segment (range_start, range_end, range_engine, chars_broken, &analysis, log_attrs);
+
+  if (chars_broken + 1 > attrs_len)
+    g_warning ("pango_get_log_attrs: attrs_len should have been at least %d, but was %d.  Expect corrupted memory.",
+              chars_broken + 1,
+              attrs_len);
+}
diff --git a/pango/check.defs b/pango/check.defs
new file mode 100755 (executable)
index 0000000..c497748
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+test -z "$srcdir" && srcdir=.
+status=0
+
+get_pango_syms='nm "$so" | grep " T " | cut -d" " -f3'
+if [ "`uname -s`" = "Linux" ]; then
+       get_pango_syms='objdump -t "$so" | sed -n "/.*g *F *\.\(opd\|text\).* \(.*pango_.*\)$/s//\2/p"'
+fi
+
+for def in $srcdir/*.def; do
+       lib=${def%.def}
+       lib=${lib##*/}
+       so=.libs/lib${lib}-1.0.so
+
+       test -f "$so" || continue
+       echo Checking $def
+
+       expected=$lib.expected
+       list=$lib.list
+       eval $get_pango_syms | sort -u > "$expected"
+       cut -f 2 "$def" | grep -v EXPORTS | sort -u > "$list"
+
+       diff -u "$list" "$expected" >&2 && rm -f "$list" "$expected" || status=1
+done
+
+exit $status
diff --git a/pango/ellipsize.c b/pango/ellipsize.c
new file mode 100755 (executable)
index 0000000..1c8aa24
--- /dev/null
@@ -0,0 +1,758 @@
+/* Pango
+ * ellipsize.c: Routine to ellipsize layout lines
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-glyph-item.h"
+#include "pango-layout-private.h"
+#include "pango-engine-private.h"
+#include "pango-impl-utils.h"
+
+typedef struct _EllipsizeState EllipsizeState;
+typedef struct _RunInfo        RunInfo;
+typedef struct _LineIter       LineIter;
+
+
+/* Overall, the way we ellipsize is we grow a "gap" out from an original
+ * gap center position until:
+ *
+ *  line_width - gap_width + ellipsize_width <= goal_width
+ *
+ * Line:  [-------------------------------------------]
+ * Runs:  [------)[---------------)[------------------]
+ * Gap center:                 *
+ * Gap:             [----------------------]
+ *
+ * The gap center may be at the start or end in which case the gap grows
+ * in only one direction.
+ *
+ * Note the line and last run are logically closed at the end; this allows
+ * us to use a gap position at x=line_width and still have it be part of
+ * of a run.
+ *
+ * We grow the gap out one "span" at a time, where a span is simply a
+ * consecutive run of clusters that we can't interrupt with an ellipsis.
+ *
+ * When choosing whether to grow the gap at the start or the end, we
+ * calculate the next span to remove in both directions and see which
+ * causes the smaller increase in:
+ *
+ *  MAX (gap_end - gap_center, gap_start - gap_center)
+ *
+ * All computations are done using logical order; the ellipsization
+ * process occurs before the runs are ordered into visual order.
+ */
+
+/* Keeps information about a single run */
+struct _RunInfo
+{
+  PangoGlyphItem *run;
+  int start_offset;            /* Character offset of run start */
+  int width;                   /* Width of run in Pango units */
+};
+
+/* Iterator to a position within the ellipsized line */
+struct _LineIter
+{
+  PangoGlyphItemIter run_iter;
+  int run_index;
+};
+
+/* State of ellipsization process */
+struct _EllipsizeState
+{
+  PangoLayout *layout;         /* Layout being ellipsized */
+  PangoAttrList *attrs;                /* Attributes used for itemization/shaping */
+
+  RunInfo *run_info;           /* Array of information about each run */
+  int n_runs;
+
+  int total_width;             /* Original width of line in Pango units */
+  int gap_center;              /* Goal for center of gap */
+
+  PangoGlyphItem *ellipsis_run;        /* Run created to hold ellipsis */
+  int ellipsis_width;          /* Width of ellipsis, in Pango units */
+  int ellipsis_is_cjk;         /* Whether the first character in the ellipsized
+                                * is wide; this triggers us to try to use a
+                                * mid-line ellipsis instead of a baseline
+                                */
+
+  PangoAttrIterator *line_start_attr; /* Cached PangoAttrIterator for the start of the run */
+
+  LineIter gap_start_iter;     /* Iteratator pointig to the first cluster in gap */
+  int gap_start_x;             /* x position of start of gap, in Pango units */
+  PangoAttrIterator *gap_start_attr; /* Attribute iterator pointing to a range containing
+                                     * the first character in gap */
+
+  LineIter gap_end_iter;       /* Iterator pointing to last cluster in gap */
+  int gap_end_x;               /* x position of end of gap, in Pango units */
+};
+
+/* Compute global information needed for the itemization process
+ */
+static void
+init_state (EllipsizeState  *state,
+           PangoLayoutLine *line,
+           PangoAttrList   *attrs)
+{
+  GSList *l;
+  int i;
+  int start_offset;
+
+  state->layout = line->layout;
+  state->attrs = attrs;
+
+  state->n_runs = g_slist_length (line->runs);
+  state->run_info = g_new (RunInfo, state->n_runs);
+
+  start_offset = pango_utf8_strlen (line->layout->text,
+                               line->start_index);
+
+  state->total_width = 0;
+  for (l = line->runs, i = 0; l; l = l->next, i++)
+    {
+      PangoGlyphItem *run = l->data;
+      int width = pango_glyph_string_get_width (run->glyphs);
+      state->run_info[i].run = run;
+      state->run_info[i].width = width;
+      state->run_info[i].start_offset = start_offset;
+      state->total_width += width;
+
+      start_offset += run->item->num_chars;
+    }
+
+  state->ellipsis_run = NULL;
+  state->ellipsis_is_cjk = FALSE;
+  state->line_start_attr = NULL;
+  state->gap_start_attr = NULL;
+}
+
+/* Cleanup memory allocation
+ */
+static void
+free_state (EllipsizeState *state)
+{
+  if (state->line_start_attr)
+    pango_attr_iterator_destroy (state->line_start_attr);
+  if (state->gap_start_attr)
+    pango_attr_iterator_destroy (state->gap_start_attr);
+  g_free (state->run_info);
+}
+
+/* Computes the width of a single cluster
+ */
+static int
+get_cluster_width (LineIter *iter)
+{
+  PangoGlyphItemIter *run_iter = &iter->run_iter;
+  PangoGlyphString *glyphs = run_iter->glyph_item->glyphs;
+  int width = 0;
+  int i;
+
+  if (run_iter->start_glyph < run_iter->end_glyph) /* LTR */
+    {
+      for (i = run_iter->start_glyph; i < run_iter->end_glyph; i++)
+       width += glyphs->glyphs[i].geometry.width;
+    }
+  else                                  /* RTL */
+    {
+      for (i = run_iter->start_glyph; i > run_iter->end_glyph; i--)
+       width += glyphs->glyphs[i].geometry.width;
+    }
+
+  return width;
+}
+
+/* Move forward one cluster. Returns %FALSE if we were already at the end
+ */
+static gboolean
+line_iter_next_cluster (EllipsizeState *state,
+                       LineIter       *iter)
+{
+  if (!pango_glyph_item_iter_next_cluster (&iter->run_iter))
+    {
+      if (iter->run_index == state->n_runs - 1)
+       return FALSE;
+      else
+       {
+         iter->run_index++;
+         pango_glyph_item_iter_init_start (&iter->run_iter,
+                                           state->run_info[iter->run_index].run,
+                                           state->layout->text);
+       }
+    }
+
+  return TRUE;
+}
+
+/* Move backward one cluster. Returns %FALSE if we were already at the end
+ */
+static gboolean
+line_iter_prev_cluster (EllipsizeState *state,
+                       LineIter       *iter)
+{
+  if (!pango_glyph_item_iter_prev_cluster (&iter->run_iter))
+    {
+      if (iter->run_index == 0)
+       return FALSE;
+      else
+       {
+         iter->run_index--;
+         pango_glyph_item_iter_init_end (&iter->run_iter,
+                                         state->run_info[iter->run_index].run,
+                                         state->layout->text);
+       }
+    }
+
+  return TRUE;
+}
+
+/*
+ * An ellipsization boundary is defined by two things
+ *
+ * - Starts a cluster - forced by structure of code
+ * - Starts a grapheme - checked here
+ *
+ * In the future we'd also like to add a check for cursive connectivity here.
+ * This should be an addition to #PangoGlyphVisAttr
+ *
+ */
+
+/* Checks if there is a ellipsization boundary before the cluster @iter points to
+ */
+static gboolean
+starts_at_ellipsization_boundary (EllipsizeState *state,
+                                 LineIter       *iter)
+{
+  RunInfo *run_info = &state->run_info[iter->run_index];
+
+  if (iter->run_iter.start_char == 0 && iter->run_index == 0)
+    return TRUE;
+
+  return state->layout->log_attrs[run_info->start_offset + iter->run_iter.start_char].is_cursor_position;
+}
+
+/* Checks if there is a ellipsization boundary after the cluster @iter points to
+ */
+static gboolean
+ends_at_ellipsization_boundary (EllipsizeState *state,
+                               LineIter       *iter)
+{
+  RunInfo *run_info = &state->run_info[iter->run_index];
+
+  if (iter->run_iter.end_char == run_info->run->item->num_chars && iter->run_index == state->n_runs - 1)
+    return TRUE;
+
+  return state->layout->log_attrs[run_info->start_offset + iter->run_iter.end_char + 1].is_cursor_position;
+}
+
+/* Helper function to re-itemize a string of text
+ */
+static PangoItem *
+itemize_text (EllipsizeState *state,
+             const char     *text,
+             PangoAttrList  *attrs)
+{
+  GList *items;
+  PangoItem *item;
+
+  items = pango_itemize (state->layout->context, text, 0, strlen (text), attrs, NULL);
+  g_assert (g_list_length (items) == 1);
+
+  item = items->data;
+  g_list_free (items);
+
+  return item;
+}
+
+/* Shapes the ellipsis using the font and is_cjk information computed by
+ * update_ellipsis_shape() from the first character in the gap.
+ */
+static void
+shape_ellipsis (EllipsizeState *state)
+{
+  PangoAttrList *attrs = pango_attr_list_new ();
+  GSList *run_attrs;
+  PangoItem *item;
+  PangoGlyphString *glyphs;
+  GSList *l;
+  PangoAttribute *fallback;
+  const char *ellipsis_text;
+  int i;
+
+  /* Create/reset state->ellipsis_run
+   */
+  if (!state->ellipsis_run)
+    {
+      state->ellipsis_run = g_slice_new (PangoGlyphItem);
+      state->ellipsis_run->glyphs = pango_glyph_string_new ();
+      state->ellipsis_run->item = NULL;
+    }
+
+  if (state->ellipsis_run->item)
+    {
+      pango_item_free (state->ellipsis_run->item);
+      state->ellipsis_run->item = NULL;
+    }
+
+  /* Create an attribute list
+   */
+  run_attrs = pango_attr_iterator_get_attrs (state->gap_start_attr);
+  for (l = run_attrs; l; l = l->next)
+    {
+      PangoAttribute *attr = l->data;
+      attr->start_index = 0;
+      attr->end_index = G_MAXINT;
+
+      pango_attr_list_insert (attrs, attr);
+    }
+
+  g_slist_free (run_attrs);
+
+  fallback = pango_attr_fallback_new (FALSE);
+  fallback->start_index = 0;
+  fallback->end_index = G_MAXINT;
+  pango_attr_list_insert (attrs, fallback);
+
+  /* First try using a specific ellipsis character in the best matching font
+   */
+  if (state->ellipsis_is_cjk)
+    ellipsis_text = "\342\213\257";    /* U+22EF: MIDLINE HORIZONTAL ELLIPSIS, used for CJK */
+  else
+    ellipsis_text = "\342\200\246";    /* U+2026: HORIZONTAL ELLIPSIS */
+
+  item = itemize_text (state, ellipsis_text, attrs);
+
+  /* If that fails we use "..." in the first matching font
+   */
+  if (!item->analysis.font ||
+      !_pango_engine_shape_covers (item->analysis.shape_engine, item->analysis.font,
+                                  item->analysis.language, g_utf8_get_char (ellipsis_text)))
+    {
+      pango_item_free (item);
+
+      /* Modify the fallback iter while it is inside the PangoAttrList; Don't try this at home
+       */
+      ((PangoAttrInt *)fallback)->value = TRUE;
+
+      ellipsis_text = "...";
+      item = itemize_text (state, ellipsis_text, attrs);
+    }
+
+  pango_attr_list_unref (attrs);
+
+  state->ellipsis_run->item = item;
+
+  /* Now shape
+   */
+  glyphs = state->ellipsis_run->glyphs;
+
+  pango_shape (ellipsis_text, strlen (ellipsis_text),
+              &item->analysis, glyphs);
+
+  state->ellipsis_width = 0;
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    state->ellipsis_width += glyphs->glyphs[i].geometry.width;
+}
+
+/* Helper function to advance a PangoAttrIterator to a particular
+ * byte index.
+ */
+static void
+advance_iterator_to (PangoAttrIterator *iter,
+                    int                new_index)
+{
+  int start, end;
+
+  do
+    {
+      pango_attr_iterator_range (iter, &start, &end);
+      if (end > new_index)
+       break;
+    }
+  while (pango_attr_iterator_next (iter));
+}
+
+/* Updates the shaping of the ellipsis if necessary when we move the
+ * position of the start of the gap.
+ *
+ * The shaping of the ellipsis is determined by two things:
+ *
+ * - The font attributes applied to the first character in the gap
+ * - Whether the first character in the gap is wide or not. If the
+ *   first character is wide, then we assume that we are ellipsizing
+ *   East-Asian text, so prefer a mid-line ellipsizes to a baseline
+ *   ellipsis, since that's typical practice for Chinese/Japanese/Korean.
+ */
+static void
+update_ellipsis_shape (EllipsizeState *state)
+{
+  gboolean recompute = FALSE;
+  gunichar start_wc;
+  gboolean is_cjk;
+
+  /* Unfortunately, we can only advance PangoAttrIterator forward; so each
+   * time we back up we need to go forward to find the new position. To make
+   * this not utterly slow, we cache an iterator at the start of the line
+   */
+  if (!state->line_start_attr)
+    {
+      state->line_start_attr = pango_attr_list_get_iterator (state->attrs);
+      advance_iterator_to (state->line_start_attr, state->run_info[0].run->item->offset);
+    }
+
+  if (state->gap_start_attr)
+    {
+      /* See if the current attribute range contains the new start position
+       */
+      int start, end;
+
+      pango_attr_iterator_range (state->gap_start_attr, &start, &end);
+
+      if (state->gap_start_iter.run_iter.start_index < start)
+       {
+         pango_attr_iterator_destroy (state->gap_start_attr);
+         state->gap_start_attr = NULL;
+       }
+    }
+
+  /* Check whether we need to recompute the ellipsis because of new font attributes
+   */
+  if (!state->gap_start_attr)
+    {
+      state->gap_start_attr = pango_attr_iterator_copy (state->line_start_attr);
+      advance_iterator_to (state->gap_start_attr,
+                          state->run_info[state->gap_start_iter.run_index].run->item->offset);
+
+      recompute = TRUE;
+    }
+
+  /* Check whether we need to recompute the ellipsis because we switch from CJK to not
+   * or vice-versa
+   */
+  start_wc = g_utf8_get_char (state->layout->text + state->gap_start_iter.run_iter.start_index);
+  is_cjk = g_unichar_iswide (start_wc);
+
+  if (is_cjk != state->ellipsis_is_cjk)
+    {
+      state->ellipsis_is_cjk = is_cjk;
+      recompute = TRUE;
+    }
+
+  if (recompute)
+    shape_ellipsis (state);
+}
+
+/* Computes the position of the gap center and finds the smallest span containing it
+ */
+static void
+find_initial_span (EllipsizeState *state)
+{
+  PangoGlyphItem *glyph_item;
+  PangoGlyphItemIter *run_iter;
+  gboolean have_cluster;
+  int i;
+  int x;
+  int cluster_width;
+
+  switch (state->layout->ellipsize)
+    {
+    case PANGO_ELLIPSIZE_NONE:
+    default:
+      g_assert_not_reached ();
+    case PANGO_ELLIPSIZE_START:
+      state->gap_center = 0;
+      break;
+    case PANGO_ELLIPSIZE_MIDDLE:
+      state->gap_center = state->total_width / 2;
+      break;
+    case PANGO_ELLIPSIZE_END:
+      state->gap_center = state->total_width;
+      break;
+    }
+
+  /* Find the run containing the gap center
+   */
+  x = 0;
+  for (i = 0; i < state->n_runs; i++)
+    {
+      if (x + state->run_info[i].width > state->gap_center)
+       break;
+
+      x += state->run_info[i].width;
+    }
+
+  if (i == state->n_runs)      /* Last run is a closed interval, so back off one run */
+    {
+      i--;
+      x -= state->run_info[i].width;
+    }
+
+  /* Find the cluster containing the gap center
+   */
+  state->gap_start_iter.run_index = i;
+  run_iter = &state->gap_start_iter.run_iter;
+  glyph_item = state->run_info[i].run;
+
+  cluster_width = 0;           /* Quiet GCC, the line must have at least one cluster */
+  for (have_cluster = pango_glyph_item_iter_init_start (run_iter, glyph_item, state->layout->text);
+       have_cluster;
+       have_cluster = pango_glyph_item_iter_next_cluster (run_iter))
+    {
+      cluster_width = get_cluster_width (&state->gap_start_iter);
+
+      if (x + cluster_width > state->gap_center)
+       break;
+
+      x += cluster_width;
+    }
+
+  if (!have_cluster)   /* Last cluster is a closed interval, so back off one cluster */
+    x -= cluster_width;
+
+  state->gap_end_iter = state->gap_start_iter;
+
+  state->gap_start_x = x;
+  state->gap_end_x = x + cluster_width;
+
+  /* Expand the gap to a full span
+   */
+  while (!starts_at_ellipsization_boundary (state, &state->gap_start_iter))
+    {
+      line_iter_prev_cluster (state, &state->gap_start_iter);
+      state->gap_start_x -= get_cluster_width (&state->gap_start_iter);
+    }
+
+  while (!ends_at_ellipsization_boundary (state, &state->gap_end_iter))
+    {
+      line_iter_next_cluster (state, &state->gap_end_iter);
+      state->gap_end_x += get_cluster_width (&state->gap_end_iter);
+    }
+
+  update_ellipsis_shape (state);
+}
+
+/* Removes one run from the start or end of the gap. Returns FALSE
+ * if there's nothing left to remove in either direction.
+ */
+static gboolean
+remove_one_span (EllipsizeState *state)
+{
+  LineIter new_gap_start_iter;
+  LineIter new_gap_end_iter;
+  int new_gap_start_x;
+  int new_gap_end_x;
+  int width;
+
+  /* Find one span backwards and forward from the gap
+   */
+  new_gap_start_iter = state->gap_start_iter;
+  new_gap_start_x = state->gap_start_x;
+  do
+    {
+      if (!line_iter_prev_cluster (state, &new_gap_start_iter))
+       break;
+      width = get_cluster_width (&new_gap_start_iter);
+      new_gap_start_x -= width;
+    }
+  while (!starts_at_ellipsization_boundary (state, &new_gap_start_iter) ||
+        width == 0);
+
+  new_gap_end_iter = state->gap_end_iter;
+  new_gap_end_x = state->gap_end_x;
+  do
+    {
+      if (!line_iter_next_cluster (state, &new_gap_end_iter))
+       break;
+      width = get_cluster_width (&new_gap_end_iter);
+      new_gap_end_x += width;
+    }
+  while (!ends_at_ellipsization_boundary (state, &new_gap_end_iter) ||
+        width == 0);
+
+  if (state->gap_end_x == new_gap_end_x && state->gap_start_x == new_gap_start_x)
+    return FALSE;
+
+  /* In the case where we could remove a span from either end of the
+   * gap, we look at which causes the smaller increase in the
+   * MAX (gap_end - gap_center, gap_start - gap_center)
+   */
+  if (state->gap_end_x == new_gap_end_x ||
+      (state->gap_start_x != new_gap_start_x &&
+       state->gap_center - new_gap_start_x < new_gap_end_x - state->gap_center))
+    {
+      state->gap_start_iter = new_gap_start_iter;
+      state->gap_start_x = new_gap_start_x;
+
+      update_ellipsis_shape (state);
+    }
+  else
+    {
+      state->gap_end_iter = new_gap_end_iter;
+      state->gap_end_x = new_gap_end_x;
+    }
+
+  return TRUE;
+}
+
+/* Fixes up the properties of the ellipsis run once we've determined the final extents
+ * of the gap
+ */
+static void
+fixup_ellipsis_run (EllipsizeState *state)
+{
+  PangoGlyphString *glyphs = state->ellipsis_run->glyphs;
+  PangoItem *item = state->ellipsis_run->item;
+  int level;
+  int i;
+
+  /* Make the entire glyphstring into a single logical cluster */
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      glyphs->log_clusters[i] = 0;
+      glyphs->glyphs[i].attr.is_cluster_start = FALSE;
+    }
+
+  glyphs->glyphs[0].attr.is_cluster_start = TRUE;
+
+  /* Fix up the item to point to the entire elided text */
+  item->offset = state->gap_start_iter.run_iter.start_index;
+  item->length = state->gap_end_iter.run_iter.end_index - item->offset;
+  item->num_chars = pango_utf8_strlen (state->layout->text + item->offset, item->length);
+
+  /* The level for the item is the minimum level of the elided text */
+  level = G_MAXINT;
+  for (i = state->gap_start_iter.run_index; i <= state->gap_end_iter.run_index; i++)
+    level = MIN (level, state->run_info[i].run->item->analysis.level);
+
+  item->analysis.level = level;
+}
+
+/* Computes the new list of runs for the line
+ */
+static GSList *
+get_run_list (EllipsizeState *state)
+{
+  PangoGlyphItem *partial_start_run = NULL;
+  PangoGlyphItem *partial_end_run = NULL;
+  GSList *result = NULL;
+  RunInfo *run_info;
+  PangoGlyphItemIter *run_iter;
+  int i;
+
+  /* We first cut out the pieces of the starting and ending runs we want to
+   * preserve; we do the end first in case the end and the start are
+   * the same. Doing the start first would disturb the indices for the end.
+   */
+  run_info = &state->run_info[state->gap_end_iter.run_index];
+  run_iter = &state->gap_end_iter.run_iter;
+  if (run_iter->end_char != run_info->run->item->num_chars)
+    {
+      partial_end_run = run_info->run;
+      run_info->run = pango_glyph_item_split (run_info->run, state->layout->text,
+                                             run_iter->end_index - run_info->run->item->offset);
+    }
+
+  run_info = &state->run_info[state->gap_start_iter.run_index];
+  run_iter = &state->gap_start_iter.run_iter;
+  if (run_iter->start_char != 0)
+    {
+      partial_start_run = pango_glyph_item_split (run_info->run, state->layout->text,
+                                                 run_iter->start_index - run_info->run->item->offset);
+    }
+
+  /* Now assemble the new list of runs
+   */
+  for (i = 0; i < state->gap_start_iter.run_index; i++)
+    result = g_slist_prepend (result, state->run_info[i].run);
+
+  if (partial_start_run)
+    result = g_slist_prepend (result, partial_start_run);
+
+  result = g_slist_prepend (result, state->ellipsis_run);
+
+  if (partial_end_run)
+    result = g_slist_prepend (result, partial_end_run);
+
+  for (i = state->gap_end_iter.run_index + 1; i < state->n_runs; i++)
+    result = g_slist_prepend (result, state->run_info[i].run);
+
+  /* And free the ones we didn't use
+   */
+  for (i = state->gap_start_iter.run_index; i <= state->gap_end_iter.run_index; i++)
+    pango_glyph_item_free (state->run_info[i].run);
+
+  return g_slist_reverse (result);
+}
+
+/* Computes the width of the line as currently ellipsized
+ */
+static int
+current_width (EllipsizeState *state)
+{
+  return state->total_width - (state->gap_end_x - state->gap_start_x) + state->ellipsis_width;
+}
+
+/**
+ * _pango_layout_line_ellipsize:
+ * @line: a #PangoLayoutLine
+ * @attrs: Attributes being used for itemization/shaping
+ *
+ * Given a #PangoLayoutLine with the runs still in logical order, ellipsize
+ * it according the layout's policy to fit within the set width of the layout.
+ *
+ * Return value: whether the line had to be ellipsized
+ **/
+gboolean
+_pango_layout_line_ellipsize (PangoLayoutLine *line,
+                             PangoAttrList   *attrs,
+                             int              goal_width)
+{
+  EllipsizeState state;
+  gboolean is_ellipsized = FALSE;
+
+  g_return_val_if_fail (line->layout->ellipsize != PANGO_ELLIPSIZE_NONE && goal_width >= 0, is_ellipsized);
+
+  init_state (&state, line, attrs);
+
+  if (state.total_width <= goal_width)
+    goto out;
+
+  find_initial_span (&state);
+
+  while (current_width (&state) > goal_width)
+    {
+      if (!remove_one_span (&state))
+       break;
+    }
+
+  fixup_ellipsis_run (&state);
+
+  g_slist_free (line->runs);
+  line->runs = get_run_list (&state);
+  is_ellipsized = TRUE;
+
+ out:
+  free_state (&state);
+
+  return is_ellipsized;
+}
diff --git a/pango/fonts.c b/pango/fonts.c
new file mode 100755 (executable)
index 0000000..ab5397a
--- /dev/null
@@ -0,0 +1,2104 @@
+/* Pango
+ * fonts.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include "pango-types.h"
+#include "pango-font.h"
+#include "pango-fontmap.h"
+#include "pango-impl-utils.h"
+
+struct _PangoFontDescription
+{
+  char *family_name;
+
+  PangoStyle style;
+  PangoVariant variant;
+  PangoWeight weight;
+  PangoStretch stretch;
+  PangoGravity gravity;
+
+  guint16 mask;
+  guint static_family : 1;
+  guint size_is_absolute : 1;
+
+  int size;
+};
+
+GType
+pango_font_description_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoFontDescription"),
+                                            (GBoxedCopyFunc)pango_font_description_copy,
+                                            (GBoxedFreeFunc)pango_font_description_free);
+
+  return our_type;
+}
+
+
+static const PangoFontDescription pfd_defaults = {
+  NULL,                        /* family_name */
+
+  PANGO_STYLE_NORMAL,  /* style */
+  PANGO_VARIANT_NORMAL,        /* variant */
+  PANGO_WEIGHT_NORMAL, /* weight */
+  PANGO_STRETCH_NORMAL,        /* stretch */
+  PANGO_GRAVITY_SOUTH,  /* gravity */
+
+  0,                   /* mask */
+  0,                   /* static_family */
+  FALSE,               /* size_is_absolute */
+
+  0,                   /* size */
+};
+
+/**
+ * pango_font_description_new:
+ *
+ * Creates a new font description structure with all fields unset.
+ *
+ * Return value: the newly allocated #PangoFontDescription, which
+ *               should be freed using pango_font_description_free().
+ **/
+PangoFontDescription *
+pango_font_description_new (void)
+{
+  PangoFontDescription *desc = g_slice_new (PangoFontDescription);
+
+  *desc = pfd_defaults;
+
+  return desc;
+}
+
+/**
+ * pango_font_description_set_family:
+ * @desc: a #PangoFontDescription.
+ * @family: a string representing the family name.
+ *
+ * Sets the family name field of a font description. The family
+ * name represents a family of related font styles, and will
+ * resolve to a particular #PangoFontFamily. In some uses of
+ * #PangoFontDescription, it is also possible to use a comma
+ * separated list of family names for this field.
+ **/
+void
+pango_font_description_set_family (PangoFontDescription *desc,
+                                  const char           *family)
+{
+  g_return_if_fail (desc != NULL);
+
+  pango_font_description_set_family_static (desc, family ? g_strdup (family) : NULL);
+  if (family)
+    desc->static_family = FALSE;
+}
+
+/**
+ * pango_font_description_set_family_static:
+ * @desc: a #PangoFontDescription
+ * @family: a string representing the family name.
+ *
+ * Like pango_font_description_set_family(), except that no
+ * copy of @family is made. The caller must make sure that the
+ * string passed in stays around until @desc has been freed
+ * or the name is set again. This function can be used if
+ * @family is a static string such as a C string literal, or
+ * if @desc is only needed temporarily.
+ **/
+void
+pango_font_description_set_family_static (PangoFontDescription *desc,
+                                         const char           *family)
+{
+  g_return_if_fail (desc != NULL);
+
+  if (desc->family_name == family)
+    return;
+
+  if (desc->family_name && !desc->static_family)
+    g_free (desc->family_name);
+
+  if (family)
+    {
+      desc->family_name = (char *)family;
+      desc->static_family = TRUE;
+      desc->mask |= PANGO_FONT_MASK_FAMILY;
+    }
+  else
+    {
+      desc->family_name = pfd_defaults.family_name;
+      desc->static_family = pfd_defaults.static_family;
+      desc->mask &= ~PANGO_FONT_MASK_FAMILY;
+    }
+}
+
+/**
+ * pango_font_description_get_family:
+ * @desc: a #PangoFontDescription.
+ *
+ * Gets the family name field of a font description. See
+ * pango_font_description_set_family().
+ *
+ * Return value: the family name field for the font description, or
+ *               %NULL if not previously set.  This has the same life-time
+ *               as the font description itself and should not be freed.
+ **/
+G_CONST_RETURN char *
+pango_font_description_get_family (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, NULL);
+
+  return desc->family_name;
+}
+
+/**
+ * pango_font_description_set_style:
+ * @desc: a #PangoFontDescription
+ * @style: the style for the font description
+ *
+ * Sets the style field of a #PangoFontDescription. The
+ * #PangoStyle enumeration describes whether the font is slanted and
+ * the manner in which it is slanted; it can be either
+ * #PANGO_STYLE_NORMAL, #PANGO_STYLE_ITALIC, or #PANGO_STYLE_OBLIQUE.
+ * Most fonts will either have a italic style or an oblique
+ * style, but not both, and font matching in Pango will
+ * match italic specifications with oblique fonts and vice-versa
+ * if an exact match is not found.
+ **/
+void
+pango_font_description_set_style (PangoFontDescription *desc,
+                                 PangoStyle            style)
+{
+  g_return_if_fail (desc != NULL);
+
+  desc->style = style;
+  desc->mask |= PANGO_FONT_MASK_STYLE;
+}
+
+/**
+ * pango_font_description_get_style:
+ * @desc: a #PangoFontDescription
+ *
+ * Gets the style field of a #PangoFontDescription. See
+ * pango_font_description_set_style().
+ *
+ * Return value: the style field for the font description.
+ *   Use pango_font_description_get_set_fields() to find out if
+ *   the field was explicitly set or not.
+ **/
+PangoStyle
+pango_font_description_get_style (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.style);
+
+  return desc->style;
+}
+
+/**
+ * pango_font_description_set_variant:
+ * @desc: a #PangoFontDescription
+ * @variant: the variant type for the font description.
+ *
+ * Sets the variant field of a font description. The #PangoVariant
+ * can either be %PANGO_VARIANT_NORMAL or %PANGO_VARIANT_SMALL_CAPS.
+ **/
+void
+pango_font_description_set_variant (PangoFontDescription *desc,
+                                   PangoVariant          variant)
+{
+  g_return_if_fail (desc != NULL);
+
+  desc->variant = variant;
+  desc->mask |= PANGO_FONT_MASK_VARIANT;
+}
+
+/**
+ * pango_font_description_get_variant:
+ * @desc: a #PangoFontDescription.
+ *
+ * Gets the variant field of a #PangoFontDescription. See
+ * pango_font_description_set_variant().
+ *
+ * Return value: the variant field for the font description. Use
+ *   pango_font_description_get_set_fields() to find out if
+ *   the field was explicitly set or not.
+ **/
+PangoVariant
+pango_font_description_get_variant (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.variant);
+
+  return desc->variant;
+}
+
+/**
+ * pango_font_description_set_weight:
+ * @desc: a #PangoFontDescription
+ * @weight: the weight for the font description.
+ *
+ * Sets the weight field of a font description. The weight field
+ * specifies how bold or light the font should be. In addition
+ * to the values of the #PangoWeight enumeration, other intermediate
+ * numeric values are possible.
+ **/
+void
+pango_font_description_set_weight (PangoFontDescription *desc,
+                                  PangoWeight          weight)
+{
+  g_return_if_fail (desc != NULL);
+
+  desc->weight = weight;
+  desc->mask |= PANGO_FONT_MASK_WEIGHT;
+}
+
+/**
+ * pango_font_description_get_weight:
+ * @desc: a #PangoFontDescription
+ *
+ * Gets the weight field of a font description. See
+ * pango_font_description_set_weight().
+ *
+ * Return value: the weight field for the font description. Use
+ *   pango_font_description_get_set_fields() to find out if
+ *   the field was explicitly set or not.
+ **/
+PangoWeight
+pango_font_description_get_weight (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.weight);
+
+  return desc->weight;
+}
+
+/**
+ * pango_font_description_set_stretch:
+ * @desc: a #PangoFontDescription
+ * @stretch: the stretch for the font description
+ *
+ * Sets the stretch field of a font description. The stretch field
+ * specifies how narrow or wide the font should be.
+ **/
+void
+pango_font_description_set_stretch (PangoFontDescription *desc,
+                                   PangoStretch          stretch)
+{
+  g_return_if_fail (desc != NULL);
+
+  desc->stretch = stretch;
+  desc->mask |= PANGO_FONT_MASK_STRETCH;
+}
+
+/**
+ * pango_font_description_get_stretch:
+ * @desc: a #PangoFontDescription.
+ *
+ * Gets the stretch field of a font description.
+ * See pango_font_description_set_stretch().
+ *
+ * Return value: the stretch field for the font description. Use
+ *   pango_font_description_get_set_fields() to find out if
+ *   the field was explicitly set or not.
+ **/
+PangoStretch
+pango_font_description_get_stretch (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.stretch);
+
+  return desc->stretch;
+}
+
+/**
+ * pango_font_description_set_size:
+ * @desc: a #PangoFontDescription
+ * @size: the size of the font in points, scaled by PANGO_SCALE. (That is,
+ *        a @size value of 10 * PANGO_SCALE is a 10 point font. The conversion
+ *        factor between points and device units depends on system configuration
+ *        and the output device. For screen display, a logical DPI of 96 is
+ *        common, in which case a 10 point font corresponds to a 10 * (96 / 72) = 13.3
+ *        pixel font. Use pango_font_description_set_absolute_size() if you need
+ *        a particular size in device units.
+ *
+ * Sets the size field of a font description in fractional points. This is mutually
+ * exclusive with pango_font_description_set_absolute_size().
+ **/
+void
+pango_font_description_set_size (PangoFontDescription *desc,
+                                gint                  size)
+{
+  g_return_if_fail (desc != NULL);
+  g_return_if_fail (size >= 0);
+
+  desc->size = size;
+  desc->size_is_absolute = FALSE;
+  desc->mask |= PANGO_FONT_MASK_SIZE;
+}
+
+/**
+ * pango_font_description_get_size:
+ * @desc: a #PangoFontDescription
+ *
+ * Gets the size field of a font description.
+ * See pango_font_description_set_size().
+ *
+ * Return value: the size field for the font description in points or device units.
+ *   You must call pango_font_description_get_size_is_absolute()
+ *   to find out which is the case. Returns 0 if the size field has not
+ *   previously been set or it has been set to 0 explicitly.
+ *   Use pango_font_description_get_set_fields() to
+ *   find out if the field was explicitly set or not.
+ **/
+gint
+pango_font_description_get_size (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.size);
+
+  return desc->size;
+}
+
+/**
+ * pango_font_description_set_absolute_size:
+ * @desc: a #PangoFontDescription
+ * @size: the new size, in Pango units. There are %PANGO_SCALE Pango units in one
+ *   device unit. For an output backend where a device unit is a pixel, a @size
+ *   value of 10 * PANGO_SCALE gives a 10 pixel font.
+ *
+ * Sets the size field of a font description, in device units. This is mutually
+ * exclusive with pango_font_description_set_size() which sets the font size
+ * in points.
+ *
+ * Since: 1.8
+ **/
+void
+pango_font_description_set_absolute_size (PangoFontDescription *desc,
+                                         double                size)
+{
+  g_return_if_fail (desc != NULL);
+  g_return_if_fail (size >= 0);
+
+  desc->size = size;
+  desc->size_is_absolute = TRUE;
+  desc->mask |= PANGO_FONT_MASK_SIZE;
+}
+
+/**
+ * pango_font_description_get_size_is_absolute:
+ * @desc: a #PangoFontDescription
+ *
+ * Determines whether the size of the font is in points (not absolute) or device units (absolute).
+ * See pango_font_description_set_size() and pango_font_description_set_absolute_size().
+ *
+ * Return value: whether the size for the font description is in
+ *   points or device units.  Use pango_font_description_get_set_fields() to
+ *   find out if the size field of the font description was explicitly set or not.
+ *
+ * Since: 1.8
+ **/
+gboolean
+pango_font_description_get_size_is_absolute (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.size_is_absolute);
+
+  return desc->size_is_absolute;
+}
+
+/**
+ * pango_font_description_set_gravity:
+ * @desc: a #PangoFontDescription
+ * @gravity: the gravity for the font description.
+ *
+ * Sets the gravity field of a font description. The gravity field
+ * specifies how the glyphs should be rotated.  If @gravity is
+ * %PANGO_GRAVITY_AUTO, this actually unsets the gravity mask on
+ * the font description.
+ *
+ * This function is seldom useful to the user.  Gravity should normally
+ * be set on a #PangoContext.
+ *
+ * Since: 1.16
+ **/
+void
+pango_font_description_set_gravity (PangoFontDescription *desc,
+                                   PangoGravity          gravity)
+{
+  g_return_if_fail (desc != NULL);
+
+  if (gravity == PANGO_GRAVITY_AUTO)
+    {
+      pango_font_description_unset_fields (desc, PANGO_FONT_MASK_GRAVITY);
+      return;
+    }
+
+  desc->gravity = gravity;
+  desc->mask |= PANGO_FONT_MASK_GRAVITY;
+}
+
+/**
+ * pango_font_description_get_gravity:
+ * @desc: a #PangoFontDescription
+ *
+ * Gets the gravity field of a font description. See
+ * pango_font_description_set_gravity().
+ *
+ * Return value: the gravity field for the font description. Use
+ *   pango_font_description_get_set_fields() to find out if
+ *   the field was explicitly set or not.
+ *
+ * Since: 1.16
+ **/
+PangoGravity
+pango_font_description_get_gravity (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.gravity);
+
+  return desc->gravity;
+}
+
+/**
+ * pango_font_description_get_set_fields:
+ * @desc: a #PangoFontDescription
+ *
+ * Determines which fields in a font description have been set.
+ *
+ * Return value: a bitmask with bits set corresponding to the
+ *   fields in @desc that have been set.
+ **/
+PangoFontMask
+pango_font_description_get_set_fields (const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (desc != NULL, pfd_defaults.mask);
+
+  return desc->mask;
+}
+
+/**
+ * pango_font_description_unset_fields:
+ * @desc: a #PangoFontDescription
+ * @to_unset: bitmask of fields in the @desc to unset.
+ *
+ * Unsets some of the fields in a #PangoFontDescription.  The unset
+ * fields will get back to their default values.
+ **/
+void
+pango_font_description_unset_fields (PangoFontDescription *desc,
+                                    PangoFontMask         to_unset)
+{
+  PangoFontDescription unset_desc;
+
+  g_return_if_fail (desc != NULL);
+
+  unset_desc = pfd_defaults;
+  unset_desc.mask = to_unset;
+
+  pango_font_description_merge_static (desc, &unset_desc, TRUE);
+
+  desc->mask &= ~to_unset;
+}
+
+/**
+ * pango_font_description_merge:
+ * @desc: a #PangoFontDescription
+ * @desc_to_merge: the #PangoFontDescription to merge from, or %NULL
+ * @replace_existing: if %TRUE, replace fields in @desc with the
+ *   corresponding values from @desc_to_merge, even if they
+ *   are already exist.
+ *
+ * Merges the fields that are set in @desc_to_merge into the fields in
+ * @desc.  If @replace_existing is %FALSE, only fields in @desc that
+ * are not already set are affected. If %TRUE, then fields that are
+ * already set will be replaced as well.
+ *
+ * If @desc_to_merge is %NULL, this function performs nothing.
+ **/
+void
+pango_font_description_merge (PangoFontDescription       *desc,
+                             const PangoFontDescription *desc_to_merge,
+                             gboolean                    replace_existing)
+{
+  gboolean family_merged;
+
+  g_return_if_fail (desc != NULL);
+
+  if (desc_to_merge == NULL)
+    return;
+
+  family_merged = desc_to_merge->family_name && (replace_existing || !desc->family_name);
+
+  pango_font_description_merge_static (desc, desc_to_merge, replace_existing);
+
+  if (family_merged)
+    {
+      desc->family_name = g_strdup (desc->family_name);
+      desc->static_family = FALSE;
+    }
+}
+
+/**
+ * pango_font_description_merge_static:
+ * @desc: a #PangoFontDescription
+ * @desc_to_merge: the #PangoFontDescription to merge from
+ * @replace_existing: if %TRUE, replace fields in @desc with the
+ *   corresponding values from @desc_to_merge, even if they
+ *   are already exist.
+ *
+ * Like pango_font_description_merge(), but only a shallow copy is made
+ * of the family name and other allocated fields. @desc can only be
+ * used until @desc_to_merge is modified or freed. This is meant
+ * to be used when the merged font description is only needed temporarily.
+ **/
+void
+pango_font_description_merge_static (PangoFontDescription       *desc,
+                                    const PangoFontDescription *desc_to_merge,
+                                    gboolean                    replace_existing)
+{
+  PangoFontMask new_mask;
+
+  g_return_if_fail (desc != NULL);
+  g_return_if_fail (desc_to_merge != NULL);
+
+  if (replace_existing)
+    new_mask = desc_to_merge->mask;
+  else
+    new_mask = desc_to_merge->mask & ~desc->mask;
+
+  if (new_mask & PANGO_FONT_MASK_FAMILY)
+    pango_font_description_set_family_static (desc, desc_to_merge->family_name);
+  if (new_mask & PANGO_FONT_MASK_STYLE)
+    desc->style = desc_to_merge->style;
+  if (new_mask & PANGO_FONT_MASK_VARIANT)
+    desc->variant = desc_to_merge->variant;
+  if (new_mask & PANGO_FONT_MASK_WEIGHT)
+    desc->weight = desc_to_merge->weight;
+  if (new_mask & PANGO_FONT_MASK_STRETCH)
+    desc->stretch = desc_to_merge->stretch;
+  if (new_mask & PANGO_FONT_MASK_SIZE)
+    {
+      desc->size = desc_to_merge->size;
+      desc->size_is_absolute = desc_to_merge->size_is_absolute;
+    }
+  if (new_mask & PANGO_FONT_MASK_GRAVITY)
+    desc->gravity = desc_to_merge->gravity;
+
+  desc->mask |= new_mask;
+}
+
+static gint
+compute_distance (const PangoFontDescription *a,
+                 const PangoFontDescription *b)
+{
+  if (a->style == b->style)
+    {
+      return abs(a->weight - b->weight);
+    }
+  else if (a->style != PANGO_STYLE_NORMAL &&
+          b->style != PANGO_STYLE_NORMAL)
+    {
+      /* Equate oblique and italic, but with a big penalty
+       */
+      return 1000000 + abs (a->weight - b->weight);
+    }
+  else
+    return G_MAXINT;
+}
+
+/**
+ * pango_font_description_better_match:
+ * @desc: a #PangoFontDescription
+ * @old_match: a #PangoFontDescription, or %NULL
+ * @new_match: a #PangoFontDescription
+ *
+ * Determines if the style attributes of @new_match are a closer match
+ * for @desc than those of @old_match are, or if @old_match is %NULL,
+ * determines if @new_match is a match at all.
+ * Approximate matching is done for
+ * weight and style; other style attributes must match exactly.
+ * Style attributes are all attributes other than family and size-related
+ * attributes.  Approximate matching for style considers PANGO_STYLE_OBLIQUE
+ * and PANGO_STYLE_ITALIC as matches, but not as good a match as when the
+ * styles are equal.
+ *
+ * Note that @old_match must match @desc.
+ *
+ * Return value: %TRUE if @new_match is a better match
+ **/
+gboolean
+pango_font_description_better_match (const PangoFontDescription *desc,
+                                    const PangoFontDescription *old_match,
+                                    const PangoFontDescription *new_match)
+{
+  g_return_val_if_fail (desc != NULL, G_MAXINT);
+  g_return_val_if_fail (new_match != NULL, G_MAXINT);
+
+  if (new_match->variant == desc->variant &&
+      new_match->stretch == desc->stretch &&
+      new_match->gravity == desc->gravity)
+    {
+      int old_distance = old_match ? compute_distance (desc, old_match) : G_MAXINT;
+      int new_distance = compute_distance (desc, new_match);
+
+      if (new_distance < old_distance)
+       return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * pango_font_description_copy:
+ * @desc: a #PangoFontDescription, may be %NULL
+ *
+ * Make a copy of a #PangoFontDescription.
+ *
+ * Return value: the newly allocated #PangoFontDescription, which should
+ *               be freed with pango_font_description_free(), or %NULL
+ *               if @desc was %NULL.
+ **/
+PangoFontDescription *
+pango_font_description_copy  (const PangoFontDescription  *desc)
+{
+  PangoFontDescription *result;
+
+  if (desc == NULL)
+    return NULL;
+
+  result = g_slice_new (PangoFontDescription);
+
+  *result = *desc;
+
+  if (result->family_name)
+    {
+      result->family_name = g_strdup (result->family_name);
+      result->static_family = FALSE;
+    }
+
+  return result;
+}
+
+/**
+ * pango_font_description_copy_static:
+ * @desc: a #PangoFontDescription, may be %NULL
+ *
+ * Like pango_font_description_copy(), but only a shallow copy is made
+ * of the family name and other allocated fields. The result can only
+ * be used until @desc is modified or freed. This is meant to be used
+ * when the copy is only needed temporarily.
+ *
+ * Return value: the newly allocated #PangoFontDescription, which should
+ *               be freed with pango_font_description_free(), or %NULL
+ *               if @desc was %NULL.
+ **/
+PangoFontDescription *
+pango_font_description_copy_static (const PangoFontDescription *desc)
+{
+  PangoFontDescription *result;
+
+  if (desc == NULL)
+    return NULL;
+
+  result = g_slice_new (PangoFontDescription);
+
+  *result = *desc;
+  if (result->family_name)
+    result->static_family = TRUE;
+
+  return result;
+}
+
+/**
+ * pango_font_description_equal:
+ * @desc1: a #PangoFontDescription
+ * @desc2: another #PangoFontDescription
+ *
+ * Compares two font descriptions for equality. Two font descriptions
+ * are considered equal if the fonts they describe are provably identical.
+ * This means that their masks do not have to match, as long as other fields
+ * are all the same. (Two font descriptions may result in identical fonts
+ * being loaded, but still compare %FALSE.)
+ *
+ * Return value: %TRUE if the two font descriptions are identical,
+ *              %FALSE otherwise.
+ **/
+gboolean
+pango_font_description_equal (const PangoFontDescription  *desc1,
+                             const PangoFontDescription  *desc2)
+{
+  g_return_val_if_fail (desc1 != NULL, FALSE);
+  g_return_val_if_fail (desc2 != NULL, FALSE);
+
+  return desc1->style == desc2->style &&
+        desc1->variant == desc2->variant &&
+        desc1->weight == desc2->weight &&
+        desc1->stretch == desc2->stretch &&
+        desc1->size == desc2->size &&
+        desc1->size_is_absolute == desc2->size_is_absolute &&
+        desc1->gravity == desc2->gravity &&
+        (desc1->family_name == desc2->family_name ||
+         (desc1->family_name && desc2->family_name && g_ascii_strcasecmp (desc1->family_name, desc2->family_name) == 0));
+}
+
+#define TOLOWER(c) \
+  (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' + 'a' : (c))
+
+static guint
+case_insensitive_hash (const char *key)
+{
+  const char *p = key;
+  guint h = TOLOWER (*p);
+
+  if (h)
+    {
+      for (p += 1; *p != '\0'; p++)
+       h = (h << 5) - h + TOLOWER (*p);
+    }
+
+  return h;
+}
+
+/**
+ * pango_font_description_hash:
+ * @desc: a #PangoFontDescription
+ *
+ * Computes a hash of a #PangoFontDescription structure suitable
+ * to be used, for example, as an argument to g_hash_table_new().
+ * The hash value is independent of @desc->mask.
+ *
+ * Return value: the hash value.
+ **/
+guint
+pango_font_description_hash (const PangoFontDescription *desc)
+{
+  guint hash = 0;
+
+  g_return_val_if_fail (desc != NULL, 0);
+
+  if (desc->family_name)
+    hash = case_insensitive_hash (desc->family_name);
+  hash ^= desc->size;
+  hash ^= desc->size_is_absolute ? 0xc33ca55a : 0;
+  hash ^= desc->style << 16;
+  hash ^= desc->variant << 18;
+  hash ^= desc->weight << 16;
+  hash ^= desc->stretch << 26;
+  hash ^= desc->gravity << 28;
+
+  return hash;
+}
+
+/**
+ * pango_font_description_free:
+ * @desc: a #PangoFontDescription, may be %NULL
+ *
+ * Frees a font description.
+ **/
+void
+pango_font_description_free  (PangoFontDescription  *desc)
+{
+  if (desc == NULL)
+    return;
+
+  if (desc->family_name && !desc->static_family)
+    g_free (desc->family_name);
+
+  g_slice_free (PangoFontDescription, desc);
+}
+
+/**
+ * pango_font_descriptions_free:
+ * @descs: a pointer to an array of #PangoFontDescription, may be %NULL
+ * @n_descs: number of font descriptions in @descs
+ *
+ * Frees an array of font descriptions.
+ **/
+void
+pango_font_descriptions_free (PangoFontDescription **descs,
+                             int                    n_descs)
+{
+  int i;
+
+  if (descs == NULL)
+    return;
+
+  for (i = 0; i<n_descs; i++)
+    pango_font_description_free (descs[i]);
+  g_free (descs);
+}
+
+typedef struct
+{
+  int value;
+  const char str[16];
+} FieldMap;
+
+static const FieldMap style_map[] = {
+  { PANGO_STYLE_NORMAL, "" },
+  { PANGO_STYLE_NORMAL, "Roman" },
+  { PANGO_STYLE_OBLIQUE, "Oblique" },
+  { PANGO_STYLE_ITALIC, "Italic" }
+};
+
+static const FieldMap variant_map[] = {
+  { PANGO_VARIANT_NORMAL, "" },
+  { PANGO_VARIANT_SMALL_CAPS, "Small-Caps" }
+};
+
+static const FieldMap weight_map[] = {
+  { PANGO_WEIGHT_THIN, "Thin" },
+  { PANGO_WEIGHT_ULTRALIGHT, "Ultra-Light" },
+  { PANGO_WEIGHT_ULTRALIGHT, "Extra-Light" },
+  { PANGO_WEIGHT_LIGHT, "Light" },
+  { PANGO_WEIGHT_BOOK, "Book" },
+  { PANGO_WEIGHT_NORMAL, "" },
+  { PANGO_WEIGHT_NORMAL, "Regular" },
+  { PANGO_WEIGHT_MEDIUM, "Medium" },
+  { PANGO_WEIGHT_SEMIBOLD, "Semi-Bold" },
+  { PANGO_WEIGHT_SEMIBOLD, "Demi-Bold" },
+  { PANGO_WEIGHT_BOLD, "Bold" },
+  { PANGO_WEIGHT_ULTRABOLD, "Ultra-Bold" },
+  { PANGO_WEIGHT_ULTRABOLD, "Extra-Bold" },
+  { PANGO_WEIGHT_HEAVY, "Heavy" },
+  { PANGO_WEIGHT_HEAVY, "Black" },
+  { PANGO_WEIGHT_ULTRAHEAVY, "Ultra-Heavy" },
+  { PANGO_WEIGHT_ULTRAHEAVY, "Extra-Heavy" },
+  { PANGO_WEIGHT_ULTRAHEAVY, "Ultra-Black" },
+  { PANGO_WEIGHT_ULTRAHEAVY, "Extra-Black" }
+};
+
+static const FieldMap stretch_map[] = {
+  { PANGO_STRETCH_ULTRA_CONDENSED, "Ultra-Condensed" },
+  { PANGO_STRETCH_EXTRA_CONDENSED, "Extra-Condensed" },
+  { PANGO_STRETCH_CONDENSED,       "Condensed" },
+  { PANGO_STRETCH_SEMI_CONDENSED,  "Semi-Condensed" },
+  { PANGO_STRETCH_NORMAL,          "" },
+  { PANGO_STRETCH_SEMI_EXPANDED,   "Semi-Expanded" },
+  { PANGO_STRETCH_EXPANDED,        "Expanded" },
+  { PANGO_STRETCH_EXTRA_EXPANDED,  "Extra-Expanded" },
+  { PANGO_STRETCH_ULTRA_EXPANDED,  "Ultra-Expanded" }
+};
+
+static const FieldMap gravity_map[] = {
+  { PANGO_GRAVITY_SOUTH, "Not-Rotated" },
+  { PANGO_GRAVITY_SOUTH, "South" },
+  { PANGO_GRAVITY_SOUTH, "Upside-Down" },
+  { PANGO_GRAVITY_NORTH, "North" },
+  { PANGO_GRAVITY_EAST,  "Rotated-Left" },
+  { PANGO_GRAVITY_EAST,  "East" },
+  { PANGO_GRAVITY_WEST,  "Rotated-Right" },
+  { PANGO_GRAVITY_WEST,  "West" }
+};
+
+static gboolean
+field_matches (const gchar *s1,
+              const gchar *s2,
+              gsize n)
+{
+  gint c1, c2;
+
+  g_return_val_if_fail (s1 != NULL, 0);
+  g_return_val_if_fail (s2 != NULL, 0);
+
+  while (n && *s1 && *s2)
+    {
+      c1 = (gint)(guchar) TOLOWER (*s1);
+      c2 = (gint)(guchar) TOLOWER (*s2);
+      if (c1 != c2) {
+        if (c1 == '-') {
+         s1++;
+         continue;
+       }
+       return FALSE;
+      }
+      s1++; s2++;
+      n--;
+    }
+
+  return n == 0 && *s1 == '\0';
+}
+
+static gboolean
+parse_int (const char *word,
+          size_t      wordlen,
+          int        *out)
+{
+  char *end;
+  long val = strtol (word, &end, 10);
+  int i = val;
+
+  if (end != word && (end == word + wordlen) && val >= 0 && val == i)
+    {
+      if (out)
+        *out = i;
+
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+static gboolean
+find_field (const char *what,
+           const FieldMap *map,
+           int n_elements,
+           const char *str,
+           int len,
+           int *val)
+{
+  int i;
+  gboolean had_prefix = FALSE;
+
+  if (what)
+    {
+      i = strlen (what);
+      if (len > i && 0 == strncmp (what, str, i) && str[i] == '=')
+       {
+         str += i + 1;
+         len -= i + 1;
+         had_prefix = TRUE;
+       }
+    }
+
+  for (i=0; i<n_elements; i++)
+    {
+      if (map[i].str[0] && field_matches (map[i].str, str, len))
+       {
+         if (val)
+           *val = map[i].value;
+         return TRUE;
+       }
+    }
+
+  if (!what || had_prefix)
+    return parse_int (str, len, val);
+
+  return FALSE;
+}
+
+static gboolean
+find_field_any (const char *str, int len, PangoFontDescription *desc)
+{
+  if (field_matches ("Normal", str, len))
+    return TRUE;
+
+#define FIELD(NAME, MASK) \
+  G_STMT_START { \
+  if (find_field (G_STRINGIFY (NAME), NAME##_map, G_N_ELEMENTS (NAME##_map), str, len, \
+                 desc ? (int *)(void *)&desc->NAME : NULL)) \
+    { \
+      if (desc) \
+       desc->mask |= MASK; \
+      return TRUE; \
+    } \
+  } G_STMT_END
+
+  FIELD (weight,  PANGO_FONT_MASK_WEIGHT);
+  FIELD (style,   PANGO_FONT_MASK_STYLE);
+  FIELD (stretch, PANGO_FONT_MASK_STRETCH);
+  FIELD (variant, PANGO_FONT_MASK_VARIANT);
+  FIELD (gravity, PANGO_FONT_MASK_GRAVITY);
+
+#undef FIELD
+
+  return FALSE;
+}
+
+static const char *
+getword (const char *str, const char *last, size_t *wordlen)
+{
+  const char *result;
+
+  while (last > str && g_ascii_isspace (*(last - 1)))
+    last--;
+
+  result = last;
+  while (result > str && !g_ascii_isspace (*(result - 1)) && *(result - 1) != ',')
+    result--;
+
+  *wordlen = last - result;
+
+  return result;
+}
+
+static gboolean
+parse_size (const char *word,
+           size_t      wordlen,
+           int        *pango_size,
+           gboolean   *size_is_absolute)
+{
+  char *end;
+  double size = g_ascii_strtod (word, &end);
+
+  if (end != word &&
+      (end == word + wordlen ||
+       (end + 2 == word + wordlen && !strncmp (end, "px", 2))
+      ) && size >= 0 && size <= 1000000) /* word is a valid float */
+    {
+      if (pango_size)
+       *pango_size = (int)(size * PANGO_SCALE + 0.5);
+
+      if (size_is_absolute)
+       *size_is_absolute = end < word + wordlen;
+
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * pango_font_description_from_string:
+ * @str: string representation of a font description.
+ *
+ * Creates a new font description from a string representation in the
+ * form "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]", where FAMILY-LIST is a
+ * comma separated list of families optionally terminated by a comma,
+ * STYLE_OPTIONS is a whitespace separated list of words where each WORD
+ * describes one of style, variant, weight, stretch, or gravity, and SIZE
+ * is a decimal number (size in points) or optionally followed by the
+ * unit modifier "px" for absolute size. Any one of the options may
+ * be absent.  If FAMILY-LIST is absent, then the family_name field of
+ * the resulting font description will be initialized to %NULL.  If
+ * STYLE-OPTIONS is missing, then all style options will be set to the
+ * default values. If SIZE is missing, the size in the resulting font
+ * description will be set to 0.
+ *
+ * Return value: a new #PangoFontDescription.
+ **/
+PangoFontDescription *
+pango_font_description_from_string (const char *str)
+{
+  PangoFontDescription *desc;
+  const char *p, *last;
+  size_t len, wordlen;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  desc = pango_font_description_new ();
+
+  desc->mask = PANGO_FONT_MASK_STYLE |
+              PANGO_FONT_MASK_WEIGHT |
+              PANGO_FONT_MASK_VARIANT |
+              PANGO_FONT_MASK_STRETCH;
+
+  len = strlen (str);
+  last = str + len;
+  p = getword (str, last, &wordlen);
+
+  /* Look for a size at the end of the string
+   */
+  if (wordlen != 0)
+    {
+      gboolean size_is_absolute;
+      if (parse_size (p, wordlen, &desc->size, &size_is_absolute))
+       {
+         desc->size_is_absolute = size_is_absolute;
+         desc->mask |= PANGO_FONT_MASK_SIZE;
+         last = p;
+       }
+    }
+
+  /* Now parse style words
+   */
+  p = getword (str, last, &wordlen);
+  while (wordlen != 0)
+    {
+      if (!find_field_any (p, wordlen, desc))
+       break;
+      else
+       {
+         last = p;
+         p = getword (str, last, &wordlen);
+       }
+    }
+
+  /* Remainder (str => p) is family list. Trim off trailing commas and leading and trailing white space
+   */
+
+  while (last > str && g_ascii_isspace (*(last - 1)))
+    last--;
+
+  if (last > str && *(last - 1) == ',')
+    last--;
+
+  while (last > str && g_ascii_isspace (*(last - 1)))
+    last--;
+
+  while (last > str && g_ascii_isspace (*str))
+    str++;
+
+  if (str != last)
+    {
+      int i;
+      char **families;
+
+      desc->family_name = g_strndup (str, last - str);
+
+      /* Now sanitize it to trim space from around individual family names.
+       * bug #499624 */
+
+      families = g_strsplit (desc->family_name, ",", -1);
+
+      for (i = 0; families[i]; i++)
+       g_strstrip (families[i]);
+
+      g_free (desc->family_name);
+      desc->family_name = g_strjoinv (",", families);
+      g_strfreev (families);
+
+      desc->mask |= PANGO_FONT_MASK_FAMILY;
+    }
+
+  return desc;
+}
+
+static void
+append_field (GString *str, const char *what, const FieldMap *map, int n_elements, int val)
+{
+  int i;
+  for (i=0; i<n_elements; i++)
+    {
+      if (map[i].value != val)
+        continue;
+
+      if (G_LIKELY (map[i].str && map[i].str[0]))
+       {
+         if (G_LIKELY (str->len > 0 && str->str[str->len -1] != ' '))
+           g_string_append_c (str, ' ');
+         g_string_append (str, map[i].str);
+       }
+      return;
+    }
+
+  if (G_LIKELY (str->len > 0 || str->str[str->len -1] != ' '))
+    g_string_append_c (str, ' ');
+  g_string_append_printf (str, "%s=%d", what, val);
+}
+
+/**
+ * pango_font_description_to_string:
+ * @desc: a #PangoFontDescription
+ *
+ * Creates a string representation of a font description. See
+ * pango_font_description_from_string() for a description of the
+ * format of the string representation. The family list in the
+ * string description will only have a terminating comma if the
+ * last word of the list is a valid style option.
+ *
+ * Return value: a new string that must be freed with g_free().
+ **/
+char *
+pango_font_description_to_string (const PangoFontDescription  *desc)
+{
+  GString *result;
+
+  g_return_val_if_fail (desc != NULL, NULL);
+
+  result = g_string_new (NULL);
+
+  if (G_LIKELY (desc->family_name && desc->mask & PANGO_FONT_MASK_FAMILY))
+    {
+      const char *p;
+      size_t wordlen;
+
+      g_string_append (result, desc->family_name);
+
+      /* We need to add a trailing comma if the family name ends
+       * in a keyword like "Bold", or if the family name ends in
+       * a number and no keywords will be added.
+       */
+      p = getword (desc->family_name, desc->family_name + strlen(desc->family_name), &wordlen);
+      if (wordlen != 0 &&
+         (find_field_any (p, wordlen, NULL) ||
+          (parse_size (p, wordlen, NULL, NULL) &&
+           desc->weight == PANGO_WEIGHT_NORMAL &&
+           desc->style == PANGO_STYLE_NORMAL &&
+           desc->stretch == PANGO_STRETCH_NORMAL &&
+           desc->variant == PANGO_VARIANT_NORMAL &&
+           (desc->mask & (PANGO_FONT_MASK_GRAVITY | PANGO_FONT_MASK_SIZE)) == 0)))
+       g_string_append_c (result, ',');
+    }
+
+#define FIELD(NAME, MASK) \
+  append_field (result, G_STRINGIFY (NAME), NAME##_map, G_N_ELEMENTS (NAME##_map), desc->NAME)
+
+  FIELD (weight,  PANGO_FONT_MASK_WEIGHT);
+  FIELD (style,   PANGO_FONT_MASK_STYLE);
+  FIELD (stretch, PANGO_FONT_MASK_STRETCH);
+  FIELD (variant, PANGO_FONT_MASK_VARIANT);
+  if (desc->mask & PANGO_FONT_MASK_GRAVITY)
+    FIELD (gravity, PANGO_FONT_MASK_GRAVITY);
+
+#undef FIELD
+
+  if (result->len == 0)
+    g_string_append (result, "Normal");
+
+  if (desc->mask & PANGO_FONT_MASK_SIZE)
+    {
+      char buf[G_ASCII_DTOSTR_BUF_SIZE];
+
+      if (result->len > 0 || result->str[result->len -1] != ' ')
+       g_string_append_c (result, ' ');
+
+      g_ascii_dtostr (buf, sizeof (buf), (double)desc->size / PANGO_SCALE);
+      g_string_append (result, buf);
+
+      if (desc->size_is_absolute)
+       g_string_append (result, "px");
+    }
+
+  return g_string_free (result, FALSE);
+}
+
+/**
+ * pango_font_description_to_filename:
+ * @desc: a #PangoFontDescription
+ *
+ * Creates a filename representation of a font description. The
+ * filename is identical to the result from calling
+ * pango_font_description_to_string(), but with underscores instead of
+ * characters that are untypical in filenames, and in lower case only.
+ *
+ * Return value: a new string that must be freed with g_free().
+ **/
+char *
+pango_font_description_to_filename (const PangoFontDescription  *desc)
+{
+  char *result;
+  char *p;
+
+  g_return_val_if_fail (desc != NULL, NULL);
+
+  result = pango_font_description_to_string (desc);
+
+  p = result;
+  while (*p)
+    {
+      if (G_UNLIKELY ((guchar) *p >= 128))
+        /* skip over non-ASCII chars */;
+      else if (strchr ("-+_.", *p) == NULL && !g_ascii_isalnum (*p))
+       *p = '_';
+      else
+       *p = g_ascii_tolower (*p);
+      p++;
+    }
+
+  return result;
+}
+
+
+static gboolean
+parse_field (const char *what,
+            const FieldMap *map,
+            int n_elements,
+            const char *str,
+            int *val,
+            gboolean warn)
+{
+  gboolean found;
+  int len = strlen (str);
+
+  if (G_UNLIKELY (*str == '\0'))
+    return FALSE;
+
+  if (field_matches ("Normal", str, len))
+    {
+      /* find the map entry with empty string */
+      int i;
+
+      for (i = 0; i < n_elements; i++)
+        if (map[i].str[0] == '\0')
+         {
+           *val = map[i].value;
+           return TRUE;
+         }
+
+      *val = 0;
+      return TRUE;
+    }
+
+  found = find_field (NULL, map, n_elements, str, len, val);
+
+  if (!found && warn)
+    {
+       int i;
+       GString *s = g_string_new (NULL);
+
+       for (i = 0; i < n_elements; i++)
+         {
+           if (i)
+             g_string_append_c (s, '/');
+           g_string_append (s, map[i].str[0] == '\0' ? "Normal" : map[i].str);
+         }
+
+       g_warning ("%s must be one of %s or a number",
+                  what,
+                  s->str);
+
+       g_string_free (s, TRUE);
+    }
+
+  return found;
+}
+
+#define FIELD(NAME, MASK) \
+  parse_field (G_STRINGIFY (NAME), NAME##_map, G_N_ELEMENTS (NAME##_map), str, (int *)(void *)NAME, warn)
+
+/**
+ * pango_parse_style:
+ * @str: a string to parse.
+ * @style: a #PangoStyle to store the result in.
+ * @warn: if %TRUE, issue a g_warning() on bad input.
+ *
+ * Parses a font style. The allowed values are "normal",
+ * "italic" and "oblique", case variations being
+ * ignored.
+ *
+ * Return value: %TRUE if @str was successfully parsed.
+ **/
+gboolean
+pango_parse_style (const char *str,
+                  PangoStyle *style,
+                  gboolean    warn)
+{
+  return FIELD (style,   PANGO_FONT_MASK_STYLE);
+}
+
+/**
+ * pango_parse_variant:
+ * @str: a string to parse.
+ * @variant: a #PangoVariant to store the result in.
+ * @warn: if %TRUE, issue a g_warning() on bad input.
+ *
+ * Parses a font variant. The allowed values are "normal"
+ * and "smallcaps" or "small_caps", case variations being
+ * ignored.
+ *
+ * Return value: %TRUE if @str was successfully parsed.
+ **/
+gboolean
+pango_parse_variant (const char   *str,
+                    PangoVariant *variant,
+                    gboolean      warn)
+{
+  return FIELD (variant, PANGO_FONT_MASK_VARIANT);
+}
+
+/**
+ * pango_parse_weight:
+ * @str: a string to parse.
+ * @weight: a #PangoWeight to store the result in.
+ * @warn: if %TRUE, issue a g_warning() on bad input.
+ *
+ * Parses a font weight. The allowed values are "heavy",
+ * "ultrabold", "bold", "normal", "light", "ultraleight"
+ * and integers. Case variations are ignored.
+ *
+ * Return value: %TRUE if @str was successfully parsed.
+ **/
+gboolean
+pango_parse_weight (const char  *str,
+                   PangoWeight *weight,
+                   gboolean     warn)
+{
+  return FIELD (weight,  PANGO_FONT_MASK_WEIGHT);
+}
+
+/**
+ * pango_parse_stretch:
+ * @str: a string to parse.
+ * @stretch: a #PangoStretch to store the result in.
+ * @warn: if %TRUE, issue a g_warning() on bad input.
+ *
+ * Parses a font stretch. The allowed values are
+ * "ultra_condensed", "extra_condensed", "condensed",
+ * "semi_condensed", "normal", "semi_expanded", "expanded",
+ * "extra_expanded" and "ultra_expanded". Case variations are
+ * ignored and the '_' characters may be omitted.
+ *
+ * Return value: %TRUE if @str was successfully parsed.
+ **/
+gboolean
+pango_parse_stretch (const char   *str,
+                    PangoStretch *stretch,
+                    gboolean      warn)
+{
+  return FIELD (stretch, PANGO_FONT_MASK_STRETCH);
+}
+
+
+
+
+/*
+ * PangoFont
+ */
+
+G_DEFINE_ABSTRACT_TYPE (PangoFont, pango_font, G_TYPE_OBJECT)
+
+static void
+pango_font_class_init (PangoFontClass *class G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_font_init (PangoFont *font G_GNUC_UNUSED)
+{
+}
+
+/**
+ * pango_font_describe:
+ * @font: a #PangoFont
+ *
+ * Returns a description of the font, with font size set in points.
+ * Use pango_font_describe_with_absolute_size() if you want the font
+ * size in device units.
+ *
+ * Return value: a newly-allocated #PangoFontDescription object.
+ **/
+PangoFontDescription *
+pango_font_describe (PangoFont      *font)
+{
+  g_return_val_if_fail (font != NULL, NULL);
+
+  return PANGO_FONT_GET_CLASS (font)->describe (font);
+}
+
+/**
+ * pango_font_describe_with_absolute_size:
+ * @font: a #PangoFont
+ *
+ * Returns a description of the font, with absolute font size set
+ * (in device units). Use pango_font_describe() if you want the font
+ * size in points.
+ *
+ * Return value: a newly-allocated #PangoFontDescription object.
+ *
+ * Since: 1.14
+ **/
+PangoFontDescription *
+pango_font_describe_with_absolute_size (PangoFont      *font)
+{
+  g_return_val_if_fail (font != NULL, NULL);
+
+  if (G_UNLIKELY (!PANGO_FONT_GET_CLASS (font)->describe_absolute))
+    {
+      g_warning ("describe_absolute not implemented for this font class, report this as a bug");
+      return pango_font_describe (font);
+    }
+
+  return PANGO_FONT_GET_CLASS (font)->describe_absolute (font);
+}
+
+/**
+ * pango_font_get_coverage:
+ * @font: a #PangoFont
+ * @language: the language tag
+ *
+ * Computes the coverage map for a given font and language tag.
+ *
+ * Return value: a newly-allocated #PangoCoverage object.
+ **/
+PangoCoverage *
+pango_font_get_coverage (PangoFont     *font,
+                        PangoLanguage *language)
+{
+  g_return_val_if_fail (font != NULL, NULL);
+
+  return PANGO_FONT_GET_CLASS (font)->get_coverage (font, language);
+}
+
+/**
+ * pango_font_find_shaper:
+ * @font: a #PangoFont
+ * @language: the language tag
+ * @ch: a Unicode character.
+ *
+ * Finds the best matching shaper for a font for a particular
+ * language tag and character point.
+ *
+ * Return value: the best matching shaper.
+ **/
+PangoEngineShape *
+pango_font_find_shaper (PangoFont     *font,
+                       PangoLanguage *language,
+                       guint32        ch)
+{
+  PangoEngineShape* shaper;
+
+  g_return_val_if_fail (font != NULL, NULL);
+
+  shaper = PANGO_FONT_GET_CLASS (font)->find_shaper (font, language, ch);
+
+  return shaper;
+}
+
+/**
+ * pango_font_get_glyph_extents:
+ * @font: a #PangoFont
+ * @glyph: the glyph index
+ * @ink_rect: rectangle used to store the extents of the glyph as drawn
+ *            or %NULL to indicate that the result is not needed.
+ * @logical_rect: rectangle used to store the logical extents of the glyph
+ *            or %NULL to indicate that the result is not needed.
+ *
+ * Gets the logical and ink extents of a glyph within a font. The
+ * coordinate system for each rectangle has its origin at the
+ * base line and horizontal origin of the character with increasing
+ * coordinates extending to the right and down. The macros PANGO_ASCENT(),
+ * PANGO_DESCENT(), PANGO_LBEARING(), and PANGO_RBEARING() can be used to convert
+ * from the extents rectangle to more traditional font metrics. The units
+ * of the rectangles are in 1/PANGO_SCALE of a device unit.
+ *
+ * If @font is %NULL, this function gracefully sets some sane values in the
+ * output variables and returns.
+ **/
+void
+pango_font_get_glyph_extents  (PangoFont      *font,
+                              PangoGlyph      glyph,
+                              PangoRectangle *ink_rect,
+                              PangoRectangle *logical_rect)
+{
+  if (G_UNLIKELY (!font))
+    {
+      if (ink_rect)
+       {
+         ink_rect->x = PANGO_SCALE;
+         ink_rect->y = - (PANGO_UNKNOWN_GLYPH_HEIGHT - 1) * PANGO_SCALE;
+         ink_rect->height = (PANGO_UNKNOWN_GLYPH_HEIGHT - 2) * PANGO_SCALE;
+         ink_rect->width = (PANGO_UNKNOWN_GLYPH_WIDTH - 2) * PANGO_SCALE;
+       }
+      if (logical_rect)
+       {
+         logical_rect->x = logical_rect->y = 0;
+         logical_rect->y = - PANGO_UNKNOWN_GLYPH_HEIGHT * PANGO_SCALE;
+         logical_rect->height = PANGO_UNKNOWN_GLYPH_HEIGHT * PANGO_SCALE;
+         logical_rect->width = PANGO_UNKNOWN_GLYPH_WIDTH * PANGO_SCALE;
+       }
+      return;
+    }
+
+  PANGO_FONT_GET_CLASS (font)->get_glyph_extents (font, glyph, ink_rect, logical_rect);
+}
+
+/**
+ * pango_font_get_metrics:
+ * @font: a #PangoFont
+ * @language: language tag used to determine which script to get the metrics
+ *            for, or %NULL to indicate to get the metrics for the entire
+ *            font.
+ *
+ * Gets overall metric information for a font. Since the metrics may be
+ * substantially different for different scripts, a language tag can
+ * be provided to indicate that the metrics should be retrieved that
+ * correspond to the script(s) used by that language.
+ *
+ * If @font is %NULL, this function gracefully sets some sane values in the
+ * output variables and returns.
+ *
+ * Return value: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
+ *   when finished using the object.
+ **/
+PangoFontMetrics *
+pango_font_get_metrics (PangoFont        *font,
+                       PangoLanguage    *language)
+{
+  if (G_UNLIKELY (!font))
+    {
+      PangoFontMetrics *metrics = pango_font_metrics_new ();
+
+      metrics->ascent = PANGO_SCALE * PANGO_UNKNOWN_GLYPH_HEIGHT;
+      metrics->descent = 0;
+      metrics->approximate_char_width = PANGO_SCALE * PANGO_UNKNOWN_GLYPH_WIDTH;
+      metrics->approximate_digit_width = PANGO_SCALE * PANGO_UNKNOWN_GLYPH_WIDTH;
+      metrics->underline_position = -PANGO_SCALE;
+      metrics->underline_thickness = PANGO_SCALE;
+      metrics->strikethrough_position = PANGO_SCALE * PANGO_UNKNOWN_GLYPH_HEIGHT / 2;
+      metrics->strikethrough_thickness = PANGO_SCALE;
+
+      return metrics;
+    }
+
+  return PANGO_FONT_GET_CLASS (font)->get_metrics (font, language);
+}
+
+/**
+ * pango_font_get_font_map:
+ * @font: a #PangoFont, or %NULL
+ *
+ * Gets the font map for which the font was created.
+ *
+ * Note that the font maintains a <firstterm>weak</firstterm> reference
+ * to the font map, so if all references to font map are dropped, the font
+ * map will be finalized even if there are fonts created with the font
+ * map that are still alive.  In that case this function will return %NULL.
+ * It is the responsibility of the user to ensure that the font map is kept
+ * alive.  In most uses this is not an issue as a #PangoContext holds
+ * a reference to the font map.
+ *
+ * Return value: the #PangoFontMap for the font, or %NULL if @font is %NULL.
+ *
+ * Since: 1.10
+ **/
+PangoFontMap *
+pango_font_get_font_map (PangoFont *font)
+{
+  if (G_UNLIKELY (!font))
+    return NULL;
+
+  if (PANGO_FONT_GET_CLASS (font)->get_font_map)
+    return PANGO_FONT_GET_CLASS (font)->get_font_map (font);
+  else
+    return NULL;
+}
+
+GType
+pango_font_metrics_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoFontMetrics"),
+                                            (GBoxedCopyFunc)pango_font_metrics_ref,
+                                            (GBoxedFreeFunc)pango_font_metrics_unref);
+
+  return our_type;
+}
+
+
+/**
+ * pango_font_metrics_new:
+ *
+ * Creates a new #PangoFontMetrics structure. This is only for
+ * internal use by Pango backends and there is no public way
+ * to set the fields of the structure.
+ *
+ * Return value: a newly-created #PangoFontMetrics structure
+ *   with a reference count of 1.
+ **/
+PangoFontMetrics *
+pango_font_metrics_new (void)
+{
+  PangoFontMetrics *metrics = g_slice_new0 (PangoFontMetrics);
+  metrics->ref_count = 1;
+
+  return metrics;
+}
+
+/**
+ * pango_font_metrics_ref:
+ * @metrics: a #PangoFontMetrics structure, may be %NULL
+ *
+ * Increase the reference count of a font metrics structure by one.
+ *
+ * Return value: @metrics
+ **/
+PangoFontMetrics *
+pango_font_metrics_ref (PangoFontMetrics *metrics)
+{
+  if (metrics == NULL)
+    return NULL;
+
+  g_atomic_int_inc ((int *) &metrics->ref_count);
+
+  return metrics;
+}
+
+/**
+ * pango_font_metrics_unref:
+ * @metrics: a #PangoFontMetrics structure, may be %NULL
+ *
+ * Decrease the reference count of a font metrics structure by one. If
+ * the result is zero, frees the structure and any associated
+ * memory.
+ **/
+void
+pango_font_metrics_unref (PangoFontMetrics *metrics)
+{
+  if (metrics == NULL)
+    return;
+
+  g_return_if_fail (metrics->ref_count > 0 );
+
+  if (g_atomic_int_dec_and_test ((int *) &metrics->ref_count))
+    g_slice_free (PangoFontMetrics, metrics);
+}
+
+/**
+ * pango_font_metrics_get_ascent:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the ascent from a font metrics structure. The ascent is
+ * the distance from the baseline to the logical top of a line
+ * of text. (The logical top may be above or below the top of the
+ * actual drawn ink. It is necessary to lay out the text to figure
+ * where the ink will be.)
+ *
+ * Return value: the ascent, in Pango units.
+ **/
+int
+pango_font_metrics_get_ascent (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->ascent;
+}
+
+/**
+ * pango_font_metrics_get_descent:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the descent from a font metrics structure. The descent is
+ * the distance from the baseline to the logical bottom of a line
+ * of text. (The logical bottom may be above or below the bottom of the
+ * actual drawn ink. It is necessary to lay out the text to figure
+ * where the ink will be.)
+ *
+ * Return value: the descent, in Pango units.
+ **/
+int
+pango_font_metrics_get_descent (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->descent;
+}
+
+/**
+ * pango_font_metrics_get_approximate_char_width:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the approximate character width for a font metrics structure.
+ * This is merely a representative value useful, for example, for
+ * determining the initial size for a window. Actual characters in
+ * text will be wider and narrower than this.
+ *
+ * Return value: the character width, in Pango units.
+ **/
+int
+pango_font_metrics_get_approximate_char_width (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->approximate_char_width;
+}
+
+/**
+ * pango_font_metrics_get_approximate_digit_width:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the approximate digit width for a font metrics structure.
+ * This is merely a representative value useful, for example, for
+ * determining the initial size for a window. Actual digits in
+ * text can be wider or narrower than this, though this value
+ * is generally somewhat more accurate than the result of
+ * pango_font_metrics_get_approximate_char_width() for digits.
+ *
+ * Return value: the digit width, in Pango units.
+ **/
+int
+pango_font_metrics_get_approximate_digit_width (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->approximate_digit_width;
+}
+
+/**
+ * pango_font_metrics_get_underline_position:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the suggested position to draw the underline.
+ * The value returned is the distance <emphasis>above</emphasis> the
+ * baseline of the top of the underline. Since most fonts have
+ * underline positions beneath the baseline, this value is typically
+ * negative.
+ *
+ * Return value: the suggested underline position, in Pango units.
+ *
+ * Since: 1.6
+ **/
+int
+pango_font_metrics_get_underline_position (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->underline_position;
+}
+
+/**
+ * pango_font_metrics_get_underline_thickness:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the suggested thickness to draw for the underline.
+ *
+ * Return value: the suggested underline thickness, in Pango units.
+ *
+ * Since: 1.6
+ **/
+int
+pango_font_metrics_get_underline_thickness (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->underline_thickness;
+}
+
+/**
+ * pango_font_metrics_get_strikethrough_position:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the suggested position to draw the strikethrough.
+ * The value returned is the distance <emphasis>above</emphasis> the
+ * baseline of the top of the strikethrough.
+ *
+ * Return value: the suggested strikethrough position, in Pango units.
+ *
+ * Since: 1.6
+ **/
+int
+pango_font_metrics_get_strikethrough_position (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->strikethrough_position;
+}
+
+/**
+ * pango_font_metrics_get_strikethrough_thickness:
+ * @metrics: a #PangoFontMetrics structure
+ *
+ * Gets the suggested thickness to draw for the strikethrough.
+ *
+ * Return value: the suggested strikethrough thickness, in Pango units.
+ *
+ * Since: 1.6
+ **/
+int
+pango_font_metrics_get_strikethrough_thickness (PangoFontMetrics *metrics)
+{
+  g_return_val_if_fail (metrics != NULL, 0);
+
+  return metrics->strikethrough_thickness;
+}
+
+/*
+ * PangoFontFamily
+ */
+
+G_DEFINE_ABSTRACT_TYPE (PangoFontFamily, pango_font_family, G_TYPE_OBJECT)
+
+static void
+pango_font_family_class_init (PangoFontFamilyClass *class G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_font_family_init (PangoFontFamily *family G_GNUC_UNUSED)
+{
+}
+
+/**
+ * pango_font_family_get_name:
+ * @family: a #PangoFontFamily
+ *
+ * Gets the name of the family. The name is unique among all
+ * fonts for the font backend and can be used in a #PangoFontDescription
+ * to specify that a face from this family is desired.
+ *
+ * Return value: the name of the family. This string is owned
+ *   by the family object and must not be modified or freed.
+ **/
+G_CONST_RETURN char *
+pango_font_family_get_name (PangoFontFamily  *family)
+{
+  g_return_val_if_fail (PANGO_IS_FONT_FAMILY (family), NULL);
+
+  return PANGO_FONT_FAMILY_GET_CLASS (family)->get_name (family);
+}
+
+/**
+ * pango_font_family_list_faces:
+ * @family: a #PangoFontFamily
+ * @faces: location to store an array of pointers to #PangoFontFace
+ *   objects, or %NULL. This array should be freed with g_free()
+ *   when it is no longer needed.
+ * @n_faces: location to store number of elements in @faces.
+ *
+ * Lists the different font faces that make up @family. The faces
+ * in a family share a common design, but differ in slant, weight,
+ * width and other aspects.
+ **/
+void
+pango_font_family_list_faces (PangoFontFamily  *family,
+                             PangoFontFace  ***faces,
+                             int              *n_faces)
+{
+  g_return_if_fail (PANGO_IS_FONT_FAMILY (family));
+
+  PANGO_FONT_FAMILY_GET_CLASS (family)->list_faces (family, faces, n_faces);
+}
+
+/**
+ * pango_font_family_is_monospace:
+ * @family: a #PangoFontFamily
+ *
+ * A monospace font is a font designed for text display where the the
+ * characters form a regular grid. For Western languages this would
+ * mean that the advance width of all characters are the same, but
+ * this categorization also includes Asian fonts which include
+ * double-width characters: characters that occupy two grid cells.
+ * g_unichar_iswide() returns a result that indicates whether a
+ * character is typically double-width in a monospace font.
+ *
+ * The best way to find out the grid-cell size is to call
+ * pango_font_metrics_get_approximate_digit_width(), since the results
+ * of pango_font_metrics_get_approximate_char_width() may be affected
+ * by double-width characters.
+ *
+ * Return value: %TRUE if the family is monospace.
+ *
+ * Since: 1.4
+ **/
+gboolean
+pango_font_family_is_monospace (PangoFontFamily  *family)
+{
+  g_return_val_if_fail (PANGO_IS_FONT_FAMILY (family), FALSE);
+
+  if (PANGO_FONT_FAMILY_GET_CLASS (family)->is_monospace)
+    return PANGO_FONT_FAMILY_GET_CLASS (family)->is_monospace (family);
+  else
+    return FALSE;
+}
+
+/*
+ * PangoFontFace
+ */
+
+G_DEFINE_ABSTRACT_TYPE (PangoFontFace, pango_font_face, G_TYPE_OBJECT)
+
+static void
+pango_font_face_class_init (PangoFontFaceClass *class G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_font_face_init (PangoFontFace *face G_GNUC_UNUSED)
+{
+}
+
+/**
+ * pango_font_face_describe:
+ * @face: a #PangoFontFace
+ *
+ * Returns the family, style, variant, weight and stretch of
+ * a #PangoFontFace. The size field of the resulting font description
+ * will be unset.
+ *
+ * Return value: a newly-created #PangoFontDescription structure
+ *  holding the description of the face. Use pango_font_description_free()
+ *  to free the result.
+ **/
+PangoFontDescription *
+pango_font_face_describe (PangoFontFace *face)
+{
+  g_return_val_if_fail (PANGO_IS_FONT_FACE (face), NULL);
+
+  return PANGO_FONT_FACE_GET_CLASS (face)->describe (face);
+}
+
+/**
+ * pango_font_face_is_synthesized:
+ * @face: a #PangoFontFace
+ *
+ * Returns whether a #PangoFontFace is synthesized by the underlying
+ * font rendering engine from another face, perhaps by shearing, emboldening,
+ * or lightening it.
+ *
+ * Return value: whether @face is synthesized.
+ *
+ * Since: 1.18
+ **/
+gboolean
+pango_font_face_is_synthesized (PangoFontFace  *face)
+{
+  g_return_val_if_fail (PANGO_IS_FONT_FACE (face), FALSE);
+
+  if (PANGO_FONT_FACE_GET_CLASS (face)->is_synthesized != NULL)
+    return PANGO_FONT_FACE_GET_CLASS (face)->is_synthesized (face);
+  else
+    return FALSE;
+}
+
+/**
+ * pango_font_face_get_face_name:
+ * @face: a #PangoFontFace.
+ *
+ * Gets a name representing the style of this face among the
+ * different faces in the #PangoFontFamily for the face. This
+ * name is unique among all faces in the family and is suitable
+ * for displaying to users.
+ *
+ * Return value: the face name for the face. This string is
+ *   owned by the face object and must not be modified or freed.
+ **/
+G_CONST_RETURN char *
+pango_font_face_get_face_name (PangoFontFace *face)
+{
+  g_return_val_if_fail (PANGO_IS_FONT_FACE (face), NULL);
+
+  return PANGO_FONT_FACE_GET_CLASS (face)->get_face_name (face);
+}
+
+/**
+ * pango_font_face_list_sizes:
+ * @face: a #PangoFontFace.
+ * @sizes: location to store a pointer to an array of int. This array
+ *         should be freed with g_free().
+ * @n_sizes: location to store the number of elements in @sizes
+ *
+ * List the available sizes for a font. This is only applicable to bitmap
+ * fonts. For scalable fonts, stores %NULL at the location pointed to by
+ * @sizes and 0 at the location pointed to by @n_sizes. The sizes returned
+ * are in Pango units and are sorted in ascending order.
+ *
+ * Since: 1.4
+ **/
+void
+pango_font_face_list_sizes (PangoFontFace  *face,
+                           int           **sizes,
+                           int            *n_sizes)
+{
+  g_return_if_fail (PANGO_IS_FONT_FACE (face));
+  g_return_if_fail (sizes == NULL || n_sizes != NULL);
+
+  if (n_sizes == NULL)
+    return;
+
+  if (PANGO_FONT_FACE_GET_CLASS (face)->list_sizes != NULL)
+    PANGO_FONT_FACE_GET_CLASS (face)->list_sizes (face, sizes, n_sizes);
+  else
+    {
+      if (sizes != NULL)
+       *sizes = NULL;
+      *n_sizes = 0;
+    }
+}
diff --git a/pango/glyphstring.c b/pango/glyphstring.c
new file mode 100755 (executable)
index 0000000..0382eb6
--- /dev/null
@@ -0,0 +1,661 @@
+/* Pango
+ * glyphstring.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <glib.h>
+#include "pango-glyph.h"
+#include "pango-font.h"
+#include "pango-impl-utils.h"
+
+/**
+ * pango_glyph_string_new:
+ *
+ * Create a new #PangoGlyphString.
+ *
+ * Return value: the newly allocated #PangoGlyphString, which
+ *               should be freed with pango_glyph_string_free().
+ */
+PangoGlyphString *
+pango_glyph_string_new (void)
+{
+  PangoGlyphString *string = g_slice_new (PangoGlyphString);
+
+  string->num_glyphs = 0;
+  string->space = 0;
+  string->glyphs = NULL;
+  string->log_clusters = NULL;
+
+  return string;
+}
+
+/**
+ * pango_glyph_string_set_size:
+ * @string:    a #PangoGlyphString.
+ * @new_len:   the new length of the string.
+ *
+ * Resize a glyph string to the given length.
+ */
+void
+pango_glyph_string_set_size (PangoGlyphString *string, gint new_len)
+{
+  g_return_if_fail (new_len >= 0);
+
+  while (new_len > string->space)
+    {
+      if (string->space == 0)
+       {
+         string->space = 4;
+       }
+      else
+       {
+         const guint max_space =
+           MIN (G_MAXINT, G_MAXSIZE / MAX (sizeof(PangoGlyphInfo), sizeof(gint)));
+
+         guint more_space = (guint)string->space * 2;
+
+         if (more_space > max_space)
+           {
+             more_space = max_space;
+
+             if ((guint)new_len > max_space)
+               {
+                 g_error ("%s: failed to allocate glyph string of length %i\n",
+                          G_STRLOC, new_len);
+               }
+           }
+
+         string->space = more_space;
+       }
+    }
+
+  string->glyphs = g_realloc (string->glyphs, string->space * sizeof (PangoGlyphInfo));
+  string->log_clusters = g_realloc (string->log_clusters, string->space * sizeof (gint));
+  string->num_glyphs = new_len;
+}
+
+GType
+pango_glyph_string_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoGlyphString"),
+                                            (GBoxedCopyFunc)pango_glyph_string_copy,
+                                            (GBoxedFreeFunc)pango_glyph_string_free);
+
+  return our_type;
+}
+
+/**
+ * pango_glyph_string_copy:
+ * @string: a #PangoGlyphString, may be %NULL
+ *
+ * Copy a glyph string and associated storage.
+ *
+ * Return value: the newly allocated #PangoGlyphString, which
+ *               should be freed with pango_glyph_string_free(),
+ *               or %NULL if @string was %NULL.
+ */
+PangoGlyphString *
+pango_glyph_string_copy (PangoGlyphString *string)
+{
+  PangoGlyphString *new_string;
+
+  if (string == NULL)
+    return NULL;
+  
+  new_string = g_slice_new (PangoGlyphString);
+
+  *new_string = *string;
+
+  new_string->glyphs = g_memdup (string->glyphs,
+                                string->space * sizeof (PangoGlyphInfo));
+  new_string->log_clusters = g_memdup (string->log_clusters,
+                                      string->space * sizeof (gint));
+
+  return new_string;
+}
+
+/**
+ * pango_glyph_string_free:
+ * @string: a #PangoGlyphString, may be %NULL
+ *
+ * Free a glyph string and associated storage.
+ */
+void
+pango_glyph_string_free (PangoGlyphString *string)
+{
+  if (string == NULL)
+    return;
+
+  g_free (string->glyphs);
+  g_free (string->log_clusters);
+  g_slice_free (PangoGlyphString, string);
+}
+
+/**
+ * pango_glyph_string_extents_range:
+ * @glyphs:   a #PangoGlyphString
+ * @start:    start index
+ * @end:      end index (the range is the set of bytes with
+             indices such that start <= index < end)
+ * @font:     a #PangoFont
+ * @ink_rect: rectangle used to store the extents of the glyph string range as drawn
+ *            or %NULL to indicate that the result is not needed.
+ * @logical_rect: rectangle used to store the logical extents of the glyph string range
+ *            or %NULL to indicate that the result is not needed.
+ *
+ * Computes the extents of a sub-portion of a glyph string. The extents are
+ * relative to the start of the glyph string range (the origin of their
+ * coordinate system is at the start of the range, not at the start of the entire
+ * glyph string).
+ **/
+void
+pango_glyph_string_extents_range (PangoGlyphString *glyphs,
+                                 int               start,
+                                 int               end,
+                                 PangoFont        *font,
+                                 PangoRectangle   *ink_rect,
+                                 PangoRectangle   *logical_rect)
+{
+  int x_pos = 0;
+  int i;
+
+  /* Note that the handling of empty rectangles for ink
+   * and logical rectangles is different. A zero-height ink
+   * rectangle makes no contribution to the overall ink rect,
+   * while a zero-height logical rect still reserves horizontal
+   * width. Also, we may return zero-width, positive height
+   * logical rectangles, while we'll never do that for the
+   * ink rect.
+   */
+  g_return_if_fail (start <= end);
+
+  if (G_UNLIKELY (!ink_rect && !logical_rect))
+    return;
+
+  if (ink_rect)
+    {
+      ink_rect->x = 0;
+      ink_rect->y = 0;
+      ink_rect->width = 0;
+      ink_rect->height = 0;
+    }
+
+  if (logical_rect)
+    {
+      logical_rect->x = 0;
+      logical_rect->y = 0;
+      logical_rect->width = 0;
+      logical_rect->height = 0;
+    }
+
+  for (i = start; i < end; i++)
+    {
+      PangoRectangle glyph_ink;
+      PangoRectangle glyph_logical;
+
+      PangoGlyphGeometry *geometry = &glyphs->glyphs[i].geometry;
+
+      pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph,
+                                   ink_rect ? &glyph_ink : NULL,
+                                   logical_rect ? &glyph_logical : NULL);
+
+      if (ink_rect && glyph_ink.width != 0 && glyph_ink.height != 0)
+       {
+         if (ink_rect->width == 0 || ink_rect->height == 0)
+           {
+             ink_rect->x = x_pos + glyph_ink.x + geometry->x_offset;
+             ink_rect->width = glyph_ink.width;
+             ink_rect->y = glyph_ink.y + geometry->y_offset;
+             ink_rect->height = glyph_ink.height;
+           }
+         else
+           {
+             int new_x, new_y;
+
+             new_x = MIN (ink_rect->x, x_pos + glyph_ink.x + geometry->x_offset);
+             ink_rect->width = MAX (ink_rect->x + ink_rect->width,
+                                    x_pos + glyph_ink.x + glyph_ink.width + geometry->x_offset) - new_x;
+             ink_rect->x = new_x;
+
+             new_y = MIN (ink_rect->y, glyph_ink.y + geometry->y_offset);
+             ink_rect->height = MAX (ink_rect->y + ink_rect->height,
+                                     glyph_ink.y + glyph_ink.height + geometry->y_offset) - new_y;
+             ink_rect->y = new_y;
+           }
+       }
+
+      if (logical_rect)
+       {
+         logical_rect->width += geometry->width;
+
+         if (i == start)
+           {
+             logical_rect->y = glyph_logical.y;
+             logical_rect->height = glyph_logical.height;
+           }
+         else
+           {
+             int new_y = MIN (logical_rect->y, glyph_logical.y);
+             logical_rect->height = MAX (logical_rect->y + logical_rect->height,
+                                         glyph_logical.y + glyph_logical.height) - new_y;
+             logical_rect->y = new_y;
+           }
+       }
+
+      x_pos += geometry->width;
+    }
+}
+
+/**
+ * pango_glyph_string_extents:
+ * @glyphs:   a #PangoGlyphString
+ * @font:     a #PangoFont
+ * @ink_rect: rectangle used to store the extents of the glyph string as drawn
+ *            or %NULL to indicate that the result is not needed.
+ * @logical_rect: rectangle used to store the logical extents of the glyph string
+ *            or %NULL to indicate that the result is not needed.
+ *
+ * Compute the logical and ink extents of a glyph string. See the documentation
+ * for pango_font_get_glyph_extents() for details about the interpretation
+ * of the rectangles.
+ */
+void
+pango_glyph_string_extents (PangoGlyphString *glyphs,
+                           PangoFont        *font,
+                           PangoRectangle   *ink_rect,
+                           PangoRectangle   *logical_rect)
+{
+  pango_glyph_string_extents_range (glyphs, 0, glyphs->num_glyphs,
+                                   font, ink_rect, logical_rect);
+}
+
+/**
+ * pango_glyph_string_get_width:
+ * @glyphs:   a #PangoGlyphString
+ *
+ * Computes the logical width of the glyph string as can also be computed
+ * using pango_glyph_string_extents().  However, since this only computes the
+ * width, it's much faster.  This is in fact only a convenience function that
+ * computes the sum of geometry.width for each glyph in the @glyphs.
+ *
+ * Return value: the logical width of the glyph string.
+ *
+ * Since: 1.14
+ */
+int
+pango_glyph_string_get_width (PangoGlyphString *glyphs)
+{
+  int i;
+  int width = 0;
+
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    width += glyphs->glyphs[i].geometry.width;
+
+  return width;
+}
+
+/**
+ * pango_glyph_string_get_logical_widths:
+ * @glyphs: a #PangoGlyphString
+ * @text: the text corresponding to the glyphs
+ * @length: the length of @text, in bytes
+ * @embedding_level: the embedding level of the string
+ * @logical_widths: an array whose length is the number of characters in
+ *                  text (equal to g_utf8_strlen (text, length) unless
+ *                  text has NUL bytes)
+ *                  to be filled in with the resulting character widths.
+ *
+ * Given a #PangoGlyphString resulting from pango_shape() and the corresponding
+ * text, determine the screen width corresponding to each character. When
+ * multiple characters compose a single cluster, the width of the entire
+ * cluster is divided equally among the characters.
+ *
+ * See also pango_glyph_item_get_logical_widths().
+ **/
+void
+pango_glyph_string_get_logical_widths (PangoGlyphString *glyphs,
+                                      const char       *text,
+                                      int               length,
+                                      int               embedding_level,
+                                      int              *logical_widths)
+{
+  /* Build a PangoGlyphItem and call the other API */
+  PangoItem item = {0, length, pango_utf8_strlen (text, length),
+                   {NULL, NULL, NULL,
+                    embedding_level, PANGO_GRAVITY_AUTO, 0,
+                    PANGO_SCRIPT_UNKNOWN, NULL,
+                    NULL}};
+  PangoGlyphItem glyph_item = {&item, glyphs};
+
+  return pango_glyph_item_get_logical_widths (&glyph_item, text, logical_widths);
+}
+
+/* The initial implementation here is script independent,
+ * but it might actually need to be virtualized into the
+ * rendering modules. Otherwise, we probably will end up
+ * enforcing unnatural cursor behavior for some languages.
+ *
+ * The only distinction that Uniscript makes is whether
+ * cursor positioning is allowed within clusters or not.
+ */
+
+/**
+ * pango_glyph_string_index_to_x:
+ * @glyphs:    the glyphs return from pango_shape()
+ * @text:      the text for the run
+ * @length:    the number of bytes (not characters) in @text.
+ * @analysis:  the analysis information return from pango_itemize()
+ * @index_:    the byte index within @text
+ * @trailing:  whether we should compute the result for the beginning (%FALSE)
+ *             or end (%TRUE) of the character.
+ * @x_pos:     location to store result
+ *
+ * Converts from character position to x position. (X position
+ * is measured from the left edge of the run). Character positions
+ * are computed by dividing up each cluster into equal portions.
+ */
+
+void
+pango_glyph_string_index_to_x (PangoGlyphString *glyphs,
+                              char             *text,
+                              int               length,
+                              PangoAnalysis    *analysis,
+                              int               index,
+                              gboolean          trailing,
+                              int              *x_pos)
+{
+  int i;
+  int start_xpos = 0;
+  int end_xpos = 0;
+  int width = 0;
+
+  int start_index = -1;
+  int end_index = -1;
+
+  int cluster_chars = 0;
+  int cluster_offset = 0;
+
+  char *p;
+
+  g_return_if_fail (glyphs != NULL);
+  g_return_if_fail (length >= 0);
+  g_return_if_fail (length == 0 || text != NULL);
+
+  if (!x_pos) /* Allow the user to do the useless */
+    return;
+
+  if (glyphs->num_glyphs == 0)
+    {
+      *x_pos = 0;
+      return;
+    }
+
+  /* Calculate the starting and ending character positions
+   * and x positions for the cluster
+   */
+  if (analysis->level % 2) /* Right to left */
+    {
+      for (i = glyphs->num_glyphs - 1; i >= 0; i--)
+       width += glyphs->glyphs[i].geometry.width;
+
+      for (i = glyphs->num_glyphs - 1; i >= 0; i--)
+       {
+         if (glyphs->log_clusters[i] > index)
+           {
+             end_index = glyphs->log_clusters[i];
+             end_xpos = width;
+             break;
+           }
+
+         if (glyphs->log_clusters[i] != start_index)
+           {
+             start_index = glyphs->log_clusters[i];
+             start_xpos = width;
+           }
+
+         width -= glyphs->glyphs[i].geometry.width;
+       }
+    }
+  else /* Left to right */
+    {
+      for (i = 0; i < glyphs->num_glyphs; i++)
+       {
+         if (glyphs->log_clusters[i] > index)
+           {
+             end_index = glyphs->log_clusters[i];
+             end_xpos = width;
+             break;
+           }
+
+         if (glyphs->log_clusters[i] != start_index)
+           {
+             start_index = glyphs->log_clusters[i];
+             start_xpos = width;
+           }
+
+         width += glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  if (end_index == -1)
+    {
+      end_index = length;
+      end_xpos = (analysis->level % 2) ? 0 : width;
+    }
+
+  /* Calculate offset of character within cluster */
+
+  p = text + start_index;
+  while (p < text + end_index)
+    {
+      if (p < text + index)
+       cluster_offset++;
+      cluster_chars++;
+      p = g_utf8_next_char (p);
+    }
+
+  if (trailing)
+    cluster_offset += 1;
+
+  if (G_UNLIKELY (!cluster_chars)) /* pedantic */
+    {
+      *x_pos = start_xpos;
+      return;
+    }
+
+  *x_pos = ((cluster_chars - cluster_offset) * start_xpos +
+           cluster_offset * end_xpos) / cluster_chars;
+}
+
+/**
+ * pango_glyph_string_x_to_index:
+ * @glyphs:    the glyphs returned from pango_shape()
+ * @text:      the text for the run
+ * @length:    the number of bytes (not characters) in text.
+ * @analysis:  the analysis information return from pango_itemize()
+ * @x_pos:     the x offset (in Pango units)
+ * @index_:    location to store calculated byte index within @text
+ * @trailing:  location to store a boolean indicating
+ *             whether the user clicked on the leading or trailing
+ *             edge of the character.
+ *
+ * Convert from x offset to character position. Character positions
+ * are computed by dividing up each cluster into equal portions.
+ * In scripts where positioning within a cluster is not allowed
+ * (such as Thai), the returned value may not be a valid cursor
+ * position; the caller must combine the result with the logical
+ * attributes for the text to compute the valid cursor position.
+ */
+void
+pango_glyph_string_x_to_index (PangoGlyphString *glyphs,
+                              char             *text,
+                              int               length,
+                              PangoAnalysis    *analysis,
+                              int               x_pos,
+                              int              *index,
+                              gboolean         *trailing)
+{
+  int i;
+  int start_xpos = 0;
+  int end_xpos = 0;
+  int width = 0;
+
+  int start_index = -1;
+  int end_index = -1;
+
+  int cluster_chars = 0;
+  char *p;
+
+  gboolean found = FALSE;
+
+  /* Find the cluster containing the position */
+
+  width = 0;
+
+  if (analysis->level % 2) /* Right to left */
+    {
+      for (i = glyphs->num_glyphs - 1; i >= 0; i--)
+       width += glyphs->glyphs[i].geometry.width;
+
+      for (i = glyphs->num_glyphs - 1; i >= 0; i--)
+       {
+         if (glyphs->log_clusters[i] != start_index)
+           {
+             if (found)
+               {
+                 end_index = glyphs->log_clusters[i];
+                 end_xpos = width;
+                 break;
+               }
+             else
+               {
+                 start_index = glyphs->log_clusters[i];
+                 start_xpos = width;
+               }
+           }
+
+         width -= glyphs->glyphs[i].geometry.width;
+
+         if (width <= x_pos && x_pos < width + glyphs->glyphs[i].geometry.width)
+           found = TRUE;
+       }
+    }
+  else /* Left to right */
+    {
+      for (i = 0; i < glyphs->num_glyphs; i++)
+       {
+         if (glyphs->log_clusters[i] != start_index)
+           {
+             if (found)
+               {
+                 end_index = glyphs->log_clusters[i];
+                 end_xpos = width;
+                 break;
+               }
+             else
+               {
+                 start_index = glyphs->log_clusters[i];
+                 start_xpos = width;
+               }
+           }
+
+         if (width <= x_pos && x_pos < width + glyphs->glyphs[i].geometry.width)
+           found = TRUE;
+
+         width += glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  if (end_index == -1)
+    {
+      end_index = length;
+      end_xpos = (analysis->level % 2) ? 0 : width;
+    }
+
+  /* Calculate number of chars within cluster */
+  p = text + start_index;
+  while (p < text + end_index)
+    {
+      p = g_utf8_next_char (p);
+      cluster_chars++;
+    }
+
+  if (start_xpos == end_xpos)
+    {
+      if (index)
+       *index = start_index;
+      if (trailing)
+       *trailing = FALSE;
+    }
+  else
+    {
+      double cp = ((double)(x_pos - start_xpos) * cluster_chars) / (end_xpos - start_xpos);
+
+      /* LTR and right-to-left have to be handled separately
+       * here because of the edge condition when we are exactly
+       * at a pixel boundary; end_xpos goes with the next
+       * character for LTR, with the previous character for RTL.
+       */
+      if (start_xpos < end_xpos) /* Left-to-right */
+       {
+         if (index)
+           {
+             char *p = text + start_index;
+             int i = 0;
+
+             while (i + 1 <= cp)
+               {
+                 p = g_utf8_next_char (p);
+                 i++;
+               }
+
+             *index = (p - text);
+           }
+
+         if (trailing)
+           *trailing = (cp - (int)cp >= 0.5) ? TRUE : FALSE;
+       }
+      else /* Right-to-left */
+       {
+         if (index)
+           {
+             char *p = text + start_index;
+             int i = 0;
+
+             while (i + 1 < cp)
+               {
+                 p = g_utf8_next_char (p);
+                 i++;
+               }
+
+             *index = (p - text);
+           }
+
+         if (trailing)
+           {
+             double cp_flip = cluster_chars - cp;
+             *trailing = (cp_flip - (int)cp_flip >= 0.5) ? FALSE : TRUE;
+           }
+       }
+    }
+}
diff --git a/pango/makefile.msc b/pango/makefile.msc
new file mode 100755 (executable)
index 0000000..76e3729
--- /dev/null
@@ -0,0 +1,290 @@
+TOP = ../..
+!INCLUDE $(TOP)/glib/build/win32/make.msc
+
+!IFNDEF PERL
+PERL = perl
+!ENDIF
+
+# Possibly override Pango version from build/win32/module.defs
+PANGO_VER = 1.0
+PANGO_MODULE_VERSION = 1.6.0
+
+# INCLUDES = -I .. -I .
+# -DHAVE_USP10_H 
+# DEFINES = -DPACKAGE=\"Pango\" -DVERSION=\"$(PANGO_VER)\" 
+# DEPCFLAGS = $(GLIB_CFLAGS) $(LIBICONV_CFLAGS) $(FREETYPE2_CFLAGS)
+
+!IFNDEF PACKAGE
+
+DLLS = pango pangowin32 pangoft2 pangocairo # pangox
+EXES = querymodules testfonts
+#? test1 test2 test3 test4 test5
+
+# The main target
+all : \
+       sub-all
+
+sub-all: 
+       for %d in ($(DLLS)) do nmake -nologo -f makefile.msc sub-one-dll THIS=%d
+       for %d in ($(DLLS)) do nmake -nologo -f makefile.msc sub-one-lib THIS=%d
+       for %d in ($(EXES)) do nmake -nologo -f makefile.msc sub-one-exe THIS=%d
+
+sub-one-lib:
+       nmake -nologo -f makefile.msc $(THIS)-$(PANGO_VER)s.lib PACKAGE=$(THIS) OBJS_$(THIS)=1
+
+sub-one-dll:
+       nmake -nologo -f makefile.msc lib$(THIS)-$(PANGO_VER)-0.dll PACKAGE=$(THIS) OBJS_$(THIS)=1
+
+sub-one-exe:
+       nmake -nologo -f makefile.msc $(THIS).exe PACKAGE=$(THIS) OBJS_$(THIS)=1
+
+!ELSE
+
+PRJ_TOP = ..
+PKG_VER = $(PANGO_VER)
+PKG_DEF = $(PACKAGE).def
+
+PKG_CFLAGS = -FImsvc_recommended_pragmas.h -I.. -I. -I$(PRJ_TOP) \
+               -DPACKAGE=\"Pango\" -DVERSION=\"$(PANGO_VER)\" \
+               -DPANGO_ENABLE_BACKEND -DPANGO_ENABLE_ENGINE \
+               -DMODULE_VERSION=\"$(PANGO_MODULE_VERSION)\" \
+               $(GLIB_CFLAGS) $(LIBICONV_CFLAGS) \
+               $(X11_CFLAGS)  -DSYSCONFDIR=\"/etc\" \
+               -DPANGO_BINARY_AGE=0 
+
+#-DHAVE_USP10_H
+               
+
+!IFDEF OBJS_pango
+# don't link with itself
+PKG_LINK = $(GLIB_LIBS) $(FONTCONFIG_LIBS)
+!ENDIF
+
+!IFDEF OBJS_pangowin32
+PKG_LINK = $(GLIB_LIBS) $(LIBICONV_LIBS) \
+       pango-$(PANGO_VER).lib
+!ENDIF
+
+!IFDEF OBJS_pangoft2
+PKG_CFLAGS = $(PKG_CFLAGS) $(FREETYPE2_CFLAGS) $(FONTCONFIG_CFLAGS) \
+       -DPANGO_MODULE_PREFIX=_pango_basic_ft2
+
+PKG_LINK = $(GLIB_LIBS) $(LIBICONV_LIBS) $(FREETYPE2_LIBS) $(FONTCONFIG_LIBS) \
+       pango-$(PANGO_VER).lib opentype\pango-ot.lib
+!ENDIF
+
+!IFDEF OBJS_pangox
+PKG_LINK = $(GLIB_LIBS) $(LIBICONV_LIBS) \
+       pango-$(PANGO_VER).lib $(X11_LIBS)
+!ENDIF
+
+!IFDEF OBJS_pangocairo
+PKG_LINK = $(GLIB_LIBS) $(LIBICONV_LIBS) \
+       pango-$(PANGO_VER).lib $(CAIRO_LIBS) \
+       pangowin32-$(PANGO_VER).lib $(FONTCONFIG_LIBS) 
+!ENDIF
+
+!IF DEFINED (OBJS_querymodules) || DEFINED (OBJS_testfonts)
+PKG_LINK = $(GLIB_LIBS) $(LIBICONV_LIBS) \
+       pango-$(PANGO_VER).lib pangowin32-$(PANGO_VER).lib
+!ENDIF
+
+!IFDEF OBJS_pango
+OBJECTS = \
+       pango-enum-types.obj \
+       \
+       module-defs-lang.obj \
+       \
+       break.obj \
+       ellipsize.obj \
+       fonts.obj \
+       glyphstring.obj \
+       mapping.obj \
+       modules.obj \
+       pango-attributes.obj \
+       pango-engine.obj \
+       pango-color.obj \
+       pango-context.obj \
+       pango-coverage.obj \
+       pango-fontset.obj \
+       pango-fontmap.obj \
+       pango-glyph-item.obj \
+       pango-gravity.obj \
+       pango-item.obj \
+       pango-markup.obj \
+       pango-matrix.obj \
+       pango-language.obj \
+       pango-layout.obj \
+       pango-renderer.obj \
+       pango-script.obj \
+       pango-tabs.obj \
+       pango-utils.obj \
+       reorder-items.obj \
+       shape.obj \
+       \
+       fribidi.obj \
+       fribidi_types.obj \
+       fribidi_char_type.obj
+!ENDIF
+
+basic-win32.obj : ..\modules\basic\basic-win32.c
+       $(CC) $(PKG_CFLAGS) -GD -DPANGO_MODULE_PREFIX=_pango_basic_win32 -c ..\modules\basic\basic-win32.c
+
+basic-fc.obj : ..\modules\basic\basic-fc.c
+       $(CC) $(PKG_CFLAGS) -GD -DPANGO_MODULE_PREFIX=_pango_basic_ft2 -c ..\modules\basic\basic-fc.c
+
+basic-x.obj : ..\modules\basic\basic-x.c
+       $(CC) $(PKG_CFLAGS) -GD -DPANGO_MODULE_PREFIX=_pango_basic_xs -c ..\modules\basic\basic-x.c
+
+
+fribidi.obj : mini-fribidi\fribidi.c
+       $(CC) $(PKG_CFLAGS) -GD -c mini-fribidi\fribidi.c
+fribidi_types.obj : mini-fribidi\fribidi_types.c
+       $(CC) $(PKG_CFLAGS) -GD -c mini-fribidi\fribidi_types.c
+fribidi_char_type.obj : mini-fribidi\fribidi_char_type.c
+       $(CC) $(PKG_CFLAGS) -GD -c mini-fribidi\fribidi_char_type.c
+
+testfonts.obj : ..\examples\pangowin32tobmp.c
+       $(CC) $(PKG_CFLAGS) -GD  -Fotestfonts.obj -c ..\examples\pangowin32tobmp.c
+
+!IFDEF OBJS_pangowin32
+PKG_CFLAGS = $(PKG_CFLAGS) -DPANGO_MODULE_PREFIX=_pango_basic_win32
+OBJECTS = \
+       module-defs-win32.obj \
+       pangowin32.obj \
+       pangowin32-fontcache.obj \
+       pangowin32-fontmap.obj \
+#      pangowin32-render.obj \
+       basic-win32.obj
+!ENDIF
+
+!IFDEF OBJS_pangoft2 
+OBJECTS = \
+       module-defs-fc.obj \
+       pangofc-decoder.obj \
+       pangofc-font.obj \
+       pangofc-fontmap.obj \
+       pangoft2.obj \
+       pangoft2-fontmap.obj \
+       pangoft2-render.obj \
+       \
+       pango-ot-buffer.obj \
+       pango-ot-info.obj \
+       pango-ot-tag.obj \
+       pango-ot-ruleset.obj \
+       \
+       basic-fc.obj
+
+PKG_CFLAGS = $(PKG_CFLAGS) $(FONTCONFIG_CFLAGS) $(FREETYPE2_CFLAGS)
+!ENDIF
+
+!IFDEF OBJS_pangox
+OBJECTS = \
+       module-defs-x.obj \
+       pangox.obj \
+       pangox-fontcache.obj \
+       pangox-fontmap.obj \
+       pango-indic.obj \
+       basic-x.obj
+!ENDIF
+
+# -DHAVE_CAIRO_FREETYPE
+!IFDEF OBJS_pangocairo
+PKG_CFLAGS = \
+       $(PKG_CFLAGS) $(FONTCONFIG_CFLAGS) $(FREETYPE2_CFLAGS) \
+       -DHAVE_CAIRO_WIN32 $(CAIRO_CFLAGS)
+OBJECTS = \
+        pangocairo-context.obj \
+        pangocairo-font.obj \
+        pangocairo-fontmap.obj \
+        pangocairo-render.obj \
+        pangocairo-win32font.obj \
+        pangocairo-win32fontmap.obj \
+#        pangocairo-fcfont.obj \
+#        pangocairo-fcfontmap.obj \
+!ENDIF
+
+!IFDEF OBJS_querymodules
+PKG_CFLAGS = $(PKG_CFLAGS) \
+       -DPACKAGE_NAME=\"Pango\" -DPACKAGE_VERSION=\"$(PANGO_VER)\"
+OBJECTS = \
+       querymodules.obj
+!ENDIF
+
+!IFNDEF OBJECTS
+OBJECTS = $(PACKAGE).obj
+!ENDIF
+
+module-defs-win32.c : module-defs-win32.c.win32
+       copy module-defs-win32.c.win32 module-defs-win32.c
+
+module-defs-fc.c : module-defs-fc.c.win32
+       copy module-defs-fc.c.win32 module-defs-fc.c
+
+module-defs-lang.c : module-defs-lang.c.win32
+       copy module-defs-lang.c.win32 module-defs-lang.c
+
+pango_headers=            \
+       pango.h            \
+       pango-attributes.h \
+       pango-break.h      \
+       pango-context.h    \
+       pango-coverage.h   \
+       pango-engine.h     \
+       pango-font.h       \
+       pango-fontmap.h    \
+       pango-fontset.h    \
+       pango-glyph.h      \
+       pango-glyph-item.h \
+       pango-gravity.h    \
+       pango-item.h       \
+       pango-layout.h     \
+       pango-modules.h    \
+       pango-renderer.h   \
+       pango-script.h     \
+       pango-tabs.h       \
+       pango-types.h      \
+       pango-utils.h      \
+       pangofc-font.h     \
+       pangofc-fontmap.h
+
+pango-enum-types.h: $(pango_headers) makefile.msc
+       $(PERL) $(GLIB)\gobject\glib-mkenums  \
+               --fhead "#ifndef __PANGO_ENUM_TYPES_H__\n#define __PANGO_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
+               --fprod "/* enumerations from \"@filename@\" */\n" \
+               --vhead "GType @enum_name@_get_type (void);\n#define PANGO_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n"         \
+               --ftail "G_END_DECLS\n#endif /* __PANGO_ENUM_TYPES_H__ */" \
+               $(pango_headers) > pango-enum-types.h
+
+pango-enum-types.c: $(pango_headers) pango-enum-types.h makefile.msc
+       $(PERL) $(GLIB)\gobject\glib-mkenums  \
+               --fhead "#include <pango.h>" \
+               --fprod "\n/* enumerations from \"@filename@\" */" \
+               --vhead "GType\n@enum_name@_get_type (void)\n{\n  static GType etype = 0;\n  if (etype == 0) {\n    static const G@Type@Value values[] = {"     \
+               --vprod "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+               --vtail "      { 0, NULL, NULL }\n    };\n    etype = g_@type@_register_static (\"@EnumName@\", values);\n  }\n  return etype;\n}\n" \
+               $(pango_headers) > pango-enum-types.c
+
+$(PACKAGE)-$(PKG_VER)s.lib : $(OBJECTS) $(PRJ_TOP)\config.h
+       lib /out:$(PACKAGE)-$(PKG_VER)s.lib $(OBJECTS)
+
+lib$(PACKAGE)-$(PKG_VER)-0.dll : $(OBJECTS) $(PKG_DEF) $(PRJ_TOP)\config.h
+       $(CC) $(CFLAGS) -LD -Fe$@ $(OBJECTS) $(PKG_LINK) \
+       user32.lib gdi32.lib advapi32.lib $(LDFLAGS) /implib:$(PACKAGE)-$(PKG_VER).lib /def:$(PKG_DEF)
+
+$(PACKAGE).exe : $(PKG_LINK) $(OBJECTS)
+       $(CC) $(CFLAGS) -Fe$(PACKAGE).exe $(OBJECTS) $(PKG_LINK) gdi32.lib user32.lib
+
+$(PRJ_TOP)\config.h.win32 : makefile.msc
+       echo /*almostempty*/ > $(PRJ_TOP)\config.h.win32
+       echo #define PANGO_BINARY_AGE 0 >> $(PRJ_TOP)\config.h.win32
+       echo #define DHAVE_USP10_H 1 >> $(PRJ_TOP)\config.h.win32
+
+$(PRJ_TOP)\config.h: $(PRJ_TOP)\config.h.win32
+       copy $(PRJ_TOP)\config.h.win32 $(PRJ_TOP)\config.h
+
+
+.c.obj :
+       $(CC) $(CFLAGS) -GD -c $(PKG_CFLAGS) $<
+
+!ENDIF #PACKAGE
diff --git a/pango/mini-fribidi/Makefile.am b/pango/mini-fribidi/Makefile.am
new file mode 100755 (executable)
index 0000000..a9e08d6
--- /dev/null
@@ -0,0 +1,33 @@
+## Process this file with automake to produce Makefile.in
+
+INCLUDES =                                     \
+       -DSYSCONFDIR=\"$(sysconfdir)\"          \
+       -DLIBDIR=\"$(libdir)\"                  \
+       $(PANGO_DEBUG_FLAGS)                    \
+       -I$(top_srcdir)                         \
+       $(GLIB_CFLAGS)
+
+LDADDS = @STRIP_BEGIN@         \
+       @x_ldflags@     \
+       @x_libs@        \
+       @GLIB_LIBS@     \
+       -lm             \
+       @STRIP_END@
+
+noinst_LTLIBRARIES = libmini-fribidi.la
+
+libmini_fribidi_la_SOURCES =    \
+       fribidi.c               \
+       fribidi_char_type.c     \
+       fribidi_config.h        \
+       fribidi.h               \
+       fribidi_types.c         \
+       fribidi_types.h
+
+EXTRA_DIST =                   \
+       README                  \
+       fribidi_tab_char_type_2.i \
+        fribidi_types.i
+
+
+-include $(top_srcdir)/git.mk
diff --git a/pango/mini-fribidi/Makefile.in b/pango/mini-fribidi/Makefile.in
new file mode 100644 (file)
index 0000000..9a0337b
--- /dev/null
@@ -0,0 +1,631 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = pango/mini-fribidi
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmini_fribidi_la_LIBADD =
+am_libmini_fribidi_la_OBJECTS = fribidi.lo fribidi_char_type.lo \
+       fribidi_types.lo
+libmini_fribidi_la_OBJECTS = $(am_libmini_fribidi_la_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libmini_fribidi_la_SOURCES)
+DIST_SOURCES = $(libmini_fribidi_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+INCLUDES = \
+       -DSYSCONFDIR=\"$(sysconfdir)\"          \
+       -DLIBDIR=\"$(libdir)\"                  \
+       $(PANGO_DEBUG_FLAGS)                    \
+       -I$(top_srcdir)                         \
+       $(GLIB_CFLAGS)
+
+LDADDS = @STRIP_BEGIN@         \
+       @x_ldflags@     \
+       @x_libs@        \
+       @GLIB_LIBS@     \
+       -lm             \
+       @STRIP_END@
+
+noinst_LTLIBRARIES = libmini-fribidi.la
+libmini_fribidi_la_SOURCES = \
+       fribidi.c               \
+       fribidi_char_type.c     \
+       fribidi_config.h        \
+       fribidi.h               \
+       fribidi_types.c         \
+       fribidi_types.h
+
+EXTRA_DIST = \
+       README                  \
+       fribidi_tab_char_type_2.i \
+        fribidi_types.i
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  pango/mini-fribidi/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  pango/mini-fribidi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libmini-fribidi.la: $(libmini_fribidi_la_OBJECTS) $(libmini_fribidi_la_DEPENDENCIES) 
+       $(LINK)  $(libmini_fribidi_la_LDFLAGS) $(libmini_fribidi_la_OBJECTS) $(libmini_fribidi_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fribidi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fribidi_char_type.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fribidi_types.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-exec \
+       install-exec-am install-info install-info-am install-man \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-info-am
+
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pango/mini-fribidi/README b/pango/mini-fribidi/README
new file mode 100755 (executable)
index 0000000..0831c91
--- /dev/null
@@ -0,0 +1,23 @@
+This directory holds a stripped down version of GNU FriBidi library. The
+fribidi version that fribidi.patch is against is 0.10.7 release.  The files
+fribidi_config.h and Makefile.am are specifically written for Pango integration.
+
+Like Pango, FriBidi is licensed under the terms of the GNU Lesser General
+Public License - see the file COPYING in the toplevel directory of the Pango
+distribution.
+
+The fribidi_tab_char_type_2.i table has been updated to correspond to
+Unicode 5.1.0.
+
+Please try not to make any changes to files duplicated in this directory.
+The aim has been to only remove lines from those files, not add new ones.
+Most of desired features can be implemented by preprocessor tricks in
+fribidi_config.h.
+
+This version of FriBidi is modified to support UTF-8 directly.  Search for
+utf8 in the code to see where changes have gone.  It also has been modified to
+short-circuit on unidirectional text.  Search for unidirectional to find that
+part.
+
+April 8, 2008
+Behdad Esfahbod
diff --git a/pango/mini-fribidi/fribidi.c b/pango/mini-fribidi/fribidi.c
new file mode 100755 (executable)
index 0000000..1da1c1f
--- /dev/null
@@ -0,0 +1,957 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 1999,2000 Dov Grobgeld, and
+ * Copyright (C) 2001,2002 Behdad Esfahbod.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public  
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,  
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of   
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License  
+ * along with this library, in a file named COPYING; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA
+ * 
+ * For licensing issues, contact <dov@imagic.weizmann.ac.il> and
+ * <fwpg@sharif.edu>.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include "fribidi.h"
+
+/* Redefine FRIBIDI_CHUNK_SIZE in config.h to override this. */
+#ifndef FRIBIDI_CHUNK_SIZE
+#ifdef MEM_OPTIMIZED
+#define FRIBIDI_CHUNK_SIZE 16
+#else
+#define FRIBIDI_CHUNK_SIZE 128
+#endif
+#endif
+
+#define DBG(s)
+#define DBG2(s, t)
+
+/*======================================================================
+ * Typedef for the run-length list.
+ *----------------------------------------------------------------------*/
+typedef struct _TypeLink TypeLink;
+
+struct _TypeLink
+{
+  TypeLink *prev;
+  TypeLink *next;
+
+  FriBidiCharType type;
+  FriBidiStrIndex pos, len;
+  FriBidiLevel level;
+};
+
+#define FRIBIDI_LEVEL_START   -1
+#define FRIBIDI_LEVEL_END     -1
+#define FRIBIDI_LEVEL_REMOVED -2
+
+typedef struct
+{
+  FriBidiCharType override;    /* only L, R and N are valid */
+  FriBidiLevel level;
+}
+LevelInfo;
+
+static TypeLink *
+new_type_link (void)
+{
+  TypeLink *link;
+
+  link = g_slice_new0 (TypeLink);
+
+  return link;
+}
+
+static void
+free_type_link (TypeLink *link)
+{
+  g_slice_free (TypeLink, link);
+}
+
+#define FRIBIDI_ADD_TYPE_LINK(p,q) \
+       do {    \
+               (p)->len = (q)->pos - (p)->pos; \
+               (p)->next = (q);        \
+               (q)->prev = (p);        \
+               (p) = (q);      \
+       } while (0)
+
+static TypeLink *
+run_length_encode_types_utf8 (const char *s,
+                             int bytelen,
+                             FriBidiStrIndex *len,
+                             FriBidiCharType *pored_types,
+                             FriBidiCharType *panded_strongs)
+{
+  TypeLink *list, *last, *link;
+  FriBidiCharType char_type;
+  FriBidiCharType ored_types = 0;
+  FriBidiCharType anded_strongs = FRIBIDI_TYPE_RLE;
+  FriBidiStrIndex i;
+  const char *p;
+
+  /* Add the starting link */
+  list = new_type_link ();
+  list->type = FRIBIDI_TYPE_SOT;
+  list->level = FRIBIDI_LEVEL_START;
+  last = list;
+
+  /* Sweep over the string s */
+  i = 0;
+  for (p = s; p < s + bytelen; p = g_utf8_next_char(p)) {
+    char_type = fribidi_get_type (g_utf8_get_char (p));
+    ored_types |= char_type;
+    if (FRIBIDI_IS_STRONG (char_type))
+      anded_strongs &= char_type;
+    if (char_type != last->type)
+      {
+       link = new_type_link ();
+       link->type = char_type;
+       link->pos = i;
+       FRIBIDI_ADD_TYPE_LINK (last, link);
+      }
+    i++;
+  }
+
+  /* Add the ending link */
+  link = new_type_link ();
+  link->type = FRIBIDI_TYPE_EOT;
+  link->level = FRIBIDI_LEVEL_END;
+  link->pos = i;
+  FRIBIDI_ADD_TYPE_LINK (last, link);
+
+  if (len)
+    *len = i;
+
+  if (pored_types)
+    *pored_types = ored_types;
+  if (panded_strongs)
+    *panded_strongs = anded_strongs; 
+
+  return list;
+}
+
+/* explicits_list is a list like type_rl_list, that holds the explicit
+   codes that are removed from rl_list, to reinsert them later by calling
+   the override_list.
+*/
+static void
+init_list (TypeLink **start,
+          TypeLink **end)
+{
+  TypeLink *list;
+  TypeLink *link;
+
+  /* Add the starting link */
+  list = new_type_link ();
+  list->type = FRIBIDI_TYPE_SOT;
+  list->level = FRIBIDI_LEVEL_START;
+  list->len = 0;
+  list->pos = 0;
+
+  /* Add the ending link */
+  link = new_type_link ();
+  link->type = FRIBIDI_TYPE_EOT;
+  link->level = FRIBIDI_LEVEL_END;
+  link->len = 0;
+  link->pos = 0;
+  list->next = link;
+  link->prev = list;
+
+  *start = list;
+  *end = link;
+}
+
+/* move an element before another element in a list, the list must have a
+   previous element, used to update explicits_list.
+   assuming that p have both prev and next or none of them, also update
+   the list that p is currently in, if any.
+*/
+static void
+move_element_before (TypeLink *p,
+                    TypeLink *list)
+{
+  if (p->prev)
+    {
+      p->prev->next = p->next;
+      p->next->prev = p->prev;
+    }
+  p->prev = list->prev;
+  list->prev->next = p;
+  p->next = list;
+  list->prev = p;
+}
+
+/* override the rl_list 'base', with the elements in the list 'over', to
+   reinsert the previously-removed explicit codes (at X9) from
+   'explicits_list' back into 'type_rl_list'. This is used at the end of I2
+   to restore the explicit marks, and also to reset the character types of
+   characters at L1.
+
+   it is assumed that the 'pos' of the first element in 'base' list is not
+   more than the 'pos' of the first element of the 'over' list, and the
+   'pos' of the last element of the 'base' list is not less than the 'pos'
+   of the last element of the 'over' list. these two conditions are always
+   satisfied for the two usages mentioned above.
+
+   TBD: use some explanatory names instead of p, q, ...
+*/
+static void
+override_list (TypeLink *base,
+              TypeLink *over)
+{
+  TypeLink *p = base, *q, *r, *s, *t;
+  FriBidiStrIndex pos = 0, pos2;
+
+  if (!over)
+    return;
+  q = over;
+  while (q)
+    {
+      if (!q->len || q->pos < pos)
+       {
+         t = q;
+         q = q->next;
+         free_type_link (t);
+         continue;
+       }
+      pos = q->pos;
+      while (p->next && p->next->pos <= pos)
+       p = p->next;
+      /* now p is the element that q must be inserted 'in'. */
+      pos2 = pos + q->len;
+      r = p;
+      while (r->next && r->next->pos < pos2)
+       r = r->next;
+      /* now r is the last element that q affects. */
+      if (p == r)
+       {
+         /* split p into at most 3 interval, and insert q in the place of
+            the second interval, set r to be the third part. */
+         /* third part needed? */
+         if (p->next && p->next->pos == pos2)
+           r = r->next;
+         else
+           {
+             r = new_type_link ();
+             *r = *p;
+             if (r->next)
+               {
+                 r->next->prev = r;
+                 r->len = r->next->pos - pos2;
+               }
+             else
+               r->len -= pos - p->pos;
+             r->pos = pos2;
+           }
+         /* first part needed? */
+         if (p->prev && p->pos == pos)
+           {
+             t = p;
+             p = p->prev;
+             free_type_link (t);
+           }
+         else
+           p->len = pos - p->pos;
+       }
+      else
+       {
+         /* cut the end of p. */
+         p->len = pos - p->pos;
+         /* if all of p is cut, remove it. */
+         if (!p->len && p->prev)
+           p = p->prev;
+
+         /* cut the begining of r. */
+         r->pos = pos2;
+         if (r->next)
+           r->len = r->next->pos - pos2;
+         /* if all of r is cut, remove it. */
+         if (!r->len && r->next)
+           r = r->next;
+
+         /* remove the elements between p and r. */
+         for (s = p->next; s != r;)
+           {
+             t = s;
+             s = s->next;
+             free_type_link (t);
+           }
+       }
+      /* before updating the next and prev links to point to the inserted q,
+         we must remember the next element of q in the 'over' list.
+       */
+      t = q;
+      q = q->next;
+      p->next = t;
+      t->prev = p;
+      t->next = r;
+      r->prev = t;
+    }
+}
+
+/* Some convenience macros */
+#define RL_TYPE(list) ((list)->type)
+#define RL_LEN(list) ((list)->len)
+#define RL_POS(list) ((list)->pos)
+#define RL_LEVEL(list) ((list)->level)
+
+static TypeLink *
+merge_with_prev (TypeLink *second)
+{
+  TypeLink *first = second->prev;
+  first->next = second->next;
+  first->next->prev = first;
+  RL_LEN (first) += RL_LEN (second);
+  free_type_link (second);
+  return first;
+}
+
+static void
+compact_list (TypeLink *list)
+{
+  if (list->next)
+    for (list = list->next; list; list = list->next)
+      if (RL_TYPE (list->prev) == RL_TYPE (list)
+         && RL_LEVEL (list->prev) == RL_LEVEL (list))
+       list = merge_with_prev (list);
+}
+
+static void
+compact_neutrals (TypeLink *list)
+{
+  if (list->next)
+    {
+      for (list = list->next; list; list = list->next)
+       {
+         if (RL_LEVEL (list->prev) == RL_LEVEL (list)
+             &&
+             ((RL_TYPE
+               (list->prev) == RL_TYPE (list)
+               || (FRIBIDI_IS_NEUTRAL (RL_TYPE (list->prev))
+                   && FRIBIDI_IS_NEUTRAL (RL_TYPE (list))))))
+           list = merge_with_prev (list);
+       }
+    }
+}
+
+/*======================================================================
+ *  Frees up the rl_list, must be called after each call to
+ *  fribidi_analyse_string(), after the list is not needed anymore.
+ *----------------------------------------------------------------------*/
+static void
+free_rl_list (TypeLink *type_rl_list)
+{
+  DBG ("Entering free_rl_list()\n");
+
+  if (!type_rl_list)
+    {
+      DBG ("Leaving free_rl_list()\n");
+      return;
+    }
+
+  g_slice_free_chain (TypeLink, type_rl_list, next);
+
+  DBG ("Leaving free_rl_list()\n");
+  return;
+}
+
+/*=========================================================================
+ * define macros for push and pop the status in to / out of the stack
+ *-------------------------------------------------------------------------*/
+
+/* There's some little points in pushing and poping into the status stack:
+   1. when the embedding level is not valid (more than UNI_MAX_BIDI_LEVEL=61),
+   you must reject it, and not to push into the stack, but when you see a
+   PDF, you must find the matching code, and if it was pushed in the stack,
+   pop it, it means you must pop if and only if you have pushed the
+   matching code, the over_pushed var counts the number of rejected codes yet.
+   2. there's a more confusing point too, when the embedding level is exactly
+   UNI_MAX_BIDI_LEVEL-1=60, an LRO or LRE must be rejected because the new
+   level would be UNI_MAX_BIDI_LEVEL+1=62, that is invalid, but an RLO or RLE
+   must be accepted because the new level is UNI_MAX_BIDI_LEVEL=61, that is
+   valid, so the rejected codes may be not continuous in the logical order,
+   in fact there is at most two continuous intervals of codes, with a RLO or
+   RLE between them.  To support this case, the first_interval var counts the
+   number of rejected codes in the first interval, when it is 0, means that
+   there is only one interval yet.
+*/
+
+/* a. If this new level would be valid, then this embedding code is valid.
+   Remember (push) the current embedding level and override status.
+   Reset current level to this new level, and reset the override status to
+   new_override.
+   b. If the new level would not be valid, then this code is invalid. Don't
+   change the current level or override status.
+*/
+#define PUSH_STATUS \
+    do { \
+      if (new_level <= UNI_MAX_BIDI_LEVEL) \
+        { \
+          if (level == UNI_MAX_BIDI_LEVEL - 1) \
+            first_interval = over_pushed; \
+          status_stack[stack_size].level = level; \
+          status_stack[stack_size].override = override; \
+          stack_size++; \
+          level = new_level; \
+          override = new_override; \
+        } else \
+         over_pushed++; \
+    } while (0)
+
+/* If there was a valid matching code, restore (pop) the last remembered
+   (pushed) embedding level and directional override.
+*/
+#define POP_STATUS \
+    do { \
+      if (over_pushed || stack_size) \
+      { \
+        if (over_pushed > first_interval) \
+          over_pushed--; \
+        else \
+          { \
+            if (over_pushed == first_interval) \
+              first_interval = 0; \
+            stack_size--; \
+            level = status_stack[stack_size].level; \
+            override = status_stack[stack_size].override; \
+          } \
+      } \
+    } while (0)
+
+/*==========================================================================
+ * There was no support for sor and eor in the absence of Explicit Embedding
+ * Levels, so define macros, to support them, with as less change as needed.
+ *--------------------------------------------------------------------------*/
+
+/* Return the type of previous char or the sor, if already at the start of
+   a run level. */
+#define PREV_TYPE_OR_SOR(pp) \
+    ( \
+     RL_LEVEL(pp->prev) == RL_LEVEL(pp) ? \
+      RL_TYPE(pp->prev) : \
+      FRIBIDI_LEVEL_TO_DIR(MAX(RL_LEVEL(pp->prev), RL_LEVEL(pp))) \
+    )
+
+/* Return the type of next char or the eor, if already at the end of
+   a run level. */
+#define NEXT_TYPE_OR_EOR(pp) \
+    ( \
+     !pp->next ? \
+      FRIBIDI_LEVEL_TO_DIR(RL_LEVEL(pp)) : \
+      (RL_LEVEL(pp->next) == RL_LEVEL(pp) ? \
+        RL_TYPE(pp->next) : \
+        FRIBIDI_LEVEL_TO_DIR(MAX(RL_LEVEL(pp->next), RL_LEVEL(pp))) \
+      ) \
+    )
+
+
+/* Return the embedding direction of a link. */
+#define FRIBIDI_EMBEDDING_DIRECTION(list) \
+    FRIBIDI_LEVEL_TO_DIR(RL_LEVEL(list))
+
+
+/*======================================================================
+ *  This function should follow the Unicode specification closely!
+ *----------------------------------------------------------------------*/
+static fribidi_boolean
+fribidi_analyse_string_utf8 (  /* input */
+                        const char *str,
+                        int bytelen,
+                        FriBidiCharType *pbase_dir,
+                        /* output */
+                        FriBidiStrIndex *len,
+                        TypeLink **ptype_rl_list,
+                        FriBidiLevel *pmax_level)
+{
+  FriBidiLevel base_level, max_level;
+  FriBidiCharType base_dir;
+  TypeLink *type_rl_list, *explicits_list, *explicits_list_end, *pp;
+
+  DBG ("Entering fribidi_analyse_string()\n");
+
+  /* Determinate character types */
+  DBG ("  Determine character types\n");
+  {
+    FriBidiCharType ored_types;
+    FriBidiCharType anded_strongs;
+
+    /* Run length encode the character types */
+    type_rl_list = run_length_encode_types_utf8 (str, bytelen, len,
+                                                &ored_types, &anded_strongs);
+
+    /* The case that all resolved levels will be ltr.
+     * First, all strongs should be ltr, and one of the following:
+     *
+     * o *pbase_dir doesn't have an rtl taste.
+     * o there are letters, and *pbase_dir is weak.
+     */
+    if (!FRIBIDI_IS_RTL (ored_types) &&
+            (!FRIBIDI_IS_RTL (*pbase_dir) ||
+             (FRIBIDI_IS_WEAK (*pbase_dir) && FRIBIDI_IS_LETTER (ored_types))
+            ))
+      {
+       /* all ltr */
+       free_rl_list (type_rl_list);
+
+       *ptype_rl_list = NULL;
+       *pmax_level = 0;
+       *pbase_dir = FRIBIDI_TYPE_LTR;
+
+       return 0;
+      }
+    /* The case that all resolved levels will be rtl is much more complex.
+     * First, there should be no numbers, all strongs be rtl, and one of
+     * the following:
+     *
+     * o *pbase_dir has an rtl taste (may be weak).
+     * o there are letters, and *pbase_dir is weak.
+     */
+    else if (!FRIBIDI_IS_NUMBER (ored_types) && FRIBIDI_IS_RTL (anded_strongs) &&
+            (FRIBIDI_IS_RTL (*pbase_dir) ||
+             (FRIBIDI_IS_WEAK (*pbase_dir) && FRIBIDI_IS_LETTER (ored_types))
+            ))
+      {
+       free_rl_list (type_rl_list);
+
+       *ptype_rl_list = NULL;
+       *pmax_level = 1;
+       *pbase_dir = FRIBIDI_TYPE_RTL;
+
+       return 0;
+      }
+  }
+  DBG ("  Determine character types, Done\n");
+
+  init_list (&explicits_list, &explicits_list_end);
+
+  /* Find base level */
+  DBG ("  Finding the base level\n");
+  if (FRIBIDI_IS_STRONG (*pbase_dir))
+    base_level = FRIBIDI_DIR_TO_LEVEL (*pbase_dir);
+  /* P2. P3. Search for first strong character and use its direction as
+     base direction */
+  else
+    {
+      /* If no strong base_dir was found, resort to the weak direction
+         that was passed on input. */
+      base_level = FRIBIDI_DIR_TO_LEVEL (*pbase_dir);
+      base_dir = FRIBIDI_TYPE_ON;
+      for (pp = type_rl_list; pp; pp = pp->next)
+       if (FRIBIDI_IS_LETTER (RL_TYPE (pp)))
+         {
+           base_level = FRIBIDI_DIR_TO_LEVEL (RL_TYPE (pp));
+           base_dir = FRIBIDI_LEVEL_TO_DIR (base_level);
+           break;
+         }
+    }
+  base_dir = FRIBIDI_LEVEL_TO_DIR (base_level);
+  DBG2 ("  Base level : %c\n", fribidi_char_from_level (base_level));
+  DBG2 ("  Base dir   : %c\n", fribidi_char_from_type (base_dir));
+  DBG ("  Finding the base level, Done\n");
+
+  /* Explicit Levels and Directions */
+  DBG ("Explicit Levels and Directions\n");
+  {
+    /* X1. Begin by setting the current embedding level to the paragraph
+       embedding level. Set the directional override status to neutral.
+       Process each character iteratively, applying rules X2 through X9.
+       Only embedding levels from 0 to 61 are valid in this phase. */
+    FriBidiLevel level, new_level;
+    FriBidiCharType override, new_override;
+    FriBidiStrIndex i;
+    int stack_size, over_pushed, first_interval;
+    LevelInfo *status_stack;
+    TypeLink temp_link;
+
+    level = base_level;
+    override = FRIBIDI_TYPE_ON;
+    /* stack */
+    stack_size = 0;
+    over_pushed = 0;
+    first_interval = 0;
+    status_stack =
+      (LevelInfo *) malloc (sizeof (LevelInfo) * (UNI_MAX_BIDI_LEVEL + 2));
+
+    for (pp = type_rl_list->next; pp->next; pp = pp->next)
+      {
+       FriBidiCharType this_type = RL_TYPE (pp);
+       if (FRIBIDI_IS_EXPLICIT_OR_BN (this_type))
+         {
+           if (FRIBIDI_IS_STRONG (this_type))
+             {                 /* LRE, RLE, LRO, RLO */
+               /* 1. Explicit Embeddings */
+               /*   X2. With each RLE, compute the least greater odd embedding level. */
+               /*   X3. With each LRE, compute the least greater even embedding level. */
+               /* 2. Explicit Overrides */
+               /*   X4. With each RLO, compute the least greater odd embedding level. */
+               /*   X5. With each LRO, compute the least greater even embedding level. */
+               new_override = FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR (this_type);
+               for (i = 0; i < RL_LEN (pp); i++)
+                 {
+                   new_level =
+                     ((level + FRIBIDI_DIR_TO_LEVEL (this_type) + 2) & ~1) -
+                     FRIBIDI_DIR_TO_LEVEL (this_type);
+                   PUSH_STATUS;
+                 }
+             }
+           else if (this_type == FRIBIDI_TYPE_PDF)
+             {
+               /* 3. Terminating Embeddings and overrides */
+               /*   X7. With each PDF, determine the matching embedding or
+                  override code. */
+               for (i = 0; i < RL_LEN (pp); i++)
+                 POP_STATUS;
+             }
+           /* X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. */
+           /* Remove element and add it to explicits_list */
+           temp_link.next = pp->next;
+           pp->level = FRIBIDI_LEVEL_REMOVED;
+           move_element_before (pp, explicits_list_end);
+           pp = &temp_link;
+         }
+       else
+         {
+           /* X6. For all typed besides RLE, LRE, RLO, LRO, and PDF:
+              a. Set the level of the current character to the current
+              embedding level.
+              b. Whenever the directional override status is not neutral,
+              reset the current character type to the directional override
+              status. */
+           RL_LEVEL (pp) = level;
+           if (!FRIBIDI_IS_NEUTRAL (override))
+             RL_TYPE (pp) = override;
+         }
+       /* X8. All explicit directional embeddings and overrides are
+          completely terminated at the end of each paragraph. Paragraph
+          separators are not included in the embedding. */
+       /* This function is running on a single paragraph, so we can do
+          X8 after all the input is processed. */
+      }
+
+    /* Implementing X8. It has no effect on a single paragraph! */
+    level = base_level;
+    override = FRIBIDI_TYPE_ON;
+    stack_size = 0;
+    over_pushed = 0;
+
+    free (status_stack);
+  }
+  /* X10. The remaining rules are applied to each run of characters at the
+     same level. For each run, determine the start-of-level-run (sor) and
+     end-of-level-run (eor) type, either L or R. This depends on the
+     higher of the two levels on either side of the boundary (at the start
+     or end of the paragraph, the level of the 'other' run is the base
+     embedding level). If the higher level is odd, the type is R, otherwise
+     it is L. */
+  /* Resolving Implicit Levels can be done out of X10 loop, so only change
+     of Resolving Weak Types and Resolving Neutral Types is needed. */
+
+  compact_list (type_rl_list);
+
+  /* 4. Resolving weak types */
+  DBG ("Resolving weak types\n");
+  {
+    FriBidiCharType last_strong, prev_type_org;
+    fribidi_boolean w4;
+
+    last_strong = base_dir;
+
+    for (pp = type_rl_list->next; pp->next; pp = pp->next)
+      {
+       FriBidiCharType prev_type, this_type, next_type;
+
+       prev_type = PREV_TYPE_OR_SOR (pp);
+       this_type = RL_TYPE (pp);
+       next_type = NEXT_TYPE_OR_EOR (pp);
+
+       if (FRIBIDI_IS_STRONG (prev_type))
+         last_strong = prev_type;
+
+       /* W1. NSM
+          Examine each non-spacing mark (NSM) in the level run, and change the
+          type of the NSM to the type of the previous character. If the NSM
+          is at the start of the level run, it will get the type of sor. */
+       /* Implementation note: it is important that if the previous character
+          is not sor, then we should merge this run with the previous,
+          because of rules like W5, that we assume all of a sequence of
+          adjacent ETs are in one TypeLink. */
+       if (this_type == FRIBIDI_TYPE_NSM)
+         {
+           if (RL_LEVEL (pp->prev) == RL_LEVEL (pp))
+             pp = merge_with_prev (pp);
+           else
+             RL_TYPE (pp) = prev_type;
+           continue;           /* As we know the next condition cannot be true. */
+         }
+
+       /* W2: European numbers. */
+       if (this_type == FRIBIDI_TYPE_EN && last_strong == FRIBIDI_TYPE_AL)
+         {
+           RL_TYPE (pp) = FRIBIDI_TYPE_AN;
+
+           /* Resolving dependency of loops for rules W1 and W2, so we
+              can merge them in one loop. */
+           if (next_type == FRIBIDI_TYPE_NSM)
+             RL_TYPE (pp->next) = FRIBIDI_TYPE_AN;
+         }
+      }
+
+
+    last_strong = base_dir;
+    /* Resolving dependency of loops for rules W4 and W5, W5 may
+       want to prevent W4 to take effect in the next turn, do this 
+       through "w4". */
+    w4 = FRIBIDI_TRUE;
+    /* Resolving dependency of loops for rules W4 and W5 with W7,
+       W7 may change an EN to L but it sets the prev_type_org if needed,
+       so W4 and W5 in next turn can still do their works. */
+    prev_type_org = FRIBIDI_TYPE_ON;
+
+    for (pp = type_rl_list->next; pp->next; pp = pp->next)
+      {
+       FriBidiCharType prev_type, this_type, next_type;
+
+       prev_type = PREV_TYPE_OR_SOR (pp);
+       this_type = RL_TYPE (pp);
+       next_type = NEXT_TYPE_OR_EOR (pp);
+
+       if (FRIBIDI_IS_STRONG (prev_type))
+         last_strong = prev_type;
+
+       /* W3: Change ALs to R. */
+       if (this_type == FRIBIDI_TYPE_AL)
+         {
+           RL_TYPE (pp) = FRIBIDI_TYPE_RTL;
+           w4 = FRIBIDI_TRUE;
+           prev_type_org = FRIBIDI_TYPE_ON;
+           continue;
+         }
+
+       /* W4. A single european separator changes to a european number.
+          A single common separator between two numbers of the same type
+          changes to that type. */
+       if (w4
+           && RL_LEN (pp) == 1 && FRIBIDI_IS_ES_OR_CS (this_type)
+           && FRIBIDI_IS_NUMBER (prev_type_org) && prev_type_org == next_type
+           && (prev_type_org == FRIBIDI_TYPE_EN
+               || this_type == FRIBIDI_TYPE_CS))
+         {
+           RL_TYPE (pp) = prev_type;
+           this_type = RL_TYPE (pp);
+         }
+       w4 = FRIBIDI_TRUE;
+
+       /* W5. A sequence of European terminators adjacent to European
+          numbers changes to All European numbers. */
+       if (this_type == FRIBIDI_TYPE_ET
+           && (prev_type_org == FRIBIDI_TYPE_EN
+               || next_type == FRIBIDI_TYPE_EN))
+         {
+           RL_TYPE (pp) = FRIBIDI_TYPE_EN;
+           w4 = FRIBIDI_FALSE;
+           this_type = RL_TYPE (pp);
+         }
+
+       /* W6. Otherwise change separators and terminators to other neutral. */
+       if (FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR (this_type))
+         RL_TYPE (pp) = FRIBIDI_TYPE_ON;
+
+       /* W7. Change european numbers to L. */
+       if (this_type == FRIBIDI_TYPE_EN && last_strong == FRIBIDI_TYPE_LTR)
+         {
+           RL_TYPE (pp) = FRIBIDI_TYPE_LTR;
+           prev_type_org = (RL_LEVEL (pp) == RL_LEVEL (pp->next) ?
+                            FRIBIDI_TYPE_EN : FRIBIDI_TYPE_ON);
+         }
+       else
+         prev_type_org = PREV_TYPE_OR_SOR (pp->next);
+      }
+  }
+
+  compact_neutrals (type_rl_list);
+
+  /* 5. Resolving Neutral Types */
+  DBG ("Resolving neutral types\n");
+  {
+    /* N1. and N2.
+       For each neutral, resolve it. */
+    for (pp = type_rl_list->next; pp->next; pp = pp->next)
+      {
+       FriBidiCharType prev_type, this_type, next_type;
+
+       /* "European and arabic numbers are treated as though they were R"
+          FRIBIDI_CHANGE_NUMBER_TO_RTL does this. */
+       this_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (RL_TYPE (pp));
+       prev_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (PREV_TYPE_OR_SOR (pp));
+       next_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (NEXT_TYPE_OR_EOR (pp));
+
+       if (FRIBIDI_IS_NEUTRAL (this_type))
+         RL_TYPE (pp) = (prev_type == next_type) ?
+           /* N1. */ prev_type :
+           /* N2. */ FRIBIDI_EMBEDDING_DIRECTION (pp);
+      }
+  }
+
+  compact_list (type_rl_list);
+
+  /* 6. Resolving implicit levels */
+  DBG ("Resolving implicit levels\n");
+  {
+    max_level = base_level;
+
+    for (pp = type_rl_list->next; pp->next; pp = pp->next)
+      {
+       FriBidiCharType this_type;
+       int level;
+
+       this_type = RL_TYPE (pp);
+       level = RL_LEVEL (pp);
+
+       /* I1. Even */
+       /* I2. Odd */
+       if (FRIBIDI_IS_NUMBER (this_type))
+         RL_LEVEL (pp) = (level + 2) & ~1;
+       else
+         RL_LEVEL (pp) = (level ^ FRIBIDI_DIR_TO_LEVEL (this_type)) +
+           (level & 1);
+
+       if (RL_LEVEL (pp) > max_level)
+         max_level = RL_LEVEL (pp);
+      }
+  }
+
+  compact_list (type_rl_list);
+
+/* Reinsert the explicit codes & bn's that already removed, from the
+   explicits_list to type_rl_list. */
+  DBG ("Reinserting explicit codes\n");
+  {
+    TypeLink *p;
+
+    override_list (type_rl_list, explicits_list);
+    p = type_rl_list->next;
+    if (p->level < 0)
+      p->level = base_level;
+    for (; p->next; p = p->next)
+      if (p->level < 0)
+       p->level = p->prev->level;
+  }
+
+  DBG ("Reset the embedding levels\n");
+  {
+    int j, k, state, pos;
+    TypeLink *p, *q, *list, *list_end;
+
+    const char *strp = str + bytelen;
+
+    /* L1. Reset the embedding levels of some chars. */
+    init_list (&list, &list_end);
+    q = list_end;
+    state = 1;
+    pos = *len - 1;
+    for (j = *len - 1; j >= -1; j--)
+      {
+       /* if state is on at the very first of string, do this too. */
+       if (j >= 0)
+         k = fribidi_get_type (g_utf8_get_char (strp = g_utf8_prev_char (strp)));
+       else
+         k = FRIBIDI_TYPE_ON;
+       if (!state && FRIBIDI_IS_SEPARATOR (k))
+         {
+           state = 1;
+           pos = j;
+         }
+       else if (state && !FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS (k))
+         {
+           state = 0;
+           p = new_type_link ();
+           p->prev = p->next = NULL;
+           p->pos = j + 1;
+           p->len = pos - j;
+           p->type = base_dir;
+           p->level = base_level;
+           move_element_before (p, q);
+           q = p;
+         }
+      }
+    override_list (type_rl_list, list);
+  }
+
+  *ptype_rl_list = type_rl_list;
+  *pmax_level = max_level;
+  *pbase_dir = base_dir;
+
+  DBG ("Leaving fribidi_analyse_string()\n");
+  return 1;
+}
+
+/*======================================================================
+ *  fribidi_log2vis_get_embedding_levels() is used in order to just get
+ *  the embedding levels.
+ *----------------------------------------------------------------------*/
+FRIBIDI_API FriBidiLevel *
+fribidi_log2vis_get_embedding_levels_new_utf8 (        /* input */
+                                      const char *str,
+                                      int bytelen,
+                                      FriBidiCharType *pbase_dir)
+{
+  TypeLink *type_rl_list, *pp;
+  FriBidiLevel max_level, *embedding_level_list;
+  FriBidiStrIndex len;
+
+  DBG ("Entering fribidi_log2vis_get_embedding_levels()\n");
+
+  if (bytelen == 0)
+    {
+      DBG ("Leaving fribidi_log2vis_get_embedding_levels()\n");
+      return NULL;
+    }
+
+  if (!fribidi_analyse_string_utf8 (str, bytelen, pbase_dir,
+                         /* output */
+                         &len, &type_rl_list, &max_level))
+    {
+     /* unidirectional.  return all-zero or all-one embedding levels */
+
+     if (max_level)
+       {
+         embedding_level_list = g_new (FriBidiLevel, len);
+        /* assumes sizeof(FriBidiLevel) == 1, which is true! */
+        memset (embedding_level_list, max_level, len);
+        return embedding_level_list;
+       }
+     else
+       {
+         return g_new0 (FriBidiLevel, len);
+       }
+    }
+
+  embedding_level_list = g_new (FriBidiLevel, len);
+  for (pp = type_rl_list->next; pp->next; pp = pp->next)
+    {
+      FriBidiStrIndex i, pos = RL_POS (pp), len = RL_LEN (pp);
+      FriBidiLevel level = RL_LEVEL (pp);
+      for (i = 0; i < len; i++)
+       embedding_level_list[pos + i] = level;
+    }
+
+  free_rl_list (type_rl_list);
+
+  DBG ("Leaving fribidi_log2vis_get_embedding_levels()\n");
+  return embedding_level_list;
+}
+
diff --git a/pango/mini-fribidi/fribidi.h b/pango/mini-fribidi/fribidi.h
new file mode 100755 (executable)
index 0000000..cdfec5c
--- /dev/null
@@ -0,0 +1,56 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 1999,2000 Dov Grobgeld, and
+ * Copyright (C) 2001,2002 Behdad Esfahbod. 
+ * 
+ * This library is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU Lesser General Public 
+ * License as published by the Free Software Foundation; either 
+ * version 2.1 of the License, or (at your option) any later version. 
+ * 
+ * This library is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+ * Lesser General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU Lesser General Public License 
+ * along with this library, in a file named COPYING; if not, write to the 
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
+ * Boston, MA 02111-1307, USA  
+ * 
+ * For licensing issues, contact <dov@imagic.weizmann.ac.il> and 
+ * <fwpg@sharif.edu>. 
+ */
+
+#ifndef FRIBIDI_H
+#define FRIBIDI_H
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "fribidi_config.h"
+#include "fribidi_types.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define FRIBIDI_HAVE_UTF8
+
+  FRIBIDI_API FriBidiLevel *fribidi_log2vis_get_embedding_levels_new_utf8 (    /* input */
+                                                                    const char *str,
+                                                                    int bytelen,
+                                                                    FriBidiCharType
+                                                                    *pbase_dir);
+
+/*======================================================================
+ *  fribidi_get_type() returns bidi type of a character.
+ *----------------------------------------------------------------------*/
+  FRIBIDI_API FriBidiCharType fribidi_get_type (FriBidiChar uch);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                         /* FRIBIDI_H */
diff --git a/pango/mini-fribidi/fribidi_char_type.c b/pango/mini-fribidi/fribidi_char_type.c
new file mode 100755 (executable)
index 0000000..3ad2fcb
--- /dev/null
@@ -0,0 +1,75 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 2001,2002 Behdad Esfahbod. 
+ * 
+ * This library is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU Lesser General Public 
+ * License as published by the Free Software Foundation; either 
+ * version 2.1 of the License, or (at your option) any later version. 
+ * 
+ * This library is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+ * Lesser General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU Lesser General Public License 
+ * along with this library, in a file named COPYING; if not, write to the 
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
+ * Boston, MA 02111-1307, USA  
+ * 
+ * For licensing issues, contact <fwpg@sharif.edu>. 
+ */
+
+#include "config.h"
+#include "fribidi.h"
+
+#ifdef MEM_OPTIMIZED
+
+#if   HAS_FRIBIDI_TAB_CHAR_TYPE_9_I
+#include "fribidi_tab_char_type_9.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_8_I
+#include "fribidi_tab_char_type_8.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_7_I
+#include "fribidi_tab_char_type_7.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_6_I
+#include "fribidi_tab_char_type_6.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_5_I
+#include "fribidi_tab_char_type_5.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_4_I
+#include "fribidi_tab_char_type_4.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_3_I
+#include "fribidi_tab_char_type_3.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_2_I
+#include "fribidi_tab_char_type_2.i"
+#else
+#error You have no fribidi_tab_char_type_*.i file, please first make one by \
+       make fribidi_tab_char_type_n.i which n is the compress level, a digit \
+       between 2 and 9, or simply run make fribidi_tab_char_type_small, \
+       retry to make.
+#endif
+
+#else
+
+#if   HAS_FRIBIDI_TAB_CHAR_TYPE_2_I
+#include "fribidi_tab_char_type_2.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_3_I
+#include "fribidi_tab_char_type_3.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_4_I
+#include "fribidi_tab_char_type_4.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_5_I
+#include "fribidi_tab_char_type_5.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_6_I
+#include "fribidi_tab_char_type_6.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_7_I
+#include "fribidi_tab_char_type_7.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_8_I
+#include "fribidi_tab_char_type_8.i"
+#elif HAS_FRIBIDI_TAB_CHAR_TYPE_9_I
+#include "fribidi_tab_char_type_9.i"
+#else
+#error You have no fribidi_tab_char_type_*.i file, please first make one by \
+       make fribidi_tab_char_type_n.i which n is the compress level, a digit \
+       between 2 and 9, or simply run make fribidi_tab_char_type_large, \
+       retry to make.
+#endif
+
+#endif
diff --git a/pango/mini-fribidi/fribidi_config.h b/pango/mini-fribidi/fribidi_config.h
new file mode 100755 (executable)
index 0000000..82e4da1
--- /dev/null
@@ -0,0 +1,24 @@
+#include <glib.h>
+
+#define FRIBIDI_TRUE    TRUE
+#define FRIBIDI_FALSE   FALSE
+#define HAS_FRIBIDI_TAB_CHAR_TYPE_2_I 1
+#define FRIBIDI_API
+
+/* this was in fribidi_unicode.h.  we only need these bits from that
+ * file, so moved here. */
+#define UNI_MAX_BIDI_LEVEL 61
+
+/* ripped off debugging functions, make sure it's not triggerred. */
+#undef DEBUG
+
+/* g_malloc and g_free verbatim */
+#define malloc g_malloc
+#define free g_free
+
+/* rename symbols to pango internal namespace */
+#define fribidi_log2vis_get_embedding_levels_new_utf8 _pango_fribidi_log2vis_get_embedding_levels_new_utf8
+#define fribidi_prop_to_type _pango_fribidi_prop_to_type
+#define fribidi_get_type _pango_fribidi_get_type
+#define fribidi_get_type_internal fribidi_get_type
+
diff --git a/pango/mini-fribidi/fribidi_tab_char_type_2.i b/pango/mini-fribidi/fribidi_tab_char_type_2.i
new file mode 100755 (executable)
index 0000000..6808403
--- /dev/null
@@ -0,0 +1,5721 @@
+/*
+  This file was automatically created from UnicodeData.txt version 5.1.0
+  by fribidi_create_char_types
+*/
+
+#ifndef FRIBIDI_TAB_CHAR_TYPE_2_I
+#define FRIBIDI_TAB_CHAR_TYPE_2_I
+
+#include "fribidi.h"
+
+#define LTR FRIBIDI_PROP_TYPE_LTR
+#define RTL FRIBIDI_PROP_TYPE_RTL
+#define AL FRIBIDI_PROP_TYPE_AL
+#define ON FRIBIDI_PROP_TYPE_ON
+#define BN FRIBIDI_PROP_TYPE_BN
+#define AN FRIBIDI_PROP_TYPE_AN
+#define BS FRIBIDI_PROP_TYPE_BS
+#define CS FRIBIDI_PROP_TYPE_CS
+#define EN FRIBIDI_PROP_TYPE_EN
+#define ES FRIBIDI_PROP_TYPE_ES
+#define ET FRIBIDI_PROP_TYPE_ET
+#define LRE FRIBIDI_PROP_TYPE_LRE
+#define LRO FRIBIDI_PROP_TYPE_LRO
+#define NSM FRIBIDI_PROP_TYPE_NSM
+#define PDF FRIBIDI_PROP_TYPE_PDF
+#define RLE FRIBIDI_PROP_TYPE_RLE
+#define RLO FRIBIDI_PROP_TYPE_RLO
+#define SS FRIBIDI_PROP_TYPE_SS
+#define WS FRIBIDI_PROP_TYPE_WS
+
+#define PACKTAB_UINT8 fribidi_uint8
+#define PACKTAB_UINT16 fribidi_uint16
+#define PACKTAB_UINT32 fribidi_uint32
+/*
+  Automatically generated by packtab.c version 2
+
+  just use FRIBIDI_GET_TYPE(key)
+
+  assumed sizeof(FriBidiPropCharType) == 1
+  required memory: 25856
+  lookups: 2
+  partition shape: FriBidiPropertyBlock[4352][256]
+  different table entries: 1 67
+*/
+
+/* *INDENT-OFF* */
+
+static const FriBidiPropCharType FriBidiPropertyBlockLevel1[256*67] = {
+
+#define FriBidiPropertyBlockLevel1_0000 0x0
+
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, SS, BS, SS, WS, BS, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BS, BS, BS, SS,
+   WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, BN,
+   BN, BN, BN, BN, BN, BS, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   CS, ON, ET, ET, ET, ET, ON, ON, ON, ON,LTR, ON, ON, BN, ON, ON,
+   ET, ET, EN, EN, ON,LTR, ON, ON, ON, EN,LTR, ON, ON, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0100 0x100
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0200 0x200
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+  LTR,LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_0300 0x300
+
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  LTR,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,
+  LTR,LTR,LTR,LTR, ON, ON,LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0400 0x400
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0500 0x500
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,LTR,
+  RTL,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,RTL,NSM,
+  RTL,NSM,NSM,RTL,NSM,NSM,RTL,NSM,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+
+#define FriBidiPropertyBlockLevel1_0600 0x600
+
+   AN, AN, AN, AN, AL, AL, ON, ON, AL, ET, ET, AL, CS, AL, ON, ON,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM, AL,
+   AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, ET, AN, AN, AL, AL, AL,
+  NSM, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL,NSM,NSM,NSM,NSM,NSM,NSM,NSM, AN,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM, AL, AL,NSM,NSM, ON,NSM,NSM,NSM,NSM, AL, AL,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, AL, AL, AL, AL, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_0700 0x700
+
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, BN,
+   AL,NSM, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,RTL,RTL, ON, ON, ON, ON,RTL,RTL,RTL,RTL,RTL,RTL,
+
+#define FriBidiPropertyBlockLevel1_0800 0x800
+
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+
+#define FriBidiPropertyBlockLevel1_0900 0x900
+
+  LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR, ET, ET,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0A00 0xA00
+
+  LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+  LTR,NSM,NSM,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,NSM,NSM,NSM,LTR,LTR,
+  LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR, ET,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0B00 0xB00
+
+  LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,NSM,
+  LTR,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ET, ON,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0C00 0xC00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,
+  NSM,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,LTR,NSM,NSM,NSM,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ON,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0D00 0xD00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,NSM,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0E00 0xE00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR, ET,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_0F00 0xF00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,NSM,LTR,NSM,LTR,NSM, ON, ON, ON, ON,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,
+  NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1000 0x1000
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,
+  NSM,LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,NSM,NSM,LTR,LTR,NSM,NSM,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,NSM,NSM,
+  NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1300 0x1100
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1600 0x1200
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   WS,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1700 0x1300
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ET,LTR,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1800 0x1400
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,NSM,NSM,NSM, WS,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1900 0x1500
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,NSM,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,LTR,LTR,LTR,LTR,
+   ON,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_1A00 0x1600
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1B00 0x1700
+
+  NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,NSM,LTR,NSM,NSM,NSM,NSM,NSM,LTR,NSM,LTR,LTR,LTR,
+  LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,NSM,NSM,NSM,NSM,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1C00 0x1800
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1D00 0x1900
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,
+
+#define FriBidiPropertyBlockLevel1_1F00 0x1A00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR, ON,
+   ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,
+
+#define FriBidiPropertyBlockLevel1_2000 0x1B00
+
+   WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN,LTR,RTL,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, WS, BS,LRE,RLE,PDF,LRO,RLO, CS,
+   ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   EN,LTR,LTR,LTR, EN, EN, EN, EN, EN, EN, ES, ES, ON, ON, ON,LTR,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, ES, ES, ON, ON, ON,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET, ET,
+   ET, ET, ET, ET, ET, ET,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2100 0x1C00
+
+   ON, ON,LTR, ON, ON, ON, ON,LTR, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR, ON,LTR, ON, ON, ON,LTR,LTR,LTR,LTR,LTR, ON, ON,
+   ON, ON, ON, ON,LTR, ON,LTR, ON,LTR, ON,LTR,LTR,LTR,LTR, ET,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON,LTR,LTR,
+  LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2200 0x1D00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ES, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2300 0x1E00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON,LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2400 0x1F00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, EN, EN, EN, EN, EN, EN, EN, EN,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2500 0x2000
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2600 0x2100
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,
+   ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2700 0x2200
+
+  LTR, ON, ON, ON, ON,LTR, ON, ON, ON, ON,LTR,LTR, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON,LTR, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR, ON,LTR, ON,
+   ON, ON, ON,LTR,LTR,LTR, ON,LTR, ON, ON, ON, ON, ON, ON, ON,LTR,
+  LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+  LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR, ON,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2B00 0x2300
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2C00 0x2400
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_2D00 0x2500
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+
+#define FriBidiPropertyBlockLevel1_2E00 0x2600
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_2F00 0x2700
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_3000 0x2800
+
+   WS, ON, ON, ON, ON,LTR,LTR,LTR, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,
+   ON,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,LTR,LTR,LTR,LTR, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM, ON, ON,LTR,LTR,LTR,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_3100 0x2900
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_3200 0x2A00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_3300 0x2B00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,
+
+#define FriBidiPropertyBlockLevel1_4D00 0x2C00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+
+#define FriBidiPropertyBlockLevel1_A400 0x2D00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_A600 0x2E00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,
+  NSM,NSM,NSM, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM, ON, ON,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_A700 0x2F00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_A800 0x3000
+
+  LTR,LTR,NSM,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,NSM,NSM,LTR, ON, ON, ON, ON,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_A900 0x3100
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_AA00 0x3200
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,LTR,
+  LTR,NSM,NSM,LTR,LTR,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_FB00 0x3300
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,RTL,NSM,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL, ES,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_FC00 0x3400
+
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_FD00 0x3500
+
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, ON, ON,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, ON, AL, AL,
+
+#define FriBidiPropertyBlockLevel1_FE00 0x3600
+
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   CS, ON, CS,LTR, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ET,
+   ON, ON, ES, ES, ON, ON, ON,LTR, ON, ET, ET, ON,LTR,LTR,LTR,LTR,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL,
+   AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, AL, BN,
+
+#define FriBidiPropertyBlockLevel1_FF00 0x3700
+
+  LTR, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON,
+   ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ET, ET, ON, ON, ON, ET, ET,LTR, ON, ON, ON, ON, ON, ON, ON,LTR,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, ON, ON, ON, ON, ON, BN, BN,
+
+#define FriBidiPropertyBlockLevel1_10100 0x3800
+
+  LTR, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_10900 0x3900
+
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL, ON,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+
+#define FriBidiPropertyBlockLevel1_10A00 0x3A00
+
+  RTL,NSM,NSM,NSM,RTL,NSM,NSM,RTL,RTL,RTL,RTL,RTL,NSM,NSM,NSM,NSM,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,NSM,NSM,NSM,RTL,RTL,RTL,RTL,NSM,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+  RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,RTL,
+
+#define FriBidiPropertyBlockLevel1_1D100 0x3B00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR, BN, BN, BN, BN, BN, BN, BN, BN,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,LTR,LTR,NSM,NSM,NSM,NSM,NSM,NSM,NSM,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,NSM,NSM,NSM,NSM,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1D200 0x3C00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON,NSM,NSM,NSM, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1D300 0x3D00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1D700 0x3E00
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, EN, EN,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN,
+   EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN,
+
+#define FriBidiPropertyBlockLevel1_1F000 0x3F00
+
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,LTR,LTR,LTR,LTR,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,
+   ON, ON, ON, ON,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+
+#define FriBidiPropertyBlockLevel1_1FF00 0x4000
+
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,
+  LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR,LTR, BN, BN,
+
+#define FriBidiPropertyBlockLevel1_E0000 0x4100
+
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+
+#define FriBidiPropertyBlockLevel1_E0100 0x4200
+
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+  NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,NSM,
+   BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,
+};
+
+static const PACKTAB_UINT16 FriBidiPropertyBlockLevel0[4352*1] = {
+
+#define FriBidiPropertyBlockLevel0_0000 0x0
+
+  FriBidiPropertyBlockLevel1_0000,  /* 0000..00FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 0100..01FF */
+  FriBidiPropertyBlockLevel1_0200,  /* 0200..02FF */
+  FriBidiPropertyBlockLevel1_0300,  /* 0300..03FF */
+  FriBidiPropertyBlockLevel1_0400,  /* 0400..04FF */
+  FriBidiPropertyBlockLevel1_0500,  /* 0500..05FF */
+  FriBidiPropertyBlockLevel1_0600,  /* 0600..06FF */
+  FriBidiPropertyBlockLevel1_0700,  /* 0700..07FF */
+  FriBidiPropertyBlockLevel1_0800,  /* 0800..08FF */
+  FriBidiPropertyBlockLevel1_0900,  /* 0900..09FF */
+  FriBidiPropertyBlockLevel1_0A00,  /* 0A00..0AFF */
+  FriBidiPropertyBlockLevel1_0B00,  /* 0B00..0BFF */
+  FriBidiPropertyBlockLevel1_0C00,  /* 0C00..0CFF */
+  FriBidiPropertyBlockLevel1_0D00,  /* 0D00..0DFF */
+  FriBidiPropertyBlockLevel1_0E00,  /* 0E00..0EFF */
+  FriBidiPropertyBlockLevel1_0F00,  /* 0F00..0FFF */
+  FriBidiPropertyBlockLevel1_1000,  /* 1000..10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1100..11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1200..12FF */
+  FriBidiPropertyBlockLevel1_1300,  /* 1300..13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1400..14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1500..15FF */
+  FriBidiPropertyBlockLevel1_1600,  /* 1600..16FF */
+  FriBidiPropertyBlockLevel1_1700,  /* 1700..17FF */
+  FriBidiPropertyBlockLevel1_1800,  /* 1800..18FF */
+  FriBidiPropertyBlockLevel1_1900,  /* 1900..19FF */
+  FriBidiPropertyBlockLevel1_1A00,  /* 1A00..1AFF */
+  FriBidiPropertyBlockLevel1_1B00,  /* 1B00..1BFF */
+  FriBidiPropertyBlockLevel1_1C00,  /* 1C00..1CFF */
+  FriBidiPropertyBlockLevel1_1D00,  /* 1D00..1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E00..1EFF */
+  FriBidiPropertyBlockLevel1_1F00,  /* 1F00..1FFF */
+  FriBidiPropertyBlockLevel1_2000,  /* 2000..20FF */
+  FriBidiPropertyBlockLevel1_2100,  /* 2100..21FF */
+  FriBidiPropertyBlockLevel1_2200,  /* 2200..22FF */
+  FriBidiPropertyBlockLevel1_2300,  /* 2300..23FF */
+  FriBidiPropertyBlockLevel1_2400,  /* 2400..24FF */
+  FriBidiPropertyBlockLevel1_2500,  /* 2500..25FF */
+  FriBidiPropertyBlockLevel1_2600,  /* 2600..26FF */
+  FriBidiPropertyBlockLevel1_2700,  /* 2700..27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2800..28FF */
+  FriBidiPropertyBlockLevel1_2500,  /* 2900..29FF */
+  FriBidiPropertyBlockLevel1_2500,  /* 2A00..2AFF */
+  FriBidiPropertyBlockLevel1_2B00,  /* 2B00..2BFF */
+  FriBidiPropertyBlockLevel1_2C00,  /* 2C00..2CFF */
+  FriBidiPropertyBlockLevel1_2D00,  /* 2D00..2DFF */
+  FriBidiPropertyBlockLevel1_2E00,  /* 2E00..2EFF */
+  FriBidiPropertyBlockLevel1_2F00,  /* 2F00..2FFF */
+  FriBidiPropertyBlockLevel1_3000,  /* 3000..30FF */
+  FriBidiPropertyBlockLevel1_3100,  /* 3100..31FF */
+  FriBidiPropertyBlockLevel1_3200,  /* 3200..32FF */
+  FriBidiPropertyBlockLevel1_3300,  /* 3300..33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3400..34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3500..35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3600..36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3700..37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3800..38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3900..39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A00..3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B00..3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C00..3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D00..3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E00..3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F00..3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4000..40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4100..41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4200..42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4300..43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4400..44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4500..45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4600..46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4700..47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4800..48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4900..49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A00..4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B00..4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C00..4CFF */
+  FriBidiPropertyBlockLevel1_4D00,  /* 4D00..4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E00..4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F00..4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5000..50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5100..51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5200..52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5300..53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5400..54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5500..55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5600..56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5700..57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5800..58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5900..59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A00..5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B00..5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C00..5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D00..5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E00..5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F00..5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6000..60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6100..61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6200..62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6300..63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6400..64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6500..65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6600..66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6700..67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6800..68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6900..69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A00..6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B00..6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C00..6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D00..6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E00..6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F00..6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7000..70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7100..71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7200..72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7300..73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7400..74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7500..75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7600..76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7700..77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7800..78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7900..79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A00..7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B00..7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C00..7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D00..7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E00..7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F00..7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8000..80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8100..81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8200..82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8300..83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8400..84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8500..85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8600..86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8700..87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8800..88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8900..89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A00..8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B00..8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C00..8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D00..8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E00..8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F00..8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9000..90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9100..91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9200..92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9300..93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9400..94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9500..95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9600..96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9700..97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9800..98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9900..99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A00..9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B00..9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C00..9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D00..9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E00..9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F00..9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A000..A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A100..A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A200..A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A300..A3FF */
+  FriBidiPropertyBlockLevel1_A400,  /* A400..A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A500..A5FF */
+  FriBidiPropertyBlockLevel1_A600,  /* A600..A6FF */
+  FriBidiPropertyBlockLevel1_A700,  /* A700..A7FF */
+  FriBidiPropertyBlockLevel1_A800,  /* A800..A8FF */
+  FriBidiPropertyBlockLevel1_A900,  /* A900..A9FF */
+  FriBidiPropertyBlockLevel1_AA00,  /* AA00..AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB00..ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC00..ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD00..ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE00..AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF00..AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B000..B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B100..B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B200..B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B300..B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B400..B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B500..B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B600..B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B700..B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B800..B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B900..B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA00..BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB00..BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC00..BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD00..BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE00..BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF00..BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C000..C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C100..C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C200..C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C300..C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C400..C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C500..C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C600..C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C700..C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C800..C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C900..C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA00..CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB00..CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC00..CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD00..CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE00..CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF00..CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D000..D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D100..D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D200..D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D300..D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D400..D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D500..D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D600..D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D700..D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D800..D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D900..D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA00..DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB00..DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC00..DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD00..DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE00..DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF00..DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E000..E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E100..E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E200..E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E300..E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E400..E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E500..E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E600..E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E700..E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E800..E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E900..E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA00..EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB00..EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC00..ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED00..EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE00..EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF00..EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F000..F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F100..F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F200..F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F300..F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F400..F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F500..F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F600..F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F700..F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F800..F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F900..F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA00..FAFF */
+  FriBidiPropertyBlockLevel1_FB00,  /* FB00..FBFF */
+  FriBidiPropertyBlockLevel1_FC00,  /* FC00..FCFF */
+  FriBidiPropertyBlockLevel1_FD00,  /* FD00..FDFF */
+  FriBidiPropertyBlockLevel1_FE00,  /* FE00..FEFF */
+  FriBidiPropertyBlockLevel1_FF00,  /* FF00..FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10000..100FF */
+  FriBidiPropertyBlockLevel1_10100,  /* 10100..101FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10200..102FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10300..103FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10400..104FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10500..105FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10600..106FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10700..107FF */
+  FriBidiPropertyBlockLevel1_0800,  /* 10800..108FF */
+  FriBidiPropertyBlockLevel1_10900,  /* 10900..109FF */
+  FriBidiPropertyBlockLevel1_10A00,  /* 10A00..10AFF */
+  FriBidiPropertyBlockLevel1_0800,  /* 10B00..10BFF */
+  FriBidiPropertyBlockLevel1_0800,  /* 10C00..10CFF */
+  FriBidiPropertyBlockLevel1_0800,  /* 10D00..10DFF */
+  FriBidiPropertyBlockLevel1_0800,  /* 10E00..10EFF */
+  FriBidiPropertyBlockLevel1_0800,  /* 10F00..10FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11000..110FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11100..111FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11200..112FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11300..113FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11400..114FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11500..115FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11600..116FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11700..117FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11800..118FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11900..119FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11A00..11AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11B00..11BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11C00..11CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11D00..11DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11E00..11EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 11F00..11FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12000..120FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12100..121FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12200..122FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12300..123FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12400..124FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12500..125FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12600..126FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12700..127FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12800..128FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12900..129FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12A00..12AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12B00..12BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12C00..12CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12D00..12DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12E00..12EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 12F00..12FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13000..130FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13100..131FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13200..132FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13300..133FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13400..134FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13500..135FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13600..136FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13700..137FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13800..138FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13900..139FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13A00..13AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13B00..13BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13C00..13CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13D00..13DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13E00..13EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 13F00..13FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14000..140FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14100..141FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14200..142FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14300..143FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14400..144FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14500..145FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14600..146FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14700..147FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14800..148FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14900..149FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14A00..14AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14B00..14BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14C00..14CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14D00..14DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14E00..14EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 14F00..14FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15000..150FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15100..151FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15200..152FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15300..153FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15400..154FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15500..155FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15600..156FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15700..157FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15800..158FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15900..159FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15A00..15AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15B00..15BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15C00..15CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15D00..15DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15E00..15EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 15F00..15FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16000..160FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16100..161FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16200..162FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16300..163FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16400..164FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16500..165FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16600..166FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16700..167FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16800..168FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16900..169FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16A00..16AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16B00..16BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16C00..16CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16D00..16DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16E00..16EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 16F00..16FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17000..170FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17100..171FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17200..172FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17300..173FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17400..174FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17500..175FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17600..176FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17700..177FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17800..178FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17900..179FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17A00..17AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17B00..17BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17C00..17CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17D00..17DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17E00..17EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 17F00..17FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18000..180FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18100..181FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18200..182FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18300..183FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18400..184FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18500..185FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18600..186FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18700..187FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18800..188FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18900..189FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18A00..18AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18B00..18BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18C00..18CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18D00..18DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18E00..18EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 18F00..18FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19000..190FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19100..191FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19200..192FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19300..193FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19400..194FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19500..195FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19600..196FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19700..197FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19800..198FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19900..199FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19A00..19AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19B00..19BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19C00..19CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19D00..19DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19E00..19EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 19F00..19FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A000..1A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A100..1A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A200..1A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A300..1A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A400..1A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A500..1A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A600..1A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A700..1A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A800..1A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1A900..1A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1AA00..1AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1AB00..1ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1AC00..1ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1AD00..1ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1AE00..1AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1AF00..1AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B000..1B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B100..1B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B200..1B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B300..1B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B400..1B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B500..1B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B600..1B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B700..1B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B800..1B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1B900..1B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1BA00..1BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1BB00..1BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1BC00..1BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1BD00..1BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1BE00..1BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1BF00..1BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C000..1C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C100..1C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C200..1C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C300..1C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C400..1C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C500..1C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C600..1C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C700..1C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C800..1C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1C900..1C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1CA00..1CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1CB00..1CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1CC00..1CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1CD00..1CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1CE00..1CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1CF00..1CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1D000..1D0FF */
+  FriBidiPropertyBlockLevel1_1D100,  /* 1D100..1D1FF */
+  FriBidiPropertyBlockLevel1_1D200,  /* 1D200..1D2FF */
+  FriBidiPropertyBlockLevel1_1D300,  /* 1D300..1D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1D400..1D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1D500..1D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1D600..1D6FF */
+  FriBidiPropertyBlockLevel1_1D700,  /* 1D700..1D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1D800..1D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1D900..1D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1DA00..1DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1DB00..1DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1DC00..1DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1DD00..1DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1DE00..1DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1DF00..1DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E000..1E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E100..1E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E200..1E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E300..1E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E400..1E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E500..1E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E600..1E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E700..1E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E800..1E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1E900..1E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1EA00..1EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1EB00..1EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1EC00..1ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1ED00..1EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1EE00..1EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1EF00..1EFFF */
+  FriBidiPropertyBlockLevel1_1F000,  /* 1F000..1F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F100..1F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F200..1F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F300..1F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F400..1F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F500..1F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F600..1F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F700..1F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F800..1F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1F900..1F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1FA00..1FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1FB00..1FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1FC00..1FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1FD00..1FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 1FE00..1FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 1FF00..1FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20000..200FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20100..201FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20200..202FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20300..203FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20400..204FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20500..205FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20600..206FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20700..207FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20800..208FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20900..209FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20A00..20AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20B00..20BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20C00..20CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20D00..20DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20E00..20EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 20F00..20FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21000..210FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21100..211FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21200..212FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21300..213FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21400..214FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21500..215FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21600..216FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21700..217FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21800..218FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21900..219FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21A00..21AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21B00..21BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21C00..21CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21D00..21DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21E00..21EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 21F00..21FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22000..220FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22100..221FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22200..222FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22300..223FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22400..224FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22500..225FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22600..226FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22700..227FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22800..228FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22900..229FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22A00..22AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22B00..22BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22C00..22CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22D00..22DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22E00..22EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 22F00..22FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23000..230FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23100..231FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23200..232FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23300..233FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23400..234FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23500..235FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23600..236FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23700..237FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23800..238FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23900..239FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23A00..23AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23B00..23BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23C00..23CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23D00..23DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23E00..23EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 23F00..23FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24000..240FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24100..241FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24200..242FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24300..243FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24400..244FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24500..245FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24600..246FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24700..247FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24800..248FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24900..249FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24A00..24AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24B00..24BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24C00..24CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24D00..24DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24E00..24EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 24F00..24FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25000..250FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25100..251FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25200..252FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25300..253FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25400..254FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25500..255FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25600..256FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25700..257FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25800..258FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25900..259FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25A00..25AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25B00..25BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25C00..25CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25D00..25DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25E00..25EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 25F00..25FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26000..260FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26100..261FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26200..262FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26300..263FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26400..264FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26500..265FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26600..266FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26700..267FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26800..268FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26900..269FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26A00..26AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26B00..26BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26C00..26CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26D00..26DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26E00..26EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 26F00..26FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27000..270FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27100..271FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27200..272FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27300..273FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27400..274FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27500..275FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27600..276FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27700..277FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27800..278FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27900..279FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27A00..27AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27B00..27BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27C00..27CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27D00..27DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27E00..27EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 27F00..27FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28000..280FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28100..281FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28200..282FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28300..283FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28400..284FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28500..285FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28600..286FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28700..287FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28800..288FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28900..289FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28A00..28AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28B00..28BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28C00..28CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28D00..28DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28E00..28EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 28F00..28FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29000..290FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29100..291FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29200..292FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29300..293FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29400..294FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29500..295FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29600..296FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29700..297FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29800..298FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29900..299FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29A00..29AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29B00..29BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29C00..29CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29D00..29DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29E00..29EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 29F00..29FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A000..2A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A100..2A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A200..2A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A300..2A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A400..2A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A500..2A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A600..2A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A700..2A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A800..2A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2A900..2A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2AA00..2AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2AB00..2ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2AC00..2ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2AD00..2ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2AE00..2AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2AF00..2AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B000..2B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B100..2B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B200..2B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B300..2B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B400..2B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B500..2B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B600..2B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B700..2B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B800..2B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2B900..2B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2BA00..2BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2BB00..2BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2BC00..2BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2BD00..2BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2BE00..2BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2BF00..2BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C000..2C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C100..2C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C200..2C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C300..2C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C400..2C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C500..2C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C600..2C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C700..2C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C800..2C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2C900..2C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2CA00..2CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2CB00..2CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2CC00..2CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2CD00..2CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2CE00..2CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2CF00..2CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D000..2D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D100..2D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D200..2D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D300..2D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D400..2D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D500..2D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D600..2D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D700..2D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D800..2D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2D900..2D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2DA00..2DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2DB00..2DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2DC00..2DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2DD00..2DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2DE00..2DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2DF00..2DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E000..2E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E100..2E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E200..2E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E300..2E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E400..2E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E500..2E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E600..2E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E700..2E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E800..2E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2E900..2E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2EA00..2EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2EB00..2EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2EC00..2ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2ED00..2EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2EE00..2EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2EF00..2EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F000..2F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F100..2F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F200..2F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F300..2F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F400..2F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F500..2F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F600..2F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F700..2F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F800..2F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2F900..2F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2FA00..2FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2FB00..2FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2FC00..2FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2FD00..2FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 2FE00..2FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 2FF00..2FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30000..300FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30100..301FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30200..302FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30300..303FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30400..304FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30500..305FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30600..306FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30700..307FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30800..308FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30900..309FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30A00..30AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30B00..30BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30C00..30CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30D00..30DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30E00..30EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 30F00..30FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31000..310FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31100..311FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31200..312FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31300..313FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31400..314FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31500..315FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31600..316FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31700..317FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31800..318FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31900..319FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31A00..31AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31B00..31BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31C00..31CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31D00..31DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31E00..31EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 31F00..31FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32000..320FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32100..321FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32200..322FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32300..323FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32400..324FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32500..325FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32600..326FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32700..327FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32800..328FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32900..329FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32A00..32AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32B00..32BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32C00..32CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32D00..32DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32E00..32EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 32F00..32FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33000..330FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33100..331FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33200..332FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33300..333FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33400..334FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33500..335FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33600..336FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33700..337FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33800..338FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33900..339FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33A00..33AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33B00..33BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33C00..33CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33D00..33DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33E00..33EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 33F00..33FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34000..340FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34100..341FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34200..342FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34300..343FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34400..344FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34500..345FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34600..346FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34700..347FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34800..348FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34900..349FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34A00..34AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34B00..34BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34C00..34CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34D00..34DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34E00..34EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 34F00..34FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35000..350FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35100..351FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35200..352FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35300..353FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35400..354FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35500..355FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35600..356FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35700..357FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35800..358FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35900..359FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35A00..35AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35B00..35BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35C00..35CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35D00..35DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35E00..35EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 35F00..35FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36000..360FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36100..361FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36200..362FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36300..363FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36400..364FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36500..365FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36600..366FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36700..367FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36800..368FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36900..369FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36A00..36AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36B00..36BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36C00..36CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36D00..36DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36E00..36EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 36F00..36FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37000..370FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37100..371FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37200..372FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37300..373FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37400..374FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37500..375FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37600..376FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37700..377FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37800..378FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37900..379FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37A00..37AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37B00..37BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37C00..37CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37D00..37DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37E00..37EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 37F00..37FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38000..380FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38100..381FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38200..382FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38300..383FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38400..384FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38500..385FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38600..386FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38700..387FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38800..388FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38900..389FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38A00..38AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38B00..38BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38C00..38CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38D00..38DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38E00..38EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 38F00..38FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39000..390FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39100..391FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39200..392FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39300..393FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39400..394FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39500..395FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39600..396FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39700..397FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39800..398FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39900..399FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39A00..39AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39B00..39BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39C00..39CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39D00..39DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39E00..39EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 39F00..39FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A000..3A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A100..3A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A200..3A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A300..3A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A400..3A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A500..3A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A600..3A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A700..3A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A800..3A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3A900..3A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3AA00..3AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3AB00..3ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3AC00..3ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3AD00..3ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3AE00..3AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3AF00..3AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B000..3B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B100..3B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B200..3B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B300..3B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B400..3B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B500..3B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B600..3B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B700..3B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B800..3B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3B900..3B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3BA00..3BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3BB00..3BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3BC00..3BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3BD00..3BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3BE00..3BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3BF00..3BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C000..3C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C100..3C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C200..3C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C300..3C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C400..3C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C500..3C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C600..3C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C700..3C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C800..3C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3C900..3C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3CA00..3CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3CB00..3CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3CC00..3CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3CD00..3CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3CE00..3CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3CF00..3CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D000..3D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D100..3D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D200..3D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D300..3D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D400..3D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D500..3D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D600..3D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D700..3D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D800..3D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3D900..3D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3DA00..3DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3DB00..3DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3DC00..3DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3DD00..3DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3DE00..3DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3DF00..3DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E000..3E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E100..3E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E200..3E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E300..3E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E400..3E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E500..3E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E600..3E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E700..3E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E800..3E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3E900..3E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3EA00..3EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3EB00..3EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3EC00..3ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3ED00..3EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3EE00..3EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3EF00..3EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F000..3F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F100..3F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F200..3F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F300..3F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F400..3F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F500..3F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F600..3F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F700..3F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F800..3F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3F900..3F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3FA00..3FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3FB00..3FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3FC00..3FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3FD00..3FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 3FE00..3FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 3FF00..3FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40000..400FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40100..401FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40200..402FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40300..403FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40400..404FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40500..405FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40600..406FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40700..407FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40800..408FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40900..409FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40A00..40AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40B00..40BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40C00..40CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40D00..40DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40E00..40EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 40F00..40FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41000..410FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41100..411FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41200..412FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41300..413FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41400..414FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41500..415FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41600..416FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41700..417FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41800..418FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41900..419FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41A00..41AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41B00..41BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41C00..41CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41D00..41DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41E00..41EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 41F00..41FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42000..420FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42100..421FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42200..422FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42300..423FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42400..424FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42500..425FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42600..426FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42700..427FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42800..428FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42900..429FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42A00..42AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42B00..42BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42C00..42CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42D00..42DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42E00..42EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 42F00..42FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43000..430FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43100..431FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43200..432FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43300..433FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43400..434FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43500..435FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43600..436FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43700..437FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43800..438FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43900..439FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43A00..43AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43B00..43BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43C00..43CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43D00..43DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43E00..43EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 43F00..43FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44000..440FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44100..441FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44200..442FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44300..443FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44400..444FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44500..445FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44600..446FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44700..447FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44800..448FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44900..449FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44A00..44AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44B00..44BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44C00..44CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44D00..44DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44E00..44EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 44F00..44FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45000..450FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45100..451FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45200..452FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45300..453FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45400..454FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45500..455FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45600..456FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45700..457FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45800..458FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45900..459FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45A00..45AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45B00..45BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45C00..45CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45D00..45DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45E00..45EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 45F00..45FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46000..460FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46100..461FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46200..462FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46300..463FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46400..464FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46500..465FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46600..466FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46700..467FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46800..468FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46900..469FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46A00..46AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46B00..46BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46C00..46CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46D00..46DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46E00..46EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 46F00..46FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47000..470FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47100..471FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47200..472FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47300..473FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47400..474FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47500..475FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47600..476FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47700..477FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47800..478FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47900..479FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47A00..47AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47B00..47BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47C00..47CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47D00..47DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47E00..47EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 47F00..47FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48000..480FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48100..481FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48200..482FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48300..483FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48400..484FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48500..485FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48600..486FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48700..487FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48800..488FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48900..489FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48A00..48AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48B00..48BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48C00..48CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48D00..48DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48E00..48EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 48F00..48FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49000..490FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49100..491FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49200..492FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49300..493FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49400..494FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49500..495FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49600..496FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49700..497FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49800..498FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49900..499FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49A00..49AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49B00..49BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49C00..49CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49D00..49DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49E00..49EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 49F00..49FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A000..4A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A100..4A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A200..4A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A300..4A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A400..4A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A500..4A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A600..4A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A700..4A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A800..4A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4A900..4A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4AA00..4AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4AB00..4ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4AC00..4ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4AD00..4ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4AE00..4AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4AF00..4AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B000..4B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B100..4B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B200..4B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B300..4B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B400..4B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B500..4B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B600..4B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B700..4B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B800..4B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4B900..4B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4BA00..4BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4BB00..4BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4BC00..4BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4BD00..4BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4BE00..4BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4BF00..4BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C000..4C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C100..4C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C200..4C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C300..4C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C400..4C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C500..4C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C600..4C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C700..4C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C800..4C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4C900..4C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4CA00..4CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4CB00..4CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4CC00..4CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4CD00..4CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4CE00..4CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4CF00..4CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D000..4D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D100..4D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D200..4D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D300..4D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D400..4D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D500..4D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D600..4D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D700..4D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D800..4D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4D900..4D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4DA00..4DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4DB00..4DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4DC00..4DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4DD00..4DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4DE00..4DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4DF00..4DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E000..4E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E100..4E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E200..4E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E300..4E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E400..4E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E500..4E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E600..4E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E700..4E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E800..4E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4E900..4E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4EA00..4EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4EB00..4EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4EC00..4ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4ED00..4EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4EE00..4EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4EF00..4EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F000..4F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F100..4F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F200..4F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F300..4F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F400..4F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F500..4F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F600..4F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F700..4F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F800..4F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4F900..4F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4FA00..4FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4FB00..4FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4FC00..4FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4FD00..4FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 4FE00..4FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 4FF00..4FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50000..500FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50100..501FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50200..502FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50300..503FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50400..504FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50500..505FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50600..506FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50700..507FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50800..508FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50900..509FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50A00..50AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50B00..50BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50C00..50CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50D00..50DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50E00..50EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 50F00..50FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51000..510FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51100..511FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51200..512FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51300..513FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51400..514FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51500..515FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51600..516FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51700..517FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51800..518FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51900..519FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51A00..51AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51B00..51BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51C00..51CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51D00..51DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51E00..51EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 51F00..51FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52000..520FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52100..521FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52200..522FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52300..523FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52400..524FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52500..525FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52600..526FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52700..527FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52800..528FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52900..529FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52A00..52AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52B00..52BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52C00..52CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52D00..52DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52E00..52EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 52F00..52FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53000..530FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53100..531FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53200..532FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53300..533FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53400..534FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53500..535FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53600..536FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53700..537FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53800..538FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53900..539FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53A00..53AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53B00..53BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53C00..53CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53D00..53DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53E00..53EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 53F00..53FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54000..540FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54100..541FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54200..542FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54300..543FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54400..544FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54500..545FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54600..546FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54700..547FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54800..548FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54900..549FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54A00..54AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54B00..54BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54C00..54CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54D00..54DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54E00..54EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 54F00..54FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55000..550FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55100..551FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55200..552FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55300..553FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55400..554FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55500..555FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55600..556FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55700..557FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55800..558FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55900..559FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55A00..55AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55B00..55BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55C00..55CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55D00..55DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55E00..55EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 55F00..55FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56000..560FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56100..561FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56200..562FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56300..563FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56400..564FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56500..565FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56600..566FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56700..567FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56800..568FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56900..569FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56A00..56AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56B00..56BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56C00..56CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56D00..56DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56E00..56EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 56F00..56FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57000..570FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57100..571FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57200..572FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57300..573FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57400..574FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57500..575FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57600..576FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57700..577FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57800..578FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57900..579FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57A00..57AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57B00..57BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57C00..57CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57D00..57DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57E00..57EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 57F00..57FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58000..580FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58100..581FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58200..582FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58300..583FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58400..584FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58500..585FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58600..586FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58700..587FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58800..588FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58900..589FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58A00..58AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58B00..58BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58C00..58CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58D00..58DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58E00..58EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 58F00..58FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59000..590FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59100..591FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59200..592FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59300..593FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59400..594FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59500..595FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59600..596FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59700..597FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59800..598FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59900..599FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59A00..59AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59B00..59BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59C00..59CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59D00..59DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59E00..59EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 59F00..59FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A000..5A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A100..5A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A200..5A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A300..5A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A400..5A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A500..5A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A600..5A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A700..5A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A800..5A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5A900..5A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5AA00..5AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5AB00..5ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5AC00..5ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5AD00..5ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5AE00..5AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5AF00..5AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B000..5B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B100..5B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B200..5B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B300..5B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B400..5B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B500..5B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B600..5B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B700..5B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B800..5B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5B900..5B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5BA00..5BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5BB00..5BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5BC00..5BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5BD00..5BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5BE00..5BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5BF00..5BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C000..5C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C100..5C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C200..5C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C300..5C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C400..5C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C500..5C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C600..5C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C700..5C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C800..5C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5C900..5C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5CA00..5CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5CB00..5CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5CC00..5CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5CD00..5CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5CE00..5CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5CF00..5CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D000..5D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D100..5D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D200..5D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D300..5D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D400..5D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D500..5D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D600..5D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D700..5D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D800..5D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5D900..5D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5DA00..5DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5DB00..5DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5DC00..5DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5DD00..5DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5DE00..5DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5DF00..5DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E000..5E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E100..5E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E200..5E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E300..5E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E400..5E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E500..5E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E600..5E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E700..5E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E800..5E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5E900..5E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5EA00..5EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5EB00..5EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5EC00..5ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5ED00..5EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5EE00..5EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5EF00..5EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F000..5F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F100..5F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F200..5F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F300..5F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F400..5F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F500..5F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F600..5F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F700..5F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F800..5F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5F900..5F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5FA00..5FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5FB00..5FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5FC00..5FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5FD00..5FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 5FE00..5FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 5FF00..5FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60000..600FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60100..601FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60200..602FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60300..603FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60400..604FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60500..605FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60600..606FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60700..607FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60800..608FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60900..609FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60A00..60AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60B00..60BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60C00..60CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60D00..60DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60E00..60EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 60F00..60FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61000..610FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61100..611FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61200..612FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61300..613FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61400..614FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61500..615FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61600..616FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61700..617FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61800..618FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61900..619FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61A00..61AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61B00..61BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61C00..61CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61D00..61DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61E00..61EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 61F00..61FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62000..620FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62100..621FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62200..622FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62300..623FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62400..624FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62500..625FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62600..626FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62700..627FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62800..628FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62900..629FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62A00..62AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62B00..62BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62C00..62CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62D00..62DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62E00..62EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 62F00..62FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63000..630FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63100..631FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63200..632FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63300..633FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63400..634FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63500..635FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63600..636FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63700..637FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63800..638FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63900..639FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63A00..63AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63B00..63BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63C00..63CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63D00..63DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63E00..63EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 63F00..63FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64000..640FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64100..641FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64200..642FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64300..643FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64400..644FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64500..645FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64600..646FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64700..647FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64800..648FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64900..649FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64A00..64AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64B00..64BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64C00..64CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64D00..64DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64E00..64EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 64F00..64FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65000..650FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65100..651FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65200..652FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65300..653FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65400..654FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65500..655FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65600..656FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65700..657FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65800..658FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65900..659FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65A00..65AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65B00..65BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65C00..65CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65D00..65DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65E00..65EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 65F00..65FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66000..660FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66100..661FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66200..662FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66300..663FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66400..664FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66500..665FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66600..666FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66700..667FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66800..668FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66900..669FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66A00..66AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66B00..66BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66C00..66CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66D00..66DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66E00..66EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 66F00..66FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67000..670FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67100..671FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67200..672FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67300..673FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67400..674FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67500..675FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67600..676FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67700..677FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67800..678FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67900..679FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67A00..67AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67B00..67BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67C00..67CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67D00..67DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67E00..67EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 67F00..67FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68000..680FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68100..681FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68200..682FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68300..683FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68400..684FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68500..685FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68600..686FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68700..687FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68800..688FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68900..689FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68A00..68AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68B00..68BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68C00..68CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68D00..68DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68E00..68EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 68F00..68FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69000..690FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69100..691FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69200..692FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69300..693FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69400..694FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69500..695FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69600..696FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69700..697FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69800..698FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69900..699FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69A00..69AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69B00..69BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69C00..69CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69D00..69DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69E00..69EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 69F00..69FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A000..6A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A100..6A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A200..6A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A300..6A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A400..6A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A500..6A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A600..6A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A700..6A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A800..6A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6A900..6A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6AA00..6AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6AB00..6ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6AC00..6ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6AD00..6ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6AE00..6AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6AF00..6AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B000..6B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B100..6B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B200..6B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B300..6B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B400..6B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B500..6B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B600..6B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B700..6B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B800..6B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6B900..6B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6BA00..6BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6BB00..6BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6BC00..6BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6BD00..6BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6BE00..6BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6BF00..6BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C000..6C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C100..6C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C200..6C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C300..6C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C400..6C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C500..6C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C600..6C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C700..6C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C800..6C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6C900..6C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6CA00..6CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6CB00..6CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6CC00..6CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6CD00..6CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6CE00..6CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6CF00..6CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D000..6D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D100..6D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D200..6D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D300..6D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D400..6D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D500..6D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D600..6D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D700..6D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D800..6D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6D900..6D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6DA00..6DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6DB00..6DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6DC00..6DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6DD00..6DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6DE00..6DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6DF00..6DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E000..6E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E100..6E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E200..6E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E300..6E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E400..6E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E500..6E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E600..6E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E700..6E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E800..6E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6E900..6E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6EA00..6EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6EB00..6EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6EC00..6ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6ED00..6EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6EE00..6EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6EF00..6EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F000..6F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F100..6F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F200..6F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F300..6F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F400..6F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F500..6F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F600..6F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F700..6F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F800..6F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6F900..6F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6FA00..6FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6FB00..6FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6FC00..6FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6FD00..6FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 6FE00..6FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 6FF00..6FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70000..700FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70100..701FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70200..702FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70300..703FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70400..704FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70500..705FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70600..706FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70700..707FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70800..708FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70900..709FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70A00..70AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70B00..70BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70C00..70CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70D00..70DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70E00..70EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 70F00..70FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71000..710FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71100..711FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71200..712FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71300..713FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71400..714FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71500..715FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71600..716FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71700..717FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71800..718FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71900..719FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71A00..71AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71B00..71BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71C00..71CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71D00..71DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71E00..71EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 71F00..71FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72000..720FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72100..721FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72200..722FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72300..723FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72400..724FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72500..725FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72600..726FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72700..727FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72800..728FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72900..729FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72A00..72AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72B00..72BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72C00..72CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72D00..72DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72E00..72EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 72F00..72FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73000..730FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73100..731FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73200..732FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73300..733FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73400..734FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73500..735FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73600..736FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73700..737FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73800..738FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73900..739FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73A00..73AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73B00..73BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73C00..73CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73D00..73DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73E00..73EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 73F00..73FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74000..740FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74100..741FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74200..742FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74300..743FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74400..744FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74500..745FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74600..746FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74700..747FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74800..748FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74900..749FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74A00..74AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74B00..74BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74C00..74CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74D00..74DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74E00..74EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 74F00..74FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75000..750FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75100..751FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75200..752FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75300..753FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75400..754FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75500..755FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75600..756FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75700..757FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75800..758FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75900..759FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75A00..75AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75B00..75BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75C00..75CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75D00..75DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75E00..75EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 75F00..75FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76000..760FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76100..761FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76200..762FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76300..763FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76400..764FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76500..765FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76600..766FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76700..767FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76800..768FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76900..769FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76A00..76AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76B00..76BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76C00..76CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76D00..76DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76E00..76EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 76F00..76FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77000..770FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77100..771FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77200..772FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77300..773FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77400..774FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77500..775FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77600..776FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77700..777FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77800..778FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77900..779FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77A00..77AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77B00..77BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77C00..77CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77D00..77DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77E00..77EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 77F00..77FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78000..780FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78100..781FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78200..782FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78300..783FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78400..784FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78500..785FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78600..786FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78700..787FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78800..788FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78900..789FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78A00..78AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78B00..78BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78C00..78CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78D00..78DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78E00..78EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 78F00..78FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79000..790FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79100..791FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79200..792FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79300..793FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79400..794FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79500..795FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79600..796FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79700..797FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79800..798FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79900..799FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79A00..79AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79B00..79BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79C00..79CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79D00..79DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79E00..79EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 79F00..79FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A000..7A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A100..7A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A200..7A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A300..7A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A400..7A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A500..7A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A600..7A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A700..7A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A800..7A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7A900..7A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7AA00..7AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7AB00..7ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7AC00..7ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7AD00..7ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7AE00..7AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7AF00..7AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B000..7B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B100..7B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B200..7B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B300..7B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B400..7B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B500..7B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B600..7B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B700..7B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B800..7B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7B900..7B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7BA00..7BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7BB00..7BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7BC00..7BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7BD00..7BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7BE00..7BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7BF00..7BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C000..7C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C100..7C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C200..7C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C300..7C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C400..7C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C500..7C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C600..7C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C700..7C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C800..7C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7C900..7C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7CA00..7CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7CB00..7CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7CC00..7CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7CD00..7CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7CE00..7CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7CF00..7CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D000..7D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D100..7D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D200..7D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D300..7D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D400..7D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D500..7D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D600..7D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D700..7D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D800..7D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7D900..7D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7DA00..7DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7DB00..7DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7DC00..7DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7DD00..7DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7DE00..7DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7DF00..7DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E000..7E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E100..7E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E200..7E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E300..7E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E400..7E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E500..7E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E600..7E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E700..7E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E800..7E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7E900..7E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7EA00..7EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7EB00..7EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7EC00..7ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7ED00..7EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7EE00..7EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7EF00..7EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F000..7F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F100..7F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F200..7F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F300..7F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F400..7F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F500..7F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F600..7F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F700..7F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F800..7F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7F900..7F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7FA00..7FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7FB00..7FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7FC00..7FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7FD00..7FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 7FE00..7FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 7FF00..7FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80000..800FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80100..801FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80200..802FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80300..803FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80400..804FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80500..805FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80600..806FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80700..807FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80800..808FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80900..809FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80A00..80AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80B00..80BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80C00..80CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80D00..80DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80E00..80EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 80F00..80FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81000..810FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81100..811FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81200..812FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81300..813FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81400..814FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81500..815FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81600..816FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81700..817FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81800..818FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81900..819FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81A00..81AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81B00..81BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81C00..81CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81D00..81DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81E00..81EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 81F00..81FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82000..820FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82100..821FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82200..822FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82300..823FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82400..824FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82500..825FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82600..826FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82700..827FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82800..828FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82900..829FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82A00..82AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82B00..82BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82C00..82CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82D00..82DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82E00..82EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 82F00..82FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83000..830FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83100..831FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83200..832FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83300..833FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83400..834FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83500..835FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83600..836FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83700..837FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83800..838FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83900..839FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83A00..83AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83B00..83BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83C00..83CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83D00..83DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83E00..83EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 83F00..83FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84000..840FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84100..841FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84200..842FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84300..843FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84400..844FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84500..845FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84600..846FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84700..847FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84800..848FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84900..849FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84A00..84AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84B00..84BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84C00..84CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84D00..84DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84E00..84EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 84F00..84FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85000..850FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85100..851FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85200..852FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85300..853FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85400..854FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85500..855FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85600..856FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85700..857FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85800..858FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85900..859FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85A00..85AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85B00..85BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85C00..85CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85D00..85DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85E00..85EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 85F00..85FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86000..860FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86100..861FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86200..862FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86300..863FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86400..864FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86500..865FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86600..866FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86700..867FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86800..868FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86900..869FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86A00..86AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86B00..86BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86C00..86CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86D00..86DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86E00..86EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 86F00..86FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87000..870FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87100..871FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87200..872FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87300..873FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87400..874FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87500..875FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87600..876FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87700..877FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87800..878FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87900..879FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87A00..87AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87B00..87BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87C00..87CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87D00..87DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87E00..87EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 87F00..87FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88000..880FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88100..881FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88200..882FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88300..883FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88400..884FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88500..885FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88600..886FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88700..887FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88800..888FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88900..889FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88A00..88AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88B00..88BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88C00..88CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88D00..88DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88E00..88EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 88F00..88FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89000..890FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89100..891FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89200..892FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89300..893FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89400..894FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89500..895FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89600..896FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89700..897FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89800..898FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89900..899FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89A00..89AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89B00..89BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89C00..89CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89D00..89DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89E00..89EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 89F00..89FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A000..8A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A100..8A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A200..8A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A300..8A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A400..8A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A500..8A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A600..8A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A700..8A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A800..8A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8A900..8A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8AA00..8AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8AB00..8ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8AC00..8ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8AD00..8ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8AE00..8AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8AF00..8AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B000..8B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B100..8B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B200..8B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B300..8B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B400..8B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B500..8B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B600..8B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B700..8B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B800..8B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8B900..8B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8BA00..8BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8BB00..8BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8BC00..8BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8BD00..8BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8BE00..8BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8BF00..8BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C000..8C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C100..8C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C200..8C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C300..8C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C400..8C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C500..8C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C600..8C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C700..8C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C800..8C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8C900..8C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8CA00..8CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8CB00..8CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8CC00..8CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8CD00..8CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8CE00..8CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8CF00..8CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D000..8D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D100..8D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D200..8D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D300..8D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D400..8D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D500..8D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D600..8D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D700..8D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D800..8D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8D900..8D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8DA00..8DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8DB00..8DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8DC00..8DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8DD00..8DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8DE00..8DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8DF00..8DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E000..8E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E100..8E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E200..8E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E300..8E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E400..8E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E500..8E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E600..8E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E700..8E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E800..8E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8E900..8E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8EA00..8EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8EB00..8EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8EC00..8ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8ED00..8EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8EE00..8EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8EF00..8EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F000..8F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F100..8F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F200..8F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F300..8F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F400..8F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F500..8F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F600..8F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F700..8F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F800..8F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8F900..8F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8FA00..8FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8FB00..8FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8FC00..8FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8FD00..8FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 8FE00..8FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 8FF00..8FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90000..900FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90100..901FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90200..902FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90300..903FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90400..904FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90500..905FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90600..906FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90700..907FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90800..908FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90900..909FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90A00..90AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90B00..90BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90C00..90CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90D00..90DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90E00..90EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 90F00..90FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91000..910FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91100..911FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91200..912FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91300..913FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91400..914FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91500..915FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91600..916FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91700..917FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91800..918FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91900..919FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91A00..91AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91B00..91BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91C00..91CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91D00..91DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91E00..91EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 91F00..91FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92000..920FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92100..921FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92200..922FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92300..923FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92400..924FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92500..925FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92600..926FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92700..927FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92800..928FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92900..929FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92A00..92AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92B00..92BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92C00..92CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92D00..92DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92E00..92EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 92F00..92FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93000..930FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93100..931FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93200..932FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93300..933FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93400..934FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93500..935FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93600..936FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93700..937FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93800..938FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93900..939FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93A00..93AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93B00..93BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93C00..93CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93D00..93DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93E00..93EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 93F00..93FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94000..940FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94100..941FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94200..942FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94300..943FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94400..944FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94500..945FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94600..946FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94700..947FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94800..948FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94900..949FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94A00..94AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94B00..94BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94C00..94CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94D00..94DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94E00..94EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 94F00..94FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95000..950FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95100..951FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95200..952FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95300..953FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95400..954FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95500..955FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95600..956FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95700..957FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95800..958FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95900..959FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95A00..95AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95B00..95BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95C00..95CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95D00..95DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95E00..95EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 95F00..95FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96000..960FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96100..961FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96200..962FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96300..963FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96400..964FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96500..965FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96600..966FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96700..967FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96800..968FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96900..969FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96A00..96AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96B00..96BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96C00..96CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96D00..96DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96E00..96EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 96F00..96FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97000..970FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97100..971FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97200..972FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97300..973FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97400..974FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97500..975FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97600..976FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97700..977FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97800..978FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97900..979FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97A00..97AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97B00..97BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97C00..97CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97D00..97DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97E00..97EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 97F00..97FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98000..980FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98100..981FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98200..982FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98300..983FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98400..984FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98500..985FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98600..986FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98700..987FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98800..988FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98900..989FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98A00..98AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98B00..98BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98C00..98CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98D00..98DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98E00..98EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 98F00..98FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99000..990FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99100..991FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99200..992FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99300..993FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99400..994FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99500..995FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99600..996FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99700..997FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99800..998FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99900..999FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99A00..99AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99B00..99BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99C00..99CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99D00..99DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99E00..99EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 99F00..99FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A000..9A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A100..9A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A200..9A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A300..9A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A400..9A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A500..9A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A600..9A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A700..9A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A800..9A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9A900..9A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9AA00..9AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9AB00..9ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9AC00..9ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9AD00..9ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9AE00..9AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9AF00..9AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B000..9B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B100..9B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B200..9B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B300..9B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B400..9B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B500..9B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B600..9B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B700..9B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B800..9B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9B900..9B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9BA00..9BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9BB00..9BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9BC00..9BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9BD00..9BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9BE00..9BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9BF00..9BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C000..9C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C100..9C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C200..9C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C300..9C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C400..9C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C500..9C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C600..9C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C700..9C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C800..9C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9C900..9C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9CA00..9CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9CB00..9CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9CC00..9CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9CD00..9CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9CE00..9CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9CF00..9CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D000..9D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D100..9D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D200..9D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D300..9D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D400..9D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D500..9D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D600..9D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D700..9D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D800..9D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9D900..9D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9DA00..9DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9DB00..9DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9DC00..9DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9DD00..9DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9DE00..9DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9DF00..9DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E000..9E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E100..9E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E200..9E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E300..9E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E400..9E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E500..9E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E600..9E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E700..9E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E800..9E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9E900..9E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9EA00..9EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9EB00..9EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9EC00..9ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9ED00..9EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9EE00..9EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9EF00..9EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F000..9F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F100..9F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F200..9F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F300..9F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F400..9F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F500..9F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F600..9F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F700..9F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F800..9F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9F900..9F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9FA00..9FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9FB00..9FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9FC00..9FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9FD00..9FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 9FE00..9FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 9FF00..9FFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0000..A00FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0100..A01FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0200..A02FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0300..A03FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0400..A04FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0500..A05FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0600..A06FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0700..A07FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0800..A08FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0900..A09FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0A00..A0AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0B00..A0BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0C00..A0CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0D00..A0DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0E00..A0EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A0F00..A0FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1000..A10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1100..A11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1200..A12FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1300..A13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1400..A14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1500..A15FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1600..A16FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1700..A17FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1800..A18FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1900..A19FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1A00..A1AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1B00..A1BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1C00..A1CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1D00..A1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1E00..A1EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A1F00..A1FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2000..A20FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2100..A21FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2200..A22FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2300..A23FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2400..A24FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2500..A25FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2600..A26FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2700..A27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2800..A28FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2900..A29FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2A00..A2AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2B00..A2BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2C00..A2CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2D00..A2DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2E00..A2EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A2F00..A2FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3000..A30FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3100..A31FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3200..A32FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3300..A33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3400..A34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3500..A35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3600..A36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3700..A37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3800..A38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3900..A39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3A00..A3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3B00..A3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3C00..A3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3D00..A3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3E00..A3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A3F00..A3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4000..A40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4100..A41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4200..A42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4300..A43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4400..A44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4500..A45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4600..A46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4700..A47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4800..A48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4900..A49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4A00..A4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4B00..A4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4C00..A4CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4D00..A4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4E00..A4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A4F00..A4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5000..A50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5100..A51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5200..A52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5300..A53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5400..A54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5500..A55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5600..A56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5700..A57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5800..A58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5900..A59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5A00..A5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5B00..A5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5C00..A5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5D00..A5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5E00..A5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A5F00..A5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6000..A60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6100..A61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6200..A62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6300..A63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6400..A64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6500..A65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6600..A66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6700..A67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6800..A68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6900..A69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6A00..A6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6B00..A6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6C00..A6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6D00..A6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6E00..A6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A6F00..A6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7000..A70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7100..A71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7200..A72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7300..A73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7400..A74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7500..A75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7600..A76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7700..A77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7800..A78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7900..A79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7A00..A7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7B00..A7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7C00..A7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7D00..A7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7E00..A7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A7F00..A7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8000..A80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8100..A81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8200..A82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8300..A83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8400..A84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8500..A85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8600..A86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8700..A87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8800..A88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8900..A89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8A00..A8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8B00..A8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8C00..A8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8D00..A8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8E00..A8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A8F00..A8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9000..A90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9100..A91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9200..A92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9300..A93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9400..A94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9500..A95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9600..A96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9700..A97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9800..A98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9900..A99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9A00..A9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9B00..A9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9C00..A9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9D00..A9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9E00..A9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* A9F00..A9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA000..AA0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA100..AA1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA200..AA2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA300..AA3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA400..AA4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA500..AA5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA600..AA6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA700..AA7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA800..AA8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AA900..AA9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AAA00..AAAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AAB00..AABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AAC00..AACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AAD00..AADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AAE00..AAEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AAF00..AAFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB000..AB0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB100..AB1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB200..AB2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB300..AB3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB400..AB4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB500..AB5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB600..AB6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB700..AB7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB800..AB8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AB900..AB9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ABA00..ABAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ABB00..ABBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ABC00..ABCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ABD00..ABDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ABE00..ABEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ABF00..ABFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC000..AC0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC100..AC1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC200..AC2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC300..AC3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC400..AC4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC500..AC5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC600..AC6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC700..AC7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC800..AC8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AC900..AC9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ACA00..ACAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ACB00..ACBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ACC00..ACCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ACD00..ACDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ACE00..ACEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ACF00..ACFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD000..AD0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD100..AD1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD200..AD2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD300..AD3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD400..AD4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD500..AD5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD600..AD6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD700..AD7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD800..AD8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AD900..AD9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ADA00..ADAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ADB00..ADBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ADC00..ADCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ADD00..ADDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ADE00..ADEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ADF00..ADFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE000..AE0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE100..AE1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE200..AE2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE300..AE3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE400..AE4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE500..AE5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE600..AE6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE700..AE7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE800..AE8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AE900..AE9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AEA00..AEAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AEB00..AEBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AEC00..AECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AED00..AEDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AEE00..AEEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AEF00..AEFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF000..AF0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF100..AF1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF200..AF2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF300..AF3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF400..AF4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF500..AF5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF600..AF6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF700..AF7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF800..AF8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AF900..AF9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* AFA00..AFAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AFB00..AFBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AFC00..AFCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AFD00..AFDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* AFE00..AFEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* AFF00..AFFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0000..B00FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0100..B01FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0200..B02FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0300..B03FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0400..B04FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0500..B05FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0600..B06FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0700..B07FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0800..B08FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0900..B09FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0A00..B0AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0B00..B0BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0C00..B0CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0D00..B0DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0E00..B0EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B0F00..B0FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1000..B10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1100..B11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1200..B12FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1300..B13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1400..B14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1500..B15FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1600..B16FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1700..B17FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1800..B18FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1900..B19FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1A00..B1AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1B00..B1BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1C00..B1CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1D00..B1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1E00..B1EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B1F00..B1FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2000..B20FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2100..B21FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2200..B22FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2300..B23FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2400..B24FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2500..B25FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2600..B26FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2700..B27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2800..B28FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2900..B29FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2A00..B2AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2B00..B2BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2C00..B2CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2D00..B2DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2E00..B2EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B2F00..B2FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3000..B30FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3100..B31FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3200..B32FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3300..B33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3400..B34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3500..B35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3600..B36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3700..B37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3800..B38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3900..B39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3A00..B3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3B00..B3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3C00..B3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3D00..B3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3E00..B3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B3F00..B3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4000..B40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4100..B41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4200..B42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4300..B43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4400..B44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4500..B45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4600..B46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4700..B47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4800..B48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4900..B49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4A00..B4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4B00..B4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4C00..B4CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4D00..B4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4E00..B4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B4F00..B4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5000..B50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5100..B51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5200..B52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5300..B53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5400..B54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5500..B55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5600..B56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5700..B57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5800..B58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5900..B59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5A00..B5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5B00..B5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5C00..B5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5D00..B5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5E00..B5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B5F00..B5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6000..B60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6100..B61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6200..B62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6300..B63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6400..B64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6500..B65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6600..B66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6700..B67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6800..B68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6900..B69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6A00..B6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6B00..B6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6C00..B6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6D00..B6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6E00..B6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B6F00..B6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7000..B70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7100..B71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7200..B72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7300..B73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7400..B74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7500..B75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7600..B76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7700..B77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7800..B78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7900..B79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7A00..B7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7B00..B7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7C00..B7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7D00..B7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7E00..B7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B7F00..B7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8000..B80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8100..B81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8200..B82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8300..B83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8400..B84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8500..B85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8600..B86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8700..B87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8800..B88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8900..B89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8A00..B8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8B00..B8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8C00..B8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8D00..B8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8E00..B8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B8F00..B8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9000..B90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9100..B91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9200..B92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9300..B93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9400..B94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9500..B95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9600..B96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9700..B97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9800..B98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9900..B99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9A00..B9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9B00..B9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9C00..B9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9D00..B9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9E00..B9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* B9F00..B9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA000..BA0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA100..BA1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA200..BA2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA300..BA3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA400..BA4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA500..BA5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA600..BA6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA700..BA7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA800..BA8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BA900..BA9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BAA00..BAAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BAB00..BABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BAC00..BACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BAD00..BADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BAE00..BAEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BAF00..BAFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB000..BB0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB100..BB1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB200..BB2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB300..BB3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB400..BB4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB500..BB5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB600..BB6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB700..BB7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB800..BB8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BB900..BB9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BBA00..BBAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BBB00..BBBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BBC00..BBCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BBD00..BBDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BBE00..BBEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BBF00..BBFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC000..BC0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC100..BC1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC200..BC2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC300..BC3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC400..BC4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC500..BC5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC600..BC6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC700..BC7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC800..BC8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BC900..BC9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BCA00..BCAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BCB00..BCBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BCC00..BCCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BCD00..BCDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BCE00..BCEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BCF00..BCFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD000..BD0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD100..BD1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD200..BD2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD300..BD3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD400..BD4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD500..BD5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD600..BD6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD700..BD7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD800..BD8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BD900..BD9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BDA00..BDAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BDB00..BDBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BDC00..BDCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BDD00..BDDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BDE00..BDEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BDF00..BDFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE000..BE0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE100..BE1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE200..BE2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE300..BE3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE400..BE4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE500..BE5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE600..BE6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE700..BE7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE800..BE8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BE900..BE9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BEA00..BEAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BEB00..BEBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BEC00..BECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BED00..BEDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BEE00..BEEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BEF00..BEFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF000..BF0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF100..BF1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF200..BF2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF300..BF3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF400..BF4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF500..BF5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF600..BF6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF700..BF7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF800..BF8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BF900..BF9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* BFA00..BFAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BFB00..BFBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BFC00..BFCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BFD00..BFDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* BFE00..BFEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* BFF00..BFFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0000..C00FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0100..C01FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0200..C02FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0300..C03FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0400..C04FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0500..C05FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0600..C06FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0700..C07FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0800..C08FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0900..C09FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0A00..C0AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0B00..C0BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0C00..C0CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0D00..C0DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0E00..C0EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C0F00..C0FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1000..C10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1100..C11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1200..C12FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1300..C13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1400..C14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1500..C15FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1600..C16FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1700..C17FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1800..C18FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1900..C19FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1A00..C1AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1B00..C1BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1C00..C1CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1D00..C1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1E00..C1EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C1F00..C1FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2000..C20FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2100..C21FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2200..C22FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2300..C23FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2400..C24FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2500..C25FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2600..C26FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2700..C27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2800..C28FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2900..C29FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2A00..C2AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2B00..C2BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2C00..C2CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2D00..C2DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2E00..C2EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C2F00..C2FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3000..C30FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3100..C31FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3200..C32FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3300..C33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3400..C34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3500..C35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3600..C36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3700..C37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3800..C38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3900..C39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3A00..C3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3B00..C3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3C00..C3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3D00..C3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3E00..C3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C3F00..C3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4000..C40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4100..C41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4200..C42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4300..C43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4400..C44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4500..C45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4600..C46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4700..C47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4800..C48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4900..C49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4A00..C4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4B00..C4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4C00..C4CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4D00..C4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4E00..C4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C4F00..C4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5000..C50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5100..C51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5200..C52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5300..C53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5400..C54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5500..C55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5600..C56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5700..C57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5800..C58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5900..C59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5A00..C5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5B00..C5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5C00..C5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5D00..C5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5E00..C5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C5F00..C5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6000..C60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6100..C61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6200..C62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6300..C63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6400..C64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6500..C65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6600..C66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6700..C67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6800..C68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6900..C69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6A00..C6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6B00..C6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6C00..C6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6D00..C6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6E00..C6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C6F00..C6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7000..C70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7100..C71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7200..C72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7300..C73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7400..C74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7500..C75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7600..C76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7700..C77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7800..C78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7900..C79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7A00..C7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7B00..C7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7C00..C7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7D00..C7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7E00..C7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C7F00..C7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8000..C80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8100..C81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8200..C82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8300..C83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8400..C84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8500..C85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8600..C86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8700..C87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8800..C88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8900..C89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8A00..C8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8B00..C8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8C00..C8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8D00..C8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8E00..C8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C8F00..C8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9000..C90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9100..C91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9200..C92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9300..C93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9400..C94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9500..C95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9600..C96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9700..C97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9800..C98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9900..C99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9A00..C9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9B00..C9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9C00..C9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9D00..C9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9E00..C9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* C9F00..C9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA000..CA0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA100..CA1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA200..CA2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA300..CA3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA400..CA4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA500..CA5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA600..CA6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA700..CA7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA800..CA8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CA900..CA9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CAA00..CAAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CAB00..CABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CAC00..CACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CAD00..CADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CAE00..CAEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CAF00..CAFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB000..CB0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB100..CB1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB200..CB2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB300..CB3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB400..CB4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB500..CB5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB600..CB6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB700..CB7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB800..CB8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CB900..CB9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CBA00..CBAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CBB00..CBBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CBC00..CBCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CBD00..CBDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CBE00..CBEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CBF00..CBFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC000..CC0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC100..CC1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC200..CC2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC300..CC3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC400..CC4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC500..CC5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC600..CC6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC700..CC7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC800..CC8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CC900..CC9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CCA00..CCAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CCB00..CCBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CCC00..CCCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CCD00..CCDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CCE00..CCEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CCF00..CCFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD000..CD0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD100..CD1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD200..CD2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD300..CD3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD400..CD4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD500..CD5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD600..CD6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD700..CD7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD800..CD8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CD900..CD9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CDA00..CDAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CDB00..CDBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CDC00..CDCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CDD00..CDDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CDE00..CDEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CDF00..CDFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE000..CE0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE100..CE1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE200..CE2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE300..CE3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE400..CE4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE500..CE5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE600..CE6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE700..CE7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE800..CE8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CE900..CE9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CEA00..CEAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CEB00..CEBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CEC00..CECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CED00..CEDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CEE00..CEEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CEF00..CEFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF000..CF0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF100..CF1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF200..CF2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF300..CF3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF400..CF4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF500..CF5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF600..CF6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF700..CF7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF800..CF8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CF900..CF9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* CFA00..CFAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CFB00..CFBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CFC00..CFCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CFD00..CFDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* CFE00..CFEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* CFF00..CFFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0000..D00FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0100..D01FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0200..D02FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0300..D03FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0400..D04FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0500..D05FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0600..D06FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0700..D07FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0800..D08FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0900..D09FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0A00..D0AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0B00..D0BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0C00..D0CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0D00..D0DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0E00..D0EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D0F00..D0FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1000..D10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1100..D11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1200..D12FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1300..D13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1400..D14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1500..D15FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1600..D16FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1700..D17FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1800..D18FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1900..D19FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1A00..D1AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1B00..D1BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1C00..D1CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1D00..D1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1E00..D1EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D1F00..D1FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2000..D20FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2100..D21FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2200..D22FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2300..D23FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2400..D24FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2500..D25FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2600..D26FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2700..D27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2800..D28FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2900..D29FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2A00..D2AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2B00..D2BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2C00..D2CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2D00..D2DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2E00..D2EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D2F00..D2FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3000..D30FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3100..D31FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3200..D32FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3300..D33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3400..D34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3500..D35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3600..D36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3700..D37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3800..D38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3900..D39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3A00..D3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3B00..D3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3C00..D3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3D00..D3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3E00..D3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D3F00..D3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4000..D40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4100..D41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4200..D42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4300..D43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4400..D44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4500..D45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4600..D46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4700..D47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4800..D48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4900..D49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4A00..D4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4B00..D4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4C00..D4CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4D00..D4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4E00..D4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D4F00..D4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5000..D50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5100..D51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5200..D52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5300..D53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5400..D54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5500..D55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5600..D56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5700..D57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5800..D58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5900..D59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5A00..D5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5B00..D5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5C00..D5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5D00..D5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5E00..D5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D5F00..D5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6000..D60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6100..D61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6200..D62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6300..D63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6400..D64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6500..D65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6600..D66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6700..D67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6800..D68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6900..D69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6A00..D6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6B00..D6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6C00..D6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6D00..D6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6E00..D6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D6F00..D6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7000..D70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7100..D71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7200..D72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7300..D73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7400..D74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7500..D75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7600..D76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7700..D77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7800..D78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7900..D79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7A00..D7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7B00..D7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7C00..D7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7D00..D7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7E00..D7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D7F00..D7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8000..D80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8100..D81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8200..D82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8300..D83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8400..D84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8500..D85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8600..D86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8700..D87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8800..D88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8900..D89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8A00..D8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8B00..D8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8C00..D8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8D00..D8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8E00..D8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D8F00..D8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9000..D90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9100..D91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9200..D92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9300..D93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9400..D94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9500..D95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9600..D96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9700..D97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9800..D98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9900..D99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9A00..D9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9B00..D9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9C00..D9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9D00..D9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9E00..D9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* D9F00..D9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA000..DA0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA100..DA1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA200..DA2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA300..DA3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA400..DA4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA500..DA5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA600..DA6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA700..DA7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA800..DA8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DA900..DA9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DAA00..DAAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DAB00..DABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DAC00..DACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DAD00..DADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DAE00..DAEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DAF00..DAFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB000..DB0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB100..DB1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB200..DB2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB300..DB3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB400..DB4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB500..DB5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB600..DB6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB700..DB7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB800..DB8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DB900..DB9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DBA00..DBAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DBB00..DBBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DBC00..DBCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DBD00..DBDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DBE00..DBEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DBF00..DBFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC000..DC0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC100..DC1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC200..DC2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC300..DC3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC400..DC4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC500..DC5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC600..DC6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC700..DC7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC800..DC8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DC900..DC9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DCA00..DCAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DCB00..DCBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DCC00..DCCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DCD00..DCDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DCE00..DCEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DCF00..DCFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD000..DD0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD100..DD1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD200..DD2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD300..DD3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD400..DD4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD500..DD5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD600..DD6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD700..DD7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD800..DD8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DD900..DD9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DDA00..DDAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DDB00..DDBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DDC00..DDCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DDD00..DDDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DDE00..DDEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DDF00..DDFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE000..DE0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE100..DE1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE200..DE2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE300..DE3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE400..DE4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE500..DE5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE600..DE6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE700..DE7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE800..DE8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DE900..DE9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DEA00..DEAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DEB00..DEBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DEC00..DECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DED00..DEDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DEE00..DEEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DEF00..DEFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF000..DF0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF100..DF1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF200..DF2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF300..DF3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF400..DF4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF500..DF5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF600..DF6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF700..DF7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF800..DF8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DF900..DF9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* DFA00..DFAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DFB00..DFBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DFC00..DFCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DFD00..DFDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* DFE00..DFEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* DFF00..DFFFF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0000..E00FF */
+  FriBidiPropertyBlockLevel1_E0100,  /* E0100..E01FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0200..E02FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0300..E03FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0400..E04FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0500..E05FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0600..E06FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0700..E07FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0800..E08FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0900..E09FF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0A00..E0AFF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0B00..E0BFF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0C00..E0CFF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0D00..E0DFF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0E00..E0EFF */
+  FriBidiPropertyBlockLevel1_E0000,  /* E0F00..E0FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1000..E10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1100..E11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1200..E12FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1300..E13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1400..E14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1500..E15FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1600..E16FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1700..E17FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1800..E18FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1900..E19FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1A00..E1AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1B00..E1BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1C00..E1CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1D00..E1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1E00..E1EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E1F00..E1FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2000..E20FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2100..E21FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2200..E22FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2300..E23FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2400..E24FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2500..E25FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2600..E26FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2700..E27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2800..E28FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2900..E29FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2A00..E2AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2B00..E2BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2C00..E2CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2D00..E2DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2E00..E2EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E2F00..E2FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3000..E30FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3100..E31FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3200..E32FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3300..E33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3400..E34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3500..E35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3600..E36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3700..E37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3800..E38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3900..E39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3A00..E3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3B00..E3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3C00..E3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3D00..E3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3E00..E3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E3F00..E3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4000..E40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4100..E41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4200..E42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4300..E43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4400..E44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4500..E45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4600..E46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4700..E47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4800..E48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4900..E49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4A00..E4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4B00..E4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4C00..E4CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4D00..E4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4E00..E4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E4F00..E4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5000..E50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5100..E51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5200..E52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5300..E53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5400..E54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5500..E55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5600..E56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5700..E57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5800..E58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5900..E59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5A00..E5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5B00..E5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5C00..E5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5D00..E5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5E00..E5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E5F00..E5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6000..E60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6100..E61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6200..E62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6300..E63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6400..E64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6500..E65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6600..E66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6700..E67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6800..E68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6900..E69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6A00..E6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6B00..E6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6C00..E6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6D00..E6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6E00..E6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E6F00..E6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7000..E70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7100..E71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7200..E72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7300..E73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7400..E74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7500..E75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7600..E76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7700..E77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7800..E78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7900..E79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7A00..E7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7B00..E7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7C00..E7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7D00..E7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7E00..E7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E7F00..E7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8000..E80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8100..E81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8200..E82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8300..E83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8400..E84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8500..E85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8600..E86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8700..E87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8800..E88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8900..E89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8A00..E8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8B00..E8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8C00..E8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8D00..E8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8E00..E8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E8F00..E8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9000..E90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9100..E91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9200..E92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9300..E93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9400..E94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9500..E95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9600..E96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9700..E97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9800..E98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9900..E99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9A00..E9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9B00..E9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9C00..E9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9D00..E9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9E00..E9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* E9F00..E9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA000..EA0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA100..EA1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA200..EA2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA300..EA3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA400..EA4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA500..EA5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA600..EA6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA700..EA7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA800..EA8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EA900..EA9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EAA00..EAAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EAB00..EABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EAC00..EACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EAD00..EADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EAE00..EAEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EAF00..EAFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB000..EB0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB100..EB1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB200..EB2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB300..EB3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB400..EB4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB500..EB5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB600..EB6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB700..EB7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB800..EB8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EB900..EB9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EBA00..EBAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EBB00..EBBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EBC00..EBCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EBD00..EBDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EBE00..EBEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EBF00..EBFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC000..EC0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC100..EC1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC200..EC2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC300..EC3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC400..EC4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC500..EC5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC600..EC6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC700..EC7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC800..EC8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EC900..EC9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ECA00..ECAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ECB00..ECBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ECC00..ECCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ECD00..ECDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ECE00..ECEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ECF00..ECFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED000..ED0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED100..ED1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED200..ED2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED300..ED3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED400..ED4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED500..ED5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED600..ED6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED700..ED7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED800..ED8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* ED900..ED9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EDA00..EDAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EDB00..EDBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EDC00..EDCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EDD00..EDDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EDE00..EDEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EDF00..EDFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE000..EE0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE100..EE1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE200..EE2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE300..EE3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE400..EE4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE500..EE5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE600..EE6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE700..EE7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE800..EE8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EE900..EE9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EEA00..EEAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EEB00..EEBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EEC00..EECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EED00..EEDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EEE00..EEEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EEF00..EEFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF000..EF0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF100..EF1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF200..EF2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF300..EF3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF400..EF4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF500..EF5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF600..EF6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF700..EF7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF800..EF8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EF900..EF9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* EFA00..EFAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EFB00..EFBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EFC00..EFCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EFD00..EFDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* EFE00..EFEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* EFF00..EFFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0000..F00FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0100..F01FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0200..F02FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0300..F03FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0400..F04FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0500..F05FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0600..F06FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0700..F07FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0800..F08FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0900..F09FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0A00..F0AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0B00..F0BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0C00..F0CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0D00..F0DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0E00..F0EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F0F00..F0FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1000..F10FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1100..F11FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1200..F12FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1300..F13FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1400..F14FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1500..F15FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1600..F16FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1700..F17FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1800..F18FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1900..F19FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1A00..F1AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1B00..F1BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1C00..F1CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1D00..F1DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1E00..F1EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F1F00..F1FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2000..F20FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2100..F21FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2200..F22FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2300..F23FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2400..F24FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2500..F25FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2600..F26FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2700..F27FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2800..F28FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2900..F29FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2A00..F2AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2B00..F2BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2C00..F2CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2D00..F2DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2E00..F2EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F2F00..F2FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3000..F30FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3100..F31FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3200..F32FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3300..F33FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3400..F34FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3500..F35FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3600..F36FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3700..F37FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3800..F38FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3900..F39FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3A00..F3AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3B00..F3BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3C00..F3CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3D00..F3DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3E00..F3EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F3F00..F3FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4000..F40FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4100..F41FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4200..F42FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4300..F43FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4400..F44FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4500..F45FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4600..F46FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4700..F47FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4800..F48FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4900..F49FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4A00..F4AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4B00..F4BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4C00..F4CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4D00..F4DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4E00..F4EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F4F00..F4FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5000..F50FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5100..F51FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5200..F52FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5300..F53FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5400..F54FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5500..F55FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5600..F56FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5700..F57FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5800..F58FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5900..F59FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5A00..F5AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5B00..F5BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5C00..F5CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5D00..F5DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5E00..F5EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F5F00..F5FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6000..F60FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6100..F61FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6200..F62FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6300..F63FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6400..F64FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6500..F65FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6600..F66FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6700..F67FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6800..F68FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6900..F69FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6A00..F6AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6B00..F6BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6C00..F6CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6D00..F6DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6E00..F6EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F6F00..F6FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7000..F70FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7100..F71FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7200..F72FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7300..F73FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7400..F74FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7500..F75FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7600..F76FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7700..F77FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7800..F78FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7900..F79FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7A00..F7AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7B00..F7BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7C00..F7CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7D00..F7DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7E00..F7EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F7F00..F7FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8000..F80FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8100..F81FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8200..F82FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8300..F83FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8400..F84FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8500..F85FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8600..F86FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8700..F87FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8800..F88FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8900..F89FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8A00..F8AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8B00..F8BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8C00..F8CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8D00..F8DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8E00..F8EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F8F00..F8FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9000..F90FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9100..F91FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9200..F92FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9300..F93FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9400..F94FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9500..F95FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9600..F96FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9700..F97FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9800..F98FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9900..F99FF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9A00..F9AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9B00..F9BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9C00..F9CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9D00..F9DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9E00..F9EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* F9F00..F9FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA000..FA0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA100..FA1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA200..FA2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA300..FA3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA400..FA4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA500..FA5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA600..FA6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA700..FA7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA800..FA8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FA900..FA9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FAA00..FAAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FAB00..FABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FAC00..FACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FAD00..FADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FAE00..FAEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FAF00..FAFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB000..FB0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB100..FB1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB200..FB2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB300..FB3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB400..FB4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB500..FB5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB600..FB6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB700..FB7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB800..FB8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FB900..FB9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FBA00..FBAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FBB00..FBBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FBC00..FBCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FBD00..FBDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FBE00..FBEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FBF00..FBFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC000..FC0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC100..FC1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC200..FC2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC300..FC3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC400..FC4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC500..FC5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC600..FC6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC700..FC7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC800..FC8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FC900..FC9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FCA00..FCAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FCB00..FCBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FCC00..FCCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FCD00..FCDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FCE00..FCEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FCF00..FCFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD000..FD0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD100..FD1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD200..FD2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD300..FD3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD400..FD4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD500..FD5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD600..FD6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD700..FD7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD800..FD8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FD900..FD9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FDA00..FDAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FDB00..FDBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FDC00..FDCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FDD00..FDDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FDE00..FDEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FDF00..FDFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE000..FE0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE100..FE1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE200..FE2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE300..FE3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE400..FE4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE500..FE5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE600..FE6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE700..FE7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE800..FE8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FE900..FE9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FEA00..FEAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FEB00..FEBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FEC00..FECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FED00..FEDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FEE00..FEEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FEF00..FEFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF000..FF0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF100..FF1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF200..FF2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF300..FF3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF400..FF4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF500..FF5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF600..FF6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF700..FF7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF800..FF8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FF900..FF9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* FFA00..FFAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FFB00..FFBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FFC00..FFCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FFD00..FFDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* FFE00..FFEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* FFF00..FFFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100000..1000FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100100..1001FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100200..1002FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100300..1003FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100400..1004FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100500..1005FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100600..1006FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100700..1007FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100800..1008FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100900..1009FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100A00..100AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100B00..100BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100C00..100CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100D00..100DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100E00..100EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 100F00..100FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101000..1010FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101100..1011FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101200..1012FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101300..1013FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101400..1014FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101500..1015FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101600..1016FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101700..1017FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101800..1018FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101900..1019FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101A00..101AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101B00..101BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101C00..101CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101D00..101DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101E00..101EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 101F00..101FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102000..1020FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102100..1021FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102200..1022FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102300..1023FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102400..1024FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102500..1025FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102600..1026FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102700..1027FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102800..1028FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102900..1029FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102A00..102AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102B00..102BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102C00..102CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102D00..102DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102E00..102EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 102F00..102FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103000..1030FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103100..1031FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103200..1032FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103300..1033FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103400..1034FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103500..1035FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103600..1036FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103700..1037FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103800..1038FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103900..1039FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103A00..103AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103B00..103BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103C00..103CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103D00..103DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103E00..103EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 103F00..103FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104000..1040FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104100..1041FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104200..1042FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104300..1043FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104400..1044FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104500..1045FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104600..1046FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104700..1047FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104800..1048FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104900..1049FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104A00..104AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104B00..104BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104C00..104CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104D00..104DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104E00..104EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 104F00..104FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105000..1050FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105100..1051FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105200..1052FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105300..1053FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105400..1054FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105500..1055FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105600..1056FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105700..1057FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105800..1058FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105900..1059FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105A00..105AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105B00..105BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105C00..105CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105D00..105DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105E00..105EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 105F00..105FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106000..1060FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106100..1061FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106200..1062FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106300..1063FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106400..1064FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106500..1065FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106600..1066FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106700..1067FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106800..1068FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106900..1069FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106A00..106AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106B00..106BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106C00..106CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106D00..106DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106E00..106EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 106F00..106FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107000..1070FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107100..1071FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107200..1072FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107300..1073FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107400..1074FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107500..1075FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107600..1076FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107700..1077FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107800..1078FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107900..1079FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107A00..107AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107B00..107BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107C00..107CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107D00..107DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107E00..107EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 107F00..107FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108000..1080FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108100..1081FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108200..1082FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108300..1083FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108400..1084FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108500..1085FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108600..1086FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108700..1087FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108800..1088FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108900..1089FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108A00..108AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108B00..108BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108C00..108CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108D00..108DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108E00..108EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 108F00..108FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109000..1090FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109100..1091FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109200..1092FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109300..1093FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109400..1094FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109500..1095FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109600..1096FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109700..1097FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109800..1098FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109900..1099FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109A00..109AFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109B00..109BFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109C00..109CFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109D00..109DFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109E00..109EFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 109F00..109FFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A000..10A0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A100..10A1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A200..10A2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A300..10A3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A400..10A4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A500..10A5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A600..10A6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A700..10A7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A800..10A8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10A900..10A9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10AA00..10AAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10AB00..10ABFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10AC00..10ACFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10AD00..10ADFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10AE00..10AEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10AF00..10AFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B000..10B0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B100..10B1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B200..10B2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B300..10B3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B400..10B4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B500..10B5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B600..10B6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B700..10B7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B800..10B8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10B900..10B9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10BA00..10BAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10BB00..10BBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10BC00..10BCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10BD00..10BDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10BE00..10BEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10BF00..10BFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C000..10C0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C100..10C1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C200..10C2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C300..10C3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C400..10C4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C500..10C5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C600..10C6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C700..10C7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C800..10C8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10C900..10C9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10CA00..10CAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10CB00..10CBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10CC00..10CCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10CD00..10CDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10CE00..10CEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10CF00..10CFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D000..10D0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D100..10D1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D200..10D2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D300..10D3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D400..10D4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D500..10D5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D600..10D6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D700..10D7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D800..10D8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10D900..10D9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10DA00..10DAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10DB00..10DBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10DC00..10DCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10DD00..10DDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10DE00..10DEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10DF00..10DFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E000..10E0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E100..10E1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E200..10E2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E300..10E3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E400..10E4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E500..10E5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E600..10E6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E700..10E7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E800..10E8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10E900..10E9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10EA00..10EAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10EB00..10EBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10EC00..10ECFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10ED00..10EDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10EE00..10EEFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10EF00..10EFFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F000..10F0FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F100..10F1FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F200..10F2FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F300..10F3FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F400..10F4FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F500..10F5FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F600..10F6FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F700..10F7FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F800..10F8FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10F900..10F9FF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10FA00..10FAFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10FB00..10FBFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10FC00..10FCFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10FD00..10FDFF */
+  FriBidiPropertyBlockLevel1_0100,  /* 10FE00..10FEFF */
+  FriBidiPropertyBlockLevel1_1FF00,  /* 10FF00..10FFFF */
+};
+
+/* *INDENT-ON* */
+
+#define FRIBIDI_GET_TYPE(x)    \
+       FriBidiPropertyBlockLevel1[(x)%256 +    \
+       FriBidiPropertyBlockLevel0[(x)/256]]
+
+#undef WS
+#undef SS
+#undef RLO
+#undef RLE
+#undef PDF
+#undef NSM
+#undef LRO
+#undef LRE
+#undef ET
+#undef ES
+#undef EN
+#undef CS
+#undef BS
+#undef AN
+#undef BN
+#undef ON
+#undef AL
+#undef RTL
+#undef LTR
+/*======================================================================
+ *  fribidi_get_type_internal() returns the bidi type of a character.
+ *----------------------------------------------------------------------*/
+FRIBIDI_API FriBidiCharType
+fribidi_get_type_internal (FriBidiChar uch)
+{
+  if (uch < 0x110000)
+    return fribidi_prop_to_type[(unsigned char)FRIBIDI_GET_TYPE (uch)];
+  else
+    return FRIBIDI_TYPE_LTR;
+  /* Non-Unicode chars */
+}
+
+
+#endif /* FRIBIDI_TAB_CHAR_TYPE_2_I */
diff --git a/pango/mini-fribidi/fribidi_types.c b/pango/mini-fribidi/fribidi_types.c
new file mode 100755 (executable)
index 0000000..e84fab1
--- /dev/null
@@ -0,0 +1,86 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 2001,2002 Behdad Esfahbod. 
+ * 
+ * This library is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU Lesser General Public 
+ * License as published by the Free Software Foundation; either 
+ * version 2.1 of the License, or (at your option) any later version. 
+ * 
+ * This library is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+ * Lesser General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU Lesser General Public License 
+ * along with this library, in a file named COPYING; if not, write to the 
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
+ * Boston, MA 02111-1307, USA  
+ * 
+ * For licensing issues, contact <fwpg@sharif.edu>. 
+ */
+
+#include "config.h"
+#include "fribidi.h"
+
+#ifdef DEBUG
+
+char
+fribidi_char_from_type (FriBidiCharType c)
+{
+  switch (c)
+    {
+    case FRIBIDI_TYPE_LTR:
+      return 'L';
+    case FRIBIDI_TYPE_RTL:
+      return 'R';
+    case FRIBIDI_TYPE_AL:
+      return 'A';
+
+    case FRIBIDI_TYPE_EN:
+      return '1';
+    case FRIBIDI_TYPE_AN:
+      return '9';
+    case FRIBIDI_TYPE_ES:
+      return 'w';
+    case FRIBIDI_TYPE_ET:
+      return 'w';
+    case FRIBIDI_TYPE_CS:
+      return 'w';
+    case FRIBIDI_TYPE_NSM:
+      return '`';
+    case FRIBIDI_TYPE_BN:
+      return 'b';
+
+    case FRIBIDI_TYPE_BS:
+      return 'B';
+    case FRIBIDI_TYPE_SS:
+      return 'S';
+    case FRIBIDI_TYPE_WS:
+      return '_';
+    case FRIBIDI_TYPE_ON:
+      return 'n';
+
+    case FRIBIDI_TYPE_LRE:
+      return '+';
+    case FRIBIDI_TYPE_RLE:
+      return '+';
+    case FRIBIDI_TYPE_LRO:
+      return '+';
+    case FRIBIDI_TYPE_RLO:
+      return '+';
+    case FRIBIDI_TYPE_PDF:
+      return '-';
+
+    default:
+      return '?';
+    }
+};
+
+#endif
+
+/* Map fribidi_prop_types to fribidi_types. */
+const FriBidiCharType fribidi_prop_to_type[] = {
+#define _FRIBIDI_ADD_TYPE(TYPE) FRIBIDI_TYPE_##TYPE,
+#include "fribidi_types.i"
+#undef _FRIBIDI_ADD_TYPE
+};
diff --git a/pango/mini-fribidi/fribidi_types.h b/pango/mini-fribidi/fribidi_types.h
new file mode 100755 (executable)
index 0000000..dc41865
--- /dev/null
@@ -0,0 +1,313 @@
+/* FriBidi - Library of BiDi algorithm
+ * Copyright (C) 1999,2000 Dov Grobgeld, and
+ * Copyright (C) 2001,2002 Behdad Esfahbod. 
+ * 
+ * This library is free software; you can redistribute it and/or 
+ * modify it under the terms of the GNU Lesser General Public 
+ * License as published by the Free Software Foundation; either 
+ * version 2.1 of the License, or (at your option) any later version. 
+ * 
+ * This library is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+ * Lesser General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU Lesser General Public License 
+ * along with this library, in a file named COPYING; if not, write to the 
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
+ * Boston, MA 02111-1307, USA  
+ * 
+ * For licensing issues, contact <dov@imagic.weizmann.ac.il> and 
+ * <fwpg@sharif.edu>. 
+ */
+#ifndef FRIBIDI_TYPES_H
+#define FRIBIDI_TYPES_H
+
+#include "fribidi_config.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+  typedef gboolean fribidi_boolean;
+
+  typedef gint8 fribidi_int8;
+  typedef guint8 fribidi_uint8;
+  typedef gint16 fribidi_int16;
+  typedef guint16 fribidi_uint16;
+  typedef gint32 fribidi_int32;
+  typedef guint32 fribidi_uint32;
+  typedef gint fribidi_int;
+  typedef guint fribidi_uint;
+
+
+  typedef fribidi_int8 FriBidiLevel;
+  typedef gunichar FriBidiChar;
+  typedef gsize FriBidiStrIndex;
+  typedef fribidi_int32 FriBidiMaskType;
+  typedef FriBidiMaskType FriBidiCharType;
+
+  char *fribidi_type_name (FriBidiCharType c);
+
+/* The following type is used by fribidi_utils */
+  typedef struct
+  {
+    FriBidiStrIndex length;
+    void *attribute;
+  }
+  FriBidiRunType;
+
+/* The following type is used by fribdi_utils */
+  typedef struct _FriBidiList FriBidiList;
+  struct _FriBidiList
+  {
+    void *data;
+    FriBidiList *next;
+    FriBidiList *prev;
+  };
+
+#ifndef FRIBIDI_MAX_STRING_LENGTH
+#define FRIBIDI_MAX_STRING_LENGTH (FriBidiStrIndex) \
+                                 (sizeof (FriBidiStrIndex) == 2 ?      \
+                                  0x7FFE : (sizeof (FriBidiStrIndex) == 1 ? \
+                                            0x7E : 0x7FFFFFFEL))
+#endif
+
+
+/* 
+ * Define some bit masks, that character types are based on, each one has
+ * only one bit on.
+ */
+
+/* Do not use enum, because 16bit processors do not allow 32bit enum values. */
+
+#define FRIBIDI_MASK_RTL       0x00000001L     /* Is right to left */
+#define FRIBIDI_MASK_ARABIC    0x00000002L     /* Is arabic */
+
+/* Each char can be only one of the three following. */
+#define FRIBIDI_MASK_STRONG    0x00000010L     /* Is strong */
+#define FRIBIDI_MASK_WEAK      0x00000020L     /* Is weak */
+#define FRIBIDI_MASK_NEUTRAL   0x00000040L     /* Is neutral */
+#define FRIBIDI_MASK_SENTINEL  0x00000080L     /* Is sentinel: SOT, EOT */
+/* Sentinels are not valid chars, just identify the start and end of strings. */
+
+/* Each char can be only one of the five following. */
+#define FRIBIDI_MASK_LETTER    0x00000100L     /* Is letter: L, R, AL */
+#define FRIBIDI_MASK_NUMBER    0x00000200L     /* Is number: EN, AN */
+#define FRIBIDI_MASK_NUMSEPTER 0x00000400L     /* Is number separator or terminator: ES, ET, CS */
+#define FRIBIDI_MASK_SPACE     0x00000800L     /* Is space: BN, BS, SS, WS */
+#define FRIBIDI_MASK_EXPLICIT  0x00001000L     /* Is expilict mark: LRE, RLE, LRO, RLO, PDF */
+
+/* Can be on only if FRIBIDI_MASK_SPACE is also on. */
+#define FRIBIDI_MASK_SEPARATOR 0x00002000L     /* Is test separator: BS, SS */
+/* Can be on only if FRIBIDI_MASK_EXPLICIT is also on. */
+#define FRIBIDI_MASK_OVERRIDE  0x00004000L     /* Is explicit override: LRO, RLO */
+
+/* The following must be to make types pairwise different, some of them can
+   be removed but are here because of efficiency (make queries faster). */
+
+#define FRIBIDI_MASK_ES                0x00010000L
+#define FRIBIDI_MASK_ET                0x00020000L
+#define FRIBIDI_MASK_CS                0x00040000L
+
+#define FRIBIDI_MASK_NSM       0x00080000L
+#define FRIBIDI_MASK_BN                0x00100000L
+
+#define FRIBIDI_MASK_BS                0x00200000L
+#define FRIBIDI_MASK_SS                0x00400000L
+#define FRIBIDI_MASK_WS                0x00800000L
+
+/* We reserve the sign bit for user's private use: we will never use it,
+   then negative character types will be never assigned. */
+
+
+/*
+ * Define values for FriBidiCharType
+ */
+
+/* Strong left to right */
+#define FRIBIDI_TYPE_LTR       ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_LETTER )
+/* Right to left characters */
+#define FRIBIDI_TYPE_RTL       ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_LETTER \
+                               + FRIBIDI_MASK_RTL)
+/* Arabic characters */
+#define FRIBIDI_TYPE_AL                ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_LETTER \
+                               + FRIBIDI_MASK_RTL + FRIBIDI_MASK_ARABIC )
+/* Left-To-Right embedding */
+#define FRIBIDI_TYPE_LRE       (FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT)
+/* Right-To-Left embedding */
+#define FRIBIDI_TYPE_RLE       ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT \
+                               + FRIBIDI_MASK_RTL )
+/* Left-To-Right override */
+#define FRIBIDI_TYPE_LRO       ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT \
+                               + FRIBIDI_MASK_OVERRIDE )
+/* Right-To-Left override */
+#define FRIBIDI_TYPE_RLO       ( FRIBIDI_MASK_STRONG + FRIBIDI_MASK_EXPLICIT \
+                               + FRIBIDI_MASK_RTL + FRIBIDI_MASK_OVERRIDE )
+
+/* Pop directional override */
+#define FRIBIDI_TYPE_PDF       ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_EXPLICIT )
+/* European digit */
+#define FRIBIDI_TYPE_EN                ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMBER )
+/* Arabic digit */
+#define FRIBIDI_TYPE_AN                ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMBER \
+                               + FRIBIDI_MASK_ARABIC )
+/* European number separator */
+#define FRIBIDI_TYPE_ES                ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMSEPTER \
+                               + FRIBIDI_MASK_ES )
+/* European number terminator */
+#define FRIBIDI_TYPE_ET                ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMSEPTER \
+                               + FRIBIDI_MASK_ET )
+/* Common Separator */
+#define FRIBIDI_TYPE_CS                ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NUMSEPTER \
+                               + FRIBIDI_MASK_CS )
+/* Non spacing mark */
+#define FRIBIDI_TYPE_NSM       ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_NSM )
+/* Boundary neutral */
+#define FRIBIDI_TYPE_BN                (  FRIBIDI_MASK_WEAK + FRIBIDI_MASK_SPACE \
+                               + FRIBIDI_MASK_BN )
+
+/* Block separator */
+#define FRIBIDI_TYPE_BS                ( FRIBIDI_MASK_NEUTRAL + FRIBIDI_MASK_SPACE \
+                               + FRIBIDI_MASK_SEPARATOR + FRIBIDI_MASK_BS )
+/* Segment separator */
+#define FRIBIDI_TYPE_SS                ( FRIBIDI_MASK_NEUTRAL + FRIBIDI_MASK_SPACE \
+                               + FRIBIDI_MASK_SEPARATOR + FRIBIDI_MASK_SS )
+/* Whitespace */
+#define FRIBIDI_TYPE_WS                ( FRIBIDI_MASK_NEUTRAL + FRIBIDI_MASK_SPACE \
+                               + FRIBIDI_MASK_WS )
+/* Other Neutral */
+#define FRIBIDI_TYPE_ON                ( FRIBIDI_MASK_NEUTRAL )
+
+/* The following are used to identify the paragraph direction,
+   types L, R, N are not used internally anymore, and recommended to use
+   LTR, RTL and ON instead, didn't removed because of compatability. */
+#define FRIBIDI_TYPE_L         ( FRIBIDI_TYPE_LTR )
+#define FRIBIDI_TYPE_R         ( FRIBIDI_TYPE_RTL )
+#define FRIBIDI_TYPE_N         ( FRIBIDI_TYPE_ON )
+/* Weak left to right */
+#define FRIBIDI_TYPE_WL                ( FRIBIDI_MASK_WEAK )
+/* Weak right to left */
+#define FRIBIDI_TYPE_WR                ( FRIBIDI_MASK_WEAK + FRIBIDI_MASK_RTL )
+
+/* The following are only used internally */
+
+/* Start of text */
+#define FRIBIDI_TYPE_SOT       ( FRIBIDI_MASK_SENTINEL )
+/* End of text */
+#define FRIBIDI_TYPE_EOT       ( FRIBIDI_MASK_SENTINEL + FRIBIDI_MASK_RTL )
+
+/*
+ * End of define values for FriBidiCharType
+ */
+
+
+/*
+ * Defining macros for needed queries, It is fully dependent on the 
+ * implementation of FriBidiCharType.
+ */
+
+
+/* Is private-use value? */
+#define FRIBIDI_TYPE_PRIVATE(p)        ((p) < 0)
+
+/* Return the direction of the level number, FRIBIDI_TYPE_LTR for even and
+   FRIBIDI_TYPE_RTL for odds. */
+#define FRIBIDI_LEVEL_TO_DIR(lev) (FRIBIDI_TYPE_LTR | (lev & 1))
+
+/* Return the minimum level of the direction, 0 for FRIBIDI_TYPE_LTR and
+   1 for FRIBIDI_TYPE_RTL and FRIBIDI_TYPE_AL. */
+#define FRIBIDI_DIR_TO_LEVEL(dir) ((FriBidiLevel)(dir & 1))
+
+/* Is right to left? */
+#define FRIBIDI_IS_RTL(p)      ((p) & FRIBIDI_MASK_RTL)
+/* Is arabic? */
+#define FRIBIDI_IS_ARABIC(p)   ((p) & FRIBIDI_MASK_ARABIC)
+
+/* Is strong? */
+#define FRIBIDI_IS_STRONG(p)   ((p) & FRIBIDI_MASK_STRONG)
+/* Is weak? */
+#define FRIBIDI_IS_WEAK(p)     ((p) & FRIBIDI_MASK_WEAK)
+/* Is neutral? */
+#define FRIBIDI_IS_NEUTRAL(p)  ((p) & FRIBIDI_MASK_NEUTRAL)
+/* Is sentinel? */
+#define FRIBIDI_IS_SENTINEL(p) ((p) & FRIBIDI_MASK_SENTINEL)
+
+/* Is letter: L, R, AL? */
+#define FRIBIDI_IS_LETTER(p)   ((p) & FRIBIDI_MASK_LETTER)
+/* Is number: EN, AN? */
+#define FRIBIDI_IS_NUMBER(p)   ((p) & FRIBIDI_MASK_NUMBER)
+/* Is number separator or terminator: ES, ET, CS? */
+#define FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR(p) \
+       ((p) & FRIBIDI_MASK_NUMSEPTER)
+/* Is space: BN, BS, SS, WS? */
+#define FRIBIDI_IS_SPACE(p)    ((p) & FRIBIDI_MASK_SPACE)
+/* Is explicit mark: LRE, RLE, LRO, RLO, PDF? */
+#define FRIBIDI_IS_EXPLICIT(p) ((p) & FRIBIDI_MASK_EXPLICIT)
+
+/* Is test separator: BS, SS? */
+#define FRIBIDI_IS_SEPARATOR(p) ((p) & FRIBIDI_MASK_SEPARATOR)
+
+/* Is explicit override: LRO, RLO? */
+#define FRIBIDI_IS_OVERRIDE(p) ((p) & FRIBIDI_MASK_OVERRIDE)
+
+/* Some more: */
+
+/* Is left to right letter: LTR? */
+#define FRIBIDI_IS_LTR_LETTER(p) \
+       ((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) == FRIBIDI_MASK_LETTER)
+
+/* Is right to left letter: RTL, AL? */
+#define FRIBIDI_IS_RTL_LETTER(p) \
+       ((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) \
+       == (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL))
+
+/* Is ES or CS: ES, CS? */
+#define FRIBIDI_IS_ES_OR_CS(p) \
+       ((p) & (FRIBIDI_MASK_ES | FRIBIDI_MASK_CS))
+
+/* Is explicit or BN: LRE, RLE, LRO, RLO, PDF, BN? */
+#define FRIBIDI_IS_EXPLICIT_OR_BN(p) \
+       ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN))
+
+/* Is explicit or separator or BN or WS: LRE, RLE, LRO, RLO, PDF, BS, SS, BN, WS? */
+#define FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS(p) \
+       ((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_SEPARATOR \
+               | FRIBIDI_MASK_BN | FRIBIDI_MASK_WS))
+
+/* Define some conversions. */
+
+/* Change numbers: EN, AN to RTL. */
+#define FRIBIDI_CHANGE_NUMBER_TO_RTL(p) \
+       (FRIBIDI_IS_NUMBER(p) ? FRIBIDI_TYPE_RTL : (p))
+
+/* Override status of an explicit mark: LRO->LTR, RLO->RTL, otherwise->ON. */
+#define FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR(p) \
+       (FRIBIDI_IS_OVERRIDE(p) ? FRIBIDI_LEVEL_TO_DIR(FRIBIDI_DIR_TO_LEVEL(p)) \
+                               : FRIBIDI_TYPE_ON)
+
+
+/*
+ * Define character types that char_type_tables use.
+ * define them to be 0, 1, 2, ... and then in fribidi_char_type.c map them
+ * to FriBidiCharTypes.
+ */
+  typedef char FriBidiPropCharType;
+
+  enum FriBidiPropEnum
+  {
+#define _FRIBIDI_ADD_TYPE(TYPE) FRIBIDI_PROP_TYPE_##TYPE,
+#include "fribidi_types.i"
+#undef _FRIBIDI_ADD_TYPE
+    FRIBIDI_TYPES_COUNT                /* Number of different character types */
+  };
+
+/* Map fribidi_prop_types to fribidi_types */
+  extern const FriBidiCharType fribidi_prop_to_type[];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/pango/mini-fribidi/fribidi_types.i b/pango/mini-fribidi/fribidi_types.i
new file mode 100755 (executable)
index 0000000..562bae3
--- /dev/null
@@ -0,0 +1,21 @@
+_FRIBIDI_ADD_TYPE(LTR)         /* Strong left to right */
+_FRIBIDI_ADD_TYPE(RTL)         /* Right to left characters */
+_FRIBIDI_ADD_TYPE(AL)          /* Arabic characters */
+_FRIBIDI_ADD_TYPE(LRE)         /* Left-To-Right embedding */
+_FRIBIDI_ADD_TYPE(RLE)         /* Right-To-Left embedding */
+_FRIBIDI_ADD_TYPE(LRO)         /* Left-To-Right override */
+_FRIBIDI_ADD_TYPE(RLO)         /* Right-To-Left override */
+_FRIBIDI_ADD_TYPE(PDF)         /* Pop directional override */
+_FRIBIDI_ADD_TYPE(EN)          /* European digit */
+_FRIBIDI_ADD_TYPE(AN)          /* Arabic digit */
+_FRIBIDI_ADD_TYPE(ES)          /* European number separator */
+_FRIBIDI_ADD_TYPE(ET)          /* European number terminator */
+_FRIBIDI_ADD_TYPE(CS)          /* Common Separator */
+_FRIBIDI_ADD_TYPE(NSM)         /* Non spacing mark */
+_FRIBIDI_ADD_TYPE(BN)          /* Boundary neutral */
+_FRIBIDI_ADD_TYPE(BS)          /* Block separator */
+_FRIBIDI_ADD_TYPE(SS)          /* Segment separator */
+_FRIBIDI_ADD_TYPE(WS)          /* Whitespace */
+_FRIBIDI_ADD_TYPE(ON)          /* Other Neutral */
+_FRIBIDI_ADD_TYPE(WL)          /* Weak left to right */
+_FRIBIDI_ADD_TYPE(WR)          /* Weak right to left */
diff --git a/pango/module-defs-atsui.c b/pango/module-defs-atsui.c
new file mode 100755 (executable)
index 0000000..7241777
--- /dev/null
@@ -0,0 +1,7 @@
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_atsui_modules[] = {
+ { NULL, NULL, NULL, NULL },
+};
diff --git a/pango/module-defs-fc.c b/pango/module-defs-fc.c
new file mode 100755 (executable)
index 0000000..2901e4f
--- /dev/null
@@ -0,0 +1,7 @@
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_fc_modules[] = {
+ { NULL, NULL, NULL, NULL },
+};
diff --git a/pango/module-defs-fc.c.win32 b/pango/module-defs-fc.c.win32
new file mode 100755 (executable)
index 0000000..a6ae1cf
--- /dev/null
@@ -0,0 +1,31 @@
+/* Hand-written. Once the GNU configure mechanism is used
+ * on Win32, too, can be generated.
+*/
+
+#include "modules.h"
+
+#ifdef PANGO_MODULE_PREFIX
+/* by defining PANGO_MODULE_PREFIX the basic module gets include in the
+ * backend library, here ../modules/basic/basic-fc.c
+ * It helps the backend to not fall on its nose even with a screwed module
+ * configuration. There should be at least enough fonts available to show
+ * an error message ...
+ */
+void         _pango_basic_ft2_script_engine_list   (PangoEngineInfo **engines,
+                                                    gint             *n_engines);
+void         _pango_basic_ft2_script_engine_init   (GTypeModule      *module);
+void         _pango_basic_ft2_script_engine_exit   (void);
+PangoEngine *_pango_basic_ft2_script_engine_create (const char       *id);
+#endif
+
+PangoIncludedModule _pango_included_fc_modules[] = {
+#ifdef PANGO_MODULE_PREFIX
+ { 
+   _pango_basic_ft2_script_engine_list,  
+   _pango_basic_ft2_script_engine_init, 
+   _pango_basic_ft2_script_engine_exit,  
+   _pango_basic_ft2_script_engine_create 
+ },
+#endif
+ { NULL, NULL, NULL },
+};
diff --git a/pango/module-defs-lang.c b/pango/module-defs-lang.c
new file mode 100755 (executable)
index 0000000..ddd8622
--- /dev/null
@@ -0,0 +1,7 @@
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_lang_modules[] = {
+ { NULL, NULL, NULL, NULL },
+};
diff --git a/pango/module-defs-win32.c b/pango/module-defs-win32.c
new file mode 100755 (executable)
index 0000000..f06b8c7
--- /dev/null
@@ -0,0 +1,7 @@
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_win32_modules[] = {
+ { NULL, NULL, NULL, NULL },
+};
diff --git a/pango/module-defs-win32.c.win32 b/pango/module-defs-win32.c.win32
new file mode 100755 (executable)
index 0000000..80fc90a
--- /dev/null
@@ -0,0 +1,25 @@
+/* Hand-written, for builds using Microsoft's compiler and makefile.msc,
+ * where the configure mechanism isn't used.
+ */
+
+#include "modules.h"
+
+#ifdef PANGO_MODULE_PREFIX
+void         _pango_basic_win32_script_engine_list   (PangoEngineInfo **engines,
+                                                      gint             *n_engines);
+void         _pango_basic_win32_script_engine_init   (GTypeModule      *module);
+void         _pango_basic_win32_script_engine_exit   (void);
+PangoEngine *_pango_basic_win32_script_engine_create (const char       *id);
+#endif
+
+PangoIncludedModule _pango_included_win32_modules[] = {
+#ifdef PANGO_MODULE_PREFIX
+ { 
+   _pango_basic_win32_script_engine_list,  
+   _pango_basic_win32_script_engine_init, 
+   _pango_basic_win32_script_engine_exit,  
+   _pango_basic_win32_script_engine_create 
+ },
+#endif
+ { NULL, NULL, NULL },
+};
diff --git a/pango/module-defs-x.c b/pango/module-defs-x.c
new file mode 100755 (executable)
index 0000000..f9f2a6c
--- /dev/null
@@ -0,0 +1,7 @@
+/* Autogenerated by configure. Do not edit */
+
+#include "module-defs.h"
+
+PangoIncludedModule _pango_included_x_modules[] = {
+ { NULL, NULL, NULL, NULL },
+};
diff --git a/pango/module-defs.h b/pango/module-defs.h
new file mode 100755 (executable)
index 0000000..05fc1e5
--- /dev/null
@@ -0,0 +1,4 @@
+/* Autogenerated by configure. Do not edit */
+
+#include "modules.h"
+
diff --git a/pango/modules.c b/pango/modules.c
new file mode 100755 (executable)
index 0000000..e6c1334
--- /dev/null
@@ -0,0 +1,767 @@
+/* Pango
+ * modules.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <limits.h>
+#include <errno.h>
+
+#include <gmodule.h>
+#include <glib/gstdio.h>
+
+#include "pango-enum-types.h"
+#include "pango-modules.h"
+#include "pango-impl-utils.h"
+#include "modules.h"
+
+typedef struct _PangoModule      PangoModule;
+typedef struct _PangoModuleClass PangoModuleClass;
+
+#define PANGO_TYPE_MODULE           (pango_module_get_type ())
+#define PANGO_MODULE(module) (G_TYPE_CHECK_INSTANCE_CAST ((module), PANGO_TYPE_MODULE, PangoModule))
+#define PANGO_IS_MODULE(module)  (G_TYPE_CHECK_INSTANCE_TYPE ((module), PANGO_TYPE_MODULE))
+
+typedef struct _PangoMapInfo PangoMapInfo;
+typedef struct _PangoEnginePair PangoEnginePair;
+typedef struct _PangoSubmap PangoSubmap;
+
+struct _PangoMap
+{
+  GArray *entries;
+};
+
+struct _PangoMapEntry
+{
+  GSList *exact;
+  GSList *fallback;
+};
+
+struct _PangoMapInfo
+{
+  PangoLanguage *language;
+  guint engine_type_id;
+  guint render_type_id;
+  PangoMap *map;
+};
+
+struct _PangoEnginePair
+{
+  PangoEngineInfo info;
+  PangoModule *module;
+  PangoEngine *engine;
+};
+
+struct _PangoModule
+{
+  GTypeModule parent_instance;
+
+  char *path;
+  GModule *library;
+
+  void         (*list)   (PangoEngineInfo **engines, gint *n_engines);
+  void         (*init)   (GTypeModule *module);
+  void         (*exit)   (void);
+  PangoEngine *(*create) (const gchar *id);
+};
+
+struct _PangoModuleClass
+{
+  GTypeModuleClass parent_class;
+};
+
+static GList *maps = NULL;
+static GSList *registered_engines = NULL;
+static GSList *dlloaded_engines = NULL;
+static GHashTable *dlloaded_modules;
+
+static GObjectClass *parent_class;
+
+static void build_map    (PangoMapInfo *info);
+static void init_modules (void);
+
+static GType pango_module_get_type (void);
+
+/**
+ * pango_find_map:
+ * @language: the language tag for which to find the map
+ * @engine_type_id: the engine type for the map to find
+ * @render_type_id: the render type for the map to find
+ *
+ * Locate a #PangoMap for a particular engine type and render
+ * type. The resulting map can be used to determine the engine
+ * for each character.
+ *
+ * Return value: the suitable #PangoMap.
+ **/
+PangoMap *
+pango_find_map (PangoLanguage *language,
+               guint          engine_type_id,
+               guint          render_type_id)
+{
+  GList *tmp_list = maps;
+  PangoMapInfo *map_info = NULL;
+  gboolean found_earlier = FALSE;
+
+  while (tmp_list)
+    {
+      map_info = tmp_list->data;
+      if (map_info->engine_type_id == engine_type_id &&
+         map_info->render_type_id == render_type_id)
+       {
+         if (map_info->language == language)
+           break;
+         else
+           found_earlier = TRUE;
+       }
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (!tmp_list)
+    {
+      map_info = g_slice_new (PangoMapInfo);
+      map_info->language = language;
+      map_info->engine_type_id = engine_type_id;
+      map_info->render_type_id = render_type_id;
+
+      build_map (map_info);
+
+      maps = g_list_prepend (maps, map_info);
+    }
+  else if (found_earlier)
+    {
+      /* Move the found map to the beginning of the list
+       * for speed next time around if we had to do
+       * any failing comparison. (No longer so important,
+       * since we don't strcmp.)
+       */
+      maps = g_list_remove_link(maps, tmp_list);
+      maps = g_list_prepend(maps, tmp_list->data);
+      g_list_free_1(tmp_list);
+    }
+
+  return map_info->map;
+}
+
+static gboolean
+pango_module_load (GTypeModule *module)
+{
+  PangoModule *pango_module = PANGO_MODULE (module);
+
+  if (pango_module->path)
+    {
+      pango_module->library = g_module_open (pango_module->path, G_MODULE_BIND_LOCAL);
+      if (!pango_module->library)
+       {
+         g_warning ("%s", g_module_error());
+         return FALSE;
+       }
+
+      /* extract symbols from the lib */
+      if (!g_module_symbol (pango_module->library, "script_engine_init",
+                           (gpointer *)(void *)&pango_module->init) ||
+         !g_module_symbol (pango_module->library, "script_engine_exit",
+                           (gpointer *)(void *)&pango_module->exit) ||
+         !g_module_symbol (pango_module->library, "script_engine_list",
+                           (gpointer *)(void *)&pango_module->list) ||
+         !g_module_symbol (pango_module->library, "script_engine_create",
+                           (gpointer *)(void *)&pango_module->create))
+       {
+         g_warning ("%s", g_module_error());
+         g_module_close (pango_module->library);
+
+         return FALSE;
+       }
+    }
+
+  /* call the module's init function to let it */
+  /* setup anything it needs to set up. */
+  pango_module->init (module);
+
+  return TRUE;
+}
+
+static void
+pango_module_unload (GTypeModule *module)
+{
+  PangoModule *pango_module = PANGO_MODULE (module);
+
+  pango_module->exit();
+
+  if (pango_module->path)
+    {
+      g_module_close (pango_module->library);
+      pango_module->library = NULL;
+
+      pango_module->init = NULL;
+      pango_module->exit = NULL;
+      pango_module->list = NULL;
+      pango_module->create = NULL;
+    }
+}
+
+/* This only will ever be called if an error occurs during
+ * initialization
+ */
+static void
+pango_module_finalize (GObject *object)
+{
+  PangoModule *module = PANGO_MODULE (object);
+
+  g_free (module->path);
+
+  parent_class->finalize (object);
+}
+
+static void
+pango_module_class_init (PangoModuleClass *class)
+{
+  GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (class));
+
+  module_class->load = pango_module_load;
+  module_class->unload = pango_module_unload;
+
+  gobject_class->finalize = pango_module_finalize;
+}
+
+static PANGO_DEFINE_TYPE (PangoModule, pango_module,
+                         pango_module_class_init, NULL,
+                         G_TYPE_TYPE_MODULE)
+
+static PangoEngine *
+pango_engine_pair_get_engine (PangoEnginePair *pair)
+{
+  if (!pair->engine)
+    {
+      if (g_type_module_use (G_TYPE_MODULE (pair->module)))
+       {
+         pair->engine = pair->module->create (pair->info.id);
+         g_type_module_unuse (G_TYPE_MODULE (pair->module));
+       }
+
+      if (!pair->engine)
+       {
+         /* If a module cannot be used, or doesn't not create an engine
+          * correctly, we print out an error containing module name and id,
+          * but to not flood the terminal with zillions of the message, we
+          * set a flag on the module to only err once per module.
+          */
+         static GQuark warned_quark = 0;
+
+         if (!warned_quark)
+           warned_quark = g_quark_from_static_string ("pango-module-warned");
+
+         if (!g_object_get_qdata (G_OBJECT (pair->module), warned_quark))
+           {
+             g_warning ("Failed to load Pango module '%s' for id '%s'", pair->module->path, pair->info.id);
+
+             g_object_set_qdata_full (G_OBJECT (pair->module), warned_quark,
+                                      GINT_TO_POINTER (1), NULL);
+           }
+       }
+    }
+
+  return pair->engine;
+}
+
+static void
+handle_included_module (PangoIncludedModule *included_module,
+                       GSList             **engine_list)
+{
+  PangoModule *module = g_object_new (PANGO_TYPE_MODULE, NULL);
+  PangoEngineInfo *engine_info;
+  int n_engines;
+  int i;
+
+  module->list = included_module->list;
+  module->init = included_module->init;
+  module->exit = included_module->exit;
+  module->create = included_module->create;
+
+  module->list (&engine_info, &n_engines);
+
+  for (i = 0; i < n_engines; i++)
+    {
+      PangoEnginePair *pair = g_slice_new (PangoEnginePair);
+
+      pair->info = engine_info[i];
+      pair->module = module;
+      pair->engine = NULL;
+
+      *engine_list = g_slist_prepend (*engine_list, pair);
+    }
+}
+
+static PangoModule *
+find_or_create_module (const char *raw_path)
+{
+  PangoModule *module;
+  char *path;
+
+#if defined(G_OS_WIN32) && defined(LIBDIR)
+  if (strncmp (raw_path,
+              LIBDIR "/pango/" MODULE_VERSION "/modules/",
+              strlen (LIBDIR "/pango/" MODULE_VERSION "/modules/")) == 0)
+    {
+      /* This is an entry put there by make install on the
+       * packager's system. On Windows a prebuilt Pango
+       * package can be installed in a random
+       * location. The pango.modules file distributed in
+       * such a package contains paths from the package
+       * builder's machine. Replace the path with the real
+       * one on this machine. */
+      path =
+       g_strconcat (pango_get_lib_subdirectory (),
+                    "\\" MODULE_VERSION "\\modules\\",
+                    raw_path + strlen (LIBDIR "/pango/" MODULE_VERSION "/modules/"),
+                    NULL);
+    }
+  else
+#endif
+    {
+      path = g_strdup (raw_path);
+    }
+
+  module = g_hash_table_lookup (dlloaded_modules, path);
+  if (module)
+    g_free (path);
+  else
+    {
+      module = g_object_new (PANGO_TYPE_MODULE, NULL);
+      module->path = path;
+      g_hash_table_insert (dlloaded_modules, path, module);
+    }
+
+  return module;
+}
+
+static PangoScript
+script_from_string (const char *str)
+{
+  static GEnumClass *class = NULL;
+  GEnumValue *value;
+  if (!class)
+    class = g_type_class_ref (PANGO_TYPE_SCRIPT);
+
+  value = g_enum_get_value_by_nick (class, str);
+  if (!value)
+    return PANGO_SCRIPT_INVALID_CODE;
+
+  return value->value;
+}
+
+static void
+script_info_free (PangoEngineScriptInfo *script_info,
+                 gpointer data G_GNUC_UNUSED)
+{
+  g_slice_free (PangoEngineScriptInfo, script_info);
+}
+
+static gboolean /* Returns true if succeeded, false if failed */
+process_module_file (FILE *module_file)
+{
+  GString *line_buf = g_string_new (NULL);
+  GString *tmp_buf = g_string_new (NULL);
+  gboolean have_error = FALSE;
+
+  while (pango_read_line (module_file, line_buf))
+    {
+      PangoEnginePair *pair = g_slice_new (PangoEnginePair);
+      PangoEngineScriptInfo *script_info;
+      PangoScript script;
+      GList *scripts = NULL;
+      GList *tmp_list;
+
+      const char *p;
+      char *q;
+      int i;
+
+      p = line_buf->str;
+
+      if (!pango_skip_space (&p))
+       {
+         g_slice_free (PangoEnginePair, pair);
+         continue;
+       }
+
+      i = 0;
+      while (1)
+       {
+         if (!pango_scan_string (&p, tmp_buf))
+           {
+             have_error = TRUE;
+             goto error;
+           }
+
+         switch (i)
+           {
+           case 0:
+             pair->module = find_or_create_module (tmp_buf->str);
+             break;
+           case 1:
+             pair->info.id = g_strdup (tmp_buf->str);
+             break;
+           case 2:
+             pair->info.engine_type = g_strdup (tmp_buf->str);
+             break;
+           case 3:
+             pair->info.render_type = g_strdup (tmp_buf->str);
+             break;
+           default:
+             q = strchr (tmp_buf->str, ':');
+             if (!q)
+               {
+                 have_error = TRUE;
+                 goto error;
+               }
+             *q = '\0';
+             script = script_from_string (tmp_buf->str);
+             if (script == PANGO_SCRIPT_INVALID_CODE)
+               {
+                 have_error = TRUE;
+                 goto error;
+               }
+
+             script_info = g_slice_new (PangoEngineScriptInfo);
+             script_info->script = script;
+             script_info->langs = g_strdup (q + 1);
+
+             scripts = g_list_prepend (scripts, script_info);
+           }
+
+         if (!pango_skip_space (&p))
+           break;
+
+         i++;
+       }
+
+      if (i<3)
+       {
+         have_error = TRUE;
+         goto error;
+       }
+
+      scripts = g_list_reverse (scripts);
+      pair->info.n_scripts = g_list_length (scripts);
+      pair->info.scripts = g_new (PangoEngineScriptInfo, pair->info.n_scripts);
+
+      tmp_list = scripts;
+      for (i=0; i<pair->info.n_scripts; i++)
+       {
+         pair->info.scripts[i] = *(PangoEngineScriptInfo *)tmp_list->data;
+         tmp_list = tmp_list->next;
+       }
+
+      pair->engine = NULL;
+
+      dlloaded_engines = g_slist_prepend (dlloaded_engines, pair);
+
+    error:
+      g_list_foreach (scripts, (GFunc)script_info_free, NULL);
+      g_list_free (scripts);
+
+      if (have_error)
+       {
+         g_printerr ("Error reading Pango modules file\n");
+         g_slice_free(PangoEnginePair, pair);
+         break;
+       }
+    }
+
+  g_string_free (line_buf, TRUE);
+  g_string_free (tmp_buf, TRUE);
+
+  return !have_error;
+}
+
+static void
+read_modules (void)
+{
+  FILE *module_file;
+
+  char *file_str =  pango_config_key_get ("Pango/ModuleFiles");
+  char **files;
+  int n;
+
+  dlloaded_modules = g_hash_table_new (g_str_hash, g_str_equal);
+
+  if (!file_str)
+    file_str = g_build_filename (pango_get_sysconf_subdirectory (),
+                                "pango.modules",
+                                NULL);
+
+  files = pango_split_file_list (file_str);
+
+  n = 0;
+  while (files[n])
+    n++;
+
+  while (n-- > 0)
+    {
+      module_file = g_fopen (files[n], "r");
+      if (module_file)
+       {
+         process_module_file(module_file);
+         fclose(module_file);
+       }
+    }
+
+  g_strfreev (files);
+  g_free (file_str);
+
+  dlloaded_engines = g_slist_reverse (dlloaded_engines);
+}
+
+static void
+init_modules (void)
+{
+  static gboolean init = FALSE;
+  int i;
+
+  if (init)
+    return;
+  else
+    init = TRUE;
+
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+  for (i = 0; _pango_included_lang_modules[i].list; i++)
+    pango_module_register (&_pango_included_lang_modules[i]);
+  read_modules ();
+}
+
+static void
+map_add_engine (PangoMapInfo    *info,
+               PangoEnginePair *pair)
+{
+  PangoMap *map = info->map;
+  int i;
+
+  for (i=0; i<pair->info.n_scripts; i++)
+    {
+      PangoScript script;
+      PangoMapEntry *entry;
+      gboolean is_exact = FALSE;
+
+      if (pair->info.scripts[i].langs)
+       {
+         if (pango_language_matches (info->language, pair->info.scripts[i].langs))
+           is_exact = TRUE;
+       }
+
+      script = pair->info.scripts[i].script;
+      if ((guint)script >= map->entries->len)
+       g_array_set_size (map->entries, script + 1);
+
+      entry = &g_array_index (map->entries, PangoMapEntry, script);
+
+      if (is_exact)
+       entry->exact = g_slist_prepend (entry->exact, pair);
+      else
+       entry->fallback = g_slist_prepend (entry->fallback, pair);
+    }
+}
+
+static void
+map_add_engine_list (PangoMapInfo *info,
+                    GSList       *engines,
+                    const char   *engine_type,
+                    const char   *render_type)
+{
+  GSList *tmp_list = engines;
+
+  while (tmp_list)
+    {
+      PangoEnginePair *pair = tmp_list->data;
+      tmp_list = tmp_list->next;
+
+      if (strcmp (pair->info.engine_type, engine_type) == 0 &&
+         strcmp (pair->info.render_type, render_type) == 0)
+       {
+         map_add_engine (info, pair);
+       }
+    }
+}
+
+static void
+build_map (PangoMapInfo *info)
+{
+  const char *engine_type = g_quark_to_string (info->engine_type_id);
+  const char *render_type = g_quark_to_string (info->render_type_id);
+
+  init_modules();
+
+  if (!dlloaded_engines && !registered_engines)
+    {
+      static gboolean no_module_warning = FALSE;
+      if (!no_module_warning)
+       {
+         gchar *filename = g_build_filename (pango_get_sysconf_subdirectory (),
+                                             "pango.modules",
+                                             NULL);
+         g_critical ("No modules found:\n"
+                     "No builtin or dynamically loaded modules were found.\n"
+                     "PangoFc will not work correctly.\n"
+                     "This probably means there was an error in the creation of:\n"
+                     "  '%s'\n"
+                     "You should create this file by running:\n"
+                     "  pango-querymodules > '%s'",
+                    filename,
+                    filename);
+         g_free (filename);
+
+         no_module_warning = TRUE;
+       }
+    }
+
+  info->map = g_slice_new (PangoMap);
+  info->map->entries = g_array_new (FALSE, TRUE, sizeof (PangoMapEntry));
+
+  map_add_engine_list (info, dlloaded_engines, engine_type, render_type);
+  map_add_engine_list (info, registered_engines, engine_type, render_type);
+}
+
+/**
+ * pango_map_get_engine:
+ * @map: a #PangoMap
+ * @script: a #PangoScript
+ *
+ * Returns the best engine listed in the map for a given script
+ *
+ * Return value: the best engine, if one is listed for the script,
+ *    or %NULL. The lookup may cause the engine to be loaded;
+ *    once an engine is loaded, it won't be unloaded. If multiple
+ *    engines are exact for the script, the choice of which is
+ *    returned is arbitrary.
+ **/
+PangoEngine *
+pango_map_get_engine (PangoMap   *map,
+                     PangoScript script)
+{
+  PangoMapEntry *entry = NULL;
+  PangoMapEntry *common_entry = NULL;
+
+  if ((guint)script < map->entries->len)
+    entry = &g_array_index (map->entries, PangoMapEntry, script);
+
+  if (PANGO_SCRIPT_COMMON < map->entries->len)
+    common_entry = &g_array_index (map->entries, PangoMapEntry, PANGO_SCRIPT_COMMON);
+
+  if (entry && entry->exact)
+    return pango_engine_pair_get_engine (entry->exact->data);
+  else if (common_entry && common_entry->exact)
+    return pango_engine_pair_get_engine (common_entry->exact->data);
+  else if (entry && entry->fallback)
+    return pango_engine_pair_get_engine (entry->fallback->data);
+  else if (common_entry && common_entry->fallback)
+    return pango_engine_pair_get_engine (common_entry->fallback->data);
+  else
+    return NULL;
+}
+
+static void
+append_engines (GSList **engine_list,
+               GSList  *pair_list)
+{
+  GSList *l;
+
+  for (l = pair_list; l; l = l->next)
+    {
+      PangoEngine *engine = pango_engine_pair_get_engine (l->data);
+      if (engine)
+       *engine_list = g_slist_append (*engine_list, engine);
+    }
+}
+
+/**
+ * pango_map_get_engines:
+ * @map: a #PangoMap
+ * @script: a #PangoScript
+ * @exact_engines: location to store list of engines that exactly
+ *  handle this script.
+ * @fallback_engines: location to store list of engines that approximately
+ *  handle this script.
+ *
+ * Finds engines in the map that handle the given script. The returned
+ * lists should be freed with g_slist_free, but the engines in the
+ * lists are owned by GLib and will be kept around permanently, so
+ * they should not be unref'ed.
+ *
+ * Since: 1.4
+ **/
+void
+pango_map_get_engines (PangoMap     *map,
+                      PangoScript   script,
+                      GSList      **exact_engines,
+                      GSList      **fallback_engines)
+{
+  PangoMapEntry *entry = NULL;
+  PangoMapEntry *common_entry = NULL;
+
+  if ((guint)script < map->entries->len)
+    entry = &g_array_index (map->entries, PangoMapEntry, script);
+
+  if (PANGO_SCRIPT_COMMON < map->entries->len)
+    common_entry = &g_array_index (map->entries, PangoMapEntry, PANGO_SCRIPT_COMMON);
+
+  if (exact_engines)
+    {
+      *exact_engines = NULL;
+      if (entry && entry->exact)
+       append_engines (exact_engines, entry->exact);
+      else if (common_entry && common_entry->exact)
+       append_engines (exact_engines, common_entry->exact);
+    }
+
+  if (fallback_engines)
+    {
+      *fallback_engines = NULL;
+      if (entry && entry->fallback)
+       append_engines (fallback_engines, entry->fallback);
+      else if (common_entry && common_entry->fallback)
+       append_engines (fallback_engines, common_entry->fallback);
+    }
+}
+
+/**
+ * pango_module_register:
+ * @module: a #PangoIncludedModule
+ *
+ * Registers a statically linked module with Pango. The
+ * #PangoIncludedModule structure that is passed in contains the
+ * functions that would otherwise be loaded from a dynamically loaded
+ * module.
+ **/
+void
+pango_module_register (PangoIncludedModule *module)
+{
+  GSList *tmp_list = NULL;
+
+  handle_included_module (module, &tmp_list);
+
+  registered_engines = g_slist_concat (registered_engines,
+                                      g_slist_reverse (tmp_list));
+}
diff --git a/pango/modules.h b/pango/modules.h
new file mode 100755 (executable)
index 0000000..ca22701
--- /dev/null
@@ -0,0 +1,34 @@
+/* Pango
+ * modules.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <pango/pango-engine.h>
+#include <pango/pango-modules.h>
+
+#ifndef __MODULES_H__
+#define __MODULES_H__
+
+extern PangoIncludedModule _pango_included_lang_modules[];
+extern PangoIncludedModule _pango_included_x_modules[];
+extern PangoIncludedModule _pango_included_fc_modules[];
+extern PangoIncludedModule _pango_included_win32_modules[];
+extern PangoIncludedModule _pango_included_atsui_modules[];
+
+#endif /* __MODULES_H__ */
diff --git a/pango/opentype/COPYING b/pango/opentype/COPYING
new file mode 100755 (executable)
index 0000000..d5075a3
--- /dev/null
@@ -0,0 +1,17 @@
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in
+all copies of this software.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
diff --git a/pango/opentype/Makefile.am b/pango/opentype/Makefile.am
new file mode 100755 (executable)
index 0000000..ebec8ce
--- /dev/null
@@ -0,0 +1,58 @@
+# Process this file with automake to produce Makefile.in
+
+NULL =
+
+# The following warning options are useful for debugging: -Wpadded -Wcast-align
+#AM_CXXFLAGS = 
+
+noinst_LTLIBRARIES = libharfbuzz.la
+
+HBSOURCES =  \
+       hb-blob.c \
+       hb-buffer.c \
+       hb-buffer-private.h \
+       hb-font.cc \
+       hb-font-private.h \
+       hb-glib.h \
+       hb-glib.c \
+       hb-private.h \
+       hb-shape.h \
+       hb-shape.c \
+       hb-unicode.c \
+       hb-unicode.h \
+       hb-unicode-private.h \
+       hb-open-file-private.hh \
+       hb-open-type-private.hh \
+       hb-ot-layout.cc \
+       hb-ot-layout-common-private.hh \
+       hb-ot-layout-gdef-private.hh \
+       hb-ot-layout-gpos-private.hh \
+       hb-ot-layout-gsubgpos-private.hh \
+       hb-ot-layout-gsub-private.hh \
+       hb-ot-layout-private.h \
+       hb-object-private.h \
+       $(NULL)
+
+HBHEADERS = \
+       hb.h \
+       hb-blob.h \
+       hb-buffer.h \
+       hb-common.h \
+       hb-font.h \
+       hb-ot.h \
+       hb-ot-layout.h \
+       $(NULL)
+
+libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
+libharfbuzz_la_CPPFLAGS = -DHAVE_GLIB $(GLIB_CFLAGS)
+libharfbuzz_la_LIBADD = $(GLIB_LIBS)
+
+noinst_PROGRAMS = main
+
+main_SOURCES = main.cc
+main_CPPFLAGS = -DHAVE_GLIB $(GLIB_CFLAGS)
+main_LDADD = libharfbuzz.la $(GLIB_LIBS)
+
+EXTRA_DIST = README COPYING
+
+-include $(top_srcdir)/git.mk
diff --git a/pango/opentype/Makefile.in b/pango/opentype/Makefile.in
new file mode 100644 (file)
index 0000000..8384a1f
--- /dev/null
@@ -0,0 +1,773 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Process this file with automake to produce Makefile.in
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = main$(EXEEXT)
+subdir = pango/opentype
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       COPYING TODO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libharfbuzz_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_1 =
+am__objects_2 = libharfbuzz_la-hb-blob.lo libharfbuzz_la-hb-buffer.lo \
+       libharfbuzz_la-hb-font.lo libharfbuzz_la-hb-glib.lo \
+       libharfbuzz_la-hb-shape.lo libharfbuzz_la-hb-unicode.lo \
+       libharfbuzz_la-hb-ot-layout.lo $(am__objects_1)
+am__objects_3 = $(am__objects_1)
+am_libharfbuzz_la_OBJECTS = $(am__objects_2) $(am__objects_3)
+libharfbuzz_la_OBJECTS = $(am_libharfbuzz_la_OBJECTS)
+PROGRAMS = $(noinst_PROGRAMS)
+am_main_OBJECTS = main-main.$(OBJEXT)
+main_OBJECTS = $(am_main_OBJECTS)
+main_DEPENDENCIES = libharfbuzz.la $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libharfbuzz_la_SOURCES) $(main_SOURCES)
+DIST_SOURCES = $(libharfbuzz_la_SOURCES) $(main_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+NULL = 
+
+# The following warning options are useful for debugging: -Wpadded -Wcast-align
+#AM_CXXFLAGS = 
+noinst_LTLIBRARIES = libharfbuzz.la
+HBSOURCES = \
+       hb-blob.c \
+       hb-buffer.c \
+       hb-buffer-private.h \
+       hb-font.cc \
+       hb-font-private.h \
+       hb-glib.h \
+       hb-glib.c \
+       hb-private.h \
+       hb-shape.h \
+       hb-shape.c \
+       hb-unicode.c \
+       hb-unicode.h \
+       hb-unicode-private.h \
+       hb-open-file-private.hh \
+       hb-open-type-private.hh \
+       hb-ot-layout.cc \
+       hb-ot-layout-common-private.hh \
+       hb-ot-layout-gdef-private.hh \
+       hb-ot-layout-gpos-private.hh \
+       hb-ot-layout-gsubgpos-private.hh \
+       hb-ot-layout-gsub-private.hh \
+       hb-ot-layout-private.h \
+       hb-object-private.h \
+       $(NULL)
+
+HBHEADERS = \
+       hb.h \
+       hb-blob.h \
+       hb-buffer.h \
+       hb-common.h \
+       hb-font.h \
+       hb-ot.h \
+       hb-ot-layout.h \
+       $(NULL)
+
+libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
+libharfbuzz_la_CPPFLAGS = -DHAVE_GLIB $(GLIB_CFLAGS)
+libharfbuzz_la_LIBADD = $(GLIB_LIBS)
+main_SOURCES = main.cc
+main_CPPFLAGS = -DHAVE_GLIB $(GLIB_CFLAGS)
+main_LDADD = libharfbuzz.la $(GLIB_LIBS)
+EXTRA_DIST = README COPYING
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  pango/opentype/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  pango/opentype/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libharfbuzz.la: $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_DEPENDENCIES) 
+       $(CXXLINK)  $(libharfbuzz_la_LDFLAGS) $(libharfbuzz_la_OBJECTS) $(libharfbuzz_la_LIBADD) $(LIBS)
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+main$(EXEEXT): $(main_OBJECTS) $(main_DEPENDENCIES) 
+       @rm -f main$(EXEEXT)
+       $(CXXLINK) $(main_LDFLAGS) $(main_OBJECTS) $(main_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-blob.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-buffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-font.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-glib.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-shape.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libharfbuzz_la-hb-unicode.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main-main.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libharfbuzz_la-hb-blob.lo: hb-blob.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libharfbuzz_la-hb-blob.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-blob.Tpo" -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.c' || echo '$(srcdir)/'`hb-blob.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libharfbuzz_la-hb-blob.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-blob.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-blob.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hb-blob.c' object='libharfbuzz_la-hb-blob.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libharfbuzz_la-hb-blob.lo `test -f 'hb-blob.c' || echo '$(srcdir)/'`hb-blob.c
+
+libharfbuzz_la-hb-buffer.lo: hb-buffer.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libharfbuzz_la-hb-buffer.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo" -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.c' || echo '$(srcdir)/'`hb-buffer.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-buffer.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-buffer.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hb-buffer.c' object='libharfbuzz_la-hb-buffer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libharfbuzz_la-hb-buffer.lo `test -f 'hb-buffer.c' || echo '$(srcdir)/'`hb-buffer.c
+
+libharfbuzz_la-hb-glib.lo: hb-glib.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libharfbuzz_la-hb-glib.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-glib.Tpo" -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.c' || echo '$(srcdir)/'`hb-glib.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libharfbuzz_la-hb-glib.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-glib.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-glib.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hb-glib.c' object='libharfbuzz_la-hb-glib.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libharfbuzz_la-hb-glib.lo `test -f 'hb-glib.c' || echo '$(srcdir)/'`hb-glib.c
+
+libharfbuzz_la-hb-shape.lo: hb-shape.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libharfbuzz_la-hb-shape.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-shape.Tpo" -c -o libharfbuzz_la-hb-shape.lo `test -f 'hb-shape.c' || echo '$(srcdir)/'`hb-shape.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libharfbuzz_la-hb-shape.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-shape.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-shape.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hb-shape.c' object='libharfbuzz_la-hb-shape.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libharfbuzz_la-hb-shape.lo `test -f 'hb-shape.c' || echo '$(srcdir)/'`hb-shape.c
+
+libharfbuzz_la-hb-unicode.lo: hb-unicode.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libharfbuzz_la-hb-unicode.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo" -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.c' || echo '$(srcdir)/'`hb-unicode.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-unicode.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-unicode.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='hb-unicode.c' object='libharfbuzz_la-hb-unicode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libharfbuzz_la-hb-unicode.lo `test -f 'hb-unicode.c' || echo '$(srcdir)/'`hb-unicode.c
+
+.cc.o:
+@am__fastdepCXX_TRUE@  if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@  if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@  if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+libharfbuzz_la-hb-font.lo: hb-font.cc
+@am__fastdepCXX_TRUE@  if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-font.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-font.Tpo" -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/libharfbuzz_la-hb-font.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-font.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-font.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-font.cc' object='libharfbuzz_la-hb-font.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-font.lo `test -f 'hb-font.cc' || echo '$(srcdir)/'`hb-font.cc
+
+libharfbuzz_la-hb-ot-layout.lo: hb-ot-layout.cc
+@am__fastdepCXX_TRUE@  if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libharfbuzz_la-hb-ot-layout.lo -MD -MP -MF "$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo" -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo" "$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Plo"; else rm -f "$(DEPDIR)/libharfbuzz_la-hb-ot-layout.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='hb-ot-layout.cc' object='libharfbuzz_la-hb-ot-layout.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libharfbuzz_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libharfbuzz_la-hb-ot-layout.lo `test -f 'hb-ot-layout.cc' || echo '$(srcdir)/'`hb-ot-layout.cc
+
+main-main.o: main.cc
+@am__fastdepCXX_TRUE@  if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT main-main.o -MD -MP -MF "$(DEPDIR)/main-main.Tpo" -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/main-main.Tpo" "$(DEPDIR)/main-main.Po"; else rm -f "$(DEPDIR)/main-main.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='main.cc' object='main-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o main-main.o `test -f 'main.cc' || echo '$(srcdir)/'`main.cc
+
+main-main.obj: main.cc
+@am__fastdepCXX_TRUE@  if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT main-main.obj -MD -MP -MF "$(DEPDIR)/main-main.Tpo" -c -o main-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi`; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/main-main.Tpo" "$(DEPDIR)/main-main.Po"; else rm -f "$(DEPDIR)/main-main.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='main.cc' object='main-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(main_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o main-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-exec install-exec-am install-info \
+       install-info-am install-man install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-info-am
+
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pango/opentype/README b/pango/opentype/README
new file mode 100755 (executable)
index 0000000..42d0104
--- /dev/null
@@ -0,0 +1,9 @@
+This is HarfBuzz, an OpenType Layout engine.
+
+Bug reports on these files should be sent to the HarfBuzz mailing list as
+listed on http://freedesktop.org/wiki/Software/harfbuzz
+
+For license information, see the file COPYING.
+
+Behdad Esfahbod
+May 24, 2009
diff --git a/pango/opentype/TODO b/pango/opentype/TODO
new file mode 100755 (executable)
index 0000000..8524279
--- /dev/null
@@ -0,0 +1,6 @@
+- HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH vs LookupType::... mess
+- Rename LookupFlag::MarkAttachmentType to LookupFlag:IgnoreSpecialMarks
+- cmap14 support in get_glyph callback
+- size_t?
+- Figure out compiler selection (add test for link to libstdc++)
+- Rename MEMORY_MODE to ACCESS_MODE
diff --git a/pango/opentype/hb-blob.c b/pango/opentype/hb-blob.c
new file mode 100755 (executable)
index 0000000..107cd43
--- /dev/null
@@ -0,0 +1,376 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#include "hb-private.h"
+
+#include "hb-blob.h"
+
+#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include <sys/mman.h>
+#endif /* HAVE_SYS_MMAN_H */
+
+#ifndef HB_DEBUG_BLOB
+#define HB_DEBUG_BLOB HB_DEBUG
+#endif
+
+struct _hb_blob_t {
+  hb_reference_count_t ref_count;
+
+  unsigned int length;
+
+  hb_mutex_t lock;
+  /* the rest are protected by lock */
+
+  unsigned int lock_count;
+  hb_memory_mode_t mode;
+
+  const char *data;
+
+  hb_destroy_func_t destroy;
+  void *user_data;
+};
+static hb_blob_t _hb_blob_nil = {
+  HB_REFERENCE_COUNT_INVALID, /* ref_count */
+
+  0, /* length */
+
+  HB_MUTEX_INIT, /* lock */
+
+  0, /* lock_count */
+  HB_MEMORY_MODE_READONLY, /* mode */
+
+  NULL, /* data */
+
+  NULL, /* destroy */
+  NULL /* user_data */
+};
+
+static void
+_hb_blob_destroy_user_data (hb_blob_t *blob)
+{
+  if (blob->destroy) {
+    blob->destroy (blob->user_data);
+    blob->destroy = NULL;
+    blob->user_data = NULL;
+  }
+}
+
+static void
+_hb_blob_unlock_and_destroy (hb_blob_t *blob)
+{
+  hb_blob_unlock (blob);
+  hb_blob_destroy (blob);
+}
+
+hb_blob_t *
+hb_blob_create (const char        *data,
+               unsigned int       length,
+               hb_memory_mode_t   mode,
+               hb_destroy_func_t  destroy,
+               void              *user_data)
+{
+  hb_blob_t *blob;
+
+  if (!length || !HB_OBJECT_DO_CREATE (hb_blob_t, blob)) {
+    if (destroy)
+      destroy (user_data);
+    return &_hb_blob_nil;
+  }
+
+  hb_mutex_init (blob->lock);
+  blob->lock_count = 0;
+
+  blob->data = data;
+  blob->length = length;
+  blob->mode = mode;
+
+  blob->destroy = destroy;
+  blob->user_data = user_data;
+
+  if (blob->mode == HB_MEMORY_MODE_DUPLICATE) {
+    blob->mode = HB_MEMORY_MODE_READONLY;
+    if (!hb_blob_try_writable (blob)) {
+      hb_blob_destroy (blob);
+      return &_hb_blob_nil;
+    }
+  }
+
+  return blob;
+}
+
+hb_blob_t *
+hb_blob_create_sub_blob (hb_blob_t    *parent,
+                        unsigned int  offset,
+                        unsigned int  length)
+{
+  hb_blob_t *blob;
+  const char *pdata;
+
+  if (!length || offset >= parent->length || !HB_OBJECT_DO_CREATE (hb_blob_t, blob))
+    return &_hb_blob_nil;
+
+  pdata = hb_blob_lock (parent);
+
+  blob->data = pdata + offset;
+  blob->length = MIN (length, parent->length - offset);
+
+  hb_mutex_lock (parent->lock);
+  blob->mode = parent->mode;
+  hb_mutex_unlock (parent->lock);
+
+  blob->destroy = (hb_destroy_func_t) _hb_blob_unlock_and_destroy;
+  blob->user_data = hb_blob_reference (parent);
+
+  return blob;
+}
+
+hb_blob_t *
+hb_blob_create_empty (void)
+{
+  return &_hb_blob_nil;
+}
+
+hb_blob_t *
+hb_blob_reference (hb_blob_t *blob)
+{
+  HB_OBJECT_DO_REFERENCE (blob);
+}
+
+unsigned int
+hb_blob_get_reference_count (hb_blob_t *blob)
+{
+  HB_OBJECT_DO_GET_REFERENCE_COUNT (blob);
+}
+
+void
+hb_blob_destroy (hb_blob_t *blob)
+{
+  HB_OBJECT_DO_DESTROY (blob);
+
+  _hb_blob_destroy_user_data (blob);
+
+  free (blob);
+}
+
+unsigned int
+hb_blob_get_length (hb_blob_t *blob)
+{
+  return blob->length;
+}
+
+const char *
+hb_blob_lock (hb_blob_t *blob)
+{
+  if (HB_OBJECT_IS_INERT (blob))
+    return NULL;
+
+  hb_mutex_lock (blob->lock);
+
+  blob->lock_count++;
+#if HB_DEBUG_BLOB
+  fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
+          blob->lock_count, blob->data);
+#endif
+
+  hb_mutex_unlock (blob->lock);
+
+  return blob->data;
+}
+
+void
+hb_blob_unlock (hb_blob_t *blob)
+{
+  if (HB_OBJECT_IS_INERT (blob))
+    return;
+
+  hb_mutex_lock (blob->lock);
+
+  assert (blob->lock_count > 0);
+  blob->lock_count--;
+#if HB_DEBUG_BLOB
+  fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
+          hb_atomic_int_get (blob->lock_count), blob->data);
+#endif
+
+  hb_mutex_unlock (blob->lock);
+}
+
+hb_bool_t
+hb_blob_is_writable (hb_blob_t *blob)
+{
+  hb_memory_mode_t mode;
+
+  if (HB_OBJECT_IS_INERT (blob))
+    return FALSE;
+
+  hb_mutex_lock (blob->lock);
+
+  mode = blob->mode;
+
+  hb_mutex_unlock (blob->lock);
+
+  return mode == HB_MEMORY_MODE_WRITABLE;
+}
+
+
+static hb_bool_t
+_try_make_writable_inplace_unix_locked (hb_blob_t *blob)
+{
+#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MPROTECT)
+  unsigned int pagesize = -1, mask, length;
+  const char *addr;
+
+#if defined(HAVE_SYSCONF) && defined(_SC_PAGE_SIZE)
+  pagesize = (unsigned int) sysconf (_SC_PAGE_SIZE);
+#elif defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
+  pagesize = (unsigned int) sysconf (_SC_PAGESIZE);
+#elif defined(HAVE_GETPAGESIZE)
+  pagesize = (unsigned int) getpagesize ();
+#endif
+
+  if ((unsigned int) -1 == pagesize) {
+#if HB_DEBUG_BLOB
+    fprintf (stderr, "%p %s: failed to get pagesize: %s\n", blob, __FUNCTION__, strerror (errno));
+#endif
+    return FALSE;
+  }
+#if HB_DEBUG_BLOB
+  fprintf (stderr, "%p %s: pagesize is %u\n", blob, __FUNCTION__, pagesize);
+#endif
+
+  mask = ~(pagesize-1);
+  addr = (const char *) (((size_t) blob->data) & mask);
+  length = (const char *) (((size_t) blob->data + blob->length + pagesize-1) & mask)  - addr;
+#if HB_DEBUG_BLOB
+  fprintf (stderr, "%p %s: calling mprotect on [%p..%p] (%d bytes)\n",
+          blob, __FUNCTION__,
+          addr, addr+length, length);
+#endif
+  if (-1 == mprotect ((void *) addr, length, PROT_READ | PROT_WRITE)) {
+#if HB_DEBUG_BLOB
+    fprintf (stderr, "%p %s: %s\n", blob, __FUNCTION__, strerror (errno));
+#endif
+    return FALSE;
+  }
+
+#if HB_DEBUG_BLOB
+  fprintf (stderr, "%p %s: successfully made [%p..%p] (%d bytes) writable\n",
+          blob, __FUNCTION__,
+          addr, addr+length, length);
+#endif
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
+
+static void
+_try_writable_inplace_locked (hb_blob_t *blob)
+{
+#if HB_DEBUG_BLOB
+  fprintf (stderr, "%p %s: making writable\n", blob, __FUNCTION__);
+#endif
+
+  if (_try_make_writable_inplace_unix_locked (blob)) {
+#if HB_DEBUG_BLOB
+    fprintf (stderr, "%p %s: making writable -> succeeded\n", blob, __FUNCTION__);
+#endif
+    blob->mode = HB_MEMORY_MODE_WRITABLE;
+  } else {
+#if HB_DEBUG_BLOB
+    fprintf (stderr, "%p %s: making writable -> FAILED\n", blob, __FUNCTION__);
+#endif
+    /* Failed to make writable inplace, mark that */
+    blob->mode = HB_MEMORY_MODE_READONLY;
+  }
+}
+
+hb_bool_t
+hb_blob_try_writable_inplace (hb_blob_t *blob)
+{
+  hb_memory_mode_t mode;
+
+  if (HB_OBJECT_IS_INERT (blob))
+    return FALSE;
+
+  hb_mutex_lock (blob->lock);
+
+  if (blob->mode == HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE)
+    _try_writable_inplace_locked (blob);
+
+  mode = blob->mode;
+
+  hb_mutex_unlock (blob->lock);
+
+  return mode == HB_MEMORY_MODE_WRITABLE;
+}
+
+hb_bool_t
+hb_blob_try_writable (hb_blob_t *blob)
+{
+  hb_memory_mode_t mode;
+
+  if (HB_OBJECT_IS_INERT (blob))
+    return FALSE;
+
+  hb_mutex_lock (blob->lock);
+
+  if (blob->mode == HB_MEMORY_MODE_READONLY)
+  {
+    char *new_data;
+
+#if HB_DEBUG_BLOB
+    fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
+            blob->lock_count, blob->data);
+#endif
+
+    if (blob->lock_count)
+      goto done;
+
+    new_data = malloc (blob->length);
+    if (new_data) {
+#if HB_DEBUG_BLOB
+      fprintf (stderr, "%p %s: dupped successfully -> %p\n", blob, __FUNCTION__, blob->data);
+#endif
+      memcpy (new_data, blob->data, blob->length);
+      blob->data = new_data;
+      blob->mode = HB_MEMORY_MODE_WRITABLE;
+      _hb_blob_destroy_user_data (blob);
+    }
+  }
+  else if (blob->mode == HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE)
+    _try_writable_inplace_locked (blob);
+
+done:
+  mode = blob->mode;
+
+  hb_mutex_unlock (blob->lock);
+
+  return mode == HB_MEMORY_MODE_WRITABLE;
+}
diff --git a/pango/opentype/hb-blob.h b/pango/opentype/hb-blob.h
new file mode 100755 (executable)
index 0000000..131a282
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_BLOB_H
+#define HB_BLOB_H
+
+#include "hb-common.h"
+
+HB_BEGIN_DECLS
+
+typedef enum {
+  HB_MEMORY_MODE_DUPLICATE,
+  HB_MEMORY_MODE_READONLY,
+  HB_MEMORY_MODE_WRITABLE,
+  HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE
+} hb_memory_mode_t;
+
+typedef struct _hb_blob_t hb_blob_t;
+
+hb_blob_t *
+hb_blob_create (const char        *data,
+               unsigned int       length,
+               hb_memory_mode_t   mode,
+               hb_destroy_func_t  destroy,
+               void              *user_data);
+
+hb_blob_t *
+hb_blob_create_sub_blob (hb_blob_t    *parent,
+                        unsigned int  offset,
+                        unsigned int  length);
+
+hb_blob_t *
+hb_blob_create_empty (void);
+
+hb_blob_t *
+hb_blob_reference (hb_blob_t *blob);
+
+unsigned int
+hb_blob_get_reference_count (hb_blob_t *blob);
+
+void
+hb_blob_destroy (hb_blob_t *blob);
+
+unsigned int
+hb_blob_get_length (hb_blob_t *blob);
+
+const char *
+hb_blob_lock (hb_blob_t *blob);
+
+void
+hb_blob_unlock (hb_blob_t *blob);
+
+hb_bool_t
+hb_blob_is_writable (hb_blob_t *blob);
+
+hb_bool_t
+hb_blob_try_writable_inplace (hb_blob_t *blob);
+
+hb_bool_t
+hb_blob_try_writable (hb_blob_t *blob);
+
+HB_END_DECLS
+
+#endif /* HB_BLOB_H */
diff --git a/pango/opentype/hb-buffer-private.h b/pango/opentype/hb-buffer-private.h
new file mode 100755 (executable)
index 0000000..45cdc4d
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 1998-2004  David Turner and Werner Lemberg
+ * Copyright (C) 2004,2007,2009  Red Hat, Inc.
+ *
+ * This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
+ */
+
+#ifndef HB_BUFFER_PRIVATE_H
+#define HB_BUFFER_PRIVATE_H
+
+#include "hb-private.h"
+#include "hb-buffer.h"
+
+HB_BEGIN_DECLS
+
+#define HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN 0xFFFF
+
+
+typedef struct _hb_internal_glyph_info_t {
+  hb_codepoint_t codepoint;
+  hb_mask_t      mask;
+  uint32_t       cluster;
+  uint16_t       component;
+  uint16_t       lig_id;
+  uint32_t       gproperty;
+} hb_internal_glyph_info_t;
+
+typedef struct _hb_internal_glyph_position_t {
+  hb_position_t  x_pos;
+  hb_position_t  y_pos;
+  hb_position_t  x_advance;
+  hb_position_t  y_advance;
+  uint32_t       new_advance :1;       /* if set, the advance width values are
+                                          absolute, i.e., they won't be
+                                          added to the original glyph's value
+                                          but rather replace them */
+  uint32_t       back : 15;            /* number of glyphs to go back
+                                          for drawing current glyph */
+  int32_t        cursive_chain : 16;   /* character to which this connects,
+                                          may be positive or negative; used
+                                          only internally */
+} hb_internal_glyph_position_t;
+
+ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_internal_glyph_info_t));
+ASSERT_STATIC (sizeof (hb_glyph_position_t) == sizeof (hb_internal_glyph_position_t));
+ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t));
+
+
+struct _hb_buffer_t {
+  hb_reference_count_t ref_count;
+
+  unsigned int allocated;
+
+  hb_bool_t    have_output; /* weather we have an output buffer going on */
+  unsigned int in_length;
+  unsigned int out_length;
+  unsigned int in_pos;
+  unsigned int out_pos; /* out_length and out_pos are actually always the same */
+
+  hb_internal_glyph_info_t     *in_string;
+  hb_internal_glyph_info_t     *out_string;
+  hb_internal_glyph_position_t *positions;
+
+  hb_direction_t       direction;
+  unsigned int         max_lig_id;
+};
+
+
+HB_INTERNAL void
+_hb_buffer_swap (hb_buffer_t *buffer);
+
+HB_INTERNAL void
+_hb_buffer_clear_output (hb_buffer_t *buffer);
+
+HB_INTERNAL void
+_hb_buffer_add_output_glyphs (hb_buffer_t *buffer,
+                             unsigned int num_in,
+                             unsigned int num_out,
+                             const uint16_t *glyph_data_be,
+                             unsigned short component,
+                             unsigned short ligID);
+
+HB_INTERNAL void
+_hb_buffer_add_output_glyph (hb_buffer_t *buffer,
+                            hb_codepoint_t glyph_index,
+                            unsigned short component,
+                            unsigned short ligID);
+
+HB_INTERNAL void
+_hb_buffer_next_glyph (hb_buffer_t *buffer);
+
+HB_INTERNAL void
+_hb_buffer_replace_glyph (hb_buffer_t *buffer,
+                         hb_codepoint_t glyph_index);
+
+HB_INTERNAL unsigned short
+_hb_buffer_allocate_lig_id (hb_buffer_t *buffer);
+
+
+/* convenience macros */
+#define IN_GLYPH(pos)          (buffer->in_string[(pos)].codepoint)
+#define IN_INFO(pos)           (&buffer->in_string[(pos)])
+#define IN_CURGLYPH()          (buffer->in_string[buffer->in_pos].codepoint)
+#define IN_CURINFO()           (&buffer->in_string[buffer->in_pos])
+#define IN_MASK(pos)           (buffer->in_string[(pos)].mask)
+#define IN_LIGID(pos)          (buffer->in_string[(pos)].lig_id)
+#define IN_COMPONENT(pos)      (buffer->in_string[(pos)].component)
+#define POSITION(pos)          (&buffer->positions[(pos)])
+#define CURPOSITION()          (&buffer->positions[buffer->in_pos])
+#define OUT_GLYPH(pos)         (buffer->out_string[(pos)].codepoint)
+#define OUT_INFO(pos)          (&buffer->out_string[(pos)])
+
+HB_END_DECLS
+
+#endif /* HB_BUFFER_PRIVATE_H */
diff --git a/pango/opentype/hb-buffer.c b/pango/opentype/hb-buffer.c
new file mode 100755 (executable)
index 0000000..93b51e5
--- /dev/null
@@ -0,0 +1,516 @@
+/*
+ * Copyright (C) 1998-2004  David Turner and Werner Lemberg
+ * Copyright (C) 2004,2007  Red Hat, Inc.
+ *
+ * This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
+ */
+
+#include "hb-buffer-private.h"
+
+#include <string.h>
+
+
+static hb_buffer_t _hb_buffer_nil = {
+  HB_REFERENCE_COUNT_INVALID /* ref_count */
+};
+
+/* Here is how the buffer works internally:
+ *
+ * There are two string pointers: in_string and out_string.  They
+ * always have same allocated size, but different length and positions.
+ *
+ * As an optimization, both in_string and out_string may point to the
+ * same piece of memory, which is owned by in_string.  This remains the
+ * case as long as out_length doesn't exceed in_length at any time.
+ * In that case, swap() is no-op and the glyph operations operate mostly
+ * in-place.
+ *
+ * As soon as out_string gets longer than in_string, out_string is moved over
+ * to an alternate buffer (which we reuse the positions buffer for!), and its
+ * current contents (out_length entries) are copied to the alt buffer.
+ * This should all remain transparent to the user.  swap() then switches
+ * in_string and out_string.
+ */
+
+/* XXX err handling */
+
+/* Internal API */
+
+static void
+hb_buffer_ensure_separate (hb_buffer_t *buffer, unsigned int size)
+{
+  hb_buffer_ensure (buffer, size);
+  if (buffer->out_string == buffer->in_string)
+  {
+    assert (buffer->have_output);
+    if (!buffer->positions)
+      buffer->positions = calloc (buffer->allocated, sizeof (buffer->positions[0]));
+
+    buffer->out_string = (hb_internal_glyph_info_t *) buffer->positions;
+    memcpy (buffer->out_string, buffer->in_string, buffer->out_length * sizeof (buffer->out_string[0]));
+  }
+}
+
+/* Public API */
+
+hb_buffer_t *
+hb_buffer_create (unsigned int pre_alloc_size)
+{
+  hb_buffer_t *buffer;
+
+  if (!HB_OBJECT_DO_CREATE (hb_buffer_t, buffer))
+    return &_hb_buffer_nil;
+
+  if (pre_alloc_size)
+    hb_buffer_ensure(buffer, pre_alloc_size);
+
+  return buffer;
+}
+
+hb_buffer_t *
+hb_buffer_reference (hb_buffer_t *buffer)
+{
+  HB_OBJECT_DO_REFERENCE (buffer);
+}
+
+unsigned int
+hb_buffer_get_reference_count (hb_buffer_t *buffer)
+{
+  HB_OBJECT_DO_GET_REFERENCE_COUNT (buffer);
+}
+
+void
+hb_buffer_destroy (hb_buffer_t *buffer)
+{
+  HB_OBJECT_DO_DESTROY (buffer);
+
+  free (buffer->in_string);
+  free (buffer->positions);
+
+  free (buffer);
+}
+
+void
+hb_buffer_clear (hb_buffer_t *buffer)
+{
+  buffer->have_output = FALSE;
+  buffer->in_length = 0;
+  buffer->out_length = 0;
+  buffer->in_pos = 0;
+  buffer->out_pos = 0;
+  buffer->out_string = buffer->in_string;
+  buffer->max_lig_id = 0;
+}
+
+void
+hb_buffer_ensure (hb_buffer_t *buffer, unsigned int size)
+{
+  unsigned int new_allocated = buffer->allocated;
+
+  if (size > new_allocated)
+  {
+    while (size > new_allocated)
+      new_allocated += (new_allocated >> 1) + 8;
+
+    if (buffer->positions)
+      buffer->positions = realloc (buffer->positions, new_allocated * sizeof (buffer->positions[0]));
+
+    if (buffer->out_string != buffer->in_string)
+    {
+      buffer->in_string = realloc (buffer->in_string, new_allocated * sizeof (buffer->in_string[0]));
+      buffer->out_string = (hb_internal_glyph_info_t *) buffer->positions;
+    }
+    else
+    {
+      buffer->in_string = realloc (buffer->in_string, new_allocated * sizeof (buffer->in_string[0]));
+      buffer->out_string = buffer->in_string;
+    }
+
+    buffer->allocated = new_allocated;
+  }
+}
+
+void
+hb_buffer_add_glyph (hb_buffer_t    *buffer,
+                    hb_codepoint_t  codepoint,
+                    hb_mask_t       mask,
+                    unsigned int    cluster)
+{
+  hb_internal_glyph_info_t *glyph;
+
+  hb_buffer_ensure (buffer, buffer->in_length + 1);
+
+  glyph = &buffer->in_string[buffer->in_length];
+  glyph->codepoint = codepoint;
+  glyph->mask = mask;
+  glyph->cluster = cluster;
+  glyph->component = 0;
+  glyph->lig_id = 0;
+  glyph->gproperty = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
+
+  buffer->in_length++;
+}
+
+void
+hb_buffer_set_direction (hb_buffer_t    *buffer,
+                        hb_direction_t  direction)
+
+{
+  buffer->direction = direction;
+}
+
+
+/* HarfBuzz-Internal API */
+
+void
+_hb_buffer_clear_output (hb_buffer_t *buffer)
+{
+  buffer->have_output = TRUE;
+  buffer->out_length = 0;
+  buffer->out_pos = 0;
+  buffer->out_string = buffer->in_string;
+}
+
+void
+hb_buffer_clear_positions (hb_buffer_t *buffer)
+{
+  _hb_buffer_clear_output (buffer);
+  buffer->have_output = FALSE;
+
+  if (HB_UNLIKELY (!buffer->positions))
+  {
+    buffer->positions = calloc (buffer->allocated, sizeof (buffer->positions[0]));
+    return;
+  }
+
+  memset (buffer->positions, 0, sizeof (buffer->positions[0]) * buffer->in_length);
+}
+
+void
+_hb_buffer_swap (hb_buffer_t *buffer)
+{
+  unsigned int tmp;
+
+  assert (buffer->have_output);
+
+  if (buffer->out_string != buffer->in_string)
+  {
+    hb_internal_glyph_info_t *tmp_string;
+    tmp_string = buffer->in_string;
+    buffer->in_string = buffer->out_string;
+    buffer->out_string = tmp_string;
+    buffer->positions = (hb_internal_glyph_position_t *) buffer->out_string;
+  }
+
+  tmp = buffer->in_length;
+  buffer->in_length = buffer->out_length;
+  buffer->out_length = tmp;
+
+  tmp = buffer->in_pos;
+  buffer->in_pos = buffer->out_pos;
+  buffer->out_pos = tmp;
+}
+
+/* The following function copies `num_out' elements from `glyph_data'
+   to `buffer->out_string', advancing the in array pointer in the structure
+   by `num_in' elements, and the out array pointer by `num_out' elements.
+   Finally, it sets the `length' field of `out' equal to
+   `pos' of the `out' structure.
+
+   If `component' is 0xFFFF, the component value from buffer->in_pos
+   will copied `num_out' times, otherwise `component' itself will
+   be used to fill the `component' fields.
+
+   If `lig_id' is 0xFFFF, the lig_id value from buffer->in_pos
+   will copied `num_out' times, otherwise `lig_id' itself will
+   be used to fill the `lig_id' fields.
+
+   The mask for all replacement glyphs are taken
+   from the glyph at position `buffer->in_pos'.
+
+   The cluster value for the glyph at position buffer->in_pos is used
+   for all replacement glyphs */
+void
+_hb_buffer_add_output_glyphs (hb_buffer_t *buffer,
+                             unsigned int num_in,
+                             unsigned int num_out,
+                             const uint16_t *glyph_data_be,
+                             unsigned short component,
+                             unsigned short lig_id)
+{
+  unsigned int i;
+  unsigned int mask;
+  unsigned int cluster;
+
+  if (buffer->out_string != buffer->in_string ||
+      buffer->out_pos + num_out > buffer->in_pos + num_in)
+  {
+    hb_buffer_ensure_separate (buffer, buffer->out_pos + num_out);
+  }
+
+  mask = buffer->in_string[buffer->in_pos].mask;
+  cluster = buffer->in_string[buffer->in_pos].cluster;
+  if (component == 0xFFFF)
+    component = buffer->in_string[buffer->in_pos].component;
+  if (lig_id == 0xFFFF)
+    lig_id = buffer->in_string[buffer->in_pos].lig_id;
+
+  for (i = 0; i < num_out; i++)
+  {
+    hb_internal_glyph_info_t *info = &buffer->out_string[buffer->out_pos + i];
+    info->codepoint = hb_be_uint16 (glyph_data_be[i]);
+    info->mask = mask;
+    info->cluster = cluster;
+    info->component = component;
+    info->lig_id = lig_id;
+    info->gproperty = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
+  }
+
+  buffer->in_pos  += num_in;
+  buffer->out_pos += num_out;
+  buffer->out_length = buffer->out_pos;
+}
+
+
+void
+_hb_buffer_add_output_glyph (hb_buffer_t *buffer,
+                            hb_codepoint_t glyph_index,
+                            unsigned short component,
+                            unsigned short lig_id)
+{
+  hb_internal_glyph_info_t *info;
+
+  if (buffer->out_string != buffer->in_string)
+  {
+    hb_buffer_ensure (buffer, buffer->out_pos + 1);
+    buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
+  }
+  else if (buffer->out_pos != buffer->in_pos)
+    buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
+
+  info = &buffer->out_string[buffer->out_pos];
+  info->codepoint = glyph_index;
+  if (component != 0xFFFF)
+    info->component = component;
+  if (lig_id != 0xFFFF)
+    info->lig_id = lig_id;
+  info->gproperty = HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN;
+
+  buffer->in_pos++;
+  buffer->out_pos++;
+  buffer->out_length = buffer->out_pos;
+}
+
+void
+_hb_buffer_next_glyph (hb_buffer_t *buffer)
+{
+  if (!buffer->have_output)
+  {
+    buffer->in_pos++;
+    return;
+  }
+
+  if (buffer->out_string != buffer->in_string)
+  {
+    hb_buffer_ensure (buffer, buffer->out_pos + 1);
+    buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
+  }
+  else if (buffer->out_pos != buffer->in_pos)
+    buffer->out_string[buffer->out_pos] = buffer->in_string[buffer->in_pos];
+
+  buffer->in_pos++;
+  buffer->out_pos++;
+  buffer->out_length = buffer->out_pos;
+}
+
+void
+_hb_buffer_replace_glyph (hb_buffer_t *buffer,
+                         hb_codepoint_t glyph_index)
+{
+  _hb_buffer_add_output_glyph (buffer, glyph_index, 0xFFFF, 0xFFFF);
+}
+
+unsigned short
+_hb_buffer_allocate_lig_id (hb_buffer_t *buffer)
+{
+  return ++buffer->max_lig_id;
+}
+
+
+unsigned int
+hb_buffer_get_len (hb_buffer_t *buffer)
+{
+  return buffer->in_length;
+}
+
+/* Return value valid as long as buffer not modified */
+hb_glyph_info_t *
+hb_buffer_get_glyph_infos (hb_buffer_t *buffer)
+{
+  return (hb_glyph_info_t *) buffer->in_string;
+}
+
+/* Return value valid as long as buffer not modified */
+hb_glyph_position_t *
+hb_buffer_get_glyph_positions (hb_buffer_t *buffer)
+{
+  if (buffer->have_output || (buffer->in_length && !buffer->positions))
+    hb_buffer_clear_positions (buffer);
+
+  return (hb_glyph_position_t *) buffer->positions;
+}
+
+
+void
+hb_buffer_reverse (hb_buffer_t *buffer)
+{
+  unsigned int i, j;
+
+  for (i = 0, j = buffer->in_length - 1; i < buffer->in_length / 2; i++, j--) {
+    hb_internal_glyph_info_t t;
+
+    t = buffer->in_string[i];
+    buffer->in_string[i] = buffer->in_string[j];
+    buffer->in_string[j] = t;
+  }
+
+  if (buffer->positions) {
+    for (i = 0, j = buffer->in_length - 1; i < buffer->in_length / 2; i++, j--) {
+      hb_internal_glyph_position_t t;
+
+      t = buffer->positions[i];
+      buffer->positions[i] = buffer->positions[j];
+      buffer->positions[j] = t;
+    }
+  }
+}
+
+
+#define ADD_UTF(T) \
+       HB_STMT_START { \
+         const T *next = (const T *) text + item_offset; \
+         const T *end = next + item_length; \
+         while (next < end) { \
+           hb_codepoint_t u; \
+           const T *old_next = next; \
+           next = UTF_NEXT (next, end, u); \
+           hb_buffer_add_glyph (buffer, u, 0,  old_next - (const T *) text); \
+         } \
+       } HB_STMT_END
+
+
+#define UTF8_COMPUTE(Char, Mask, Len) \
+  if (Char < 128) { Len = 1; Mask = 0x7f; } \
+  else if ((Char & 0xe0) == 0xc0) { Len = 2; Mask = 0x1f; } \
+  else if ((Char & 0xf0) == 0xe0) { Len = 3; Mask = 0x0f; } \
+  else if ((Char & 0xf8) == 0xf0) { Len = 4; Mask = 0x07; } \
+  else Len = 0;
+
+static inline const uint8_t *
+hb_utf8_next (const uint8_t *text,
+             const uint8_t *end,
+             hb_codepoint_t *unicode)
+{
+  uint8_t c = *text;
+  unsigned int mask, len;
+
+  UTF8_COMPUTE (c, mask, len);
+  if (HB_UNLIKELY (!len || (unsigned int) (end - text) < len)) {
+    *unicode = -1;
+    return text + 1;
+  } else {
+    hb_codepoint_t result;
+    unsigned int i;
+    result = c & mask;
+    for (i = 1; i < len; i++)
+      {
+       if (HB_UNLIKELY ((text[i] & 0xc0) != 0x80))
+         {
+           *unicode = -1;
+           return text + 1;
+         }
+       result <<= 6;
+       result |= (text[i] & 0x3f);
+      }
+    *unicode = result;
+    return text + len;
+  }
+}
+
+void
+hb_buffer_add_utf8 (hb_buffer_t  *buffer,
+                   const char   *text,
+                   unsigned int  text_length,
+                   unsigned int  item_offset,
+                   unsigned int  item_length)
+{
+#define UTF_NEXT(S, E, U)      hb_utf8_next (S, E, &(U))
+  ADD_UTF (uint8_t);
+#undef UTF_NEXT
+}
+
+static inline const uint16_t *
+hb_utf16_next (const uint16_t *text,
+              const uint16_t *end,
+              hb_codepoint_t *unicode)
+{
+  uint16_t c = *text++;
+
+  if (HB_UNLIKELY (c >= 0xd800 && c < 0xdc00)) {
+    /* high surrogate */
+    uint16_t l;
+    if (text < end && ((l = *text), HB_UNLIKELY (l >= 0xdc00 && l < 0xe000))) {
+      /* low surrogate */
+      *unicode = ((hb_codepoint_t) ((c) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000);
+       text++;
+    } else
+      *unicode = -1;
+  } else
+    *unicode = c;
+
+  return text;
+}
+
+void
+hb_buffer_add_utf16 (hb_buffer_t    *buffer,
+                    const uint16_t *text,
+                    unsigned int    text_length,
+                    unsigned int    item_offset,
+                    unsigned int    item_length)
+{
+#define UTF_NEXT(S, E, U)      hb_utf16_next (S, E, &(U))
+  ADD_UTF (uint16_t);
+#undef UTF_NEXT
+}
+
+void
+hb_buffer_add_utf32 (hb_buffer_t    *buffer,
+                    const uint32_t *text,
+                    unsigned int    text_length,
+                    unsigned int    item_offset,
+                    unsigned int    item_length)
+{
+#define UTF_NEXT(S, E, U)      ((U) = *(S), (S)+1)
+  ADD_UTF (uint32_t);
+#undef UTF_NEXT
+}
diff --git a/pango/opentype/hb-buffer.h b/pango/opentype/hb-buffer.h
new file mode 100755 (executable)
index 0000000..b030ba9
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 1998-2004  David Turner and Werner Lemberg
+ * Copyright (C) 2004,2007,2009  Red Hat, Inc.
+ *
+ * This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
+ */
+
+#ifndef HB_BUFFER_H
+#define HB_BUFFER_H
+
+#include "hb-common.h"
+
+HB_BEGIN_DECLS
+
+typedef struct _hb_buffer_t hb_buffer_t;
+
+typedef enum _hb_direction_t {
+  HB_DIRECTION_LTR,
+  HB_DIRECTION_RTL,
+  HB_DIRECTION_TTB,
+  HB_DIRECTION_BTT
+} hb_direction_t;
+
+typedef struct _hb_glyph_info_t {
+  hb_codepoint_t codepoint;
+  hb_mask_t      mask;
+  uint32_t       cluster;
+  uint32_t       internal1;
+  uint32_t       internal2;
+} hb_glyph_info_t;
+
+typedef struct _hb_glyph_position_t {
+  hb_position_t  x_pos;
+  hb_position_t  y_pos;
+  hb_position_t  x_advance;
+  hb_position_t  y_advance;
+  /* XXX these should all be replaced by "uint32_t internal" */
+  uint32_t       new_advance :1;       /* if set, the advance width values are
+                                          absolute, i.e., they won't be
+                                          added to the original glyph's value
+                                          but rather replace them */
+  uint32_t       back : 15;            /* number of glyphs to go back
+                                          for drawing current glyph */
+  int32_t        cursive_chain : 16;   /* character to which this connects,
+                                          may be positive or negative; used
+                                          only internally */
+} hb_glyph_position_t;
+
+
+hb_buffer_t *
+hb_buffer_create (unsigned int pre_alloc_size);
+
+hb_buffer_t *
+hb_buffer_reference (hb_buffer_t *buffer);
+
+unsigned int
+hb_buffer_get_reference_count (hb_buffer_t *buffer);
+
+void
+hb_buffer_destroy (hb_buffer_t *buffer);
+
+
+void
+hb_buffer_set_direction (hb_buffer_t    *buffer,
+                        hb_direction_t  direction);
+
+hb_direction_t
+hb_buffer_get_direction (hb_buffer_t *buffer);
+
+
+void
+hb_buffer_clear (hb_buffer_t *buffer);
+
+void
+hb_buffer_clear_positions (hb_buffer_t *buffer);
+
+void
+hb_buffer_ensure (hb_buffer_t  *buffer,
+                 unsigned int  size);
+
+void
+hb_buffer_reverse (hb_buffer_t *buffer);
+
+
+/* Filling the buffer in */
+
+void
+hb_buffer_add_glyph (hb_buffer_t    *buffer,
+                    hb_codepoint_t  codepoint,
+                    hb_mask_t       mask,
+                    unsigned int    cluster);
+
+void
+hb_buffer_add_utf8 (hb_buffer_t  *buffer,
+                   const char   *text,
+                   unsigned int  text_length,
+                   unsigned int  item_offset,
+                   unsigned int  item_length);
+
+void
+hb_buffer_add_utf16 (hb_buffer_t    *buffer,
+                    const uint16_t *text,
+                    unsigned int    text_length,
+                    unsigned int    item_offset,
+                    unsigned int    item_length);
+
+void
+hb_buffer_add_utf32 (hb_buffer_t    *buffer,
+                    const uint32_t *text,
+                    unsigned int    text_length,
+                    unsigned int    item_offset,
+                    unsigned int    item_length);
+
+
+/* Getting glyphs out of the buffer */
+
+/* Return value valid as long as buffer not modified */
+unsigned int
+hb_buffer_get_len (hb_buffer_t *buffer);
+
+/* Return value valid as long as buffer not modified */
+hb_glyph_info_t *
+hb_buffer_get_glyph_infos (hb_buffer_t *buffer);
+
+/* Return value valid as long as buffer not modified */
+hb_glyph_position_t *
+hb_buffer_get_glyph_positions (hb_buffer_t *buffer);
+
+
+HB_END_DECLS
+
+#endif /* HB_BUFFER_H */
diff --git a/pango/opentype/hb-common.h b/pango/opentype/hb-common.h
new file mode 100755 (executable)
index 0000000..11f64ed
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_COMMON_H
+#define HB_COMMON_H
+
+#include <stdint.h>
+
+# ifdef __cplusplus
+#  define HB_BEGIN_DECLS       extern "C" {
+#  define HB_END_DECLS         }
+# else /* !__cplusplus */
+#  define HB_BEGIN_DECLS
+#  define HB_END_DECLS
+# endif /* !__cplusplus */
+
+typedef int hb_bool_t;
+
+typedef uint32_t hb_tag_t;
+#define HB_TAG(a,b,c,d) ((hb_tag_t)(((uint8_t)a<<24)|((uint8_t)b<<16)|((uint8_t)c<<8)|(uint8_t)d))
+#define HB_TAG_STR(s)   (HB_TAG(((const char *) s)[0], \
+                               ((const char *) s)[1], \
+                               ((const char *) s)[2], \
+                               ((const char *) s)[3]))
+#define HB_TAG_NONE HB_TAG(0,0,0,0)
+
+typedef uint32_t hb_codepoint_t;
+typedef int32_t hb_position_t;
+typedef int32_t hb_16dot16_t;
+typedef uint32_t hb_mask_t;
+
+typedef void (*hb_destroy_func_t) (void *user_data);
+
+#endif /* HB_COMMON_H */
diff --git a/pango/opentype/hb-font-private.h b/pango/opentype/hb-font-private.h
new file mode 100755 (executable)
index 0000000..8d921c7
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_FONT_PRIVATE_H
+#define HB_FONT_PRIVATE_H
+
+#include "hb-private.h"
+
+#include "hb-font.h"
+
+#include "hb-unicode-private.h"
+#include "hb-ot-layout-private.h"
+
+HB_BEGIN_DECLS
+
+/*
+ * hb_font_funcs_t
+ */
+
+struct _hb_font_funcs_t {
+  hb_reference_count_t ref_count;
+
+  hb_bool_t immutable;
+
+  hb_font_get_glyph_func_t glyph_func;
+  hb_font_get_contour_point_func_t contour_point_func;
+  hb_font_get_glyph_metrics_func_t glyph_metrics_func;
+  hb_font_get_kerning_func_t kerning_func;
+};
+
+HB_INTERNAL hb_font_funcs_t
+_hb_font_funcs_nil;
+
+/*
+ * hb_face_t
+ */
+
+struct _hb_face_t {
+  hb_reference_count_t ref_count;
+
+  hb_blob_t *blob;
+  unsigned int  index;
+
+  hb_get_table_func_t  get_table;
+  hb_destroy_func_t    destroy;
+  void                *user_data;
+
+  hb_unicode_funcs_t *unicode;
+
+  hb_ot_layout_t ot_layout;
+};
+
+
+/*
+ * hb_font_t
+ */
+
+struct _hb_font_t {
+  hb_reference_count_t ref_count;
+
+  hb_16dot16_t x_scale;
+  hb_16dot16_t y_scale;
+
+  unsigned int x_ppem;
+  unsigned int y_ppem;
+
+  hb_font_funcs_t *klass;
+};
+
+
+HB_END_DECLS
+
+#endif /* HB_FONT_PRIVATE_H */
diff --git a/pango/opentype/hb-font.cc b/pango/opentype/hb-font.cc
new file mode 100755 (executable)
index 0000000..df3d80b
--- /dev/null
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#include "hb-private.h"
+
+#include "hb-font-private.h"
+#include "hb-unicode-private.h"
+#include "hb-open-file-private.hh"
+#include "hb-blob.h"
+
+#include "hb-ot-layout-private.h"
+
+/*
+ * hb_font_funcs_t
+ */
+
+hb_font_funcs_t _hb_font_funcs_nil = {
+  HB_REFERENCE_COUNT_INVALID, /* ref_count */
+
+  TRUE,  /* immutable */
+
+  NULL, /* glyph_func */
+  NULL, /* contour_point_func */
+  NULL, /* glyph_metrics_func */
+  NULL  /* kerning_func */
+};
+
+hb_font_funcs_t *
+hb_font_funcs_create (void)
+{
+  hb_font_funcs_t *ffuncs;
+
+  if (!HB_OBJECT_DO_CREATE (hb_font_funcs_t, ffuncs))
+    return &_hb_font_funcs_nil;
+
+  return ffuncs;
+}
+
+hb_font_funcs_t *
+hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
+{
+  HB_OBJECT_DO_REFERENCE (ffuncs);
+}
+
+unsigned int
+hb_font_funcs_get_reference_count (hb_font_funcs_t *ffuncs)
+{
+  HB_OBJECT_DO_GET_REFERENCE_COUNT (ffuncs);
+}
+
+void
+hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
+{
+  HB_OBJECT_DO_DESTROY (ffuncs);
+
+  free (ffuncs);
+}
+
+hb_font_funcs_t *
+hb_font_funcs_copy (hb_font_funcs_t *other_ffuncs)
+{
+  hb_font_funcs_t *ffuncs;
+
+  if (!HB_OBJECT_DO_CREATE (hb_font_funcs_t, ffuncs))
+    return &_hb_font_funcs_nil;
+
+  *ffuncs = *other_ffuncs;
+
+  /* re-init refcount */
+  HB_OBJECT_DO_INIT (ffuncs);
+  ffuncs->immutable = FALSE;
+
+  return ffuncs;
+}
+
+void
+hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
+{
+  if (HB_OBJECT_IS_INERT (ffuncs))
+    return;
+
+  ffuncs->immutable = TRUE;
+}
+
+
+
+/*
+ * hb_face_t
+ */
+
+static hb_blob_t *
+_hb_face_get_table_from_blob (hb_tag_t tag, void *user_data)
+{
+  hb_face_t *face = (hb_face_t *) user_data;
+
+  const OpenTypeFontFile &ot_file = Sanitizer<OpenTypeFontFile>::lock_instance (face->blob);
+  const OpenTypeFontFace &ot_face = ot_file.get_face (face->index);
+
+  const OpenTypeTable &table = ot_face.get_table_by_tag (tag);
+
+  hb_blob_t *blob = hb_blob_create_sub_blob (face->blob, table.offset, table.length);
+
+  hb_blob_unlock (face->blob);
+
+  return blob;
+}
+
+static hb_face_t _hb_face_nil = {
+  HB_REFERENCE_COUNT_INVALID, /* ref_count */
+
+  NULL, /* blob */
+  0, /* index */
+
+  NULL, /* get_table */
+  NULL, /* destroy */
+  NULL, /* user_data */
+
+  &_hb_unicode_funcs_nil,  /* unicode */
+
+  {} /* ot_layout */
+};
+
+hb_face_t *
+hb_face_create_for_tables (hb_get_table_func_t  get_table,
+                          hb_destroy_func_t    destroy,
+                          void                *user_data)
+{
+  hb_face_t *face;
+
+  if (!HB_OBJECT_DO_CREATE (hb_face_t, face)) {
+    if (destroy)
+      destroy (user_data);
+    return &_hb_face_nil;
+  }
+
+  face->get_table = get_table;
+  face->destroy = destroy;
+  face->user_data = user_data;
+
+  _hb_ot_layout_init (face);
+
+  return face;
+}
+
+hb_face_t *
+hb_face_create_for_data (hb_blob_t    *blob,
+                        unsigned int  index)
+{
+  hb_face_t *face;
+
+  if (!HB_OBJECT_DO_CREATE (hb_face_t, face))
+    return &_hb_face_nil;
+
+  face->blob = Sanitizer<OpenTypeFontFile>::sanitize (hb_blob_reference (blob));
+  face->index = index;
+  face->get_table = _hb_face_get_table_from_blob;
+  face->user_data = face;
+
+  _hb_ot_layout_init (face);
+
+  return face;
+}
+
+hb_face_t *
+hb_face_reference (hb_face_t *face)
+{
+  HB_OBJECT_DO_REFERENCE (face);
+}
+
+unsigned int
+hb_face_get_reference_count (hb_face_t *face)
+{
+  HB_OBJECT_DO_GET_REFERENCE_COUNT (face);
+}
+
+void
+hb_face_destroy (hb_face_t *face)
+{
+  HB_OBJECT_DO_DESTROY (face);
+
+  _hb_ot_layout_fini (face);
+
+  hb_blob_destroy (face->blob);
+
+  if (face->destroy)
+    face->destroy (face->user_data);
+
+  hb_unicode_funcs_destroy (face->unicode);
+
+  free (face);
+}
+
+void
+hb_face_set_unicode_funcs (hb_face_t *face,
+                              hb_unicode_funcs_t *unicode)
+{
+  if (HB_OBJECT_IS_INERT (face))
+    return;
+
+  hb_unicode_funcs_reference (unicode);
+  hb_unicode_funcs_destroy (face->unicode);
+  face->unicode = unicode;
+}
+
+hb_blob_t *
+hb_face_get_table (hb_face_t *face,
+                  hb_tag_t   tag)
+{
+  if (HB_UNLIKELY (!face || !face->get_table))
+    return hb_blob_create_empty ();
+
+  return face->get_table (tag, face->user_data);
+}
+
+
+/*
+ * hb_font_t
+ */
+
+static hb_font_t _hb_font_nil = {
+  HB_REFERENCE_COUNT_INVALID, /* ref_count */
+
+  0, /* x_scale */
+  0, /* y_scale */
+
+  0, /* x_ppem */
+  0, /* y_ppem */
+
+  NULL /* klass */
+};
+
+hb_font_t *
+hb_font_create (void)
+{
+  hb_font_t *font;
+
+  if (!HB_OBJECT_DO_CREATE (hb_font_t, font))
+    return &_hb_font_nil;
+
+  return font;
+}
+
+hb_font_t *
+hb_font_reference (hb_font_t *font)
+{
+  HB_OBJECT_DO_REFERENCE (font);
+}
+
+unsigned int
+hb_font_get_reference_count (hb_font_t *font)
+{
+  HB_OBJECT_DO_GET_REFERENCE_COUNT (font);
+}
+
+void
+hb_font_destroy (hb_font_t *font)
+{
+  HB_OBJECT_DO_DESTROY (font);
+
+  hb_font_funcs_destroy (font->klass);
+
+  free (font);
+}
+
+void
+hb_font_set_funcs (hb_font_t       *font,
+                  hb_font_funcs_t *klass)
+{
+  if (HB_OBJECT_IS_INERT (font))
+    return;
+
+  hb_font_funcs_reference (klass);
+  hb_font_funcs_destroy (font->klass);
+  font->klass = klass;
+}
+
+void
+hb_font_set_scale (hb_font_t *font,
+                  hb_16dot16_t x_scale,
+                  hb_16dot16_t y_scale)
+{
+  if (HB_OBJECT_IS_INERT (font))
+    return;
+
+  font->x_scale = x_scale;
+  font->y_scale = y_scale;
+}
+
+void
+hb_font_set_ppem (hb_font_t *font,
+                 unsigned int x_ppem,
+                 unsigned int y_ppem)
+{
+  if (HB_OBJECT_IS_INERT (font))
+    return;
+
+  font->x_ppem = x_ppem;
+  font->y_ppem = y_ppem;
+}
+
diff --git a/pango/opentype/hb-font.h b/pango/opentype/hb-font.h
new file mode 100755 (executable)
index 0000000..e020bd8
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_FONT_H
+#define HB_FONT_H
+
+#include "hb-common.h"
+#include "hb-blob.h"
+#include "hb-unicode.h"
+
+HB_BEGIN_DECLS
+
+typedef struct _hb_face_t hb_face_t;
+typedef struct _hb_font_t hb_font_t;
+
+/*
+ * hb_face_t
+ */
+
+hb_face_t *
+hb_face_create_for_data (hb_blob_t    *blob,
+                        unsigned int  index);
+
+typedef hb_blob_t * (*hb_get_table_func_t)  (hb_tag_t tag, void *user_data);
+
+/* calls destroy() when not needing user_data anymore */
+hb_face_t *
+hb_face_create_for_tables (hb_get_table_func_t  get_table,
+                          hb_destroy_func_t    destroy,
+                          void                *user_data);
+
+hb_face_t *
+hb_face_reference (hb_face_t *face);
+
+unsigned int
+hb_face_get_reference_count (hb_face_t *face);
+
+void
+hb_face_destroy (hb_face_t *face);
+
+void
+hb_face_set_unicode_funcs (hb_face_t *face,
+                          hb_unicode_funcs_t *unicode_funcs);
+
+hb_blob_t *
+hb_face_get_table (hb_face_t *face,
+                  hb_tag_t   tag);
+
+
+/*
+ * hb_font_funcs_t
+ */
+
+typedef struct _hb_font_funcs_t hb_font_funcs_t;
+
+hb_font_funcs_t *
+hb_font_funcs_create (void);
+
+hb_font_funcs_t *
+hb_font_funcs_reference (hb_font_funcs_t *ffuncs);
+
+unsigned int
+hb_font_funcs_get_reference_count (hb_font_funcs_t *ffuncs);
+
+void
+hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);
+
+hb_font_funcs_t *
+hb_font_funcs_copy (hb_font_funcs_t *ffuncs);
+
+void
+hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);
+
+
+/* funcs */
+
+typedef struct _hb_glyph_metrics_t hb_glyph_metrics_t;
+struct _hb_glyph_metrics_t
+{
+    hb_position_t x_advance;
+    hb_position_t y_advance;
+    hb_position_t x_offset;
+    hb_position_t y_offset;
+    hb_position_t width;
+    hb_position_t height;
+};
+
+typedef hb_codepoint_t (*hb_font_get_glyph_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data,
+                                                   hb_codepoint_t unicode, hb_codepoint_t variant_selector);
+typedef hb_bool_t (*hb_font_get_contour_point_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data,
+                                                      unsigned int point_index,
+                                                      hb_codepoint_t glyph, hb_position_t *x, hb_position_t *y);
+typedef void (*hb_font_get_glyph_metrics_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data,
+                                                 hb_codepoint_t glyph, hb_glyph_metrics_t *metrics);
+typedef hb_position_t (*hb_font_get_kerning_func_t) (hb_font_t *font, hb_face_t *face, const void *user_data,
+                                                    hb_codepoint_t first_glyph, hb_codepoint_t second_glyph);
+
+
+void
+hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
+                             hb_font_get_glyph_func_t glyph_func);
+
+void
+hb_font_funcs_set_contour_point_func (hb_font_funcs_t *ffuncs,
+                                     hb_font_get_contour_point_func_t contour_point_func);
+
+void
+hb_font_funcs_set_glyph_metrics_func (hb_font_funcs_t *ffuncs,
+                                     hb_font_get_glyph_metrics_func_t glyph_metrics_func);
+
+void
+hb_font_funcs_set_kerning_func (hb_font_funcs_t *ffuncs,
+                               hb_font_get_kerning_func_t kerning_func);
+
+
+/*
+ * hb_font_t
+ */
+
+/* Fonts are very light-weight objects */
+
+hb_font_t *
+hb_font_create (void);
+
+hb_font_t *
+hb_font_reference (hb_font_t *font);
+
+unsigned int
+hb_font_get_reference_count (hb_font_t *font);
+
+void
+hb_font_destroy (hb_font_t *font);
+
+void
+hb_font_set_funcs (hb_font_t       *font,
+                  hb_font_funcs_t *klass);
+
+/*
+ * XXX
+ * should we decompose this to units_per_EM and font-size?
+ * units_per_EM setting then can go into the face, or better,
+ * read from the 'head' table.
+ *
+ * Then we either need size+shape like freetype does, or a full
+ * matrix.
+ */
+void
+hb_font_set_scale (hb_font_t *font,
+                  hb_16dot16_t x_scale,
+                  hb_16dot16_t y_scale);
+
+/*
+ * A zero value means "no hinting in that direction"
+ */
+void
+hb_font_set_ppem (hb_font_t *font,
+                 unsigned int x_ppem,
+                 unsigned int y_ppem);
+
+
+HB_END_DECLS
+
+#endif /* HB_FONT_H */
diff --git a/pango/opentype/hb-glib.c b/pango/opentype/hb-glib.c
new file mode 100755 (executable)
index 0000000..9fb3d91
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#include "hb-private.h"
+
+#include "hb-glib.h"
+
+#include "hb-unicode-private.h"
+
+static hb_codepoint_t hb_glib_get_mirroring (hb_codepoint_t unicode) { g_unichar_get_mirror_char (unicode, &unicode); return unicode; }
+static hb_category_t hb_glib_get_general_category (hb_codepoint_t unicode) { return g_unichar_type (unicode); }
+static hb_script_t hb_glib_get_script (hb_codepoint_t unicode) { return g_unichar_get_script (unicode); }
+static unsigned int hb_glib_get_combining_class (hb_codepoint_t unicode) { return g_unichar_combining_class (unicode); }
+static unsigned int hb_glib_get_eastasian_width (hb_codepoint_t unicode) { return g_unichar_iswide (unicode); }
+
+
+static hb_unicode_funcs_t glib_ufuncs = {
+  HB_REFERENCE_COUNT_INVALID, /* ref_count */
+
+  TRUE, /* immutable */
+
+  hb_glib_get_general_category,
+  hb_glib_get_combining_class,
+  hb_glib_get_mirroring,
+  hb_glib_get_script,
+  hb_glib_get_eastasian_width
+};
+
+hb_unicode_funcs_t *
+hb_glib_get_unicode_funcs (void)
+{
+  return &glib_ufuncs;
+}
diff --git a/pango/opentype/hb-glib.h b/pango/opentype/hb-glib.h
new file mode 100755 (executable)
index 0000000..6c94993
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_GLIB_H
+#define HB_GLIB_H
+
+#include "hb.h"
+
+#include "hb-unicode.h"
+
+HB_BEGIN_DECLS
+
+hb_unicode_funcs_t *
+hb_glib_get_unicode_funcs (void);
+
+HB_END_DECLS
+
+#endif /* HB_GLIB_H */
diff --git a/pango/opentype/hb-object-private.h b/pango/opentype/hb-object-private.h
new file mode 100755 (executable)
index 0000000..2186e58
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007 Chris Wilson
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Contributor(s):
+ *     Chris Wilson <chris@chris-wilson.co.uk>
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_REFCOUNT_PRIVATE_H
+#define HB_REFCOUNT_PRIVATE_H
+
+
+/* Encapsulate operations on the object's reference count */
+typedef struct {
+  hb_atomic_int_t ref_count;
+} hb_reference_count_t;
+
+#define hb_reference_count_inc(RC) hb_atomic_int_fetch_and_add ((RC).ref_count, 1)
+#define hb_reference_count_dec(RC) hb_atomic_int_fetch_and_add ((RC).ref_count, -1)
+
+#define HB_REFERENCE_COUNT_INIT(RC, VALUE) ((RC).ref_count = (VALUE))
+
+#define HB_REFERENCE_COUNT_GET_VALUE(RC) hb_atomic_int_get ((RC).ref_count)
+#define HB_REFERENCE_COUNT_SET_VALUE(RC, VALUE) hb_atomic_int_set ((RC).ref_count, (VALUE))
+
+#define HB_REFERENCE_COUNT_INVALID_VALUE ((hb_atomic_int_t) -1)
+#define HB_REFERENCE_COUNT_INVALID {HB_REFERENCE_COUNT_INVALID_VALUE}
+
+#define HB_REFERENCE_COUNT_IS_INVALID(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) == HB_REFERENCE_COUNT_INVALID_VALUE)
+
+#define HB_REFERENCE_COUNT_HAS_REFERENCE(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) > 0)
+
+
+
+/* Helper macros */
+
+#define HB_OBJECT_IS_INERT(obj) \
+    (HB_UNLIKELY (HB_REFERENCE_COUNT_IS_INVALID ((obj)->ref_count)))
+
+#define HB_OBJECT_DO_INIT_EXPR(obj) \
+    HB_REFERENCE_COUNT_INIT (obj->ref_count, 1)
+
+#define HB_OBJECT_DO_INIT(obj) \
+  HB_STMT_START { \
+    HB_OBJECT_DO_INIT_EXPR (obj); \
+  } HB_STMT_END
+
+#define HB_OBJECT_DO_CREATE(Type, obj) \
+  HB_LIKELY (( \
+            (obj) = (Type *) calloc (1, sizeof (Type)), \
+            HB_OBJECT_DO_INIT_EXPR (obj), \
+            (obj) \
+            ))
+
+#define HB_OBJECT_DO_REFERENCE(obj) \
+  HB_STMT_START { \
+    int old_count; \
+    if (HB_UNLIKELY (!(obj) || HB_OBJECT_IS_INERT (obj))) \
+      return obj; \
+    old_count = hb_reference_count_inc (obj->ref_count); \
+    assert (old_count > 0); \
+    return obj; \
+  } HB_STMT_END
+
+#define HB_OBJECT_DO_GET_REFERENCE_COUNT(obj) \
+  HB_STMT_START { \
+    if (HB_UNLIKELY (!(obj) || HB_OBJECT_IS_INERT (obj))) \
+      return 0; \
+    return HB_REFERENCE_COUNT_GET_VALUE (obj->ref_count); \
+  } HB_STMT_END
+
+#define HB_OBJECT_DO_DESTROY(obj) \
+  HB_STMT_START { \
+    int old_count; \
+    if (HB_UNLIKELY (!(obj) || HB_OBJECT_IS_INERT (obj))) \
+      return; \
+    old_count = hb_reference_count_dec (obj->ref_count); \
+    assert (old_count > 0); \
+    if (old_count != 1) \
+      return; \
+  } HB_STMT_END
+
+
+#endif /* HB_REFCOUNT_PRIVATE_H */
diff --git a/pango/opentype/hb-open-file-private.hh b/pango/opentype/hb-open-file-private.hh
new file mode 100755 (executable)
index 0000000..47d4e04
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OPEN_FILE_PRIVATE_HH
+#define HB_OPEN_FILE_PRIVATE_HH
+
+#include "hb-open-type-private.hh"
+
+
+/*
+ *
+ * The OpenType Font File
+ *
+ */
+
+
+/*
+ * Organization of an OpenType Font
+ */
+
+struct OpenTypeFontFile;
+struct OffsetTable;
+struct TTCHeader;
+
+typedef struct TableDirectory
+{
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE (tag) &&
+          SANITIZE_MEM (CONST_CHARP(base) + (unsigned long) offset, length);
+  }
+
+  Tag          tag;            /* 4-byte identifier. */
+  CheckSum     checkSum;       /* CheckSum for this table. */
+  ULONG                offset;         /* Offset from beginning of TrueType font
+                                * file. */
+  ULONG                length;         /* Length of this table. */
+} OpenTypeTable;
+ASSERT_SIZE (TableDirectory, 16);
+
+typedef struct OffsetTable
+{
+  friend struct OpenTypeFontFile;
+  friend struct TTCHeader;
+
+  STATIC_DEFINE_GET_FOR_DATA (OffsetTable);
+
+  inline unsigned int get_table_count (void) const
+  { return numTables; }
+  inline const Tag& get_table_tag (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= numTables)) return Null(Tag);
+    return tableDir[i].tag;
+  }
+  inline const TableDirectory& get_table (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= numTables)) return Null(TableDirectory);
+    return tableDir[i];
+  }
+  inline bool find_table_index (hb_tag_t tag, unsigned int *table_index) const
+  {
+    const Tag t = tag;
+    // TODO bsearch
+    unsigned int count = numTables;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      if (t == tableDir[i].tag)
+      {
+        if (table_index) *table_index = i;
+        return true;
+      }
+    }
+    if (table_index) *table_index = NO_INDEX;
+    return false;
+  }
+  inline const TableDirectory& get_table_by_tag (hb_tag_t tag) const
+  {
+    unsigned int table_index;
+    find_table_index (tag, &table_index);
+    return get_table (table_index);
+  }
+
+  inline unsigned int get_face_count (void) const { return 1; }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    if (!(SANITIZE_SELF () && SANITIZE_MEM (tableDir, sizeof (tableDir[0]) * numTables))) return false;
+    unsigned int count = numTables;
+    for (unsigned int i = 0; i < count; i++)
+      if (!SANITIZE_BASE (tableDir[i], base))
+        return false;
+    return true;
+  }
+
+  private:
+  Tag          sfnt_version;   /* '\0\001\0\00' if TrueType / 'OTTO' if CFF */
+  USHORT       numTables;      /* Number of tables. */
+  USHORT       searchRange;    /* (Maximum power of 2 <= numTables) x 16 */
+  USHORT       entrySelector;  /* Log2(maximum power of 2 <= numTables). */
+  USHORT       rangeShift;     /* NumTables x 16-searchRange. */
+  TableDirectory tableDir[];   /* TableDirectory entries. numTables items */
+} OpenTypeFontFace;
+ASSERT_SIZE (OffsetTable, 12);
+
+/*
+ * TrueType Collections
+ */
+
+struct TTCHeader
+{
+  friend struct OpenTypeFontFile;
+
+  STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (TTCHeader, 1, 2);
+
+  inline unsigned int get_face_count (void) const { return table.len; }
+
+  inline const OpenTypeFontFace& get_face (unsigned int i) const
+  {
+    return this+table[i];
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (version)) return false;
+    if (version.major < 1 || version.major > 2) return true;
+    /* TODO Maybe we shouldn't NEUTER these offsets, they may cause a full copy
+     * of the whole font right now. */
+    return table.sanitize (SANITIZE_ARG, CONST_CHARP(this), CONST_CHARP(this));
+  }
+
+  private:
+  Tag          ttcTag;         /* TrueType Collection ID string: 'ttcf' */
+  FixedVersion version;        /* Version of the TTC Header (1.0 or 2.0),
+                                * 0x00010000 or 0x00020000 */
+  LongOffsetLongArrayOf<OffsetTable>
+               table;          /* Array of offsets to the OffsetTable for each font
+                                * from the beginning of the file */
+};
+ASSERT_SIZE (TTCHeader, 12);
+
+
+/*
+ * OpenType Font File
+ */
+
+struct OpenTypeFontFile
+{
+  static const hb_tag_t TrueTypeTag    = HB_TAG ( 0 , 1 , 0 , 0 );
+  static const hb_tag_t CFFTag         = HB_TAG ('O','T','T','O');
+  static const hb_tag_t TTCTag         = HB_TAG ('t','t','c','f');
+
+  STATIC_DEFINE_GET_FOR_DATA (OpenTypeFontFile);
+
+  inline unsigned int get_face_count (void) const
+  {
+    switch (tag) {
+    default: return 0;
+    case TrueTypeTag: case CFFTag: return OffsetTable::get_for_data (CONST_CHARP(this)).get_face_count ();
+    case TTCTag: return TTCHeader::get_for_data (CONST_CHARP(this)).get_face_count ();
+    }
+  }
+  inline const OpenTypeFontFace& get_face (unsigned int i) const
+  {
+    switch (tag) {
+    default: return Null(OpenTypeFontFace);
+    /* Note: for non-collection SFNT data we ignore index.  This is because
+     * Apple dfont container is a container of SFNT's.  So each SFNT is a
+     * non-TTC, but the index is more than zero. */
+    case TrueTypeTag: case CFFTag: return OffsetTable::get_for_data (CONST_CHARP(this));
+    case TTCTag: return TTCHeader::get_for_data (CONST_CHARP(this)).get_face (i);
+    }
+  }
+
+  /* This is how you get a table */
+  inline const char* get_table_data (const OpenTypeTable& table) const
+  {
+    if (HB_UNLIKELY (table.offset == 0)) return NULL;
+    return ((const char*) this) + table.offset;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    switch (tag) {
+    default: return true;
+    case TrueTypeTag: case CFFTag: return SANITIZE_THIS (CAST (OffsetTable, *this, 0));
+    case TTCTag: return SANITIZE (CAST (TTCHeader, *this, 0));
+    }
+  }
+
+  Tag          tag;            /* 4-byte identifier. */
+};
+ASSERT_SIZE (OpenTypeFontFile, 4);
+
+
+#endif /* HB_OPEN_FILE_PRIVATE_HH */
diff --git a/pango/opentype/hb-open-type-private.hh b/pango/opentype/hb-open-type-private.hh
new file mode 100755 (executable)
index 0000000..4061cfe
--- /dev/null
@@ -0,0 +1,636 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OPEN_TYPES_PRIVATE_HH
+#define HB_OPEN_TYPES_PRIVATE_HH
+
+#include "hb-private.h"
+
+#include "hb-blob.h"
+
+
+#define NO_INDEX               ((unsigned int) 0xFFFF)
+
+
+/*
+ * Casts
+ */
+
+#define CONST_CHARP(X)         (reinterpret_cast<const char *>(X))
+#define DECONST_CHARP(X)       ((char *)reinterpret_cast<const char *>(X))
+#define CHARP(X)               (reinterpret_cast<char *>(X))
+
+#define CONST_CAST(T,X,Ofs)    (*(reinterpret_cast<const T *>(CONST_CHARP(&(X)) + Ofs)))
+#define DECONST_CAST(T,X,Ofs)  (*(reinterpret_cast<T *>((char *)CONST_CHARP(&(X)) + Ofs)))
+#define CAST(T,X,Ofs)          (*(reinterpret_cast<T *>(CHARP(&(X)) + Ofs)))
+
+#define CONST_NEXT(T,X)                (*(reinterpret_cast<const T *>(CONST_CHARP(&(X)) + (X).get_size ())))
+#define NEXT(T,X)              (*(reinterpret_cast<T *>(CHARP(&(X)) + (X).get_size ())))
+
+/*
+ * Class features
+ */
+
+
+/* Null objects */
+
+/* Global nul-content Null pool.  Enlarge as necessary. */
+static const char NullPool[16] = "";
+
+/* Generic template for nul-content sizeof-sized Null objects. */
+template <typename Type>
+struct Null
+{
+  ASSERT_STATIC (sizeof (Type) <= sizeof (NullPool));
+  static inline const Type &get () { return CONST_CAST (Type, *NullPool, 0); }
+};
+
+/* Specializaiton for arbitrary-content arbitrary-sized Null objects. */
+#define DEFINE_NULL_DATA(Type, size, data) \
+static const char _Null##Type[size] = data; \
+template <> \
+struct Null <Type> \
+{ \
+  static inline const Type &get () { return CONST_CAST (Type, *_Null##Type, 0); } \
+}
+
+/* Accessor macro. */
+#define Null(Type) (Null<Type>::get())
+
+
+#define ASSERT_SIZE_DATA(Type, size, data) \
+  ASSERT_SIZE (Type, size); \
+  DEFINE_NULL_DATA (Type, size, data)
+
+/* get_for_data() is a static class method returning a reference to an
+ * instance of Type located at the input data location.  It's just a
+ * fancy, NULL-safe, cast! */
+#define STATIC_DEFINE_GET_FOR_DATA(Type) \
+  static inline const Type& get_for_data (const char *data) \
+  { \
+    if (HB_UNLIKELY (data == NULL)) return Null(Type); \
+    return CONST_CAST (Type, *data, 0); \
+  }
+/* Like get_for_data(), but checks major version first. */
+#define STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION(Type, MajorMin, MajorMax) \
+  static inline const Type& get_for_data (const char *data) \
+  { \
+    if (HB_UNLIKELY (data == NULL)) return Null(Type); \
+    const Type& t = CONST_CAST (Type, *data, 0); \
+    if (HB_UNLIKELY (t.version.major < MajorMin || t.version.major > MajorMax)) return Null(Type); \
+    return t; \
+  }
+
+
+/*
+ * Sanitize
+ */
+
+#ifndef HB_DEBUG_SANITIZE
+#define HB_DEBUG_SANITIZE HB_DEBUG
+#endif
+
+#if HB_DEBUG_SANITIZE
+#define TRACE_SANITIZE_ARG_DEF , unsigned int sanitize_depth
+#define TRACE_SANITIZE_ARG     , sanitize_depth + 1
+#define TRACE_SANITIZE_ARG_INIT        , 1
+#define TRACE_SANITIZE() \
+       HB_STMT_START { \
+           if (sanitize_depth < HB_DEBUG_SANITIZE) \
+               fprintf (stderr, "SANITIZE(%p) %-*d-> %s\n", \
+                        (CONST_CHARP (this) == NullPool) ? 0 : this, \
+                        sanitize_depth, sanitize_depth, \
+                        __PRETTY_FUNCTION__); \
+       } HB_STMT_END
+#else
+#define TRACE_SANITIZE_ARG_DEF
+#define TRACE_SANITIZE_ARG
+#define TRACE_SANITIZE_ARG_INIT
+#define TRACE_SANITIZE() HB_STMT_START {} HB_STMT_END
+#endif
+
+#define SANITIZE_ARG_DEF \
+       hb_sanitize_context_t *context TRACE_SANITIZE_ARG_DEF
+#define SANITIZE_ARG \
+       context TRACE_SANITIZE_ARG
+#define SANITIZE_ARG_INIT \
+       &context TRACE_SANITIZE_ARG_INIT
+
+typedef struct _hb_sanitize_context_t hb_sanitize_context_t;
+struct _hb_sanitize_context_t
+{
+  const char *start, *end;
+  int edit_count;
+  hb_blob_t *blob;
+};
+
+static HB_GNUC_UNUSED void
+_hb_sanitize_init (hb_sanitize_context_t *context,
+                  hb_blob_t *blob)
+{
+  context->blob = blob;
+  context->start = hb_blob_lock (blob);
+  context->end = context->start + hb_blob_get_length (blob);
+  context->edit_count = 0;
+
+#if HB_DEBUG_SANITIZE
+  fprintf (stderr, "sanitize %p init [%p..%p] (%u bytes)\n",
+          context->blob, context->start, context->end, context->end - context->start);
+#endif
+}
+
+static HB_GNUC_UNUSED void
+_hb_sanitize_fini (hb_sanitize_context_t *context,
+                  bool unlock)
+{
+#if HB_DEBUG_SANITIZE
+  fprintf (stderr, "sanitize %p fini [%p..%p] %u edit requests\n",
+          context->blob, context->start, context->end, context->edit_count);
+#endif
+
+  if (unlock)
+    hb_blob_unlock (context->blob);
+}
+
+static HB_GNUC_UNUSED inline bool
+_hb_sanitize_check (SANITIZE_ARG_DEF,
+                   const char *base,
+                   unsigned int len)
+{
+  bool ret = context->start <= base &&
+            base <= context->end &&
+            (unsigned int) (context->end - base) >= len;
+
+#if HB_DEBUG_SANITIZE
+  if (sanitize_depth < HB_DEBUG_SANITIZE) \
+    fprintf (stderr, "SANITIZE(%p) %-*d-> check [%p..%p] (%d bytes) in [%p..%p] -> %s\n", \
+            base,
+            sanitize_depth, sanitize_depth,
+            base, base+len, len,
+            context->start, context->end,
+            ret ? "pass" : "FAIL");
+#endif
+  return ret;
+}
+
+static HB_GNUC_UNUSED inline bool
+_hb_sanitize_array (SANITIZE_ARG_DEF,
+                   const char *base,
+                   unsigned int record_size,
+                   unsigned int len)
+{
+  bool overflows = len >= ((unsigned int) -1) / record_size;
+
+#if HB_DEBUG_SANITIZE
+  if (sanitize_depth < HB_DEBUG_SANITIZE) \
+    fprintf (stderr, "SANITIZE(%p) %-*d-> array [%p..%p] (%d*%d=%ld bytes) in [%p..%p] -> %s\n", \
+            base,
+            sanitize_depth, sanitize_depth,
+            base, base + (record_size * len), record_size, len, (unsigned long) record_size * len,
+            context->start, context->end,
+            !overflows ? "does not overflow" : "OVERFLOWS FAIL");
+#endif
+  return HB_LIKELY (!overflows) && _hb_sanitize_check (SANITIZE_ARG, base, record_size * len);
+}
+
+static HB_GNUC_UNUSED inline bool
+_hb_sanitize_edit (SANITIZE_ARG_DEF,
+                  const char *base HB_GNUC_UNUSED,
+                  unsigned int len HB_GNUC_UNUSED)
+{
+  bool perm = hb_blob_try_writable_inplace (context->blob);
+  context->edit_count++;
+
+#if HB_DEBUG_SANITIZE
+  fprintf (stderr, "SANITIZE(%p) %-*d-> edit(%u) [%p..%p] (%d bytes) in [%p..%p] -> %s\n", \
+          base,
+          sanitize_depth, sanitize_depth,
+          context->edit_count,
+          base, base+len, len,
+          context->start, context->end,
+          perm ? "granted" : "REJECTED");
+#endif
+  return perm;
+}
+
+#define SANITIZE(X) HB_LIKELY ((X).sanitize (SANITIZE_ARG))
+#define SANITIZE2(X,Y) (SANITIZE (X) && SANITIZE (Y))
+
+#define SANITIZE_THIS(X) HB_LIKELY ((X).sanitize (SANITIZE_ARG, CONST_CHARP(this)))
+#define SANITIZE_THIS2(X,Y) (SANITIZE_THIS (X) && SANITIZE_THIS (Y))
+#define SANITIZE_THIS3(X,Y,Z) (SANITIZE_THIS (X) && SANITIZE_THIS (Y) && SANITIZE_THIS(Z))
+
+#define SANITIZE_BASE(X,B) HB_LIKELY ((X).sanitize (SANITIZE_ARG, B))
+#define SANITIZE_BASE2(X,Y,B) (SANITIZE_BASE (X,B) && SANITIZE_BASE (Y,B))
+
+#define SANITIZE_SELF() SANITIZE_OBJ (*this)
+#define SANITIZE_OBJ(X) SANITIZE_MEM(&(X), sizeof (X))
+#define SANITIZE_GET_SIZE() SANITIZE_SELF() && SANITIZE_MEM (this, this->get_size ())
+
+/* TODO Optimize this if L is fixed (gcc magic) */
+#define SANITIZE_MEM(B,L) HB_LIKELY (_hb_sanitize_check (SANITIZE_ARG, CONST_CHARP(B), (L)))
+
+#define SANITIZE_ARRAY(A,S,L) HB_LIKELY (_hb_sanitize_array (SANITIZE_ARG, CONST_CHARP(A), S, L))
+
+#define NEUTER(Var, Val) \
+       (SANITIZE_OBJ (Var) && \
+        _hb_sanitize_edit (SANITIZE_ARG, CONST_CHARP(&(Var)), sizeof (Var)) && \
+        ((Var) = (Val), true))
+
+
+/* Template to sanitize an object. */
+template <typename Type>
+struct Sanitizer
+{
+  static hb_blob_t *sanitize (hb_blob_t *blob) {
+    hb_sanitize_context_t context;
+    bool sane;
+
+    /* TODO is_sane() stuff */
+
+  retry:
+#if HB_DEBUG_SANITIZE
+    fprintf (stderr, "Sanitizer %p start %s\n", blob, __PRETTY_FUNCTION__);
+#endif
+
+    _hb_sanitize_init (&context, blob);
+
+    Type *t = &CAST (Type, *DECONST_CHARP(context.start), 0);
+
+    sane = t->sanitize (SANITIZE_ARG_INIT);
+    if (sane) {
+      if (context.edit_count) {
+#if HB_DEBUG_SANITIZE
+       fprintf (stderr, "Sanitizer %p passed first round with %d edits; going a second round %s\n",
+                blob, context.edit_count, __PRETTY_FUNCTION__);
+#endif
+        /* sanitize again to ensure no toe-stepping */
+        context.edit_count = 0;
+       sane = t->sanitize (SANITIZE_ARG_INIT);
+       if (context.edit_count) {
+#if HB_DEBUG_SANITIZE
+         fprintf (stderr, "Sanitizer %p requested %d edits in second round; FAILLING %s\n",
+                  blob, context.edit_count, __PRETTY_FUNCTION__);
+#endif
+         sane = false;
+       }
+      }
+      _hb_sanitize_fini (&context, true);
+    } else {
+      unsigned int edit_count = context.edit_count;
+      _hb_sanitize_fini (&context, true);
+      if (edit_count && !hb_blob_is_writable (blob) && hb_blob_try_writable (blob)) {
+        /* ok, we made it writable by relocating.  try again */
+#if HB_DEBUG_SANITIZE
+       fprintf (stderr, "Sanitizer %p retry %s\n", blob, __PRETTY_FUNCTION__);
+#endif
+        goto retry;
+      }
+    }
+
+#if HB_DEBUG_SANITIZE
+    fprintf (stderr, "Sanitizer %p %s %s\n", blob, sane ? "passed" : "FAILED", __PRETTY_FUNCTION__);
+#endif
+    if (sane)
+      return blob;
+    else {
+      hb_blob_destroy (blob);
+      return hb_blob_create_empty ();
+    }
+  }
+
+  static const Type& lock_instance (hb_blob_t *blob) {
+    return Type::get_for_data (hb_blob_lock (blob));
+  }
+};
+
+
+/*
+ *
+ * The OpenType Font File: Data Types
+ */
+
+
+/* "The following data types are used in the OpenType font file.
+ *  All OpenType fonts use Motorola-style byte ordering (Big Endian):" */
+
+/*
+ * Int types
+ */
+
+/* TODO On machines that allow unaligned access, use this version. */
+#define _DEFINE_INT_TYPE1_UNALIGNED(NAME, TYPE, BIG_ENDIAN, BYTES) \
+  struct NAME \
+  { \
+    inline NAME& operator = (TYPE i) { (TYPE&) v = BIG_ENDIAN (i); return *this; } \
+    inline operator TYPE(void) const { return BIG_ENDIAN ((TYPE&) v); } \
+    inline bool operator== (NAME o) const { return (TYPE&) v == (TYPE&) o.v; } \
+    inline bool sanitize (SANITIZE_ARG_DEF) { \
+      TRACE_SANITIZE (); \
+      return SANITIZE_SELF (); \
+    } \
+    private: unsigned char v[BYTES]; \
+  }; \
+  ASSERT_SIZE (NAME, BYTES)
+
+#define DEFINE_INT_TYPE1(NAME, TYPE, BIG_ENDIAN, BYTES) \
+  struct NAME \
+  { \
+    inline NAME& operator = (TYPE i) { BIG_ENDIAN##_put_unaligned(v, i); return *this; } \
+    inline operator TYPE(void) const { return BIG_ENDIAN##_get_unaligned (v); } \
+    inline bool operator== (NAME o) const { return BIG_ENDIAN##_cmp_unaligned (v, o.v); } \
+    inline bool sanitize (SANITIZE_ARG_DEF) { \
+      TRACE_SANITIZE (); \
+      return SANITIZE_SELF (); \
+    } \
+    private: unsigned char v[BYTES]; \
+  }; \
+  ASSERT_SIZE (NAME, BYTES)
+#define DEFINE_INT_TYPE0(NAME, type, b)        DEFINE_INT_TYPE1 (NAME, type##_t, hb_be_##type, b)
+#define DEFINE_INT_TYPE(NAME, u, w)    DEFINE_INT_TYPE0 (NAME, u##int##w, (w / 8))
+
+
+DEFINE_INT_TYPE (USHORT,  u, 16);      /* 16-bit unsigned integer. */
+DEFINE_INT_TYPE (SHORT,          , 16);        /* 16-bit signed integer. */
+DEFINE_INT_TYPE (ULONG,         u, 32);        /* 32-bit unsigned integer. */
+DEFINE_INT_TYPE (LONG,   , 32);        /* 32-bit signed integer. */
+
+
+/* Array of four uint8s (length = 32 bits) used to identify a script, language
+ * system, feature, or baseline */
+struct Tag : ULONG
+{
+  inline Tag (const Tag &o) { *(ULONG*)this = (ULONG&) o; }
+  inline Tag (uint32_t i) { *(ULONG*)this = i; }
+  inline Tag (const char *c) { *(ULONG*)this = *(ULONG*)c; }
+  inline bool operator== (const char *c) const { return *(ULONG*)this == *(ULONG*)c; }
+  /* What the char* converters return is NOT nul-terminated.  Print using "%.4s" */
+  inline operator const char* (void) const { return CONST_CHARP(this); }
+  inline operator char* (void) { return CHARP(this); }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    /* Note: Only accept ASCII-visible tags (mind DEL)
+     * This is one of the few times (only time?) we check
+     * for data integrity, as opposed o just boundary checks
+     */
+    return SANITIZE_SELF () && (((uint32_t) *this) & 0x80808080) == 0;
+  }
+};
+ASSERT_SIZE (Tag, 4);
+#define _NULL_TAG_INIT  {' ', ' ', ' ', ' '}
+DEFINE_NULL_DATA (Tag, 4, _NULL_TAG_INIT);
+#undef _NULL_TAG_INIT
+
+/* Glyph index number, same as uint16 (length = 16 bits) */
+typedef USHORT GlyphID;
+
+/* Offset to a table, same as uint16 (length = 16 bits), Null offset = 0x0000 */
+typedef USHORT Offset;
+
+/* LongOffset to a table, same as uint32 (length = 32 bits), Null offset = 0x00000000 */
+typedef ULONG LongOffset;
+
+
+/* CheckSum */
+struct CheckSum : ULONG
+{
+  static uint32_t CalcTableChecksum (ULONG *Table, uint32_t Length)
+  {
+    uint32_t Sum = 0L;
+    ULONG *EndPtr = Table+((Length+3) & ~3) / sizeof(ULONG);
+
+    while (Table < EndPtr)
+      Sum += *Table++;
+    return Sum;
+  }
+};
+ASSERT_SIZE (CheckSum, 4);
+
+
+/*
+ * Version Numbers
+ */
+
+struct FixedVersion
+{
+  inline operator uint32_t (void) const { return (major << 16) + minor; }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  USHORT major;
+  USHORT minor;
+};
+ASSERT_SIZE (FixedVersion, 4);
+
+
+
+/*
+ * Template subclasses of Offset and LongOffset that do the dereferencing.
+ * Use: (this+memberName)
+ */
+
+template <typename OffsetType, typename Type>
+struct GenericOffsetTo : OffsetType
+{
+  inline const Type& operator() (const void *base) const
+  {
+    unsigned int offset = *this;
+    if (HB_UNLIKELY (!offset)) return Null(Type);
+    return CONST_CAST(Type, *CONST_CHARP(base), offset);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    unsigned int offset = *this;
+    if (HB_UNLIKELY (!offset)) return true;
+    return SANITIZE (CAST(Type, *DECONST_CHARP(base), offset)) || NEUTER (DECONST_CAST(OffsetType,*this,0), 0);
+  }
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base, const void *base2) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    unsigned int offset = *this;
+    if (HB_UNLIKELY (!offset)) return true;
+    return SANITIZE_BASE (CAST(Type, *DECONST_CHARP(base), offset), base2) || NEUTER (DECONST_CAST(OffsetType,*this,0), 0);
+  }
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base, unsigned int user_data) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    unsigned int offset = *this;
+    if (HB_UNLIKELY (!offset)) return true;
+    return SANITIZE_BASE (CAST(Type, *DECONST_CHARP(base), offset), user_data) || NEUTER (DECONST_CAST(OffsetType,*this,0), 0);
+  }
+};
+template <typename Base, typename OffsetType, typename Type>
+inline const Type& operator + (const Base &base, GenericOffsetTo<OffsetType, Type> offset) { return offset (base); }
+
+template <typename Type>
+struct OffsetTo : GenericOffsetTo<Offset, Type> {};
+
+template <typename Type>
+struct LongOffsetTo : GenericOffsetTo<LongOffset, Type> {};
+
+
+/*
+ * Array Types
+ */
+
+template <typename LenType, typename Type>
+struct GenericArrayOf
+{
+  inline const Type& operator [] (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= len)) return Null(Type);
+    return array[i];
+  }
+  inline unsigned int get_size () const
+  { return sizeof (len) + len * sizeof (array[0]); }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_GET_SIZE()) return false;
+    /* Note:
+     * for non-recursive types, this is not much needed.
+     * But we keep the code to make sure the objects pointed to
+     * do have a simple sanitize(). */
+    return true;
+    unsigned int count = len;
+    for (unsigned int i = 0; i < count; i++)
+      if (!SANITIZE (array[i]))
+        return false;
+    return true;
+  }
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_GET_SIZE()) return false;
+    unsigned int count = len;
+    for (unsigned int i = 0; i < count; i++)
+      if (!array[i].sanitize (SANITIZE_ARG, base))
+        return false;
+    return true;
+  }
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base, const void *base2) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_GET_SIZE()) return false;
+    unsigned int count = len;
+    for (unsigned int i = 0; i < count; i++)
+      if (!array[i].sanitize (SANITIZE_ARG, base, base2))
+        return false;
+    return true;
+  }
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base, unsigned int user_data) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_GET_SIZE()) return false;
+    unsigned int count = len;
+    for (unsigned int i = 0; i < count; i++)
+      if (!array[i].sanitize (SANITIZE_ARG, base, user_data))
+        return false;
+    return true;
+  }
+
+  LenType len;
+  Type array[];
+};
+
+/* An array with a USHORT number of elements. */
+template <typename Type>
+struct ArrayOf : GenericArrayOf<USHORT, Type> {};
+
+/* An array with a ULONG number of elements. */
+template <typename Type>
+struct LongArrayOf : GenericArrayOf<ULONG, Type> {};
+
+/* Array of Offset's */
+template <typename Type>
+struct OffsetArrayOf : ArrayOf<OffsetTo<Type> > {};
+
+/* Array of LongOffset's */
+template <typename Type>
+struct LongOffsetArrayOf : ArrayOf<LongOffsetTo<Type> > {};
+
+/* LongArray of LongOffset's */
+template <typename Type>
+struct LongOffsetLongArrayOf : LongArrayOf<LongOffsetTo<Type> > {};
+
+/* Array of offsets relative to the beginning of the array itself. */
+template <typename Type>
+struct OffsetListOf : OffsetArrayOf<Type>
+{
+  inline const Type& operator [] (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= this->len)) return Null(Type);
+    return this+this->array[i];
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return OffsetArrayOf<Type>::sanitize (SANITIZE_ARG, CONST_CHARP(this));
+  }
+  inline bool sanitize (SANITIZE_ARG_DEF, unsigned int user_data) {
+    TRACE_SANITIZE ();
+    return OffsetArrayOf<Type>::sanitize (SANITIZE_ARG, CONST_CHARP(this), user_data);
+  }
+};
+
+
+/* An array with a USHORT number of elements,
+ * starting at second element. */
+template <typename Type>
+struct HeadlessArrayOf
+{
+  inline const Type& operator [] (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= len || !i)) return Null(Type);
+    return array[i-1];
+  }
+  inline unsigned int get_size () const
+  { return sizeof (len) + (len ? len - 1 : 0) * sizeof (array[0]); }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_GET_SIZE()) return false;
+    /* Note:
+     * for non-recursive types, this is not much needed.
+     * But we keep the code to make sure the objects pointed to
+     * do have a simple sanitize(). */
+    return true;
+    unsigned int count = len ? len - 1 : 0;
+    for (unsigned int i = 0; i < count; i++)
+      if (!SANITIZE (array[i]))
+        return false;
+    return true;
+  }
+
+  USHORT len;
+  Type array[];
+};
+
+
+#endif /* HB_OPEN_TYPES_PRIVATE_HH */
diff --git a/pango/opentype/hb-ot-layout-common-private.hh b/pango/opentype/hb-ot-layout-common-private.hh
new file mode 100755 (executable)
index 0000000..a1e625d
--- /dev/null
@@ -0,0 +1,603 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_COMMON_PRIVATE_HH
+#define HB_OT_LAYOUT_COMMON_PRIVATE_HH
+
+#include "hb-ot-layout-private.h"
+
+#include "hb-open-type-private.hh"
+
+
+#define NO_CONTEXT             ((unsigned int) 0x110000)
+#define NOT_COVERED            ((unsigned int) 0x110000)
+#define MAX_NESTING_LEVEL      8
+
+
+/*
+ *
+ * OpenType Layout Common Table Formats
+ *
+ */
+
+
+/*
+ * Script, ScriptList, LangSys, Feature, FeatureList, Lookup, LookupList
+ */
+
+template <typename Type>
+struct Record
+{
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    return SANITIZE (tag) && SANITIZE_BASE (offset, base);
+  }
+
+  Tag          tag;            /* 4-byte Tag identifier */
+  OffsetTo<Type>
+               offset;         /* Offset from beginning of object holding
+                                * the Record */
+};
+
+template <typename Type>
+struct RecordArrayOf : ArrayOf<Record<Type> > {
+  inline const Tag& get_tag (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= this->len)) return Null(Tag);
+    return this->array[i].tag;
+  }
+  inline bool get_tags (unsigned int *record_count /* IN/OUT */,
+                       hb_tag_t     *record_tags /* OUT */) const
+  {
+    unsigned int count = MIN (this->len, *record_count);
+    for (unsigned int i = 0; i < count; i++)
+      record_tags[i] = this->array[i].tag;
+
+    *record_count = this->len;
+    return !!this->len;
+  }
+  inline bool find_index (hb_tag_t tag, unsigned int *index) const
+  {
+    const Tag t = tag;
+    // TODO bsearch
+    unsigned int count = this->len;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      if (t == this->array[i].tag)
+      {
+        if (index) *index = i;
+        return true;
+      }
+    }
+    if (index) *index = NO_INDEX;
+    return false;
+  }
+};
+
+template <typename Type>
+struct RecordListOf : RecordArrayOf<Type>
+{
+  inline const Type& operator [] (unsigned int i) const
+  { return this+RecordArrayOf<Type>::operator[](i).offset; }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return RecordArrayOf<Type>::sanitize (SANITIZE_ARG, CONST_CHARP(this));
+  }
+};
+
+
+struct IndexArray : ArrayOf<USHORT>
+{
+  inline unsigned int operator [] (unsigned int i) const
+  {
+    if (HB_UNLIKELY (i >= this->len))
+      return NO_INDEX;
+    return this->array[i];
+  }
+  inline bool get_indexes (unsigned int *_count /* IN/OUT */,
+                          unsigned int *_indexes /* OUT */) const
+  {
+    unsigned int count = MIN (this->len, *_count);
+    for (unsigned int i = 0; i < count; i++)
+      _indexes[i] = this->array[i];
+
+    *_count = this->len;
+    return !!this->len;
+  }
+};
+
+
+struct Script;
+struct LangSys;
+struct Feature;
+
+
+struct LangSys
+{
+  inline unsigned int get_feature_count (void) const
+  { return featureIndex.len; }
+  inline hb_tag_t get_feature_index (unsigned int i) const
+  { return featureIndex[i]; }
+  inline bool get_feature_indexes (unsigned int *feature_count /* IN/OUT */,
+                                  unsigned int *feature_indexes /* OUT */) const
+  { return featureIndex.get_indexes (feature_count, feature_indexes); }
+
+  inline bool has_required_feature (void) const { return reqFeatureIndex != 0xffff; }
+  inline int get_required_feature_index (void) const
+  {
+    if (reqFeatureIndex == 0xffff)
+      return NO_INDEX;
+   return reqFeatureIndex;;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE (featureIndex);
+  }
+
+  Offset       lookupOrder;    /* = Null (reserved for an offset to a
+                                * reordering table) */
+  USHORT       reqFeatureIndex;/* Index of a feature required for this
+                                * language system--if no required features
+                                * = 0xFFFF */
+  IndexArray   featureIndex;   /* Array of indices into the FeatureList */
+};
+ASSERT_SIZE_DATA (LangSys, 6, "\0\0\xFF\xFF");
+
+
+struct Script
+{
+  inline unsigned int get_lang_sys_count (void) const
+  { return langSys.len; }
+  inline const Tag& get_lang_sys_tag (unsigned int i) const
+  { return langSys.get_tag (i); }
+  inline bool get_lang_sys_tags (unsigned int *lang_sys_count /* IN/OUT */,
+                                hb_tag_t     *lang_sys_tags /* OUT */) const
+  { return langSys.get_tags (lang_sys_count, lang_sys_tags); }
+  inline const LangSys& get_lang_sys (unsigned int i) const
+  {
+    if (i == NO_INDEX) return get_default_lang_sys ();
+    return this+langSys[i].offset;
+  }
+  inline bool find_lang_sys_index (hb_tag_t tag, unsigned int *index) const
+  { return langSys.find_index (tag, index); }
+
+  inline bool has_default_lang_sys (void) const { return defaultLangSys != 0; }
+  inline const LangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (defaultLangSys) && SANITIZE_THIS (langSys);
+  }
+
+  private:
+  OffsetTo<LangSys>
+               defaultLangSys; /* Offset to DefaultLangSys table--from
+                                * beginning of Script table--may be Null */
+  RecordArrayOf<LangSys>
+               langSys;        /* Array of LangSysRecords--listed
+                                * alphabetically by LangSysTag */
+};
+ASSERT_SIZE (Script, 4);
+
+typedef RecordListOf<Script> ScriptList;
+ASSERT_SIZE (ScriptList, 2);
+
+
+struct Feature
+{
+  inline unsigned int get_lookup_count (void) const
+  { return lookupIndex.len; }
+  inline hb_tag_t get_lookup_index (unsigned int i) const
+  { return lookupIndex[i]; }
+  inline bool get_lookup_indexes (unsigned int *lookup_count /* IN/OUT */,
+                                 unsigned int *lookup_tags /* OUT */) const
+  { return lookupIndex.get_indexes (lookup_count, lookup_tags); }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE (lookupIndex);
+  }
+
+  /* TODO: implement get_feature_parameters() */
+  /* TODO: implement FeatureSize and other special features? */
+  Offset       featureParams;  /* Offset to Feature Parameters table (if one
+                                * has been defined for the feature), relative
+                                * to the beginning of the Feature Table; = Null
+                                * if not required */
+  IndexArray    lookupIndex;   /* Array of LookupList indices */
+};
+ASSERT_SIZE (Feature, 4);
+
+typedef RecordListOf<Feature> FeatureList;
+ASSERT_SIZE (FeatureList, 2);
+
+
+struct LookupFlag : USHORT
+{
+  enum {
+    RightToLeft                = 0x0001u,
+    IgnoreBaseGlyphs   = 0x0002u,
+    IgnoreLigatures    = 0x0004u,
+    IgnoreMarks                = 0x0008u,
+    IgnoreFlags                = 0x000Eu,
+    UseMarkFilteringSet        = 0x0010u,
+    Reserved           = 0x00E0u,
+    MarkAttachmentType = 0xFF00u
+  };
+};
+ASSERT_SIZE (LookupFlag, 2);
+
+struct LookupSubTable
+{
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  USHORT       format;         /* Subtable format.  Different for GSUB and GPOS */
+};
+ASSERT_SIZE (LookupSubTable, 2);
+
+struct Lookup
+{
+  inline const LookupSubTable& get_subtable (unsigned int i) const { return this+subTable[i]; }
+  inline unsigned int get_subtable_count (void) const { return subTable.len; }
+
+  inline unsigned int get_type (void) const { return lookupType; }
+  inline unsigned int get_flag (void) const
+  {
+    unsigned int flag = lookupFlag;
+    if (HB_UNLIKELY (flag & LookupFlag::UseMarkFilteringSet))
+    {
+      const USHORT &markFilteringSet = CONST_NEXT (USHORT, subTable);
+      flag += (markFilteringSet << 16);
+    }
+    return flag;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!(SANITIZE_SELF () && SANITIZE_THIS (subTable))) return false;
+    if (HB_UNLIKELY (lookupFlag & LookupFlag::UseMarkFilteringSet))
+    {
+      USHORT &markFilteringSet = NEXT (USHORT, subTable);
+      if (!SANITIZE (markFilteringSet)) return false;
+    }
+    return true;
+  }
+
+  USHORT       lookupType;             /* Different enumerations for GSUB and GPOS */
+  USHORT       lookupFlag;             /* Lookup qualifiers */
+  OffsetArrayOf<LookupSubTable>
+               subTable;               /* Array of SubTables */
+  USHORT       markFilteringSetX[0];   /* Index (base 0) into GDEF mark glyph sets
+                                        * structure. This field is only present if bit
+                                        * UseMarkFilteringSet of lookup flags is set. */
+};
+ASSERT_SIZE (Lookup, 6);
+
+typedef OffsetListOf<Lookup> LookupList;
+ASSERT_SIZE (LookupList, 2);
+
+
+/*
+ * Coverage Table
+ */
+
+struct CoverageFormat1
+{
+  friend struct Coverage;
+
+  private:
+  inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+  {
+    if (HB_UNLIKELY (glyph_id > 0xFFFF))
+      return NOT_COVERED;
+    GlyphID gid;
+    gid = glyph_id;
+    // TODO: bsearch
+    unsigned int num_glyphs = glyphArray.len;
+    for (unsigned int i = 0; i < num_glyphs; i++)
+      if (gid == glyphArray[i])
+        return i;
+    return NOT_COVERED;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE (glyphArray);
+  }
+
+  private:
+  USHORT       coverageFormat; /* Format identifier--format = 1 */
+  ArrayOf<GlyphID>
+               glyphArray;     /* Array of GlyphIDs--in numerical order */
+};
+ASSERT_SIZE (CoverageFormat1, 4);
+
+struct CoverageRangeRecord
+{
+  friend struct CoverageFormat2;
+
+  private:
+  inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+  {
+    if (glyph_id >= start && glyph_id <= end)
+      return (unsigned int) startCoverageIndex + (glyph_id - start);
+    return NOT_COVERED;
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  GlyphID      start;                  /* First GlyphID in the range */
+  GlyphID      end;                    /* Last GlyphID in the range */
+  USHORT       startCoverageIndex;     /* Coverage Index of first GlyphID in
+                                        * range */
+};
+ASSERT_SIZE_DATA (CoverageRangeRecord, 6, "\000\001");
+
+struct CoverageFormat2
+{
+  friend struct Coverage;
+
+  private:
+  inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+  {
+    // TODO: bsearch
+    unsigned int count = rangeRecord.len;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      unsigned int coverage = rangeRecord[i].get_coverage (glyph_id);
+      if (coverage != NOT_COVERED)
+        return coverage;
+    }
+    return NOT_COVERED;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE (rangeRecord);
+  }
+
+  private:
+  USHORT       coverageFormat; /* Format identifier--format = 2 */
+  ArrayOf<CoverageRangeRecord>
+               rangeRecord;    /* Array of glyph ranges--ordered by
+                                * Start GlyphID. rangeCount entries
+                                * long */
+};
+ASSERT_SIZE (CoverageFormat2, 4);
+
+struct Coverage
+{
+  inline unsigned int operator() (hb_codepoint_t glyph_id) const { return get_coverage (glyph_id); }
+
+  inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
+  {
+    switch (u.format) {
+    case 1: return u.format1->get_coverage(glyph_id);
+    case 2: return u.format2->get_coverage(glyph_id);
+    default:return NOT_COVERED;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  CoverageFormat1      format1[];
+  CoverageFormat2      format2[];
+  } u;
+};
+ASSERT_SIZE (Coverage, 2);
+
+
+/*
+ * Class Definition Table
+ */
+
+struct ClassDefFormat1
+{
+  friend struct ClassDef;
+
+  private:
+  inline hb_ot_layout_class_t get_class (hb_codepoint_t glyph_id) const
+  {
+    if ((unsigned int) (glyph_id - startGlyph) < classValue.len)
+      return classValue[glyph_id - startGlyph];
+    return 0;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE (classValue);
+  }
+
+  USHORT       classFormat;            /* Format identifier--format = 1 */
+  GlyphID      startGlyph;             /* First GlyphID of the classValueArray */
+  ArrayOf<USHORT>
+               classValue;             /* Array of Class Values--one per GlyphID */
+};
+ASSERT_SIZE (ClassDefFormat1, 6);
+
+struct ClassRangeRecord
+{
+  friend struct ClassDefFormat2;
+
+  private:
+  inline hb_ot_layout_class_t get_class (hb_codepoint_t glyph_id) const
+  {
+    if (glyph_id >= start && glyph_id <= end)
+      return classValue;
+    return 0;
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  GlyphID      start;          /* First GlyphID in the range */
+  GlyphID      end;            /* Last GlyphID in the range */
+  USHORT       classValue;     /* Applied to all glyphs in the range */
+};
+ASSERT_SIZE_DATA (ClassRangeRecord, 6, "\000\001");
+
+struct ClassDefFormat2
+{
+  friend struct ClassDef;
+
+  private:
+  inline hb_ot_layout_class_t get_class (hb_codepoint_t glyph_id) const
+  {
+    // TODO: bsearch
+    unsigned int count = rangeRecord.len;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      int classValue = rangeRecord[i].get_class (glyph_id);
+      if (classValue > 0)
+        return classValue;
+    }
+    return 0;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE (rangeRecord);
+  }
+
+  USHORT       classFormat;    /* Format identifier--format = 2 */
+  ArrayOf<ClassRangeRecord>
+               rangeRecord;    /* Array of glyph ranges--ordered by
+                                * Start GlyphID */
+};
+ASSERT_SIZE (ClassDefFormat2, 4);
+
+struct ClassDef
+{
+  inline unsigned int operator() (hb_codepoint_t glyph_id) const { return get_class (glyph_id); }
+
+  inline hb_ot_layout_class_t get_class (hb_codepoint_t glyph_id) const
+  {
+    switch (u.format) {
+    case 1: return u.format1->get_class(glyph_id);
+    case 2: return u.format2->get_class(glyph_id);
+    default:return 0;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  ClassDefFormat1      format1[];
+  ClassDefFormat2      format2[];
+  } u;
+};
+ASSERT_SIZE (ClassDef, 2);
+
+
+/*
+ * Device Tables
+ */
+
+struct Device
+{
+  inline int operator() (unsigned int ppem_size) const { return get_delta (ppem_size); }
+
+  inline int get_delta (unsigned int ppem_size) const
+  {
+    unsigned int f = deltaFormat;
+    if (HB_UNLIKELY (f < 1 || f > 3))
+      return 0;
+
+    if (ppem_size < startSize || ppem_size > endSize)
+      return 0;
+
+    unsigned int s = ppem_size - startSize;
+
+    unsigned int byte = deltaValue[s >> (4 - f)];
+    unsigned int bits = (byte >> (16 - (((s & ((1 << (4 - f)) - 1)) + 1) << f)));
+    unsigned int mask = (0xFFFF >> (16 - (1 << f)));
+
+    int delta = bits & mask;
+
+    if ((unsigned int) delta >= ((mask + 1) >> 1))
+      delta -= mask + 1;
+
+    return delta;
+  }
+
+  inline unsigned int get_size () const
+  {
+    unsigned int f = deltaFormat;
+    if (HB_UNLIKELY (f < 1 || f > 3 || startSize > endSize)) return sizeof (*this);
+    return sizeof (*this) + ((endSize - startSize + (1 << (4 - f)) - 1) >> (4 - f));
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_GET_SIZE ();
+  }
+
+  private:
+  USHORT       startSize;      /* Smallest size to correct--in ppem */
+  USHORT       endSize;        /* Largest size to correct--in ppem */
+  USHORT       deltaFormat;    /* Format of DeltaValue array data: 1, 2, or 3 */
+  USHORT       deltaValue[];   /* Array of compressed data */
+};
+ASSERT_SIZE (Device, 6);
+
+
+#endif /* HB_OT_LAYOUT_COMMON_PRIVATE_HH */
diff --git a/pango/opentype/hb-ot-layout-gdef-private.hh b/pango/opentype/hb-ot-layout-gdef-private.hh
new file mode 100755 (executable)
index 0000000..1eb96c0
--- /dev/null
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_GDEF_PRIVATE_HH
+#define HB_OT_LAYOUT_GDEF_PRIVATE_HH
+
+#include "hb-ot-layout-common-private.hh"
+
+#include "hb-font-private.h"
+
+
+/*
+ * Attachment List Table
+ */
+
+typedef ArrayOf<USHORT> AttachPoint;   /* Array of contour point indices--in
+                                        * increasing numerical order */
+ASSERT_SIZE (AttachPoint, 2);
+
+struct AttachList
+{
+  inline bool get_attach_points (hb_codepoint_t glyph_id,
+                                unsigned int *point_count /* IN/OUT */,
+                                unsigned int *point_array /* OUT */) const
+  {
+    unsigned int index = (this+coverage) (glyph_id);
+    if (index == NOT_COVERED)
+    {
+      *point_count = 0;
+      return false;
+    }
+    const AttachPoint &points = this+attachPoint[index];
+
+    unsigned int count = MIN (points.len, *point_count);
+    for (unsigned int i = 0; i < count; i++)
+      point_array[i] = points[i];
+
+    *point_count = points.len;
+
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, attachPoint);
+  }
+
+  private:
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table -- from
+                                        * beginning of AttachList table */
+  OffsetArrayOf<AttachPoint>
+               attachPoint;            /* Array of AttachPoint tables
+                                        * in Coverage Index order */
+};
+ASSERT_SIZE (AttachList, 4);
+
+/*
+ * Ligature Caret Table
+ */
+
+struct CaretValueFormat1
+{
+  friend struct CaretValue;
+
+  private:
+  inline int get_caret_value (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id) const
+  {
+    /* TODO vertical */
+    return context->font->x_scale * coordinate / 0x10000;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  USHORT       caretValueFormat;       /* Format identifier--format = 1 */
+  SHORT                coordinate;             /* X or Y value, in design units */
+};
+ASSERT_SIZE (CaretValueFormat1, 4);
+
+struct CaretValueFormat2
+{
+  friend struct CaretValue;
+
+  private:
+  inline int get_caret_value (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id) const
+  {
+    return /* TODO contour point */ 0;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  USHORT       caretValueFormat;       /* Format identifier--format = 2 */
+  USHORT       caretValuePoint;        /* Contour point index on glyph */
+};
+ASSERT_SIZE (CaretValueFormat2, 4);
+
+struct CaretValueFormat3
+{
+  friend struct CaretValue;
+
+  inline int get_caret_value (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id) const
+  {
+    /* TODO vertical */
+    return context->font->x_scale * coordinate / 0x10000 +
+          ((this+deviceTable).get_delta (context->font->x_ppem) << 6);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS (deviceTable);
+  }
+
+  private:
+  USHORT       caretValueFormat;       /* Format identifier--format = 3 */
+  SHORT                coordinate;             /* X or Y value, in design units */
+  OffsetTo<Device>
+               deviceTable;            /* Offset to Device table for X or Y
+                                        * value--from beginning of CaretValue
+                                        * table */
+};
+ASSERT_SIZE (CaretValueFormat3, 6);
+
+struct CaretValue
+{
+  inline int get_caret_value (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id) const
+  {
+    switch (u.format) {
+    case 1: return u.format1->get_caret_value (context, glyph_id);
+    case 2: return u.format2->get_caret_value (context, glyph_id);
+    case 3: return u.format3->get_caret_value (context, glyph_id);
+    default:return 0;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    case 3: return u.format3->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  CaretValueFormat1    format1[];
+  CaretValueFormat2    format2[];
+  CaretValueFormat3    format3[];
+  } u;
+};
+ASSERT_SIZE (CaretValue, 2);
+
+struct LigGlyph
+{
+  inline void get_lig_carets (hb_ot_layout_context_t *context,
+                             hb_codepoint_t glyph_id,
+                             unsigned int *caret_count /* IN/OUT */,
+                             int *caret_array /* OUT */) const
+  {
+
+    unsigned int count = MIN (carets.len, *caret_count);
+    for (unsigned int i = 0; i < count; i++)
+      caret_array[i] = (this+carets[i]).get_caret_value (context, glyph_id);
+
+    *caret_count = carets.len;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (carets);
+  }
+
+  private:
+  OffsetArrayOf<CaretValue>
+               carets;                 /* Offset array of CaretValue tables
+                                        * --from beginning of LigGlyph table
+                                        * --in increasing coordinate order */
+};
+ASSERT_SIZE (LigGlyph, 2);
+
+struct LigCaretList
+{
+  inline bool get_lig_carets (hb_ot_layout_context_t *context,
+                             hb_codepoint_t glyph_id,
+                             unsigned int *caret_count /* IN/OUT */,
+                             int *caret_array /* OUT */) const
+  {
+    unsigned int index = (this+coverage) (glyph_id);
+    if (index == NOT_COVERED)
+    {
+      *caret_count = 0;
+      return false;
+    }
+    const LigGlyph &lig_glyph = this+ligGlyph[index];
+    lig_glyph.get_lig_carets (context, glyph_id, caret_count, caret_array);
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, ligGlyph);
+  }
+
+  private:
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of LigCaretList table */
+  OffsetArrayOf<LigGlyph>
+               ligGlyph;               /* Array of LigGlyph tables
+                                        * in Coverage Index order */
+};
+ASSERT_SIZE (LigCaretList, 4);
+
+
+struct MarkGlyphSetsFormat1
+{
+  inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
+  { return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (coverage);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  LongOffsetArrayOf<Coverage>
+               coverage;               /* Array of long offsets to mark set
+                                        * coverage tables */
+};
+ASSERT_SIZE (MarkGlyphSetsFormat1, 4);
+
+struct MarkGlyphSets
+{
+  inline bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const
+  {
+    switch (u.format) {
+    case 1: return u.format1->covers (set_index, glyph_id);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  MarkGlyphSetsFormat1 format1[];
+  } u;
+};
+ASSERT_SIZE (MarkGlyphSets, 2);
+
+
+/*
+ * GDEF
+ */
+
+struct GDEF
+{
+  static const hb_tag_t Tag    = HB_OT_TAG_GDEF;
+
+  enum {
+    UnclassifiedGlyph  = 0,
+    BaseGlyph          = 1,
+    LigatureGlyph      = 2,
+    MarkGlyph          = 3,
+    ComponentGlyph     = 4
+  };
+
+  STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (GDEF, 1, 1);
+
+  inline bool has_glyph_classes () const { return glyphClassDef != 0; }
+  inline hb_ot_layout_class_t get_glyph_class (hb_codepoint_t glyph) const
+  { return (this+glyphClassDef).get_class (glyph); }
+
+  inline bool has_mark_attachment_types () const { return markAttachClassDef != 0; }
+  inline hb_ot_layout_class_t get_mark_attachment_type (hb_codepoint_t glyph) const
+  { return (this+markAttachClassDef).get_class (glyph); }
+
+  inline bool has_attach_points () const { return attachList != 0; }
+  inline bool get_attach_points (hb_codepoint_t glyph_id,
+                                unsigned int *point_count /* IN/OUT */,
+                                unsigned int *point_array /* OUT */) const
+  { return (this+attachList).get_attach_points (glyph_id, point_count, point_array); }
+
+  inline bool has_lig_carets () const { return ligCaretList != 0; }
+  inline bool get_lig_carets (hb_ot_layout_context_t *context,
+                             hb_codepoint_t glyph_id,
+                             unsigned int *caret_count /* IN/OUT */,
+                             int *caret_array /* OUT */) const
+  { return (this+ligCaretList).get_lig_carets (context, glyph_id, caret_count, caret_array); }
+
+  inline bool has_mark_sets () const { return version >= 0x00010002 && markGlyphSetsDef[0] != 0; }
+  inline bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const
+  { return version >= 0x00010002 && (this+markGlyphSetsDef[0]).covers (set_index, glyph_id); }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (version)) return false;
+    if (version.major != 1) return true;
+    return SANITIZE_THIS2 (glyphClassDef, attachList) &&
+          SANITIZE_THIS2 (ligCaretList, markAttachClassDef) &&
+          (version < 0x00010002 || SANITIZE_THIS (markGlyphSetsDef[0]));
+  }
+
+  private:
+  FixedVersion version;                /* Version of the GDEF table--currently
+                                        * 0x00010002 */
+  OffsetTo<ClassDef>
+               glyphClassDef;          /* Offset to class definition table
+                                        * for glyph type--from beginning of
+                                        * GDEF header (may be Null) */
+  OffsetTo<AttachList>
+               attachList;             /* Offset to list of glyphs with
+                                        * attachment points--from beginning
+                                        * of GDEF header (may be Null) */
+  OffsetTo<LigCaretList>
+               ligCaretList;           /* Offset to list of positioning points
+                                        * for ligature carets--from beginning
+                                        * of GDEF header (may be Null) */
+  OffsetTo<ClassDef>
+               markAttachClassDef;     /* Offset to class definition table for
+                                        * mark attachment type--from beginning
+                                        * of GDEF header (may be Null) */
+  OffsetTo<MarkGlyphSets>
+               markGlyphSetsDef[0];    /* Offset to the table of mark set
+                                        * definitions--from beginning of GDEF
+                                        * header (may be NULL).  Introduced
+                                        * in version 00010002. */
+};
+ASSERT_SIZE (GDEF, 12);
+
+
+#endif /* HB_OT_LAYOUT_GDEF_PRIVATE_HH */
diff --git a/pango/opentype/hb-ot-layout-gpos-private.hh b/pango/opentype/hb-ot-layout-gpos-private.hh
new file mode 100755 (executable)
index 0000000..609ebe7
--- /dev/null
@@ -0,0 +1,1538 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_GPOS_PRIVATE_HH
+#define HB_OT_LAYOUT_GPOS_PRIVATE_HH
+
+#include "hb-ot-layout-gsubgpos-private.hh"
+
+#define HB_OT_LAYOUT_GPOS_NO_LAST ((unsigned int) -1)
+
+/* Shared Tables: ValueRecord, Anchor Table, and MarkArray */
+
+typedef SHORT Value;
+
+typedef Value ValueRecord[0];
+ASSERT_SIZE (ValueRecord, 0);
+
+struct ValueFormat : USHORT
+{
+  enum
+  {
+    xPlacement = 0x0001,       /* Includes horizontal adjustment for placement */
+    yPlacement = 0x0002,       /* Includes vertical adjustment for placement */
+    xAdvance   = 0x0004,       /* Includes horizontal adjustment for advance */
+    yAdvance   = 0x0008,       /* Includes vertical adjustment for advance */
+    xPlaDevice = 0x0010,       /* Includes horizontal Device table for placement */
+    yPlaDevice = 0x0020,       /* Includes vertical Device table for placement */
+    xAdvDevice = 0x0040,       /* Includes horizontal Device table for advance */
+    yAdvDevice = 0x0080,       /* Includes vertical Device table for advance */
+    ignored    = 0x0F00,       /* Was used in TrueType Open for MM fonts */
+    reserved   = 0xF000        /* For future use */
+  };
+
+  inline unsigned int get_len () const
+  { return _hb_popcount32 ((unsigned int) *this); }
+  inline unsigned int get_size () const
+  { return get_len () * sizeof (Value); }
+
+  void apply_value (hb_ot_layout_context_t *context,
+                   const char          *base,
+                   const Value         *values,
+                   hb_internal_glyph_position_t *glyph_pos) const
+  {
+    unsigned int x_ppem, y_ppem;
+    hb_16dot16_t x_scale, y_scale;
+    unsigned int format = *this;
+
+    if (!format)
+      return;
+
+    /* All fields are options.  Only those available advance the value
+     * pointer. */
+#if 0
+struct ValueRecord {
+  SHORT                xPlacement;             /* Horizontal adjustment for
+                                        * placement--in design units */
+  SHORT                yPlacement;             /* Vertical adjustment for
+                                        * placement--in design units */
+  SHORT                xAdvance;               /* Horizontal adjustment for
+                                        * advance--in design units (only used
+                                        * for horizontal writing) */
+  SHORT                yAdvance;               /* Vertical adjustment for advance--in
+                                        * design units (only used for vertical
+                                        * writing) */
+  Offset       xPlaDevice;             /* Offset to Device table for
+                                        * horizontal placement--measured from
+                                        * beginning of PosTable (may be NULL) */
+  Offset       yPlaDevice;             /* Offset to Device table for vertical
+                                        * placement--measured from beginning
+                                        * of PosTable (may be NULL) */
+  Offset       xAdvDevice;             /* Offset to Device table for
+                                        * horizontal advance--measured from
+                                        * beginning of PosTable (may be NULL) */
+  Offset       yAdvDevice;             /* Offset to Device table for vertical
+                                        * advance--measured from beginning of
+                                        * PosTable (may be NULL) */
+};
+#endif
+
+    x_scale = context->font->x_scale;
+    y_scale = context->font->y_scale;
+    /* design units -> fractional pixel */
+    if (format & xPlacement)
+      glyph_pos->x_pos += _hb_16dot16_mul_trunc (x_scale, *(SHORT*)values++);
+    if (format & yPlacement)
+      glyph_pos->y_pos += _hb_16dot16_mul_trunc (y_scale, *(SHORT*)values++);
+    if (format & xAdvance)
+      glyph_pos->x_advance += _hb_16dot16_mul_trunc (x_scale, *(SHORT*)values++);
+    if (format & yAdvance)
+      glyph_pos->y_advance += _hb_16dot16_mul_trunc (y_scale, *(SHORT*)values++);
+
+    x_ppem = context->font->x_ppem;
+    y_ppem = context->font->y_ppem;
+    /* pixel -> fractional pixel */
+    if (format & xPlaDevice) {
+      if (x_ppem)
+       glyph_pos->x_pos += (base+*(OffsetTo<Device>*)values++).get_delta (x_ppem) << 6;
+      else
+        values++;
+    }
+    if (format & yPlaDevice) {
+      if (y_ppem)
+       glyph_pos->y_pos += (base+*(OffsetTo<Device>*)values++).get_delta (y_ppem) << 6;
+      else
+        values++;
+    }
+    if (format & xAdvDevice) {
+      if (x_ppem)
+       glyph_pos->x_advance += (base+*(OffsetTo<Device>*)values++).get_delta (x_ppem) << 6;
+      else
+        values++;
+    }
+    if (format & yAdvDevice) {
+      if (y_ppem)
+       glyph_pos->y_advance += (base+*(OffsetTo<Device>*)values++).get_delta (y_ppem) << 6;
+      else
+        values++;
+    }
+  }
+};
+ASSERT_SIZE (ValueFormat, 2);
+
+
+struct AnchorFormat1
+{
+  friend struct Anchor;
+
+  private:
+  inline void get_anchor (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id,
+                         hb_position_t *x, hb_position_t *y) const
+  {
+      *x = _hb_16dot16_mul_trunc (context->font->x_scale, xCoordinate);
+      *y = _hb_16dot16_mul_trunc (context->font->y_scale, yCoordinate);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  SHORT                xCoordinate;            /* Horizontal value--in design units */
+  SHORT                yCoordinate;            /* Vertical value--in design units */
+};
+ASSERT_SIZE (AnchorFormat1, 6);
+
+struct AnchorFormat2
+{
+  friend struct Anchor;
+
+  private:
+  inline void get_anchor (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id,
+                         hb_position_t *x, hb_position_t *y) const
+  {
+      /* TODO Contour */
+      *x = _hb_16dot16_mul_trunc (context->font->x_scale, xCoordinate);
+      *y = _hb_16dot16_mul_trunc (context->font->y_scale, yCoordinate);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 2 */
+  SHORT                xCoordinate;            /* Horizontal value--in design units */
+  SHORT                yCoordinate;            /* Vertical value--in design units */
+  USHORT       anchorPoint;            /* Index to glyph contour point */
+};
+ASSERT_SIZE (AnchorFormat2, 8);
+
+struct AnchorFormat3
+{
+  friend struct Anchor;
+
+  private:
+  inline void get_anchor (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id,
+                         hb_position_t *x, hb_position_t *y) const
+  {
+      *x = _hb_16dot16_mul_trunc (context->font->x_scale, xCoordinate);
+      *y = _hb_16dot16_mul_trunc (context->font->y_scale, yCoordinate);
+
+      if (context->font->x_ppem)
+       *x += (this+xDeviceTable).get_delta (context->font->x_ppem) << 6;
+      if (context->font->y_ppem)
+       *y += (this+yDeviceTable).get_delta (context->font->y_ppem) << 6;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS2 (xDeviceTable, yDeviceTable);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 3 */
+  SHORT                xCoordinate;            /* Horizontal value--in design units */
+  SHORT                yCoordinate;            /* Vertical value--in design units */
+  OffsetTo<Device>
+               xDeviceTable;           /* Offset to Device table for X
+                                        * coordinate-- from beginning of
+                                        * Anchor table (may be NULL) */
+  OffsetTo<Device>
+               yDeviceTable;           /* Offset to Device table for Y
+                                        * coordinate-- from beginning of
+                                        * Anchor table (may be NULL) */
+};
+ASSERT_SIZE (AnchorFormat3, 10);
+
+struct Anchor
+{
+  inline void get_anchor (hb_ot_layout_context_t *context, hb_codepoint_t glyph_id,
+                         hb_position_t *x, hb_position_t *y) const
+  {
+    *x = *y = 0;
+    switch (u.format) {
+    case 1: u.format1->get_anchor (context, glyph_id, x, y); return;
+    case 2: u.format2->get_anchor (context, glyph_id, x, y); return;
+    case 3: u.format3->get_anchor (context, glyph_id, x, y); return;
+    default:                                                return;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    case 3: return u.format3->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  AnchorFormat1                format1[];
+  AnchorFormat2                format2[];
+  AnchorFormat3                format3[];
+  } u;
+};
+ASSERT_SIZE (Anchor, 2);
+
+
+struct AnchorMatrix
+{
+  inline const Anchor& get_anchor (unsigned int row, unsigned int col, unsigned int cols) const {
+    if (HB_UNLIKELY (row >= rows || col >= cols)) return Null(Anchor);
+    return this+matrix[row * cols + col];
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF, unsigned int cols) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    unsigned int count = rows * cols;
+    if (!SANITIZE_ARRAY (matrix, sizeof (matrix[0]), count)) return false;
+    for (unsigned int i = 0; i < count; i++)
+      if (!SANITIZE_THIS (matrix[i])) return false;
+    return true;
+  }
+
+  USHORT       rows;                   /* Number of rows */
+  private:
+  OffsetTo<Anchor>
+               matrix[];               /* Matrix of offsets to Anchor tables--
+                                        * from beginning of AnchorMatrix table */
+};
+ASSERT_SIZE (AnchorMatrix, 2);
+
+
+struct MarkRecord
+{
+  friend struct MarkArray;
+
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_BASE (markAnchor, base);
+  }
+
+  private:
+  USHORT       klass;                  /* Class defined for this mark */
+  OffsetTo<Anchor>
+               markAnchor;             /* Offset to Anchor table--from
+                                        * beginning of MarkArray table */
+};
+ASSERT_SIZE (MarkRecord, 4);
+
+struct MarkArray
+{
+  inline bool apply (APPLY_ARG_DEF,
+                    unsigned int mark_index, unsigned int glyph_index,
+                    const AnchorMatrix &anchors, unsigned int class_count,
+                    unsigned int glyph_pos) const
+  {
+    TRACE_APPLY ();
+    const MarkRecord &record = markRecord[mark_index];
+    unsigned int mark_class = record.klass;
+
+    const Anchor& mark_anchor = this + record.markAnchor;
+    const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count);
+
+    hb_position_t mark_x, mark_y, base_x, base_y;
+
+    mark_anchor.get_anchor (context, IN_CURGLYPH (), &mark_x, &mark_y);
+    glyph_anchor.get_anchor (context, IN_GLYPH (glyph_pos), &base_x, &base_y);
+
+    hb_internal_glyph_position_t *o = POSITION (buffer->in_pos);
+    o->x_pos     = base_x - mark_x;
+    o->y_pos     = base_y - mark_y;
+    o->x_advance = 0;
+    o->y_advance = 0;
+    o->back      = buffer->in_pos - glyph_pos;
+
+    buffer->in_pos++;
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (markRecord);
+  }
+
+  private:
+  ArrayOf<MarkRecord>
+               markRecord;     /* Array of MarkRecords--in Coverage order */
+};
+ASSERT_SIZE (MarkArray, 2);
+
+
+/* Lookups */
+
+struct SinglePosFormat1
+{
+  friend struct SinglePos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    valueFormat.apply_value (context, CONST_CHARP(this), values, CURPOSITION ());
+
+    buffer->in_pos++;
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS (coverage) &&
+          SANITIZE_MEM (values, valueFormat.get_size ());
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of subtable */
+  ValueFormat  valueFormat;            /* Defines the types of data in the
+                                        * ValueRecord */
+  ValueRecord  values;                 /* Defines positioning
+                                        * value(s)--applied to all glyphs in
+                                        * the Coverage table */
+};
+ASSERT_SIZE (SinglePosFormat1, 6);
+
+struct SinglePosFormat2
+{
+  friend struct SinglePos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    if (HB_LIKELY (index >= valueCount))
+      return false;
+
+    valueFormat.apply_value (context, CONST_CHARP(this),
+                            values + index * valueFormat.get_len (),
+                            CURPOSITION ());
+
+    buffer->in_pos++;
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS (coverage) &&
+          SANITIZE_MEM (values, valueFormat.get_size () * valueCount);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 2 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of subtable */
+  ValueFormat  valueFormat;            /* Defines the types of data in the
+                                        * ValueRecord */
+  USHORT       valueCount;             /* Number of ValueRecords */
+  ValueRecord  values;                 /* Array of ValueRecords--positioning
+                                        * values applied to glyphs */
+};
+ASSERT_SIZE (SinglePosFormat2, 8);
+
+struct SinglePos
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    case 2: return u.format2->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  SinglePosFormat1     format1[];
+  SinglePosFormat2     format2[];
+  } u;
+};
+ASSERT_SIZE (SinglePos, 2);
+
+
+struct PairValueRecord
+{
+  friend struct PairPosFormat1;
+
+  private:
+  GlyphID      secondGlyph;            /* GlyphID of second glyph in the
+                                        * pair--first glyph is listed in the
+                                        * Coverage table */
+  ValueRecord  values;                 /* Positioning data for the first glyph
+                                        * followed by for second glyph */
+};
+ASSERT_SIZE (PairValueRecord, 2);
+
+struct PairSet
+{
+  friend struct PairPosFormat1;
+
+  inline bool sanitize (SANITIZE_ARG_DEF, unsigned int format_len) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    unsigned int count = (1 + format_len) * len;
+    return SANITIZE_MEM (array, sizeof (array[0]) * count);
+  }
+
+  private:
+  USHORT       len;                    /* Number of PairValueRecords */
+  PairValueRecord
+               array[];                /* Array of PairValueRecords--ordered
+                                        * by GlyphID of the second glyph */
+};
+ASSERT_SIZE (PairSet, 2);
+
+struct PairPosFormat1
+{
+  friend struct PairPos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int end = MIN (buffer->in_length, buffer->in_pos + context_length);
+    if (HB_UNLIKELY (buffer->in_pos + 2 > end))
+      return false;
+
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    unsigned int j = buffer->in_pos + 1;
+    while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), lookup_flag, NULL))
+    {
+      if (HB_UNLIKELY (j == end))
+       return false;
+      j++;
+    }
+
+    const PairSet &pair_set = this+pairSet[index];
+
+    unsigned int len1 = valueFormat1.get_len ();
+    unsigned int len2 = valueFormat2.get_len ();
+    unsigned int record_len = 1 + len1 + len2;
+
+    unsigned int count = pair_set.len;
+    const PairValueRecord *record = pair_set.array;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      if (IN_GLYPH (j) == record->secondGlyph)
+      {
+       valueFormat1.apply_value (context, CONST_CHARP(this), record->values, CURPOSITION ());
+       valueFormat2.apply_value (context, CONST_CHARP(this), record->values + len1, POSITION (j));
+       if (len2)
+         j++;
+       buffer->in_pos = j;
+       return true;
+      }
+      record += record_len;
+    }
+
+    return false;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS (coverage) &&
+          pairSet.sanitize (SANITIZE_ARG, CONST_CHARP(this),
+                            valueFormat1.get_len () + valueFormat2.get_len ());
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of subtable */
+  ValueFormat  valueFormat1;           /* Defines the types of data in
+                                        * ValueRecord1--for the first glyph
+                                        * in the pair--may be zero (0) */
+  ValueFormat  valueFormat2;           /* Defines the types of data in
+                                        * ValueRecord2--for the second glyph
+                                        * in the pair--may be zero (0) */
+  OffsetArrayOf<PairSet>
+               pairSet;                /* Array of PairSet tables
+                                        * ordered by Coverage Index */
+};
+ASSERT_SIZE (PairPosFormat1, 10);
+
+struct PairPosFormat2
+{
+  friend struct PairPos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int end = MIN (buffer->in_length, buffer->in_pos + context_length);
+    if (HB_UNLIKELY (buffer->in_pos + 2 > end))
+      return false;
+
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    unsigned int j = buffer->in_pos + 1;
+    while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), lookup_flag, NULL))
+    {
+      if (HB_UNLIKELY (j == end))
+       return false;
+      j++;
+    }
+
+    unsigned int len1 = valueFormat1.get_len ();
+    unsigned int len2 = valueFormat2.get_len ();
+    unsigned int record_len = len1 + len2;
+
+    unsigned int klass1 = (this+classDef1) (IN_CURGLYPH ());
+    unsigned int klass2 = (this+classDef2) (IN_GLYPH (j));
+    if (HB_UNLIKELY (klass1 >= class1Count || klass2 >= class2Count))
+      return false;
+
+    const Value *v = values + record_len * (klass1 * class2Count + klass2);
+    valueFormat1.apply_value (context, CONST_CHARP(this), v, CURPOSITION ());
+    valueFormat2.apply_value (context, CONST_CHARP(this), v + len1, POSITION (j));
+
+    if (len2)
+      j++;
+    buffer->in_pos = j;
+
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!(SANITIZE_SELF () && SANITIZE_THIS (coverage) &&
+         SANITIZE_THIS2 (classDef1, classDef2))) return false;
+
+    unsigned int record_size =valueFormat1.get_size () + valueFormat2.get_size ();
+    unsigned int len = class1Count * class2Count;
+    return SANITIZE_ARRAY (values, record_size, len);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 2 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of subtable */
+  ValueFormat  valueFormat1;           /* ValueRecord definition--for the
+                                        * first glyph of the pair--may be zero
+                                        * (0) */
+  ValueFormat  valueFormat2;           /* ValueRecord definition--for the
+                                        * second glyph of the pair--may be
+                                        * zero (0) */
+  OffsetTo<ClassDef>
+               classDef1;              /* Offset to ClassDef table--from
+                                        * beginning of PairPos subtable--for
+                                        * the first glyph of the pair */
+  OffsetTo<ClassDef>
+               classDef2;              /* Offset to ClassDef table--from
+                                        * beginning of PairPos subtable--for
+                                        * the second glyph of the pair */
+  USHORT       class1Count;            /* Number of classes in ClassDef1
+                                        * table--includes Class0 */
+  USHORT       class2Count;            /* Number of classes in ClassDef2
+                                        * table--includes Class0 */
+  ValueRecord  values;                 /* Matrix of value pairs:
+                                        * class1-major, class2-minor,
+                                        * Each entry has value1 and value2 */
+};
+ASSERT_SIZE (PairPosFormat2, 16);
+
+struct PairPos
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    case 2: return u.format2->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  PairPosFormat1       format1[];
+  PairPosFormat2       format2[];
+  } u;
+};
+ASSERT_SIZE (PairPos, 2);
+
+
+struct EntryExitRecord
+{
+  inline bool sanitize (SANITIZE_ARG_DEF, const void *base) {
+    TRACE_SANITIZE ();
+    return SANITIZE_BASE2 (entryAnchor, exitAnchor, base);
+  }
+
+  OffsetTo<Anchor>
+               entryAnchor;            /* Offset to EntryAnchor table--from
+                                        * beginning of CursivePos
+                                        * subtable--may be NULL */
+  OffsetTo<Anchor>
+               exitAnchor;             /* Offset to ExitAnchor table--from
+                                        * beginning of CursivePos
+                                        * subtable--may be NULL */
+};
+ASSERT_SIZE (EntryExitRecord, 4);
+
+struct CursivePosFormat1
+{
+  friend struct CursivePos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    /* Now comes the messiest part of the whole OpenType
+       specification.  At first glance, cursive connections seem easy
+       to understand, but there are pitfalls!  The reason is that
+       the specs don't mention how to compute the advance values
+       resp. glyph offsets.  I was told it would be an omission, to
+       be fixed in the next OpenType version...  Again many thanks to
+       Andrei Burago <andreib@microsoft.com> for clarifications.
+
+       Consider the following example:
+
+                       |  xadv1    |
+                        +---------+
+                        |         |
+                  +-----+--+ 1    |
+                  |     | .|      |
+                  |    0+--+------+
+                  |   2    |
+                  |        |
+                 0+--------+
+                 |  xadv2   |
+
+        glyph1: advance width = 12
+                anchor point = (3,1)
+
+        glyph2: advance width = 11
+                anchor point = (9,4)
+
+        LSB is 1 for both glyphs (so the boxes drawn above are glyph
+        bboxes).  Writing direction is R2L; `0' denotes the glyph's
+        coordinate origin.
+
+       Now the surprising part: The advance width of the *left* glyph
+       (resp. of the *bottom* glyph) will be modified, no matter
+       whether the writing direction is L2R or R2L (resp. T2B or
+       B2T)!  This assymetry is caused by the fact that the glyph's
+       coordinate origin is always the lower left corner for all
+       writing directions.
+
+       Continuing the above example, we can compute the new
+       (horizontal) advance width of glyph2 as
+
+        9 - 3 = 6  ,
+
+       and the new vertical offset of glyph2 as
+
+        1 - 4 = -3  .
+
+
+       Vertical writing direction is far more complicated:
+
+       a) Assuming that we recompute the advance height of the lower glyph:
+
+                                   --
+                        +---------+
+               --       |         |
+                  +-----+--+ 1    | yadv1
+                  |     | .|      |
+            yadv2 |    0+--+------+        -- BSB1  --
+                  |   2    |       --      --        y_offset
+                  |        |
+     BSB2 --      0+--------+                        --
+         --    --
+
+        glyph1: advance height = 6
+                anchor point = (3,1)
+
+        glyph2: advance height = 7
+                anchor point = (9,4)
+
+        TSB is 1 for both glyphs; writing direction is T2B.
+
+
+          BSB1     = yadv1 - (TSB1 + ymax1)
+          BSB2     = yadv2 - (TSB2 + ymax2)
+          y_offset = y2 - y1
+
+        vertical advance width of glyph2
+          = y_offset + BSB2 - BSB1
+          = (y2 - y1) + (yadv2 - (TSB2 + ymax2)) - (yadv1 - (TSB1 + ymax1))
+          = y2 - y1 + yadv2 - TSB2 - ymax2 - (yadv1 - TSB1 - ymax1)
+          = y2 - y1 + yadv2 - TSB2 - ymax2 - yadv1 + TSB1 + ymax1
+
+
+       b) Assuming that we recompute the advance height of the upper glyph:
+
+                                   --      --
+                        +---------+        -- TSB1
+         --    --       |         |
+     TSB2 --       +-----+--+ 1    | yadv1   ymax1
+                  |     | .|      |
+            yadv2 |    0+--+------+        --       --
+      ymax2        |   2    |       --                y_offset
+                  |        |
+         --      0+--------+                        --
+               --
+
+        glyph1: advance height = 6
+                anchor point = (3,1)
+
+        glyph2: advance height = 7
+                anchor point = (9,4)
+
+        TSB is 1 for both glyphs; writing direction is T2B.
+
+        y_offset = y2 - y1
+
+        vertical advance width of glyph2
+          = TSB1 + ymax1 + y_offset - (TSB2 + ymax2)
+          = TSB1 + ymax1 + y2 - y1 - TSB2 - ymax2
+
+
+       Comparing a) with b) shows that b) is easier to compute.  I'll wait
+       for a reply from Andrei to see what should really be implemented...
+
+       Since horizontal advance widths or vertical advance heights
+       can be used alone but not together, no ambiguity occurs.        */
+
+    struct hb_ot_layout_context_t::info_t::gpos_t *gpi = &context->info.gpos;
+    hb_codepoint_t last_pos = gpi->last;
+    gpi->last = HB_OT_LAYOUT_GPOS_NO_LAST;
+
+    /* We don't handle mark glyphs here. */
+    if (property == HB_OT_LAYOUT_GLYPH_CLASS_MARK)
+      return false;
+
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const EntryExitRecord &record = entryExitRecord[index];
+
+    if (last_pos == HB_OT_LAYOUT_GPOS_NO_LAST || !record.entryAnchor)
+      goto end;
+
+    hb_position_t entry_x, entry_y;
+    (this+record.entryAnchor).get_anchor (context, IN_CURGLYPH (), &entry_x, &entry_y);
+
+    /* TODO vertical */
+
+    if (buffer->direction == HB_DIRECTION_RTL)
+    {
+      POSITION (buffer->in_pos)->x_advance   = entry_x - gpi->anchor_x;
+      POSITION (buffer->in_pos)->new_advance = TRUE;
+    }
+    else
+    {
+      POSITION (last_pos)->x_advance   = gpi->anchor_x - entry_x;
+      POSITION (last_pos)->new_advance = TRUE;
+    }
+
+    if  (lookup_flag & LookupFlag::RightToLeft)
+    {
+      POSITION (last_pos)->cursive_chain = last_pos - buffer->in_pos;
+      POSITION (last_pos)->y_pos = entry_y - gpi->anchor_y;
+    }
+    else
+    {
+      POSITION (buffer->in_pos)->cursive_chain = buffer->in_pos - last_pos;
+      POSITION (buffer->in_pos)->y_pos = gpi->anchor_y - entry_y;
+    }
+
+  end:
+    if (record.exitAnchor)
+    {
+      gpi->last = buffer->in_pos;
+      (this+record.exitAnchor).get_anchor (context, IN_CURGLYPH (), &gpi->anchor_x, &gpi->anchor_y);
+    }
+
+    buffer->in_pos++;
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, entryExitRecord);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of subtable */
+  ArrayOf<EntryExitRecord>
+               entryExitRecord;        /* Array of EntryExit records--in
+                                        * Coverage Index order */
+};
+ASSERT_SIZE (CursivePosFormat1, 6);
+
+struct CursivePos
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  CursivePosFormat1    format1[];
+  } u;
+};
+ASSERT_SIZE (CursivePos, 2);
+
+
+typedef AnchorMatrix BaseArray;                /* base-major--
+                                        * in order of BaseCoverage Index--,
+                                        * mark-minor--
+                                        * ordered by class--zero-based. */
+ASSERT_SIZE (BaseArray, 2);
+
+struct MarkBasePosFormat1
+{
+  friend struct MarkBasePos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int mark_index = (this+markCoverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (mark_index == NOT_COVERED))
+      return false;
+
+    /* now we search backwards for a non-mark glyph */
+    unsigned int j = buffer->in_pos;
+    do
+    {
+      if (HB_UNLIKELY (!j))
+       return false;
+      j--;
+    } while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), LookupFlag::IgnoreMarks, &property));
+
+#if 0
+    /* The following assertion is too strong. */
+    if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH))
+      return false;
+#endif
+
+    unsigned int base_index = (this+baseCoverage) (IN_GLYPH (j));
+    if (base_index == NOT_COVERED)
+      return false;
+
+    return (this+markArray).apply (APPLY_ARG, mark_index, base_index, this+baseArray, classCount, j);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS2 (markCoverage, baseCoverage) &&
+          SANITIZE_THIS (markArray) && baseArray.sanitize (SANITIZE_ARG, CONST_CHARP(this), classCount);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               markCoverage;           /* Offset to MarkCoverage table--from
+                                        * beginning of MarkBasePos subtable */
+  OffsetTo<Coverage>
+               baseCoverage;           /* Offset to BaseCoverage table--from
+                                        * beginning of MarkBasePos subtable */
+  USHORT       classCount;             /* Number of classes defined for marks */
+  OffsetTo<MarkArray>
+               markArray;              /* Offset to MarkArray table--from
+                                        * beginning of MarkBasePos subtable */
+  OffsetTo<BaseArray>
+               baseArray;              /* Offset to BaseArray table--from
+                                        * beginning of MarkBasePos subtable */
+};
+ASSERT_SIZE (MarkBasePosFormat1, 12);
+
+struct MarkBasePos
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  MarkBasePosFormat1   format1[];
+  } u;
+};
+ASSERT_SIZE (MarkBasePos, 2);
+
+
+typedef AnchorMatrix LigatureAttach;   /* component-major--
+                                        * in order of writing direction--,
+                                        * mark-minor--
+                                        * ordered by class--zero-based. */
+ASSERT_SIZE (LigatureAttach, 2);
+
+typedef OffsetListOf<LigatureAttach> LigatureArray;
+                                       /* Array of LigatureAttach
+                                        * tables ordered by
+                                        * LigatureCoverage Index */
+ASSERT_SIZE (LigatureArray, 2);
+
+struct MarkLigPosFormat1
+{
+  friend struct MarkLigPos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int mark_index = (this+markCoverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (mark_index == NOT_COVERED))
+      return false;
+
+    /* now we search backwards for a non-mark glyph */
+    unsigned int j = buffer->in_pos;
+    do
+    {
+      if (HB_UNLIKELY (!j))
+       return false;
+      j--;
+    } while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), LookupFlag::IgnoreMarks, &property));
+
+#if 0
+    /* The following assertion is too strong. */
+    if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE))
+      return false;
+#endif
+
+    unsigned int lig_index = (this+ligatureCoverage) (IN_GLYPH (j));
+    if (lig_index == NOT_COVERED)
+      return false;
+
+    const LigatureArray& lig_array = this+ligatureArray;
+    const LigatureAttach& lig_attach = lig_array[lig_index];
+
+    /* Find component to attach to */
+    unsigned int comp_count = lig_attach.rows;
+    if (HB_UNLIKELY (!comp_count))
+      return false;
+    unsigned int comp_index;
+    /* We must now check whether the ligature ID of the current mark glyph
+     * is identical to the ligature ID of the found ligature.  If yes, we
+     * can directly use the component index.  If not, we attach the mark
+     * glyph to the last component of the ligature. */
+    if (IN_LIGID (j) == IN_LIGID (buffer->in_pos))
+    {
+      comp_index = IN_COMPONENT (buffer->in_pos);
+      if (comp_index >= comp_count)
+       comp_index = comp_count - 1;
+    }
+    else
+      comp_index = comp_count - 1;
+
+    return (this+markArray).apply (APPLY_ARG, mark_index, comp_index, lig_attach, classCount, j);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () &&
+          SANITIZE_THIS2 (markCoverage, ligatureCoverage) &&
+          SANITIZE_THIS (markArray) && ligatureArray.sanitize (SANITIZE_ARG, CONST_CHARP(this), classCount);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               markCoverage;           /* Offset to Mark Coverage table--from
+                                        * beginning of MarkLigPos subtable */
+  OffsetTo<Coverage>
+               ligatureCoverage;       /* Offset to Ligature Coverage
+                                        * table--from beginning of MarkLigPos
+                                        * subtable */
+  USHORT       classCount;             /* Number of defined mark classes */
+  OffsetTo<MarkArray>
+               markArray;              /* Offset to MarkArray table--from
+                                        * beginning of MarkLigPos subtable */
+  OffsetTo<LigatureArray>
+               ligatureArray;          /* Offset to LigatureArray table--from
+                                        * beginning of MarkLigPos subtable */
+};
+ASSERT_SIZE (MarkLigPosFormat1, 12);
+
+struct MarkLigPos
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  MarkLigPosFormat1    format1[];
+  } u;
+};
+ASSERT_SIZE (MarkLigPos, 2);
+
+
+typedef AnchorMatrix Mark2Array;       /* mark2-major--
+                                        * in order of Mark2Coverage Index--,
+                                        * mark1-minor--
+                                        * ordered by class--zero-based. */
+ASSERT_SIZE (Mark2Array, 2);
+
+struct MarkMarkPosFormat1
+{
+  friend struct MarkMarkPos;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    unsigned int mark1_index = (this+mark1Coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (mark1_index == NOT_COVERED))
+      return false;
+
+    /* now we search backwards for a suitable mark glyph until a non-mark glyph */
+    unsigned int j = buffer->in_pos;
+    do
+    {
+      if (HB_UNLIKELY (!j))
+       return false;
+      j--;
+    } while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), lookup_flag, &property));
+
+    if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_MARK))
+      return false;
+
+    /* Two marks match only if they belong to the same base, or same component
+     * of the same ligature. */
+    if (IN_LIGID (j) != IN_LIGID (buffer->in_pos) ||
+        IN_COMPONENT (j) != IN_COMPONENT (buffer->in_pos))
+      return false;
+
+    unsigned int mark2_index = (this+mark2Coverage) (IN_GLYPH (j));
+    if (mark2_index == NOT_COVERED)
+      return false;
+
+    return (this+mark1Array).apply (APPLY_ARG, mark1_index, mark2_index, this+mark2Array, classCount, j);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF () && SANITIZE_THIS2 (mark1Coverage, mark2Coverage) &&
+          SANITIZE_THIS (mark1Array) && mark2Array.sanitize (SANITIZE_ARG, CONST_CHARP(this), classCount);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               mark1Coverage;          /* Offset to Combining Mark1 Coverage
+                                        * table--from beginning of MarkMarkPos
+                                        * subtable */
+  OffsetTo<Coverage>
+               mark2Coverage;          /* Offset to Combining Mark2 Coverage
+                                        * table--from beginning of MarkMarkPos
+                                        * subtable */
+  USHORT       classCount;             /* Number of defined mark classes */
+  OffsetTo<MarkArray>
+               mark1Array;             /* Offset to Mark1Array table--from
+                                        * beginning of MarkMarkPos subtable */
+  OffsetTo<Mark2Array>
+               mark2Array;             /* Offset to Mark2Array table--from
+                                        * beginning of MarkMarkPos subtable */
+};
+ASSERT_SIZE (MarkMarkPosFormat1, 12);
+
+struct MarkMarkPos
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  MarkMarkPosFormat1   format1[];
+  } u;
+};
+ASSERT_SIZE (MarkMarkPos, 2);
+
+
+static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index);
+
+struct ContextPos : Context
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    return Context::apply (APPLY_ARG, position_lookup);
+  }
+};
+ASSERT_SIZE (ContextPos, 2);
+
+struct ChainContextPos : ChainContext
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    return ChainContext::apply (APPLY_ARG, position_lookup);
+  }
+};
+ASSERT_SIZE (ChainContextPos, 2);
+
+
+struct ExtensionPos : Extension
+{
+  friend struct PosLookupSubTable;
+
+  private:
+  inline const struct PosLookupSubTable& get_subtable (void) const
+  { return CONST_CAST (PosLookupSubTable, Extension::get_subtable (), 0); }
+
+  inline bool apply (APPLY_ARG_DEF) const;
+
+  inline bool sanitize (SANITIZE_ARG_DEF);
+};
+ASSERT_SIZE (ExtensionPos, 2);
+
+
+
+/*
+ * PosLookup
+ */
+
+
+struct PosLookupSubTable
+{
+  friend struct PosLookup;
+
+  enum {
+    Single             = 1,
+    Pair               = 2,
+    Cursive            = 3,
+    MarkBase           = 4,
+    MarkLig            = 5,
+    MarkMark           = 6,
+    Context            = 7,
+    ChainContext       = 8,
+    Extension          = 9
+  };
+
+  inline bool apply (APPLY_ARG_DEF, unsigned int lookup_type) const
+  {
+    TRACE_APPLY ();
+    switch (lookup_type) {
+    case Single:               return u.single->apply (APPLY_ARG);
+    case Pair:                 return u.pair->apply (APPLY_ARG);
+    case Cursive:              return u.cursive->apply (APPLY_ARG);
+    case MarkBase:             return u.markBase->apply (APPLY_ARG);
+    case MarkLig:              return u.markLig->apply (APPLY_ARG);
+    case MarkMark:             return u.markMark->apply (APPLY_ARG);
+    case Context:              return u.context->apply (APPLY_ARG);
+    case ChainContext:         return u.chainContext->apply (APPLY_ARG);
+    case Extension:            return u.extension->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case Single:               return u.single->sanitize (SANITIZE_ARG);
+    case Pair:                 return u.pair->sanitize (SANITIZE_ARG);
+    case Cursive:              return u.cursive->sanitize (SANITIZE_ARG);
+    case MarkBase:             return u.markBase->sanitize (SANITIZE_ARG);
+    case MarkLig:              return u.markLig->sanitize (SANITIZE_ARG);
+    case MarkMark:             return u.markMark->sanitize (SANITIZE_ARG);
+    case Context:              return u.context->sanitize (SANITIZE_ARG);
+    case ChainContext:         return u.chainContext->sanitize (SANITIZE_ARG);
+    case Extension:            return u.extension->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;
+  SinglePos            single[];
+  PairPos              pair[];
+  CursivePos           cursive[];
+  MarkBasePos          markBase[];
+  MarkLigPos           markLig[];
+  MarkMarkPos          markMark[];
+  ContextPos           context[];
+  ChainContextPos      chainContext[];
+  ExtensionPos         extension[];
+  } u;
+};
+ASSERT_SIZE (PosLookupSubTable, 2);
+
+
+struct PosLookup : Lookup
+{
+  inline const PosLookupSubTable& get_subtable (unsigned int i) const
+  { return (const PosLookupSubTable&) Lookup::get_subtable (i); }
+
+  /* Like get_type(), but looks through extension lookups.
+   * Never returns Extension */
+  inline unsigned int get_effective_type (void) const
+  {
+    unsigned int type = get_type ();
+
+    if (HB_UNLIKELY (type == PosLookupSubTable::Extension))
+    {
+      unsigned int count = get_subtable_count ();
+      type = get_subtable(0).u.extension->get_type ();
+      /* The spec says all subtables should have the same type.
+       * This is specially important if one has a reverse type! */
+      for (unsigned int i = 1; i < count; i++)
+        if (get_subtable(i).u.extension->get_type () != type)
+         return 0;
+    }
+
+    return type;
+  }
+
+  inline bool apply_once (hb_ot_layout_context_t *context,
+                         hb_buffer_t    *buffer,
+                         unsigned int    context_length,
+                         unsigned int    nesting_level_left) const
+  {
+    unsigned int lookup_type = get_type ();
+    unsigned int lookup_flag = get_flag ();
+    unsigned int property;
+
+    if (!_hb_ot_layout_check_glyph_property (context->face, IN_CURINFO (), lookup_flag, &property))
+      return false;
+
+    for (unsigned int i = 0; i < get_subtable_count (); i++)
+      if (get_subtable (i).apply (APPLY_ARG_INIT, lookup_type))
+       return true;
+
+    return false;
+  }
+
+   inline bool apply_string (hb_ot_layout_context_t *context,
+                            hb_buffer_t *buffer,
+                            hb_mask_t    mask) const
+  {
+    bool ret = false;
+
+    if (HB_UNLIKELY (!buffer->in_length))
+      return false;
+
+    context->info.gpos.last = HB_OT_LAYOUT_GPOS_NO_LAST; /* no last valid glyph for cursive pos. */
+
+    buffer->in_pos = 0;
+    while (buffer->in_pos < buffer->in_length)
+    {
+      bool done;
+      if (~IN_MASK (buffer->in_pos) & mask)
+      {
+         done = apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL);
+         ret |= done;
+      }
+      else
+      {
+          done = false;
+         /* Contrary to properties defined in GDEF, user-defined properties
+            will always stop a possible cursive positioning.                */
+         context->info.gpos.last = HB_OT_LAYOUT_GPOS_NO_LAST;
+      }
+
+      if (!done)
+       buffer->in_pos++;
+    }
+
+    return ret;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!Lookup::sanitize (SANITIZE_ARG)) return false;
+    OffsetArrayOf<PosLookupSubTable> &list = (OffsetArrayOf<PosLookupSubTable> &) subTable;
+    return SANITIZE_THIS (list);
+  }
+};
+ASSERT_SIZE (PosLookup, 6);
+
+typedef OffsetListOf<PosLookup> PosLookupList;
+ASSERT_SIZE (PosLookupList, 2);
+
+/*
+ * GPOS
+ */
+
+struct GPOS : GSUBGPOS
+{
+  static const hb_tag_t Tag    = HB_OT_TAG_GPOS;
+
+  static inline const GPOS& get_for_data (const char *data)
+  { return (const GPOS&) GSUBGPOS::get_for_data (data); }
+
+  inline const PosLookup& get_lookup (unsigned int i) const
+  { return (const PosLookup&) GSUBGPOS::get_lookup (i); }
+
+  inline bool position_lookup (hb_ot_layout_context_t *context,
+                              hb_buffer_t  *buffer,
+                              unsigned int  lookup_index,
+                              hb_mask_t     mask) const
+  { return get_lookup (lookup_index).apply_string (context, buffer, mask); }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!GSUBGPOS::sanitize (SANITIZE_ARG)) return false;
+    OffsetTo<PosLookupList> &list = CAST(OffsetTo<PosLookupList>, lookupList, 0);
+    return SANITIZE_THIS (list);
+  }
+};
+ASSERT_SIZE (GPOS, 10);
+
+
+/* Out-of-class implementation for methods recursing */
+
+inline bool ExtensionPos::apply (APPLY_ARG_DEF) const
+{
+  TRACE_APPLY ();
+  unsigned int lookup_type = get_type ();
+
+  if (HB_UNLIKELY (lookup_type == PosLookupSubTable::Extension))
+    return false;
+
+  return get_subtable ().apply (APPLY_ARG, lookup_type);
+}
+
+inline bool ExtensionPos::sanitize (SANITIZE_ARG_DEF)
+{
+  TRACE_SANITIZE ();
+  return Extension::sanitize (SANITIZE_ARG) &&
+        (&(Extension::get_subtable ()) == &Null(LookupSubTable) ||
+         get_type () == PosLookupSubTable::Extension ||
+         DECONST_CAST (PosLookupSubTable, get_subtable (), 0).sanitize (SANITIZE_ARG));
+}
+
+static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
+{
+  const GPOS &gpos = *(context->face->ot_layout.gpos);
+  const PosLookup &l = gpos.get_lookup (lookup_index);
+
+  if (HB_UNLIKELY (nesting_level_left == 0))
+    return false;
+  nesting_level_left--;
+
+  if (HB_UNLIKELY (context_length < 1))
+    return false;
+
+  return l.apply_once (context, buffer, context_length, nesting_level_left);
+}
+
+
+#endif /* HB_OT_LAYOUT_GPOS_PRIVATE_HH */
diff --git a/pango/opentype/hb-ot-layout-gsub-private.hh b/pango/opentype/hb-ot-layout-gsub-private.hh
new file mode 100755 (executable)
index 0000000..bd29cf7
--- /dev/null
@@ -0,0 +1,923 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_GSUB_PRIVATE_HH
+#define HB_OT_LAYOUT_GSUB_PRIVATE_HH
+
+#include "hb-ot-layout-gsubgpos-private.hh"
+
+
+struct SingleSubstFormat1
+{
+  friend struct SingleSubst;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    hb_codepoint_t glyph_id = IN_CURGLYPH ();
+    unsigned int index = (this+coverage) (glyph_id);
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    glyph_id += deltaGlyphID;
+    _hb_buffer_replace_glyph (buffer, glyph_id);
+
+    /* We inherit the old glyph class to the substituted glyph */
+    if (_hb_ot_layout_has_new_glyph_classes (context->face))
+      _hb_ot_layout_set_glyph_property (context->face, glyph_id, property);
+
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (coverage) && SANITIZE (deltaGlyphID);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of Substitution table */
+  SHORT                deltaGlyphID;           /* Add to original GlyphID to get
+                                        * substitute GlyphID */
+};
+ASSERT_SIZE (SingleSubstFormat1, 6);
+
+struct SingleSubstFormat2
+{
+  friend struct SingleSubst;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    hb_codepoint_t glyph_id = IN_CURGLYPH ();
+    unsigned int index = (this+coverage) (glyph_id);
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    if (HB_UNLIKELY (index >= substitute.len))
+      return false;
+
+    glyph_id = substitute[index];
+    _hb_buffer_replace_glyph (buffer, glyph_id);
+
+    /* We inherit the old glyph class to the substituted glyph */
+    if (_hb_ot_layout_has_new_glyph_classes (context->face))
+      _hb_ot_layout_set_glyph_property (context->face, glyph_id, property);
+
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (coverage) && SANITIZE (substitute);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 2 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of Substitution table */
+  ArrayOf<GlyphID>
+               substitute;             /* Array of substitute
+                                        * GlyphIDs--ordered by Coverage Index */
+};
+ASSERT_SIZE (SingleSubstFormat2, 6);
+
+struct SingleSubst
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    case 2: return u.format2->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  SingleSubstFormat1   format1[];
+  SingleSubstFormat2   format2[];
+  } u;
+};
+ASSERT_SIZE (SingleSubst, 2);
+
+
+struct Sequence
+{
+  friend struct MultipleSubstFormat1;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    if (HB_UNLIKELY (!substitute.len))
+      return false;
+
+    _hb_buffer_add_output_glyphs (buffer, 1,
+                                 substitute.len, (const uint16_t *) substitute.array,
+                                 0xFFFF, 0xFFFF);
+
+    /* This is a guess only ... */
+    if (_hb_ot_layout_has_new_glyph_classes (context->face))
+    {
+      if (property == HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE)
+        property = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH;
+
+      unsigned int count = substitute.len;
+      for (unsigned int n = 0; n < count; n++)
+       _hb_ot_layout_set_glyph_property (context->face, substitute[n], property);
+    }
+
+    return true;
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE (substitute);
+  }
+
+  private:
+  ArrayOf<GlyphID>
+               substitute;             /* String of GlyphIDs to substitute */
+};
+ASSERT_SIZE (Sequence, 2);
+
+struct MultipleSubstFormat1
+{
+  friend struct MultipleSubst;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    return (this+sequence[index]).apply (APPLY_ARG);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, sequence);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of Substitution table */
+  OffsetArrayOf<Sequence>
+               sequence;               /* Array of Sequence tables
+                                        * ordered by Coverage Index */
+};
+ASSERT_SIZE (MultipleSubstFormat1, 6);
+
+struct MultipleSubst
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  MultipleSubstFormat1 format1[];
+  } u;
+};
+ASSERT_SIZE (MultipleSubst, 2);
+
+
+typedef ArrayOf<GlyphID> AlternateSet; /* Array of alternate GlyphIDs--in
+                                        * arbitrary order */
+ASSERT_SIZE (AlternateSet, 2);
+
+struct AlternateSubstFormat1
+{
+  friend struct AlternateSubst;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    hb_codepoint_t glyph_id = IN_CURGLYPH ();
+
+    unsigned int index = (this+coverage) (glyph_id);
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const AlternateSet &alt_set = this+alternateSet[index];
+
+    if (HB_UNLIKELY (!alt_set.len))
+      return false;
+
+    unsigned int alt_index = 0;
+
+    /* XXX callback to user to choose alternate
+    if (context->face->altfunc)
+      alt_index = (context->face->altfunc)(context->layout, buffer,
+                                   buffer->out_pos, glyph_id,
+                                   alt_set.len, alt_set.array);
+                                  */
+
+    if (HB_UNLIKELY (alt_index >= alt_set.len))
+      return false;
+
+    glyph_id = alt_set[alt_index];
+
+    _hb_buffer_replace_glyph (buffer, glyph_id);
+
+    /* We inherit the old glyph class to the substituted glyph */
+    if (_hb_ot_layout_has_new_glyph_classes (context->face))
+      _hb_ot_layout_set_glyph_property (context->face, glyph_id, property);
+
+    return true;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, alternateSet);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of Substitution table */
+  OffsetArrayOf<AlternateSet>
+               alternateSet;           /* Array of AlternateSet tables
+                                        * ordered by Coverage Index */
+};
+ASSERT_SIZE (AlternateSubstFormat1, 6);
+
+struct AlternateSubst
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  AlternateSubstFormat1        format1[];
+  } u;
+};
+ASSERT_SIZE (AlternateSubst, 2);
+
+
+struct Ligature
+{
+  friend struct LigatureSet;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, bool is_mark) const
+  {
+    TRACE_APPLY ();
+    unsigned int i, j;
+    unsigned int count = component.len;
+    unsigned int end = MIN (buffer->in_length, buffer->in_pos + context_length);
+    if (HB_UNLIKELY (buffer->in_pos + count > end))
+      return false;
+
+    for (i = 1, j = buffer->in_pos + 1; i < count; i++, j++)
+    {
+      while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), lookup_flag, &property))
+      {
+       if (HB_UNLIKELY (j + count - i == end))
+         return false;
+       j++;
+      }
+
+      if (!(property & HB_OT_LAYOUT_GLYPH_CLASS_MARK))
+       is_mark = FALSE;
+
+      if (HB_LIKELY (IN_GLYPH (j) != component[i]))
+        return false;
+    }
+    /* This is just a guess ... */
+    if (_hb_ot_layout_has_new_glyph_classes (context->face))
+      _hb_ot_layout_set_glyph_class (context->face, ligGlyph,
+                                    is_mark ? HB_OT_LAYOUT_GLYPH_CLASS_MARK
+                                            : HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE);
+
+    if (j == buffer->in_pos + i) /* No input glyphs skipped */
+      /* We don't use a new ligature ID if there are no skipped
+        glyphs and the ligature already has an ID. */
+      _hb_buffer_add_output_glyphs (buffer, i,
+                                   1, (const uint16_t *) &ligGlyph,
+                                   0xFFFF,
+                                   IN_LIGID (buffer->in_pos) ?
+                                   0xFFFF : _hb_buffer_allocate_lig_id (buffer));
+    else
+    {
+      unsigned int lig_id = _hb_buffer_allocate_lig_id (buffer);
+      _hb_buffer_add_output_glyph (buffer, ligGlyph, 0xFFFF, lig_id);
+
+      /* Now we must do a second loop to copy the skipped glyphs to
+        `out' and assign component values to it.  We start with the
+        glyph after the first component.  Glyphs between component
+        i and i+1 belong to component i.  Together with the lig_id
+        value it is later possible to check whether a specific
+        component value really belongs to a given ligature. */
+
+      for ( i = 1; i < count; i++ )
+      {
+       while (_hb_ot_layout_skip_mark (context->face, IN_CURINFO (), lookup_flag, NULL))
+         _hb_buffer_add_output_glyph (buffer, IN_CURGLYPH (), i - 1, lig_id);
+
+       (buffer->in_pos)++;
+      }
+
+      /* TODO We should possibly reassign lig_id and component for any
+       * components of a previous ligature that s now being removed as part of
+       * this ligature. */
+    }
+
+    return true;
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE2 (ligGlyph, component);
+  }
+
+  private:
+  GlyphID      ligGlyph;               /* GlyphID of ligature to substitute */
+  HeadlessArrayOf<GlyphID>
+               component;              /* Array of component GlyphIDs--start
+                                        * with the second  component--ordered
+                                        * in writing direction */
+};
+ASSERT_SIZE (Ligature, 4);
+
+struct LigatureSet
+{
+  friend struct LigatureSubstFormat1;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, bool is_mark) const
+  {
+    TRACE_APPLY ();
+    unsigned int num_ligs = ligature.len;
+    for (unsigned int i = 0; i < num_ligs; i++)
+    {
+      const Ligature &lig = this+ligature[i];
+      if (lig.apply (APPLY_ARG, is_mark))
+        return true;
+    }
+
+    return false;
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (ligature);
+  }
+
+  private:
+  OffsetArrayOf<Ligature>
+               ligature;               /* Array LigatureSet tables
+                                        * ordered by preference */
+};
+ASSERT_SIZE (LigatureSet, 2);
+
+struct LigatureSubstFormat1
+{
+  friend struct LigatureSubst;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    hb_codepoint_t glyph_id = IN_CURGLYPH ();
+
+    bool first_is_mark = !!(property & HB_OT_LAYOUT_GLYPH_CLASS_MARK);
+
+    unsigned int index = (this+coverage) (glyph_id);
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const LigatureSet &lig_set = this+ligatureSet[index];
+    return lig_set.apply (APPLY_ARG, first_is_mark);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, ligatureSet);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of Substitution table */
+  OffsetArrayOf<LigatureSet>
+               ligatureSet;            /* Array LigatureSet tables
+                                        * ordered by Coverage Index */
+};
+ASSERT_SIZE (LigatureSubstFormat1, 6);
+
+struct LigatureSubst
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  LigatureSubstFormat1 format1[];
+  } u;
+};
+ASSERT_SIZE (LigatureSubst, 2);
+
+
+
+static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index);
+
+struct ContextSubst : Context
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    return Context::apply (APPLY_ARG, substitute_lookup);
+  }
+};
+ASSERT_SIZE (ContextSubst, 2);
+
+struct ChainContextSubst : ChainContext
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    return ChainContext::apply (APPLY_ARG, substitute_lookup);
+  }
+};
+ASSERT_SIZE (ChainContextSubst, 2);
+
+
+struct ExtensionSubst : Extension
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+  inline const struct SubstLookupSubTable& get_subtable (void) const
+  { return CONST_CAST (SubstLookupSubTable, Extension::get_subtable (), 0); }
+
+  inline bool apply (APPLY_ARG_DEF) const;
+
+  inline bool sanitize (SANITIZE_ARG_DEF);
+};
+ASSERT_SIZE (ExtensionSubst, 2);
+
+
+struct ReverseChainSingleSubstFormat1
+{
+  friend struct ReverseChainSingleSubst;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    if (HB_UNLIKELY (context_length != NO_CONTEXT))
+      return false; /* No chaining to this type */
+
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const OffsetArrayOf<Coverage> &lookahead = CONST_NEXT (OffsetArrayOf<Coverage>, backtrack);
+    const ArrayOf<GlyphID> &substitute = CONST_NEXT (ArrayOf<GlyphID>, lookahead);
+
+    if (match_backtrack (APPLY_ARG,
+                        backtrack.len, (USHORT *) backtrack.array,
+                        match_coverage, DECONST_CHARP(this)) &&
+        match_lookahead (APPLY_ARG,
+                        lookahead.len, (USHORT *) lookahead.array,
+                        match_coverage, DECONST_CHARP(this),
+                        1))
+    {
+      IN_CURGLYPH () = substitute[index];
+      buffer->in_pos--; /* Reverse! */
+      return true;
+    }
+
+    return false;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_THIS2 (coverage, backtrack))
+      return false;
+    OffsetArrayOf<Coverage> &lookahead = NEXT (OffsetArrayOf<Coverage>, backtrack);
+    if (!SANITIZE_THIS (lookahead))
+      return false;
+    ArrayOf<GlyphID> &substitute = NEXT (ArrayOf<GlyphID>, lookahead);
+    return SANITIZE (substitute);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of table */
+  OffsetArrayOf<Coverage>
+               backtrack;              /* Array of coverage tables
+                                        * in backtracking sequence, in  glyph
+                                        * sequence order */
+  OffsetArrayOf<Coverage>
+               lookaheadX;             /* Array of coverage tables
+                                        * in lookahead sequence, in glyph
+                                        * sequence order */
+  ArrayOf<GlyphID>
+               substituteX;            /* Array of substitute
+                                        * GlyphIDs--ordered by Coverage Index */
+};
+ASSERT_SIZE (ReverseChainSingleSubstFormat1, 10);
+
+struct ReverseChainSingleSubst
+{
+  friend struct SubstLookupSubTable;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT                               format;         /* Format identifier */
+  ReverseChainSingleSubstFormat1       format1[];
+  } u;
+};
+ASSERT_SIZE (ReverseChainSingleSubst, 2);
+
+
+
+/*
+ * SubstLookup
+ */
+
+struct SubstLookupSubTable
+{
+  friend struct SubstLookup;
+
+  enum {
+    Single             = 1,
+    Multiple           = 2,
+    Alternate          = 3,
+    Ligature           = 4,
+    Context            = 5,
+    ChainContext       = 6,
+    Extension          = 7,
+    ReverseChainSingle = 8
+  };
+
+  inline bool apply (APPLY_ARG_DEF, unsigned int lookup_type) const
+  {
+    TRACE_APPLY ();
+    switch (lookup_type) {
+    case Single:               return u.single->apply (APPLY_ARG);
+    case Multiple:             return u.multiple->apply (APPLY_ARG);
+    case Alternate:            return u.alternate->apply (APPLY_ARG);
+    case Ligature:             return u.ligature->apply (APPLY_ARG);
+    case Context:              return u.context->apply (APPLY_ARG);
+    case ChainContext:         return u.chainContext->apply (APPLY_ARG);
+    case Extension:            return u.extension->apply (APPLY_ARG);
+    case ReverseChainSingle:   return u.reverseChainContextSingle->apply (APPLY_ARG);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case Single:               return u.single->sanitize (SANITIZE_ARG);
+    case Multiple:             return u.multiple->sanitize (SANITIZE_ARG);
+    case Alternate:            return u.alternate->sanitize (SANITIZE_ARG);
+    case Ligature:             return u.ligature->sanitize (SANITIZE_ARG);
+    case Context:              return u.context->sanitize (SANITIZE_ARG);
+    case ChainContext:         return u.chainContext->sanitize (SANITIZE_ARG);
+    case Extension:            return u.extension->sanitize (SANITIZE_ARG);
+    case ReverseChainSingle:   return u.reverseChainContextSingle->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT                       format;
+  SingleSubst                  single[];
+  MultipleSubst                        multiple[];
+  AlternateSubst               alternate[];
+  LigatureSubst                        ligature[];
+  ContextSubst                 context[];
+  ChainContextSubst            chainContext[];
+  ExtensionSubst               extension[];
+  ReverseChainSingleSubst      reverseChainContextSingle[];
+  } u;
+};
+ASSERT_SIZE (SubstLookupSubTable, 2);
+
+
+struct SubstLookup : Lookup
+{
+  inline const SubstLookupSubTable& get_subtable (unsigned int i) const
+  { return CONST_CAST (SubstLookupSubTable, Lookup::get_subtable (i), 0); }
+
+  /* Like get_type(), but looks through extension lookups.
+   * Never returns Extension */
+  inline unsigned int get_effective_type (void) const
+  {
+    unsigned int type = get_type ();
+
+    if (HB_UNLIKELY (type == SubstLookupSubTable::Extension))
+    {
+      unsigned int count = get_subtable_count ();
+      type = get_subtable(0).u.extension->get_type ();
+      /* The spec says all subtables should have the same type.
+       * This is specially important if one has a reverse type! */
+      for (unsigned int i = 1; i < count; i++)
+        if (get_subtable(i).u.extension->get_type () != type)
+         return 0;
+    }
+
+    return type;
+  }
+
+  inline bool is_reverse (void) const
+  { return HB_UNLIKELY (get_effective_type () == SubstLookupSubTable::ReverseChainSingle); }
+
+  inline bool apply_once (hb_ot_layout_context_t *context,
+                         hb_buffer_t    *buffer,
+                         unsigned int    context_length,
+                         unsigned int    nesting_level_left) const
+  {
+    unsigned int lookup_type = get_type ();
+    unsigned int lookup_flag = get_flag ();
+    unsigned int property;
+
+    if (!_hb_ot_layout_check_glyph_property (context->face, IN_CURINFO (), lookup_flag, &property))
+      return false;
+
+    unsigned int count = get_subtable_count ();
+    for (unsigned int i = 0; i < count; i++)
+      if (get_subtable (i).apply (APPLY_ARG_INIT, lookup_type))
+       return true;
+
+    return false;
+  }
+
+  inline bool apply_string (hb_ot_layout_context_t *context,
+                           hb_buffer_t *buffer,
+                           hb_mask_t    mask) const
+  {
+    bool ret = false;
+
+    if (HB_UNLIKELY (!buffer->in_length))
+      return false;
+
+    if (HB_LIKELY (!is_reverse ()))
+    {
+       /* in/out forward substitution */
+       _hb_buffer_clear_output (buffer);
+       buffer->in_pos = 0;
+       while (buffer->in_pos < buffer->in_length)
+       {
+         if ((~IN_MASK (buffer->in_pos) & mask) &&
+             apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL))
+           ret = true;
+         else
+           _hb_buffer_next_glyph (buffer);
+
+       }
+       if (ret)
+         _hb_buffer_swap (buffer);
+    }
+    else
+    {
+       /* in-place backward substitution */
+       buffer->in_pos = buffer->in_length - 1;
+       do
+       {
+         if ((~IN_MASK (buffer->in_pos) & mask) &&
+             apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL))
+           ret = true;
+         else
+           buffer->in_pos--;
+
+       }
+       while ((int) buffer->in_pos >= 0);
+    }
+
+    return ret;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!Lookup::sanitize (SANITIZE_ARG)) return false;
+    OffsetArrayOf<SubstLookupSubTable> &list = (OffsetArrayOf<SubstLookupSubTable> &) subTable;
+    return SANITIZE_THIS (list);
+  }
+};
+ASSERT_SIZE (SubstLookup, 6);
+
+typedef OffsetListOf<SubstLookup> SubstLookupList;
+ASSERT_SIZE (SubstLookupList, 2);
+
+/*
+ * GSUB
+ */
+
+struct GSUB : GSUBGPOS
+{
+  static const hb_tag_t Tag    = HB_OT_TAG_GSUB;
+
+  static inline const GSUB& get_for_data (const char *data)
+  { return (const GSUB&) GSUBGPOS::get_for_data (data); }
+
+  inline const SubstLookup& get_lookup (unsigned int i) const
+  { return (const SubstLookup&) GSUBGPOS::get_lookup (i); }
+
+  inline bool substitute_lookup (hb_ot_layout_context_t *context,
+                                hb_buffer_t  *buffer,
+                                unsigned int  lookup_index,
+                                hb_mask_t     mask) const
+  { return get_lookup (lookup_index).apply_string (context, buffer, mask); }
+
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!GSUBGPOS::sanitize (SANITIZE_ARG)) return false;
+    OffsetTo<SubstLookupList> &list = CAST(OffsetTo<SubstLookupList>, lookupList, 0);
+    return SANITIZE_THIS (list);
+  }
+};
+ASSERT_SIZE (GSUB, 10);
+
+
+/* Out-of-class implementation for methods recursing */
+
+inline bool ExtensionSubst::apply (APPLY_ARG_DEF) const
+{
+  TRACE_APPLY ();
+  unsigned int lookup_type = get_type ();
+
+  if (HB_UNLIKELY (lookup_type == SubstLookupSubTable::Extension))
+    return false;
+
+  return get_subtable ().apply (APPLY_ARG, lookup_type);
+}
+
+inline bool ExtensionSubst::sanitize (SANITIZE_ARG_DEF)
+{
+  TRACE_SANITIZE ();
+  return Extension::sanitize (SANITIZE_ARG) &&
+        (&(Extension::get_subtable ()) == &Null(LookupSubTable) ||
+         get_type () == SubstLookupSubTable::Extension ||
+         DECONST_CAST (SubstLookupSubTable, get_subtable (), 0).sanitize (SANITIZE_ARG));
+}
+
+static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
+{
+  const GSUB &gsub = *(context->face->ot_layout.gsub);
+  const SubstLookup &l = gsub.get_lookup (lookup_index);
+
+  if (HB_UNLIKELY (nesting_level_left == 0))
+    return false;
+  nesting_level_left--;
+
+  if (HB_UNLIKELY (context_length < 1))
+    return false;
+
+  return l.apply_once (context, buffer, context_length, nesting_level_left);
+}
+
+
+#endif /* HB_OT_LAYOUT_GSUB_PRIVATE_HH */
diff --git a/pango/opentype/hb-ot-layout-gsubgpos-private.hh b/pango/opentype/hb-ot-layout-gsubgpos-private.hh
new file mode 100755 (executable)
index 0000000..8b9b1cd
--- /dev/null
@@ -0,0 +1,958 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH
+#define HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH
+
+#include "hb-buffer-private.h"
+#include "hb-ot-layout-gdef-private.hh"
+
+
+#ifndef HB_DEBUG_APPLY
+#define HB_DEBUG_APPLY HB_DEBUG
+#endif
+
+#if HB_DEBUG_APPLY
+#define TRACE_APPLY_ARG_DEF    , unsigned int apply_depth
+#define TRACE_APPLY_ARG                , apply_depth + 1
+#define TRACE_APPLY_ARG_INIT   , 1
+#define TRACE_APPLY() \
+       HB_STMT_START { \
+           if (apply_depth < HB_DEBUG_APPLY) \
+               fprintf (stderr, "APPLY(%p) %-*d-> %s\n", \
+                        (CONST_CHARP (this) == NullPool) ? 0 : this, \
+                        apply_depth, apply_depth, \
+                        __PRETTY_FUNCTION__); \
+       } HB_STMT_END
+#else
+#define TRACE_APPLY_ARG_DEF
+#define TRACE_APPLY_ARG
+#define TRACE_APPLY_ARG_INIT
+#define TRACE_APPLY() HB_STMT_START {} HB_STMT_END
+#endif
+
+#define APPLY_ARG_DEF \
+       hb_ot_layout_context_t *context, \
+       hb_buffer_t    *buffer, \
+       unsigned int    context_length HB_GNUC_UNUSED, \
+       unsigned int    nesting_level_left HB_GNUC_UNUSED, \
+       unsigned int    lookup_flag, \
+       unsigned int    property HB_GNUC_UNUSED /* propety of first glyph */ \
+       TRACE_APPLY_ARG_DEF
+#define APPLY_ARG \
+       context, \
+       buffer, \
+       context_length, \
+       nesting_level_left, \
+       lookup_flag, \
+       property \
+       TRACE_APPLY_ARG
+#define APPLY_ARG_INIT \
+       context, \
+       buffer, \
+       context_length, \
+       nesting_level_left, \
+       lookup_flag, \
+       property \
+       TRACE_APPLY_ARG_INIT
+
+
+typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, char *data);
+typedef bool (*apply_lookup_func_t) (APPLY_ARG_DEF, unsigned int lookup_index);
+
+struct ContextFuncs
+{
+  match_func_t match;
+  apply_lookup_func_t apply;
+};
+
+
+static inline bool match_glyph (hb_codepoint_t glyph_id, const USHORT &value, char *data)
+{
+  return glyph_id == value;
+}
+
+static inline bool match_class (hb_codepoint_t glyph_id, const USHORT &value, char *data)
+{
+  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
+  return class_def.get_class (glyph_id) == value;
+}
+
+static inline bool match_coverage (hb_codepoint_t glyph_id, const USHORT &value, char *data)
+{
+  const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
+  return (data+coverage) (glyph_id) != NOT_COVERED;
+}
+
+
+static inline bool match_input (APPLY_ARG_DEF,
+                               unsigned int count, /* Including the first glyph (not matched) */
+                               const USHORT input[], /* Array of input values--start with second glyph */
+                               match_func_t match_func,
+                               char *match_data,
+                               unsigned int *context_length_out)
+{
+  unsigned int i, j;
+  unsigned int end = MIN (buffer->in_length, buffer->in_pos + context_length);
+  if (HB_UNLIKELY (buffer->in_pos + count > end))
+    return false;
+
+  for (i = 1, j = buffer->in_pos + 1; i < count; i++, j++)
+  {
+    while (_hb_ot_layout_skip_mark (context->face, IN_INFO (j), lookup_flag, NULL))
+    {
+      if (HB_UNLIKELY (j + count - i == end))
+       return false;
+      j++;
+    }
+
+    if (HB_LIKELY (!match_func (IN_GLYPH (j), input[i - 1], match_data)))
+      return false;
+  }
+
+  *context_length_out = j - buffer->in_pos;
+
+  return true;
+}
+
+static inline bool match_backtrack (APPLY_ARG_DEF,
+                                   unsigned int count,
+                                   const USHORT backtrack[],
+                                   match_func_t match_func,
+                                   char *match_data)
+{
+  if (HB_UNLIKELY (buffer->out_pos < count))
+    return false;
+
+  for (unsigned int i = 0, j = buffer->out_pos - 1; i < count; i++, j--)
+  {
+    while (_hb_ot_layout_skip_mark (context->face, OUT_INFO (j), lookup_flag, NULL))
+    {
+      if (HB_UNLIKELY (j + 1 == count - i))
+       return false;
+      j--;
+    }
+
+    if (HB_LIKELY (!match_func (OUT_GLYPH (j), backtrack[i], match_data)))
+      return false;
+  }
+
+  return true;
+}
+
+static inline bool match_lookahead (APPLY_ARG_DEF,
+                                   unsigned int count,
+                                   const USHORT lookahead[],
+                                   match_func_t match_func,
+                                   char *match_data,
+                                   unsigned int offset)
+{
+  unsigned int i, j;
+  unsigned int end = MIN (buffer->in_length, buffer->in_pos + context_length);
+  if (HB_UNLIKELY (buffer->in_pos + offset + count > end))
+    return false;
+
+  for (i = 0, j = buffer->in_pos + offset; i < count; i++, j++)
+  {
+    while (_hb_ot_layout_skip_mark (context->face, OUT_INFO (j), lookup_flag, NULL))
+    {
+      if (HB_UNLIKELY (j + count - i == end))
+       return false;
+      j++;
+    }
+
+    if (HB_LIKELY (!match_func (IN_GLYPH (j), lookahead[i], match_data)))
+      return false;
+  }
+
+  return true;
+}
+
+
+struct LookupRecord
+{
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  USHORT       sequenceIndex;          /* Index into current glyph
+                                        * sequence--first glyph = 0 */
+  USHORT       lookupListIndex;        /* Lookup to apply to that
+                                        * position--zero--based */
+};
+ASSERT_SIZE (LookupRecord, 4);
+
+static inline bool apply_lookup (APPLY_ARG_DEF,
+                                unsigned int count, /* Including the first glyph */
+                                unsigned int lookupCount,
+                                const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
+                                apply_lookup_func_t apply_func)
+{
+  unsigned int end = MIN (buffer->in_length, buffer->in_pos + context_length);
+  if (HB_UNLIKELY (buffer->in_pos + count > end))
+    return false;
+
+  /* TODO We don't support lookupRecord arrays that are not increasing:
+   *      Should be easy for in_place ones at least. */
+
+  /* Note: If sublookup is reverse, i will underflow after the first loop
+   * and we jump out of it.  Not entirely disastrous.  So we don't check
+   * for reverse lookup here.
+   */
+  for (unsigned int i = 0; i < count; /* NOP */)
+  {
+    while (_hb_ot_layout_skip_mark (context->face, IN_CURINFO (), lookup_flag, NULL))
+    {
+      if (HB_UNLIKELY (buffer->in_pos == end))
+       return true;
+      /* No lookup applied for this index */
+      _hb_buffer_next_glyph (buffer);
+    }
+
+    if (lookupCount && i == lookupRecord->sequenceIndex)
+    {
+      unsigned int old_pos = buffer->in_pos;
+
+      /* Apply a lookup */
+      bool done = apply_func (APPLY_ARG, lookupRecord->lookupListIndex);
+
+      lookupRecord++;
+      lookupCount--;
+      /* Err, this is wrong if the lookup jumped over some glyphs */
+      i += buffer->in_pos - old_pos;
+      if (HB_UNLIKELY (buffer->in_pos == end))
+       return true;
+
+      if (!done)
+       goto not_applied;
+    }
+    else
+    {
+    not_applied:
+      /* No lookup applied for this index */
+      _hb_buffer_next_glyph (buffer);
+      i++;
+    }
+  }
+
+  return true;
+}
+
+
+/* Contextual lookups */
+
+struct ContextLookupContext
+{
+  ContextFuncs funcs;
+  char *match_data;
+};
+
+static inline bool context_lookup (APPLY_ARG_DEF,
+                                  unsigned int inputCount, /* Including the first glyph (not matched) */
+                                  const USHORT input[], /* Array of input values--start with second glyph */
+                                  unsigned int lookupCount,
+                                  const LookupRecord lookupRecord[],
+                                  ContextLookupContext &lookup_context)
+{
+  return match_input (APPLY_ARG,
+                     inputCount, input,
+                     lookup_context.funcs.match, lookup_context.match_data,
+                     &context_length) &&
+        apply_lookup (APPLY_ARG,
+                      inputCount,
+                      lookupCount, lookupRecord,
+                      lookup_context.funcs.apply);
+}
+
+struct Rule
+{
+  friend struct RuleSet;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, ContextLookupContext &lookup_context) const
+  {
+    TRACE_APPLY ();
+    const LookupRecord *lookupRecord = &CONST_CAST (LookupRecord, input, sizeof (input[0]) * (inputCount ? inputCount - 1 : 0));
+    return context_lookup (APPLY_ARG,
+                          inputCount, input,
+                          lookupCount, lookupRecord,
+                          lookup_context);
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    return SANITIZE_MEM (input,
+                        sizeof (input[0]) * inputCount +
+                        sizeof (lookupRecordX[0]) * lookupCount);
+  }
+
+  private:
+  USHORT       inputCount;             /* Total number of glyphs in input
+                                        * glyph sequence--includes the  first
+                                        * glyph */
+  USHORT       lookupCount;            /* Number of LookupRecords */
+  USHORT       input[];                /* Array of match inputs--start with
+                                        * second glyph */
+  LookupRecord lookupRecordX[];        /* Array of LookupRecords--in
+                                        * design order */
+};
+ASSERT_SIZE (Rule, 4);
+
+struct RuleSet
+{
+  inline bool apply (APPLY_ARG_DEF, ContextLookupContext &lookup_context) const
+  {
+    TRACE_APPLY ();
+    unsigned int num_rules = rule.len;
+    for (unsigned int i = 0; i < num_rules; i++)
+    {
+      if ((this+rule[i]).apply (APPLY_ARG, lookup_context))
+        return true;
+    }
+
+    return false;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (rule);
+  }
+
+  private:
+  OffsetArrayOf<Rule>
+               rule;                   /* Array of Rule tables
+                                        * ordered by preference */
+};
+
+
+struct ContextFormat1
+{
+  friend struct Context;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const RuleSet &rule_set = this+ruleSet[index];
+    struct ContextLookupContext lookup_context = {
+      {match_glyph, apply_func},
+      NULL
+    };
+    return rule_set.apply (APPLY_ARG, lookup_context);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, ruleSet);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of table */
+  OffsetArrayOf<RuleSet>
+               ruleSet;                /* Array of RuleSet tables
+                                        * ordered by Coverage Index */
+};
+ASSERT_SIZE (ContextFormat1, 6);
+
+
+struct ContextFormat2
+{
+  friend struct Context;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const ClassDef &class_def = this+classDef;
+    index = class_def (IN_CURGLYPH ());
+    const RuleSet &rule_set = this+ruleSet[index];
+    /* LONGTERMTODO: Old code fetches glyph classes at most once and caches
+     * them across subrule lookups.  Not sure it's worth it.
+     */
+    struct ContextLookupContext lookup_context = {
+     {match_class, apply_func},
+      DECONST_CHARP(&class_def)
+    };
+    return rule_set.apply (APPLY_ARG, lookup_context);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS3 (coverage, classDef, ruleSet);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 2 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of table */
+  OffsetTo<ClassDef>
+               classDef;               /* Offset to glyph ClassDef table--from
+                                        * beginning of table */
+  OffsetArrayOf<RuleSet>
+               ruleSet;                /* Array of RuleSet tables
+                                        * ordered by class */
+};
+ASSERT_SIZE (ContextFormat2, 8);
+
+
+struct ContextFormat3
+{
+  friend struct Context;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage[0]) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const LookupRecord *lookupRecord = &CONST_CAST(LookupRecord, coverage, sizeof (coverage[0]) * glyphCount);
+    struct ContextLookupContext lookup_context = {
+      {match_coverage, apply_func},
+      DECONST_CHARP(this)
+    };
+    return context_lookup (APPLY_ARG,
+                          glyphCount, (const USHORT *) (coverage + 1),
+                          lookupCount, lookupRecord,
+                          lookup_context);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_SELF ()) return false;
+    unsigned int count = glyphCount;
+    for (unsigned int i = 0; i < count; i++)
+      if (!SANITIZE_THIS (coverage[i])) return false;
+    LookupRecord *lookupRecord = &CAST(LookupRecord, coverage, sizeof (coverage[0]) * glyphCount);
+    return SANITIZE_MEM (lookupRecord, sizeof (lookupRecord[0]) * lookupCount);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 3 */
+  USHORT       glyphCount;             /* Number of glyphs in the input glyph
+                                        * sequence */
+  USHORT       lookupCount;            /* Number of LookupRecords */
+  OffsetTo<Coverage>
+               coverage[];             /* Array of offsets to Coverage
+                                        * table in glyph sequence order */
+  LookupRecord lookupRecordX[];        /* Array of LookupRecords--in
+                                        * design order */
+};
+ASSERT_SIZE (ContextFormat3, 6);
+
+struct Context
+{
+  protected:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG, apply_func);
+    case 2: return u.format2->apply (APPLY_ARG, apply_func);
+    case 3: return u.format3->apply (APPLY_ARG, apply_func);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    case 3: return u.format3->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  ContextFormat1       format1[];
+  ContextFormat2       format2[];
+  ContextFormat3       format3[];
+  } u;
+};
+ASSERT_SIZE (Context, 2);
+
+
+/* Chaining Contextual lookups */
+
+struct ChainContextLookupContext
+{
+  ContextFuncs funcs;
+  char *match_data[3];
+};
+
+static inline bool chain_context_lookup (APPLY_ARG_DEF,
+                                        unsigned int backtrackCount,
+                                        const USHORT backtrack[],
+                                        unsigned int inputCount, /* Including the first glyph (not matched) */
+                                        const USHORT input[], /* Array of input values--start with second glyph */
+                                        unsigned int lookaheadCount,
+                                        const USHORT lookahead[],
+                                        unsigned int lookupCount,
+                                        const LookupRecord lookupRecord[],
+                                        ChainContextLookupContext &lookup_context)
+{
+  /* First guess */
+  if (HB_UNLIKELY (buffer->out_pos < backtrackCount ||
+                  buffer->in_pos + inputCount + lookaheadCount > buffer->in_length ||
+                  inputCount + lookaheadCount > context_length))
+    return false;
+
+  unsigned int offset;
+  return match_backtrack (APPLY_ARG,
+                         backtrackCount, backtrack,
+                         lookup_context.funcs.match, lookup_context.match_data[0]) &&
+        match_input (APPLY_ARG,
+                     inputCount, input,
+                     lookup_context.funcs.match, lookup_context.match_data[1],
+                     &offset) &&
+        match_lookahead (APPLY_ARG,
+                         lookaheadCount, lookahead,
+                         lookup_context.funcs.match, lookup_context.match_data[2],
+                         offset) &&
+        (context_length = offset, true) &&
+        apply_lookup (APPLY_ARG,
+                      inputCount,
+                      lookupCount, lookupRecord,
+                      lookup_context.funcs.apply);
+}
+
+struct ChainRule
+{
+  friend struct ChainRuleSet;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, ChainContextLookupContext &lookup_context) const
+  {
+    TRACE_APPLY ();
+    const HeadlessArrayOf<USHORT> &input = CONST_NEXT (HeadlessArrayOf<USHORT>, backtrack);
+    const ArrayOf<USHORT> &lookahead = CONST_NEXT (ArrayOf<USHORT>, input);
+    const ArrayOf<LookupRecord> &lookup = CONST_NEXT (ArrayOf<LookupRecord>, lookahead);
+    return chain_context_lookup (APPLY_ARG,
+                                backtrack.len, backtrack.array,
+                                input.len, input.array,
+                                lookahead.len, lookahead.array,
+                                lookup.len, lookup.array,
+                                lookup_context);
+    return false;
+  }
+
+  public:
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (backtrack)) return false;
+    HeadlessArrayOf<USHORT> &input = NEXT (HeadlessArrayOf<USHORT>, backtrack);
+    if (!SANITIZE (input)) return false;
+    ArrayOf<USHORT> &lookahead = NEXT (ArrayOf<USHORT>, input);
+    if (!SANITIZE (lookahead)) return false;
+    ArrayOf<LookupRecord> &lookup = NEXT (ArrayOf<LookupRecord>, lookahead);
+    return SANITIZE (lookup);
+  }
+
+  private:
+  ArrayOf<USHORT>
+               backtrack;              /* Array of backtracking values
+                                        * (to be matched before the input
+                                        * sequence) */
+  HeadlessArrayOf<USHORT>
+               inputX;                 /* Array of input values (start with
+                                        * second glyph) */
+  ArrayOf<USHORT>
+               lookaheadX;             /* Array of lookahead values's (to be
+                                        * matched after the input sequence) */
+  ArrayOf<LookupRecord>
+               lookupX;                /* Array of LookupRecords--in
+                                        * design order) */
+};
+ASSERT_SIZE (ChainRule, 8);
+
+struct ChainRuleSet
+{
+  inline bool apply (APPLY_ARG_DEF, ChainContextLookupContext &lookup_context) const
+  {
+    TRACE_APPLY ();
+    unsigned int num_rules = rule.len;
+    for (unsigned int i = 0; i < num_rules; i++)
+    {
+      if ((this+rule[i]).apply (APPLY_ARG, lookup_context))
+        return true;
+    }
+
+    return false;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS (rule);
+  }
+
+  private:
+  OffsetArrayOf<ChainRule>
+               rule;                   /* Array of ChainRule tables
+                                        * ordered by preference */
+};
+ASSERT_SIZE (ChainRuleSet, 2);
+
+struct ChainContextFormat1
+{
+  friend struct ChainContext;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const ChainRuleSet &rule_set = this+ruleSet[index];
+    struct ChainContextLookupContext lookup_context = {
+      {match_glyph, apply_func},
+      {NULL, NULL, NULL}
+    };
+    return rule_set.apply (APPLY_ARG, lookup_context);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, ruleSet);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 1 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of table */
+  OffsetArrayOf<ChainRuleSet>
+               ruleSet;                /* Array of ChainRuleSet tables
+                                        * ordered by Coverage Index */
+};
+ASSERT_SIZE (ChainContextFormat1, 6);
+
+struct ChainContextFormat2
+{
+  friend struct ChainContext;
+
+  private:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    unsigned int index = (this+coverage) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const ClassDef &backtrack_class_def = this+backtrackClassDef;
+    const ClassDef &input_class_def = this+inputClassDef;
+    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
+
+    index = input_class_def (IN_CURGLYPH ());
+    const ChainRuleSet &rule_set = this+ruleSet[index];
+    /* LONGTERMTODO: Old code fetches glyph classes at most once and caches
+     * them across subrule lookups.  Not sure it's worth it.
+     */
+    struct ChainContextLookupContext lookup_context = {
+     {match_class, apply_func},
+     {DECONST_CHARP(&backtrack_class_def),
+      DECONST_CHARP(&input_class_def),
+      DECONST_CHARP(&lookahead_class_def)}
+    };
+    return rule_set.apply (APPLY_ARG, lookup_context);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_THIS2 (coverage, backtrackClassDef) &&
+          SANITIZE_THIS2 (inputClassDef, lookaheadClassDef) &&
+          SANITIZE_THIS (ruleSet);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 2 */
+  OffsetTo<Coverage>
+               coverage;               /* Offset to Coverage table--from
+                                        * beginning of table */
+  OffsetTo<ClassDef>
+               backtrackClassDef;      /* Offset to glyph ClassDef table
+                                        * containing backtrack sequence
+                                        * data--from beginning of table */
+  OffsetTo<ClassDef>
+               inputClassDef;          /* Offset to glyph ClassDef
+                                        * table containing input sequence
+                                        * data--from beginning of table */
+  OffsetTo<ClassDef>
+               lookaheadClassDef;      /* Offset to glyph ClassDef table
+                                        * containing lookahead sequence
+                                        * data--from beginning of table */
+  OffsetArrayOf<ChainRuleSet>
+               ruleSet;                /* Array of ChainRuleSet tables
+                                        * ordered by class */
+};
+ASSERT_SIZE (ChainContextFormat2, 12);
+
+struct ChainContextFormat3
+{
+  friend struct ChainContext;
+
+  private:
+
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    const OffsetArrayOf<Coverage> &input = CONST_NEXT (OffsetArrayOf<Coverage>, backtrack);
+
+    unsigned int index = (this+input[0]) (IN_CURGLYPH ());
+    if (HB_LIKELY (index == NOT_COVERED))
+      return false;
+
+    const OffsetArrayOf<Coverage> &lookahead = CONST_NEXT (OffsetArrayOf<Coverage>, input);
+    const ArrayOf<LookupRecord> &lookup = CONST_NEXT (ArrayOf<LookupRecord>, lookahead);
+    struct ChainContextLookupContext lookup_context = {
+      {match_coverage, apply_func},
+      {DECONST_CHARP(this), DECONST_CHARP(this), DECONST_CHARP(this)}
+    };
+    return chain_context_lookup (APPLY_ARG,
+                                backtrack.len, (USHORT *) backtrack.array,
+                                input.len, (USHORT *) input.array + 1,
+                                lookahead.len, (USHORT *) lookahead.array,
+                                lookup.len, lookup.array,
+                                lookup_context);
+    return false;
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE_THIS (backtrack)) return false;
+    OffsetArrayOf<Coverage> &input = NEXT (OffsetArrayOf<Coverage>, backtrack);
+    if (!SANITIZE_THIS (input)) return false;
+    OffsetArrayOf<Coverage> &lookahead = NEXT (OffsetArrayOf<Coverage>, input);
+    if (!SANITIZE_THIS (lookahead)) return false;
+    ArrayOf<LookupRecord> &lookup = NEXT (ArrayOf<LookupRecord>, lookahead);
+    return SANITIZE (lookup);
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier--format = 3 */
+  OffsetArrayOf<Coverage>
+               backtrack;              /* Array of coverage tables
+                                        * in backtracking sequence, in  glyph
+                                        * sequence order */
+  OffsetArrayOf<Coverage>
+               inputX          ;       /* Array of coverage
+                                        * tables in input sequence, in glyph
+                                        * sequence order */
+  OffsetArrayOf<Coverage>
+               lookaheadX;             /* Array of coverage tables
+                                        * in lookahead sequence, in glyph
+                                        * sequence order */
+  ArrayOf<LookupRecord>
+               lookupX;                /* Array of LookupRecords--in
+                                        * design order) */
+};
+ASSERT_SIZE (ChainContextFormat3, 10);
+
+struct ChainContext
+{
+  protected:
+  inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const
+  {
+    TRACE_APPLY ();
+    switch (u.format) {
+    case 1: return u.format1->apply (APPLY_ARG, apply_func);
+    case 2: return u.format2->apply (APPLY_ARG, apply_func);
+    case 3: return u.format3->apply (APPLY_ARG, apply_func);
+    default:return false;
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    case 2: return u.format2->sanitize (SANITIZE_ARG);
+    case 3: return u.format3->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format; /* Format identifier */
+  ChainContextFormat1  format1[];
+  ChainContextFormat2  format2[];
+  ChainContextFormat3  format3[];
+  } u;
+};
+ASSERT_SIZE (ChainContext, 2);
+
+
+struct ExtensionFormat1
+{
+  friend struct Extension;
+
+  protected:
+  inline unsigned int get_type (void) const { return extensionLookupType; }
+  inline unsigned int get_offset (void) const { return (extensionOffset[0] << 16) + extensionOffset[1]; }
+  inline const LookupSubTable& get_subtable (void) const
+  {
+    unsigned int offset = get_offset ();
+    if (HB_UNLIKELY (!offset)) return Null(LookupSubTable);
+    return CONST_CAST (LookupSubTable, *this, offset);
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    return SANITIZE_SELF ();
+  }
+
+  private:
+  USHORT       format;                 /* Format identifier. Set to 1. */
+  USHORT       extensionLookupType;    /* Lookup type of subtable referenced
+                                        * by ExtensionOffset (i.e. the
+                                        * extension subtable). */
+  USHORT       extensionOffset[2];     /* Offset to the extension subtable,
+                                        * of lookup type subtable.
+                                        * Defined as two shorts to avoid
+                                        * alignment requirements. */
+};
+ASSERT_SIZE (ExtensionFormat1, 8);
+
+struct Extension
+{
+  inline unsigned int get_type (void) const
+  {
+    switch (u.format) {
+    case 1: return u.format1->get_type ();
+    default:return 0;
+    }
+  }
+  inline const LookupSubTable& get_subtable (void) const
+  {
+    switch (u.format) {
+    case 1: return u.format1->get_subtable ();
+    default:return Null(LookupSubTable);
+    }
+  }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (u.format)) return false;
+    switch (u.format) {
+    case 1: return u.format1->sanitize (SANITIZE_ARG);
+    default:return true;
+    }
+  }
+
+  private:
+  union {
+  USHORT               format;         /* Format identifier */
+  ExtensionFormat1     format1[];
+  } u;
+};
+ASSERT_SIZE (Extension, 2);
+
+
+/*
+ * GSUB/GPOS Common
+ */
+
+struct GSUBGPOS
+{
+  static const hb_tag_t GSUBTag        = HB_OT_TAG_GSUB;
+  static const hb_tag_t GPOSTag        = HB_OT_TAG_GPOS;
+
+  STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION (GSUBGPOS, 1, 1);
+
+  inline unsigned int get_script_count (void) const
+  { return (this+scriptList).len; }
+  inline const Tag& get_script_tag (unsigned int i) const
+  { return (this+scriptList).get_tag (i); }
+  inline bool get_script_tags (unsigned int *script_count /* IN/OUT */,
+                              hb_tag_t     *script_tags /* OUT */) const
+  { return (this+scriptList).get_tags (script_count, script_tags); }
+  inline const Script& get_script (unsigned int i) const
+  { return (this+scriptList)[i]; }
+  inline bool find_script_index (hb_tag_t tag, unsigned int *index) const
+  { return (this+scriptList).find_index (tag, index); }
+
+  inline unsigned int get_feature_count (void) const
+  { return (this+featureList).len; }
+  inline const Tag& get_feature_tag (unsigned int i) const
+  { return (this+featureList).get_tag (i); }
+  inline bool get_feature_tags (unsigned int *feature_count /* IN/OUT */,
+                               hb_tag_t     *feature_tags /* OUT */) const
+  { return (this+featureList).get_tags (feature_count, feature_tags); }
+  inline const Feature& get_feature (unsigned int i) const
+  { return (this+featureList)[i]; }
+  inline bool find_feature_index (hb_tag_t tag, unsigned int *index) const
+  { return (this+featureList).find_index (tag, index); }
+
+  inline unsigned int get_lookup_count (void) const
+  { return (this+lookupList).len; }
+  inline const Lookup& get_lookup (unsigned int i) const
+  { return (this+lookupList)[i]; }
+
+  inline bool sanitize (SANITIZE_ARG_DEF) {
+    TRACE_SANITIZE ();
+    if (!SANITIZE (version)) return false;
+    if (version.major != 1) return true;
+    return SANITIZE_THIS3 (scriptList, featureList, lookupList);
+  }
+
+  protected:
+  FixedVersion version;        /* Version of the GSUB/GPOS table--initially set
+                                * to 0x00010000 */
+  OffsetTo<ScriptList>
+               scriptList;     /* ScriptList table */
+  OffsetTo<FeatureList>
+               featureList;    /* FeatureList table */
+  OffsetTo<LookupList>
+               lookupList;     /* LookupList table */
+};
+ASSERT_SIZE (GSUBGPOS, 10);
+
+
+#endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH */
diff --git a/pango/opentype/hb-ot-layout-private.h b/pango/opentype/hb-ot-layout-private.h
new file mode 100755 (executable)
index 0000000..fb7bfe4
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_PRIVATE_H
+#define HB_OT_LAYOUT_PRIVATE_H
+
+#include "hb-private.h"
+
+#include "hb-ot-layout.h"
+
+#include "hb-font.h"
+#include "hb-buffer-private.h"
+
+
+HB_BEGIN_DECLS
+
+typedef unsigned int hb_ot_layout_class_t;
+
+/*
+ * hb_ot_layout_t
+ */
+
+typedef struct _hb_ot_layout_t hb_ot_layout_t;
+
+struct _hb_ot_layout_t
+{
+  hb_blob_t *gdef_blob;
+  hb_blob_t *gsub_blob;
+  hb_blob_t *gpos_blob;
+
+  const struct GDEF *gdef;
+  const struct GSUB *gsub;
+  const struct GPOS *gpos;
+
+  struct
+  {
+    unsigned char *klasses;
+    unsigned int len;
+  } new_gdef;
+};
+
+typedef struct _hb_ot_layout_context_t hb_ot_layout_context_t;
+struct _hb_ot_layout_context_t
+{
+  hb_face_t *face;
+  hb_font_t *font;
+
+  union info_t
+  {
+    struct gpos_t
+    {
+      unsigned int last;        /* the last valid glyph--used with cursive positioning */
+      hb_position_t anchor_x;   /* the coordinates of the anchor point */
+      hb_position_t anchor_y;   /* of the last valid glyph */
+    } gpos;
+  } info;
+};
+
+
+void
+_hb_ot_layout_init (hb_face_t *face);
+
+void
+_hb_ot_layout_fini (hb_face_t *face);
+
+
+/*
+ * GDEF
+ */
+
+HB_INTERNAL hb_bool_t
+_hb_ot_layout_has_new_glyph_classes (hb_face_t *face);
+
+HB_INTERNAL void
+_hb_ot_layout_set_glyph_property (hb_face_t      *face,
+                                 hb_codepoint_t  glyph,
+                                 unsigned int    property);
+
+HB_INTERNAL void
+_hb_ot_layout_set_glyph_class (hb_face_t                  *face,
+                              hb_codepoint_t              glyph,
+                              hb_ot_layout_glyph_class_t  klass);
+
+HB_INTERNAL hb_bool_t
+_hb_ot_layout_check_glyph_property (hb_face_t    *face,
+                                   hb_internal_glyph_info_t *ginfo,
+                                   unsigned int  lookup_flags,
+                                   unsigned int *property);
+
+HB_INTERNAL hb_bool_t
+_hb_ot_layout_skip_mark (hb_face_t    *face,
+                        hb_internal_glyph_info_t *ginfo,
+                        unsigned int  lookup_flags,
+                        unsigned int *property);
+
+HB_END_DECLS
+
+#endif /* HB_OT_LAYOUT_PRIVATE_H */
diff --git a/pango/opentype/hb-ot-layout.cc b/pango/opentype/hb-ot-layout.cc
new file mode 100755 (executable)
index 0000000..67b2b9a
--- /dev/null
@@ -0,0 +1,558 @@
+/*
+ * Copyright (C) 1998-2004  David Turner and Werner Lemberg
+ * Copyright (C) 2006  Behdad Esfahbod
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#define HB_OT_LAYOUT_CC
+
+#include "hb-ot-layout-private.h"
+
+#include "hb-ot-layout-gdef-private.hh"
+#include "hb-ot-layout-gsub-private.hh"
+#include "hb-ot-layout-gpos-private.hh"
+
+
+#include <stdlib.h>
+#include <string.h>
+
+
+void
+_hb_ot_layout_init (hb_face_t *face)
+{
+  hb_ot_layout_t *layout = &face->ot_layout;
+
+  layout->gdef_blob = Sanitizer<GDEF>::sanitize (hb_face_get_table (face, HB_OT_TAG_GDEF));
+  layout->gdef = &Sanitizer<GDEF>::lock_instance (layout->gdef_blob);
+
+  layout->gsub_blob = Sanitizer<GSUB>::sanitize (hb_face_get_table (face, HB_OT_TAG_GSUB));
+  layout->gsub = &Sanitizer<GSUB>::lock_instance (layout->gsub_blob);
+
+  layout->gpos_blob = Sanitizer<GPOS>::sanitize (hb_face_get_table (face, HB_OT_TAG_GPOS));
+  layout->gpos = &Sanitizer<GPOS>::lock_instance (layout->gpos_blob);
+}
+
+void
+_hb_ot_layout_fini (hb_face_t *face)
+{
+  hb_ot_layout_t *layout = &face->ot_layout;
+
+  hb_blob_unlock (layout->gdef_blob);
+  hb_blob_unlock (layout->gsub_blob);
+  hb_blob_unlock (layout->gpos_blob);
+
+  hb_blob_destroy (layout->gdef_blob);
+  hb_blob_destroy (layout->gsub_blob);
+  hb_blob_destroy (layout->gpos_blob);
+
+  free (layout->new_gdef.klasses);
+}
+
+static const GDEF&
+_get_gdef (hb_face_t *face)
+{
+  return HB_LIKELY (face->ot_layout.gdef) ? *face->ot_layout.gdef : Null(GDEF);
+}
+
+static const GSUB&
+_get_gsub (hb_face_t *face)
+{
+  return HB_LIKELY (face->ot_layout.gsub) ? *face->ot_layout.gsub : Null(GSUB);
+}
+
+static const GPOS&
+_get_gpos (hb_face_t *face)
+{
+  return HB_LIKELY (face->ot_layout.gpos) ? *face->ot_layout.gpos : Null(GPOS);
+}
+
+
+/*
+ * GDEF
+ */
+
+/* TODO the public class_t is a mess */
+
+hb_bool_t
+hb_ot_layout_has_font_glyph_classes (hb_face_t *face)
+{
+  return _get_gdef (face).has_glyph_classes ();
+}
+
+hb_bool_t
+_hb_ot_layout_has_new_glyph_classes (hb_face_t *face)
+{
+  return face->ot_layout.new_gdef.len > 0;
+}
+
+static unsigned int
+_hb_ot_layout_get_glyph_property (hb_face_t      *face,
+                                 hb_codepoint_t  glyph)
+{
+  hb_ot_layout_class_t klass;
+  const GDEF &gdef = _get_gdef (face);
+
+  klass = gdef.get_glyph_class (glyph);
+
+  if (!klass && glyph < face->ot_layout.new_gdef.len)
+    klass = face->ot_layout.new_gdef.klasses[glyph];
+
+  switch (klass) {
+  default:
+  case GDEF::UnclassifiedGlyph:        return HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED;
+  case GDEF::BaseGlyph:                return HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH;
+  case GDEF::LigatureGlyph:    return HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE;
+  case GDEF::ComponentGlyph:   return HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT;
+  case GDEF::MarkGlyph:
+       klass = gdef.get_mark_attachment_type (glyph);
+       return HB_OT_LAYOUT_GLYPH_CLASS_MARK + (klass << 8);
+  }
+}
+
+hb_bool_t
+_hb_ot_layout_check_glyph_property (hb_face_t    *face,
+                                   hb_internal_glyph_info_t *ginfo,
+                                   unsigned int  lookup_flags,
+                                   unsigned int *property_out)
+{
+  unsigned int property;
+
+  if (ginfo->gproperty == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
+    ginfo->gproperty = _hb_ot_layout_get_glyph_property (face, ginfo->codepoint);
+  property = ginfo->gproperty;
+  if (property_out)
+    *property_out = property;
+
+  /* Not covered, if, for example, glyph class is ligature and
+   * lookup_flags includes LookupFlags::IgnoreLigatures
+   */
+  if (property & lookup_flags & LookupFlag::IgnoreFlags)
+    return false;
+
+  if (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK)
+  {
+    /* If using mark filtering sets, the high short of
+     * lookup_flags has the set index.
+     */
+    if (lookup_flags & LookupFlag::UseMarkFilteringSet)
+      return _get_gdef (face).mark_set_covers (lookup_flags >> 16, ginfo->codepoint);
+
+    /* The second byte of lookup_flags has the meaning
+     * "ignore marks of attachment type different than
+     * the attachment type specified."
+     */
+    if (lookup_flags & LookupFlag::MarkAttachmentType && property & LookupFlag::MarkAttachmentType)
+      return (lookup_flags & LookupFlag::MarkAttachmentType) == (property & LookupFlag::MarkAttachmentType);
+  }
+
+  return true;
+}
+
+hb_bool_t
+_hb_ot_layout_skip_mark (hb_face_t    *face,
+                        hb_internal_glyph_info_t *ginfo,
+                        unsigned int  lookup_flags,
+                        unsigned int *property_out)
+{
+  unsigned int property;
+
+  if (ginfo->gproperty == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
+    ginfo->gproperty = _hb_ot_layout_get_glyph_property (face, ginfo->codepoint);
+  property = ginfo->gproperty;
+  if (property_out)
+    *property_out = property;
+
+  if (property & HB_OT_LAYOUT_GLYPH_CLASS_MARK)
+  {
+    /* Skip mark if lookup_flags includes LookupFlags::IgnoreMarks */
+    if (lookup_flags & LookupFlag::IgnoreMarks)
+      return true;
+
+    /* If using mark filtering sets, the high short of lookup_flags has the set index. */
+    if (lookup_flags & LookupFlag::UseMarkFilteringSet)
+      return !_get_gdef (face).mark_set_covers (lookup_flags >> 16, ginfo->codepoint);
+
+    /* The second byte of lookup_flags has the meaning "ignore marks of attachment type
+     * different than the attachment type specified." */
+    if (lookup_flags & LookupFlag::MarkAttachmentType && property & LookupFlag::MarkAttachmentType)
+      return (lookup_flags & LookupFlag::MarkAttachmentType) != (property & LookupFlag::MarkAttachmentType);
+  }
+
+  return false;
+}
+
+void
+_hb_ot_layout_set_glyph_class (hb_face_t                  *face,
+                              hb_codepoint_t              glyph,
+                              hb_ot_layout_glyph_class_t  klass)
+{
+  if (HB_OBJECT_IS_INERT (face))
+    return;
+
+  /* TODO optimize this? similar to old harfbuzz code for example */
+
+  hb_ot_layout_t *layout = &face->ot_layout;
+  hb_ot_layout_class_t gdef_klass;
+  unsigned int len = layout->new_gdef.len;
+
+  if (HB_UNLIKELY (glyph > 65535))
+    return;
+
+  /* XXX this is not threadsafe */
+  if (glyph >= len) {
+    unsigned int new_len;
+    unsigned char *new_klasses;
+
+    new_len = len == 0 ? 120 : 2 * len;
+    while (new_len <= glyph)
+      new_len *= 2;
+
+    if (new_len > 65536)
+      new_len = 65536;
+    new_klasses = (unsigned char *) realloc (layout->new_gdef.klasses, new_len * sizeof (unsigned char));
+
+    if (HB_UNLIKELY (!new_klasses))
+      return;
+
+    memset (new_klasses + len, 0, new_len - len);
+
+    layout->new_gdef.klasses = new_klasses;
+    layout->new_gdef.len = new_len;
+  }
+
+  switch (klass) {
+  default:
+  case HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED:  gdef_klass = GDEF::UnclassifiedGlyph;   break;
+  case HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH:    gdef_klass = GDEF::BaseGlyph;           break;
+  case HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE:      gdef_klass = GDEF::LigatureGlyph;       break;
+  case HB_OT_LAYOUT_GLYPH_CLASS_MARK:          gdef_klass = GDEF::MarkGlyph;           break;
+  case HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT:     gdef_klass = GDEF::ComponentGlyph;      break;
+  }
+
+  layout->new_gdef.klasses[glyph] = gdef_klass;
+  return;
+}
+
+void
+_hb_ot_layout_set_glyph_property (hb_face_t      *face,
+                                 hb_codepoint_t  glyph,
+                                 unsigned int    property)
+{ _hb_ot_layout_set_glyph_class (face, glyph, (hb_ot_layout_glyph_class_t) (property & 0xff)); }
+
+
+hb_ot_layout_glyph_class_t
+hb_ot_layout_get_glyph_class (hb_face_t      *face,
+                             hb_codepoint_t  glyph)
+{
+  return (hb_ot_layout_glyph_class_t) (_hb_ot_layout_get_glyph_property (face, glyph) & 0xff);
+}
+
+void
+hb_ot_layout_set_glyph_class (hb_face_t                 *face,
+                             hb_codepoint_t             glyph,
+                             hb_ot_layout_glyph_class_t klass)
+{
+  _hb_ot_layout_set_glyph_class (face, glyph, klass);
+}
+
+void
+hb_ot_layout_build_glyph_classes (hb_face_t      *face,
+                                 uint16_t        num_total_glyphs,
+                                 hb_codepoint_t *glyphs,
+                                 unsigned char  *klasses,
+                                 uint16_t        count)
+{
+  if (HB_OBJECT_IS_INERT (face))
+    return;
+
+  hb_ot_layout_t *layout = &face->ot_layout;
+
+  if (HB_UNLIKELY (!count || !glyphs || !klasses))
+    return;
+
+  if (layout->new_gdef.len == 0) {
+    layout->new_gdef.klasses = (unsigned char *) calloc (num_total_glyphs, sizeof (unsigned char));
+    layout->new_gdef.len = count;
+  }
+
+  for (unsigned int i = 0; i < count; i++)
+    _hb_ot_layout_set_glyph_class (face, glyphs[i], (hb_ot_layout_glyph_class_t) klasses[i]);
+}
+
+hb_bool_t
+hb_ot_layout_get_attach_points (hb_face_t      *face,
+                               hb_codepoint_t  glyph,
+                               unsigned int   *point_count /* IN/OUT */,
+                               unsigned int   *point_array /* OUT */)
+{
+  return _get_gdef (face).get_attach_points (glyph, point_count, point_array);
+}
+
+hb_bool_t
+hb_ot_layout_get_lig_carets (hb_face_t      *face,
+                            hb_font_t      *font,
+                            hb_codepoint_t  glyph,
+                            unsigned int   *caret_count /* IN/OUT */,
+                            int            *caret_array /* OUT */)
+{
+  hb_ot_layout_context_t context;
+  context.font = font;
+  context.face = face;
+  return _get_gdef (face).get_lig_carets (&context, glyph, caret_count, caret_array);
+}
+
+/*
+ * GSUB/GPOS
+ */
+
+static const GSUBGPOS&
+get_gsubgpos_table (hb_face_t *face,
+                   hb_tag_t   table_tag)
+{
+  switch (table_tag) {
+    case HB_OT_TAG_GSUB: return _get_gsub (face);
+    case HB_OT_TAG_GPOS: return _get_gpos (face);
+    default:             return Null(GSUBGPOS);
+  }
+}
+
+
+hb_bool_t
+hb_ot_layout_table_get_script_tags (hb_face_t    *face,
+                                   hb_tag_t      table_tag,
+                                   unsigned int *script_count /* IN/OUT */,
+                                   hb_tag_t     *script_tags /* OUT */)
+{
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+
+  return g.get_script_tags (script_count, script_tags);
+}
+
+hb_bool_t
+hb_ot_layout_table_find_script (hb_face_t    *face,
+                               hb_tag_t      table_tag,
+                               hb_tag_t      script_tag,
+                               unsigned int *script_index)
+{
+  ASSERT_STATIC (NO_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+
+  if (g.find_script_index (script_tag, script_index))
+    return TRUE;
+
+  /* try finding 'DFLT' */
+  if (g.find_script_index (HB_OT_LAYOUT_TAG_DEFAULT_SCRIPT, script_index))
+    return FALSE;
+
+  /* try with 'dflt'; MS site has had typos and many fonts use it now :( */
+  if (g.find_script_index (HB_OT_LAYOUT_TAG_DEFAULT_LANGUAGE, script_index))
+    return FALSE;
+
+  if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
+  return FALSE;
+}
+
+hb_bool_t
+hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
+                                    hb_tag_t      table_tag,
+                                    unsigned int *feature_count /* IN/OUT */,
+                                    hb_tag_t     *feature_tags /* OUT */)
+{
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+
+  return g.get_feature_tags (feature_count, feature_tags);
+}
+
+
+hb_bool_t
+hb_ot_layout_script_get_language_tags (hb_face_t    *face,
+                                      hb_tag_t      table_tag,
+                                      unsigned int  script_index,
+                                      unsigned int *language_count /* IN/OUT */,
+                                      hb_tag_t     *language_tags /* OUT */)
+{
+  const Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
+
+  return s.get_lang_sys_tags (language_count, language_tags);
+}
+
+hb_bool_t
+hb_ot_layout_script_find_language (hb_face_t    *face,
+                                  hb_tag_t      table_tag,
+                                  unsigned int  script_index,
+                                  hb_tag_t      language_tag,
+                                  unsigned int *language_index)
+{
+  ASSERT_STATIC (NO_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX);
+  const Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
+
+  if (s.find_lang_sys_index (language_tag, language_index))
+    return TRUE;
+
+  /* try with 'dflt'; MS site has had typos and many fonts use it now :( */
+  if (s.find_lang_sys_index (HB_OT_LAYOUT_TAG_DEFAULT_LANGUAGE, language_index))
+    return FALSE;
+
+  if (language_index) *language_index = HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX;
+  return FALSE;
+}
+
+hb_bool_t
+hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
+                                                 hb_tag_t      table_tag,
+                                                 unsigned int  script_index,
+                                                 unsigned int  language_index,
+                                                 unsigned int *feature_index)
+{
+  const LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
+
+  if (feature_index) *feature_index = l.get_required_feature_index ();
+
+  return l.has_required_feature ();
+}
+
+hb_bool_t
+hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
+                                          hb_tag_t      table_tag,
+                                          unsigned int  script_index,
+                                          unsigned int  language_index,
+                                          unsigned int *feature_count /* IN/OUT */,
+                                          unsigned int *feature_indexes /* OUT */)
+{
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+
+  return l.get_feature_indexes (feature_count, feature_indexes);
+}
+
+hb_bool_t
+hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
+                                       hb_tag_t      table_tag,
+                                       unsigned int  script_index,
+                                       unsigned int  language_index,
+                                       unsigned int *feature_count /* IN/OUT */,
+                                       hb_tag_t     *feature_tags /* OUT */)
+{
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+
+  ASSERT_STATIC (sizeof (unsigned int) == sizeof (hb_tag_t));
+  hb_bool_t ret = l.get_feature_indexes (feature_count, (unsigned int *) feature_tags);
+
+  if (feature_tags) {
+    unsigned int count = *feature_count;
+    for (unsigned int i = 0; i < count; i++)
+      feature_tags[i] = g.get_feature_tag ((unsigned int) feature_tags[i]);
+  }
+
+  return ret;
+}
+
+
+hb_bool_t
+hb_ot_layout_language_find_feature (hb_face_t    *face,
+                                   hb_tag_t      table_tag,
+                                   unsigned int  script_index,
+                                   unsigned int  language_index,
+                                   hb_tag_t      feature_tag,
+                                   unsigned int *feature_index)
+{
+  ASSERT_STATIC (NO_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+
+  unsigned int num_features = l.get_feature_count ();
+  for (unsigned int i = 0; i < num_features; i++) {
+    unsigned int f_index = l.get_feature_index (i);
+
+    if (feature_tag == g.get_feature_tag (f_index)) {
+      if (feature_index) *feature_index = f_index;
+      return TRUE;
+    }
+  }
+
+  if (feature_index) *feature_index = HB_OT_LAYOUT_NO_FEATURE_INDEX;
+  return FALSE;
+}
+
+hb_bool_t
+hb_ot_layout_feature_get_lookup_indexes (hb_face_t    *face,
+                                        hb_tag_t      table_tag,
+                                        unsigned int  feature_index,
+                                        unsigned int *lookup_count /* IN/OUT */,
+                                        unsigned int *lookup_indexes /* OUT */)
+{
+  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const Feature &f = g.get_feature (feature_index);
+
+  return f.get_lookup_indexes (lookup_count, lookup_indexes);
+}
+
+
+/*
+ * GSUB
+ */
+
+hb_bool_t
+hb_ot_layout_has_substitution (hb_face_t *face)
+{
+  return &_get_gsub (face) != &Null(GSUB);
+}
+
+hb_bool_t
+hb_ot_layout_substitute_lookup (hb_face_t    *face,
+                               hb_buffer_t  *buffer,
+                               unsigned int  lookup_index,
+                               hb_mask_t     mask)
+{
+  hb_ot_layout_context_t context;
+  context.font = NULL;
+  context.face = face;
+  return _get_gsub (face).substitute_lookup (&context, buffer, lookup_index, mask);
+}
+
+
+/*
+ * GPOS
+ */
+
+hb_bool_t
+hb_ot_layout_has_positioning (hb_face_t *face)
+{
+  return &_get_gpos (face) != &Null(GPOS);
+}
+
+hb_bool_t
+hb_ot_layout_position_lookup   (hb_face_t    *face,
+                               hb_font_t    *font,
+                               hb_buffer_t  *buffer,
+                               unsigned int  lookup_index,
+                               hb_mask_t     mask)
+{
+  hb_ot_layout_context_t context;
+  context.font = font;
+  context.face = face;
+  return _get_gpos (face).position_lookup (&context, buffer, lookup_index, mask);
+}
diff --git a/pango/opentype/hb-ot-layout.h b/pango/opentype/hb-ot-layout.h
new file mode 100755 (executable)
index 0000000..54f785f
--- /dev/null
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_H
+#define HB_OT_LAYOUT_H
+
+#include "hb-common.h"
+#include "hb-buffer.h"
+#include "hb-font.h"
+
+HB_BEGIN_DECLS
+
+#define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
+#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
+#define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
+
+/*
+ * GDEF
+ */
+
+typedef enum {
+  HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED        = 0x0000,
+  HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH  = 0x0002,
+  HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE    = 0x0004,
+  HB_OT_LAYOUT_GLYPH_CLASS_MARK                = 0x0008,
+  HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT   = 0x0010
+} hb_ot_layout_glyph_class_t;
+
+/* XXX These should eventually be removed as we move synthesized glyph
+ * classes in harfbuzz. */
+
+hb_bool_t
+hb_ot_layout_has_font_glyph_classes (hb_face_t *face);
+
+hb_ot_layout_glyph_class_t
+hb_ot_layout_get_glyph_class (hb_face_t      *face,
+                             hb_codepoint_t  glyph);
+
+void
+hb_ot_layout_set_glyph_class (hb_face_t                 *face,
+                             hb_codepoint_t             glyph,
+                             hb_ot_layout_glyph_class_t klass);
+
+void
+hb_ot_layout_build_glyph_classes (hb_face_t      *face,
+                                 uint16_t        num_total_glyphs,
+                                 hb_codepoint_t *glyphs,
+                                 unsigned char  *klasses,
+                                 uint16_t        count);
+
+/* Not that useful.  Provides list of attach points for a glyph that a
+ * client may want to cache */
+hb_bool_t
+hb_ot_layout_get_attach_points (hb_face_t      *face,
+                               hb_codepoint_t  glyph,
+                               unsigned int   *point_count /* IN/OUT */,
+                               unsigned int   *point_array /* OUT */);
+
+/* Ligature caret positions */
+hb_bool_t
+hb_ot_layout_get_lig_carets (hb_face_t      *face,
+                            hb_font_t      *font,
+                            hb_codepoint_t  glyph,
+                            unsigned int   *caret_count /* IN/OUT */,
+                            int            *caret_array /* OUT */);
+
+
+/*
+ * GSUB/GPOS feature query and enumeration interface
+ */
+
+#define HB_OT_LAYOUT_NO_SCRIPT_INDEX           ((unsigned int) 0xFFFF)
+#define HB_OT_LAYOUT_NO_FEATURE_INDEX          ((unsigned int) 0xFFFF)
+#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX    ((unsigned int) 0xFFFF)
+#define HB_OT_LAYOUT_TAG_DEFAULT_SCRIPT                HB_TAG ('D', 'F', 'L', 'T')
+#define HB_OT_LAYOUT_TAG_DEFAULT_LANGUAGE      HB_TAG ('d', 'f', 'l', 't')
+
+hb_bool_t
+hb_ot_layout_table_get_script_tags (hb_face_t    *face,
+                                   hb_tag_t      table_tag,
+                                   unsigned int *script_count /* IN/OUT */,
+                                   hb_tag_t     *script_tags /* OUT */);
+
+hb_bool_t
+hb_ot_layout_table_find_script (hb_face_t    *face,
+                               hb_tag_t      table_tag,
+                               hb_tag_t      script_tag,
+                               unsigned int *script_index);
+
+hb_bool_t
+hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
+                                    hb_tag_t      table_tag,
+                                    unsigned int *feature_count /* IN/OUT */,
+                                    hb_tag_t     *feature_tags /* OUT */);
+
+hb_bool_t
+hb_ot_layout_script_get_language_tags (hb_face_t    *face,
+                                      hb_tag_t      table_tag,
+                                      unsigned int  script_index,
+                                      unsigned int *language_count /* IN/OUT */,
+                                      hb_tag_t     *language_tags /* OUT */);
+
+hb_bool_t
+hb_ot_layout_script_find_language (hb_face_t    *face,
+                                  hb_tag_t      table_tag,
+                                  unsigned int  script_index,
+                                  hb_tag_t      language_tag,
+                                  unsigned int *language_index);
+
+hb_bool_t
+hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
+                                                 hb_tag_t      table_tag,
+                                                 unsigned int  script_index,
+                                                 unsigned int  language_index,
+                                                 unsigned int *feature_index);
+
+hb_bool_t
+hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
+                                          hb_tag_t      table_tag,
+                                          unsigned int  script_index,
+                                          unsigned int  language_index,
+                                          unsigned int *feature_count /* IN/OUT */,
+                                          unsigned int *feature_indexes /* OUT */);
+
+hb_bool_t
+hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
+                                       hb_tag_t      table_tag,
+                                       unsigned int  script_index,
+                                       unsigned int  language_index,
+                                       unsigned int *feature_count /* IN/OUT */,
+                                       hb_tag_t     *feature_tags /* OUT */);
+
+hb_bool_t
+hb_ot_layout_language_find_feature (hb_face_t    *face,
+                                   hb_tag_t      table_tag,
+                                   unsigned int  script_index,
+                                   unsigned int  language_index,
+                                   hb_tag_t      feature_tag,
+                                   unsigned int *feature_index);
+
+hb_bool_t
+hb_ot_layout_feature_get_lookup_indexes (hb_face_t    *face,
+                                        hb_tag_t      table_tag,
+                                        unsigned int  feature_index,
+                                        unsigned int *lookup_count /* IN/OUT */,
+                                        unsigned int *lookup_indexes /* OUT */);
+
+
+/*
+ * GSUB
+ */
+
+hb_bool_t
+hb_ot_layout_has_substitution (hb_face_t *face);
+
+hb_bool_t
+hb_ot_layout_substitute_lookup (hb_face_t    *face,
+                               hb_buffer_t  *buffer,
+                               unsigned int  lookup_index,
+                               hb_mask_t     mask);
+
+/*
+ * GPOS
+ */
+
+hb_bool_t
+hb_ot_layout_has_positioning (hb_face_t *face);
+
+hb_bool_t
+hb_ot_layout_position_lookup   (hb_face_t    *face,
+                               hb_font_t    *font,
+                               hb_buffer_t  *buffer,
+                               unsigned int  lookup_index,
+                               hb_mask_t     mask);
+
+
+HB_END_DECLS
+
+#endif /* HB_OT_LAYOUT_H */
diff --git a/pango/opentype/hb-ot.h b/pango/opentype/hb-ot.h
new file mode 100755 (executable)
index 0000000..c04216b
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_H
+#define HB_OT_H
+
+#include "hb.h"
+
+#include "hb-ot-layout.h"
+
+#endif /* HB_OT_H */
diff --git a/pango/opentype/hb-private.h b/pango/opentype/hb-private.h
new file mode 100755 (executable)
index 0000000..8d885aa
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_PRIVATE_H
+#define HB_PRIVATE_H
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* #define HB_DEBUG 1 */
+#ifndef HB_DEBUG
+#define HB_DEBUG 0
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#if HB_DEBUG
+#include <stdio.h>
+#include <errno.h>
+#endif
+
+#include "hb-common.h"
+
+#define hb_be_uint8
+#define hb_be_int8
+#define hb_be_uint16(v)                        ((uint16_t) hb_be_int16 ((uint16_t) v))
+#define hb_be_uint32(v)                        ((uint32_t) hb_be_int32 ((uint32_t) v))
+
+/* We need external help for these */
+
+#if HAVE_GLIB
+
+#include <glib.h>
+
+/* Macros to convert to/from BigEndian */
+#define hb_be_int16(v)         GINT16_FROM_BE (v)
+#define hb_be_int32(v)         GINT32_FROM_BE (v)
+
+typedef int hb_atomic_int_t;
+#define hb_atomic_int_fetch_and_add(AI, V)     g_atomic_int_exchange_and_add (&(AI), V)
+#define hb_atomic_int_get(AI)                  g_atomic_int_get (&(AI))
+#define hb_atomic_int_set(AI, V)               g_atomic_int_set (&(AI), V)
+
+typedef GStaticMutex hb_mutex_t;
+#define HB_MUTEX_INIT                  G_STATIC_MUTEX_INIT
+#define hb_mutex_init(M)               g_static_mutex_init (&M)
+#define hb_mutex_lock(M)               g_static_mutex_lock (&M)
+#define hb_mutex_trylock(M)            g_static_mutex_trylock (&M)
+#define hb_mutex_unlock(M)             g_static_mutex_unlock (&M)
+
+#else
+#error "Could not find any system to define platform macros, see hb-private.h"
+#endif
+
+
+#define hb_be_uint8_put_unaligned(v,V) (v[0] = (V), 0)
+#define hb_be_uint8_get_unaligned(v)   (uint8_t) (v[0])
+#define hb_be_uint8_cmp_unaligned(a,b) (a[0] == b[0])
+#define hb_be_int8_put_unaligned       hb_be_uint8_put_unaligned
+#define hb_be_int8_get_unaligned       (int8_t) hb_be_uint8_get_unaligned
+#define hb_be_int8_cmp_unaligned       hb_be_uint8_cmp_unaligned
+
+#define hb_be_uint16_put_unaligned(v,V)        (v[0] = (V>>8), v[1] = (V), 0)
+#define hb_be_uint16_get_unaligned(v)  (uint16_t) ((v[0] << 8) + v[1])
+#define hb_be_uint16_cmp_unaligned(a,b)        (a[0] == b[0] && a[1] == b[1])
+#define hb_be_int16_put_unaligned      hb_be_uint16_put_unaligned
+#define hb_be_int16_get_unaligned      (int16_t) hb_be_uint16_get_unaligned
+#define hb_be_int16_cmp_unaligned      hb_be_uint16_cmp_unaligned
+
+#define hb_be_uint32_put_unaligned(v,V)        (v[0] = (V>>24), v[1] = (V>>16), v[2] = (V>>8), v[3] = (V), 0)
+#define hb_be_uint32_get_unaligned(v)  (uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] << 8) + v[3])
+#define hb_be_uint32_cmp_unaligned(a,b)        (a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])
+#define hb_be_int32_put_unaligned      hb_be_uint32_put_unaligned
+#define hb_be_int32_get_unaligned      (int32_t) hb_be_uint32_get_unaligned
+#define hb_be_int32_cmp_unaligned      hb_be_uint32_cmp_unaligned
+
+
+/* Basics */
+
+#undef MIN
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+
+#ifndef HB_INTERNAL
+# define HB_INTERNAL extern
+#endif
+
+#ifndef NULL
+# define NULL ((void *)0)
+#endif
+
+#ifndef FALSE
+# define FALSE 0
+#endif
+
+#ifndef TRUE
+# define TRUE 1
+#endif
+
+#define HB_STMT_START do
+#define HB_STMT_END   while (0)
+
+#define _ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
+#define _ASSERT_STATIC0(_line, _cond) _ASSERT_STATIC1 (_line, (_cond))
+#define ASSERT_STATIC(_cond) _ASSERT_STATIC0 (__LINE__, (_cond))
+
+#define ASSERT_SIZE(_type, _size) ASSERT_STATIC (sizeof (_type) == (_size))
+
+
+#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
+#define _HB_BOOLEAN_EXPR(expr)                   \
+ __extension__ ({                               \
+   int _cairo_boolean_var_;                         \
+   if (expr)                                    \
+      _cairo_boolean_var_ = 1;                      \
+   else                                         \
+      _cairo_boolean_var_ = 0;                      \
+   _cairo_boolean_var_;                             \
+})
+#define HB_LIKELY(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 1))
+#define HB_UNLIKELY(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 0))
+#else
+#define HB_LIKELY(expr) (expr)
+#define HB_UNLIKELY(expr) (expr)
+#endif
+
+#ifndef __GNUC__
+#undef __attribute__
+#define __attribute__(x)
+#endif
+
+#if __GNUC__ >= 3
+#define HB_GNUC_UNUSED __attribute__((unused))
+#define HB_GNUC_PURE   __attribute__((pure))
+#define HB_GNUC_CONST  __attribute__((const))
+#else
+#define HB_GNUC_UNUSED
+#define HB_GNUC_PURE
+#define HB_GNUC_CONST
+#endif
+
+
+#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER)
+#define snprintf _snprintf
+#endif
+
+#ifdef _MSC_VER
+#undef inline
+#define inline __inline
+#endif
+
+#ifdef __STRICT_ANSI__
+#undef inline
+#define inline __inline__
+#endif
+
+
+/* Return the number of 1 bits in mask.
+ *
+ * GCC 3.4 supports a "population count" builtin, which on many targets is
+ * implemented with a single instruction. There is a fallback definition
+ * in libgcc in case a target does not have one, which should be just as
+ * good as the open-coded solution below, (which is "HACKMEM 169").
+ */
+static HB_GNUC_UNUSED inline unsigned int
+_hb_popcount32 (uint32_t mask)
+{
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+    return __builtin_popcount (mask);
+#else
+    register uint32_t y;
+
+    y = (mask >> 1) &033333333333;
+    y = mask - y - ((y >>1) & 033333333333);
+    return (((y + (y >> 3)) & 030707070707) % 077);
+#endif
+}
+
+
+/* Multiplies a 16dot16 value by another value, then truncates the result */
+#define _hb_16dot16_mul_trunc(A,B) ((int64_t) (A) * (B) / 0x10000)
+
+#include "hb-object-private.h"
+
+#endif /* HB_PRIVATE_H */
diff --git a/pango/opentype/hb-shape.c b/pango/opentype/hb-shape.c
new file mode 100755 (executable)
index 0000000..55e2150
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#include "hb-private.h"
+
+#include "hb-shape.h"
+
+
+void
+hb_shape (hb_face_t    *face,
+         hb_font_t    *font,
+         hb_buffer_t  *buffer,
+         hb_feature_t *features,
+         unsigned int  num_features)
+{
+}
+
diff --git a/pango/opentype/hb-shape.h b/pango/opentype/hb-shape.h
new file mode 100755 (executable)
index 0000000..be20592
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_SHAPE_H
+#define HB_SHAPE_H
+
+#include "hb-common.h"
+#include "hb-buffer.h"
+#include "hb-font.h"
+
+HB_BEGIN_DECLS
+
+typedef struct _hb_feature_t {
+  const char   *name;
+  const char   *value;
+  unsigned int  start;
+  unsigned int  end;
+} hb_feature_t;
+
+void
+hb_shape (hb_face_t    *face,
+         hb_font_t    *font,
+         hb_buffer_t  *buffer,
+         hb_feature_t *features,
+         unsigned int  num_features);
+
+
+HB_END_DECLS
+
+#endif /* HB_SHAPE_H */
diff --git a/pango/opentype/hb-unicode-private.h b/pango/opentype/hb-unicode-private.h
new file mode 100755 (executable)
index 0000000..8880245
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_UNICODE_PRIVATE_H
+#define HB_UNICODE_PRIVATE_H
+
+#include "hb-private.h"
+
+#include "hb-unicode.h"
+
+HB_BEGIN_DECLS
+
+/*
+ * hb_unicode_funcs_t
+ */
+
+struct _hb_unicode_funcs_t {
+  hb_reference_count_t ref_count;
+
+  hb_bool_t immutable;
+
+  hb_unicode_get_general_category_func_t       get_general_category;
+  hb_unicode_get_combining_class_func_t                get_combining_class;
+  hb_unicode_get_mirroring_func_t              get_mirroring;
+  hb_unicode_get_script_func_t                 get_script;
+  hb_unicode_get_eastasian_width_func_t                get_eastasian_width;
+};
+
+HB_INTERNAL hb_unicode_funcs_t
+_hb_unicode_funcs_nil;
+
+HB_END_DECLS
+
+#endif /* HB_UNICODE_PRIVATE_H */
diff --git a/pango/opentype/hb-unicode.c b/pango/opentype/hb-unicode.c
new file mode 100755 (executable)
index 0000000..01b54f5
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#include "hb-private.h"
+
+#include "hb-unicode-private.h"
+
+/*
+ * hb_unicode_funcs_t
+ */
+
+static hb_codepoint_t hb_unicode_get_mirroring_nil (hb_codepoint_t unicode) { return unicode; }
+static hb_category_t hb_unicode_get_general_category_nil (hb_codepoint_t unicode) { return HB_CATEGORY_OTHER_LETTER; }
+static hb_script_t hb_unicode_get_script_nil (hb_codepoint_t unicode) { return HB_SCRIPT_UNKNOWN; }
+static unsigned int hb_unicode_get_combining_class_nil (hb_codepoint_t unicode) { return 0; }
+static unsigned int hb_unicode_get_eastasian_width_nil (hb_codepoint_t unicode) { return 1; }
+
+hb_unicode_funcs_t _hb_unicode_funcs_nil = {
+  HB_REFERENCE_COUNT_INVALID, /* ref_count */
+
+  TRUE, /* immutable */
+
+  hb_unicode_get_general_category_nil,
+  hb_unicode_get_combining_class_nil,
+  hb_unicode_get_mirroring_nil,
+  hb_unicode_get_script_nil,
+  hb_unicode_get_eastasian_width_nil
+};
+
+hb_unicode_funcs_t *
+hb_unicode_funcs_create (void)
+{
+  hb_unicode_funcs_t *ufuncs;
+
+  if (!HB_OBJECT_DO_CREATE (hb_unicode_funcs_t, ufuncs))
+    return &_hb_unicode_funcs_nil;
+
+  *ufuncs = _hb_unicode_funcs_nil;
+  HB_OBJECT_DO_INIT (ufuncs);
+
+  return ufuncs;
+}
+
+hb_unicode_funcs_t *
+hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
+{
+  HB_OBJECT_DO_REFERENCE (ufuncs);
+}
+
+unsigned int
+hb_unicode_funcs_get_reference_count (hb_unicode_funcs_t *ufuncs)
+{
+  HB_OBJECT_DO_GET_REFERENCE_COUNT (ufuncs);
+}
+
+void
+hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
+{
+  HB_OBJECT_DO_DESTROY (ufuncs);
+
+  free (ufuncs);
+}
+
+hb_unicode_funcs_t *
+hb_unicode_funcs_copy (hb_unicode_funcs_t *other_ufuncs)
+{
+  hb_unicode_funcs_t *ufuncs;
+
+  if (!HB_OBJECT_DO_CREATE (hb_unicode_funcs_t, ufuncs))
+    return &_hb_unicode_funcs_nil;
+
+  *ufuncs = *other_ufuncs;
+  HB_OBJECT_DO_INIT (ufuncs);
+  ufuncs->immutable = FALSE;
+
+  return ufuncs;
+}
+
+void
+hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
+{
+  if (HB_OBJECT_IS_INERT (ufuncs))
+    return;
+
+  ufuncs->immutable = TRUE;
+}
+
+
+void
+hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
+                                    hb_unicode_get_mirroring_func_t mirroring_func)
+{
+  if (ufuncs->immutable)
+    return;
+
+  ufuncs->get_mirroring = mirroring_func ? mirroring_func : hb_unicode_get_mirroring_nil;
+}
+
+void
+hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
+                                           hb_unicode_get_general_category_func_t general_category_func)
+{
+  if (ufuncs->immutable)
+    return;
+
+  ufuncs->get_general_category = general_category_func ? general_category_func : hb_unicode_get_general_category_nil;
+}
+
+void
+hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
+                                 hb_unicode_get_script_func_t script_func)
+{
+  if (ufuncs->immutable)
+    return;
+
+  ufuncs->get_script = script_func ? script_func : hb_unicode_get_script_nil;
+}
+
+void
+hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
+                                          hb_unicode_get_combining_class_func_t combining_class_func)
+{
+  if (ufuncs->immutable)
+    return;
+
+  ufuncs->get_combining_class = combining_class_func ? combining_class_func : hb_unicode_get_combining_class_nil;
+}
+
+void
+hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
+                                          hb_unicode_get_eastasian_width_func_t eastasian_width_func)
+{
+  if (ufuncs->immutable)
+    return;
+
+  ufuncs->get_eastasian_width = eastasian_width_func ? eastasian_width_func : hb_unicode_get_eastasian_width_nil;
+}
+
diff --git a/pango/opentype/hb-unicode.h b/pango/opentype/hb-unicode.h
new file mode 100755 (executable)
index 0000000..59f198d
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_UNICODE_H
+#define HB_UNICODE_H
+
+#include "hb-common.h"
+
+HB_BEGIN_DECLS
+
+/* Unicode General Category property */
+typedef enum
+{
+  HB_CATEGORY_CONTROL,
+  HB_CATEGORY_FORMAT,
+  HB_CATEGORY_UNASSIGNED,
+  HB_CATEGORY_PRIVATE_USE,
+  HB_CATEGORY_SURROGATE,
+  HB_CATEGORY_LOWERCASE_LETTER,
+  HB_CATEGORY_MODIFIER_LETTER,
+  HB_CATEGORY_OTHER_LETTER,
+  HB_CATEGORY_TITLECASE_LETTER,
+  HB_CATEGORY_UPPERCASE_LETTER,
+  HB_CATEGORY_COMBINING_MARK,
+  HB_CATEGORY_ENCLOSING_MARK,
+  HB_CATEGORY_NON_SPACING_MARK,
+  HB_CATEGORY_DECIMAL_NUMBER,
+  HB_CATEGORY_LETTER_NUMBER,
+  HB_CATEGORY_OTHER_NUMBER,
+  HB_CATEGORY_CONNECT_PUNCTUATION,
+  HB_CATEGORY_DASH_PUNCTUATION,
+  HB_CATEGORY_CLOSE_PUNCTUATION,
+  HB_CATEGORY_FINAL_PUNCTUATION,
+  HB_CATEGORY_INITIAL_PUNCTUATION,
+  HB_CATEGORY_OTHER_PUNCTUATION,
+  HB_CATEGORY_OPEN_PUNCTUATION,
+  HB_CATEGORY_CURRENCY_SYMBOL,
+  HB_CATEGORY_MODIFIER_SYMBOL,
+  HB_CATEGORY_MATH_SYMBOL,
+  HB_CATEGORY_OTHER_SYMBOL,
+  HB_CATEGORY_LINE_SEPARATOR,
+  HB_CATEGORY_PARAGRAPH_SEPARATOR,
+  HB_CATEGORY_SPACE_SEPARATOR
+} hb_category_t;
+
+/* Unicode Script property */
+typedef enum
+{                               /* ISO 15924 code */
+  HB_SCRIPT_INVALID_CODE = -1,
+  HB_SCRIPT_COMMON       = 0,   /* Zyyy */
+  HB_SCRIPT_INHERITED,          /* Qaai */
+  HB_SCRIPT_ARABIC,             /* Arab */
+  HB_SCRIPT_ARMENIAN,           /* Armn */
+  HB_SCRIPT_BENGALI,            /* Beng */
+  HB_SCRIPT_BOPOMOFO,           /* Bopo */
+  HB_SCRIPT_CHEROKEE,           /* Cher */
+  HB_SCRIPT_COPTIC,             /* Qaac */
+  HB_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
+  HB_SCRIPT_DESERET,            /* Dsrt */
+  HB_SCRIPT_DEVANAGARI,         /* Deva */
+  HB_SCRIPT_ETHIOPIC,           /* Ethi */
+  HB_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
+  HB_SCRIPT_GOTHIC,             /* Goth */
+  HB_SCRIPT_GREEK,              /* Grek */
+  HB_SCRIPT_GUJARATI,           /* Gujr */
+  HB_SCRIPT_GURMUKHI,           /* Guru */
+  HB_SCRIPT_HAN,                /* Hani */
+  HB_SCRIPT_HANGUL,             /* Hang */
+  HB_SCRIPT_HEBREW,             /* Hebr */
+  HB_SCRIPT_HIRAGANA,           /* Hira */
+  HB_SCRIPT_KANNADA,            /* Knda */
+  HB_SCRIPT_KATAKANA,           /* Kana */
+  HB_SCRIPT_KHMER,              /* Khmr */
+  HB_SCRIPT_LAO,                /* Laoo */
+  HB_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
+  HB_SCRIPT_MALAYALAM,          /* Mlym */
+  HB_SCRIPT_MONGOLIAN,          /* Mong */
+  HB_SCRIPT_MYANMAR,            /* Mymr */
+  HB_SCRIPT_OGHAM,              /* Ogam */
+  HB_SCRIPT_OLD_ITALIC,         /* Ital */
+  HB_SCRIPT_ORIYA,              /* Orya */
+  HB_SCRIPT_RUNIC,              /* Runr */
+  HB_SCRIPT_SINHALA,            /* Sinh */
+  HB_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
+  HB_SCRIPT_TAMIL,              /* Taml */
+  HB_SCRIPT_TELUGU,             /* Telu */
+  HB_SCRIPT_THAANA,             /* Thaa */
+  HB_SCRIPT_THAI,               /* Thai */
+  HB_SCRIPT_TIBETAN,            /* Tibt */
+  HB_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
+  HB_SCRIPT_YI,                 /* Yiii */
+  HB_SCRIPT_TAGALOG,            /* Tglg */
+  HB_SCRIPT_HANUNOO,            /* Hano */
+  HB_SCRIPT_BUHID,              /* Buhd */
+  HB_SCRIPT_TAGBANWA,           /* Tagb */
+
+  /* Unicode-4.0 additions */
+  HB_SCRIPT_BRAILLE,            /* Brai */
+  HB_SCRIPT_CYPRIOT,            /* Cprt */
+  HB_SCRIPT_LIMBU,              /* Limb */
+  HB_SCRIPT_OSMANYA,            /* Osma */
+  HB_SCRIPT_SHAVIAN,            /* Shaw */
+  HB_SCRIPT_LINEAR_B,           /* Linb */
+  HB_SCRIPT_TAI_LE,             /* Tale */
+  HB_SCRIPT_UGARITIC,           /* Ugar */
+
+  /* Unicode-4.1 additions */
+  HB_SCRIPT_NEW_TAI_LUE,        /* Talu */
+  HB_SCRIPT_BUGINESE,           /* Bugi */
+  HB_SCRIPT_GLAGOLITIC,         /* Glag */
+  HB_SCRIPT_TIFINAGH,           /* Tfng */
+  HB_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
+  HB_SCRIPT_OLD_PERSIAN,        /* Xpeo */
+  HB_SCRIPT_KHAROSHTHI,         /* Khar */
+
+  /* Unicode-5.0 additions */
+  HB_SCRIPT_UNKNOWN,            /* Zzzz */
+  HB_SCRIPT_BALINESE,           /* Bali */
+  HB_SCRIPT_CUNEIFORM,          /* Xsux */
+  HB_SCRIPT_PHOENICIAN,         /* Phnx */
+  HB_SCRIPT_PHAGS_PA,           /* Phag */
+  HB_SCRIPT_NKO,                /* Nkoo */
+
+  /* Unicode-5.1 additions */
+  HB_SCRIPT_KAYAH_LI,           /* Kali */
+  HB_SCRIPT_LEPCHA,             /* Lepc */
+  HB_SCRIPT_REJANG,             /* Rjng */
+  HB_SCRIPT_SUNDANESE,          /* Sund */
+  HB_SCRIPT_SAURASHTRA,         /* Saur */
+  HB_SCRIPT_CHAM,               /* Cham */
+  HB_SCRIPT_OL_CHIKI,           /* Olck */
+  HB_SCRIPT_VAI,                /* Vaii */
+  HB_SCRIPT_CARIAN,             /* Cari */
+  HB_SCRIPT_LYCIAN,             /* Lyci */
+  HB_SCRIPT_LYDIAN              /* Lydi */
+} hb_script_t;
+
+
+/*
+ * hb_unicode_funcs_t
+ */
+
+typedef struct _hb_unicode_funcs_t hb_unicode_funcs_t;
+
+hb_unicode_funcs_t *
+hb_unicode_funcs_create (void);
+
+hb_unicode_funcs_t *
+hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs);
+
+unsigned int
+hb_unicode_funcs_get_reference_count (hb_unicode_funcs_t *ufuncs);
+
+void
+hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs);
+
+hb_unicode_funcs_t *
+hb_unicode_funcs_copy (hb_unicode_funcs_t *ufuncs);
+
+void
+hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs);
+
+
+/* funcs */
+
+typedef hb_codepoint_t (*hb_unicode_get_mirroring_func_t) (hb_codepoint_t unicode);
+typedef hb_category_t (*hb_unicode_get_general_category_func_t) (hb_codepoint_t unicode);
+typedef hb_script_t (*hb_unicode_get_script_func_t) (hb_codepoint_t unicode);
+typedef unsigned int (*hb_unicode_get_combining_class_func_t) (hb_codepoint_t unicode);
+typedef unsigned int (*hb_unicode_get_eastasian_width_func_t) (hb_codepoint_t unicode);
+
+
+void
+hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
+                                    hb_unicode_get_mirroring_func_t mirroring_func);
+
+void
+hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
+                                           hb_unicode_get_general_category_func_t general_category_func);
+
+void
+hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
+                                 hb_unicode_get_script_func_t script_func);
+
+void
+hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
+                                          hb_unicode_get_combining_class_func_t combining_class_func);
+
+void
+hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
+                                          hb_unicode_get_eastasian_width_func_t eastasian_width_func);
+
+
+HB_END_DECLS
+
+#endif /* HB_FONT_H */
diff --git a/pango/opentype/hb.h b/pango/opentype/hb.h
new file mode 100755 (executable)
index 0000000..a948e13
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_H
+#define HB_H
+
+#include "hb-common.h"
+#include "hb-blob.h"
+#include "hb-buffer.h"
+#include "hb-font.h"
+
+#endif /* HB_H */
diff --git a/pango/opentype/main.cc b/pango/opentype/main.cc
new file mode 100755 (executable)
index 0000000..31264a4
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2007,2008,2009  Red Hat, Inc.
+ *
+ *  This is part of HarfBuzz, an OpenType Layout engine library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#define HB_OT_LAYOUT_CC
+#include "hb-open-file-private.hh"
+#include "hb-ot-layout-gdef-private.hh"
+#include "hb-ot-layout-gsubgpos-private.hh"
+
+#include <glib.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+  if (argc != 2) {
+    fprintf (stderr, "usage: %s font-file.ttf\n", argv[0]);
+    exit (1);
+  }
+
+  GMappedFile *mf = g_mapped_file_new (argv[1], FALSE, NULL);
+  const char *font_data = g_mapped_file_get_contents (mf);
+  int len = g_mapped_file_get_length (mf);
+
+  printf ("Opened font file %s: %d bytes long\n", argv[1], len);
+
+  const OpenTypeFontFile &ot = OpenTypeFontFile::get_for_data (font_data);
+
+  switch (ot.tag) {
+  case OpenTypeFontFile::TrueTypeTag:
+    printf ("OpenType font with TrueType outlines\n");
+    break;
+  case OpenTypeFontFile::CFFTag:
+    printf ("OpenType font with CFF (Type1) outlines\n");
+    break;
+  case OpenTypeFontFile::TTCTag:
+    printf ("TrueType Collection of OpenType fonts\n");
+    break;
+  default:
+    printf ("Unknown font format\n");
+    break;
+  }
+
+  int num_fonts = ot.get_face_count ();
+  printf ("%d font(s) found in file\n", num_fonts);
+  for (int n_font = 0; n_font < num_fonts; n_font++) {
+    const OpenTypeFontFace &font = ot.get_face (n_font);
+    printf ("Font %d of %d:\n", n_font, num_fonts);
+
+    int num_tables = font.get_table_count ();
+    printf ("  %d table(s) found in font\n", num_tables);
+    for (int n_table = 0; n_table < num_tables; n_table++) {
+      const OpenTypeTable &table = font.get_table (n_table);
+      printf ("  Table %2d of %2d: %.4s (0x%08x+0x%08x)\n", n_table, num_tables,
+             (const char *)table.tag,
+             (unsigned int) table.offset,
+             (unsigned int) table.length);
+
+      switch (table.tag) {
+
+      case GSUBGPOS::GSUBTag:
+      case GSUBGPOS::GPOSTag:
+       {
+
+       const GSUBGPOS &g = GSUBGPOS::get_for_data (ot.get_table_data (table));
+
+       int num_scripts = g.get_script_count ();
+       printf ("    %d script(s) found in table\n", num_scripts);
+       for (int n_script = 0; n_script < num_scripts; n_script++) {
+         const Script &script = g.get_script (n_script);
+         printf ("    Script %2d of %2d: %.4s\n", n_script, num_scripts,
+                 (const char *)g.get_script_tag(n_script));
+
+         if (!script.has_default_lang_sys())
+           printf ("      No default language system\n");
+         int num_langsys = script.get_lang_sys_count ();
+         printf ("      %d language system(s) found in script\n", num_langsys);
+         for (int n_langsys = script.has_default_lang_sys() ? -1 : 0; n_langsys < num_langsys; n_langsys++) {
+           const LangSys &langsys = n_langsys == -1
+                                  ? script.get_default_lang_sys ()
+                                  : script.get_lang_sys (n_langsys);
+           printf (n_langsys == -1
+                  ? "      Default Language System\n"
+                  : "      Language System %2d of %2d: %.4s\n", n_langsys, num_langsys,
+                   (const char *)script.get_lang_sys_tag (n_langsys));
+           if (langsys.get_required_feature_index () == NO_INDEX)
+             printf ("        No required feature\n");
+
+           int num_features = langsys.get_feature_count ();
+           printf ("        %d feature(s) found in language system\n", num_features);
+           for (int n_feature = 0; n_feature < num_features; n_feature++) {
+             printf ("        Feature index %2d of %2d: %d\n", n_feature, num_features,
+                     langsys.get_feature_index (n_feature));
+           }
+         }
+       }
+
+       int num_features = g.get_feature_count ();
+       printf ("    %d feature(s) found in table\n", num_features);
+       for (int n_feature = 0; n_feature < num_features; n_feature++) {
+         const Feature &feature = g.get_feature (n_feature);
+         printf ("    Feature %2d of %2d: %.4s; %d lookup(s)\n", n_feature, num_features,
+                 (const char *)g.get_feature_tag(n_feature),
+                 feature.get_lookup_count());
+
+         int num_lookups = feature.get_lookup_count ();
+         printf ("        %d lookup(s) found in feature\n", num_lookups);
+         for (int n_lookup = 0; n_lookup < num_lookups; n_lookup++) {
+           printf ("        Lookup index %2d of %2d: %d\n", n_lookup, num_lookups,
+                   feature.get_lookup_index (n_lookup));
+         }
+       }
+
+       int num_lookups = g.get_lookup_count ();
+       printf ("    %d lookup(s) found in table\n", num_lookups);
+       for (int n_lookup = 0; n_lookup < num_lookups; n_lookup++) {
+         const Lookup &lookup = g.get_lookup (n_lookup);
+         printf ("    Lookup %2d of %2d: type %d, flags 0x%04X\n", n_lookup, num_lookups,
+                 lookup.get_type(), lookup.get_flag());
+       }
+
+       }
+       break;
+
+      case GDEF::Tag:
+       {
+
+       const GDEF &gdef = GDEF::get_for_data (ot.get_table_data (table));
+
+       printf ("    Has %sglyph classes\n",
+                 gdef.has_glyph_classes () ? "" : "no ");
+       printf ("    Has %smark attachment types\n",
+                 gdef.has_mark_attachment_types () ? "" : "no ");
+       printf ("    Has %sattach points\n",
+                 gdef.has_attach_points () ? "" : "no ");
+       printf ("    Has %slig carets\n",
+                 gdef.has_lig_carets () ? "" : "no ");
+       printf ("    Has %smark sets\n",
+                 gdef.has_mark_sets () ? "" : "no ");
+       break;
+       }
+      }
+    }
+  }
+
+  return 0;
+}
diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c
new file mode 100755 (executable)
index 0000000..961bb33
--- /dev/null
@@ -0,0 +1,2051 @@
+/* Pango
+ * pango-attributes.c: Attributed text
+ *
+ * Copyright (C) 2000-2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-attributes.h"
+#include "pango-impl-utils.h"
+
+struct _PangoAttrList
+{
+  guint ref_count;
+  GSList *attributes;
+  GSList *attributes_tail;
+};
+
+struct _PangoAttrIterator
+{
+  GSList *next_attribute;
+  GList *attribute_stack;
+  guint start_index;
+  guint end_index;
+};
+
+static PangoAttribute *pango_attr_color_new         (const PangoAttrClass *klass,
+                                                    guint16               red,
+                                                    guint16               green,
+                                                    guint16               blue);
+static PangoAttribute *pango_attr_string_new        (const PangoAttrClass *klass,
+                                                    const char           *str);
+static PangoAttribute *pango_attr_int_new           (const PangoAttrClass *klass,
+                                                    int                   value);
+static PangoAttribute *pango_attr_float_new         (const PangoAttrClass *klass,
+                                                    double                value);
+static PangoAttribute *pango_attr_size_new_internal (int                   size,
+                                                    gboolean              absolute);
+
+
+static GHashTable *name_map = NULL;
+
+/**
+ * pango_attr_type_register:
+ * @name: an identifier for the type
+ *
+ * Allocate a new attribute type ID.  The attribute type name can be accessed
+ * later by using pango_attr_type_get_name().
+ *
+ * Return value: the new type ID.
+ **/
+PangoAttrType
+pango_attr_type_register (const gchar *name)
+{
+  static guint current_type = 0x1000000;
+  guint type = current_type++;
+
+  if (name)
+    {
+      if (G_UNLIKELY (!name_map))
+       name_map = g_hash_table_new (NULL, NULL);
+
+      g_hash_table_insert (name_map, GUINT_TO_POINTER (type), (gpointer) g_intern_string (name));
+    }
+
+  return type;
+}
+
+/**
+ * pango_attr_type_get_name:
+ * @type: an attribute type ID to fetch the name for
+ *
+ * Fetches the attribute type name passed in when registering the type using
+ * pango_attr_type_register().
+ *
+ * The returned value is an interned string (see g_intern_string() for what
+ * that means) that should not be modified or freed.
+ *
+ * Return value: the type ID name (which may be %NULL), or %NULL if @type is
+ * a built-in Pango attribute type or invalid. 
+ *
+ * Since: 1.22
+ **/
+G_CONST_RETURN char *
+pango_attr_type_get_name (PangoAttrType type)
+{
+  const char *result = NULL;
+
+  if (name_map)
+    result = g_hash_table_lookup (name_map, GUINT_TO_POINTER ((guint) type));
+
+  return result;
+}
+
+/**
+ * pango_attribute_init:
+ * @attr: a #PangoAttribute
+ * @klass: a #PangoAttributeClass
+ *
+ * Initializes @attr's klass to @klass,
+ * it's start_index to %PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING
+ * and end_index to %PANGO_ATTR_INDEX_TO_TEXT_END
+ * such that the attribute applies
+ * to the entire text by default.
+ *
+ * Since: 1.20
+ **/
+void
+pango_attribute_init (PangoAttribute       *attr,
+                     const PangoAttrClass *klass)
+{
+  g_return_if_fail (attr != NULL);
+  g_return_if_fail (klass != NULL);
+
+  attr->klass = klass;
+  attr->start_index = PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING;
+  attr->end_index   = PANGO_ATTR_INDEX_TO_TEXT_END;
+}
+
+/**
+ * pango_attribute_copy:
+ * @attr: a #PangoAttribute
+ *
+ * Make a copy of an attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attribute_copy (const PangoAttribute *attr)
+{
+  PangoAttribute *result;
+
+  g_return_val_if_fail (attr != NULL, NULL);
+
+  result = attr->klass->copy (attr);
+  result->start_index = attr->start_index;
+  result->end_index = attr->end_index;
+
+  return result;
+}
+
+/**
+ * pango_attribute_destroy:
+ * @attr: a #PangoAttribute.
+ *
+ * Destroy a #PangoAttribute and free all associated memory.
+ **/
+void
+pango_attribute_destroy (PangoAttribute *attr)
+{
+  g_return_if_fail (attr != NULL);
+
+  attr->klass->destroy (attr);
+}
+
+/**
+ * pango_attribute_equal:
+ * @attr1: a #PangoAttribute
+ * @attr2: another #PangoAttribute
+ *
+ * Compare two attributes for equality. This compares only the
+ * actual value of the two attributes and not the ranges that the
+ * attributes apply to.
+ *
+ * Return value: %TRUE if the two attributes have the same value.
+ **/
+gboolean
+pango_attribute_equal (const PangoAttribute *attr1,
+                      const PangoAttribute *attr2)
+{
+  g_return_val_if_fail (attr1 != NULL, FALSE);
+  g_return_val_if_fail (attr2 != NULL, FALSE);
+
+  if (attr1->klass->type != attr2->klass->type)
+    return FALSE;
+
+  return attr1->klass->equal (attr1, attr2);
+}
+
+static PangoAttribute *
+pango_attr_string_copy (const PangoAttribute *attr)
+{
+  return pango_attr_string_new (attr->klass, ((PangoAttrString *)attr)->value);
+}
+
+static void
+pango_attr_string_destroy (PangoAttribute *attr)
+{
+  PangoAttrString *sattr = (PangoAttrString *)attr;
+
+  g_free (sattr->value);
+  g_slice_free (PangoAttrString, sattr);
+}
+
+static gboolean
+pango_attr_string_equal (const PangoAttribute *attr1,
+                        const PangoAttribute *attr2)
+{
+  return strcmp (((PangoAttrString *)attr1)->value, ((PangoAttrString *)attr2)->value) == 0;
+}
+
+static PangoAttribute *
+pango_attr_string_new (const PangoAttrClass *klass,
+                      const char           *str)
+{
+  PangoAttrString *result = g_slice_new (PangoAttrString);
+  pango_attribute_init (&result->attr, klass);
+  result->value = g_strdup (str);
+
+  return (PangoAttribute *)result;
+}
+
+/**
+ * pango_attr_family_new:
+ * @family: the family or comma separated list of families
+ *
+ * Create a new font family attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_family_new (const char *family)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_FAMILY,
+    pango_attr_string_copy,
+    pango_attr_string_destroy,
+    pango_attr_string_equal
+  };
+
+  g_return_val_if_fail (family != NULL, NULL);
+
+  return pango_attr_string_new (&klass, family);
+}
+
+static PangoAttribute *
+pango_attr_language_copy (const PangoAttribute *attr)
+{
+  return pango_attr_language_new (((PangoAttrLanguage *)attr)->value);
+}
+
+static void
+pango_attr_language_destroy (PangoAttribute *attr)
+{
+  PangoAttrLanguage *lattr = (PangoAttrLanguage *)attr;
+
+  g_slice_free (PangoAttrLanguage, lattr);
+}
+
+static gboolean
+pango_attr_language_equal (const PangoAttribute *attr1,
+                          const PangoAttribute *attr2)
+{
+  return ((PangoAttrLanguage *)attr1)->value == ((PangoAttrLanguage *)attr2)->value;
+}
+
+/**
+ * pango_attr_language_new:
+ * @language: language tag
+ *
+ * Create a new language tag attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_language_new (PangoLanguage *language)
+{
+  PangoAttrLanguage *result;
+
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_LANGUAGE,
+    pango_attr_language_copy,
+    pango_attr_language_destroy,
+    pango_attr_language_equal
+  };
+
+  result = g_slice_new (PangoAttrLanguage);
+  pango_attribute_init (&result->attr, &klass);
+  result->value = language;
+
+  return (PangoAttribute *)result;
+}
+
+static PangoAttribute *
+pango_attr_color_copy (const PangoAttribute *attr)
+{
+  const PangoAttrColor *color_attr = (PangoAttrColor *)attr;
+
+  return pango_attr_color_new (attr->klass,
+                              color_attr->color.red,
+                              color_attr->color.green,
+                              color_attr->color.blue);
+}
+
+static void
+pango_attr_color_destroy (PangoAttribute *attr)
+{
+  PangoAttrColor *cattr = (PangoAttrColor *)attr;
+
+  g_slice_free (PangoAttrColor, cattr);
+}
+
+static gboolean
+pango_attr_color_equal (const PangoAttribute *attr1,
+                       const PangoAttribute *attr2)
+{
+  const PangoAttrColor *color_attr1 = (const PangoAttrColor *)attr1;
+  const PangoAttrColor *color_attr2 = (const PangoAttrColor *)attr2;
+
+  return (color_attr1->color.red == color_attr2->color.red &&
+         color_attr1->color.blue == color_attr2->color.blue &&
+         color_attr1->color.green == color_attr2->color.green);
+}
+
+static PangoAttribute *
+pango_attr_color_new (const PangoAttrClass *klass,
+                     guint16               red,
+                     guint16               green,
+                     guint16               blue)
+{
+  PangoAttrColor *result = g_slice_new (PangoAttrColor);
+  pango_attribute_init (&result->attr, klass);
+  result->color.red = red;
+  result->color.green = green;
+  result->color.blue = blue;
+
+  return (PangoAttribute *)result;
+}
+
+/**
+ * pango_attr_foreground_new:
+ * @red: the red value (ranging from 0 to 65535)
+ * @green: the green value
+ * @blue: the blue value
+ *
+ * Create a new foreground color attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_foreground_new (guint16 red,
+                          guint16 green,
+                          guint16 blue)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_FOREGROUND,
+    pango_attr_color_copy,
+    pango_attr_color_destroy,
+    pango_attr_color_equal
+  };
+
+  return pango_attr_color_new (&klass, red, green, blue);
+}
+
+/**
+ * pango_attr_background_new:
+ * @red: the red value (ranging from 0 to 65535)
+ * @green: the green value
+ * @blue: the blue value
+ *
+ * Create a new background color attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_background_new (guint16 red,
+                          guint16 green,
+                          guint16 blue)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_BACKGROUND,
+    pango_attr_color_copy,
+    pango_attr_color_destroy,
+    pango_attr_color_equal
+  };
+
+  return pango_attr_color_new (&klass, red, green, blue);
+}
+
+static PangoAttribute *
+pango_attr_int_copy (const PangoAttribute *attr)
+{
+  const PangoAttrInt *int_attr = (PangoAttrInt *)attr;
+
+  return pango_attr_int_new (attr->klass, int_attr->value);
+}
+
+static void
+pango_attr_int_destroy (PangoAttribute *attr)
+{
+  PangoAttrInt *iattr = (PangoAttrInt *)attr;
+
+  g_slice_free (PangoAttrInt, iattr);
+}
+
+static gboolean
+pango_attr_int_equal (const PangoAttribute *attr1,
+                     const PangoAttribute *attr2)
+{
+  const PangoAttrInt *int_attr1 = (const PangoAttrInt *)attr1;
+  const PangoAttrInt *int_attr2 = (const PangoAttrInt *)attr2;
+
+  return (int_attr1->value == int_attr2->value);
+}
+
+static PangoAttribute *
+pango_attr_int_new (const PangoAttrClass *klass,
+                   int                   value)
+{
+  PangoAttrInt *result = g_slice_new (PangoAttrInt);
+  pango_attribute_init (&result->attr, klass);
+  result->value = value;
+
+  return (PangoAttribute *)result;
+}
+
+static PangoAttribute *
+pango_attr_float_copy (const PangoAttribute *attr)
+{
+  const PangoAttrFloat *float_attr = (PangoAttrFloat *)attr;
+
+  return pango_attr_float_new (attr->klass, float_attr->value);
+}
+
+static void
+pango_attr_float_destroy (PangoAttribute *attr)
+{
+  PangoAttrFloat *fattr = (PangoAttrFloat *)attr;
+
+  g_slice_free (PangoAttrFloat, fattr);
+}
+
+static gboolean
+pango_attr_float_equal (const PangoAttribute *attr1,
+                       const PangoAttribute *attr2)
+{
+  const PangoAttrFloat *float_attr1 = (const PangoAttrFloat *)attr1;
+  const PangoAttrFloat *float_attr2 = (const PangoAttrFloat *)attr2;
+
+  return (float_attr1->value == float_attr2->value);
+}
+
+static PangoAttribute*
+pango_attr_float_new  (const PangoAttrClass *klass,
+                      double                value)
+{
+  PangoAttrFloat *result = g_slice_new (PangoAttrFloat);
+  pango_attribute_init (&result->attr, klass);
+  result->value = value;
+
+  return (PangoAttribute *)result;
+}
+
+static PangoAttribute *
+pango_attr_size_copy (const PangoAttribute *attr)
+{
+  const PangoAttrSize *size_attr = (PangoAttrSize *)attr;
+
+  if (attr->klass->type == PANGO_ATTR_ABSOLUTE_SIZE)
+    return pango_attr_size_new_absolute (size_attr->size);
+  else
+    return pango_attr_size_new (size_attr->size);
+}
+
+static void
+pango_attr_size_destroy (PangoAttribute *attr)
+{
+  PangoAttrSize *sattr = (PangoAttrSize *)attr;
+
+  g_slice_free (PangoAttrSize, sattr);
+}
+
+static gboolean
+pango_attr_size_equal (const PangoAttribute *attr1,
+                      const PangoAttribute *attr2)
+{
+  const PangoAttrSize *size_attr1 = (const PangoAttrSize *)attr1;
+  const PangoAttrSize *size_attr2 = (const PangoAttrSize *)attr2;
+
+  return size_attr1->size == size_attr2->size;
+}
+
+static PangoAttribute *
+pango_attr_size_new_internal (int size,
+                             gboolean absolute)
+{
+  PangoAttrSize *result;
+
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_SIZE,
+    pango_attr_size_copy,
+    pango_attr_size_destroy,
+    pango_attr_size_equal
+  };
+  static const PangoAttrClass absolute_klass = {
+    PANGO_ATTR_ABSOLUTE_SIZE,
+    pango_attr_size_copy,
+    pango_attr_size_destroy,
+    pango_attr_size_equal
+  };
+
+  result = g_slice_new (PangoAttrSize);
+  pango_attribute_init (&result->attr, absolute ? &absolute_klass : &klass);
+  result->size = size;
+  result->absolute = absolute;
+
+  return (PangoAttribute *)result;
+}
+
+/**
+ * pango_attr_size_new:
+ * @size: the font size, in %PANGO_SCALE<!-- -->ths of a point.
+ *
+ * Create a new font-size attribute in fractional points.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_size_new (int size)
+{
+  return pango_attr_size_new_internal (size, FALSE);
+}
+
+/**
+ * pango_attr_size_new_absolute:
+ * @size: the font size, in %PANGO_SCALE<!-- -->ths of a device unit.
+ *
+ * Create a new font-size attribute in device units.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.8
+ **/
+PangoAttribute *
+pango_attr_size_new_absolute (int size)
+{
+  return pango_attr_size_new_internal (size, TRUE);
+}
+
+/**
+ * pango_attr_style_new:
+ * @style: the slant style
+ *
+ * Create a new font slant style attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_style_new (PangoStyle style)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_STYLE,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)style);
+}
+
+/**
+ * pango_attr_weight_new:
+ * @weight: the weight
+ *
+ * Create a new font weight attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_weight_new (PangoWeight weight)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_WEIGHT,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)weight);
+}
+
+/**
+ * pango_attr_variant_new:
+ * @variant: the variant
+ *
+ * Create a new font variant attribute (normal or small caps)
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_variant_new (PangoVariant variant)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_VARIANT,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)variant);
+}
+
+/**
+ * pango_attr_stretch_new:
+ * @stretch: the stretch
+ *
+ * Create a new font stretch attribute
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_stretch_new (PangoStretch  stretch)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_STRETCH,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)stretch);
+}
+
+static PangoAttribute *
+pango_attr_font_desc_copy (const PangoAttribute *attr)
+{
+  const PangoAttrFontDesc *desc_attr = (const PangoAttrFontDesc *)attr;
+
+  return pango_attr_font_desc_new (desc_attr->desc);
+}
+
+static void
+pango_attr_font_desc_destroy (PangoAttribute *attr)
+{
+  PangoAttrFontDesc *desc_attr = (PangoAttrFontDesc *)attr;
+
+  pango_font_description_free (desc_attr->desc);
+  g_slice_free (PangoAttrFontDesc, desc_attr);
+}
+
+static gboolean
+pango_attr_font_desc_equal (const PangoAttribute *attr1,
+                           const PangoAttribute *attr2)
+{
+  const PangoAttrFontDesc *desc_attr1 = (const PangoAttrFontDesc *)attr1;
+  const PangoAttrFontDesc *desc_attr2 = (const PangoAttrFontDesc *)attr2;
+
+  return pango_font_description_get_set_fields (desc_attr1->desc) ==
+         pango_font_description_get_set_fields (desc_attr2->desc) &&
+        pango_font_description_equal (desc_attr1->desc, desc_attr2->desc);
+}
+
+/**
+ * pango_attr_font_desc_new:
+ * @desc: the font description
+ *
+ * Create a new font description attribute. This attribute
+ * allows setting family, style, weight, variant, stretch,
+ * and size simultaneously.
+ *
+ * Return value:  the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_font_desc_new (const PangoFontDescription *desc)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_FONT_DESC,
+    pango_attr_font_desc_copy,
+    pango_attr_font_desc_destroy,
+    pango_attr_font_desc_equal
+  };
+
+  PangoAttrFontDesc *result = g_slice_new (PangoAttrFontDesc);
+  pango_attribute_init (&result->attr, &klass);
+  result->desc = pango_font_description_copy (desc);
+
+  return (PangoAttribute *)result;
+}
+
+
+/**
+ * pango_attr_underline_new:
+ * @underline: the underline style.
+ *
+ * Create a new underline-style attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_underline_new (PangoUnderline underline)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_UNDERLINE,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)underline);
+}
+
+/**
+ * pango_attr_underline_color_new:
+ * @red: the red value (ranging from 0 to 65535)
+ * @green: the green value
+ * @blue: the blue value
+ *
+ * Create a new underline color attribute. This attribute
+ * modifies the color of underlines. If not set, underlines
+ * will use the foreground color.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.8
+ **/
+PangoAttribute *
+pango_attr_underline_color_new (guint16 red,
+                               guint16 green,
+                               guint16 blue)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_UNDERLINE_COLOR,
+    pango_attr_color_copy,
+    pango_attr_color_destroy,
+    pango_attr_color_equal
+  };
+
+  return pango_attr_color_new (&klass, red, green, blue);
+}
+
+/**
+ * pango_attr_strikethrough_new:
+ * @strikethrough: %TRUE if the text should be struck-through.
+ *
+ * Create a new strike-through attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_strikethrough_new (gboolean strikethrough)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_STRIKETHROUGH,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)strikethrough);
+}
+
+/**
+ * pango_attr_strikethrough_color_new:
+ * @red: the red value (ranging from 0 to 65535)
+ * @green: the green value
+ * @blue: the blue value
+ *
+ * Create a new strikethrough color attribute. This attribute
+ * modifies the color of strikethrough lines. If not set, strikethrough
+ * lines will use the foreground color.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.8
+ **/
+PangoAttribute *
+pango_attr_strikethrough_color_new (guint16 red,
+                                   guint16 green,
+                                   guint16 blue)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_STRIKETHROUGH_COLOR,
+    pango_attr_color_copy,
+    pango_attr_color_destroy,
+    pango_attr_color_equal
+  };
+
+  return pango_attr_color_new (&klass, red, green, blue);
+}
+
+/**
+ * pango_attr_rise_new:
+ * @rise: the amount that the text should be displaced vertically,
+ *        in Pango units. Positive values displace the text upwards.
+ *
+ * Create a new baseline displacement attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_rise_new (int rise)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_RISE,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)rise);
+}
+
+/**
+ * pango_attr_scale_new:
+ * @scale_factor: factor to scale the font
+ *
+ * Create a new font size scale attribute. The base font for the
+ * affected text will have its size multiplied by @scale_factor.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute*
+pango_attr_scale_new (double scale_factor)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_SCALE,
+    pango_attr_float_copy,
+    pango_attr_float_destroy,
+    pango_attr_float_equal
+  };
+
+  return pango_attr_float_new (&klass, scale_factor);
+}
+
+/**
+ * pango_attr_fallback_new:
+ * @enable_fallback: %TRUE if we should fall back on other fonts
+ *                   for characters the active font is missing.
+ *
+ * Create a new font fallback attribute.
+ *
+ * If fallback is disabled, characters will only be used from the
+ * closest matching font on the system. No fallback will be done to
+ * other fonts on the system that might contain the characters in the
+ * text.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.4
+ **/
+PangoAttribute *
+pango_attr_fallback_new (gboolean enable_fallback)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_FALLBACK,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal,
+  };
+
+  return pango_attr_int_new (&klass, (int)enable_fallback);
+}
+
+/**
+ * pango_attr_letter_spacing_new:
+ * @letter_spacing: amount of extra space to add between graphemes
+ *   of the text, in Pango units.
+ *
+ * Create a new letter-spacing attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.6
+ **/
+PangoAttribute *
+pango_attr_letter_spacing_new (int letter_spacing)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_LETTER_SPACING,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, letter_spacing);
+}
+
+static PangoAttribute *
+pango_attr_shape_copy (const PangoAttribute *attr)
+{
+  const PangoAttrShape *shape_attr = (PangoAttrShape *)attr;
+  gpointer data;
+
+  if (shape_attr->copy_func)
+    data = shape_attr->copy_func (shape_attr->data);
+  else
+    data = shape_attr->data;
+
+  return pango_attr_shape_new_with_data (&shape_attr->ink_rect, &shape_attr->logical_rect,
+                                        data, shape_attr->copy_func, shape_attr->destroy_func);
+}
+
+static void
+pango_attr_shape_destroy (PangoAttribute *attr)
+{
+  PangoAttrShape *shape_attr = (PangoAttrShape *)attr;
+
+  if (shape_attr->destroy_func)
+    shape_attr->destroy_func (shape_attr->data);
+
+  g_slice_free (PangoAttrShape, shape_attr);
+}
+
+static gboolean
+pango_attr_shape_equal (const PangoAttribute *attr1,
+                       const PangoAttribute *attr2)
+{
+  const PangoAttrShape *shape_attr1 = (const PangoAttrShape *)attr1;
+  const PangoAttrShape *shape_attr2 = (const PangoAttrShape *)attr2;
+
+  return (shape_attr1->logical_rect.x == shape_attr2->logical_rect.x &&
+         shape_attr1->logical_rect.y == shape_attr2->logical_rect.y &&
+         shape_attr1->logical_rect.width == shape_attr2->logical_rect.width &&
+         shape_attr1->logical_rect.height == shape_attr2->logical_rect.height &&
+         shape_attr1->ink_rect.x == shape_attr2->ink_rect.x &&
+         shape_attr1->ink_rect.y == shape_attr2->ink_rect.y &&
+         shape_attr1->ink_rect.width == shape_attr2->ink_rect.width &&
+         shape_attr1->ink_rect.height == shape_attr2->ink_rect.height &&
+         shape_attr1->data == shape_attr2->data);
+}
+
+/**
+ * pango_attr_shape_new_with_data:
+ * @ink_rect:     ink rectangle to assign to each character
+ * @logical_rect: logical rectangle to assign to each character
+ * @data:         user data pointer
+ * @copy_func:    function to copy @data when the attribute
+ *                is copied. If %NULL, @data is simply copied
+ *                as a pointer.
+ * @destroy_func: function to free @data when the attribute
+ *                is freed, or %NULL
+ *
+ * Like pango_attr_shape_new(), but a user data pointer is also
+ * provided; this pointer can be accessed when later
+ * rendering the glyph.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.8
+ **/
+PangoAttribute *
+pango_attr_shape_new_with_data (const PangoRectangle  *ink_rect,
+                               const PangoRectangle  *logical_rect,
+                               gpointer               data,
+                               PangoAttrDataCopyFunc  copy_func,
+                               GDestroyNotify         destroy_func)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_SHAPE,
+    pango_attr_shape_copy,
+    pango_attr_shape_destroy,
+    pango_attr_shape_equal
+  };
+
+  PangoAttrShape *result;
+
+  g_return_val_if_fail (ink_rect != NULL, NULL);
+  g_return_val_if_fail (logical_rect != NULL, NULL);
+
+  result = g_slice_new (PangoAttrShape);
+  pango_attribute_init (&result->attr, &klass);
+  result->ink_rect = *ink_rect;
+  result->logical_rect = *logical_rect;
+  result->data = data;
+  result->copy_func = copy_func;
+  result->destroy_func =  destroy_func;
+
+  return (PangoAttribute *)result;
+}
+
+/**
+ * pango_attr_shape_new:
+ * @ink_rect:     ink rectangle to assign to each character
+ * @logical_rect: logical rectangle to assign to each character
+ *
+ * Create a new shape attribute. A shape is used to impose a
+ * particular ink and logical rectangle on the result of shaping a
+ * particular glyph. This might be used, for instance, for
+ * embedding a picture or a widget inside a #PangoLayout.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ **/
+PangoAttribute *
+pango_attr_shape_new (const PangoRectangle *ink_rect,
+                     const PangoRectangle *logical_rect)
+{
+  g_return_val_if_fail (ink_rect != NULL, NULL);
+  g_return_val_if_fail (logical_rect != NULL, NULL);
+
+  return pango_attr_shape_new_with_data (ink_rect, logical_rect,
+                                        NULL, NULL, NULL);
+}
+
+/**
+ * pango_attr_gravity_new:
+ * @gravity: the gravity value; should not be %PANGO_GRAVITY_AUTO.
+ *
+ * Create a new gravity attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.16
+ **/
+PangoAttribute *
+pango_attr_gravity_new (PangoGravity gravity)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_GRAVITY,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  g_return_val_if_fail (gravity != PANGO_GRAVITY_AUTO, NULL);
+
+  return pango_attr_int_new (&klass, (int)gravity);
+}
+
+/**
+ * pango_attr_gravity_hint_new:
+ * @hint: the gravity hint value.
+ *
+ * Create a new gravity hint attribute.
+ *
+ * Return value: the newly allocated #PangoAttribute, which should be
+ *               freed with pango_attribute_destroy().
+ *
+ * Since: 1.16
+ **/
+PangoAttribute *
+pango_attr_gravity_hint_new (PangoGravityHint hint)
+{
+  static const PangoAttrClass klass = {
+    PANGO_ATTR_GRAVITY_HINT,
+    pango_attr_int_copy,
+    pango_attr_int_destroy,
+    pango_attr_int_equal
+  };
+
+  return pango_attr_int_new (&klass, (int)hint);
+}
+
+
+/*
+ * Attribute List
+ */
+
+GType
+pango_attr_list_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoAttrList"),
+                                            (GBoxedCopyFunc) pango_attr_list_copy,
+                                            (GBoxedFreeFunc) pango_attr_list_unref);
+
+  return our_type;
+}
+
+/**
+ * pango_attr_list_new:
+ *
+ * Create a new empty attribute list with a reference count of one.
+ *
+ * Return value: the newly allocated #PangoAttrList, which should
+ *               be freed with pango_attr_list_unref().
+ **/
+PangoAttrList *
+pango_attr_list_new (void)
+{
+  PangoAttrList *list = g_slice_new (PangoAttrList);
+
+  list->ref_count = 1;
+  list->attributes = NULL;
+  list->attributes_tail = NULL;
+
+  return list;
+}
+
+/**
+ * pango_attr_list_ref:
+ * @list: a #PangoAttrList, may be %NULL
+ *
+ * Increase the reference count of the given attribute list by one.
+ *
+ * Return value: The attribute list passed in
+ *
+ * Since: 1.10
+ **/
+PangoAttrList *
+pango_attr_list_ref (PangoAttrList *list)
+{
+  if (list == NULL)
+    return NULL;
+
+  g_atomic_int_inc ((int *) &list->ref_count);
+
+  return list;
+}
+
+/**
+ * pango_attr_list_unref:
+ * @list: a #PangoAttrList, may be %NULL
+ *
+ * Decrease the reference count of the given attribute list by one.
+ * If the result is zero, free the attribute list and the attributes
+ * it contains.
+ **/
+void
+pango_attr_list_unref (PangoAttrList *list)
+{
+  GSList *tmp_list;
+
+  if (list == NULL)
+    return;
+
+  g_return_if_fail (list->ref_count > 0);
+
+  if (g_atomic_int_dec_and_test ((int *) &list->ref_count))
+    {
+      tmp_list = list->attributes;
+      while (tmp_list)
+       {
+         PangoAttribute *attr = tmp_list->data;
+         tmp_list = tmp_list->next;
+
+         attr->klass->destroy (attr);
+       }
+
+      g_slist_free (list->attributes);
+
+      g_slice_free (PangoAttrList, list);
+    }
+}
+
+/**
+ * pango_attr_list_copy:
+ * @list: a #PangoAttrList, may be %NULL
+ *
+ * Copy @list and return an identical new list.
+ *
+ * Return value: the newly allocated #PangoAttrList, with a
+ *               reference count of one, which should
+ *               be freed with pango_attr_list_unref().
+ *               Returns %NULL if @list was %NULL.
+ **/
+PangoAttrList *
+pango_attr_list_copy (PangoAttrList *list)
+{
+  PangoAttrList *new;
+  GSList *iter;
+  GSList *new_attrs;
+
+  if (list == NULL)
+    return NULL;
+
+  new = pango_attr_list_new ();
+
+  iter = list->attributes;
+  new_attrs = NULL;
+  while (iter != NULL)
+    {
+      new_attrs = g_slist_prepend (new_attrs,
+                                  pango_attribute_copy (iter->data));
+
+      iter = g_slist_next (iter);
+    }
+
+  /* we're going to reverse the nodes, so head becomes tail */
+  new->attributes_tail = new_attrs;
+  new->attributes = g_slist_reverse (new_attrs);
+
+  return new;
+}
+
+static void
+pango_attr_list_insert_internal (PangoAttrList  *list,
+                                PangoAttribute *attr,
+                                gboolean        before)
+{
+  GSList *tmp_list, *prev, *link;
+  guint start_index = attr->start_index;
+
+  if (!list->attributes)
+    {
+      list->attributes = g_slist_prepend (NULL, attr);
+      list->attributes_tail = list->attributes;
+    }
+  else if (((PangoAttribute *)list->attributes_tail->data)->start_index < start_index ||
+          (!before && ((PangoAttribute *)list->attributes_tail->data)->start_index == start_index))
+    {
+      list->attributes_tail = g_slist_append (list->attributes_tail, attr);
+      list->attributes_tail = list->attributes_tail->next;
+      g_assert (list->attributes_tail);
+    }
+  else
+    {
+      prev = NULL;
+      tmp_list = list->attributes;
+      while (1)
+       {
+         PangoAttribute *tmp_attr = tmp_list->data;
+
+         if (tmp_attr->start_index > start_index ||
+             (before && tmp_attr->start_index == start_index))
+           {
+             link = g_slist_alloc ();
+             link->next = tmp_list;
+             link->data = attr;
+
+             if (prev)
+               prev->next = link;
+             else
+               list->attributes = link;
+
+             if (!tmp_list)
+               list->attributes_tail = link;
+
+             break;
+           }
+
+         prev = tmp_list;
+         tmp_list = tmp_list->next;
+       }
+    }
+}
+
+/**
+ * pango_attr_list_insert:
+ * @list: a #PangoAttrList
+ * @attr: the attribute to insert. Ownership of this value is
+ *        assumed by the list.
+ *
+ * Insert the given attribute into the #PangoAttrList. It will
+ * be inserted after all other attributes with a matching
+ * @start_index.
+ **/
+void
+pango_attr_list_insert (PangoAttrList  *list,
+                       PangoAttribute *attr)
+{
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (attr != NULL);
+
+  pango_attr_list_insert_internal (list, attr, FALSE);
+}
+
+/**
+ * pango_attr_list_insert_before:
+ * @list: a #PangoAttrList
+ * @attr: the attribute to insert. Ownership of this value is
+ *        assumed by the list.
+ *
+ * Insert the given attribute into the #PangoAttrList. It will
+ * be inserted before all other attributes with a matching
+ * @start_index.
+ **/
+void
+pango_attr_list_insert_before (PangoAttrList  *list,
+                              PangoAttribute *attr)
+{
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (attr != NULL);
+
+  pango_attr_list_insert_internal (list, attr, TRUE);
+}
+
+/**
+ * pango_attr_list_change:
+ * @list: a #PangoAttrList
+ * @attr: the attribute to insert. Ownership of this value is
+ *        assumed by the list.
+ *
+ * Insert the given attribute into the #PangoAttrList. It will
+ * replace any attributes of the same type on that segment
+ * and be merged with any adjoining attributes that are identical.
+ *
+ * This function is slower than pango_attr_list_insert() for
+ * creating a attribute list in order (potentially much slower
+ * for large lists). However, pango_attr_list_insert() is not
+ * suitable for continually changing a set of attributes
+ * since it never removes or combines existing attributes.
+ **/
+void
+pango_attr_list_change (PangoAttrList  *list,
+                       PangoAttribute *attr)
+{
+  GSList *tmp_list, *prev, *link;
+  guint start_index = attr->start_index;
+  guint end_index = attr->end_index;
+
+  g_return_if_fail (list != NULL);
+
+  if (start_index == end_index)        /* empty, nothing to do */
+    {
+      pango_attribute_destroy (attr);
+      return;
+    }
+
+  tmp_list = list->attributes;
+  prev = NULL;
+  while (1)
+    {
+      PangoAttribute *tmp_attr;
+
+      if (!tmp_list ||
+         ((PangoAttribute *)tmp_list->data)->start_index > start_index)
+       {
+         /* We need to insert a new attribute
+          */
+         link = g_slist_alloc ();
+         link->next = tmp_list;
+         link->data = attr;
+
+         if (prev)
+           prev->next = link;
+         else
+           list->attributes = link;
+
+         if (!tmp_list)
+           list->attributes_tail = link;
+
+         prev = link;
+         tmp_list = prev->next;
+         break;
+       }
+
+      tmp_attr = tmp_list->data;
+
+      if (tmp_attr->klass->type == attr->klass->type &&
+         tmp_attr->end_index >= start_index)
+       {
+         /* We overlap with an existing attribute */
+         if (pango_attribute_equal (tmp_attr, attr))
+           {
+             /* We can merge the new attribute with this attribute
+              */
+             if (tmp_attr->end_index >= end_index)
+               {
+                 /* We are totally overlapping the previous attribute.
+                  * No action is needed.
+                  */
+                 pango_attribute_destroy (attr);
+                 return;
+               }
+             tmp_attr->end_index = end_index;
+             pango_attribute_destroy (attr);
+
+             attr = tmp_attr;
+
+             prev = tmp_list;
+             tmp_list = tmp_list->next;
+
+             break;
+           }
+         else
+           {
+             /* Split, truncate, or remove the old attribute
+              */
+             if (tmp_attr->end_index > attr->end_index)
+               {
+                 PangoAttribute *end_attr = pango_attribute_copy (tmp_attr);
+
+                 end_attr->start_index = attr->end_index;
+                 pango_attr_list_insert (list, end_attr);
+               }
+
+             if (tmp_attr->start_index == attr->start_index)
+               {
+                 pango_attribute_destroy (tmp_attr);
+                 tmp_list->data = attr;
+
+                 prev = tmp_list;
+                 tmp_list = tmp_list->next;
+                 break;
+               }
+             else
+               {
+                 tmp_attr->end_index = attr->start_index;
+               }
+           }
+       }
+      prev = tmp_list;
+      tmp_list = tmp_list->next;
+    }
+  /* At this point, prev points to the list node with attr in it,
+   * tmp_list points to prev->next.
+   */
+
+  g_assert (prev->data == attr);
+  g_assert (prev->next == tmp_list);
+
+  /* We now have the range inserted into the list one way or the
+   * other. Fix up the remainder
+   */
+  while (tmp_list)
+    {
+      PangoAttribute *tmp_attr = tmp_list->data;
+
+      if (tmp_attr->start_index > end_index)
+       break;
+      else if (tmp_attr->klass->type == attr->klass->type)
+       {
+         if (tmp_attr->end_index <= attr->end_index ||
+             pango_attribute_equal (tmp_attr, attr))
+           {
+             /* We can merge the new attribute with this attribute.
+              */
+             attr->end_index = MAX (end_index, tmp_attr->end_index);
+
+             pango_attribute_destroy (tmp_attr);
+             prev->next = tmp_list->next;
+
+             if (!prev->next)
+               list->attributes_tail = prev;
+
+             g_slist_free_1 (tmp_list);
+             tmp_list = prev->next;
+
+             continue;
+           }
+         else
+           {
+             /* Trim the start of this attribute that it begins at the end
+              * of the new attribute. This may involve moving
+              * it in the list to maintain the required non-decreasing
+              * order of start indices
+              */
+             GSList *tmp_list2;
+             GSList *prev2;
+
+             tmp_attr->start_index = attr->end_index;
+
+             tmp_list2 = tmp_list->next;
+             prev2 = tmp_list;
+
+             while (tmp_list2)
+               {
+                 PangoAttribute *tmp_attr2 = tmp_list2->data;
+
+                 if (tmp_attr2->start_index >= tmp_attr->start_index)
+                   break;
+
+                 prev2 = tmp_list2;
+                 tmp_list2 = tmp_list2->next;
+               }
+
+             /* Now remove and insert before tmp_list2. We'll
+              * hit this attribute again later, but that's harmless.
+              */
+             if (prev2 != tmp_list)
+               {
+                 GSList *old_next = tmp_list->next;
+
+                 prev->next = old_next;
+                 prev2->next = tmp_list;
+                 tmp_list->next = tmp_list2;
+
+                 if (!tmp_list->next)
+                   list->attributes_tail = tmp_list;
+
+                 tmp_list = old_next;
+
+                 continue;
+               }
+           }
+       }
+
+      prev = tmp_list;
+      tmp_list = tmp_list->next;
+    }
+}
+
+/**
+ * pango_attr_list_splice:
+ * @list: a #PangoAttrList
+ * @other: another #PangoAttrList
+ * @pos: the position in @list at which to insert @other
+ * @len: the length of the spliced segment. (Note that this
+ *       must be specified since the attributes in @other
+ *       may only be present at some subsection of this range)
+ *
+ * This function opens up a hole in @list, fills it in with attributes from
+ * the left, and then merges @other on top of the hole.
+ *
+ * This operation is equivalent to stretching every attribute
+ * that applies at position @pos in @list by an amount @len,
+ * and then calling pango_attr_list_change() with a copy
+ * of each attribute in @other in sequence (offset in position by @pos).
+ *
+ * This operation proves useful for, for instance, inserting
+ * a pre-edit string in the middle of an edit buffer.
+ **/
+void
+pango_attr_list_splice (PangoAttrList *list,
+                       PangoAttrList *other,
+                       gint           pos,
+                       gint           len)
+{
+  GSList *tmp_list;
+  guint upos, ulen;
+
+  g_return_if_fail (list != NULL);
+  g_return_if_fail (other != NULL);
+  g_return_if_fail (pos >= 0);
+  g_return_if_fail (len >= 0);
+
+  upos = (guint)pos;
+  ulen = (guint)len;
+
+/* This definition only works when a and b are unsigned; overflow
+ * isn't defined in the C standard for signed integers
+ */
+#define CLAMP_ADD(a,b) (((a) + (b) < (a)) ? G_MAXUINT : (a) + (b))
+
+  tmp_list = list->attributes;
+  while (tmp_list)
+    {
+      PangoAttribute *attr = tmp_list->data;
+
+      if (attr->start_index <= upos)
+       {
+         if (attr->end_index > upos)
+           attr->end_index = CLAMP_ADD (attr->end_index, ulen);
+       }
+      else
+       {
+         /* This could result in a zero length attribute if it
+          * gets squashed up against G_MAXUINT, but deleting such
+          * an element could (in theory) suprise the caller, so
+          * we don't delete it.
+          */
+         attr->start_index = CLAMP_ADD (attr->start_index, ulen);
+         attr->end_index = CLAMP_ADD (attr->end_index, ulen);
+       }
+
+      tmp_list = tmp_list->next;
+    }
+
+  tmp_list = other->attributes;
+  while (tmp_list)
+    {
+      PangoAttribute *attr = pango_attribute_copy (tmp_list->data);
+      attr->start_index = CLAMP_ADD (attr->start_index, upos);
+      attr->end_index = CLAMP_ADD (attr->end_index, upos);
+
+      /* Same as above, the attribute could be squashed to zero-length; here
+       * pango_attr_list_change() will take care of deleting it.
+       */
+      pango_attr_list_change (list, attr);
+
+      tmp_list = tmp_list->next;
+    }
+#undef CLAMP_ADD
+}
+
+/**
+ * pango_attr_list_get_iterator:
+ * @list: a #PangoAttrList
+ *
+ * Create a iterator initialized to the beginning of the list.
+ * @list must not be modified until this iterator is freed.
+ *
+ * Return value: the newly allocated #PangoAttrIterator, which should
+ *               be freed with pango_attr_iterator_destroy().
+ **/
+PangoAttrIterator *
+pango_attr_list_get_iterator (PangoAttrList  *list)
+{
+  PangoAttrIterator *iterator;
+
+  g_return_val_if_fail (list != NULL, NULL);
+
+  iterator = g_slice_new (PangoAttrIterator);
+  iterator->next_attribute = list->attributes;
+  iterator->attribute_stack = NULL;
+
+  iterator->start_index = 0;
+  iterator->end_index = 0;
+
+  if (!pango_attr_iterator_next (iterator))
+    iterator->end_index = G_MAXUINT;
+
+  return iterator;
+}
+
+/**
+ * pango_attr_iterator_range:
+ * @iterator: a #PangoAttrIterator
+ * @start: location to store the start of the range
+ * @end: location to store the end of the range
+ *
+ * Get the range of the current segment. Note that the
+ * stored return values are signed, not unsigned like
+ * the values in #PangoAttribute. To deal with this API
+ * oversight, stored return values that wouldn't fit into
+ * a signed integer are clamped to %G_MAXINT.
+ **/
+void
+pango_attr_iterator_range (PangoAttrIterator *iterator,
+                          gint              *start,
+                          gint              *end)
+{
+  g_return_if_fail (iterator != NULL);
+
+  if (start)
+    *start = MIN (iterator->start_index, G_MAXINT);
+  if (end)
+    *end = MIN (iterator->end_index, G_MAXINT);
+}
+
+/**
+ * pango_attr_iterator_next:
+ * @iterator: a #PangoAttrIterator
+ *
+ * Advance the iterator until the next change of style.
+ *
+ * Return value: %FALSE if the iterator is at the end of the list, otherwise %TRUE
+ **/
+gboolean
+pango_attr_iterator_next (PangoAttrIterator *iterator)
+{
+  GList *tmp_list;
+
+  g_return_val_if_fail (iterator != NULL, FALSE);
+
+  if (!iterator->next_attribute && !iterator->attribute_stack)
+    return FALSE;
+
+  iterator->start_index = iterator->end_index;
+  iterator->end_index = G_MAXUINT;
+
+  tmp_list = iterator->attribute_stack;
+  while (tmp_list)
+    {
+      GList *next = tmp_list->next;
+      PangoAttribute *attr = tmp_list->data;
+
+      if (attr->end_index == iterator->start_index)
+       {
+         iterator->attribute_stack = g_list_remove_link (iterator->attribute_stack, tmp_list);
+         g_list_free_1 (tmp_list);
+       }
+      else
+       {
+         iterator->end_index = MIN (iterator->end_index, attr->end_index);
+       }
+
+      tmp_list = next;
+    }
+
+  while (iterator->next_attribute &&
+        ((PangoAttribute *)iterator->next_attribute->data)->start_index == iterator->start_index)
+    {
+      if (((PangoAttribute *)iterator->next_attribute->data)->end_index > iterator->start_index)
+       {
+         iterator->attribute_stack = g_list_prepend (iterator->attribute_stack, iterator->next_attribute->data);
+         iterator->end_index = MIN (iterator->end_index, ((PangoAttribute *)iterator->next_attribute->data)->end_index);
+       }
+      iterator->next_attribute = iterator->next_attribute->next;
+    }
+
+  if (iterator->next_attribute)
+    iterator->end_index = MIN (iterator->end_index, ((PangoAttribute *)iterator->next_attribute->data)->start_index);
+
+  return TRUE;
+}
+
+/**
+ * pango_attr_iterator_copy:
+ * @iterator: a #PangoAttrIterator.
+ *
+ * Copy a #PangoAttrIterator
+ *
+ * Return value: the newly allocated #PangoAttrIterator, which should
+ *               be freed with pango_attr_iterator_destroy().
+ **/
+PangoAttrIterator *
+pango_attr_iterator_copy (PangoAttrIterator *iterator)
+{
+  PangoAttrIterator *copy;
+
+  g_return_val_if_fail (iterator != NULL, NULL);
+
+  copy = g_slice_new (PangoAttrIterator);
+
+  *copy = *iterator;
+
+  copy->attribute_stack = g_list_copy (iterator->attribute_stack);
+
+  return copy;
+}
+
+/**
+ * pango_attr_iterator_destroy:
+ * @iterator: a #PangoAttrIterator.
+ *
+ * Destroy a #PangoAttrIterator and free all associated memory.
+ **/
+void
+pango_attr_iterator_destroy (PangoAttrIterator *iterator)
+{
+  g_return_if_fail (iterator != NULL);
+
+  g_list_free (iterator->attribute_stack);
+  g_slice_free (PangoAttrIterator, iterator);
+}
+
+/**
+ * pango_attr_iterator_get:
+ * @iterator: a #PangoAttrIterator
+ * @type: the type of attribute to find.
+ *
+ * Find the current attribute of a particular type at the iterator
+ * location. When multiple attributes of the same type overlap,
+ * the attribute whose range starts closest to the current location
+ * is used.
+ *
+ * Return value: the current attribute of the given type, or %NULL
+ *               if no attribute of that type applies to the current
+ *               location.
+ **/
+PangoAttribute *
+pango_attr_iterator_get (PangoAttrIterator *iterator,
+                        PangoAttrType      type)
+{
+  GList *tmp_list;
+
+  g_return_val_if_fail (iterator != NULL, NULL);
+
+  tmp_list = iterator->attribute_stack;
+  while (tmp_list)
+    {
+      PangoAttribute *attr = tmp_list->data;
+
+      if (attr->klass->type == type)
+       return attr;
+
+      tmp_list = tmp_list->next;
+    }
+
+  return NULL;
+}
+
+/**
+ * pango_attr_iterator_get_font:
+ * @iterator: a #PangoAttrIterator
+ * @desc: a #PangoFontDescription to fill in with the current values.
+ *        The family name in this structure will be set using
+ *        pango_font_description_set_family_static() using values from
+ *        an attribute in the #PangoAttrList associated with the iterator,
+ *        so if you plan to keep it around, you must call:
+ *        <literal>pango_font_description_set_family (desc, pango_font_description_get_family (desc))</literal>.
+ * @language: if non-%NULL, location to store language tag for item, or %NULL
+ *            if none is found.
+ * @extra_attrs: (element type Pango.Attribute): (transfer full): if non-%NULL,
+ *           location in which to store a list of non-font
+ *           attributes at the the current position; only the highest priority
+ *           value of each attribute will be added to this list. In order
+ *           to free this value, you must call pango_attribute_destroy() on
+ *           each member.
+ *
+ * Get the font and other attributes at the current iterator position.
+ **/
+void
+pango_attr_iterator_get_font (PangoAttrIterator     *iterator,
+                             PangoFontDescription  *desc,
+                             PangoLanguage        **language,
+                             GSList               **extra_attrs)
+{
+  GList *tmp_list1;
+  GSList *tmp_list2;
+
+  PangoFontMask mask = 0;
+  gboolean have_language = FALSE;
+  gdouble scale = 0;
+  gboolean have_scale = FALSE;
+
+  g_return_if_fail (iterator != NULL);
+  g_return_if_fail (desc != NULL);
+
+  if (language)
+    *language = NULL;
+
+  if (extra_attrs)
+    *extra_attrs = NULL;
+
+  tmp_list1 = iterator->attribute_stack;
+  while (tmp_list1)
+    {
+      PangoAttribute *attr = tmp_list1->data;
+      tmp_list1 = tmp_list1->next;
+
+      switch ((int) attr->klass->type)
+       {
+       case PANGO_ATTR_FONT_DESC:
+         {
+           PangoFontMask new_mask = pango_font_description_get_set_fields (((PangoAttrFontDesc *)attr)->desc) & ~mask;
+           mask |= new_mask;
+           pango_font_description_unset_fields (desc, new_mask);
+           pango_font_description_merge_static (desc, ((PangoAttrFontDesc *)attr)->desc, FALSE);
+
+           break;
+         }
+       case PANGO_ATTR_FAMILY:
+         if (!(mask & PANGO_FONT_MASK_FAMILY))
+           {
+             mask |= PANGO_FONT_MASK_FAMILY;
+             pango_font_description_set_family (desc, ((PangoAttrString *)attr)->value);
+           }
+         break;
+       case PANGO_ATTR_STYLE:
+         if (!(mask & PANGO_FONT_MASK_STYLE))
+           {
+             mask |= PANGO_FONT_MASK_STYLE;
+             pango_font_description_set_style (desc, ((PangoAttrInt *)attr)->value);
+           }
+         break;
+       case PANGO_ATTR_VARIANT:
+         if (!(mask & PANGO_FONT_MASK_VARIANT))
+           {
+             mask |= PANGO_FONT_MASK_VARIANT;
+             pango_font_description_set_variant (desc, ((PangoAttrInt *)attr)->value);
+           }
+         break;
+       case PANGO_ATTR_WEIGHT:
+         if (!(mask & PANGO_FONT_MASK_WEIGHT))
+           {
+             mask |= PANGO_FONT_MASK_WEIGHT;
+             pango_font_description_set_weight (desc, ((PangoAttrInt *)attr)->value);
+           }
+         break;
+       case PANGO_ATTR_STRETCH:
+         if (!(mask & PANGO_FONT_MASK_STRETCH))
+           {
+             mask |= PANGO_FONT_MASK_STRETCH;
+             pango_font_description_set_stretch (desc, ((PangoAttrInt *)attr)->value);
+           }
+         break;
+       case PANGO_ATTR_SIZE:
+         if (!(mask & PANGO_FONT_MASK_SIZE))
+           {
+             mask |= PANGO_FONT_MASK_SIZE;
+             pango_font_description_set_size (desc, ((PangoAttrSize *)attr)->size);
+           }
+         break;
+       case PANGO_ATTR_ABSOLUTE_SIZE:
+         if (!(mask & PANGO_FONT_MASK_SIZE))
+           {
+             mask |= PANGO_FONT_MASK_SIZE;
+             pango_font_description_set_absolute_size (desc, ((PangoAttrSize *)attr)->size);
+           }
+         break;
+       case PANGO_ATTR_SCALE:
+         if (!have_scale)
+           {
+             have_scale = TRUE;
+             scale = ((PangoAttrFloat *)attr)->value;
+           }
+         break;
+       case PANGO_ATTR_LANGUAGE:
+         if (language)
+           {
+             if (!have_language)
+               {
+                 have_language = TRUE;
+                 *language = ((PangoAttrLanguage *)attr)->value;
+               }
+           }
+         break;
+       default:
+         if (extra_attrs)
+           {
+             gboolean found = FALSE;
+
+             tmp_list2 = *extra_attrs;
+             while (tmp_list2)
+               {
+                 PangoAttribute *old_attr = tmp_list2->data;
+                 if (attr->klass->type == old_attr->klass->type)
+                   {
+                     found = TRUE;
+                     break;
+                   }
+
+                 tmp_list2 = tmp_list2->next;
+               }
+
+             if (!found)
+               *extra_attrs = g_slist_prepend (*extra_attrs, pango_attribute_copy (attr));
+           }
+       }
+    }
+
+  if (have_scale)
+    pango_font_description_set_size (desc, scale * pango_font_description_get_size (desc));
+
+}
+
+/**
+ * pango_attr_list_filter:
+ * @list: a #PangoAttrList
+ * @func: callback function; returns %TRUE if an attribute
+ *        should be filtered out.
+ * @data: Data to be passed to @func
+ *
+ * Given a #PangoAttrList and callback function, removes any elements
+ * of @list for which @func returns %TRUE and inserts them into
+ * a new list.
+ *
+ * Return value: the new #PangoAttrList or %NULL if
+ *  no attributes of the given types were found.
+ *
+ * Since: 1.2
+ **/
+PangoAttrList *
+pango_attr_list_filter (PangoAttrList       *list,
+                       PangoAttrFilterFunc  func,
+                       gpointer             data)
+
+{
+  PangoAttrList *new = NULL;
+  GSList *tmp_list;
+  GSList *prev;
+
+  g_return_val_if_fail (list != NULL, NULL);
+
+  tmp_list = list->attributes;
+  prev = NULL;
+  while (tmp_list)
+    {
+      GSList *next = tmp_list->next;
+      PangoAttribute *tmp_attr = tmp_list->data;
+
+      if ((*func) (tmp_attr, data))
+       {
+         if (!tmp_list->next)
+           list->attributes_tail = prev;
+
+         if (prev)
+           prev->next = tmp_list->next;
+         else
+           list->attributes = tmp_list->next;
+
+         tmp_list->next = NULL;
+
+         if (!new)
+           {
+             new = pango_attr_list_new ();
+             new->attributes = new->attributes_tail = tmp_list;
+           }
+         else
+           {
+             new->attributes_tail->next = tmp_list;
+             new->attributes_tail = tmp_list;
+           }
+
+         goto next_attr;
+       }
+
+      prev = tmp_list;
+
+    next_attr:
+      tmp_list = next;
+    }
+
+  return new;
+}
+
+/**
+ * pango_attr_iterator_get_attrs:
+ * @iterator: a #PangoAttrIterator
+ *
+ * Gets a list of all attributes at the current position of the
+ * iterator.
+ *
+ * Return value: (element-type Pango.Attribute): (transfer full): a list of
+ *   all attributes for the current range.
+ *   To free this value, call pango_attribute_destroy() on
+ *   each value and g_slist_free() on the list.
+ *
+ * Since: 1.2
+ **/
+GSList *
+pango_attr_iterator_get_attrs (PangoAttrIterator *iterator)
+{
+  GSList *attrs = NULL;
+  GList *tmp_list;
+
+  for (tmp_list = iterator->attribute_stack; tmp_list; tmp_list = tmp_list->next)
+    {
+      PangoAttribute *attr = tmp_list->data;
+      GSList *tmp_list2;
+      gboolean found = FALSE;
+
+      for (tmp_list2 = attrs; tmp_list2; tmp_list2 = tmp_list2->next)
+       {
+         PangoAttribute *old_attr = tmp_list2->data;
+         if (attr->klass->type == old_attr->klass->type)
+           {
+             found = TRUE;
+             break;
+           }
+       }
+
+      if (!found)
+       attrs = g_slist_prepend (attrs, pango_attribute_copy (attr));
+    }
+
+  return attrs;
+}
diff --git a/pango/pango-attributes.h b/pango/pango-attributes.h
new file mode 100755 (executable)
index 0000000..866e35d
--- /dev/null
@@ -0,0 +1,280 @@
+/* Pango
+ * pango-attributes.h: Attributed text
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_ATTRIBUTES_H__
+#define __PANGO_ATTRIBUTES_H__
+
+#include <pango/pango-font.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* PangoColor */
+
+typedef struct _PangoColor PangoColor;
+
+struct _PangoColor
+{
+  guint16 red;
+  guint16 green;
+  guint16 blue;
+};
+
+#define PANGO_TYPE_COLOR pango_color_get_type ()
+GType       pango_color_get_type (void) G_GNUC_CONST;
+
+PangoColor *pango_color_copy     (const PangoColor *src);
+void        pango_color_free     (PangoColor       *color);
+gboolean    pango_color_parse    (PangoColor       *color,
+                                 const char       *spec);
+gchar      *pango_color_to_string(const PangoColor *color);
+
+
+/* Attributes */
+
+typedef struct _PangoAttribute    PangoAttribute;
+typedef struct _PangoAttrClass    PangoAttrClass;
+
+typedef struct _PangoAttrString   PangoAttrString;
+typedef struct _PangoAttrLanguage PangoAttrLanguage;
+typedef struct _PangoAttrInt      PangoAttrInt;
+typedef struct _PangoAttrSize     PangoAttrSize;
+typedef struct _PangoAttrFloat    PangoAttrFloat;
+typedef struct _PangoAttrColor    PangoAttrColor;
+typedef struct _PangoAttrFontDesc PangoAttrFontDesc;
+typedef struct _PangoAttrShape    PangoAttrShape;
+
+#define PANGO_TYPE_ATTR_LIST pango_attr_list_get_type ()
+typedef struct _PangoAttrList     PangoAttrList;
+typedef struct _PangoAttrIterator PangoAttrIterator;
+
+typedef enum
+{
+  PANGO_ATTR_INVALID,           /* 0 is an invalid attribute type */
+  PANGO_ATTR_LANGUAGE,         /* PangoAttrLanguage */
+  PANGO_ATTR_FAMILY,           /* PangoAttrString */
+  PANGO_ATTR_STYLE,            /* PangoAttrInt */
+  PANGO_ATTR_WEIGHT,           /* PangoAttrInt */
+  PANGO_ATTR_VARIANT,          /* PangoAttrInt */
+  PANGO_ATTR_STRETCH,          /* PangoAttrInt */
+  PANGO_ATTR_SIZE,             /* PangoAttrSize */
+  PANGO_ATTR_FONT_DESC,                /* PangoAttrFontDesc */
+  PANGO_ATTR_FOREGROUND,       /* PangoAttrColor */
+  PANGO_ATTR_BACKGROUND,       /* PangoAttrColor */
+  PANGO_ATTR_UNDERLINE,                /* PangoAttrInt */
+  PANGO_ATTR_STRIKETHROUGH,    /* PangoAttrInt */
+  PANGO_ATTR_RISE,             /* PangoAttrInt */
+  PANGO_ATTR_SHAPE,            /* PangoAttrShape */
+  PANGO_ATTR_SCALE,             /* PangoAttrFloat */
+  PANGO_ATTR_FALLBACK,          /* PangoAttrInt */
+  PANGO_ATTR_LETTER_SPACING,    /* PangoAttrInt */
+  PANGO_ATTR_UNDERLINE_COLOR,  /* PangoAttrColor */
+  PANGO_ATTR_STRIKETHROUGH_COLOR,/* PangoAttrColor */
+  PANGO_ATTR_ABSOLUTE_SIZE,    /* PangoAttrSize */
+  PANGO_ATTR_GRAVITY,          /* PangoAttrInt */
+  PANGO_ATTR_GRAVITY_HINT      /* PangoAttrInt */
+} PangoAttrType;
+
+typedef enum {
+  PANGO_UNDERLINE_NONE,
+  PANGO_UNDERLINE_SINGLE,
+  PANGO_UNDERLINE_DOUBLE,
+  PANGO_UNDERLINE_LOW,
+  PANGO_UNDERLINE_ERROR
+} PangoUnderline;
+
+#define PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING   0
+#define PANGO_ATTR_INDEX_TO_TEXT_END           G_MAXUINT
+
+struct _PangoAttribute
+{
+  const PangoAttrClass *klass;
+  guint start_index;   /* in bytes */
+  guint end_index;     /* in bytes. The character at this index is not included */
+};
+
+typedef gboolean (*PangoAttrFilterFunc) (PangoAttribute *attribute,
+                                        gpointer        data);
+
+typedef gpointer (*PangoAttrDataCopyFunc) (gconstpointer data);
+
+struct _PangoAttrClass
+{
+  /*< public >*/
+  PangoAttrType type;
+  PangoAttribute * (*copy) (const PangoAttribute *attr);
+  void             (*destroy) (PangoAttribute *attr);
+  gboolean         (*equal) (const PangoAttribute *attr1, const PangoAttribute *attr2);
+};
+
+struct _PangoAttrString
+{
+  PangoAttribute attr;
+  char *value;
+};
+
+struct _PangoAttrLanguage
+{
+  PangoAttribute attr;
+  PangoLanguage *value;
+};
+
+struct _PangoAttrInt
+{
+  PangoAttribute attr;
+  int value;
+};
+
+struct _PangoAttrFloat
+{
+  PangoAttribute attr;
+  double value;
+};
+
+struct _PangoAttrColor
+{
+  PangoAttribute attr;
+  PangoColor color;
+};
+
+struct _PangoAttrSize
+{
+  PangoAttribute attr;
+  int size;
+  guint absolute : 1;
+};
+
+struct _PangoAttrShape
+{
+  PangoAttribute attr;
+  PangoRectangle ink_rect;
+  PangoRectangle logical_rect;
+
+  gpointer              data;
+  PangoAttrDataCopyFunc copy_func;
+  GDestroyNotify        destroy_func;
+};
+
+struct _PangoAttrFontDesc
+{
+  PangoAttribute attr;
+  PangoFontDescription *desc;
+};
+
+PangoAttrType         pango_attr_type_register (const gchar        *name);
+G_CONST_RETURN char * pango_attr_type_get_name (PangoAttrType       type) G_GNUC_CONST;
+
+void             pango_attribute_init        (PangoAttribute       *attr,
+                                             const PangoAttrClass *klass);
+PangoAttribute * pango_attribute_copy        (const PangoAttribute *attr);
+void             pango_attribute_destroy     (PangoAttribute       *attr);
+gboolean         pango_attribute_equal       (const PangoAttribute *attr1,
+                                             const PangoAttribute *attr2) G_GNUC_PURE;
+
+PangoAttribute *pango_attr_language_new      (PangoLanguage              *language);
+PangoAttribute *pango_attr_family_new        (const char                 *family);
+PangoAttribute *pango_attr_foreground_new    (guint16                     red,
+                                             guint16                     green,
+                                             guint16                     blue);
+PangoAttribute *pango_attr_background_new    (guint16                     red,
+                                             guint16                     green,
+                                             guint16                     blue);
+PangoAttribute *pango_attr_size_new          (int                         size);
+PangoAttribute *pango_attr_size_new_absolute (int                         size);
+PangoAttribute *pango_attr_style_new         (PangoStyle                  style);
+PangoAttribute *pango_attr_weight_new        (PangoWeight                 weight);
+PangoAttribute *pango_attr_variant_new       (PangoVariant                variant);
+PangoAttribute *pango_attr_stretch_new       (PangoStretch                stretch);
+PangoAttribute *pango_attr_font_desc_new     (const PangoFontDescription *desc);
+
+PangoAttribute *pango_attr_underline_new           (PangoUnderline underline);
+PangoAttribute *pango_attr_underline_color_new     (guint16        red,
+                                                   guint16        green,
+                                                   guint16        blue);
+PangoAttribute *pango_attr_strikethrough_new       (gboolean       strikethrough);
+PangoAttribute *pango_attr_strikethrough_color_new (guint16        red,
+                                                   guint16        green,
+                                                   guint16        blue);
+
+PangoAttribute *pango_attr_rise_new          (int                         rise);
+PangoAttribute *pango_attr_scale_new         (double                      scale_factor);
+PangoAttribute *pango_attr_fallback_new      (gboolean                    enable_fallback);
+PangoAttribute *pango_attr_letter_spacing_new (int                        letter_spacing);
+
+PangoAttribute *pango_attr_shape_new           (const PangoRectangle       *ink_rect,
+                                               const PangoRectangle       *logical_rect);
+PangoAttribute *pango_attr_shape_new_with_data (const PangoRectangle       *ink_rect,
+                                               const PangoRectangle       *logical_rect,
+                                               gpointer                    data,
+                                               PangoAttrDataCopyFunc       copy_func,
+                                               GDestroyNotify              destroy_func);
+
+PangoAttribute *pango_attr_gravity_new      (PangoGravity     gravity);
+PangoAttribute *pango_attr_gravity_hint_new (PangoGravityHint hint);
+
+GType              pango_attr_list_get_type      (void) G_GNUC_CONST;
+PangoAttrList *    pango_attr_list_new           (void);
+PangoAttrList *    pango_attr_list_ref           (PangoAttrList  *list);
+void               pango_attr_list_unref         (PangoAttrList  *list);
+PangoAttrList *    pango_attr_list_copy          (PangoAttrList  *list);
+void               pango_attr_list_insert        (PangoAttrList  *list,
+                                                 PangoAttribute *attr);
+void               pango_attr_list_insert_before (PangoAttrList  *list,
+                                                 PangoAttribute *attr);
+void               pango_attr_list_change        (PangoAttrList  *list,
+                                                 PangoAttribute *attr);
+void               pango_attr_list_splice        (PangoAttrList  *list,
+                                                 PangoAttrList  *other,
+                                                 gint            pos,
+                                                 gint            len);
+
+PangoAttrList *pango_attr_list_filter (PangoAttrList       *list,
+                                      PangoAttrFilterFunc  func,
+                                      gpointer             data);
+
+PangoAttrIterator *pango_attr_list_get_iterator  (PangoAttrList  *list);
+
+void               pango_attr_iterator_range    (PangoAttrIterator     *iterator,
+                                                gint                  *start,
+                                                gint                  *end);
+gboolean           pango_attr_iterator_next     (PangoAttrIterator     *iterator);
+PangoAttrIterator *pango_attr_iterator_copy     (PangoAttrIterator     *iterator);
+void               pango_attr_iterator_destroy  (PangoAttrIterator     *iterator);
+PangoAttribute *   pango_attr_iterator_get      (PangoAttrIterator     *iterator,
+                                                PangoAttrType          type);
+void               pango_attr_iterator_get_font (PangoAttrIterator     *iterator,
+                                                PangoFontDescription  *desc,
+                                                PangoLanguage        **language,
+                                                GSList               **extra_attrs);
+GSList *          pango_attr_iterator_get_attrs (PangoAttrIterator     *iterator);
+
+
+gboolean pango_parse_markup (const char                 *markup_text,
+                            int                         length,
+                            gunichar                    accel_marker,
+                            PangoAttrList             **attr_list,
+                            char                      **text,
+                            gunichar                   *accel_char,
+                            GError                    **error);
+
+G_END_DECLS
+
+#endif /* __PANGO_ATTRIBUTES_H__ */
diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
new file mode 100755 (executable)
index 0000000..9c37ef7
--- /dev/null
@@ -0,0 +1,203 @@
+/* Pango
+ * pango-bidi-type.c: Bidirectional Character Types
+ *
+ * Copyright (C) 2008 Jürg Billeter <j@bitron.ch>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "pango-bidi-type.h"
+#include "pango-utils.h"
+
+#include "mini-fribidi/fribidi.h"
+
+
+
+/**
+ * pango_bidi_type_for_unichar
+ * @ch: a Unicode character
+ *
+ * Determines the normative bidirectional character type of a
+ * character, as specified in the Unicode Character Database.
+ *
+ * A simplified version of this function is available as
+ * pango_unichar_get_direction().
+ *
+ * Return value: the bidirectional character type, as used in the
+ * Unicode bidirectional algorithm.
+ *
+ * Since: 1.22
+ */
+PangoBidiType
+pango_bidi_type_for_unichar (gunichar ch)
+{
+  FriBidiCharType fribidi_ch_type = fribidi_get_type (ch);
+
+  switch (fribidi_ch_type)
+    {
+    case FRIBIDI_TYPE_LTR:  return PANGO_BIDI_TYPE_L;
+    case FRIBIDI_TYPE_LRE:  return PANGO_BIDI_TYPE_LRE;
+    case FRIBIDI_TYPE_LRO:  return PANGO_BIDI_TYPE_LRO;
+    case FRIBIDI_TYPE_RTL:  return PANGO_BIDI_TYPE_R;
+    case FRIBIDI_TYPE_AL:   return PANGO_BIDI_TYPE_AL;
+    case FRIBIDI_TYPE_RLE:  return PANGO_BIDI_TYPE_RLE;
+    case FRIBIDI_TYPE_RLO:  return PANGO_BIDI_TYPE_RLO;
+    case FRIBIDI_TYPE_PDF:  return PANGO_BIDI_TYPE_PDF;
+    case FRIBIDI_TYPE_EN:   return PANGO_BIDI_TYPE_EN;
+    case FRIBIDI_TYPE_ES:   return PANGO_BIDI_TYPE_ES;
+    case FRIBIDI_TYPE_ET:   return PANGO_BIDI_TYPE_ET;
+    case FRIBIDI_TYPE_AN:   return PANGO_BIDI_TYPE_AN;
+    case FRIBIDI_TYPE_CS:   return PANGO_BIDI_TYPE_CS;
+    case FRIBIDI_TYPE_NSM:  return PANGO_BIDI_TYPE_NSM;
+    case FRIBIDI_TYPE_BN:   return PANGO_BIDI_TYPE_BN;
+    case FRIBIDI_TYPE_BS:   return PANGO_BIDI_TYPE_B;
+    case FRIBIDI_TYPE_SS:   return PANGO_BIDI_TYPE_S;
+    case FRIBIDI_TYPE_WS:   return PANGO_BIDI_TYPE_WS;
+    case FRIBIDI_TYPE_ON:   return PANGO_BIDI_TYPE_ON;
+    default:
+      g_assert_not_reached ();
+      return PANGO_BIDI_TYPE_ON;
+    }
+}
+
+/* Some bidi-related functions */
+
+/**
+ * pango_log2vis_get_embedding_levels:
+ * @text:      the text to itemize.
+ * @length:    the number of bytes (not characters) to process, or -1
+ *             if @text is nul-terminated and the length should be calculated.
+ * @pbase_dir: input base direction, and output resolved direction.
+ *
+ * This will return the bidirectional embedding levels of the input paragraph
+ * as defined by the Unicode Bidirectional Algorithm available at:
+ *
+ *   http://www.unicode.org/reports/tr9/
+ *
+ * If the input base direction is a weak direction, the direction of the
+ * characters in the text will determine the final resolved direction.
+ *
+ * Return value: a newly allocated array of embedding levels, one item per
+ *               character (not byte), that should be freed using g_free.
+ *
+ * Since: 1.4
+ */
+guint8 *
+pango_log2vis_get_embedding_levels (const gchar    *text,
+                                   int             length,
+                                   PangoDirection *pbase_dir)
+{
+  FriBidiCharType fribidi_base_dir;
+  guint8 *embedding_levels_list;
+
+  switch (*pbase_dir)
+    {
+    case PANGO_DIRECTION_LTR:
+    case PANGO_DIRECTION_TTB_RTL:
+      fribidi_base_dir = FRIBIDI_TYPE_L;
+      break;
+    case PANGO_DIRECTION_RTL:
+    case PANGO_DIRECTION_TTB_LTR:
+      fribidi_base_dir = FRIBIDI_TYPE_R;
+      break;
+    case PANGO_DIRECTION_WEAK_RTL:
+      fribidi_base_dir = FRIBIDI_TYPE_WR;
+      break;
+    case PANGO_DIRECTION_WEAK_LTR:
+    case PANGO_DIRECTION_NEUTRAL:
+    default:
+      fribidi_base_dir = FRIBIDI_TYPE_WL;
+      break;
+    }
+
+#ifdef FRIBIDI_HAVE_UTF8
+  {
+    if (length < 0)
+      length = strlen (text);
+    embedding_levels_list = (guint8 *) fribidi_log2vis_get_embedding_levels_new_utf8 (text, length, &fribidi_base_dir);
+  }
+#else
+  {
+    gunichar *text_ucs4;
+    int n_chars;
+    text_ucs4 = g_utf8_to_ucs4_fast (text, length, &n_chars);
+    embedding_levels_list = g_new (guint8, n_chars);
+    fribidi_log2vis_get_embedding_levels ((FriBidiChar*)text_ucs4, n_chars,
+                                         &fribidi_base_dir,
+                                         (FriBidiLevel*)embedding_levels_list);
+    g_free (text_ucs4);
+  }
+#endif
+
+  *pbase_dir = (fribidi_base_dir == FRIBIDI_TYPE_L) ?  PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
+
+  return embedding_levels_list;
+}
+
+/**
+ * pango_unichar_direction:
+ * @ch: a Unicode character
+ *
+ * Determines the inherent direction of a character; either
+ * %PANGO_DIRECTION_LTR, %PANGO_DIRECTION_RTL, or
+ * %PANGO_DIRECTION_NEUTRAL.
+ *
+ * This function is useful to categorize characters into left-to-right
+ * letters, right-to-left letters, and everything else.  If full
+ * Unicode bidirectional type of a character is needed,
+ * pango_bidi_type_for_gunichar() can be used instead.
+ *
+ * Return value: the direction of the character.
+ */
+PangoDirection
+pango_unichar_direction (gunichar ch)
+{
+  FriBidiCharType fribidi_ch_type = fribidi_get_type (ch);
+
+  if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
+    return PANGO_DIRECTION_NEUTRAL;
+  else if (FRIBIDI_IS_RTL (fribidi_ch_type))
+    return PANGO_DIRECTION_RTL;
+  else
+    return PANGO_DIRECTION_LTR;
+}
+
+/**
+ * pango_get_mirror_char:
+ * @ch: a Unicode character
+ * @mirrored_ch: location to store the mirrored character
+ *
+ * If @ch has the Unicode mirrored property and there is another Unicode
+ * character that typically has a glyph that is the mirror image of @ch's
+ * glyph, puts that character in the address pointed to by @mirrored_ch.
+ *
+ * Use g_unichar_get_mirror_char() instead; the docs for that function
+ * provide full details.
+ *
+ * Return value: %TRUE if @ch has a mirrored character and @mirrored_ch is
+ * filled in, %FALSE otherwise
+ **/
+gboolean
+pango_get_mirror_char (gunichar        ch,
+                      gunichar       *mirrored_ch)
+{
+  return g_unichar_get_mirror_char (ch, mirrored_ch);
+}
+
diff --git a/pango/pango-bidi-type.h b/pango/pango-bidi-type.h
new file mode 100755 (executable)
index 0000000..c53b170
--- /dev/null
@@ -0,0 +1,135 @@
+/* Pango
+ * pango-bidi-type.h: Bidirectional Character Types
+ *
+ * Copyright (C) 2008 Jürg Billeter <j@bitron.ch>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_BIDI_TYPE_H__
+#define __PANGO_BIDI_TYPE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PangoBidiType:
+ * @PANGO_BIDI_TYPE_L: Left-to-Right
+ * @PANGO_BIDI_TYPE_LRE: Left-to-Right Embedding
+ * @PANGO_BIDI_TYPE_LRO: Left-to-Right Override
+ * @PANGO_BIDI_TYPE_R: Right-to-Left
+ * @PANGO_BIDI_TYPE_AL: Right-to-Left Arabic
+ * @PANGO_BIDI_TYPE_RLE: Right-to-Left Embedding
+ * @PANGO_BIDI_TYPE_RLO: Right-to-Left Override
+ * @PANGO_BIDI_TYPE_PDF: Pop Directional Format
+ * @PANGO_BIDI_TYPE_EN: European Number
+ * @PANGO_BIDI_TYPE_ES: European Number Separator
+ * @PANGO_BIDI_TYPE_ET: European Number Terminator
+ * @PANGO_BIDI_TYPE_AN: Arabic Number
+ * @PANGO_BIDI_TYPE_CS: Common Number Separator
+ * @PANGO_BIDI_TYPE_NSM: Nonspacing Mark
+ * @PANGO_BIDI_TYPE_BN: Boundary Neutral
+ * @PANGO_BIDI_TYPE_B: Paragraph Separator
+ * @PANGO_BIDI_TYPE_S: Segment Separator
+ * @PANGO_BIDI_TYPE_WS: Whitespace
+ * @PANGO_BIDI_TYPE_ON: Other Neutrals
+ *
+ * The #PangoBidiType type represents the bidirectional character
+ * type of a Unicode character as specified by the
+ * <ulink url="http://www.unicode.org/reports/tr9/">Unicode bidirectional algorithm</ulink>.
+ *
+ * Since: 1.22
+ **/
+typedef enum {
+  /* Strong types */
+  PANGO_BIDI_TYPE_L,
+  PANGO_BIDI_TYPE_LRE,
+  PANGO_BIDI_TYPE_LRO,
+  PANGO_BIDI_TYPE_R,
+  PANGO_BIDI_TYPE_AL,
+  PANGO_BIDI_TYPE_RLE,
+  PANGO_BIDI_TYPE_RLO,
+
+  /* Weak types */
+  PANGO_BIDI_TYPE_PDF,
+  PANGO_BIDI_TYPE_EN,
+  PANGO_BIDI_TYPE_ES,
+  PANGO_BIDI_TYPE_ET,
+  PANGO_BIDI_TYPE_AN,
+  PANGO_BIDI_TYPE_CS,
+  PANGO_BIDI_TYPE_NSM,
+  PANGO_BIDI_TYPE_BN,
+
+  /* Neutral types */
+  PANGO_BIDI_TYPE_B,
+  PANGO_BIDI_TYPE_S,
+  PANGO_BIDI_TYPE_WS,
+  PANGO_BIDI_TYPE_ON
+} PangoBidiType;
+
+PangoBidiType pango_bidi_type_for_unichar (gunichar ch) G_GNUC_CONST;
+
+/**
+ * PangoDirection:
+ * @PANGO_DIRECTION_LTR: A strong left-to-right direction
+ * @PANGO_DIRECTION_RTL: A strong right-to-left direction
+ * @PANGO_DIRECTION_TTB_LTR: Deprecated value; treated the
+ *   same as %PANGO_DIRECTION_RTL.
+ * @PANGO_DIRECTION_TTB_RTL: Deprecated value; treated the
+ *   same as %PANGO_DIRECTION_LTR
+ * @PANGO_DIRECTION_WEAK_LTR: A weak left-to-right direction
+ * @PANGO_DIRECTION_WEAK_RTL: A weak right-to-left direction
+ * @PANGO_DIRECTION_NEUTRAL: No direction specified
+ *
+ * The #PangoDirection type represents a direction in the
+ * Unicode bidirectional algorithm; not every value in this
+ * enumeration makes sense for every usage of #PangoDirection;
+ * for example, the return value of pango_unichar_direction()
+ * and pango_find_base_dir() cannot be %PANGO_DIRECTION_WEAK_LTR
+ * or %PANGO_DIRECTION_WEAK_RTL, since every character is either
+ * neutral or has a strong direction; on the other hand
+ * %PANGO_DIRECTION_NEUTRAL doesn't make sense to pass
+ * to pango_itemize_with_base_dir().
+ *
+ * The %PANGO_DIRECTION_TTB_LTR, %PANGO_DIRECTION_TTB_RTL
+ * values come from an earlier interpretation of this
+ * enumeration as the writing direction of a block of
+ * text and are no longer used; See #PangoGravity for how
+ * vertical text is handled in Pango.
+ **/
+typedef enum {
+  PANGO_DIRECTION_LTR,
+  PANGO_DIRECTION_RTL,
+  PANGO_DIRECTION_TTB_LTR,
+  PANGO_DIRECTION_TTB_RTL,
+  PANGO_DIRECTION_WEAK_LTR,
+  PANGO_DIRECTION_WEAK_RTL,
+  PANGO_DIRECTION_NEUTRAL
+} PangoDirection;
+
+PangoDirection pango_unichar_direction      (gunichar     ch) G_GNUC_CONST;
+PangoDirection pango_find_base_dir          (const gchar *text,
+                                            gint         length);
+
+#ifndef PANGO_DISABLE_DEPRECATED
+gboolean       pango_get_mirror_char        (gunichar     ch,
+                                            gunichar    *mirrored_ch);
+#endif
+
+G_END_DECLS
+
+#endif /* __PANGO_BIDI_TYPE_H__ */
diff --git a/pango/pango-break.h b/pango/pango-break.h
new file mode 100755 (executable)
index 0000000..5c326dd
--- /dev/null
@@ -0,0 +1,120 @@
+/* Pango
+ * pango-break.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_BREAK_H__
+#define __PANGO_BREAK_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#include <pango/pango-item.h>
+
+/* Logical attributes of a character.
+ */
+struct _PangoLogAttr
+{
+  guint is_line_break : 1;      /* Can break line in front of character */
+
+  guint is_mandatory_break : 1; /* Must break line in front of character */
+
+  guint is_char_break : 1;      /* Can break here when doing char wrap */
+
+  guint is_white : 1;           /* Whitespace character */
+
+  /* Cursor can appear in front of character (i.e. this is a grapheme
+   * boundary, or the first character in the text).
+   */
+  guint is_cursor_position : 1;
+
+  /* Note that in degenerate cases, you could have both start/end set on
+   * some text, most likely for sentences (e.g. no space after a period, so
+   * the next sentence starts right away).
+   */
+
+  guint is_word_start : 1;      /* first character in a word */
+  guint is_word_end   : 1;      /* is first non-word char after a word */
+
+  /* There are two ways to divide sentences. The first assigns all
+   * intersentence whitespace/control/format chars to some sentence,
+   * so all chars are in some sentence; is_sentence_boundary denotes
+   * the boundaries there. The second way doesn't assign
+   * between-sentence spaces, etc. to any sentence, so
+   * is_sentence_start/is_sentence_end mark the boundaries of those
+   * sentences.
+   */
+  guint is_sentence_boundary : 1;
+  guint is_sentence_start : 1;  /* first character in a sentence */
+  guint is_sentence_end : 1;    /* first non-sentence char after a sentence */
+
+  /* If set, backspace deletes one character rather than
+   * the entire grapheme cluster.
+   */
+  guint backspace_deletes_character : 1;
+
+  /* Only few space variants (U+0020 and U+00A0) have variable
+   * width during justification.
+   */
+  guint is_expandable_space : 1;
+
+  /* Word boundary as defined by UAX#29 */
+  guint is_word_boundary : 1;  /* is NOT in the middle of a word */
+};
+
+/* Determine information about cluster/word/line breaks in a string
+ * of Unicode text.
+ */
+void pango_break (const gchar   *text,
+                 int            length,
+                 PangoAnalysis *analysis,
+                 PangoLogAttr  *attrs,
+                 int            attrs_len);
+
+void pango_find_paragraph_boundary (const gchar *text,
+                                   gint         length,
+                                   gint        *paragraph_delimiter_index,
+                                   gint        *next_paragraph_start);
+
+void pango_get_log_attrs (const char    *text,
+                         int            length,
+                         int            level,
+                         PangoLanguage *language,
+                         PangoLogAttr  *log_attrs,
+                         int            attrs_len);
+
+#ifdef PANGO_ENABLE_ENGINE
+
+/* This is the default break algorithm, used if no language
+ * engine overrides it. Normally you should use pango_break()
+ * instead; this function is mostly useful for chaining up
+ * from a language engine override.
+ */
+void pango_default_break (const gchar   *text,
+                         int            length,
+                         PangoAnalysis *analysis,
+                         PangoLogAttr  *attrs,
+                         int            attrs_len);
+
+#endif /* PANGO_ENABLE_ENGINE */
+
+G_END_DECLS
+
+#endif /* __PANGO_BREAK_H__ */
diff --git a/pango/pango-color-table.h b/pango/pango-color-table.h
new file mode 100755 (executable)
index 0000000..ce93d94
--- /dev/null
@@ -0,0 +1,1521 @@
+/* pango-color-table.h: Generated by gen-color-table.pl from rgb.txt
+ *
+ *  Date: Fri Mar  4 23:40:25 2005
+ *
+ * Do not edit.
+ */
+static const char color_names[] =
+  "alice blue\0"
+  "AliceBlue\0"
+  "antique white\0"
+  "AntiqueWhite\0"
+  "AntiqueWhite1\0"
+  "AntiqueWhite2\0"
+  "AntiqueWhite3\0"
+  "AntiqueWhite4\0"
+  "aquamarine\0"
+  "aquamarine1\0"
+  "aquamarine2\0"
+  "aquamarine3\0"
+  "aquamarine4\0"
+  "azure\0"
+  "azure1\0"
+  "azure2\0"
+  "azure3\0"
+  "azure4\0"
+  "beige\0"
+  "bisque\0"
+  "bisque1\0"
+  "bisque2\0"
+  "bisque3\0"
+  "bisque4\0"
+  "black\0"
+  "blanched almond\0"
+  "BlanchedAlmond\0"
+  "blue\0"
+  "blue violet\0"
+  "blue1\0"
+  "blue2\0"
+  "blue3\0"
+  "blue4\0"
+  "BlueViolet\0"
+  "brown\0"
+  "brown1\0"
+  "brown2\0"
+  "brown3\0"
+  "brown4\0"
+  "burlywood\0"
+  "burlywood1\0"
+  "burlywood2\0"
+  "burlywood3\0"
+  "burlywood4\0"
+  "cadet blue\0"
+  "CadetBlue\0"
+  "CadetBlue1\0"
+  "CadetBlue2\0"
+  "CadetBlue3\0"
+  "CadetBlue4\0"
+  "chartreuse\0"
+  "chartreuse1\0"
+  "chartreuse2\0"
+  "chartreuse3\0"
+  "chartreuse4\0"
+  "chocolate\0"
+  "chocolate1\0"
+  "chocolate2\0"
+  "chocolate3\0"
+  "chocolate4\0"
+  "coral\0"
+  "coral1\0"
+  "coral2\0"
+  "coral3\0"
+  "coral4\0"
+  "cornflower blue\0"
+  "CornflowerBlue\0"
+  "cornsilk\0"
+  "cornsilk1\0"
+  "cornsilk2\0"
+  "cornsilk3\0"
+  "cornsilk4\0"
+  "cyan\0"
+  "cyan1\0"
+  "cyan2\0"
+  "cyan3\0"
+  "cyan4\0"
+  "dark blue\0"
+  "dark cyan\0"
+  "dark goldenrod\0"
+  "dark gray\0"
+  "dark green\0"
+  "dark grey\0"
+  "dark khaki\0"
+  "dark magenta\0"
+  "dark olive green\0"
+  "dark orange\0"
+  "dark orchid\0"
+  "dark red\0"
+  "dark salmon\0"
+  "dark sea green\0"
+  "dark slate blue\0"
+  "dark slate gray\0"
+  "dark slate grey\0"
+  "dark turquoise\0"
+  "dark violet\0"
+  "DarkBlue\0"
+  "DarkCyan\0"
+  "DarkGoldenrod\0"
+  "DarkGoldenrod1\0"
+  "DarkGoldenrod2\0"
+  "DarkGoldenrod3\0"
+  "DarkGoldenrod4\0"
+  "DarkGray\0"
+  "DarkGreen\0"
+  "DarkGrey\0"
+  "DarkKhaki\0"
+  "DarkMagenta\0"
+  "DarkOliveGreen\0"
+  "DarkOliveGreen1\0"
+  "DarkOliveGreen2\0"
+  "DarkOliveGreen3\0"
+  "DarkOliveGreen4\0"
+  "DarkOrange\0"
+  "DarkOrange1\0"
+  "DarkOrange2\0"
+  "DarkOrange3\0"
+  "DarkOrange4\0"
+  "DarkOrchid\0"
+  "DarkOrchid1\0"
+  "DarkOrchid2\0"
+  "DarkOrchid3\0"
+  "DarkOrchid4\0"
+  "DarkRed\0"
+  "DarkSalmon\0"
+  "DarkSeaGreen\0"
+  "DarkSeaGreen1\0"
+  "DarkSeaGreen2\0"
+  "DarkSeaGreen3\0"
+  "DarkSeaGreen4\0"
+  "DarkSlateBlue\0"
+  "DarkSlateGray\0"
+  "DarkSlateGray1\0"
+  "DarkSlateGray2\0"
+  "DarkSlateGray3\0"
+  "DarkSlateGray4\0"
+  "DarkSlateGrey\0"
+  "DarkTurquoise\0"
+  "DarkViolet\0"
+  "deep pink\0"
+  "deep sky blue\0"
+  "DeepPink\0"
+  "DeepPink1\0"
+  "DeepPink2\0"
+  "DeepPink3\0"
+  "DeepPink4\0"
+  "DeepSkyBlue\0"
+  "DeepSkyBlue1\0"
+  "DeepSkyBlue2\0"
+  "DeepSkyBlue3\0"
+  "DeepSkyBlue4\0"
+  "dim gray\0"
+  "dim grey\0"
+  "DimGray\0"
+  "DimGrey\0"
+  "dodger blue\0"
+  "DodgerBlue\0"
+  "DodgerBlue1\0"
+  "DodgerBlue2\0"
+  "DodgerBlue3\0"
+  "DodgerBlue4\0"
+  "firebrick\0"
+  "firebrick1\0"
+  "firebrick2\0"
+  "firebrick3\0"
+  "firebrick4\0"
+  "floral white\0"
+  "FloralWhite\0"
+  "forest green\0"
+  "ForestGreen\0"
+  "gainsboro\0"
+  "ghost white\0"
+  "GhostWhite\0"
+  "gold\0"
+  "gold1\0"
+  "gold2\0"
+  "gold3\0"
+  "gold4\0"
+  "goldenrod\0"
+  "goldenrod1\0"
+  "goldenrod2\0"
+  "goldenrod3\0"
+  "goldenrod4\0"
+  "gray\0"
+  "gray0\0"
+  "gray1\0"
+  "gray10\0"
+  "gray100\0"
+  "gray11\0"
+  "gray12\0"
+  "gray13\0"
+  "gray14\0"
+  "gray15\0"
+  "gray16\0"
+  "gray17\0"
+  "gray18\0"
+  "gray19\0"
+  "gray2\0"
+  "gray20\0"
+  "gray21\0"
+  "gray22\0"
+  "gray23\0"
+  "gray24\0"
+  "gray25\0"
+  "gray26\0"
+  "gray27\0"
+  "gray28\0"
+  "gray29\0"
+  "gray3\0"
+  "gray30\0"
+  "gray31\0"
+  "gray32\0"
+  "gray33\0"
+  "gray34\0"
+  "gray35\0"
+  "gray36\0"
+  "gray37\0"
+  "gray38\0"
+  "gray39\0"
+  "gray4\0"
+  "gray40\0"
+  "gray41\0"
+  "gray42\0"
+  "gray43\0"
+  "gray44\0"
+  "gray45\0"
+  "gray46\0"
+  "gray47\0"
+  "gray48\0"
+  "gray49\0"
+  "gray5\0"
+  "gray50\0"
+  "gray51\0"
+  "gray52\0"
+  "gray53\0"
+  "gray54\0"
+  "gray55\0"
+  "gray56\0"
+  "gray57\0"
+  "gray58\0"
+  "gray59\0"
+  "gray6\0"
+  "gray60\0"
+  "gray61\0"
+  "gray62\0"
+  "gray63\0"
+  "gray64\0"
+  "gray65\0"
+  "gray66\0"
+  "gray67\0"
+  "gray68\0"
+  "gray69\0"
+  "gray7\0"
+  "gray70\0"
+  "gray71\0"
+  "gray72\0"
+  "gray73\0"
+  "gray74\0"
+  "gray75\0"
+  "gray76\0"
+  "gray77\0"
+  "gray78\0"
+  "gray79\0"
+  "gray8\0"
+  "gray80\0"
+  "gray81\0"
+  "gray82\0"
+  "gray83\0"
+  "gray84\0"
+  "gray85\0"
+  "gray86\0"
+  "gray87\0"
+  "gray88\0"
+  "gray89\0"
+  "gray9\0"
+  "gray90\0"
+  "gray91\0"
+  "gray92\0"
+  "gray93\0"
+  "gray94\0"
+  "gray95\0"
+  "gray96\0"
+  "gray97\0"
+  "gray98\0"
+  "gray99\0"
+  "green\0"
+  "green yellow\0"
+  "green1\0"
+  "green2\0"
+  "green3\0"
+  "green4\0"
+  "GreenYellow\0"
+  "grey\0"
+  "grey0\0"
+  "grey1\0"
+  "grey10\0"
+  "grey100\0"
+  "grey11\0"
+  "grey12\0"
+  "grey13\0"
+  "grey14\0"
+  "grey15\0"
+  "grey16\0"
+  "grey17\0"
+  "grey18\0"
+  "grey19\0"
+  "grey2\0"
+  "grey20\0"
+  "grey21\0"
+  "grey22\0"
+  "grey23\0"
+  "grey24\0"
+  "grey25\0"
+  "grey26\0"
+  "grey27\0"
+  "grey28\0"
+  "grey29\0"
+  "grey3\0"
+  "grey30\0"
+  "grey31\0"
+  "grey32\0"
+  "grey33\0"
+  "grey34\0"
+  "grey35\0"
+  "grey36\0"
+  "grey37\0"
+  "grey38\0"
+  "grey39\0"
+  "grey4\0"
+  "grey40\0"
+  "grey41\0"
+  "grey42\0"
+  "grey43\0"
+  "grey44\0"
+  "grey45\0"
+  "grey46\0"
+  "grey47\0"
+  "grey48\0"
+  "grey49\0"
+  "grey5\0"
+  "grey50\0"
+  "grey51\0"
+  "grey52\0"
+  "grey53\0"
+  "grey54\0"
+  "grey55\0"
+  "grey56\0"
+  "grey57\0"
+  "grey58\0"
+  "grey59\0"
+  "grey6\0"
+  "grey60\0"
+  "grey61\0"
+  "grey62\0"
+  "grey63\0"
+  "grey64\0"
+  "grey65\0"
+  "grey66\0"
+  "grey67\0"
+  "grey68\0"
+  "grey69\0"
+  "grey7\0"
+  "grey70\0"
+  "grey71\0"
+  "grey72\0"
+  "grey73\0"
+  "grey74\0"
+  "grey75\0"
+  "grey76\0"
+  "grey77\0"
+  "grey78\0"
+  "grey79\0"
+  "grey8\0"
+  "grey80\0"
+  "grey81\0"
+  "grey82\0"
+  "grey83\0"
+  "grey84\0"
+  "grey85\0"
+  "grey86\0"
+  "grey87\0"
+  "grey88\0"
+  "grey89\0"
+  "grey9\0"
+  "grey90\0"
+  "grey91\0"
+  "grey92\0"
+  "grey93\0"
+  "grey94\0"
+  "grey95\0"
+  "grey96\0"
+  "grey97\0"
+  "grey98\0"
+  "grey99\0"
+  "honeydew\0"
+  "honeydew1\0"
+  "honeydew2\0"
+  "honeydew3\0"
+  "honeydew4\0"
+  "hot pink\0"
+  "HotPink\0"
+  "HotPink1\0"
+  "HotPink2\0"
+  "HotPink3\0"
+  "HotPink4\0"
+  "indian red\0"
+  "IndianRed\0"
+  "IndianRed1\0"
+  "IndianRed2\0"
+  "IndianRed3\0"
+  "IndianRed4\0"
+  "ivory\0"
+  "ivory1\0"
+  "ivory2\0"
+  "ivory3\0"
+  "ivory4\0"
+  "khaki\0"
+  "khaki1\0"
+  "khaki2\0"
+  "khaki3\0"
+  "khaki4\0"
+  "lavender\0"
+  "lavender blush\0"
+  "LavenderBlush\0"
+  "LavenderBlush1\0"
+  "LavenderBlush2\0"
+  "LavenderBlush3\0"
+  "LavenderBlush4\0"
+  "lawn green\0"
+  "LawnGreen\0"
+  "lemon chiffon\0"
+  "LemonChiffon\0"
+  "LemonChiffon1\0"
+  "LemonChiffon2\0"
+  "LemonChiffon3\0"
+  "LemonChiffon4\0"
+  "light blue\0"
+  "light coral\0"
+  "light cyan\0"
+  "light goldenrod\0"
+  "light goldenrod yellow\0"
+  "light gray\0"
+  "light green\0"
+  "light grey\0"
+  "light pink\0"
+  "light salmon\0"
+  "light sea green\0"
+  "light sky blue\0"
+  "light slate blue\0"
+  "light slate gray\0"
+  "light slate grey\0"
+  "light steel blue\0"
+  "light yellow\0"
+  "LightBlue\0"
+  "LightBlue1\0"
+  "LightBlue2\0"
+  "LightBlue3\0"
+  "LightBlue4\0"
+  "LightCoral\0"
+  "LightCyan\0"
+  "LightCyan1\0"
+  "LightCyan2\0"
+  "LightCyan3\0"
+  "LightCyan4\0"
+  "LightGoldenrod\0"
+  "LightGoldenrod1\0"
+  "LightGoldenrod2\0"
+  "LightGoldenrod3\0"
+  "LightGoldenrod4\0"
+  "LightGoldenrodYellow\0"
+  "LightGray\0"
+  "LightGreen\0"
+  "LightGrey\0"
+  "LightPink\0"
+  "LightPink1\0"
+  "LightPink2\0"
+  "LightPink3\0"
+  "LightPink4\0"
+  "LightSalmon\0"
+  "LightSalmon1\0"
+  "LightSalmon2\0"
+  "LightSalmon3\0"
+  "LightSalmon4\0"
+  "LightSeaGreen\0"
+  "LightSkyBlue\0"
+  "LightSkyBlue1\0"
+  "LightSkyBlue2\0"
+  "LightSkyBlue3\0"
+  "LightSkyBlue4\0"
+  "LightSlateBlue\0"
+  "LightSlateGray\0"
+  "LightSlateGrey\0"
+  "LightSteelBlue\0"
+  "LightSteelBlue1\0"
+  "LightSteelBlue2\0"
+  "LightSteelBlue3\0"
+  "LightSteelBlue4\0"
+  "LightYellow\0"
+  "LightYellow1\0"
+  "LightYellow2\0"
+  "LightYellow3\0"
+  "LightYellow4\0"
+  "lime green\0"
+  "LimeGreen\0"
+  "linen\0"
+  "magenta\0"
+  "magenta1\0"
+  "magenta2\0"
+  "magenta3\0"
+  "magenta4\0"
+  "maroon\0"
+  "maroon1\0"
+  "maroon2\0"
+  "maroon3\0"
+  "maroon4\0"
+  "medium aquamarine\0"
+  "medium blue\0"
+  "medium orchid\0"
+  "medium purple\0"
+  "medium sea green\0"
+  "medium slate blue\0"
+  "medium spring green\0"
+  "medium turquoise\0"
+  "medium violet red\0"
+  "MediumAquamarine\0"
+  "MediumBlue\0"
+  "MediumOrchid\0"
+  "MediumOrchid1\0"
+  "MediumOrchid2\0"
+  "MediumOrchid3\0"
+  "MediumOrchid4\0"
+  "MediumPurple\0"
+  "MediumPurple1\0"
+  "MediumPurple2\0"
+  "MediumPurple3\0"
+  "MediumPurple4\0"
+  "MediumSeaGreen\0"
+  "MediumSlateBlue\0"
+  "MediumSpringGreen\0"
+  "MediumTurquoise\0"
+  "MediumVioletRed\0"
+  "midnight blue\0"
+  "MidnightBlue\0"
+  "mint cream\0"
+  "MintCream\0"
+  "misty rose\0"
+  "MistyRose\0"
+  "MistyRose1\0"
+  "MistyRose2\0"
+  "MistyRose3\0"
+  "MistyRose4\0"
+  "moccasin\0"
+  "navajo white\0"
+  "NavajoWhite\0"
+  "NavajoWhite1\0"
+  "NavajoWhite2\0"
+  "NavajoWhite3\0"
+  "NavajoWhite4\0"
+  "navy\0"
+  "navy blue\0"
+  "NavyBlue\0"
+  "old lace\0"
+  "OldLace\0"
+  "olive drab\0"
+  "OliveDrab\0"
+  "OliveDrab1\0"
+  "OliveDrab2\0"
+  "OliveDrab3\0"
+  "OliveDrab4\0"
+  "orange\0"
+  "orange red\0"
+  "orange1\0"
+  "orange2\0"
+  "orange3\0"
+  "orange4\0"
+  "OrangeRed\0"
+  "OrangeRed1\0"
+  "OrangeRed2\0"
+  "OrangeRed3\0"
+  "OrangeRed4\0"
+  "orchid\0"
+  "orchid1\0"
+  "orchid2\0"
+  "orchid3\0"
+  "orchid4\0"
+  "pale goldenrod\0"
+  "pale green\0"
+  "pale turquoise\0"
+  "pale violet red\0"
+  "PaleGoldenrod\0"
+  "PaleGreen\0"
+  "PaleGreen1\0"
+  "PaleGreen2\0"
+  "PaleGreen3\0"
+  "PaleGreen4\0"
+  "PaleTurquoise\0"
+  "PaleTurquoise1\0"
+  "PaleTurquoise2\0"
+  "PaleTurquoise3\0"
+  "PaleTurquoise4\0"
+  "PaleVioletRed\0"
+  "PaleVioletRed1\0"
+  "PaleVioletRed2\0"
+  "PaleVioletRed3\0"
+  "PaleVioletRed4\0"
+  "papaya whip\0"
+  "PapayaWhip\0"
+  "peach puff\0"
+  "PeachPuff\0"
+  "PeachPuff1\0"
+  "PeachPuff2\0"
+  "PeachPuff3\0"
+  "PeachPuff4\0"
+  "peru\0"
+  "pink\0"
+  "pink1\0"
+  "pink2\0"
+  "pink3\0"
+  "pink4\0"
+  "plum\0"
+  "plum1\0"
+  "plum2\0"
+  "plum3\0"
+  "plum4\0"
+  "powder blue\0"
+  "PowderBlue\0"
+  "purple\0"
+  "purple1\0"
+  "purple2\0"
+  "purple3\0"
+  "purple4\0"
+  "red\0"
+  "red1\0"
+  "red2\0"
+  "red3\0"
+  "red4\0"
+  "rosy brown\0"
+  "RosyBrown\0"
+  "RosyBrown1\0"
+  "RosyBrown2\0"
+  "RosyBrown3\0"
+  "RosyBrown4\0"
+  "royal blue\0"
+  "RoyalBlue\0"
+  "RoyalBlue1\0"
+  "RoyalBlue2\0"
+  "RoyalBlue3\0"
+  "RoyalBlue4\0"
+  "saddle brown\0"
+  "SaddleBrown\0"
+  "salmon\0"
+  "salmon1\0"
+  "salmon2\0"
+  "salmon3\0"
+  "salmon4\0"
+  "sandy brown\0"
+  "SandyBrown\0"
+  "sea green\0"
+  "SeaGreen\0"
+  "SeaGreen1\0"
+  "SeaGreen2\0"
+  "SeaGreen3\0"
+  "SeaGreen4\0"
+  "seashell\0"
+  "seashell1\0"
+  "seashell2\0"
+  "seashell3\0"
+  "seashell4\0"
+  "sienna\0"
+  "sienna1\0"
+  "sienna2\0"
+  "sienna3\0"
+  "sienna4\0"
+  "sky blue\0"
+  "SkyBlue\0"
+  "SkyBlue1\0"
+  "SkyBlue2\0"
+  "SkyBlue3\0"
+  "SkyBlue4\0"
+  "slate blue\0"
+  "slate gray\0"
+  "slate grey\0"
+  "SlateBlue\0"
+  "SlateBlue1\0"
+  "SlateBlue2\0"
+  "SlateBlue3\0"
+  "SlateBlue4\0"
+  "SlateGray\0"
+  "SlateGray1\0"
+  "SlateGray2\0"
+  "SlateGray3\0"
+  "SlateGray4\0"
+  "SlateGrey\0"
+  "snow\0"
+  "snow1\0"
+  "snow2\0"
+  "snow3\0"
+  "snow4\0"
+  "spring green\0"
+  "SpringGreen\0"
+  "SpringGreen1\0"
+  "SpringGreen2\0"
+  "SpringGreen3\0"
+  "SpringGreen4\0"
+  "steel blue\0"
+  "SteelBlue\0"
+  "SteelBlue1\0"
+  "SteelBlue2\0"
+  "SteelBlue3\0"
+  "SteelBlue4\0"
+  "tan\0"
+  "tan1\0"
+  "tan2\0"
+  "tan3\0"
+  "tan4\0"
+  "thistle\0"
+  "thistle1\0"
+  "thistle2\0"
+  "thistle3\0"
+  "thistle4\0"
+  "tomato\0"
+  "tomato1\0"
+  "tomato2\0"
+  "tomato3\0"
+  "tomato4\0"
+  "turquoise\0"
+  "turquoise1\0"
+  "turquoise2\0"
+  "turquoise3\0"
+  "turquoise4\0"
+  "violet\0"
+  "violet red\0"
+  "VioletRed\0"
+  "VioletRed1\0"
+  "VioletRed2\0"
+  "VioletRed3\0"
+  "VioletRed4\0"
+  "wheat\0"
+  "wheat1\0"
+  "wheat2\0"
+  "wheat3\0"
+  "wheat4\0"
+  "white\0"
+  "white smoke\0"
+  "WhiteSmoke\0"
+  "yellow\0"
+  "yellow green\0"
+  "yellow1\0"
+  "yellow2\0"
+  "yellow3\0"
+  "yellow4\0"
+  "YellowGreen\0";
+
+typedef struct {
+    guint16 name_offset;
+    guchar red;
+    guchar green;
+    guchar blue;
+} ColorEntry;
+
+static const ColorEntry color_entries[] = {
+  { 0, 240, 248, 255 },
+  { 11, 240, 248, 255 },
+  { 21, 250, 235, 215 },
+  { 35, 250, 235, 215 },
+  { 48, 255, 239, 219 },
+  { 62, 238, 223, 204 },
+  { 76, 205, 192, 176 },
+  { 90, 139, 131, 120 },
+  { 104, 127, 255, 212 },
+  { 115, 127, 255, 212 },
+  { 127, 118, 238, 198 },
+  { 139, 102, 205, 170 },
+  { 151, 69, 139, 116 },
+  { 163, 240, 255, 255 },
+  { 169, 240, 255, 255 },
+  { 176, 224, 238, 238 },
+  { 183, 193, 205, 205 },
+  { 190, 131, 139, 139 },
+  { 197, 245, 245, 220 },
+  { 203, 255, 228, 196 },
+  { 210, 255, 228, 196 },
+  { 218, 238, 213, 183 },
+  { 226, 205, 183, 158 },
+  { 234, 139, 125, 107 },
+  { 242, 0, 0, 0 },
+  { 248, 255, 235, 205 },
+  { 264, 255, 235, 205 },
+  { 279, 0, 0, 255 },
+  { 284, 138, 43, 226 },
+  { 296, 0, 0, 255 },
+  { 302, 0, 0, 238 },
+  { 308, 0, 0, 205 },
+  { 314, 0, 0, 139 },
+  { 320, 138, 43, 226 },
+  { 331, 165, 42, 42 },
+  { 337, 255, 64, 64 },
+  { 344, 238, 59, 59 },
+  { 351, 205, 51, 51 },
+  { 358, 139, 35, 35 },
+  { 365, 222, 184, 135 },
+  { 375, 255, 211, 155 },
+  { 386, 238, 197, 145 },
+  { 397, 205, 170, 125 },
+  { 408, 139, 115, 85 },
+  { 419, 95, 158, 160 },
+  { 430, 95, 158, 160 },
+  { 440, 152, 245, 255 },
+  { 451, 142, 229, 238 },
+  { 462, 122, 197, 205 },
+  { 473, 83, 134, 139 },
+  { 484, 127, 255, 0 },
+  { 495, 127, 255, 0 },
+  { 507, 118, 238, 0 },
+  { 519, 102, 205, 0 },
+  { 531, 69, 139, 0 },
+  { 543, 210, 105, 30 },
+  { 553, 255, 127, 36 },
+  { 564, 238, 118, 33 },
+  { 575, 205, 102, 29 },
+  { 586, 139, 69, 19 },
+  { 597, 255, 127, 80 },
+  { 603, 255, 114, 86 },
+  { 610, 238, 106, 80 },
+  { 617, 205, 91, 69 },
+  { 624, 139, 62, 47 },
+  { 631, 100, 149, 237 },
+  { 647, 100, 149, 237 },
+  { 662, 255, 248, 220 },
+  { 671, 255, 248, 220 },
+  { 681, 238, 232, 205 },
+  { 691, 205, 200, 177 },
+  { 701, 139, 136, 120 },
+  { 711, 0, 255, 255 },
+  { 716, 0, 255, 255 },
+  { 722, 0, 238, 238 },
+  { 728, 0, 205, 205 },
+  { 734, 0, 139, 139 },
+  { 740, 0, 0, 139 },
+  { 750, 0, 139, 139 },
+  { 760, 184, 134, 11 },
+  { 775, 169, 169, 169 },
+  { 785, 0, 100, 0 },
+  { 796, 169, 169, 169 },
+  { 806, 189, 183, 107 },
+  { 817, 139, 0, 139 },
+  { 830, 85, 107, 47 },
+  { 847, 255, 140, 0 },
+  { 859, 153, 50, 204 },
+  { 871, 139, 0, 0 },
+  { 880, 233, 150, 122 },
+  { 892, 143, 188, 143 },
+  { 907, 72, 61, 139 },
+  { 923, 47, 79, 79 },
+  { 939, 47, 79, 79 },
+  { 955, 0, 206, 209 },
+  { 970, 148, 0, 211 },
+  { 982, 0, 0, 139 },
+  { 991, 0, 139, 139 },
+  { 1000, 184, 134, 11 },
+  { 1014, 255, 185, 15 },
+  { 1029, 238, 173, 14 },
+  { 1044, 205, 149, 12 },
+  { 1059, 139, 101, 8 },
+  { 1074, 169, 169, 169 },
+  { 1083, 0, 100, 0 },
+  { 1093, 169, 169, 169 },
+  { 1102, 189, 183, 107 },
+  { 1112, 139, 0, 139 },
+  { 1124, 85, 107, 47 },
+  { 1139, 202, 255, 112 },
+  { 1155, 188, 238, 104 },
+  { 1171, 162, 205, 90 },
+  { 1187, 110, 139, 61 },
+  { 1203, 255, 140, 0 },
+  { 1214, 255, 127, 0 },
+  { 1226, 238, 118, 0 },
+  { 1238, 205, 102, 0 },
+  { 1250, 139, 69, 0 },
+  { 1262, 153, 50, 204 },
+  { 1273, 191, 62, 255 },
+  { 1285, 178, 58, 238 },
+  { 1297, 154, 50, 205 },
+  { 1309, 104, 34, 139 },
+  { 1321, 139, 0, 0 },
+  { 1329, 233, 150, 122 },
+  { 1340, 143, 188, 143 },
+  { 1353, 193, 255, 193 },
+  { 1367, 180, 238, 180 },
+  { 1381, 155, 205, 155 },
+  { 1395, 105, 139, 105 },
+  { 1409, 72, 61, 139 },
+  { 1423, 47, 79, 79 },
+  { 1437, 151, 255, 255 },
+  { 1452, 141, 238, 238 },
+  { 1467, 121, 205, 205 },
+  { 1482, 82, 139, 139 },
+  { 1497, 47, 79, 79 },
+  { 1511, 0, 206, 209 },
+  { 1525, 148, 0, 211 },
+  { 1536, 255, 20, 147 },
+  { 1546, 0, 191, 255 },
+  { 1560, 255, 20, 147 },
+  { 1569, 255, 20, 147 },
+  { 1579, 238, 18, 137 },
+  { 1589, 205, 16, 118 },
+  { 1599, 139, 10, 80 },
+  { 1609, 0, 191, 255 },
+  { 1621, 0, 191, 255 },
+  { 1634, 0, 178, 238 },
+  { 1647, 0, 154, 205 },
+  { 1660, 0, 104, 139 },
+  { 1673, 105, 105, 105 },
+  { 1682, 105, 105, 105 },
+  { 1691, 105, 105, 105 },
+  { 1699, 105, 105, 105 },
+  { 1707, 30, 144, 255 },
+  { 1719, 30, 144, 255 },
+  { 1730, 30, 144, 255 },
+  { 1742, 28, 134, 238 },
+  { 1754, 24, 116, 205 },
+  { 1766, 16, 78, 139 },
+  { 1778, 178, 34, 34 },
+  { 1788, 255, 48, 48 },
+  { 1799, 238, 44, 44 },
+  { 1810, 205, 38, 38 },
+  { 1821, 139, 26, 26 },
+  { 1832, 255, 250, 240 },
+  { 1845, 255, 250, 240 },
+  { 1857, 34, 139, 34 },
+  { 1870, 34, 139, 34 },
+  { 1882, 220, 220, 220 },
+  { 1892, 248, 248, 255 },
+  { 1904, 248, 248, 255 },
+  { 1915, 255, 215, 0 },
+  { 1920, 255, 215, 0 },
+  { 1926, 238, 201, 0 },
+  { 1932, 205, 173, 0 },
+  { 1938, 139, 117, 0 },
+  { 1944, 218, 165, 32 },
+  { 1954, 255, 193, 37 },
+  { 1965, 238, 180, 34 },
+  { 1976, 205, 155, 29 },
+  { 1987, 139, 105, 20 },
+  { 1998, 190, 190, 190 },
+  { 2003, 0, 0, 0 },
+  { 2009, 3, 3, 3 },
+  { 2015, 26, 26, 26 },
+  { 2022, 255, 255, 255 },
+  { 2030, 28, 28, 28 },
+  { 2037, 31, 31, 31 },
+  { 2044, 33, 33, 33 },
+  { 2051, 36, 36, 36 },
+  { 2058, 38, 38, 38 },
+  { 2065, 41, 41, 41 },
+  { 2072, 43, 43, 43 },
+  { 2079, 46, 46, 46 },
+  { 2086, 48, 48, 48 },
+  { 2093, 5, 5, 5 },
+  { 2099, 51, 51, 51 },
+  { 2106, 54, 54, 54 },
+  { 2113, 56, 56, 56 },
+  { 2120, 59, 59, 59 },
+  { 2127, 61, 61, 61 },
+  { 2134, 64, 64, 64 },
+  { 2141, 66, 66, 66 },
+  { 2148, 69, 69, 69 },
+  { 2155, 71, 71, 71 },
+  { 2162, 74, 74, 74 },
+  { 2169, 8, 8, 8 },
+  { 2175, 77, 77, 77 },
+  { 2182, 79, 79, 79 },
+  { 2189, 82, 82, 82 },
+  { 2196, 84, 84, 84 },
+  { 2203, 87, 87, 87 },
+  { 2210, 89, 89, 89 },
+  { 2217, 92, 92, 92 },
+  { 2224, 94, 94, 94 },
+  { 2231, 97, 97, 97 },
+  { 2238, 99, 99, 99 },
+  { 2245, 10, 10, 10 },
+  { 2251, 102, 102, 102 },
+  { 2258, 105, 105, 105 },
+  { 2265, 107, 107, 107 },
+  { 2272, 110, 110, 110 },
+  { 2279, 112, 112, 112 },
+  { 2286, 115, 115, 115 },
+  { 2293, 117, 117, 117 },
+  { 2300, 120, 120, 120 },
+  { 2307, 122, 122, 122 },
+  { 2314, 125, 125, 125 },
+  { 2321, 13, 13, 13 },
+  { 2327, 127, 127, 127 },
+  { 2334, 130, 130, 130 },
+  { 2341, 133, 133, 133 },
+  { 2348, 135, 135, 135 },
+  { 2355, 138, 138, 138 },
+  { 2362, 140, 140, 140 },
+  { 2369, 143, 143, 143 },
+  { 2376, 145, 145, 145 },
+  { 2383, 148, 148, 148 },
+  { 2390, 150, 150, 150 },
+  { 2397, 15, 15, 15 },
+  { 2403, 153, 153, 153 },
+  { 2410, 156, 156, 156 },
+  { 2417, 158, 158, 158 },
+  { 2424, 161, 161, 161 },
+  { 2431, 163, 163, 163 },
+  { 2438, 166, 166, 166 },
+  { 2445, 168, 168, 168 },
+  { 2452, 171, 171, 171 },
+  { 2459, 173, 173, 173 },
+  { 2466, 176, 176, 176 },
+  { 2473, 18, 18, 18 },
+  { 2479, 179, 179, 179 },
+  { 2486, 181, 181, 181 },
+  { 2493, 184, 184, 184 },
+  { 2500, 186, 186, 186 },
+  { 2507, 189, 189, 189 },
+  { 2514, 191, 191, 191 },
+  { 2521, 194, 194, 194 },
+  { 2528, 196, 196, 196 },
+  { 2535, 199, 199, 199 },
+  { 2542, 201, 201, 201 },
+  { 2549, 20, 20, 20 },
+  { 2555, 204, 204, 204 },
+  { 2562, 207, 207, 207 },
+  { 2569, 209, 209, 209 },
+  { 2576, 212, 212, 212 },
+  { 2583, 214, 214, 214 },
+  { 2590, 217, 217, 217 },
+  { 2597, 219, 219, 219 },
+  { 2604, 222, 222, 222 },
+  { 2611, 224, 224, 224 },
+  { 2618, 227, 227, 227 },
+  { 2625, 23, 23, 23 },
+  { 2631, 229, 229, 229 },
+  { 2638, 232, 232, 232 },
+  { 2645, 235, 235, 235 },
+  { 2652, 237, 237, 237 },
+  { 2659, 240, 240, 240 },
+  { 2666, 242, 242, 242 },
+  { 2673, 245, 245, 245 },
+  { 2680, 247, 247, 247 },
+  { 2687, 250, 250, 250 },
+  { 2694, 252, 252, 252 },
+  { 2701, 0, 255, 0 },
+  { 2707, 173, 255, 47 },
+  { 2720, 0, 255, 0 },
+  { 2727, 0, 238, 0 },
+  { 2734, 0, 205, 0 },
+  { 2741, 0, 139, 0 },
+  { 2748, 173, 255, 47 },
+  { 2760, 190, 190, 190 },
+  { 2765, 0, 0, 0 },
+  { 2771, 3, 3, 3 },
+  { 2777, 26, 26, 26 },
+  { 2784, 255, 255, 255 },
+  { 2792, 28, 28, 28 },
+  { 2799, 31, 31, 31 },
+  { 2806, 33, 33, 33 },
+  { 2813, 36, 36, 36 },
+  { 2820, 38, 38, 38 },
+  { 2827, 41, 41, 41 },
+  { 2834, 43, 43, 43 },
+  { 2841, 46, 46, 46 },
+  { 2848, 48, 48, 48 },
+  { 2855, 5, 5, 5 },
+  { 2861, 51, 51, 51 },
+  { 2868, 54, 54, 54 },
+  { 2875, 56, 56, 56 },
+  { 2882, 59, 59, 59 },
+  { 2889, 61, 61, 61 },
+  { 2896, 64, 64, 64 },
+  { 2903, 66, 66, 66 },
+  { 2910, 69, 69, 69 },
+  { 2917, 71, 71, 71 },
+  { 2924, 74, 74, 74 },
+  { 2931, 8, 8, 8 },
+  { 2937, 77, 77, 77 },
+  { 2944, 79, 79, 79 },
+  { 2951, 82, 82, 82 },
+  { 2958, 84, 84, 84 },
+  { 2965, 87, 87, 87 },
+  { 2972, 89, 89, 89 },
+  { 2979, 92, 92, 92 },
+  { 2986, 94, 94, 94 },
+  { 2993, 97, 97, 97 },
+  { 3000, 99, 99, 99 },
+  { 3007, 10, 10, 10 },
+  { 3013, 102, 102, 102 },
+  { 3020, 105, 105, 105 },
+  { 3027, 107, 107, 107 },
+  { 3034, 110, 110, 110 },
+  { 3041, 112, 112, 112 },
+  { 3048, 115, 115, 115 },
+  { 3055, 117, 117, 117 },
+  { 3062, 120, 120, 120 },
+  { 3069, 122, 122, 122 },
+  { 3076, 125, 125, 125 },
+  { 3083, 13, 13, 13 },
+  { 3089, 127, 127, 127 },
+  { 3096, 130, 130, 130 },
+  { 3103, 133, 133, 133 },
+  { 3110, 135, 135, 135 },
+  { 3117, 138, 138, 138 },
+  { 3124, 140, 140, 140 },
+  { 3131, 143, 143, 143 },
+  { 3138, 145, 145, 145 },
+  { 3145, 148, 148, 148 },
+  { 3152, 150, 150, 150 },
+  { 3159, 15, 15, 15 },
+  { 3165, 153, 153, 153 },
+  { 3172, 156, 156, 156 },
+  { 3179, 158, 158, 158 },
+  { 3186, 161, 161, 161 },
+  { 3193, 163, 163, 163 },
+  { 3200, 166, 166, 166 },
+  { 3207, 168, 168, 168 },
+  { 3214, 171, 171, 171 },
+  { 3221, 173, 173, 173 },
+  { 3228, 176, 176, 176 },
+  { 3235, 18, 18, 18 },
+  { 3241, 179, 179, 179 },
+  { 3248, 181, 181, 181 },
+  { 3255, 184, 184, 184 },
+  { 3262, 186, 186, 186 },
+  { 3269, 189, 189, 189 },
+  { 3276, 191, 191, 191 },
+  { 3283, 194, 194, 194 },
+  { 3290, 196, 196, 196 },
+  { 3297, 199, 199, 199 },
+  { 3304, 201, 201, 201 },
+  { 3311, 20, 20, 20 },
+  { 3317, 204, 204, 204 },
+  { 3324, 207, 207, 207 },
+  { 3331, 209, 209, 209 },
+  { 3338, 212, 212, 212 },
+  { 3345, 214, 214, 214 },
+  { 3352, 217, 217, 217 },
+  { 3359, 219, 219, 219 },
+  { 3366, 222, 222, 222 },
+  { 3373, 224, 224, 224 },
+  { 3380, 227, 227, 227 },
+  { 3387, 23, 23, 23 },
+  { 3393, 229, 229, 229 },
+  { 3400, 232, 232, 232 },
+  { 3407, 235, 235, 235 },
+  { 3414, 237, 237, 237 },
+  { 3421, 240, 240, 240 },
+  { 3428, 242, 242, 242 },
+  { 3435, 245, 245, 245 },
+  { 3442, 247, 247, 247 },
+  { 3449, 250, 250, 250 },
+  { 3456, 252, 252, 252 },
+  { 3463, 240, 255, 240 },
+  { 3472, 240, 255, 240 },
+  { 3482, 224, 238, 224 },
+  { 3492, 193, 205, 193 },
+  { 3502, 131, 139, 131 },
+  { 3512, 255, 105, 180 },
+  { 3521, 255, 105, 180 },
+  { 3529, 255, 110, 180 },
+  { 3538, 238, 106, 167 },
+  { 3547, 205, 96, 144 },
+  { 3556, 139, 58, 98 },
+  { 3565, 205, 92, 92 },
+  { 3576, 205, 92, 92 },
+  { 3586, 255, 106, 106 },
+  { 3597, 238, 99, 99 },
+  { 3608, 205, 85, 85 },
+  { 3619, 139, 58, 58 },
+  { 3630, 255, 255, 240 },
+  { 3636, 255, 255, 240 },
+  { 3643, 238, 238, 224 },
+  { 3650, 205, 205, 193 },
+  { 3657, 139, 139, 131 },
+  { 3664, 240, 230, 140 },
+  { 3670, 255, 246, 143 },
+  { 3677, 238, 230, 133 },
+  { 3684, 205, 198, 115 },
+  { 3691, 139, 134, 78 },
+  { 3698, 230, 230, 250 },
+  { 3707, 255, 240, 245 },
+  { 3722, 255, 240, 245 },
+  { 3736, 255, 240, 245 },
+  { 3751, 238, 224, 229 },
+  { 3766, 205, 193, 197 },
+  { 3781, 139, 131, 134 },
+  { 3796, 124, 252, 0 },
+  { 3807, 124, 252, 0 },
+  { 3817, 255, 250, 205 },
+  { 3831, 255, 250, 205 },
+  { 3844, 255, 250, 205 },
+  { 3858, 238, 233, 191 },
+  { 3872, 205, 201, 165 },
+  { 3886, 139, 137, 112 },
+  { 3900, 173, 216, 230 },
+  { 3911, 240, 128, 128 },
+  { 3923, 224, 255, 255 },
+  { 3934, 238, 221, 130 },
+  { 3950, 250, 250, 210 },
+  { 3973, 211, 211, 211 },
+  { 3984, 144, 238, 144 },
+  { 3996, 211, 211, 211 },
+  { 4007, 255, 182, 193 },
+  { 4018, 255, 160, 122 },
+  { 4031, 32, 178, 170 },
+  { 4047, 135, 206, 250 },
+  { 4062, 132, 112, 255 },
+  { 4079, 119, 136, 153 },
+  { 4096, 119, 136, 153 },
+  { 4113, 176, 196, 222 },
+  { 4130, 255, 255, 224 },
+  { 4143, 173, 216, 230 },
+  { 4153, 191, 239, 255 },
+  { 4164, 178, 223, 238 },
+  { 4175, 154, 192, 205 },
+  { 4186, 104, 131, 139 },
+  { 4197, 240, 128, 128 },
+  { 4208, 224, 255, 255 },
+  { 4218, 224, 255, 255 },
+  { 4229, 209, 238, 238 },
+  { 4240, 180, 205, 205 },
+  { 4251, 122, 139, 139 },
+  { 4262, 238, 221, 130 },
+  { 4277, 255, 236, 139 },
+  { 4293, 238, 220, 130 },
+  { 4309, 205, 190, 112 },
+  { 4325, 139, 129, 76 },
+  { 4341, 250, 250, 210 },
+  { 4362, 211, 211, 211 },
+  { 4372, 144, 238, 144 },
+  { 4383, 211, 211, 211 },
+  { 4393, 255, 182, 193 },
+  { 4403, 255, 174, 185 },
+  { 4414, 238, 162, 173 },
+  { 4425, 205, 140, 149 },
+  { 4436, 139, 95, 101 },
+  { 4447, 255, 160, 122 },
+  { 4459, 255, 160, 122 },
+  { 4472, 238, 149, 114 },
+  { 4485, 205, 129, 98 },
+  { 4498, 139, 87, 66 },
+  { 4511, 32, 178, 170 },
+  { 4525, 135, 206, 250 },
+  { 4538, 176, 226, 255 },
+  { 4552, 164, 211, 238 },
+  { 4566, 141, 182, 205 },
+  { 4580, 96, 123, 139 },
+  { 4594, 132, 112, 255 },
+  { 4609, 119, 136, 153 },
+  { 4624, 119, 136, 153 },
+  { 4639, 176, 196, 222 },
+  { 4654, 202, 225, 255 },
+  { 4670, 188, 210, 238 },
+  { 4686, 162, 181, 205 },
+  { 4702, 110, 123, 139 },
+  { 4718, 255, 255, 224 },
+  { 4730, 255, 255, 224 },
+  { 4743, 238, 238, 209 },
+  { 4756, 205, 205, 180 },
+  { 4769, 139, 139, 122 },
+  { 4782, 50, 205, 50 },
+  { 4793, 50, 205, 50 },
+  { 4803, 250, 240, 230 },
+  { 4809, 255, 0, 255 },
+  { 4817, 255, 0, 255 },
+  { 4826, 238, 0, 238 },
+  { 4835, 205, 0, 205 },
+  { 4844, 139, 0, 139 },
+  { 4853, 176, 48, 96 },
+  { 4860, 255, 52, 179 },
+  { 4868, 238, 48, 167 },
+  { 4876, 205, 41, 144 },
+  { 4884, 139, 28, 98 },
+  { 4892, 102, 205, 170 },
+  { 4910, 0, 0, 205 },
+  { 4922, 186, 85, 211 },
+  { 4936, 147, 112, 219 },
+  { 4950, 60, 179, 113 },
+  { 4967, 123, 104, 238 },
+  { 4985, 0, 250, 154 },
+  { 5005, 72, 209, 204 },
+  { 5022, 199, 21, 133 },
+  { 5040, 102, 205, 170 },
+  { 5057, 0, 0, 205 },
+  { 5068, 186, 85, 211 },
+  { 5081, 224, 102, 255 },
+  { 5095, 209, 95, 238 },
+  { 5109, 180, 82, 205 },
+  { 5123, 122, 55, 139 },
+  { 5137, 147, 112, 219 },
+  { 5150, 171, 130, 255 },
+  { 5164, 159, 121, 238 },
+  { 5178, 137, 104, 205 },
+  { 5192, 93, 71, 139 },
+  { 5206, 60, 179, 113 },
+  { 5221, 123, 104, 238 },
+  { 5237, 0, 250, 154 },
+  { 5255, 72, 209, 204 },
+  { 5271, 199, 21, 133 },
+  { 5287, 25, 25, 112 },
+  { 5301, 25, 25, 112 },
+  { 5314, 245, 255, 250 },
+  { 5325, 245, 255, 250 },
+  { 5335, 255, 228, 225 },
+  { 5346, 255, 228, 225 },
+  { 5356, 255, 228, 225 },
+  { 5367, 238, 213, 210 },
+  { 5378, 205, 183, 181 },
+  { 5389, 139, 125, 123 },
+  { 5400, 255, 228, 181 },
+  { 5409, 255, 222, 173 },
+  { 5422, 255, 222, 173 },
+  { 5434, 255, 222, 173 },
+  { 5447, 238, 207, 161 },
+  { 5460, 205, 179, 139 },
+  { 5473, 139, 121, 94 },
+  { 5486, 0, 0, 128 },
+  { 5491, 0, 0, 128 },
+  { 5501, 0, 0, 128 },
+  { 5510, 253, 245, 230 },
+  { 5519, 253, 245, 230 },
+  { 5527, 107, 142, 35 },
+  { 5538, 107, 142, 35 },
+  { 5548, 192, 255, 62 },
+  { 5559, 179, 238, 58 },
+  { 5570, 154, 205, 50 },
+  { 5581, 105, 139, 34 },
+  { 5592, 255, 165, 0 },
+  { 5599, 255, 69, 0 },
+  { 5610, 255, 165, 0 },
+  { 5618, 238, 154, 0 },
+  { 5626, 205, 133, 0 },
+  { 5634, 139, 90, 0 },
+  { 5642, 255, 69, 0 },
+  { 5652, 255, 69, 0 },
+  { 5663, 238, 64, 0 },
+  { 5674, 205, 55, 0 },
+  { 5685, 139, 37, 0 },
+  { 5696, 218, 112, 214 },
+  { 5703, 255, 131, 250 },
+  { 5711, 238, 122, 233 },
+  { 5719, 205, 105, 201 },
+  { 5727, 139, 71, 137 },
+  { 5735, 238, 232, 170 },
+  { 5750, 152, 251, 152 },
+  { 5761, 175, 238, 238 },
+  { 5776, 219, 112, 147 },
+  { 5792, 238, 232, 170 },
+  { 5806, 152, 251, 152 },
+  { 5816, 154, 255, 154 },
+  { 5827, 144, 238, 144 },
+  { 5838, 124, 205, 124 },
+  { 5849, 84, 139, 84 },
+  { 5860, 175, 238, 238 },
+  { 5874, 187, 255, 255 },
+  { 5889, 174, 238, 238 },
+  { 5904, 150, 205, 205 },
+  { 5919, 102, 139, 139 },
+  { 5934, 219, 112, 147 },
+  { 5948, 255, 130, 171 },
+  { 5963, 238, 121, 159 },
+  { 5978, 205, 104, 137 },
+  { 5993, 139, 71, 93 },
+  { 6008, 255, 239, 213 },
+  { 6020, 255, 239, 213 },
+  { 6031, 255, 218, 185 },
+  { 6042, 255, 218, 185 },
+  { 6052, 255, 218, 185 },
+  { 6063, 238, 203, 173 },
+  { 6074, 205, 175, 149 },
+  { 6085, 139, 119, 101 },
+  { 6096, 205, 133, 63 },
+  { 6101, 255, 192, 203 },
+  { 6106, 255, 181, 197 },
+  { 6112, 238, 169, 184 },
+  { 6118, 205, 145, 158 },
+  { 6124, 139, 99, 108 },
+  { 6130, 221, 160, 221 },
+  { 6135, 255, 187, 255 },
+  { 6141, 238, 174, 238 },
+  { 6147, 205, 150, 205 },
+  { 6153, 139, 102, 139 },
+  { 6159, 176, 224, 230 },
+  { 6171, 176, 224, 230 },
+  { 6182, 160, 32, 240 },
+  { 6189, 155, 48, 255 },
+  { 6197, 145, 44, 238 },
+  { 6205, 125, 38, 205 },
+  { 6213, 85, 26, 139 },
+  { 6221, 255, 0, 0 },
+  { 6225, 255, 0, 0 },
+  { 6230, 238, 0, 0 },
+  { 6235, 205, 0, 0 },
+  { 6240, 139, 0, 0 },
+  { 6245, 188, 143, 143 },
+  { 6256, 188, 143, 143 },
+  { 6266, 255, 193, 193 },
+  { 6277, 238, 180, 180 },
+  { 6288, 205, 155, 155 },
+  { 6299, 139, 105, 105 },
+  { 6310, 65, 105, 225 },
+  { 6321, 65, 105, 225 },
+  { 6331, 72, 118, 255 },
+  { 6342, 67, 110, 238 },
+  { 6353, 58, 95, 205 },
+  { 6364, 39, 64, 139 },
+  { 6375, 139, 69, 19 },
+  { 6388, 139, 69, 19 },
+  { 6400, 250, 128, 114 },
+  { 6407, 255, 140, 105 },
+  { 6415, 238, 130, 98 },
+  { 6423, 205, 112, 84 },
+  { 6431, 139, 76, 57 },
+  { 6439, 244, 164, 96 },
+  { 6451, 244, 164, 96 },
+  { 6462, 46, 139, 87 },
+  { 6472, 46, 139, 87 },
+  { 6481, 84, 255, 159 },
+  { 6491, 78, 238, 148 },
+  { 6501, 67, 205, 128 },
+  { 6511, 46, 139, 87 },
+  { 6521, 255, 245, 238 },
+  { 6530, 255, 245, 238 },
+  { 6540, 238, 229, 222 },
+  { 6550, 205, 197, 191 },
+  { 6560, 139, 134, 130 },
+  { 6570, 160, 82, 45 },
+  { 6577, 255, 130, 71 },
+  { 6585, 238, 121, 66 },
+  { 6593, 205, 104, 57 },
+  { 6601, 139, 71, 38 },
+  { 6609, 135, 206, 235 },
+  { 6618, 135, 206, 235 },
+  { 6626, 135, 206, 255 },
+  { 6635, 126, 192, 238 },
+  { 6644, 108, 166, 205 },
+  { 6653, 74, 112, 139 },
+  { 6662, 106, 90, 205 },
+  { 6673, 112, 128, 144 },
+  { 6684, 112, 128, 144 },
+  { 6695, 106, 90, 205 },
+  { 6705, 131, 111, 255 },
+  { 6716, 122, 103, 238 },
+  { 6727, 105, 89, 205 },
+  { 6738, 71, 60, 139 },
+  { 6749, 112, 128, 144 },
+  { 6759, 198, 226, 255 },
+  { 6770, 185, 211, 238 },
+  { 6781, 159, 182, 205 },
+  { 6792, 108, 123, 139 },
+  { 6803, 112, 128, 144 },
+  { 6813, 255, 250, 250 },
+  { 6818, 255, 250, 250 },
+  { 6824, 238, 233, 233 },
+  { 6830, 205, 201, 201 },
+  { 6836, 139, 137, 137 },
+  { 6842, 0, 255, 127 },
+  { 6855, 0, 255, 127 },
+  { 6867, 0, 255, 127 },
+  { 6880, 0, 238, 118 },
+  { 6893, 0, 205, 102 },
+  { 6906, 0, 139, 69 },
+  { 6919, 70, 130, 180 },
+  { 6930, 70, 130, 180 },
+  { 6940, 99, 184, 255 },
+  { 6951, 92, 172, 238 },
+  { 6962, 79, 148, 205 },
+  { 6973, 54, 100, 139 },
+  { 6984, 210, 180, 140 },
+  { 6988, 255, 165, 79 },
+  { 6993, 238, 154, 73 },
+  { 6998, 205, 133, 63 },
+  { 7003, 139, 90, 43 },
+  { 7008, 216, 191, 216 },
+  { 7016, 255, 225, 255 },
+  { 7025, 238, 210, 238 },
+  { 7034, 205, 181, 205 },
+  { 7043, 139, 123, 139 },
+  { 7052, 255, 99, 71 },
+  { 7059, 255, 99, 71 },
+  { 7067, 238, 92, 66 },
+  { 7075, 205, 79, 57 },
+  { 7083, 139, 54, 38 },
+  { 7091, 64, 224, 208 },
+  { 7101, 0, 245, 255 },
+  { 7112, 0, 229, 238 },
+  { 7123, 0, 197, 205 },
+  { 7134, 0, 134, 139 },
+  { 7145, 238, 130, 238 },
+  { 7152, 208, 32, 144 },
+  { 7163, 208, 32, 144 },
+  { 7173, 255, 62, 150 },
+  { 7184, 238, 58, 140 },
+  { 7195, 205, 50, 120 },
+  { 7206, 139, 34, 82 },
+  { 7217, 245, 222, 179 },
+  { 7223, 255, 231, 186 },
+  { 7230, 238, 216, 174 },
+  { 7237, 205, 186, 150 },
+  { 7244, 139, 126, 102 },
+  { 7251, 255, 255, 255 },
+  { 7257, 245, 245, 245 },
+  { 7269, 245, 245, 245 },
+  { 7280, 255, 255, 0 },
+  { 7287, 154, 205, 50 },
+  { 7300, 255, 255, 0 },
+  { 7308, 238, 238, 0 },
+  { 7316, 205, 205, 0 },
+  { 7324, 139, 139, 0 },
+  { 7332, 154, 205, 50 }
+};
diff --git a/pango/pango-color.c b/pango/pango-color.c
new file mode 100755 (executable)
index 0000000..271638a
--- /dev/null
@@ -0,0 +1,262 @@
+/* pango
+ * pango-color.c: Color handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pango-attributes.h"
+#include "pango-impl-utils.h"
+
+GType
+pango_color_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoColor"),
+                                            (GBoxedCopyFunc) pango_color_copy,
+                                            (GBoxedFreeFunc) pango_color_free);
+
+  return our_type;
+}
+
+/**
+ * pango_color_copy:
+ * @src: color to copy, may be %NULL
+ *
+ * Creates a copy of @src, which should be freed with
+ * pango_color_free(). Primarily used by language bindings,
+ * not that useful otherwise (since colors can just be copied
+ * by assignment in C).
+ *
+ * Return value: the newly allocated #PangoColor, which should
+ *               be freed with pango_color_free(), or %NULL
+ *               if @src was %NULL.
+ **/
+PangoColor*
+pango_color_copy (const PangoColor *src)
+{
+  PangoColor *ret;
+
+  if (src == NULL)
+    return NULL;
+
+  ret = g_slice_new (PangoColor);
+
+  *ret = *src;
+
+  return ret;
+}
+
+/**
+ * pango_color_free:
+ * @color: an allocated #PangoColor, may be %NULL
+ *
+ * Frees a color allocated by pango_color_copy().
+ **/
+void
+pango_color_free (PangoColor *color)
+{
+  if (color == NULL)
+    return;
+
+  g_slice_free (PangoColor, color);
+}
+
+/**
+ * pango_color_to_string:
+ * @color: a #PangoColor
+ *
+ * Returns a textual specification of @color in the hexadecimal form
+ * <literal>&num;rrrrggggbbbb</literal>, where <literal>r</literal>,
+ * <literal>g</literal> and <literal>b</literal> are hex digits representing
+ * the red, green, and blue components respectively.
+ *
+ * Return value: a newly-allocated text string that must be freed with g_free().
+ *
+ * Since: 1.16
+ **/
+gchar *
+pango_color_to_string (const PangoColor *color)
+{
+  g_return_val_if_fail (color != NULL, NULL);
+
+  return g_strdup_printf ("#%04x%04x%04x", color->red, color->green, color->blue);
+}
+
+/* Color parsing
+ */
+
+/* The following 2 routines (parse_color, find_color) come from Tk, via the Win32
+ * port of GDK. The licensing terms on these (longer than the functions) is:
+ *
+ * This software is copyrighted by the Regents of the University of
+ * California, Sun Microsystems, Inc., and other parties.  The following
+ * terms apply to all files associated with the software unless explicitly
+ * disclaimed in individual files.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ *
+ * IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+ * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+ * DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
+ * IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+ * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+ * MODIFICATIONS.
+ *
+ * GOVERNMENT USE: If you are acquiring this software on behalf of the
+ * U.S. government, the Government shall have only "Restricted Rights"
+ * in the software and related documentation as defined in the Federal
+ * Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
+ * are acquiring the software on behalf of the Department of Defense, the
+ * software shall be classified as "Commercial Computer Software" and the
+ * Government shall have only "Restricted Rights" as defined in Clause
+ * 252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
+ * authors grant the U.S. Government and others acting in its behalf
+ * permission to use and distribute the software in accordance with the
+ * terms specified in this license.
+ */
+
+#include "pango-color-table.h"
+
+static int
+compare_xcolor_entries (const void *a, const void *b)
+{
+  return g_ascii_strcasecmp ((const char *) a, color_names + ((const ColorEntry *) b)->name_offset);
+}
+
+static gboolean
+find_color(const char *name,
+          PangoColor *color)
+{
+  ColorEntry *found;
+
+  found = bsearch (name, color_entries, G_N_ELEMENTS (color_entries),
+                  sizeof (ColorEntry),
+                  compare_xcolor_entries);
+  if (found == NULL)
+    return FALSE;
+
+  if (color)
+    {
+      color->red = (found->red * 65535) / 255;
+      color->green = (found->green * 65535) / 255;
+      color->blue = (found->blue * 65535) / 255;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+hex (const char *spec,
+    int len,
+    unsigned int *c)
+{
+  const char *end;
+  *c = 0;
+  for (end = spec + len; spec != end; spec++)
+    if (g_ascii_isxdigit (*spec))
+      *c = (*c << 4) | g_ascii_xdigit_value (*spec);
+    else
+      return FALSE;
+  return TRUE;
+}
+
+/**
+ * pango_color_parse:
+ * @color: a #PangoColor structure in which to store the result, or %NULL
+ * @spec: a string specifying the new color
+ *
+ * Fill in the fields of a color from a string specification. The
+ * string can either one of a large set of standard names. (Taken
+ * from the X11 <filename>rgb.txt</filename> file), or it can be a hex value in the
+ * form '&num;rgb' '&num;rrggbb' '&num;rrrgggbbb' or '&num;rrrrggggbbbb' where
+ * 'r', 'g' and 'b' are hex digits of the red, green, and blue
+ * components of the color, respectively. (White in the four
+ * forms is '&num;fff' '&num;ffffff' '&num;fffffffff' and '&num;ffffffffffff')
+ *
+ * Return value: %TRUE if parsing of the specifier succeeded,
+ *   otherwise false.
+ **/
+gboolean
+pango_color_parse (PangoColor *color,
+                  const char *spec)
+{
+  g_return_val_if_fail (spec != NULL, FALSE);
+
+  if (spec[0] == '#')
+    {
+      size_t len;
+      unsigned int r, g, b;
+
+      spec++;
+      len = strlen (spec);
+      if (len % 3 || len < 3 || len > 12)
+       return FALSE;
+
+      len /= 3;
+
+      if (!hex (spec, len, &r) ||
+         !hex (spec + len, len, &g) ||
+         !hex (spec + len * 2, len, &b))
+       return FALSE;
+
+      if (color)
+       {
+         int bits = len * 4;
+         r <<= 16 - bits;
+         g <<= 16 - bits;
+         b <<= 16 - bits;
+         while (bits < 16)
+           {
+             r |= (r >> bits);
+             g |= (g >> bits);
+             b |= (b >> bits);
+             bits *= 2;
+           }
+         color->red   = r;
+         color->green = g;
+         color->blue  = b;
+       }
+    }
+  else
+    {
+      if (!find_color (spec, color))
+       return FALSE;
+    }
+  return TRUE;
+}
diff --git a/pango/pango-context.c b/pango/pango-context.c
new file mode 100755 (executable)
index 0000000..6ec0b56
--- /dev/null
@@ -0,0 +1,1733 @@
+/* Pango
+ * pango-context.c: Contexts for itemization and shaping
+ *
+ * Copyright (C) 2000, 2006 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+
+#include "pango-context.h"
+#include "pango-impl-utils.h"
+
+#include "pango-engine.h"
+#include "pango-engine-private.h"
+#include "pango-modules.h"
+#include "pango-script-private.h"
+
+struct _PangoContext
+{
+  GObject parent_instance;
+
+  PangoLanguage *set_language;
+  PangoLanguage *language;
+  PangoDirection base_dir;
+  PangoGravity base_gravity;
+  PangoGravity resolved_gravity;
+  PangoGravityHint gravity_hint;
+
+  PangoFontDescription *font_desc;
+
+  PangoMatrix *matrix;
+
+  PangoFontMap *font_map;
+};
+
+struct _PangoContextClass
+{
+  GObjectClass parent_class;
+
+};
+
+static void pango_context_finalize    (GObject           *object);
+
+G_DEFINE_TYPE (PangoContext, pango_context, G_TYPE_OBJECT)
+
+static void
+pango_context_init (PangoContext *context)
+{
+  context->base_dir = PANGO_DIRECTION_WEAK_LTR;
+  context->resolved_gravity = context->base_gravity = PANGO_GRAVITY_SOUTH;
+  context->gravity_hint = PANGO_GRAVITY_HINT_NATURAL;
+
+  context->set_language = NULL;
+  context->language = pango_language_get_default ();
+  context->font_map = NULL;
+
+  context->font_desc = pango_font_description_new ();
+  pango_font_description_set_family_static (context->font_desc, "serif");
+  pango_font_description_set_style (context->font_desc, PANGO_STYLE_NORMAL);
+  pango_font_description_set_variant (context->font_desc, PANGO_VARIANT_NORMAL);
+  pango_font_description_set_weight (context->font_desc, PANGO_WEIGHT_NORMAL);
+  pango_font_description_set_stretch (context->font_desc, PANGO_STRETCH_NORMAL);
+  pango_font_description_set_size (context->font_desc, 12 * PANGO_SCALE);
+}
+
+static void
+pango_context_class_init (PangoContextClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = pango_context_finalize;
+}
+
+static void
+pango_context_finalize (GObject *object)
+{
+  PangoContext *context;
+
+  context = PANGO_CONTEXT (object);
+
+  if (context->font_map)
+    g_object_unref (context->font_map);
+
+  pango_font_description_free (context->font_desc);
+  if (context->matrix)
+    pango_matrix_free (context->matrix);
+
+  G_OBJECT_CLASS (pango_context_parent_class)->finalize (object);
+}
+
+
+/**
+ * pango_context_new:
+ *
+ * Creates a new #PangoContext initialized to default values.
+ *
+ * This function is not particularly useful as it should always
+ * be followed by a pango_context_set_font_map() call, and the
+ * function pango_font_map_create_context() does these two steps
+ * together and hence users are recommended to use that.
+ *
+ * If you are using Pango as part of a higher-level system,
+ * that system may have it's own way of create a #PangoContext.
+ * For instance, the GTK+ toolkit has, among others,
+ * gdk_pango_context_get_for_screen(), and
+ * gtk_widget_get_pango_context().  Use those instead.
+ *
+ * Return value: the newly allocated #PangoContext, which should
+ *               be freed with g_object_unref().
+ **/
+PangoContext *
+pango_context_new (void)
+{
+  PangoContext *context;
+
+  context = g_object_new (PANGO_TYPE_CONTEXT, NULL);
+
+  return context;
+}
+
+static void
+update_resolved_gravity (PangoContext *context)
+{
+  if (context->base_gravity == PANGO_GRAVITY_AUTO)
+    context->resolved_gravity = pango_gravity_get_for_matrix (context->matrix);
+  else
+    context->resolved_gravity = context->base_gravity;
+}
+
+/**
+ * pango_context_set_matrix:
+ * @context: a #PangoContext
+ * @matrix: a #PangoMatrix, or %NULL to unset any existing matrix.
+ *  (No matrix set is the same as setting the identity matrix.)
+ *
+ * Sets the transformation matrix that will be applied when rendering
+ * with this context. Note that reported metrics are in the user space
+ * coordinates before the application of the matrix, not device-space
+ * coordinates after the application of the matrix. So, they don't scale
+ * with the matrix, though they may change slightly for different
+ * matrices, depending on how the text is fit to the pixel grid.
+ *
+ * Since: 1.6
+ **/
+void
+pango_context_set_matrix (PangoContext       *context,
+                         const PangoMatrix  *matrix)
+{
+  g_return_if_fail (PANGO_IS_CONTEXT (context));
+
+  if (context->matrix)
+    pango_matrix_free (context->matrix);
+  if (matrix)
+    context->matrix = pango_matrix_copy (matrix);
+  else
+    context->matrix = NULL;
+
+  update_resolved_gravity (context);
+}
+
+/**
+ * pango_context_get_matrix:
+ * @context: a #PangoContext
+ *
+ * Gets the transformation matrix that will be applied when
+ * rendering with this context. See pango_context_set_matrix().
+ *
+ * Return value: the matrix, or %NULL if no matrix has been set
+ *  (which is the same as the identity matrix). The returned
+ *  matrix is owned by Pango and must not be modified or
+ *  freed.
+ *
+ * Since: 1.6
+ **/
+G_CONST_RETURN PangoMatrix *
+pango_context_get_matrix (PangoContext *context)
+{
+  g_return_val_if_fail (PANGO_IS_CONTEXT (context), NULL);
+
+  return context->matrix;
+}
+
+/**
+ * pango_context_set_font_map:
+ * @context: a #PangoContext
+ * @font_map: the #PangoFontMap to set.
+ *
+ * Sets the font map to be searched when fonts are looked-up in this context.
+ * This is only for internal use by Pango backends, a #PangoContext obtained
+ * via one of the recommended methods should already have a suitable font map.
+ **/
+void
+pango_context_set_font_map (PangoContext *context,
+                           PangoFontMap *font_map)
+{
+  g_return_if_fail (PANGO_IS_CONTEXT (context));
+  g_return_if_fail (!font_map || PANGO_IS_FONT_MAP (font_map));
+
+  if (font_map)
+    g_object_ref (font_map);
+
+  if (context->font_map)
+    g_object_unref (context->font_map);
+
+  context->font_map = font_map;
+}
+
+/**
+ * pango_context_get_font_map:
+ * @context: a #PangoContext
+ *
+ * Gets the #PangoFontmap used to look up fonts for this context.
+ *
+ * Return value: the font map for the #PangoContext. This value
+ *  is owned by Pango and should not be unreferenced.
+ *
+ * Since: 1.6
+ **/
+PangoFontMap *
+pango_context_get_font_map (PangoContext *context)
+{
+  g_return_val_if_fail (PANGO_IS_CONTEXT (context), NULL);
+
+  return context->font_map;
+}
+
+/**
+ * pango_context_list_families:
+ * @context: a #PangoContext
+ * @families: location to store a pointer to an array of #PangoFontFamily *.
+ *            This array should be freed with g_free().
+ * @n_families: location to store the number of elements in @descs
+ *
+ * List all families for a context.
+ **/
+void
+pango_context_list_families (PangoContext          *context,
+                            PangoFontFamily     ***families,
+                            int                   *n_families)
+{
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (families == NULL || n_families != NULL);
+
+  if (n_families == NULL)
+    return;
+
+  if (context->font_map == NULL)
+    {
+      *n_families = 0;
+      if (families)
+       *families = NULL;
+
+      return;
+    }
+  else
+    pango_font_map_list_families (context->font_map, families, n_families);
+}
+
+/**
+ * pango_context_load_font:
+ * @context: a #PangoContext
+ * @desc: a #PangoFontDescription describing the font to load
+ *
+ * Loads the font in one of the fontmaps in the context
+ * that is the closest match for @desc.
+ *
+ * Returns: the font loaded, or %NULL if no font matched.
+ **/
+PangoFont *
+pango_context_load_font (PangoContext               *context,
+                        const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return pango_font_map_load_font (context->font_map, context, desc);
+}
+
+/**
+ * pango_context_load_fontset:
+ * @context: a #PangoContext
+ * @desc: a #PangoFontDescription describing the fonts to load
+ * @language: a #PangoLanguage the fonts will be used for
+ *
+ * Load a set of fonts in the context that can be used to render
+ * a font matching @desc.
+ *
+ * Returns: the fontset, or %NULL if no font matched.
+ **/
+PangoFontset *
+pango_context_load_fontset (PangoContext               *context,
+                           const PangoFontDescription *desc,
+                           PangoLanguage             *language)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return pango_font_map_load_fontset (context->font_map, context, desc, language);
+}
+
+/**
+ * pango_context_set_font_description:
+ * @context: a #PangoContext
+ * @desc: the new pango font description
+ *
+ * Set the default font description for the context
+ **/
+void
+pango_context_set_font_description (PangoContext               *context,
+                                   const PangoFontDescription *desc)
+{
+  g_return_if_fail (context != NULL);
+  g_return_if_fail (desc != NULL);
+
+  pango_font_description_free (context->font_desc);
+  context->font_desc = pango_font_description_copy (desc);
+}
+
+/**
+ * pango_context_get_font_description:
+ * @context: a #PangoContext
+ *
+ * Retrieve the default font description for the context.
+ *
+ * Return value: a pointer to the context's default font description.
+ *               This value must not be modified or freed.
+ **/
+PangoFontDescription *
+pango_context_get_font_description (PangoContext *context)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return context->font_desc;
+}
+
+/**
+ * pango_context_set_language:
+ * @context: a #PangoContext
+ * @language: the new language tag.
+ *
+ * Sets the global language tag for the context.  The default language
+ * for the locale of the running process can be found using
+ * pango_language_get_default().
+ **/
+void
+pango_context_set_language (PangoContext *context,
+                           PangoLanguage    *language)
+{
+  g_return_if_fail (context != NULL);
+
+  context->set_language = language;
+  if (language)
+    context->language = language;
+  else
+    context->language = pango_language_get_default ();
+}
+
+/**
+ * pango_context_get_language:
+ * @context: a #PangoContext
+ *
+ * Retrieves the global language tag for the context.
+ *
+ * Return value: the global language tag.
+ **/
+PangoLanguage *
+pango_context_get_language (PangoContext *context)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+
+  return context->set_language;
+}
+
+/**
+ * pango_context_set_base_dir:
+ * @context: a #PangoContext
+ * @direction: the new base direction
+ *
+ * Sets the base direction for the context.
+ *
+ * The base direction is used in applying the Unicode bidirectional
+ * algorithm; if the @direction is %PANGO_DIRECTION_LTR or
+ * %PANGO_DIRECTION_RTL, then the value will be used as the paragraph
+ * direction in the Unicode bidirectional algorithm.  A value of
+ * %PANGO_DIRECTION_WEAK_LTR or %PANGO_DIRECTION_WEAK_RTL is used only
+ * for paragraphs that do not contain any strong characters themselves.
+ **/
+void
+pango_context_set_base_dir (PangoContext  *context,
+                           PangoDirection direction)
+{
+  g_return_if_fail (context != NULL);
+
+  context->base_dir = direction;
+}
+
+/**
+ * pango_context_get_base_dir:
+ * @context: a #PangoContext
+ *
+ * Retrieves the base direction for the context. See
+ * pango_context_set_base_dir().
+ *
+ * Return value: the base direction for the context.
+ **/
+PangoDirection
+pango_context_get_base_dir (PangoContext *context)
+{
+  g_return_val_if_fail (context != NULL, PANGO_DIRECTION_LTR);
+
+  return context->base_dir;
+}
+
+/**
+ * pango_context_set_base_gravity:
+ * @context: a #PangoContext
+ * @gravity: the new base gravity
+ *
+ * Sets the base gravity for the context.
+ *
+ * The base gravity is used in laying vertical text out.
+ *
+ * Since: 1.16
+ **/
+void
+pango_context_set_base_gravity (PangoContext  *context,
+                               PangoGravity gravity)
+{
+  g_return_if_fail (context != NULL);
+
+  context->base_gravity = gravity;
+
+  update_resolved_gravity (context);
+}
+
+/**
+ * pango_context_get_base_gravity:
+ * @context: a #PangoContext
+ *
+ * Retrieves the base gravity for the context. See
+ * pango_context_set_base_gravity().
+ *
+ * Return value: the base gravity for the context.
+ *
+ * Since: 1.16
+ **/
+PangoGravity
+pango_context_get_base_gravity (PangoContext *context)
+{
+  g_return_val_if_fail (context != NULL, PANGO_GRAVITY_SOUTH);
+
+  return context->base_gravity;
+}
+
+/**
+ * pango_context_get_gravity:
+ * @context: a #PangoContext
+ *
+ * Retrieves the gravity for the context. This is similar to
+ * pango_context_get_base_gravity(), except for when the base gravity
+ * is %PANGO_GRAVITY_AUTO for which pango_gravity_get_for_matrix() is used
+ * to return the gravity from the current context matrix.
+ *
+ * Return value: the resolved gravity for the context.
+ *
+ * Since: 1.16
+ **/
+PangoGravity
+pango_context_get_gravity (PangoContext *context)
+{
+  g_return_val_if_fail (context != NULL, PANGO_GRAVITY_SOUTH);
+
+  return context->resolved_gravity;
+}
+
+/**
+ * pango_context_set_gravity_hint:
+ * @context: a #PangoContext
+ * @hint: the new gravity hint
+ *
+ * Sets the gravity hint for the context.
+ *
+ * The gravity hint is used in laying vertical text out, and is only relevant
+ * if gravity of the context as returned by pango_context_get_gravity()
+ * is set %PANGO_GRAVITY_EAST or %PANGO_GRAVITY_WEST.
+ *
+ * Since: 1.16
+ **/
+void
+pango_context_set_gravity_hint (PangoContext    *context,
+                               PangoGravityHint hint)
+{
+  g_return_if_fail (context != NULL);
+
+  context->gravity_hint = hint;
+}
+
+/**
+ * pango_context_get_gravity_hint:
+ * @context: a #PangoContext
+ *
+ * Retrieves the gravity hint for the context. See
+ * pango_context_set_gravity_hint() for details.
+ *
+ * Return value: the gravity hint for the context.
+ *
+ * Since: 1.16
+ **/
+PangoGravityHint
+pango_context_get_gravity_hint (PangoContext *context)
+{
+  g_return_val_if_fail (context != NULL, PANGO_GRAVITY_HINT_NATURAL);
+
+  return context->gravity_hint;
+}
+
+/**********************************************************************/
+
+static gboolean
+advance_attr_iterator_to (PangoAttrIterator *iterator,
+                         int                start_index)
+{
+  int start_range, end_range;
+
+  pango_attr_iterator_range (iterator, &start_range, &end_range);
+
+  while (start_index >= end_range)
+    {
+      if (!pango_attr_iterator_next (iterator))
+       return FALSE;
+      pango_attr_iterator_range (iterator, &start_range, &end_range);
+    }
+
+  if (start_range > start_index)
+    g_warning ("In pango_itemize(), the cached iterator passed in "
+              "had already moved beyond the start_index");
+
+  return TRUE;
+}
+
+/***************************************************************************
+ * We cache the results of character,fontset => font,shaper in a hash table
+ ***************************************************************************/
+
+typedef struct {
+  GHashTable *hash;
+} ShaperFontCache;
+
+typedef struct {
+  PangoEngineShape *shape_engine;
+  PangoFont *font;
+} ShaperFontElement;
+
+static void
+shaper_font_cache_destroy (ShaperFontCache *cache)
+{
+  g_hash_table_destroy (cache->hash);
+  g_slice_free (ShaperFontCache, cache);
+}
+
+static void
+shaper_font_element_destroy (ShaperFontElement *element)
+{
+  if (element->shape_engine)
+    g_object_unref (element->shape_engine);
+  if (element->font)
+    g_object_unref (element->font);
+  g_slice_free (ShaperFontElement, element);
+}
+
+static ShaperFontCache *
+get_shaper_font_cache (PangoFontset *fontset)
+{
+  ShaperFontCache *cache;
+
+  static GQuark cache_quark = 0;
+  if (G_UNLIKELY (!cache_quark))
+    cache_quark = g_quark_from_static_string ("pango-shaper-font-cache");
+
+  cache = g_object_get_qdata (G_OBJECT (fontset), cache_quark);
+  if (!cache)
+    {
+      cache = g_slice_new (ShaperFontCache);
+      cache->hash = g_hash_table_new_full (g_direct_hash, NULL,
+                                          NULL, (GDestroyNotify)shaper_font_element_destroy);
+
+      g_object_set_qdata_full (G_OBJECT (fontset), cache_quark,
+                              cache, (GDestroyNotify)shaper_font_cache_destroy);
+    }
+
+  return cache;
+}
+
+static gboolean
+shaper_font_cache_get (ShaperFontCache   *cache,
+                      gunichar           wc,
+                      PangoEngineShape **shape_engine,
+                      PangoFont        **font)
+{
+  ShaperFontElement *element;
+
+  element = g_hash_table_lookup (cache->hash, GUINT_TO_POINTER (wc));
+  if (element)
+    {
+      *shape_engine = element->shape_engine;
+      *font = element->font;
+
+      return TRUE;
+    }
+  else
+    return FALSE;
+}
+
+static void
+shaper_font_cache_insert (ShaperFontCache   *cache,
+                         gunichar           wc,
+                         PangoEngineShape  *shape_engine,
+                         PangoFont         *font)
+{
+  ShaperFontElement *element = g_slice_new (ShaperFontElement);
+  element->shape_engine = shape_engine ? g_object_ref (shape_engine) : NULL;
+  element->font = font ? g_object_ref (font) : NULL;
+
+  g_hash_table_insert (cache->hash, GUINT_TO_POINTER (wc), element);
+}
+
+/**********************************************************************/
+
+typedef enum {
+  EMBEDDING_CHANGED    = 1 << 0,
+  SCRIPT_CHANGED       = 1 << 1,
+  LANG_CHANGED         = 1 << 2,
+  FONT_CHANGED         = 1 << 3,
+  DERIVED_LANG_CHANGED = 1 << 4,
+  WIDTH_CHANGED        = 1 << 5
+} ChangedFlags;
+
+
+
+typedef struct _PangoWidthIter PangoWidthIter;
+
+struct _PangoWidthIter
+{
+       const gchar *text_start;
+       const gchar *text_end;
+       const gchar *start;
+       const gchar *end;
+       gboolean wide;
+};
+
+typedef struct _ItemizeState ItemizeState;
+
+
+
+struct _ItemizeState
+{
+  PangoContext *context;
+  const char *text;
+  const char *end;
+
+  const char *run_start;
+  const char *run_end;
+
+  GList *result;
+  PangoItem *item;
+
+  guint8 *embedding_levels;
+  int embedding_end_offset;
+  const char *embedding_end;
+  guint8 embedding;
+
+  PangoGravity gravity;
+  PangoGravityHint gravity_hint;
+  PangoGravity resolved_gravity;
+  PangoGravity font_desc_gravity;
+  gboolean centered_baseline;
+
+  PangoAttrIterator *attr_iter;
+  gboolean free_attr_iter;
+  const char *attr_end;
+  PangoFontDescription *font_desc;
+  PangoLanguage *lang;
+  GSList *extra_attrs;
+  gboolean copy_extra_attrs;
+
+  ChangedFlags changed;
+
+  PangoScriptIter script_iter;
+  const char *script_end;
+  PangoScript script;
+
+  PangoWidthIter width_iter;
+
+  PangoLanguage *derived_lang;
+  PangoEngineLang *lang_engine;
+
+  PangoFontset *current_fonts;
+  ShaperFontCache *cache;
+  PangoFont *base_font;
+  gboolean enable_fallback;
+
+  GSList *exact_engines;
+  GSList *fallback_engines;
+};
+
+static void
+update_embedding_end (ItemizeState *state)
+{
+  state->embedding = state->embedding_levels[state->embedding_end_offset];
+  while (state->embedding_end < state->end &&
+        state->embedding_levels[state->embedding_end_offset] == state->embedding)
+    {
+      state->embedding_end_offset++;
+      state->embedding_end = g_utf8_next_char (state->embedding_end);
+    }
+
+  state->changed |= EMBEDDING_CHANGED;
+}
+
+static PangoAttribute *
+find_attribute (GSList        *attr_list,
+               PangoAttrType  type)
+{
+  GSList *node;
+
+  for (node = attr_list; node; node = node->next)
+    if (((PangoAttribute *) node->data)->klass->type == type)
+      return (PangoAttribute *) node->data;
+
+  return NULL;
+}
+
+static void
+update_attr_iterator (ItemizeState *state)
+{
+  PangoLanguage *old_lang;
+  PangoAttribute *attr;
+  int end_index;
+
+  pango_attr_iterator_range (state->attr_iter, NULL, &end_index);
+  if (end_index < state->end - state->text)
+    state->attr_end = state->text + end_index;
+  else
+    state->attr_end = state->end;
+
+  old_lang = state->lang;
+  if (state->font_desc)
+    pango_font_description_free (state->font_desc);
+  state->font_desc = pango_font_description_copy_static (state->context->font_desc);
+  pango_attr_iterator_get_font (state->attr_iter, state->font_desc,
+                               &state->lang, &state->extra_attrs);
+  if (pango_font_description_get_set_fields (state->font_desc) & PANGO_FONT_MASK_GRAVITY)
+    state->font_desc_gravity = pango_font_description_get_gravity (state->font_desc);
+  else
+    state->font_desc_gravity = PANGO_GRAVITY_AUTO;
+
+  state->copy_extra_attrs = FALSE;
+
+  if (!state->lang)
+    state->lang = state->context->language;
+
+  attr = find_attribute (state->extra_attrs, PANGO_ATTR_FALLBACK);
+  state->enable_fallback = (attr == NULL || ((PangoAttrInt *)attr)->value);
+
+  attr = find_attribute (state->extra_attrs, PANGO_ATTR_GRAVITY);
+  state->gravity = attr == NULL ? PANGO_GRAVITY_AUTO : ((PangoAttrInt *)attr)->value;
+
+  attr = find_attribute (state->extra_attrs, PANGO_ATTR_GRAVITY_HINT);
+  state->gravity_hint = attr == NULL ? state->context->gravity_hint : (PangoGravityHint)((PangoAttrInt *)attr)->value;
+
+  state->changed |= FONT_CHANGED;
+  if (state->lang != old_lang)
+    state->changed |= LANG_CHANGED;
+}
+
+static void
+update_end (ItemizeState *state)
+{
+  state->run_end = state->embedding_end;
+  if (state->attr_end < state->run_end)
+    state->run_end = state->attr_end;
+  if (state->script_end < state->run_end)
+    state->run_end = state->script_end;
+  if (state->width_iter.end < state->run_end)
+    state->run_end = state->width_iter.end;
+}
+
+static void
+width_iter_next(PangoWidthIter* iter)
+{
+  iter->start = iter->end;
+
+  if (iter->end < iter->text_end)
+    {
+      gunichar ch = g_utf8_get_char (iter->end);
+      iter->wide = g_unichar_iswide (ch);
+    }
+
+  while (iter->end < iter->text_end)
+    {
+      gunichar ch = g_utf8_get_char (iter->end);
+      if (g_unichar_iswide (ch) != iter->wide)
+        break;
+      iter->end = g_utf8_next_char (iter->end);
+    }
+}
+
+static void
+width_iter_init (PangoWidthIter* iter, const char* text, int length)
+{
+  iter->text_start = text;
+  iter->text_end = text + length;
+  iter->start = iter->end = text;
+
+  width_iter_next (iter);
+}
+
+static void
+itemize_state_init (ItemizeState      *state,
+                   PangoContext      *context,
+                   const char        *text,
+                   PangoDirection     base_dir,
+                   int                start_index,
+                   int                length,
+                   PangoAttrList     *attrs,
+                   PangoAttrIterator *cached_iter,
+                   const PangoFontDescription *desc)
+{
+
+  state->context = context;
+  state->text = text;
+  state->end = text + start_index + length;
+
+  state->result = NULL;
+  state->item = NULL;
+
+  state->run_start = text + start_index;
+
+  /* First, apply the bidirectional algorithm to break
+   * the text into directional runs.
+   */
+  state->embedding_levels = pango_log2vis_get_embedding_levels (text + start_index, length, &base_dir);
+
+  state->embedding_end_offset = 0;
+  state->embedding_end = text + start_index;
+  update_embedding_end (state);
+
+  /* Initialize the attribute iterator
+   */
+  if (cached_iter)
+    {
+      state->attr_iter = cached_iter;
+      state->free_attr_iter = FALSE;
+    }
+  else if (attrs)
+    {
+      state->attr_iter = pango_attr_list_get_iterator (attrs);
+      state->free_attr_iter = TRUE;
+    }
+  else
+    {
+      state->attr_iter = NULL;
+      state->free_attr_iter = FALSE;
+    }
+
+  if (state->attr_iter)
+    {
+      state->font_desc = NULL;
+      state->lang = NULL;
+
+      advance_attr_iterator_to (state->attr_iter, start_index);
+      update_attr_iterator (state);
+    }
+  else
+    {
+      state->font_desc = pango_font_description_copy_static (desc ? desc : state->context->font_desc);
+      state->lang = state->context->language;
+      state->extra_attrs = NULL;
+      state->copy_extra_attrs = FALSE;
+
+      state->attr_end = state->end;
+      state->enable_fallback = TRUE;
+    }
+
+  /* Initialize the script iterator
+   */
+  _pango_script_iter_init (&state->script_iter, text + start_index, length);
+  pango_script_iter_get_range (&state->script_iter, NULL,
+                              &state->script_end, &state->script);
+
+  /* Initialize the width iterator */
+  width_iter_init (&state->width_iter, text + start_index, length);
+
+  update_end (state);
+
+  if (pango_font_description_get_set_fields (state->font_desc) & PANGO_FONT_MASK_GRAVITY)
+    state->font_desc_gravity = pango_font_description_get_gravity (state->font_desc);
+  else
+    state->font_desc_gravity = PANGO_GRAVITY_AUTO;
+
+  state->gravity = PANGO_GRAVITY_AUTO;
+  state->centered_baseline = PANGO_GRAVITY_IS_VERTICAL (state->context->resolved_gravity);
+  state->gravity_hint = state->context->gravity_hint;
+  state->resolved_gravity = PANGO_GRAVITY_AUTO;
+  state->derived_lang = NULL;
+  state->lang_engine = NULL;
+  state->current_fonts = NULL;
+  state->cache = NULL;
+  state->exact_engines = NULL;
+  state->fallback_engines = NULL;
+  state->base_font = NULL;
+
+  state->changed = EMBEDDING_CHANGED | SCRIPT_CHANGED | LANG_CHANGED | FONT_CHANGED | WIDTH_CHANGED;
+}
+
+static gboolean
+itemize_state_next (ItemizeState *state)
+{
+  if (state->run_end == state->end)
+    return FALSE;
+
+  state->changed = 0;
+
+  state->run_start = state->run_end;
+
+  if (state->run_end == state->embedding_end)
+    {
+      update_embedding_end (state);
+    }
+
+  if (state->run_end == state->attr_end)
+    {
+      pango_attr_iterator_next (state->attr_iter);
+      update_attr_iterator (state);
+    }
+
+  if (state->run_end == state->script_end)
+    {
+      pango_script_iter_next (&state->script_iter);
+      pango_script_iter_get_range (&state->script_iter, NULL,
+                                  &state->script_end, &state->script);
+      state->changed |= SCRIPT_CHANGED;
+    }
+  if (state->run_end == state->width_iter.end)
+    {
+      width_iter_next (&state->width_iter);
+      state->changed |= WIDTH_CHANGED;
+    }
+
+  update_end (state);
+
+  return TRUE;
+}
+
+static GSList *
+copy_attr_slist (GSList *attr_slist)
+{
+  GSList *new_list = NULL;
+  GSList *l;
+
+  for (l = attr_slist; l; l = l->next)
+    new_list = g_slist_prepend (new_list, pango_attribute_copy (l->data));
+
+  return g_slist_reverse (new_list);
+}
+
+static void
+itemize_state_fill_shaper (ItemizeState     *state,
+                          PangoEngineShape *shape_engine,
+                          PangoFont        *font)
+{
+  GList *l;
+
+  for (l = state->result; l; l = l->next)
+    {
+      PangoItem *item = l->data;
+      if (item->analysis.shape_engine)
+       break;
+      if (font)
+       item->analysis.font = g_object_ref (font);
+      else
+       item->analysis.font = NULL;
+      item->analysis.shape_engine = shape_engine;
+    }
+}
+
+static void
+itemize_state_add_character (ItemizeState     *state,
+                            PangoEngineShape *shape_engine,
+                            PangoFont        *font,
+                            gboolean          force_break,
+                            const char       *pos)
+{
+  if (state->item)
+    {
+      if (!state->item->analysis.shape_engine && shape_engine)
+       {
+         itemize_state_fill_shaper (state, shape_engine, font);
+       }
+      else if (state->item->analysis.shape_engine && !shape_engine)
+       {
+         font = state->item->analysis.font;
+         shape_engine = state->item->analysis.shape_engine;
+       }
+
+      if (!force_break &&
+         state->item->analysis.lang_engine == state->lang_engine &&
+         state->item->analysis.shape_engine == shape_engine &&
+         state->item->analysis.font == font)
+       {
+         state->item->num_chars++;
+         return;
+       }
+
+      state->item->length = (pos - state->text) - state->item->offset;
+    }
+
+  state->item = pango_item_new ();
+  state->item->offset = pos - state->text;
+  state->item->length = 0;
+  state->item->num_chars = 1;
+  state->item->analysis.shape_engine = shape_engine;
+  state->item->analysis.lang_engine = state->lang_engine;
+
+  if (font)
+    g_object_ref (font);
+  state->item->analysis.font = font;
+
+  state->item->analysis.level = state->embedding;
+  state->item->analysis.gravity = state->resolved_gravity;
+
+  /* The level vs. gravity dance:
+   *   - If gravity is SOUTH, leave level untouched.
+   *   - If gravity is NORTH, step level one up, to
+   *     not get mirrored upside-down text.
+   *   - If gravity is EAST, step up to an even level, as
+   *     it's a clockwise-rotated layout, so the rotated
+   *     top is unrotated left.
+   *   - If gravity is WEST, step up to an odd level, as
+   *     it's a counter-clockwise-rotated layout, so the rotated
+   *     top is unrotated right.
+   *
+   * A similar dance is performed in pango-layout.c:
+   * line_set_resolved_dir().  Keep in synch.
+   */
+  switch (state->item->analysis.gravity)
+    {
+      case PANGO_GRAVITY_SOUTH:
+      default:
+       break;
+      case PANGO_GRAVITY_NORTH:
+       state->item->analysis.level++;
+       break;
+      case PANGO_GRAVITY_EAST:
+       state->item->analysis.level += 1;
+       state->item->analysis.level &= ~1;
+       break;
+      case PANGO_GRAVITY_WEST:
+       state->item->analysis.level |= 1;
+       break;
+    }
+
+  state->item->analysis.flags = state->centered_baseline ? PANGO_ANALYSIS_FLAG_CENTERED_BASELINE : 0;
+
+  state->item->analysis.script = state->script;
+  state->item->analysis.language = state->derived_lang;
+
+  if (state->copy_extra_attrs)
+    {
+      state->item->analysis.extra_attrs = copy_attr_slist (state->extra_attrs);
+    }
+  else
+    {
+      state->item->analysis.extra_attrs = state->extra_attrs;
+      state->copy_extra_attrs = TRUE;
+    }
+
+  state->result = g_list_prepend (state->result, state->item);
+}
+
+static void
+get_engines (PangoContext  *context,
+            PangoLanguage *lang,
+            PangoScript    script,
+            GSList       **exact_engines,
+            GSList       **fallback_engines)
+{
+  const char *engine_type = pango_font_map_get_shape_engine_type (context->font_map);
+  PangoMap *shaper_map = pango_find_map (lang,
+                                        g_quark_from_string (PANGO_ENGINE_TYPE_SHAPE),
+                                        g_quark_from_string (engine_type));
+  pango_map_get_engines (shaper_map, script,
+                        exact_engines, fallback_engines);
+}
+
+typedef struct {
+  PangoLanguage *lang;
+  gunichar wc;
+  GSList *engines;
+  PangoEngineShape *shape_engine;
+  PangoFont *font;
+} GetShaperFontInfo;
+
+static gboolean
+get_shaper_and_font_foreach (PangoFontset *fontset G_GNUC_UNUSED,
+                            PangoFont    *font,
+                            gpointer      data)
+{
+  GetShaperFontInfo *info = data;
+  GSList *l;
+
+  if (G_UNLIKELY (!font))
+    return FALSE;
+
+  for (l = info->engines; l; l = l->next)
+    {
+      PangoEngineShape *engine = l->data;
+      PangoCoverageLevel level;
+
+      level = _pango_engine_shape_covers (engine, font,
+                                         info->lang, info->wc);
+      if (level != PANGO_COVERAGE_NONE)
+       {
+         info->shape_engine = engine;
+         info->font = font;
+         return TRUE;
+       }
+    }
+
+  return FALSE;
+}
+
+static PangoFont *
+get_base_font (ItemizeState *state)
+{
+  if (!state->base_font)
+    state->base_font = pango_font_map_load_font (state->context->font_map,
+                                                state->context,
+                                                state->font_desc);
+  return state->base_font;
+}
+
+static PangoScript
+get_script (ItemizeState      *state)
+{
+  /* Always use a basic shaper for vertical layout (ie, east/west gravity)
+   * as none of our script shapers support vertical shaping right now.
+   *
+   * XXX Should move the knowledge into the shaper interface.
+   */
+
+  if (PANGO_GRAVITY_IS_VERTICAL (state->resolved_gravity))
+    return PANGO_SCRIPT_COMMON;
+  else
+    return state->script;
+}
+
+static gboolean
+get_shaper_and_font (ItemizeState      *state,
+                    gunichar           wc,
+                    PangoEngineShape **shape_engine,
+                    PangoFont        **font)
+{
+  GetShaperFontInfo info;
+
+  /* We'd need a separate cache when fallback is disabled, but since lookup
+   * with fallback disabled is faster anyways, we just skip caching */
+  if (state->enable_fallback && shaper_font_cache_get (state->cache, wc, shape_engine, font))
+    return *shape_engine != NULL;
+
+  if (!state->exact_engines && !state->fallback_engines)
+    get_engines (state->context, state->derived_lang, get_script (state),
+                &state->exact_engines, &state->fallback_engines);
+
+  info.lang = state->derived_lang;
+  info.wc = wc;
+  info.shape_engine = NULL;
+  info.font = NULL;
+
+  info.engines = state->exact_engines;
+  if (info.engines)
+    {
+      if (state->enable_fallback)
+       pango_fontset_foreach (state->current_fonts, get_shaper_and_font_foreach, &info);
+      else
+       get_shaper_and_font_foreach (NULL, get_base_font (state), &info);
+
+      if (info.shape_engine)
+       {
+         *shape_engine = info.shape_engine;
+         *font = info.font;
+
+         /* skip caching if fallback disabled (see above) */
+         if (state->enable_fallback)
+           shaper_font_cache_insert (state->cache, wc, *shape_engine, *font);
+
+         return TRUE;
+       }
+    }
+
+  info.engines = state->fallback_engines;
+  if (info.engines)
+    {
+      if (state->enable_fallback)
+       pango_fontset_foreach (state->current_fonts, get_shaper_and_font_foreach, &info);
+      else
+       get_shaper_and_font_foreach (NULL, get_base_font (state), &info);
+    }
+
+  *shape_engine = info.shape_engine;
+  *font = info.font;
+
+  /* skip caching if fallback disabled (see above) */
+  if (state->enable_fallback)
+    shaper_font_cache_insert (state->cache, wc, *shape_engine, *font);
+
+  return *shape_engine != NULL;
+}
+
+static void
+itemize_state_reset_shape_engines (ItemizeState *state)
+{
+  g_slist_free (state->exact_engines);
+  state->exact_engines = NULL;
+  g_slist_free (state->fallback_engines);
+  state->fallback_engines = NULL;
+}
+
+static PangoLanguage *
+compute_derived_language (PangoLanguage *lang,
+                         PangoScript    script)
+{
+  PangoLanguage *derived_lang;
+
+  /* Make sure the language tag is consistent with the derived
+   * script. There is no point in marking up a section of
+   * Arabic text with the "en" language tag.
+   */
+  if (lang && pango_language_includes_script (lang, script))
+    derived_lang = lang;
+  else
+    {
+      derived_lang = pango_script_get_sample_language (script);
+      /* If we don't find a sample language for the script, we
+       * use a language tag that shouldn't actually be used
+       * anywhere. This keeps fontconfig (for the PangoFc*
+       * backend) from using the language tag to affect the
+       * sort order. I don't have a reference for 'xx' being
+       * safe here, though Keith Packard claims it is.
+       */
+      if (!derived_lang)
+       derived_lang = pango_language_from_string ("xx");
+    }
+
+  return derived_lang;
+}
+
+static PangoMap *
+get_lang_map (PangoLanguage *lang)
+{
+  static guint engine_type_id = 0;
+  static guint render_type_id = 0;
+
+  if (engine_type_id == 0)
+    {
+      engine_type_id = g_quark_from_static_string (PANGO_ENGINE_TYPE_LANG);
+      render_type_id = g_quark_from_static_string (PANGO_RENDER_TYPE_NONE);
+    }
+
+  return pango_find_map (lang, engine_type_id, render_type_id);
+}
+
+static void
+itemize_state_update_for_new_run (ItemizeState *state)
+{
+  /* This block should be moved to update_attr_iterator, but I'm too lazy to
+   * do it right now */
+  if (state->changed & (FONT_CHANGED | SCRIPT_CHANGED | WIDTH_CHANGED))
+    {
+      PangoGravity old_gravity = state->resolved_gravity;
+
+      /* Font-desc gravity overrides everything */
+      if (state->font_desc_gravity != PANGO_GRAVITY_AUTO)
+       {
+         state->resolved_gravity = state->font_desc_gravity;
+       }
+      else
+       {
+         PangoGravity gravity = state->gravity;
+         PangoGravityHint gravity_hint = state->gravity_hint;
+
+         if (G_LIKELY (gravity == PANGO_GRAVITY_AUTO))
+           gravity = state->context->resolved_gravity;
+
+         state->resolved_gravity = pango_gravity_get_for_script_and_width (state->script,
+                                                                           state->width_iter.wide,
+                                                                           gravity,
+                                                                           gravity_hint);
+       }
+
+      if (old_gravity != state->resolved_gravity)
+       {
+         pango_font_description_set_gravity (state->font_desc, state->resolved_gravity);
+         state->changed |= FONT_CHANGED;
+       }
+    }
+
+  if (state->changed & (SCRIPT_CHANGED | LANG_CHANGED))
+    {
+      PangoLanguage *old_derived_lang = state->derived_lang;
+      state->derived_lang = compute_derived_language (state->lang, state->script);
+      if (old_derived_lang != state->derived_lang)
+       state->changed |= DERIVED_LANG_CHANGED;
+    }
+
+  if ((state->changed & DERIVED_LANG_CHANGED) || !state->lang_engine)
+    {
+      PangoMap *lang_map = get_lang_map (state->derived_lang);
+      state->lang_engine = (PangoEngineLang *)pango_map_get_engine (lang_map, state->script);
+    }
+
+  if (state->changed & (SCRIPT_CHANGED | DERIVED_LANG_CHANGED))
+    itemize_state_reset_shape_engines (state);
+
+  if (state->changed & (FONT_CHANGED | DERIVED_LANG_CHANGED) &&
+      state->current_fonts)
+    {
+      g_object_unref (state->current_fonts);
+      state->current_fonts = NULL;
+      state->cache = NULL;
+    }
+
+  if (!state->current_fonts)
+    {
+      state->current_fonts = pango_font_map_load_fontset (state->context->font_map,
+                                                         state->context,
+                                                         state->font_desc,
+                                                         state->derived_lang);
+      state->cache = get_shaper_font_cache (state->current_fonts);
+    }
+
+  if ((state->changed & FONT_CHANGED) && state->base_font)
+    {
+      g_object_unref (state->base_font);
+      state->base_font = NULL;
+    }
+}
+
+static const char *
+string_from_script (PangoScript script)
+{
+  static GEnumClass *class = NULL;
+  GEnumValue *value;
+  if (!class)
+    class = g_type_class_ref (PANGO_TYPE_SCRIPT);
+
+  value = g_enum_get_value (class, script);
+  if (!value)
+    return string_from_script (PANGO_SCRIPT_INVALID_CODE);
+
+  return value->value_nick;
+}
+
+static void
+itemize_state_process_run (ItemizeState *state)
+{
+  const char *p;
+  gboolean last_was_forced_break = FALSE;
+
+  /* Only one character has type G_UNICODE_LINE_SEPARATOR in Unicode 4.0;
+   * update this if that changes. */
+#define LINE_SEPARATOR 0x2028
+
+  itemize_state_update_for_new_run (state);
+
+  /* We should never get an empty run */
+  g_assert (state->run_end != state->run_start);
+
+  for (p = state->run_start;
+       p < state->run_end;
+       p = g_utf8_next_char (p))
+    {
+      gunichar wc = g_utf8_get_char (p);
+      gboolean is_forced_break = (wc == '\t' || wc == LINE_SEPARATOR);
+      PangoEngineShape *shape_engine;
+      PangoFont *font;
+
+      /* We don't want space characters to affect font selection; in general,
+       * it's always wrong to select a font just to render a space.  But until
+       * we have a better solution, choosing a font for spaces seems to work
+       * better.  However, all fonts are assumed to cover ASCII space, so that
+       * one is an exception.  See bug #355987.
+       *
+       * The exception of PrivateUse and Unassigned characters is necessary
+       * to be able to render any of them. (for private or being encoded
+       * scripts, etc.) (Recent glib returns true in isprint for PrivateUse.)
+       */
+      if (wc == 0x0020 ||
+         G_UNLIKELY (!g_unichar_isprint (wc) &&
+                     g_unichar_type (wc) != G_UNICODE_PRIVATE_USE &&
+                     g_unichar_type (wc) != G_UNICODE_UNASSIGNED))
+       {
+         shape_engine = NULL;
+         font = NULL;
+       }
+      else
+       {
+         get_shaper_and_font (state, wc, &shape_engine, &font);
+       }
+
+      itemize_state_add_character (state,
+                                  shape_engine, font,
+                                  is_forced_break || last_was_forced_break,
+                                  p);
+
+      last_was_forced_break = is_forced_break;
+    }
+
+  /* Finish the final item from the current segment */
+  state->item->length = (p - state->text) - state->item->offset;
+  if (!state->item->analysis.shape_engine)
+    {
+      PangoEngineShape *shape_engine;
+      PangoFont *font;
+
+      if (G_UNLIKELY (!get_shaper_and_font (state, ' ', &shape_engine, &font)))
+       {
+         /* If no shaper was found, warn only once per fontmap/script pair */
+         PangoFontMap *fontmap = state->context->font_map;
+         const char *script_name = string_from_script (get_script (state));
+
+         if (!g_object_get_data (G_OBJECT (fontmap), script_name))
+           {
+             g_warning ("failed to choose a font, expect ugly output. engine-type='%s', script='%s'",
+                        pango_font_map_get_shape_engine_type (fontmap),
+                        script_name);
+
+             g_object_set_data_full (G_OBJECT (fontmap), script_name,
+                                     GINT_TO_POINTER (1), NULL);
+           }
+
+         shape_engine = _pango_get_fallback_shaper ();
+         font = NULL;
+       }
+
+      itemize_state_fill_shaper (state, shape_engine, font);
+    }
+  state->item = NULL;
+}
+
+static void
+itemize_state_finish (ItemizeState *state)
+{
+  g_free (state->embedding_levels);
+  if (state->free_attr_iter)
+    pango_attr_iterator_destroy (state->attr_iter);
+  _pango_script_iter_fini (&state->script_iter);
+  pango_font_description_free (state->font_desc);
+
+  itemize_state_reset_shape_engines (state);
+  if (state->current_fonts)
+    g_object_unref (state->current_fonts);
+  if (state->base_font)
+    g_object_unref (state->base_font);
+}
+
+/**
+ * pango_itemize_with_base_dir:
+ * @context:   a structure holding information that affects
+              the itemization process.
+ * @text:      the text to itemize.
+ * @start_index: first byte in @text to process
+ * @length:    the number of bytes (not characters) to process
+ *             after @start_index.
+ *             This must be >= 0.
+ * @base_dir:  base direction to use for bidirectional processing
+ * @attrs:     the set of attributes that apply to @text.
+ * @cached_iter:      Cached attribute iterator, or %NULL
+ *
+ * Like pango_itemize(), but the base direction to use when
+ * computing bidirectional levels (see pango_context_set_base_dir ()),
+ * is specified explicitly rather than gotten from the #PangoContext.
+ *
+ * Return value: a #GList of #PangoItem structures.  The items should be
+ * freed using pango_item_free() probably in combination with g_list_foreach(),
+ * and the list itself using g_list_free().
+ *
+ * Since: 1.4
+ */
+GList *
+pango_itemize_with_base_dir (PangoContext      *context,
+                            PangoDirection     base_dir,
+                            const char        *text,
+                            int                start_index,
+                            int                length,
+                            PangoAttrList     *attrs,
+                            PangoAttrIterator *cached_iter)
+{
+  ItemizeState state;
+
+  g_return_val_if_fail (context != NULL, NULL);
+  g_return_val_if_fail (start_index >= 0, NULL);
+  g_return_val_if_fail (length >= 0, NULL);
+  g_return_val_if_fail (length == 0 || text != NULL, NULL);
+
+  if (length == 0)
+    return NULL;
+
+  itemize_state_init (&state, context, text, base_dir, start_index, length,
+                     attrs, cached_iter, NULL);
+
+  do
+    itemize_state_process_run (&state);
+  while (itemize_state_next (&state));
+
+  itemize_state_finish (&state);
+
+  return g_list_reverse (state.result);
+}
+
+static GList *
+itemize_with_font (PangoContext               *context,
+                  const char                 *text,
+                  int                         start_index,
+                  int                         length,
+                  const PangoFontDescription *desc)
+{
+  ItemizeState state;
+
+  if (length == 0)
+    return NULL;
+
+  itemize_state_init (&state, context, text, context->base_dir, start_index, length,
+                     NULL, NULL, desc);
+
+  do
+    itemize_state_process_run (&state);
+  while (itemize_state_next (&state));
+
+  itemize_state_finish (&state);
+
+  return g_list_reverse (state.result);
+}
+
+/**
+ * pango_itemize:
+ * @context:   a structure holding information that affects
+              the itemization process.
+ * @text:      the text to itemize.
+ * @start_index: first byte in @text to process
+ * @length:    the number of bytes (not characters) to process
+ *             after @start_index.
+ *             This must be >= 0.
+ * @attrs:     the set of attributes that apply to @text.
+ * @cached_iter:      Cached attribute iterator, or %NULL
+ *
+ * Breaks a piece of text into segments with consistent
+ * directional level and shaping engine. Each byte of @text will
+ * be contained in exactly one of the items in the returned list;
+ * the generated list of items will be in logical order (the start
+ * offsets of the items are ascending).
+ *
+ * @cached_iter should be an iterator over @attrs currently positioned at a
+ * range before or containing @start_index; @cached_iter will be advanced to
+ * the range covering the position just after @start_index + @length.
+ * (i.e. if itemizing in a loop, just keep passing in the same @cached_iter).
+ *
+ * Return value: a #GList of #PangoItem structures.
+ */
+GList *
+pango_itemize (PangoContext      *context,
+              const char        *text,
+              int                start_index,
+              int                length,
+              PangoAttrList     *attrs,
+              PangoAttrIterator *cached_iter)
+{
+  g_return_val_if_fail (context != NULL, NULL);
+  g_return_val_if_fail (start_index >= 0, NULL);
+  g_return_val_if_fail (length >= 0, NULL);
+  g_return_val_if_fail (length == 0 || text != NULL, NULL);
+
+  return pango_itemize_with_base_dir (context, context->base_dir,
+                                     text, start_index, length, attrs, cached_iter);
+}
+
+static gboolean
+get_first_metrics_foreach (PangoFontset  *fontset,
+                          PangoFont     *font,
+                          gpointer       data)
+{
+  PangoFontMetrics *fontset_metrics = data;
+  PangoLanguage *language = PANGO_FONTSET_GET_CLASS (fontset)->get_language (fontset);
+  PangoFontMetrics *font_metrics = pango_font_get_metrics (font, language);
+  guint save_ref_count;
+
+  /* Initialize the fontset metrics to metrics of the first font in the
+   * fontset; saving the refcount and restoring it is a bit of hack but avoids
+   * having to update this code for each metrics addition.
+   */
+  save_ref_count = fontset_metrics->ref_count;
+  *fontset_metrics = *font_metrics;
+  fontset_metrics->ref_count = save_ref_count;
+
+  pango_font_metrics_unref (font_metrics);
+
+  return TRUE;                 /* Stops iteration */
+}
+
+static PangoFontMetrics *
+get_base_metrics (PangoFontset *fontset)
+{
+  PangoFontMetrics *metrics = pango_font_metrics_new ();
+
+  /* Initialize the metrics from the first font in the fontset */
+  pango_fontset_foreach (fontset, get_first_metrics_foreach, metrics);
+
+  return metrics;
+}
+
+static void
+update_metrics_from_items (PangoFontMetrics *metrics,
+                          PangoLanguage    *language,
+                          const char       *text,
+                          GList            *items)
+
+{
+  GHashTable *fonts_seen = g_hash_table_new (NULL, NULL);
+  PangoGlyphString *glyphs = pango_glyph_string_new ();
+  GList *l;
+
+  metrics->approximate_char_width = 0;
+
+  for (l = items; l; l = l->next)
+    {
+      PangoItem *item = l->data;
+      PangoFont *font = item->analysis.font;
+
+      if (font != NULL && g_hash_table_lookup (fonts_seen, font) == NULL)
+       {
+         PangoFontMetrics *raw_metrics = pango_font_get_metrics (font, language);
+         g_hash_table_insert (fonts_seen, font, font);
+
+         /* metrics will already be initialized from the first font in the fontset */
+         metrics->ascent = MAX (metrics->ascent, raw_metrics->ascent);
+         metrics->descent = MAX (metrics->descent, raw_metrics->descent);
+         pango_font_metrics_unref (raw_metrics);
+       }
+
+      pango_shape (text + item->offset, item->length, &item->analysis, glyphs);
+      metrics->approximate_char_width += pango_glyph_string_get_width (glyphs);
+    }
+
+  pango_glyph_string_free (glyphs);
+  g_hash_table_destroy (fonts_seen);
+
+  metrics->approximate_char_width /= pango_utf8_strwidth (text);
+}
+
+/**
+ * pango_context_get_metrics:
+ * @context: a #PangoContext
+ * @desc: a #PangoFontDescription structure.  %NULL means that the font
+ *           description from the context will be used.
+ * @language: language tag used to determine which script to get the metrics
+ *            for. %NULL means that the language tag from the context will
+ *            be used. If no language tag is set on the context, metrics
+ *            for the default language (as determined by
+ *            pango_language_get_default()) will be returned.
+ *
+ * Get overall metric information for a particular font
+ * description.  Since the metrics may be substantially different for
+ * different scripts, a language tag can be provided to indicate that
+ * the metrics should be retrieved that correspond to the script(s)
+ * used by that language.
+ *
+ * The #PangoFontDescription is interpreted in the same way as
+ * by pango_itemize(), and the family name may be a comma separated
+ * list of figures. If characters from multiple of these families
+ * would be used to render the string, then the returned fonts would
+ * be a composite of the metrics for the fonts loaded for the
+ * individual families.
+ *
+ * Return value: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
+ *   when finished using the object.
+ **/
+PangoFontMetrics *
+pango_context_get_metrics (PangoContext                 *context,
+                          const PangoFontDescription   *desc,
+                          PangoLanguage                *language)
+{
+  PangoFontset *current_fonts = NULL;
+  PangoFontMetrics *metrics;
+  const char *sample_str;
+  GList *items;
+
+  g_return_val_if_fail (PANGO_IS_CONTEXT (context), NULL);
+
+  if (!desc)
+    desc = context->font_desc;
+
+  if (!language)
+    language = context->language;
+
+  current_fonts = pango_font_map_load_fontset (context->font_map, context, desc, language);
+  metrics = get_base_metrics (current_fonts);
+
+  sample_str = pango_language_get_sample_string (language);
+  items = itemize_with_font (context, sample_str, 0, strlen (sample_str), desc);
+
+  update_metrics_from_items (metrics, language, sample_str, items);
+
+  g_list_foreach (items, (GFunc)pango_item_free, NULL);
+  g_list_free (items);
+
+  g_object_unref (current_fonts);
+
+  return metrics;
+}
diff --git a/pango/pango-context.h b/pango/pango-context.h
new file mode 100755 (executable)
index 0000000..d8c3cb8
--- /dev/null
@@ -0,0 +1,111 @@
+/* Pango
+ * pango-context.h: Rendering contexts
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_CONTEXT_H__
+#define __PANGO_CONTEXT_H__
+
+#include <pango/pango-font.h>
+#include <pango/pango-fontmap.h>
+#include <pango/pango-attributes.h>
+
+G_BEGIN_DECLS
+
+/* Sort of like a GC - application set information about how
+ * to handle scripts
+ */
+
+/* PangoContext typedefed in pango-fontmap.h */
+typedef struct _PangoContextClass PangoContextClass;
+
+#define PANGO_TYPE_CONTEXT              (pango_context_get_type ())
+#define PANGO_CONTEXT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CONTEXT, PangoContext))
+#define PANGO_CONTEXT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_CONTEXT, PangoContextClass))
+#define PANGO_IS_CONTEXT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CONTEXT))
+#define PANGO_IS_CONTEXT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_CONTEXT))
+#define PANGO_CONTEXT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_CONTEXT, PangoContextClass))
+
+
+/* The PangoContext and PangoContextClass structs are private; if you
+ * need to create a subclass of these, file a bug.
+ */
+
+GType         pango_context_get_type      (void) G_GNUC_CONST;
+
+PangoContext *pango_context_new           (void);
+void          pango_context_set_font_map  (PangoContext                 *context,
+                                          PangoFontMap                 *font_map);
+PangoFontMap *pango_context_get_font_map  (PangoContext                 *context);
+
+void          pango_context_list_families (PangoContext                 *context,
+                                          PangoFontFamily            ***families,
+                                          int                          *n_families);
+PangoFont *   pango_context_load_font     (PangoContext                 *context,
+                                          const PangoFontDescription   *desc);
+PangoFontset *pango_context_load_fontset  (PangoContext                 *context,
+                                          const PangoFontDescription   *desc,
+                                          PangoLanguage                *language);
+
+PangoFontMetrics *pango_context_get_metrics   (PangoContext                 *context,
+                                              const PangoFontDescription   *desc,
+                                              PangoLanguage                *language);
+
+void                      pango_context_set_font_description (PangoContext               *context,
+                                                             const PangoFontDescription *desc);
+PangoFontDescription *    pango_context_get_font_description (PangoContext               *context);
+PangoLanguage            *pango_context_get_language         (PangoContext               *context);
+void                      pango_context_set_language         (PangoContext               *context,
+                                                             PangoLanguage              *language);
+void                      pango_context_set_base_dir         (PangoContext               *context,
+                                                             PangoDirection              direction);
+PangoDirection            pango_context_get_base_dir         (PangoContext               *context);
+void                      pango_context_set_base_gravity     (PangoContext               *context,
+                                                             PangoGravity                gravity);
+PangoGravity              pango_context_get_base_gravity     (PangoContext               *context);
+PangoGravity              pango_context_get_gravity          (PangoContext               *context);
+void                      pango_context_set_gravity_hint     (PangoContext               *context,
+                                                             PangoGravityHint            hint);
+PangoGravityHint          pango_context_get_gravity_hint     (PangoContext               *context);
+
+void                        pango_context_set_matrix (PangoContext      *context,
+                                                     const PangoMatrix *matrix);
+G_CONST_RETURN PangoMatrix *pango_context_get_matrix (PangoContext      *context);
+
+/* Break a string of Unicode characters into segments with
+ * consistent shaping/language engine and bidrectional level.
+ * Returns a #GList of #PangoItem's
+ */
+GList *pango_itemize                (PangoContext      *context,
+                                    const char        *text,
+                                    int                start_index,
+                                    int                length,
+                                    PangoAttrList     *attrs,
+                                    PangoAttrIterator *cached_iter);
+GList *pango_itemize_with_base_dir  (PangoContext      *context,
+                                    PangoDirection     base_dir,
+                                    const char        *text,
+                                    int                start_index,
+                                    int                length,
+                                    PangoAttrList     *attrs,
+                                    PangoAttrIterator *cached_iter);
+
+G_END_DECLS
+
+#endif /* __PANGO_CONTEXT_H__ */
diff --git a/pango/pango-coverage.c b/pango/pango-coverage.c
new file mode 100755 (executable)
index 0000000..7637117
--- /dev/null
@@ -0,0 +1,499 @@
+/* Pango
+ * pango-coverage.c: Coverage maps for fonts
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-coverage.h"
+
+typedef struct _PangoBlockInfo PangoBlockInfo;
+
+#define N_BLOCKS_INCREMENT 256
+
+/* The structure of a PangoCoverage object is a two-level table, with blocks of size 256.
+ * each block is stored as a packed array of 2 bit values for each index, in LSB order.
+ */
+
+struct _PangoBlockInfo
+{
+  guchar *data;
+  PangoCoverageLevel level;    /* Used if data == NULL */
+};
+
+struct _PangoCoverage
+{
+  guint ref_count;
+  int n_blocks;
+
+  PangoBlockInfo *blocks;
+};
+
+/**
+ * pango_coverage_new:
+ *
+ * Create a new #PangoCoverage
+ *
+ * Return value: the newly allocated #PangoCoverage,
+ *               initialized to %PANGO_COVERAGE_NONE
+ *               with a reference count of one, which
+ *               should be freed with pango_coverage_unref().
+ **/
+PangoCoverage *
+pango_coverage_new (void)
+{
+  PangoCoverage *coverage = g_slice_new (PangoCoverage);
+
+  coverage->n_blocks = N_BLOCKS_INCREMENT;
+  coverage->blocks = g_new0 (PangoBlockInfo, coverage->n_blocks);
+  coverage->ref_count = 1;
+
+  return coverage;
+}
+
+/**
+ * pango_coverage_copy:
+ * @coverage: a #PangoCoverage
+ *
+ * Copy an existing #PangoCoverage. (This function may now be unnecessary
+ * since we refcount the structure. File a bug if you use it.)
+ *
+ * Return value: the newly allocated #PangoCoverage,
+ *               with a reference count of one, which
+ *               should be freed with pango_coverage_unref().
+ **/
+PangoCoverage *
+pango_coverage_copy (PangoCoverage *coverage)
+{
+  int i;
+  PangoCoverage *result;
+
+  g_return_val_if_fail (coverage != NULL, NULL);
+
+  result = g_slice_new (PangoCoverage);
+  result->n_blocks = coverage->n_blocks;
+  result->blocks = g_new (PangoBlockInfo, coverage->n_blocks);
+  result->ref_count = 1;
+
+  for (i=0; i<coverage->n_blocks; i++)
+    {
+      if (coverage->blocks[i].data)
+       {
+         result->blocks[i].data = g_new (guchar, 64);
+         memcpy (result->blocks[i].data, coverage->blocks[i].data, 64);
+       }
+      else
+       result->blocks[i].data = NULL;
+
+      result->blocks[i].level = coverage->blocks[i].level;
+    }
+
+  return result;
+}
+
+/**
+ * pango_coverage_ref:
+ * @coverage: a #PangoCoverage
+ *
+ * Increase the reference count on the #PangoCoverage by one
+ *
+ * Return value: @coverage
+ **/
+PangoCoverage *
+pango_coverage_ref (PangoCoverage *coverage)
+{
+  g_return_val_if_fail (coverage != NULL, NULL);
+
+  g_atomic_int_inc ((int *) &coverage->ref_count);
+
+  return coverage;
+}
+
+/**
+ * pango_coverage_unref:
+ * @coverage: a #PangoCoverage
+ *
+ * Decrease the reference count on the #PangoCoverage by one.
+ * If the result is zero, free the coverage and all associated memory.
+ **/
+void
+pango_coverage_unref (PangoCoverage *coverage)
+{
+  int i;
+
+  g_return_if_fail (coverage != NULL);
+  g_return_if_fail (coverage->ref_count > 0);
+
+  if (g_atomic_int_dec_and_test ((int *) &coverage->ref_count))
+    {
+      for (i=0; i<coverage->n_blocks; i++)
+       g_slice_free1 (64, coverage->blocks[i].data);
+
+      g_free (coverage->blocks);
+      g_slice_free (PangoCoverage, coverage);
+    }
+}
+
+/**
+ * pango_coverage_get:
+ * @coverage: a #PangoCoverage
+ * @index_: the index to check
+ *
+ * Determine whether a particular index is covered by @coverage
+ *
+ * Return value: the coverage level of @coverage for character @index_.
+ **/
+PangoCoverageLevel
+pango_coverage_get (PangoCoverage *coverage,
+                   int            index)
+{
+  int block_index;
+
+  g_return_val_if_fail (coverage != NULL, PANGO_COVERAGE_NONE);
+
+  /* index should really have been defined unsigned.  Work around
+   * it by just returning NONE.
+   */
+  if (G_UNLIKELY (index < 0))
+    return PANGO_COVERAGE_NONE;
+
+  block_index = index / 256;
+
+  if (block_index >= coverage->n_blocks)
+    return PANGO_COVERAGE_NONE;
+  else
+    {
+      guchar *data = coverage->blocks[block_index].data;
+      if (data)
+       {
+         int i = index % 256;
+         int shift = (i % 4) * 2;
+
+         return (data[i/4] >> shift) & 0x3;
+       }
+      else
+       return coverage->blocks[block_index].level;
+    }
+}
+
+/**
+ * pango_coverage_set:
+ * @coverage: a #PangoCoverage
+ * @index_: the index to modify
+ * @level: the new level for @index_
+ *
+ * Modify a particular index within @coverage
+ **/
+void
+pango_coverage_set (PangoCoverage     *coverage,
+                   int                index,
+                   PangoCoverageLevel level)
+{
+  int block_index, i;
+  guchar *data;
+
+  g_return_if_fail (coverage != NULL);
+  g_return_if_fail (index >= 0);
+  g_return_if_fail ((guint) level <= 3);
+
+  block_index = index / 256;
+
+  if (block_index >= coverage->n_blocks)
+    {
+      int old_n_blocks = coverage->n_blocks;
+
+      coverage->n_blocks =
+       N_BLOCKS_INCREMENT * ((block_index + N_BLOCKS_INCREMENT) / N_BLOCKS_INCREMENT);
+
+      coverage->blocks = g_renew (PangoBlockInfo, coverage->blocks, coverage->n_blocks);
+      memset (coverage->blocks + old_n_blocks, 0,
+             sizeof (PangoBlockInfo) * (coverage->n_blocks - old_n_blocks));
+    }
+
+  data = coverage->blocks[block_index].data;
+  if (!data)
+    {
+      guchar byte;
+
+      if (level == coverage->blocks[block_index].level)
+       return;
+
+      data = g_slice_alloc (64);
+      coverage->blocks[block_index].data = data;
+
+      byte = coverage->blocks[block_index].level |
+       (coverage->blocks[block_index].level << 2) |
+       (coverage->blocks[block_index].level << 4) |
+       (coverage->blocks[block_index].level << 6);
+
+      memset (data, byte, 64);
+    }
+
+  i = index % 256;
+  data[i/4] |= level << ((i % 4) * 2);
+}
+
+/**
+ * pango_coverage_max:
+ * @coverage: a #PangoCoverage
+ * @other: another #PangoCoverage
+ *
+ * Set the coverage for each index in @coverage to be the max (better)
+ * value of the current coverage for the index and the coverage for
+ * the corresponding index in @other.
+ **/
+void
+pango_coverage_max (PangoCoverage *coverage,
+                   PangoCoverage *other)
+{
+  int block_index, i;
+  int old_blocks;
+
+  g_return_if_fail (coverage != NULL);
+
+  old_blocks = MIN (coverage->n_blocks, other->n_blocks);
+
+  if (other->n_blocks > coverage->n_blocks)
+    {
+      coverage->n_blocks = other->n_blocks;
+      coverage->blocks = g_renew (PangoBlockInfo, coverage->blocks, coverage->n_blocks);
+
+      for (block_index = old_blocks; block_index < coverage->n_blocks; block_index++)
+       {
+         if (other->blocks[block_index].data)
+           {
+             coverage->blocks[block_index].data = g_new (guchar, 64);
+             memcpy (coverage->blocks[block_index].data, other->blocks[block_index].data, 64);
+           }
+         else
+           coverage->blocks[block_index].data = NULL;
+
+         coverage->blocks[block_index].level = other->blocks[block_index].level;
+       }
+    }
+
+  for (block_index = 0; block_index < old_blocks; block_index++)
+    {
+      if (!coverage->blocks[block_index].data && !other->blocks[block_index].data)
+       {
+         coverage->blocks[block_index].level = MAX (coverage->blocks[block_index].level, other->blocks[block_index].level);
+       }
+      else if (coverage->blocks[block_index].data && other->blocks[block_index].data)
+       {
+         guchar *data = coverage->blocks[block_index].data;
+
+         for (i=0; i<64; i++)
+           {
+             int byte1 = data[i];
+             int byte2 = other->blocks[block_index].data[i];
+
+             /* There are almost certainly some clever logical ops to do this */
+             data[i] =
+               MAX (byte1 & 0x3, byte2 & 0x3) |
+               MAX (byte1 & 0xc, byte2 & 0xc) |
+               MAX (byte1 & 0x30, byte2 & 0x30) |
+               MAX (byte1 & 0xc0, byte2 & 0xc0);
+           }
+       }
+      else
+       {
+         guchar *src, *dest;
+         int level, byte2;
+
+         if (coverage->blocks[block_index].data)
+           {
+             src = dest = coverage->blocks[block_index].data;
+             level = other->blocks[block_index].level;
+           }
+         else
+           {
+             src = other->blocks[block_index].data;
+             dest = g_new (guchar, 64);
+             coverage->blocks[block_index].data = dest;
+             level = coverage->blocks[block_index].level;
+           }
+
+         byte2 = level | (level << 2) | (level << 4) | (level << 6);
+
+         for (i=0; i<64; i++)
+           {
+             int byte1 = src[i];
+
+             /* There are almost certainly some clever logical ops to do this */
+             dest[i] =
+               MAX (byte1 & 0x3, byte2 & 0x3) |
+               MAX (byte1 & 0xc, byte2 & 0xc) |
+               MAX (byte1 & 0x30, byte2 & 0x30) |
+               MAX (byte1 & 0xc0, byte2 & 0xc0);
+           }
+       }
+    }
+}
+
+#define PANGO_COVERAGE_MAGIC 0xc89dbd5e
+
+/**
+ * pango_coverage_to_bytes:
+ * @coverage: a #PangoCoverage
+ * @bytes: location to store result (must be freed with g_free())
+ * @n_bytes: location to store size of result
+ *
+ * Convert a #PangoCoverage structure into a flat binary format
+ **/
+void
+pango_coverage_to_bytes   (PangoCoverage  *coverage,
+                          guchar        **bytes,
+                          int            *n_bytes)
+{
+  int i, j;
+  int size = 8 + 4 * coverage->n_blocks;
+  guchar *data;
+  int offset;
+
+  for (i=0; i<coverage->n_blocks; i++)
+    {
+      if (coverage->blocks[i].data)
+       size += 64;
+    }
+
+  data = g_malloc (size);
+
+  *(guint32 *)&data[0] = g_htonl (PANGO_COVERAGE_MAGIC); /* Magic */
+  *(guint32 *)&data[4] = g_htonl (coverage->n_blocks);
+  offset = 8;
+
+  for (i=0; i<coverage->n_blocks; i++)
+    {
+      guint32 header_val;
+
+      /* Check for solid blocks. This is a sort of random place
+       * to do the optimization, but we care most about getting
+       * it right when storing it somewhere persistant.
+       */
+      if (coverage->blocks[i].data != NULL)
+       {
+         guchar *data = coverage->blocks[i].data;
+         guchar first_val = data[0];
+
+         if (first_val == 0 || first_val == 0xff)
+           {
+             for (j = 1 ; j < 64; j++)
+               if (data[j] != first_val)
+                 break;
+
+             if (j == 64)
+               {
+                 g_slice_free1 (64, data);
+                 coverage->blocks[i].data = NULL;
+                 coverage->blocks[i].level = first_val & 0x3;
+               }
+           }
+       }
+
+      if (coverage->blocks[i].data != NULL)
+       header_val = (guint32)-1;
+      else
+       header_val = coverage->blocks[i].level;
+
+      *(guint32 *)&data[offset] = g_htonl (header_val);
+      offset += 4;
+
+      if (coverage->blocks[i].data)
+       {
+         memcpy (data + offset, coverage->blocks[i].data, 64);
+         offset += 64;
+       }
+    }
+
+  *bytes = data;
+  *n_bytes = size;
+}
+
+static guint32
+pango_coverage_get_uint32 (guchar **ptr)
+{
+  guint32 val;
+
+  memcpy (&val, *ptr, 4);
+  *ptr += 4;
+
+  return g_ntohl (val);
+}
+
+/**
+ * pango_coverage_from_bytes:
+ * @bytes: binary data representing a #PangoCoverage
+ * @n_bytes: the size of @bytes in bytes
+ *
+ * Convert data generated from pango_converage_to_bytes() back
+ * to a #PangoCoverage
+ *
+ * Return value: a newly allocated #PangoCoverage, or %NULL if
+ *               the data was invalid.
+ **/
+PangoCoverage *
+pango_coverage_from_bytes (guchar *bytes,
+                          int     n_bytes)
+{
+  PangoCoverage *coverage = g_slice_new0 (PangoCoverage);
+  guchar *ptr = bytes;
+  int i;
+
+  coverage->ref_count = 1;
+
+  if (n_bytes < 8)
+    goto error;
+
+  if (pango_coverage_get_uint32 (&ptr) != PANGO_COVERAGE_MAGIC)
+    goto error;
+
+  coverage->n_blocks = pango_coverage_get_uint32 (&ptr);
+  coverage->blocks = g_new0 (PangoBlockInfo, coverage->n_blocks);
+
+  for (i = 0; i < coverage->n_blocks; i++)
+    {
+      guint val;
+
+      if (ptr + 4 > bytes + n_bytes)
+       goto error;
+
+      val = pango_coverage_get_uint32 (&ptr);
+      if (val == (guint32)-1)
+       {
+         if (ptr + 64 > bytes + n_bytes)
+           goto error;
+
+         coverage->blocks[i].data = g_new (guchar, 64);
+         memcpy (coverage->blocks[i].data, ptr, 64);
+         ptr += 64;
+       }
+      else
+       coverage->blocks[i].level = val;
+    }
+
+  return coverage;
+
+ error:
+
+  pango_coverage_unref (coverage);
+  return NULL;
+}
+
+
diff --git a/pango/pango-coverage.h b/pango/pango-coverage.h
new file mode 100755 (executable)
index 0000000..e1e8d13
--- /dev/null
@@ -0,0 +1,58 @@
+/* Pango
+ * pango-coverage.h: Coverage sets for fonts
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_COVERAGE_H__
+#define __PANGO_COVERAGE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoCoverage PangoCoverage;
+
+typedef enum {
+  PANGO_COVERAGE_NONE,
+  PANGO_COVERAGE_FALLBACK,
+  PANGO_COVERAGE_APPROXIMATE,
+  PANGO_COVERAGE_EXACT
+} PangoCoverageLevel;
+
+PangoCoverage *    pango_coverage_new     (void);
+PangoCoverage *    pango_coverage_ref     (PangoCoverage      *coverage);
+void               pango_coverage_unref   (PangoCoverage      *coverage);
+PangoCoverage *    pango_coverage_copy    (PangoCoverage      *coverage);
+PangoCoverageLevel pango_coverage_get     (PangoCoverage      *coverage,
+                                          int                 index_);
+void               pango_coverage_set     (PangoCoverage      *coverage,
+                                          int                 index_,
+                                          PangoCoverageLevel  level);
+void               pango_coverage_max     (PangoCoverage      *coverage,
+                                          PangoCoverage      *other);
+
+void           pango_coverage_to_bytes   (PangoCoverage  *coverage,
+                                         guchar        **bytes,
+                                         int            *n_bytes);
+PangoCoverage *pango_coverage_from_bytes (guchar         *bytes,
+                                         int             n_bytes);
+
+G_END_DECLS
+
+#endif /* __PANGO_COVERAGE_H__ */
diff --git a/pango/pango-engine-private.h b/pango/pango-engine-private.h
new file mode 100755 (executable)
index 0000000..5c88a4b
--- /dev/null
@@ -0,0 +1,46 @@
+/* Pango
+ * pango-engine-private.h: Private routines related to engines for
+ *   script and language specific processing
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_ENGINE_PRIVATE_H__
+#define __PANGO_ENGINE_PRIVATE_H__
+
+#include <pango-engine.h>
+
+G_BEGIN_DECLS
+
+void               _pango_engine_shape_shape  (PangoEngineShape *engine,
+                                              PangoFont        *font,
+                                              const char       *text,
+                                              int               length,
+                                              const PangoAnalysis *analysis,
+                                              PangoGlyphString *glyphs);
+PangoCoverageLevel _pango_engine_shape_covers (PangoEngineShape *engine,
+                                              PangoFont        *font,
+                                              PangoLanguage    *language,
+                                              gunichar          wc);
+
+PangoEngineShape *_pango_get_fallback_shaper (void);
+
+G_END_DECLS
+
+#endif /* __PANGO_ENGINE_PRIVATE_H__ */
+
diff --git a/pango/pango-engine.c b/pango/pango-engine.c
new file mode 100755 (executable)
index 0000000..50ba7f4
--- /dev/null
@@ -0,0 +1,177 @@
+/* Pango
+ * pango-engine.c: Engines for script and language specific processing
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-engine.h"
+#include "pango-engine-private.h"
+#include "pango-impl-utils.h"
+
+PANGO_DEFINE_TYPE_ABSTRACT (PangoEngine, pango_engine,
+                           NULL, NULL,
+                           G_TYPE_OBJECT)
+
+PANGO_DEFINE_TYPE_ABSTRACT (PangoEngineLang, pango_engine_lang,
+                           NULL, NULL,
+                           PANGO_TYPE_ENGINE)
+
+static PangoCoverageLevel
+pango_engine_shape_real_covers (PangoEngineShape *engine G_GNUC_UNUSED,
+                               PangoFont        *font,
+                               PangoLanguage    *language,
+                               gunichar          wc)
+{
+
+  PangoCoverage *coverage = pango_font_get_coverage (font, language);
+  PangoCoverageLevel result = pango_coverage_get (coverage, wc);
+
+  pango_coverage_unref (coverage);
+
+  return result;
+}
+
+static void
+pango_engine_shape_class_init (PangoEngineShapeClass *class)
+{
+  class->covers = pango_engine_shape_real_covers;
+}
+
+PANGO_DEFINE_TYPE_ABSTRACT (PangoEngineShape, pango_engine_shape,
+                           pango_engine_shape_class_init, NULL,
+                           PANGO_TYPE_ENGINE)
+
+void
+_pango_engine_shape_shape (PangoEngineShape *engine,
+                          PangoFont        *font,
+                          const char       *text,
+                          int               length,
+                          const PangoAnalysis *analysis,
+                          PangoGlyphString *glyphs)
+{
+  glyphs->num_glyphs = 0;
+
+  PANGO_ENGINE_SHAPE_GET_CLASS (engine)->script_shape (engine,
+                                                      font,
+                                                      text, length,
+                                                      analysis,
+                                                      glyphs);
+}
+
+PangoCoverageLevel
+_pango_engine_shape_covers (PangoEngineShape *engine,
+                           PangoFont        *font,
+                           PangoLanguage    *language,
+                           gunichar          wc)
+{
+  g_return_val_if_fail (PANGO_IS_ENGINE_SHAPE (engine), PANGO_COVERAGE_NONE);
+  g_return_val_if_fail (PANGO_IS_FONT (font), PANGO_COVERAGE_NONE);
+
+  return PANGO_ENGINE_SHAPE_GET_CLASS (engine)->covers (engine,
+                                                       font,
+                                                       language,
+                                                       wc);
+}
+
+/* No extra fields needed */
+typedef PangoEngineShape PangoFallbackEngine;
+typedef PangoEngineShapeClass PangoFallbackEngineClass;
+
+static void
+fallback_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
+                      PangoFont        *font G_GNUC_UNUSED,
+                      const char       *text,
+                      gint              length,
+                      const PangoAnalysis *analysis,
+                      PangoGlyphString *glyphs)
+{
+  int n_chars;
+  const char *p;
+  int cluster = 0;
+  int i;
+
+  n_chars = text ? pango_utf8_strlen (text, length) : 0;
+
+  pango_glyph_string_set_size (glyphs, n_chars);
+
+  p = text;
+  for (i = 0; i < n_chars; i++)
+    {
+      gunichar wc;
+      PangoGlyph glyph;
+      PangoRectangle logical_rect;
+
+      wc = g_utf8_get_char (p);
+
+      if (g_unichar_type (wc) != G_UNICODE_NON_SPACING_MARK)
+       cluster = p - text;
+
+      if (pango_is_zero_width (wc))
+       glyph = PANGO_GLYPH_EMPTY;
+      else
+       glyph = PANGO_GET_UNKNOWN_GLYPH (wc);
+
+      pango_font_get_glyph_extents (analysis->font, glyph, NULL, &logical_rect);
+
+      glyphs->glyphs[i].glyph = glyph;
+
+      glyphs->glyphs[i].geometry.x_offset = 0;
+      glyphs->glyphs[i].geometry.y_offset = 0;
+      glyphs->glyphs[i].geometry.width = logical_rect.width;
+
+      glyphs->log_clusters[i] = cluster;
+
+      p = g_utf8_next_char (p);
+    }
+
+  if (analysis->level & 1)
+    pango_glyph_string_reverse_range (glyphs, 0, glyphs->num_glyphs);
+}
+
+static PangoCoverageLevel
+fallback_engine_covers (PangoEngineShape *engine G_GNUC_UNUSED,
+                       PangoFont        *font G_GNUC_UNUSED,
+                       PangoLanguage    *lang G_GNUC_UNUSED,
+                       gunichar          wc G_GNUC_UNUSED)
+{
+  return PANGO_COVERAGE_NONE;
+}
+
+static void
+fallback_engine_class_init (PangoEngineShapeClass *class)
+{
+  class->covers = fallback_engine_covers;
+  class->script_shape = fallback_engine_shape;
+}
+
+static PANGO_DEFINE_TYPE (PangoFallbackEngine, pango_fallback_engine,
+                         fallback_engine_class_init, NULL,
+                         PANGO_TYPE_ENGINE_SHAPE)
+
+PangoEngineShape *
+_pango_get_fallback_shaper (void)
+{
+  static PangoEngineShape *fallback_shaper = NULL;
+  if (!fallback_shaper)
+    fallback_shaper = g_object_new (pango_fallback_engine_get_type (), NULL);
+
+  return fallback_shaper;
+}
+
diff --git a/pango/pango-engine.h b/pango/pango-engine.h
new file mode 100755 (executable)
index 0000000..d14a982
--- /dev/null
@@ -0,0 +1,381 @@
+/* Pango
+ * pango-engine.h: Engines for script and language specific processing
+ *
+ * Copyright (C) 2000,2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_ENGINE_H__
+#define __PANGO_ENGINE_H__
+
+#include <pango/pango-types.h>
+#include <pango/pango-item.h>
+#include <pango/pango-font.h>
+#include <pango/pango-glyph.h>
+#include <pango/pango-script.h>
+
+G_BEGIN_DECLS
+
+#ifdef PANGO_ENABLE_ENGINE
+
+/* Module API */
+
+#include <gmodule.h>
+
+#define PANGO_RENDER_TYPE_NONE "PangoRenderNone"
+
+#define PANGO_TYPE_ENGINE              (pango_engine_get_type ())
+#define PANGO_ENGINE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ENGINE, PangoEngine))
+#define PANGO_IS_ENGINE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ENGINE))
+#define PANGO_ENGINE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ENGINE, PangoEngineClass))
+#define PANGO_IS_ENGINE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ENGINE))
+#define PANGO_ENGINE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ENGINE, PangoEngineClass))
+
+typedef struct _PangoEngine PangoEngine;
+typedef struct _PangoEngineClass PangoEngineClass;
+
+/**
+ * PangoEngine:
+ *
+ * #PangoEngine is the base class for all types of language and
+ * script specific engines. It has no functionality by itself.
+ **/
+struct _PangoEngine
+{
+  /*< private >*/
+  GObject parent_instance;
+};
+
+/**
+ * PangoEngineClass:
+ *
+ * Class structure for #PangoEngine
+ **/
+struct _PangoEngineClass
+{
+  /*< private >*/
+  GObjectClass parent_class;
+};
+
+GType pango_engine_get_type (void) G_GNUC_CONST;
+
+#define PANGO_ENGINE_TYPE_LANG "PangoEngineLang"
+
+#define PANGO_TYPE_ENGINE_LANG              (pango_engine_lang_get_type ())
+#define PANGO_ENGINE_LANG(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ENGINE_LANG, PangoEngineLang))
+#define PANGO_IS_ENGINE_LANG(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ENGINE_LANG))
+#define PANGO_ENGINE_LANG_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ENGINE_LANG, PangoEngineLangClass))
+#define PANGO_IS_ENGINE_LANG_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ENGINE_LANG))
+#define PANGO_ENGINE_LANG_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ENGINE_LANG, PangoEngineLangClass))
+
+typedef struct _PangoEngineLangClass PangoEngineLangClass;
+
+/**
+ * PangoEngineLang:
+ *
+ * The #PangoEngineLang class is implemented by engines that
+ * customize the rendering-system independent part of the
+ * Pango pipeline for a particular script or language. For
+ * instance, a custom #PangoEngineLang could be provided for
+ * Thai to implement the dictionary-based word boundary
+ * lookups needed for that language.
+ **/
+struct _PangoEngineLang
+{
+  /*< private >*/
+  PangoEngine parent_instance;
+};
+
+/**
+ * PangoEngineLangClass:
+ * @script_break: Provides a custom implementation of pango_break().
+ * If %NULL, pango_default_break() is used instead. If not %NULL, for
+ * Pango versions before 1.16 (module interface version before 1.6.0),
+ * this was called instead of pango_default_break(), but in newer versions,
+ * pango_default_break() is always called and this is called after that to
+ * allow tailoring the breaking results.
+ *
+ * Class structure for #PangoEngineLang
+ **/
+struct _PangoEngineLangClass
+{
+  /*< private >*/
+  PangoEngineClass parent_class;
+
+  /*< public >*/
+  void (*script_break) (PangoEngineLang *engine,
+                       const char    *text,
+                       int            len,
+                       PangoAnalysis *analysis,
+                       PangoLogAttr  *attrs,
+                       int            attrs_len);
+};
+
+GType pango_engine_lang_get_type (void) G_GNUC_CONST;
+
+#define PANGO_ENGINE_TYPE_SHAPE "PangoEngineShape"
+
+#define PANGO_TYPE_ENGINE_SHAPE              (pango_engine_shape_get_type ())
+#define PANGO_ENGINE_SHAPE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ENGINE_SHAPE, PangoEngineShape))
+#define PANGO_IS_ENGINE_SHAPE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ENGINE_SHAPE))
+#define PANGO_ENGINE_SHAPE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ENGINE_SHAPE, PangoEngine_ShapeClass))
+#define PANGO_IS_ENGINE_SHAPE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ENGINE_SHAPE))
+#define PANGO_ENGINE_SHAPE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ENGINE_SHAPE, PangoEngineShapeClass))
+
+typedef struct _PangoEngineShapeClass PangoEngineShapeClass;
+
+/**
+ * PangoEngineShape
+ *
+ * The #PangoEngineShape class is implemented by engines that
+ * customize the rendering-system dependent part of the
+ * Pango pipeline for a particular script or language.
+ * A #PangoEngineShape implementation is then specific to both
+ * a particular rendering system or group of rendering systems
+ * and to a particular script. For instance, there is one
+ * #PangoEngineShape implementation to handle shaping Arabic
+ * for Fontconfig-based backends.
+ **/
+struct _PangoEngineShape
+{
+  PangoEngine parent_instance;
+};
+
+/**
+ * PangoEngineShapeClass:
+ * @script_shape: Given a font, a piece of text, and a #PangoAnalysis
+ *   structure, converts characters to glyphs and positions the
+ *   resulting glyphs. The results are stored in the #PangoGlyphString
+ *   that is passed in. (The implementation should resize it
+ *   appropriately using pango_glyph_string_set_size()). All fields
+ *   of the @log_clusters and @glyphs array must be filled in, with
+ *   the exception that Pango will automatically generate
+ *   <literal>glyphs->glyphs[i].attr.is_cluster_start</literal>
+ *   using the @log_clusters array. Each input character must occur in one
+ *   of the output logical clusters;
+ *   if no rendering is desired for a character, this may involve
+ *   inserting glyphs with the #PangoGlyph ID #PANGO_GLYPH_EMPTY, which
+ *   is guaranteed never to render. If the shaping fails for any reason,
+ *   the shaper should return with an empty (zero-size) glyph string.
+ *   If the shaper has not set the size on the glyph string yet, simply
+ *   returning signals the failure too.
+ * @covers: Returns the characters that this engine can cover
+ *   with a given font for a given language. If not overridden, the default
+ *   implementation simply returns the coverage information for the
+ *   font itself unmodified.
+ *
+ * Class structure for #PangoEngineShape
+ **/
+struct _PangoEngineShapeClass
+{
+  /*< private >*/
+  PangoEngineClass parent_class;
+
+  /*< public >*/
+  void (*script_shape) (PangoEngineShape *engine,
+                       PangoFont        *font,
+                       const char       *text,
+                       int               length,
+                       const PangoAnalysis *analysis,
+                       PangoGlyphString *glyphs);
+  PangoCoverageLevel (*covers)   (PangoEngineShape *engine,
+                                 PangoFont        *font,
+                                 PangoLanguage    *language,
+                                 gunichar          wc);
+};
+
+GType pango_engine_shape_get_type (void) G_GNUC_CONST;
+
+typedef struct _PangoEngineInfo PangoEngineInfo;
+typedef struct _PangoEngineScriptInfo PangoEngineScriptInfo;
+
+struct _PangoEngineScriptInfo
+{
+  PangoScript script;
+  const gchar *langs;
+};
+
+struct _PangoEngineInfo
+{
+  const gchar *id;
+  const gchar *engine_type;
+  const gchar *render_type;
+  PangoEngineScriptInfo *scripts;
+  gint n_scripts;
+};
+
+/**
+ * script_engine_list:
+ * @engines: location to store a pointer to an array of engines.
+ * @n_engines: location to store the number of elements in @engines.
+ *
+ * Function to be provided by a module to list the engines that the
+ * module supplies. The function stores a pointer to an array
+ * of #PangoEngineInfo structures and the length of that array in
+ * the given location.
+ *
+ * Note that script_engine_init() will not be called before this
+ * function.
+ **/
+void script_engine_list (PangoEngineInfo **engines,
+                        int              *n_engines);
+
+/**
+ * script_engine_init:
+ * @module: a #GTypeModule structure used to associate any
+ *  GObject types created in this module with the module.
+ *
+ * Function to be provided by a module to register any
+ * GObject types in the module.
+ **/
+void script_engine_init (GTypeModule *module);
+
+
+/**
+ * script_engine_exit:
+ *
+ * Function to be provided by the module that is called
+ * when the module is unloading. Frequently does nothing.
+ **/
+void script_engine_exit (void);
+
+/**
+ * script_engine_create:
+ * @id: the ID of an engine as reported by script_engine_list.
+ *
+ * Function to be provided by the module to create an instance
+ * of one of the engines implemented by the module.
+ *
+ * Return value: a newly created #PangoEngine of the specified
+ *  type, or %NULL if an error occurred. (In normal operation,
+ *  a module should not return %NULL. A %NULL return is only
+ *  acceptable in the case where system misconfiguration or
+ *  bugs in the driver routine are encountered.)
+ **/
+PangoEngine *script_engine_create (const char *id);
+
+/* Utility macro used by PANGO_ENGINE_LANG_DEFINE_TYPE and
+ * PANGO_ENGINE_LANG_DEFINE_TYPE
+ */
+#define PANGO_ENGINE_DEFINE_TYPE(name, prefix, class_init, instance_init, parent_type) \
+static GType prefix ## _type;                                            \
+static void                                                              \
+prefix ## _register_type (GTypeModule *module)                           \
+{                                                                        \
+  const GTypeInfo object_info =                                                  \
+    {                                                                    \
+      sizeof (name ## Class),                                            \
+      (GBaseInitFunc) NULL,                                              \
+      (GBaseFinalizeFunc) NULL,                                                  \
+      (GClassInitFunc) class_init,                                       \
+      (GClassFinalizeFunc) NULL,                                         \
+      NULL,          /* class_data */                                    \
+      sizeof (name),                                                     \
+      0,             /* n_prelocs */                                     \
+      (GInstanceInitFunc) instance_init,                                 \
+      NULL           /* value_table */                                   \
+    };                                                                   \
+                                                                         \
+  prefix ## _type =  g_type_module_register_type (module, parent_type,   \
+                                                 # name,                 \
+                                                 &object_info, 0);       \
+}
+
+/**
+ * PANGO_ENGINE_LANG_DEFINE_TYPE:
+ * @name: Name of the the type to register (for example:, <literal>ArabicEngineFc</literal>
+ * @prefix: Prefix for symbols that will be defined (for example:, <literal>arabic_engine_fc</literal>
+ * @class_init: Class initialization function for the new type, or %NULL
+ * @instance_init: Instance initialization function for the new type, or %NULL
+ *
+ * Outputs the necessary code for GObject type registration for a
+ * #PangoEngineLang class defined in a module. Two static symbols
+ * are defined.
+ *
+ * <programlisting>
+ *  static GType <replaceable>prefix</replaceable>_type;
+ *  static void <replaceable>prefix</replaceable>_register_type (GTypeModule module);
+ * </programlisting>
+ *
+ * The <function><replaceable>prefix</replaceable>_register_type()</function>
+ * function should be called in your script_engine_init() function for
+ * each type that your module implements, and then your script_engine_create()
+ * function can create instances of the object as follows:
+ *
+ * <informalexample><programlisting>
+ *  PangoEngine *engine = g_object_new (<replaceable>prefix</replaceable>_type, NULL);
+ * </programlisting></informalexample>
+ **/
+#define PANGO_ENGINE_LANG_DEFINE_TYPE(name, prefix, class_init, instance_init) \
+  PANGO_ENGINE_DEFINE_TYPE (name, prefix,                              \
+                           class_init, instance_init,                  \
+                           PANGO_TYPE_ENGINE_LANG)
+
+/**
+ * PANGO_ENGINE_SHAPE_DEFINE_TYPE:
+ * @name: Name of the the type to register (for example:, <literal>ArabicEngineFc</literal>
+ * @prefix: Prefix for symbols that will be defined (for example:, <literal>arabic_engine_fc</literal>
+ * @class_init: Class initialization function for the new type, or %NULL
+ * @instance_init: Instance initialization function for the new type, or %NULL
+ *
+ * Outputs the necessary code for GObject type registration for a
+ * #PangoEngineShape class defined in a module. Two static symbols
+ * are defined.
+ *
+ * <programlisting>
+ *  static GType <replaceable>prefix</replaceable>_type;
+ *  static void <replaceable>prefix</replaceable>_register_type (GTypeModule module);
+ * </programlisting>
+ *
+ * The <function><replaceable>prefix</replaceable>_register_type()</function>
+ * function should be called in your script_engine_init() function for
+ * each type that your module implements, and then your script_engine_create()
+ * function can create instances of the object as follows:
+ *
+ * <informalexample><programlisting>
+ *  PangoEngine *engine = g_object_new (<replaceable>prefix</replaceable>_type, NULL);
+ * </programlisting></informalexample>
+ **/
+#define PANGO_ENGINE_SHAPE_DEFINE_TYPE(name, prefix, class_init, instance_init)        \
+  PANGO_ENGINE_DEFINE_TYPE (name, prefix,                              \
+                           class_init, instance_init,                  \
+                           PANGO_TYPE_ENGINE_SHAPE)
+
+/* Macro used for possibly builtin Pango modules. Not useful
+ * for externally build modules. If we are compiling a module standalone,
+ * then we name the entry points script_engine_list, etc. But if we
+ * are compiling it for inclusion directly in Pango, then we need them to
+ * to have distinct names for this module, so we prepend a prefix.
+ *
+ * The two intermediate macros are to deal with details of the C
+ * preprocessor; token pasting tokens must be function arguments,
+ * and macro substitution isn't used on function arguments that
+ * are used for token pasting.
+ */
+#ifdef PANGO_MODULE_PREFIX
+#define PANGO_MODULE_ENTRY(func) _PANGO_MODULE_ENTRY2(PANGO_MODULE_PREFIX,func)
+#define _PANGO_MODULE_ENTRY2(prefix,func) _PANGO_MODULE_ENTRY3(prefix,func)
+#define _PANGO_MODULE_ENTRY3(prefix,func) prefix##_script_engine_##func
+#else
+#define PANGO_MODULE_ENTRY(func) script_engine_##func
+#endif
+
+#endif /* PANGO_ENABLE_ENGINE */
+
+G_END_DECLS
+
+#endif /* __PANGO_ENGINE_H__ */
diff --git a/pango/pango-enum-types.c b/pango/pango-enum-types.c
new file mode 100755 (executable)
index 0000000..2593163
--- /dev/null
@@ -0,0 +1,433 @@
+
+/* Generated data (by glib-mkenums) */
+
+#include <pango.h>
+
+/* enumerations from "pango-attributes.h" */
+GType
+pango_attr_type_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_ATTR_INVALID, "PANGO_ATTR_INVALID", "invalid" },
+      { PANGO_ATTR_LANGUAGE, "PANGO_ATTR_LANGUAGE", "language" },
+      { PANGO_ATTR_FAMILY, "PANGO_ATTR_FAMILY", "family" },
+      { PANGO_ATTR_STYLE, "PANGO_ATTR_STYLE", "style" },
+      { PANGO_ATTR_WEIGHT, "PANGO_ATTR_WEIGHT", "weight" },
+      { PANGO_ATTR_VARIANT, "PANGO_ATTR_VARIANT", "variant" },
+      { PANGO_ATTR_STRETCH, "PANGO_ATTR_STRETCH", "stretch" },
+      { PANGO_ATTR_SIZE, "PANGO_ATTR_SIZE", "size" },
+      { PANGO_ATTR_FONT_DESC, "PANGO_ATTR_FONT_DESC", "font-desc" },
+      { PANGO_ATTR_FOREGROUND, "PANGO_ATTR_FOREGROUND", "foreground" },
+      { PANGO_ATTR_BACKGROUND, "PANGO_ATTR_BACKGROUND", "background" },
+      { PANGO_ATTR_UNDERLINE, "PANGO_ATTR_UNDERLINE", "underline" },
+      { PANGO_ATTR_STRIKETHROUGH, "PANGO_ATTR_STRIKETHROUGH", "strikethrough" },
+      { PANGO_ATTR_RISE, "PANGO_ATTR_RISE", "rise" },
+      { PANGO_ATTR_SHAPE, "PANGO_ATTR_SHAPE", "shape" },
+      { PANGO_ATTR_SCALE, "PANGO_ATTR_SCALE", "scale" },
+      { PANGO_ATTR_FALLBACK, "PANGO_ATTR_FALLBACK", "fallback" },
+      { PANGO_ATTR_LETTER_SPACING, "PANGO_ATTR_LETTER_SPACING", "letter-spacing" },
+      { PANGO_ATTR_UNDERLINE_COLOR, "PANGO_ATTR_UNDERLINE_COLOR", "underline-color" },
+      { PANGO_ATTR_STRIKETHROUGH_COLOR, "PANGO_ATTR_STRIKETHROUGH_COLOR", "strikethrough-color" },
+      { PANGO_ATTR_ABSOLUTE_SIZE, "PANGO_ATTR_ABSOLUTE_SIZE", "absolute-size" },
+      { PANGO_ATTR_GRAVITY, "PANGO_ATTR_GRAVITY", "gravity" },
+      { PANGO_ATTR_GRAVITY_HINT, "PANGO_ATTR_GRAVITY_HINT", "gravity-hint" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoAttrType"), values);
+  }
+  return etype;
+}
+GType
+pango_underline_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_UNDERLINE_NONE, "PANGO_UNDERLINE_NONE", "none" },
+      { PANGO_UNDERLINE_SINGLE, "PANGO_UNDERLINE_SINGLE", "single" },
+      { PANGO_UNDERLINE_DOUBLE, "PANGO_UNDERLINE_DOUBLE", "double" },
+      { PANGO_UNDERLINE_LOW, "PANGO_UNDERLINE_LOW", "low" },
+      { PANGO_UNDERLINE_ERROR, "PANGO_UNDERLINE_ERROR", "error" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoUnderline"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-bidi-type.h" */
+GType
+pango_bidi_type_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_BIDI_TYPE_L, "PANGO_BIDI_TYPE_L", "l" },
+      { PANGO_BIDI_TYPE_LRE, "PANGO_BIDI_TYPE_LRE", "lre" },
+      { PANGO_BIDI_TYPE_LRO, "PANGO_BIDI_TYPE_LRO", "lro" },
+      { PANGO_BIDI_TYPE_R, "PANGO_BIDI_TYPE_R", "r" },
+      { PANGO_BIDI_TYPE_AL, "PANGO_BIDI_TYPE_AL", "al" },
+      { PANGO_BIDI_TYPE_RLE, "PANGO_BIDI_TYPE_RLE", "rle" },
+      { PANGO_BIDI_TYPE_RLO, "PANGO_BIDI_TYPE_RLO", "rlo" },
+      { PANGO_BIDI_TYPE_PDF, "PANGO_BIDI_TYPE_PDF", "pdf" },
+      { PANGO_BIDI_TYPE_EN, "PANGO_BIDI_TYPE_EN", "en" },
+      { PANGO_BIDI_TYPE_ES, "PANGO_BIDI_TYPE_ES", "es" },
+      { PANGO_BIDI_TYPE_ET, "PANGO_BIDI_TYPE_ET", "et" },
+      { PANGO_BIDI_TYPE_AN, "PANGO_BIDI_TYPE_AN", "an" },
+      { PANGO_BIDI_TYPE_CS, "PANGO_BIDI_TYPE_CS", "cs" },
+      { PANGO_BIDI_TYPE_NSM, "PANGO_BIDI_TYPE_NSM", "nsm" },
+      { PANGO_BIDI_TYPE_BN, "PANGO_BIDI_TYPE_BN", "bn" },
+      { PANGO_BIDI_TYPE_B, "PANGO_BIDI_TYPE_B", "b" },
+      { PANGO_BIDI_TYPE_S, "PANGO_BIDI_TYPE_S", "s" },
+      { PANGO_BIDI_TYPE_WS, "PANGO_BIDI_TYPE_WS", "ws" },
+      { PANGO_BIDI_TYPE_ON, "PANGO_BIDI_TYPE_ON", "on" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoBidiType"), values);
+  }
+  return etype;
+}
+GType
+pango_direction_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_DIRECTION_LTR, "PANGO_DIRECTION_LTR", "ltr" },
+      { PANGO_DIRECTION_RTL, "PANGO_DIRECTION_RTL", "rtl" },
+      { PANGO_DIRECTION_TTB_LTR, "PANGO_DIRECTION_TTB_LTR", "ttb-ltr" },
+      { PANGO_DIRECTION_TTB_RTL, "PANGO_DIRECTION_TTB_RTL", "ttb-rtl" },
+      { PANGO_DIRECTION_WEAK_LTR, "PANGO_DIRECTION_WEAK_LTR", "weak-ltr" },
+      { PANGO_DIRECTION_WEAK_RTL, "PANGO_DIRECTION_WEAK_RTL", "weak-rtl" },
+      { PANGO_DIRECTION_NEUTRAL, "PANGO_DIRECTION_NEUTRAL", "neutral" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoDirection"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-coverage.h" */
+GType
+pango_coverage_level_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_COVERAGE_NONE, "PANGO_COVERAGE_NONE", "none" },
+      { PANGO_COVERAGE_FALLBACK, "PANGO_COVERAGE_FALLBACK", "fallback" },
+      { PANGO_COVERAGE_APPROXIMATE, "PANGO_COVERAGE_APPROXIMATE", "approximate" },
+      { PANGO_COVERAGE_EXACT, "PANGO_COVERAGE_EXACT", "exact" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoCoverageLevel"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-font.h" */
+GType
+pango_style_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_STYLE_NORMAL, "PANGO_STYLE_NORMAL", "normal" },
+      { PANGO_STYLE_OBLIQUE, "PANGO_STYLE_OBLIQUE", "oblique" },
+      { PANGO_STYLE_ITALIC, "PANGO_STYLE_ITALIC", "italic" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoStyle"), values);
+  }
+  return etype;
+}
+GType
+pango_variant_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_VARIANT_NORMAL, "PANGO_VARIANT_NORMAL", "normal" },
+      { PANGO_VARIANT_SMALL_CAPS, "PANGO_VARIANT_SMALL_CAPS", "small-caps" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoVariant"), values);
+  }
+  return etype;
+}
+GType
+pango_weight_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_WEIGHT_THIN, "PANGO_WEIGHT_THIN", "thin" },
+      { PANGO_WEIGHT_ULTRALIGHT, "PANGO_WEIGHT_ULTRALIGHT", "ultralight" },
+      { PANGO_WEIGHT_LIGHT, "PANGO_WEIGHT_LIGHT", "light" },
+      { PANGO_WEIGHT_BOOK, "PANGO_WEIGHT_BOOK", "book" },
+      { PANGO_WEIGHT_NORMAL, "PANGO_WEIGHT_NORMAL", "normal" },
+      { PANGO_WEIGHT_MEDIUM, "PANGO_WEIGHT_MEDIUM", "medium" },
+      { PANGO_WEIGHT_SEMIBOLD, "PANGO_WEIGHT_SEMIBOLD", "semibold" },
+      { PANGO_WEIGHT_BOLD, "PANGO_WEIGHT_BOLD", "bold" },
+      { PANGO_WEIGHT_ULTRABOLD, "PANGO_WEIGHT_ULTRABOLD", "ultrabold" },
+      { PANGO_WEIGHT_HEAVY, "PANGO_WEIGHT_HEAVY", "heavy" },
+      { PANGO_WEIGHT_ULTRAHEAVY, "PANGO_WEIGHT_ULTRAHEAVY", "ultraheavy" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoWeight"), values);
+  }
+  return etype;
+}
+GType
+pango_stretch_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_STRETCH_ULTRA_CONDENSED, "PANGO_STRETCH_ULTRA_CONDENSED", "ultra-condensed" },
+      { PANGO_STRETCH_EXTRA_CONDENSED, "PANGO_STRETCH_EXTRA_CONDENSED", "extra-condensed" },
+      { PANGO_STRETCH_CONDENSED, "PANGO_STRETCH_CONDENSED", "condensed" },
+      { PANGO_STRETCH_SEMI_CONDENSED, "PANGO_STRETCH_SEMI_CONDENSED", "semi-condensed" },
+      { PANGO_STRETCH_NORMAL, "PANGO_STRETCH_NORMAL", "normal" },
+      { PANGO_STRETCH_SEMI_EXPANDED, "PANGO_STRETCH_SEMI_EXPANDED", "semi-expanded" },
+      { PANGO_STRETCH_EXPANDED, "PANGO_STRETCH_EXPANDED", "expanded" },
+      { PANGO_STRETCH_EXTRA_EXPANDED, "PANGO_STRETCH_EXTRA_EXPANDED", "extra-expanded" },
+      { PANGO_STRETCH_ULTRA_EXPANDED, "PANGO_STRETCH_ULTRA_EXPANDED", "ultra-expanded" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoStretch"), values);
+  }
+  return etype;
+}
+GType
+pango_font_mask_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GFlagsValue values[] = {
+      { PANGO_FONT_MASK_FAMILY, "PANGO_FONT_MASK_FAMILY", "family" },
+      { PANGO_FONT_MASK_STYLE, "PANGO_FONT_MASK_STYLE", "style" },
+      { PANGO_FONT_MASK_VARIANT, "PANGO_FONT_MASK_VARIANT", "variant" },
+      { PANGO_FONT_MASK_WEIGHT, "PANGO_FONT_MASK_WEIGHT", "weight" },
+      { PANGO_FONT_MASK_STRETCH, "PANGO_FONT_MASK_STRETCH", "stretch" },
+      { PANGO_FONT_MASK_SIZE, "PANGO_FONT_MASK_SIZE", "size" },
+      { PANGO_FONT_MASK_GRAVITY, "PANGO_FONT_MASK_GRAVITY", "gravity" },
+      { 0, NULL, NULL }
+    };
+    etype = g_flags_register_static (g_intern_static_string ("PangoFontMask"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-gravity.h" */
+GType
+pango_gravity_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_GRAVITY_SOUTH, "PANGO_GRAVITY_SOUTH", "south" },
+      { PANGO_GRAVITY_EAST, "PANGO_GRAVITY_EAST", "east" },
+      { PANGO_GRAVITY_NORTH, "PANGO_GRAVITY_NORTH", "north" },
+      { PANGO_GRAVITY_WEST, "PANGO_GRAVITY_WEST", "west" },
+      { PANGO_GRAVITY_AUTO, "PANGO_GRAVITY_AUTO", "auto" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoGravity"), values);
+  }
+  return etype;
+}
+GType
+pango_gravity_hint_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_GRAVITY_HINT_NATURAL, "PANGO_GRAVITY_HINT_NATURAL", "natural" },
+      { PANGO_GRAVITY_HINT_STRONG, "PANGO_GRAVITY_HINT_STRONG", "strong" },
+      { PANGO_GRAVITY_HINT_LINE, "PANGO_GRAVITY_HINT_LINE", "line" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoGravityHint"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-layout.h" */
+GType
+pango_alignment_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_ALIGN_LEFT, "PANGO_ALIGN_LEFT", "left" },
+      { PANGO_ALIGN_CENTER, "PANGO_ALIGN_CENTER", "center" },
+      { PANGO_ALIGN_RIGHT, "PANGO_ALIGN_RIGHT", "right" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoAlignment"), values);
+  }
+  return etype;
+}
+GType
+pango_wrap_mode_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_WRAP_WORD, "PANGO_WRAP_WORD", "word" },
+      { PANGO_WRAP_CHAR, "PANGO_WRAP_CHAR", "char" },
+      { PANGO_WRAP_WORD_CHAR, "PANGO_WRAP_WORD_CHAR", "word-char" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoWrapMode"), values);
+  }
+  return etype;
+}
+GType
+pango_ellipsize_mode_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_ELLIPSIZE_NONE, "PANGO_ELLIPSIZE_NONE", "none" },
+      { PANGO_ELLIPSIZE_START, "PANGO_ELLIPSIZE_START", "start" },
+      { PANGO_ELLIPSIZE_MIDDLE, "PANGO_ELLIPSIZE_MIDDLE", "middle" },
+      { PANGO_ELLIPSIZE_END, "PANGO_ELLIPSIZE_END", "end" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoEllipsizeMode"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-renderer.h" */
+GType
+pango_render_part_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_RENDER_PART_FOREGROUND, "PANGO_RENDER_PART_FOREGROUND", "foreground" },
+      { PANGO_RENDER_PART_BACKGROUND, "PANGO_RENDER_PART_BACKGROUND", "background" },
+      { PANGO_RENDER_PART_UNDERLINE, "PANGO_RENDER_PART_UNDERLINE", "underline" },
+      { PANGO_RENDER_PART_STRIKETHROUGH, "PANGO_RENDER_PART_STRIKETHROUGH", "strikethrough" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoRenderPart"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-script.h" */
+GType
+pango_script_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_SCRIPT_INVALID_CODE, "PANGO_SCRIPT_INVALID_CODE", "invalid-code" },
+      { PANGO_SCRIPT_COMMON, "PANGO_SCRIPT_COMMON", "common" },
+      { PANGO_SCRIPT_INHERITED, "PANGO_SCRIPT_INHERITED", "inherited" },
+      { PANGO_SCRIPT_ARABIC, "PANGO_SCRIPT_ARABIC", "arabic" },
+      { PANGO_SCRIPT_ARMENIAN, "PANGO_SCRIPT_ARMENIAN", "armenian" },
+      { PANGO_SCRIPT_BENGALI, "PANGO_SCRIPT_BENGALI", "bengali" },
+      { PANGO_SCRIPT_BOPOMOFO, "PANGO_SCRIPT_BOPOMOFO", "bopomofo" },
+      { PANGO_SCRIPT_CHEROKEE, "PANGO_SCRIPT_CHEROKEE", "cherokee" },
+      { PANGO_SCRIPT_COPTIC, "PANGO_SCRIPT_COPTIC", "coptic" },
+      { PANGO_SCRIPT_CYRILLIC, "PANGO_SCRIPT_CYRILLIC", "cyrillic" },
+      { PANGO_SCRIPT_DESERET, "PANGO_SCRIPT_DESERET", "deseret" },
+      { PANGO_SCRIPT_DEVANAGARI, "PANGO_SCRIPT_DEVANAGARI", "devanagari" },
+      { PANGO_SCRIPT_ETHIOPIC, "PANGO_SCRIPT_ETHIOPIC", "ethiopic" },
+      { PANGO_SCRIPT_GEORGIAN, "PANGO_SCRIPT_GEORGIAN", "georgian" },
+      { PANGO_SCRIPT_GOTHIC, "PANGO_SCRIPT_GOTHIC", "gothic" },
+      { PANGO_SCRIPT_GREEK, "PANGO_SCRIPT_GREEK", "greek" },
+      { PANGO_SCRIPT_GUJARATI, "PANGO_SCRIPT_GUJARATI", "gujarati" },
+      { PANGO_SCRIPT_GURMUKHI, "PANGO_SCRIPT_GURMUKHI", "gurmukhi" },
+      { PANGO_SCRIPT_HAN, "PANGO_SCRIPT_HAN", "han" },
+      { PANGO_SCRIPT_HANGUL, "PANGO_SCRIPT_HANGUL", "hangul" },
+      { PANGO_SCRIPT_HEBREW, "PANGO_SCRIPT_HEBREW", "hebrew" },
+      { PANGO_SCRIPT_HIRAGANA, "PANGO_SCRIPT_HIRAGANA", "hiragana" },
+      { PANGO_SCRIPT_KANNADA, "PANGO_SCRIPT_KANNADA", "kannada" },
+      { PANGO_SCRIPT_KATAKANA, "PANGO_SCRIPT_KATAKANA", "katakana" },
+      { PANGO_SCRIPT_KHMER, "PANGO_SCRIPT_KHMER", "khmer" },
+      { PANGO_SCRIPT_LAO, "PANGO_SCRIPT_LAO", "lao" },
+      { PANGO_SCRIPT_LATIN, "PANGO_SCRIPT_LATIN", "latin" },
+      { PANGO_SCRIPT_MALAYALAM, "PANGO_SCRIPT_MALAYALAM", "malayalam" },
+      { PANGO_SCRIPT_MONGOLIAN, "PANGO_SCRIPT_MONGOLIAN", "mongolian" },
+      { PANGO_SCRIPT_MYANMAR, "PANGO_SCRIPT_MYANMAR", "myanmar" },
+      { PANGO_SCRIPT_OGHAM, "PANGO_SCRIPT_OGHAM", "ogham" },
+      { PANGO_SCRIPT_OLD_ITALIC, "PANGO_SCRIPT_OLD_ITALIC", "old-italic" },
+      { PANGO_SCRIPT_ORIYA, "PANGO_SCRIPT_ORIYA", "oriya" },
+      { PANGO_SCRIPT_RUNIC, "PANGO_SCRIPT_RUNIC", "runic" },
+      { PANGO_SCRIPT_SINHALA, "PANGO_SCRIPT_SINHALA", "sinhala" },
+      { PANGO_SCRIPT_SYRIAC, "PANGO_SCRIPT_SYRIAC", "syriac" },
+      { PANGO_SCRIPT_TAMIL, "PANGO_SCRIPT_TAMIL", "tamil" },
+      { PANGO_SCRIPT_TELUGU, "PANGO_SCRIPT_TELUGU", "telugu" },
+      { PANGO_SCRIPT_THAANA, "PANGO_SCRIPT_THAANA", "thaana" },
+      { PANGO_SCRIPT_THAI, "PANGO_SCRIPT_THAI", "thai" },
+      { PANGO_SCRIPT_TIBETAN, "PANGO_SCRIPT_TIBETAN", "tibetan" },
+      { PANGO_SCRIPT_CANADIAN_ABORIGINAL, "PANGO_SCRIPT_CANADIAN_ABORIGINAL", "canadian-aboriginal" },
+      { PANGO_SCRIPT_YI, "PANGO_SCRIPT_YI", "yi" },
+      { PANGO_SCRIPT_TAGALOG, "PANGO_SCRIPT_TAGALOG", "tagalog" },
+      { PANGO_SCRIPT_HANUNOO, "PANGO_SCRIPT_HANUNOO", "hanunoo" },
+      { PANGO_SCRIPT_BUHID, "PANGO_SCRIPT_BUHID", "buhid" },
+      { PANGO_SCRIPT_TAGBANWA, "PANGO_SCRIPT_TAGBANWA", "tagbanwa" },
+      { PANGO_SCRIPT_BRAILLE, "PANGO_SCRIPT_BRAILLE", "braille" },
+      { PANGO_SCRIPT_CYPRIOT, "PANGO_SCRIPT_CYPRIOT", "cypriot" },
+      { PANGO_SCRIPT_LIMBU, "PANGO_SCRIPT_LIMBU", "limbu" },
+      { PANGO_SCRIPT_OSMANYA, "PANGO_SCRIPT_OSMANYA", "osmanya" },
+      { PANGO_SCRIPT_SHAVIAN, "PANGO_SCRIPT_SHAVIAN", "shavian" },
+      { PANGO_SCRIPT_LINEAR_B, "PANGO_SCRIPT_LINEAR_B", "linear-b" },
+      { PANGO_SCRIPT_TAI_LE, "PANGO_SCRIPT_TAI_LE", "tai-le" },
+      { PANGO_SCRIPT_UGARITIC, "PANGO_SCRIPT_UGARITIC", "ugaritic" },
+      { PANGO_SCRIPT_NEW_TAI_LUE, "PANGO_SCRIPT_NEW_TAI_LUE", "new-tai-lue" },
+      { PANGO_SCRIPT_BUGINESE, "PANGO_SCRIPT_BUGINESE", "buginese" },
+      { PANGO_SCRIPT_GLAGOLITIC, "PANGO_SCRIPT_GLAGOLITIC", "glagolitic" },
+      { PANGO_SCRIPT_TIFINAGH, "PANGO_SCRIPT_TIFINAGH", "tifinagh" },
+      { PANGO_SCRIPT_SYLOTI_NAGRI, "PANGO_SCRIPT_SYLOTI_NAGRI", "syloti-nagri" },
+      { PANGO_SCRIPT_OLD_PERSIAN, "PANGO_SCRIPT_OLD_PERSIAN", "old-persian" },
+      { PANGO_SCRIPT_KHAROSHTHI, "PANGO_SCRIPT_KHAROSHTHI", "kharoshthi" },
+      { PANGO_SCRIPT_UNKNOWN, "PANGO_SCRIPT_UNKNOWN", "unknown" },
+      { PANGO_SCRIPT_BALINESE, "PANGO_SCRIPT_BALINESE", "balinese" },
+      { PANGO_SCRIPT_CUNEIFORM, "PANGO_SCRIPT_CUNEIFORM", "cuneiform" },
+      { PANGO_SCRIPT_PHOENICIAN, "PANGO_SCRIPT_PHOENICIAN", "phoenician" },
+      { PANGO_SCRIPT_PHAGS_PA, "PANGO_SCRIPT_PHAGS_PA", "phags-pa" },
+      { PANGO_SCRIPT_NKO, "PANGO_SCRIPT_NKO", "nko" },
+      { PANGO_SCRIPT_KAYAH_LI, "PANGO_SCRIPT_KAYAH_LI", "kayah-li" },
+      { PANGO_SCRIPT_LEPCHA, "PANGO_SCRIPT_LEPCHA", "lepcha" },
+      { PANGO_SCRIPT_REJANG, "PANGO_SCRIPT_REJANG", "rejang" },
+      { PANGO_SCRIPT_SUNDANESE, "PANGO_SCRIPT_SUNDANESE", "sundanese" },
+      { PANGO_SCRIPT_SAURASHTRA, "PANGO_SCRIPT_SAURASHTRA", "saurashtra" },
+      { PANGO_SCRIPT_CHAM, "PANGO_SCRIPT_CHAM", "cham" },
+      { PANGO_SCRIPT_OL_CHIKI, "PANGO_SCRIPT_OL_CHIKI", "ol-chiki" },
+      { PANGO_SCRIPT_VAI, "PANGO_SCRIPT_VAI", "vai" },
+      { PANGO_SCRIPT_CARIAN, "PANGO_SCRIPT_CARIAN", "carian" },
+      { PANGO_SCRIPT_LYCIAN, "PANGO_SCRIPT_LYCIAN", "lycian" },
+      { PANGO_SCRIPT_LYDIAN, "PANGO_SCRIPT_LYDIAN", "lydian" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoScript"), values);
+  }
+  return etype;
+}
+
+/* enumerations from "pango-tabs.h" */
+GType
+pango_tab_align_get_type (void)
+{
+  static GType etype = 0;
+  if (etype == 0) {
+    static const GEnumValue values[] = {
+      { PANGO_TAB_LEFT, "PANGO_TAB_LEFT", "left" },
+      { 0, NULL, NULL }
+    };
+    etype = g_enum_register_static (g_intern_static_string ("PangoTabAlign"), values);
+  }
+  return etype;
+}
+
+/* Generated data ends here */
+
diff --git a/pango/pango-enum-types.h b/pango/pango-enum-types.h
new file mode 100755 (executable)
index 0000000..dd13a58
--- /dev/null
@@ -0,0 +1,60 @@
+
+/* Generated data (by glib-mkenums) */
+
+#ifndef __PANGO_ENUM_TYPES_H__
+#define __PANGO_ENUM_TYPES_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/* enumerations from "pango-attributes.h" */
+GType pango_attr_type_get_type (void);
+#define PANGO_TYPE_ATTR_TYPE (pango_attr_type_get_type())
+GType pango_underline_get_type (void);
+#define PANGO_TYPE_UNDERLINE (pango_underline_get_type())
+/* enumerations from "pango-bidi-type.h" */
+GType pango_bidi_type_get_type (void);
+#define PANGO_TYPE_BIDI_TYPE (pango_bidi_type_get_type())
+GType pango_direction_get_type (void);
+#define PANGO_TYPE_DIRECTION (pango_direction_get_type())
+/* enumerations from "pango-coverage.h" */
+GType pango_coverage_level_get_type (void);
+#define PANGO_TYPE_COVERAGE_LEVEL (pango_coverage_level_get_type())
+/* enumerations from "pango-font.h" */
+GType pango_style_get_type (void);
+#define PANGO_TYPE_STYLE (pango_style_get_type())
+GType pango_variant_get_type (void);
+#define PANGO_TYPE_VARIANT (pango_variant_get_type())
+GType pango_weight_get_type (void);
+#define PANGO_TYPE_WEIGHT (pango_weight_get_type())
+GType pango_stretch_get_type (void);
+#define PANGO_TYPE_STRETCH (pango_stretch_get_type())
+GType pango_font_mask_get_type (void);
+#define PANGO_TYPE_FONT_MASK (pango_font_mask_get_type())
+/* enumerations from "pango-gravity.h" */
+GType pango_gravity_get_type (void);
+#define PANGO_TYPE_GRAVITY (pango_gravity_get_type())
+GType pango_gravity_hint_get_type (void);
+#define PANGO_TYPE_GRAVITY_HINT (pango_gravity_hint_get_type())
+/* enumerations from "pango-layout.h" */
+GType pango_alignment_get_type (void);
+#define PANGO_TYPE_ALIGNMENT (pango_alignment_get_type())
+GType pango_wrap_mode_get_type (void);
+#define PANGO_TYPE_WRAP_MODE (pango_wrap_mode_get_type())
+GType pango_ellipsize_mode_get_type (void);
+#define PANGO_TYPE_ELLIPSIZE_MODE (pango_ellipsize_mode_get_type())
+/* enumerations from "pango-renderer.h" */
+GType pango_render_part_get_type (void);
+#define PANGO_TYPE_RENDER_PART (pango_render_part_get_type())
+/* enumerations from "pango-script.h" */
+GType pango_script_get_type (void);
+#define PANGO_TYPE_SCRIPT (pango_script_get_type())
+/* enumerations from "pango-tabs.h" */
+GType pango_tab_align_get_type (void);
+#define PANGO_TYPE_TAB_ALIGN (pango_tab_align_get_type())
+G_END_DECLS
+
+#endif /* __PANGO_ENUM_TYPES_H__ */
+
+/* Generated data ends here */
+
diff --git a/pango/pango-features.h b/pango/pango-features.h
new file mode 100755 (executable)
index 0000000..ba5238e
--- /dev/null
@@ -0,0 +1,12 @@
+/* Generated by configure. Do not edit */
+#ifndef PANGO_FEATURES_H
+#define PANGO_FEATURES_H
+
+#define PANGO_VERSION_MAJOR 1
+#define PANGO_VERSION_MINOR 26
+#define PANGO_VERSION_MICRO 1
+
+#define PANGO_VERSION_STRING "1.26.1"
+
+
+#endif
diff --git a/pango/pango-font.h b/pango/pango-font.h
new file mode 100755 (executable)
index 0000000..b5b2cf1
--- /dev/null
@@ -0,0 +1,386 @@
+/* Pango
+ * pango-font.h: Font handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_FONT_H__
+#define __PANGO_FONT_H__
+
+#include <pango/pango-coverage.h>
+#include <pango/pango-types.h>
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoFontDescription PangoFontDescription;
+typedef struct _PangoFontMetrics PangoFontMetrics;
+
+/**
+ * PangoStyle:
+ * @PANGO_STYLE_NORMAL: the font is upright.
+ * @PANGO_STYLE_OBLIQUE: the font is slanted, but in a roman style.
+ * @PANGO_STYLE_ITALIC: the font is slanted in an italic style.
+ *
+ * An enumeration specifying the various slant styles possible for a font.
+ **/
+typedef enum {
+  PANGO_STYLE_NORMAL,
+  PANGO_STYLE_OBLIQUE,
+  PANGO_STYLE_ITALIC
+} PangoStyle;
+
+typedef enum {
+  PANGO_VARIANT_NORMAL,
+  PANGO_VARIANT_SMALL_CAPS
+} PangoVariant;
+
+typedef enum {
+  PANGO_WEIGHT_THIN = 100,
+  PANGO_WEIGHT_ULTRALIGHT = 200,
+  PANGO_WEIGHT_LIGHT = 300,
+  PANGO_WEIGHT_BOOK = 380,
+  PANGO_WEIGHT_NORMAL = 400,
+  PANGO_WEIGHT_MEDIUM = 500,
+  PANGO_WEIGHT_SEMIBOLD = 600,
+  PANGO_WEIGHT_BOLD = 700,
+  PANGO_WEIGHT_ULTRABOLD = 800,
+  PANGO_WEIGHT_HEAVY = 900,
+  PANGO_WEIGHT_ULTRAHEAVY = 1000
+} PangoWeight;
+
+typedef enum {
+  PANGO_STRETCH_ULTRA_CONDENSED,
+  PANGO_STRETCH_EXTRA_CONDENSED,
+  PANGO_STRETCH_CONDENSED,
+  PANGO_STRETCH_SEMI_CONDENSED,
+  PANGO_STRETCH_NORMAL,
+  PANGO_STRETCH_SEMI_EXPANDED,
+  PANGO_STRETCH_EXPANDED,
+  PANGO_STRETCH_EXTRA_EXPANDED,
+  PANGO_STRETCH_ULTRA_EXPANDED
+} PangoStretch;
+
+typedef enum {
+  PANGO_FONT_MASK_FAMILY  = 1 << 0,
+  PANGO_FONT_MASK_STYLE   = 1 << 1,
+  PANGO_FONT_MASK_VARIANT = 1 << 2,
+  PANGO_FONT_MASK_WEIGHT  = 1 << 3,
+  PANGO_FONT_MASK_STRETCH = 1 << 4,
+  PANGO_FONT_MASK_SIZE    = 1 << 5,
+  PANGO_FONT_MASK_GRAVITY = 1 << 6
+} PangoFontMask;
+
+/* CSS scale factors (1.2 factor between each size) */
+#define PANGO_SCALE_XX_SMALL ((double)0.5787037037037)
+#define PANGO_SCALE_X_SMALL  ((double)0.6444444444444)
+#define PANGO_SCALE_SMALL    ((double)0.8333333333333)
+#define PANGO_SCALE_MEDIUM   ((double)1.0)
+#define PANGO_SCALE_LARGE    ((double)1.2)
+#define PANGO_SCALE_X_LARGE  ((double)1.4399999999999)
+#define PANGO_SCALE_XX_LARGE ((double)1.728)
+
+/*
+ * PangoFontDescription
+ */
+
+#define PANGO_TYPE_FONT_DESCRIPTION (pango_font_description_get_type ())
+
+GType                 pango_font_description_get_type    (void) G_GNUC_CONST;
+PangoFontDescription *pango_font_description_new         (void);
+PangoFontDescription *pango_font_description_copy        (const PangoFontDescription  *desc);
+PangoFontDescription *pango_font_description_copy_static (const PangoFontDescription  *desc);
+guint                 pango_font_description_hash        (const PangoFontDescription  *desc) G_GNUC_PURE;
+gboolean              pango_font_description_equal       (const PangoFontDescription  *desc1,
+                                                         const PangoFontDescription  *desc2) G_GNUC_PURE;
+void                  pango_font_description_free        (PangoFontDescription        *desc);
+void                  pango_font_descriptions_free       (PangoFontDescription       **descs,
+                                                         int                          n_descs);
+
+void                 pango_font_description_set_family        (PangoFontDescription *desc,
+                                                              const char           *family);
+void                 pango_font_description_set_family_static (PangoFontDescription *desc,
+                                                              const char           *family);
+G_CONST_RETURN char *pango_font_description_get_family        (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_style         (PangoFontDescription *desc,
+                                                              PangoStyle            style);
+PangoStyle           pango_font_description_get_style         (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_variant       (PangoFontDescription *desc,
+                                                              PangoVariant          variant);
+PangoVariant         pango_font_description_get_variant       (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_weight        (PangoFontDescription *desc,
+                                                              PangoWeight           weight);
+PangoWeight          pango_font_description_get_weight        (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_stretch       (PangoFontDescription *desc,
+                                                              PangoStretch          stretch);
+PangoStretch         pango_font_description_get_stretch       (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_size          (PangoFontDescription *desc,
+                                                              gint                  size);
+gint                 pango_font_description_get_size          (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_absolute_size (PangoFontDescription *desc,
+                                                              double                size);
+gboolean             pango_font_description_get_size_is_absolute (const PangoFontDescription *desc) G_GNUC_PURE;
+void                 pango_font_description_set_gravity       (PangoFontDescription *desc,
+                                                              PangoGravity          gravity);
+PangoGravity         pango_font_description_get_gravity       (const PangoFontDescription *desc) G_GNUC_PURE;
+
+PangoFontMask pango_font_description_get_set_fields (const PangoFontDescription *desc) G_GNUC_PURE;
+void          pango_font_description_unset_fields   (PangoFontDescription       *desc,
+                                                    PangoFontMask               to_unset);
+
+void pango_font_description_merge        (PangoFontDescription       *desc,
+                                         const PangoFontDescription *desc_to_merge,
+                                         gboolean                    replace_existing);
+void pango_font_description_merge_static (PangoFontDescription       *desc,
+                                         const PangoFontDescription *desc_to_merge,
+                                         gboolean                    replace_existing);
+
+gboolean pango_font_description_better_match (const PangoFontDescription *desc,
+                                             const PangoFontDescription *old_match,
+                                             const PangoFontDescription *new_match) G_GNUC_PURE;
+
+PangoFontDescription *pango_font_description_from_string (const char                  *str);
+char *                pango_font_description_to_string   (const PangoFontDescription  *desc);
+char *                pango_font_description_to_filename (const PangoFontDescription  *desc);
+
+/*
+ * PangoFontMetrics
+ */
+
+#define PANGO_TYPE_FONT_METRICS  (pango_font_metrics_get_type ())
+GType             pango_font_metrics_get_type                    (void) G_GNUC_CONST;
+PangoFontMetrics *pango_font_metrics_ref                         (PangoFontMetrics *metrics);
+void              pango_font_metrics_unref                       (PangoFontMetrics *metrics);
+int               pango_font_metrics_get_ascent                  (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_descent                 (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_approximate_char_width  (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_approximate_digit_width (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_underline_position      (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_underline_thickness     (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_strikethrough_position  (PangoFontMetrics *metrics) G_GNUC_PURE;
+int               pango_font_metrics_get_strikethrough_thickness (PangoFontMetrics *metrics) G_GNUC_PURE;
+
+#ifdef PANGO_ENABLE_BACKEND
+
+PangoFontMetrics *pango_font_metrics_new (void);
+
+struct _PangoFontMetrics
+{
+  guint ref_count;
+
+  int ascent;
+  int descent;
+  int approximate_char_width;
+  int approximate_digit_width;
+  int underline_position;
+  int underline_thickness;
+  int strikethrough_position;
+  int strikethrough_thickness;
+};
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+/*
+ * PangoFontFamily
+ */
+
+#define PANGO_TYPE_FONT_FAMILY              (pango_font_family_get_type ())
+#define PANGO_FONT_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FAMILY, PangoFontFamily))
+#define PANGO_IS_FONT_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FAMILY))
+
+typedef struct _PangoFontFamily      PangoFontFamily;
+typedef struct _PangoFontFace        PangoFontFace;
+
+GType      pango_font_family_get_type       (void) G_GNUC_CONST;
+
+void                 pango_font_family_list_faces (PangoFontFamily  *family,
+                                                  PangoFontFace  ***faces,
+                                                  int              *n_faces);
+G_CONST_RETURN char *pango_font_family_get_name   (PangoFontFamily  *family) G_GNUC_PURE;
+gboolean   pango_font_family_is_monospace         (PangoFontFamily  *family) G_GNUC_PURE;
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_FONT_FAMILY_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_FAMILY, PangoFontFamilyClass))
+#define PANGO_IS_FONT_FAMILY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_FAMILY))
+#define PANGO_FONT_FAMILY_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_FAMILY, PangoFontFamilyClass))
+
+typedef struct _PangoFontFamilyClass PangoFontFamilyClass;
+
+struct _PangoFontFamily
+{
+  GObject parent_instance;
+};
+
+struct _PangoFontFamilyClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+
+  void  (*list_faces)      (PangoFontFamily  *family,
+                           PangoFontFace  ***faces,
+                           int              *n_faces);
+  const char * (*get_name) (PangoFontFamily  *family);
+  gboolean (*is_monospace) (PangoFontFamily *family);
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+/*
+ * PangoFontFace
+ */
+
+#define PANGO_TYPE_FONT_FACE              (pango_font_face_get_type ())
+#define PANGO_FONT_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FACE, PangoFontFace))
+#define PANGO_IS_FONT_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FACE))
+
+GType      pango_font_face_get_type       (void) G_GNUC_CONST;
+
+PangoFontDescription *pango_font_face_describe       (PangoFontFace  *face);
+G_CONST_RETURN char  *pango_font_face_get_face_name  (PangoFontFace  *face) G_GNUC_PURE;
+void                  pango_font_face_list_sizes     (PangoFontFace  *face,
+                                                     int           **sizes,
+                                                     int            *n_sizes);
+gboolean              pango_font_face_is_synthesized (PangoFontFace  *face) G_GNUC_PURE;
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_FONT_FACE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_FACE, PangoFontFaceClass))
+#define PANGO_IS_FONT_FACE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_FACE))
+#define PANGO_FONT_FACE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_FACE, PangoFontFaceClass))
+
+typedef struct _PangoFontFaceClass   PangoFontFaceClass;
+
+struct _PangoFontFace
+{
+  GObject parent_instance;
+};
+
+struct _PangoFontFaceClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+
+  const char           * (*get_face_name)  (PangoFontFace *face);
+  PangoFontDescription * (*describe)       (PangoFontFace *face);
+  void                   (*list_sizes)     (PangoFontFace  *face,
+                                           int           **sizes,
+                                           int            *n_sizes);
+  gboolean               (*is_synthesized) (PangoFontFace *face);
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+/*
+ * PangoFont
+ */
+
+#define PANGO_TYPE_FONT              (pango_font_get_type ())
+#define PANGO_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT, PangoFont))
+#define PANGO_IS_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT))
+
+GType                 pango_font_get_type          (void) G_GNUC_CONST;
+
+PangoFontDescription *pango_font_describe          (PangoFont        *font);
+PangoFontDescription *pango_font_describe_with_absolute_size (PangoFont        *font);
+PangoCoverage *       pango_font_get_coverage      (PangoFont        *font,
+                                                   PangoLanguage    *language);
+PangoEngineShape *    pango_font_find_shaper       (PangoFont        *font,
+                                                   PangoLanguage    *language,
+                                                   guint32           ch);
+PangoFontMetrics *    pango_font_get_metrics       (PangoFont        *font,
+                                                   PangoLanguage    *language);
+void                  pango_font_get_glyph_extents (PangoFont        *font,
+                                                   PangoGlyph        glyph,
+                                                   PangoRectangle   *ink_rect,
+                                                   PangoRectangle   *logical_rect);
+PangoFontMap         *pango_font_get_font_map      (PangoFont        *font);
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_FONT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT, PangoFontClass))
+#define PANGO_IS_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT))
+#define PANGO_FONT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT, PangoFontClass))
+
+typedef struct _PangoFontClass       PangoFontClass;
+
+struct _PangoFont
+{
+  GObject parent_instance;
+};
+
+struct _PangoFontClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+
+  PangoFontDescription *(*describe)           (PangoFont      *font);
+  PangoCoverage *       (*get_coverage)       (PangoFont      *font,
+                                              PangoLanguage  *lang);
+  PangoEngineShape *    (*find_shaper)        (PangoFont      *font,
+                                              PangoLanguage  *lang,
+                                              guint32         ch);
+  void                  (*get_glyph_extents)  (PangoFont      *font,
+                                              PangoGlyph      glyph,
+                                              PangoRectangle *ink_rect,
+                                              PangoRectangle *logical_rect);
+  PangoFontMetrics *    (*get_metrics)        (PangoFont      *font,
+                                              PangoLanguage  *language);
+  PangoFontMap *        (*get_font_map)       (PangoFont      *font);
+  PangoFontDescription *(*describe_absolute)  (PangoFont      *font);
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+};
+
+/* used for very rare and miserable situtations that we cannot even
+ * draw a hexbox
+ */
+#define PANGO_UNKNOWN_GLYPH_WIDTH  10
+#define PANGO_UNKNOWN_GLYPH_HEIGHT 14
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+#define PANGO_GLYPH_EMPTY           ((PangoGlyph)0x0FFFFFFF)
+#define PANGO_GLYPH_INVALID_INPUT   ((PangoGlyph)0xFFFFFFFF)
+#define PANGO_GLYPH_UNKNOWN_FLAG    ((PangoGlyph)0x10000000)
+#define PANGO_GET_UNKNOWN_GLYPH(wc) ((PangoGlyph)(wc)|PANGO_GLYPH_UNKNOWN_FLAG)
+
+
+G_END_DECLS
+
+#endif /* __PANGO_FONT_H__ */
diff --git a/pango/pango-fontmap.c b/pango/pango-fontmap.c
new file mode 100755 (executable)
index 0000000..13f4263
--- /dev/null
@@ -0,0 +1,300 @@
+/* Pango
+ * pango-fontmap.c: Font handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pango-fontmap.h"
+#include "pango-impl-utils.h"
+#include <stdlib.h>
+
+static PangoFontset *pango_font_map_real_load_fontset (PangoFontMap               *fontmap,
+                                                      PangoContext               *context,
+                                                      const PangoFontDescription *desc,
+                                                      PangoLanguage              *language);
+
+
+G_DEFINE_ABSTRACT_TYPE (PangoFontMap, pango_font_map, G_TYPE_OBJECT)
+
+static void
+pango_font_map_class_init (PangoFontMapClass *class)
+{
+  class->load_fontset = pango_font_map_real_load_fontset;
+}
+
+static void
+pango_font_map_init (PangoFontMap *fontmap G_GNUC_UNUSED)
+{
+}
+
+/**
+ * pango_font_map_create_context:
+ * @fontmap: a #PangoFontMap
+ *
+ * Creates a #PangoContext connected to @fontmap.  This is equivalent
+ * to pango_context_new() followed by pango_context_set_font_map().
+ *
+ * If you are using Pango as part of a higher-level system,
+ * that system may have it's own way of create a #PangoContext.
+ * For instance, the GTK+ toolkit has, among others,
+ * gdk_pango_context_get_for_screen(), and
+ * gtk_widget_get_pango_context().  Use those instead.
+ *
+ * Return value: the newly allocated #PangoContext, which should
+ *               be freed with g_object_unref().
+ *
+ * Since: 1.22
+ **/
+PangoContext *
+pango_font_map_create_context (PangoFontMap *fontmap)
+{
+  PangoContext *context;
+
+  g_return_val_if_fail (fontmap != NULL, NULL);
+
+  context = pango_context_new ();
+  pango_context_set_font_map (context, fontmap);
+
+  return context;
+}
+
+/**
+ * pango_font_map_load_font:
+ * @fontmap: a #PangoFontMap
+ * @context: the #PangoContext the font will be used with
+ * @desc: a #PangoFontDescription describing the font to load
+ *
+ * Load the font in the fontmap that is the closest match for @desc.
+ *
+ * Returns: the font loaded, or %NULL if no font matched.
+ **/
+PangoFont *
+pango_font_map_load_font  (PangoFontMap               *fontmap,
+                          PangoContext               *context,
+                          const PangoFontDescription *desc)
+{
+  g_return_val_if_fail (fontmap != NULL, NULL);
+
+  return PANGO_FONT_MAP_GET_CLASS (fontmap)->load_font (fontmap, context, desc);
+}
+
+/**
+ * pango_font_map_list_families:
+ * @fontmap: a #PangoFontMap
+ * @families: location to store a pointer to an array of #PangoFontFamily *.
+ *            This array should be freed with g_free().
+ * @n_families: location to store the number of elements in @families
+ *
+ * List all families for a fontmap.
+ **/
+void
+pango_font_map_list_families (PangoFontMap      *fontmap,
+                             PangoFontFamily ***families,
+                             int               *n_families)
+{
+  g_return_if_fail (fontmap != NULL);
+
+  PANGO_FONT_MAP_GET_CLASS (fontmap)->list_families (fontmap, families, n_families);
+}
+
+/**
+ * pango_font_map_load_fontset:
+ * @fontmap: a #PangoFontMap
+ * @context: the #PangoContext the font will be used with
+ * @desc: a #PangoFontDescription describing the font to load
+ * @language: a #PangoLanguage the fonts will be used for
+ *
+ * Load a set of fonts in the fontmap that can be used to render
+ * a font matching @desc.
+ *
+ * Returns: the fontset, or %NULL if no font matched.
+ **/
+PangoFontset *
+pango_font_map_load_fontset (PangoFontMap                 *fontmap,
+                            PangoContext                 *context,
+                            const PangoFontDescription   *desc,
+                            PangoLanguage                *language)
+{
+  g_return_val_if_fail (fontmap != NULL, NULL);
+
+  return PANGO_FONT_MAP_GET_CLASS (fontmap)->load_fontset (fontmap, context, desc, language);
+}
+
+static void
+pango_font_map_fontset_add_fonts (PangoFontMap          *fontmap,
+                                 PangoContext          *context,
+                                 PangoFontsetSimple    *fonts,
+                                 PangoFontDescription  *desc,
+                                 const char            *family)
+{
+  char **aliases;
+  int n_aliases;
+  int j;
+  PangoFont *font;
+
+  pango_lookup_aliases (family,
+                       &aliases,
+                       &n_aliases);
+
+  if (n_aliases)
+    {
+      for (j = 0; j < n_aliases; j++)
+       {
+         pango_font_description_set_family_static (desc, aliases[j]);
+         font = pango_font_map_load_font (fontmap, context, desc);
+         if (font)
+           pango_fontset_simple_append (fonts, font);
+       }
+    }
+  else
+    {
+      pango_font_description_set_family_static (desc, family);
+      font = pango_font_map_load_font (fontmap, context, desc);
+      if (font)
+       pango_fontset_simple_append (fonts, font);
+    }
+}
+
+static PangoFontset *
+pango_font_map_real_load_fontset (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc,
+                                 PangoLanguage              *language)
+{
+  PangoFontDescription *tmp_desc = pango_font_description_copy_static (desc);
+  const char *family;
+  char **families;
+  int i;
+  PangoFontsetSimple *fonts;
+  static GHashTable *warned_fonts = NULL;
+
+  family = pango_font_description_get_family (desc);
+  families = g_strsplit (family ? family : "", ",", -1);
+
+  fonts = pango_fontset_simple_new (language);
+
+  for (i = 0; families[i]; i++)
+    pango_font_map_fontset_add_fonts (fontmap,
+                                     context,
+                                     fonts,
+                                     tmp_desc,
+                                     families[i]);
+
+  g_strfreev (families);
+
+  /* The font description was completely unloadable, try with
+   * family == "Sans"
+   */
+  if (pango_fontset_simple_size (fonts) == 0)
+    {
+      char *ctmp1, *ctmp2;
+
+      pango_font_description_set_family_static (tmp_desc,
+                                               pango_font_description_get_family (desc));
+
+      ctmp1 = pango_font_description_to_string (desc);
+      pango_font_description_set_family_static (tmp_desc, "Sans");
+
+      if (!warned_fonts || !g_hash_table_lookup (warned_fonts, ctmp1))
+       {
+         if (!warned_fonts)
+           warned_fonts = g_hash_table_new (g_str_hash, g_str_equal);
+
+         g_hash_table_insert (warned_fonts, g_strdup (ctmp1), GINT_TO_POINTER (1));
+
+         ctmp2 = pango_font_description_to_string (tmp_desc);
+         g_warning ("couldn't load font \"%s\", falling back to \"%s\", "
+                    "expect ugly output.", ctmp1, ctmp2);
+         g_free (ctmp2);
+       }
+      g_free (ctmp1);
+
+      pango_font_map_fontset_add_fonts (fontmap,
+                                       context,
+                                       fonts,
+                                       tmp_desc,
+                                       "Sans");
+    }
+
+  /* We couldn't try with Sans and the specified style. Try Sans Normal
+   */
+  if (pango_fontset_simple_size (fonts) == 0)
+    {
+      char *ctmp1, *ctmp2;
+
+      pango_font_description_set_family_static (tmp_desc, "Sans");
+      ctmp1 = pango_font_description_to_string (tmp_desc);
+      pango_font_description_set_style (tmp_desc, PANGO_STYLE_NORMAL);
+      pango_font_description_set_weight (tmp_desc, PANGO_WEIGHT_NORMAL);
+      pango_font_description_set_variant (tmp_desc, PANGO_VARIANT_NORMAL);
+      pango_font_description_set_stretch (tmp_desc, PANGO_STRETCH_NORMAL);
+
+      if (!warned_fonts || !g_hash_table_lookup (warned_fonts, ctmp1))
+       {
+         g_hash_table_insert (warned_fonts, g_strdup (ctmp1), GINT_TO_POINTER (1));
+
+         ctmp2 = pango_font_description_to_string (tmp_desc);
+
+         g_warning ("couldn't load font \"%s\", falling back to \"%s\", "
+                    "expect ugly output.", ctmp1, ctmp2);
+         g_free (ctmp2);
+       }
+
+      g_free (ctmp1);
+
+      pango_font_map_fontset_add_fonts (fontmap,
+                                       context,
+                                       fonts,
+                                       tmp_desc,
+                                       "Sans");
+    }
+
+  pango_font_description_free (tmp_desc);
+
+  /* Everything failed, we are screwed, there is no way to continue,
+   * but lets just not crash here.
+   */
+  if (pango_fontset_simple_size (fonts) == 0)
+      g_warning ("All font fallbacks failed!!!!");
+
+  return PANGO_FONTSET (fonts);
+}
+
+/**
+ * pango_font_map_get_shape_engine_type:
+ * @fontmap: a #PangoFontMap
+ *
+ * Returns the render ID for shape engines for this fontmap.
+ * See the <structfield>render_type</structfield> field of
+ * #PangoEngineInfo.
+  *
+ * Return value: the ID string for shape engines for
+ *  this fontmap. Owned by Pango, should not be modified
+ *  or freed.
+ *
+ * Since: 1.4
+ **/
+G_CONST_RETURN char *
+pango_font_map_get_shape_engine_type (PangoFontMap *fontmap)
+{
+  g_return_val_if_fail (PANGO_IS_FONT_MAP (fontmap), NULL);
+
+  return PANGO_FONT_MAP_GET_CLASS (fontmap)->shape_engine_type;
+}
+
diff --git a/pango/pango-fontmap.h b/pango/pango-fontmap.h
new file mode 100755 (executable)
index 0000000..602ec9f
--- /dev/null
@@ -0,0 +1,96 @@
+/* Pango
+ * pango-font.h: Font handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_FONTMAP_H__
+#define __PANGO_FONTMAP_H__
+
+#include <pango/pango-font.h>
+#include <pango/pango-fontset.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_FONT_MAP              (pango_font_map_get_type ())
+#define PANGO_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_MAP, PangoFontMap))
+#define PANGO_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_MAP))
+
+typedef struct _PangoContext PangoContext;
+
+GType         pango_font_map_get_type       (void) G_GNUC_CONST;
+PangoContext * pango_font_map_create_context (PangoFontMap               *fontmap);
+PangoFont *   pango_font_map_load_font     (PangoFontMap                 *fontmap,
+                                           PangoContext                 *context,
+                                           const PangoFontDescription   *desc);
+PangoFontset *pango_font_map_load_fontset  (PangoFontMap                 *fontmap,
+                                           PangoContext                 *context,
+                                           const PangoFontDescription   *desc,
+                                           PangoLanguage                *language);
+void          pango_font_map_list_families (PangoFontMap                 *fontmap,
+                                           PangoFontFamily            ***families,
+                                           int                          *n_families);
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_FONT_MAP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_MAP, PangoFontMapClass))
+#define PANGO_IS_FONT_MAP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_MAP))
+#define PANGO_FONT_MAP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_MAP, PangoFontMapClass))
+
+typedef struct _PangoFontMapClass PangoFontMapClass;
+
+struct _PangoFontMap
+{
+  GObject parent_instance;
+};
+
+struct _PangoFontMapClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+
+  PangoFont *   (*load_font)     (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc);
+  void          (*list_families) (PangoFontMap               *fontmap,
+                                 PangoFontFamily          ***families,
+                                 int                        *n_families);
+  PangoFontset *(*load_fontset)  (PangoFontMap               *fontmap,
+                                 PangoContext               *context,
+                                 const PangoFontDescription *desc,
+                                 PangoLanguage              *language);
+
+  const char *shape_engine_type;
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+const char   *pango_font_map_get_shape_engine_type (PangoFontMap *fontmap);
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+G_END_DECLS
+
+#endif /* __PANGO_FONTMAP_H__ */
diff --git a/pango/pango-fontset.c b/pango/pango-fontset.c
new file mode 100755 (executable)
index 0000000..ce1eb33
--- /dev/null
@@ -0,0 +1,407 @@
+/* Pango
+ * pango-fontset.c:
+ *
+ * Copyright (C) 2001 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+/*
+ * PangoFontset
+ */
+
+#include "pango-types.h"
+#include "pango-font.h"
+#include "pango-fontset.h"
+#include "pango-impl-utils.h"
+
+static PangoFontMetrics *pango_fontset_real_get_metrics (PangoFontset      *fontset);
+
+static void
+pango_fontset_class_init (PangoFontsetClass *class)
+{
+  class->get_metrics = pango_fontset_real_get_metrics;
+}
+
+PANGO_DEFINE_TYPE_ABSTRACT (PangoFontset, pango_fontset,
+                           pango_fontset_class_init, NULL, G_TYPE_OBJECT)
+
+/**
+ * pango_fontset_get_font:
+ * @fontset: a #PangoFontset
+ * @wc: a Unicode character
+ *
+ * Returns the font in the fontset that contains the best glyph for the
+ * Unicode character @wc.
+ *
+ * Return value: a #PangoFont. The caller must call g_object_unref when finished
+ *          with the font.
+ **/
+PangoFont *
+pango_fontset_get_font (PangoFontset  *fontset,
+                       guint          wc)
+{
+
+  g_return_val_if_fail (PANGO_IS_FONTSET (fontset), NULL);
+
+  return PANGO_FONTSET_GET_CLASS (fontset)->get_font (fontset, wc);
+}
+
+/**
+ * pango_fontset_get_metrics:
+ * @fontset: a #PangoFontset
+ *
+ * Get overall metric information for the fonts in the fontset.
+ *
+ * Return value: a #PangoFontMetrics object. The caller must call pango_font_metrics_unref()
+ *   when finished using the object.
+ **/
+PangoFontMetrics *
+pango_fontset_get_metrics (PangoFontset  *fontset)
+{
+  g_return_val_if_fail (PANGO_IS_FONTSET (fontset), NULL);
+
+  return PANGO_FONTSET_GET_CLASS (fontset)->get_metrics (fontset);
+}
+
+/**
+ * pango_fontset_foreach:
+ * @fontset: a #PangoFontset
+ * @func: Callback function
+ * @data: data to pass to the callback function
+ *
+ * Iterates through all the fonts in a fontset, calling @func for
+ * each one. If @func returns %TRUE, that stops the iteration.
+ *
+ * Since: 1.4
+ **/
+void
+pango_fontset_foreach (PangoFontset           *fontset,
+                      PangoFontsetForeachFunc func,
+                      gpointer                data)
+{
+  g_return_if_fail (PANGO_IS_FONTSET (fontset));
+  g_return_if_fail (func != NULL);
+
+  PANGO_FONTSET_GET_CLASS (fontset)->foreach (fontset, func, data);
+}
+
+static gboolean
+get_first_metrics_foreach (PangoFontset  *fontset,
+                          PangoFont     *font,
+                          gpointer       data)
+{
+  PangoFontMetrics *fontset_metrics = data;
+  PangoLanguage *language = PANGO_FONTSET_GET_CLASS (fontset)->get_language (fontset);
+  PangoFontMetrics *font_metrics = pango_font_get_metrics (font, language);
+  guint save_ref_count;
+
+  /* Initialize the fontset metrics to metrics of the first font in the
+   * fontset; saving the refcount and restoring it is a bit of hack but avoids
+   * having to update this code for each metrics addition.
+   */
+  save_ref_count = fontset_metrics->ref_count;
+  *fontset_metrics = *font_metrics;
+  fontset_metrics->ref_count = save_ref_count;
+
+  pango_font_metrics_unref (font_metrics);
+
+  return TRUE;                 /* Stops iteration */
+}
+
+static PangoFontMetrics *
+pango_fontset_real_get_metrics (PangoFontset  *fontset)
+{
+  PangoFontMetrics *metrics, *raw_metrics;
+  const char *sample_str;
+  const char *p;
+  int count;
+  GHashTable *fonts_seen;
+  PangoFont *font;
+  PangoLanguage *language;
+
+  language = PANGO_FONTSET_GET_CLASS (fontset)->get_language (fontset);
+  sample_str = pango_language_get_sample_string (language);
+
+  count = 0;
+  metrics = pango_font_metrics_new ();
+  fonts_seen = g_hash_table_new_full (NULL, NULL, g_object_unref, NULL);
+
+  /* Initialize the metrics from the first font in the fontset */
+  pango_fontset_foreach (fontset, get_first_metrics_foreach, metrics);
+
+  p = sample_str;
+  while (*p)
+    {
+      gunichar wc = g_utf8_get_char (p);
+      font = pango_fontset_get_font (fontset, wc);
+      if (font)
+       {
+         if (g_hash_table_lookup (fonts_seen, font) == NULL)
+           {
+             raw_metrics = pango_font_get_metrics (font, language);
+             g_hash_table_insert (fonts_seen, font, font);
+
+             if (count == 0)
+               {
+                 metrics->ascent = raw_metrics->ascent;
+                 metrics->descent = raw_metrics->descent;
+                 metrics->approximate_char_width = raw_metrics->approximate_char_width;
+                 metrics->approximate_digit_width = raw_metrics->approximate_digit_width;
+               }
+             else
+               {
+                 metrics->ascent = MAX (metrics->ascent, raw_metrics->ascent);
+                 metrics->descent = MAX (metrics->descent, raw_metrics->descent);
+                 metrics->approximate_char_width += raw_metrics->approximate_char_width;
+                 metrics->approximate_digit_width += raw_metrics->approximate_digit_width;
+               }
+             count++;
+             pango_font_metrics_unref (raw_metrics);
+           }
+         else
+           g_object_unref (font);
+       }
+
+      p = g_utf8_next_char (p);
+    }
+
+  g_hash_table_destroy (fonts_seen);
+
+  if (count)
+    {
+      metrics->approximate_char_width /= count;
+      metrics->approximate_digit_width /= count;
+    }
+
+  return metrics;
+}
+
+
+/*
+ * PangoFontsetSimple
+ */
+
+#define PANGO_FONTSET_SIMPLE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONTSET_SIMPLE, PangoFontsetSimpleClass))
+#define PANGO_IS_FONTSET_SIMPLE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONTSET_SIMPLE))
+#define PANGO_FONTSET_SIMPLE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONTSET_SIMPLE, PangoFontsetSimpleClass))
+
+static void              pango_fontset_simple_finalize     (GObject                 *object);
+static void              pango_fontset_simple_init         (PangoFontsetSimple      *fontset);
+static PangoFontMetrics *pango_fontset_simple_get_metrics  (PangoFontset            *fontset);
+static PangoLanguage *   pango_fontset_simple_get_language (PangoFontset            *fontset);
+static  PangoFont *      pango_fontset_simple_get_font     (PangoFontset            *fontset,
+                                                           guint                    wc);
+static void              pango_fontset_simple_foreach      (PangoFontset            *fontset,
+                                                           PangoFontsetForeachFunc  func,
+                                                           gpointer                 data);
+
+struct _PangoFontsetSimple
+{
+  PangoFontset parent_instance;
+
+  GPtrArray *fonts;
+  GPtrArray *coverages;
+  PangoLanguage *language;
+};
+
+struct _PangoFontsetSimpleClass
+{
+  PangoFontsetClass parent_class;
+};
+
+static PangoFontsetClass *simple_parent_class; /* Parent class structure for PangoFontsetSimple */
+
+/**
+ * pango_fontset_simple_new:
+ * @language: a #PangoLanguage tag
+ *
+ * Creates a new #PangoFontsetSimple for the given language.
+ *
+ * Return value: the newly allocated #PangoFontsetSimple, which should
+ *               be freed with g_object_unref().
+ **/
+PangoFontsetSimple *
+pango_fontset_simple_new (PangoLanguage *language)
+{
+  PangoFontsetSimple *fontset;
+
+  fontset = g_object_new (PANGO_TYPE_FONTSET_SIMPLE, NULL);
+  fontset->language = language;
+
+  return fontset;
+}
+
+static void
+pango_fontset_simple_class_init (PangoFontsetSimpleClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontsetClass *fontset_class = PANGO_FONTSET_CLASS (class);
+
+  simple_parent_class = g_type_class_peek_parent (class);
+
+  object_class->finalize = pango_fontset_simple_finalize;
+  fontset_class->get_font = pango_fontset_simple_get_font;
+  fontset_class->get_metrics = pango_fontset_simple_get_metrics;
+  fontset_class->get_language = pango_fontset_simple_get_language;
+  fontset_class->foreach = pango_fontset_simple_foreach;
+}
+
+static void
+pango_fontset_simple_init (PangoFontsetSimple *fontset)
+{
+  fontset->fonts = g_ptr_array_new ();
+  fontset->coverages = g_ptr_array_new ();
+  fontset->language = NULL;
+}
+
+PANGO_DEFINE_TYPE (PangoFontsetSimple, pango_fontset_simple,
+                  pango_fontset_simple_class_init, pango_fontset_simple_init,
+                  PANGO_TYPE_FONTSET)
+
+static void
+pango_fontset_simple_finalize (GObject *object)
+{
+  PangoFontsetSimple *fontset = PANGO_FONTSET_SIMPLE (object);
+  PangoCoverage *coverage;
+  unsigned int i;
+
+  for (i = 0; i < fontset->fonts->len; i++)
+    g_object_unref (g_ptr_array_index(fontset->fonts, i));
+
+  g_ptr_array_free (fontset->fonts, TRUE);
+
+  for (i = 0; i < fontset->coverages->len; i++)
+    {
+      coverage = g_ptr_array_index (fontset->coverages, i);
+      if (coverage)
+       pango_coverage_unref (coverage);
+    }
+
+  g_ptr_array_free (fontset->coverages, TRUE);
+
+  G_OBJECT_CLASS (simple_parent_class)->finalize (object);
+}
+
+/**
+ * pango_fontset_simple_append:
+ * @fontset: a #PangoFontsetSimple.
+ * @font: a #PangoFont.
+ *
+ * Adds a font to the fontset.
+ **/
+void
+pango_fontset_simple_append (PangoFontsetSimple *fontset,
+                            PangoFont          *font)
+{
+  g_ptr_array_add (fontset->fonts, font);
+  g_ptr_array_add (fontset->coverages, NULL);
+}
+
+/**
+ * pango_fontset_simple_size:
+ * @fontset: a #PangoFontsetSimple.
+ *
+ * Returns the number of fonts in the fontset.
+ *
+ * Return value: the size of @fontset.
+ **/
+int
+pango_fontset_simple_size (PangoFontsetSimple *fontset)
+{
+  return fontset->fonts->len;
+}
+
+static PangoLanguage *
+pango_fontset_simple_get_language (PangoFontset  *fontset)
+{
+  PangoFontsetSimple *simple = PANGO_FONTSET_SIMPLE (fontset);
+
+  return simple->language;
+}
+
+static PangoFontMetrics *
+pango_fontset_simple_get_metrics (PangoFontset  *fontset)
+{
+  PangoFontsetSimple *simple = PANGO_FONTSET_SIMPLE (fontset);
+
+  if (simple->fonts->len == 1)
+    return pango_font_get_metrics (PANGO_FONT (g_ptr_array_index(simple->fonts, 0)),
+                                  simple->language);
+
+  return PANGO_FONTSET_CLASS (simple_parent_class)->get_metrics (fontset);
+}
+
+static PangoFont *
+pango_fontset_simple_get_font (PangoFontset  *fontset,
+                              guint          wc)
+{
+  PangoFontsetSimple *simple = PANGO_FONTSET_SIMPLE (fontset);
+  PangoCoverageLevel best_level = PANGO_COVERAGE_NONE;
+  PangoCoverageLevel level;
+  PangoFont *font;
+  PangoCoverage *coverage;
+  int result = -1;
+  unsigned int i;
+
+  for (i = 0; i < simple->fonts->len; i++)
+    {
+      coverage = g_ptr_array_index (simple->coverages, i);
+
+      if (coverage == NULL)
+       {
+         font = g_ptr_array_index (simple->fonts, i);
+
+         coverage = pango_font_get_coverage (font, simple->language);
+         g_ptr_array_index (simple->coverages, i) = coverage;
+       }
+
+      level = pango_coverage_get (coverage, wc);
+
+      if (result == -1 || level > best_level)
+       {
+         result = i;
+         best_level = level;
+         if (level == PANGO_COVERAGE_EXACT)
+           break;
+       }
+    }
+
+  if (G_UNLIKELY (result == -1))
+    return NULL;
+
+  font = g_ptr_array_index(simple->fonts, result);
+  return g_object_ref (font);
+}
+
+static void
+pango_fontset_simple_foreach (PangoFontset           *fontset,
+                             PangoFontsetForeachFunc func,
+                             gpointer                data)
+{
+  PangoFontsetSimple *simple = PANGO_FONTSET_SIMPLE (fontset);
+  unsigned int i;
+
+  for (i = 0; i < simple->fonts->len; i++)
+    {
+      if ((*func) (fontset,
+                  g_ptr_array_index (simple->fonts, i),
+                  data))
+       return;
+    }
+}
diff --git a/pango/pango-fontset.h b/pango/pango-fontset.h
new file mode 100755 (executable)
index 0000000..5c6c748
--- /dev/null
@@ -0,0 +1,127 @@
+/* Pango
+ * pango-fontset.h: Font set handling
+ *
+ * Copyright (C) 2001 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_FONTSET_H__
+#define __PANGO_FONTSET_H__
+
+#include <pango/pango-coverage.h>
+#include <pango/pango-types.h>
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/*
+ * PangoFontset
+ */
+
+#define PANGO_TYPE_FONTSET              (pango_fontset_get_type ())
+#define PANGO_FONTSET(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONTSET, PangoFontset))
+#define PANGO_IS_FONTSET(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONTSET))
+
+GType pango_fontset_get_type (void) G_GNUC_CONST;
+
+typedef struct _PangoFontset        PangoFontset;
+
+/**
+ * PangoFontsetForeachFunc
+ * @fontset: a #PangoFontset
+ * @font: a font from @fontset
+ * @data: callback data
+ *
+ * A callback function used by pango_fontset_foreach() when enumerating
+ * the fonts in a fontset.
+ *
+ * Returns: if %TRUE, stop iteration and return immediately.
+ *
+ * Since: 1.4
+ **/
+typedef gboolean (*PangoFontsetForeachFunc) (PangoFontset  *fontset,
+                                            PangoFont     *font,
+                                            gpointer       data);
+
+PangoFont *       pango_fontset_get_font    (PangoFontset           *fontset,
+                                            guint                   wc);
+PangoFontMetrics *pango_fontset_get_metrics (PangoFontset           *fontset);
+void              pango_fontset_foreach     (PangoFontset           *fontset,
+                                            PangoFontsetForeachFunc func,
+                                            gpointer                data);
+
+#ifdef PANGO_ENABLE_BACKEND
+
+typedef struct _PangoFontsetClass   PangoFontsetClass;
+
+#define PANGO_FONTSET_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONTSET, PangoFontsetClass))
+#define PANGO_IS_FONTSET_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONTSET))
+#define PANGO_FONTSET_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONTSET, PangoFontsetClass))
+
+struct _PangoFontset
+{
+  GObject parent_instance;
+};
+
+struct _PangoFontsetClass
+{
+  GObjectClass parent_class;
+
+  /*< public >*/
+
+  PangoFont *       (*get_font)     (PangoFontset     *fontset,
+                                    guint             wc);
+
+  PangoFontMetrics *(*get_metrics)  (PangoFontset     *fontset);
+  PangoLanguage *   (*get_language) (PangoFontset     *fontset);
+  void              (*foreach)      (PangoFontset           *fontset,
+                                    PangoFontsetForeachFunc func,
+                                    gpointer                data);
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+/*
+ * PangoFontsetSimple
+ */
+
+#define PANGO_TYPE_FONTSET_SIMPLE       (pango_fontset_simple_get_type ())
+#define PANGO_FONTSET_SIMPLE(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONTSET_SIMPLE, PangoFontsetSimple))
+#define PANGO_IS_FONTSET_SIMPLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONTSET_SIMPLE))
+
+typedef struct _PangoFontsetSimple  PangoFontsetSimple;
+typedef struct _PangoFontsetSimpleClass  PangoFontsetSimpleClass;
+
+GType pango_fontset_simple_get_type (void) G_GNUC_CONST;
+
+PangoFontsetSimple * pango_fontset_simple_new    (PangoLanguage      *language);
+void                 pango_fontset_simple_append (PangoFontsetSimple *fontset,
+                                                 PangoFont          *font);
+int                  pango_fontset_simple_size   (PangoFontsetSimple *fontset);
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+G_END_DECLS
+
+#endif /* __PANGO_FONTSET_H__ */
diff --git a/pango/pango-glyph-item.c b/pango/pango-glyph-item.c
new file mode 100755 (executable)
index 0000000..d60e7be
--- /dev/null
@@ -0,0 +1,844 @@
+/* Pango
+ * pango-glyph-item.c: Pair of PangoItem and a glyph string
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+
+#include "pango-glyph-item.h"
+#include "pango-impl-utils.h"
+
+#define LTR(glyph_item) (((glyph_item)->item->analysis.level % 2) == 0)
+
+/**
+ * pango_glyph_item_split:
+ * @orig: a #PangoItem
+ * @text: text to which positions in @orig apply
+ * @split_index: byte index of position to split item, relative to the start of the item
+ *
+ * Modifies @orig to cover only the text after @split_index, and
+ * returns a new item that covers the text before @split_index that
+ * used to be in @orig. You can think of @split_index as the length of
+ * the returned item. @split_index may not be 0, and it may not be
+ * greater than or equal to the length of @orig (that is, there must
+ * be at least one byte assigned to each item, you can't create a
+ * zero-length item).
+ *
+ * This function is similar in function to pango_item_split() (and uses
+ * it internally.)
+ *
+ * Return value: the newly allocated item representing text before
+ *               @split_index, which should be freed
+ *               with pango_glyph_item_free().
+ *
+ * Since: 1.2
+ **/
+PangoGlyphItem *
+pango_glyph_item_split (PangoGlyphItem *orig,
+                       const char     *text,
+                       int             split_index)
+{
+  PangoGlyphItem *new;
+  int i;
+  int num_glyphs;
+  int num_remaining;
+  int split_offset;
+
+  g_return_val_if_fail (orig != NULL, NULL);
+  g_return_val_if_fail (orig->item->length > 0, NULL);
+  g_return_val_if_fail (split_index > 0, NULL);
+  g_return_val_if_fail (split_index < orig->item->length, NULL);
+
+  if (LTR (orig))
+    {
+      for (i = 0; i < orig->glyphs->num_glyphs; i++)
+       {
+         if (orig->glyphs->log_clusters[i] >= split_index)
+           break;
+       }
+
+      if (i == orig->glyphs->num_glyphs) /* No splitting necessary */
+       return NULL;
+
+      split_index = orig->glyphs->log_clusters[i];
+      num_glyphs = i;
+    }
+  else
+    {
+      for (i = orig->glyphs->num_glyphs - 1; i >= 0; i--)
+       {
+         if (orig->glyphs->log_clusters[i] >= split_index)
+           break;
+       }
+
+      if (i < 0) /* No splitting necessary */
+       return NULL;
+
+      split_index = orig->glyphs->log_clusters[i];
+      num_glyphs = orig->glyphs->num_glyphs - 1 - i;
+    }
+
+  num_remaining = orig->glyphs->num_glyphs - num_glyphs;
+
+  new = g_slice_new (PangoGlyphItem);
+  split_offset = g_utf8_pointer_to_offset (text + orig->item->offset,
+                                          text + orig->item->offset + split_index);
+  new->item = pango_item_split (orig->item, split_index, split_offset);
+
+  new->glyphs = pango_glyph_string_new ();
+  pango_glyph_string_set_size (new->glyphs, num_glyphs);
+
+  if (LTR (orig))
+    {
+      memcpy (new->glyphs->glyphs, orig->glyphs->glyphs, num_glyphs * sizeof (PangoGlyphInfo));
+      memcpy (new->glyphs->log_clusters, orig->glyphs->log_clusters, num_glyphs * sizeof (int));
+
+      memmove (orig->glyphs->glyphs, orig->glyphs->glyphs + num_glyphs,
+              num_remaining * sizeof (PangoGlyphInfo));
+      for (i = num_glyphs; i < orig->glyphs->num_glyphs; i++)
+       orig->glyphs->log_clusters[i - num_glyphs] = orig->glyphs->log_clusters[i] - split_index;
+    }
+  else
+    {
+      memcpy (new->glyphs->glyphs, orig->glyphs->glyphs + num_remaining, num_glyphs * sizeof (PangoGlyphInfo));
+      memcpy (new->glyphs->log_clusters, orig->glyphs->log_clusters + num_remaining, num_glyphs * sizeof (int));
+
+      for (i = 0; i < num_remaining; i++)
+       orig->glyphs->log_clusters[i] = orig->glyphs->log_clusters[i] - split_index;
+    }
+
+  pango_glyph_string_set_size (orig->glyphs, orig->glyphs->num_glyphs - num_glyphs);
+
+  return new;
+}
+
+/**
+ * pango_glyph_item_copy:
+ * @orig: a #PangoGlyphItem, may be %NULL
+ *
+ * Make a deep copy of an existing #PangoGlyphItem structure.
+ *
+ * Return value: the newly allocated #PangoGlyphItem, which should
+ *               be freed with pango_glyph_item_free(), or %NULL
+ *               if @orig was %NULL.
+ *
+ * Since: 1.20
+ **/
+PangoGlyphItem *
+pango_glyph_item_copy  (PangoGlyphItem *orig)
+{
+  PangoGlyphItem *result;
+
+  if (orig == NULL)
+    return NULL;
+
+  result = g_slice_new (PangoGlyphItem);
+
+  result->item = pango_item_copy (orig->item);
+  result->glyphs = pango_glyph_string_copy (orig->glyphs);
+
+  return result;
+}
+
+/**
+ * pango_glyph_item_free:
+ * @glyph_item: a #PangoGlyphItem, may be %NULL
+ *
+ * Frees a #PangoGlyphItem and resources to which it points.
+ *
+ * Since: 1.6
+ **/
+void
+pango_glyph_item_free  (PangoGlyphItem *glyph_item)
+{
+  if (glyph_item == NULL)
+    return;
+
+  if (glyph_item->item)
+    pango_item_free (glyph_item->item);
+  if (glyph_item->glyphs)
+    pango_glyph_string_free (glyph_item->glyphs);
+
+  g_slice_free (PangoGlyphItem, glyph_item);
+}
+
+GType
+pango_glyph_item_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoGlyphItem"),
+                                            (GBoxedCopyFunc) pango_glyph_item_copy,
+                                            (GBoxedFreeFunc) pango_glyph_item_free);
+  return our_type;
+}
+
+
+/**
+ * pango_glyph_item_iter_copy:
+ * @orig: a #PangoGlyphItemIter, may be %NULL
+ *
+ * Make a shallow copy of an existing #PangoGlyphItemIter structure.
+ *
+ * Return value: the newly allocated #PangoGlyphItemIter, which should
+ *               be freed with pango_glyph_item_iter_free(), or %NULL
+ *               if @orig was %NULL.
+ *
+ * Since: 1.22
+ **/
+PangoGlyphItemIter *
+pango_glyph_item_iter_copy  (PangoGlyphItemIter *orig)
+{
+  PangoGlyphItemIter *result;
+
+  if (orig == NULL)
+    return NULL;
+
+  result = g_slice_new (PangoGlyphItemIter);
+
+  *result = *orig;
+
+  return result;
+}
+
+/**
+ * pango_glyph_item_iter_free:
+ * @iter: a #PangoGlyphItemIter, may be %NULL
+ *
+ * Frees a #PangoGlyphItemIter created by pango_glyph_item_iter_copy().
+ *
+ * Since: 1.22
+ **/
+void
+pango_glyph_item_iter_free  (PangoGlyphItemIter *iter)
+{
+  if (iter == NULL)
+    return;
+
+  g_slice_free (PangoGlyphItemIter, iter);
+}
+
+GType
+pango_glyph_item_iter_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoGlyphItemIter"),
+                                            (GBoxedCopyFunc) pango_glyph_item_iter_copy,
+                                            (GBoxedFreeFunc) pango_glyph_item_iter_free);
+  return our_type;
+}
+
+/**
+ * pango_glyph_item_iter_next_cluster:
+ * @iter: a #PangoGlyphItemIter
+ *
+ * Advances the iterator to the next cluster in the glyph item.
+ * See #PangoGlyphItemIter for details of cluster orders.
+ *
+ * Return value: %TRUE if the iterator was advanced, %FALSE if we were already on the
+ *  last cluster.
+ *
+ * Since: 1.22
+ **/
+gboolean
+pango_glyph_item_iter_next_cluster (PangoGlyphItemIter *iter)
+{
+  int glyph_index = iter->end_glyph;
+  PangoGlyphString *glyphs = iter->glyph_item->glyphs;
+  int cluster;
+  PangoItem *item = iter->glyph_item->item;
+
+  if (LTR (iter->glyph_item))
+    {
+      if (glyph_index == glyphs->num_glyphs)
+       return FALSE;
+    }
+  else
+    {
+      if (glyph_index < 0)
+       return FALSE;
+    }
+
+  iter->start_glyph = iter->end_glyph;
+  iter->start_index = iter->end_index;
+  iter->start_char = iter->end_char;
+
+  if (LTR (iter->glyph_item))
+    {
+      cluster = glyphs->log_clusters[glyph_index];
+      while (TRUE)
+       {
+         glyph_index++;
+
+         if (glyph_index == glyphs->num_glyphs)
+           {
+             iter->end_index = item->offset + item->length;
+             iter->end_char = item->num_chars;
+             break;
+           }
+
+         if (glyphs->log_clusters[glyph_index] != cluster)
+           {
+             iter->end_index = item->offset + glyphs->log_clusters[glyph_index];
+             iter->end_char += pango_utf8_strlen (iter->text + iter->start_index,
+                                              iter->end_index - iter->start_index);
+             break;
+           }
+       }
+    }
+  else                 /* RTL */
+    {
+      cluster = glyphs->log_clusters[glyph_index];
+      while (TRUE)
+       {
+         glyph_index--;
+
+         if (glyph_index < 0)
+           {
+             iter->end_index = item->offset + item->length;
+             iter->end_char = item->num_chars;
+             break;
+           }
+
+         if (glyphs->log_clusters[glyph_index] != cluster)
+           {
+             iter->end_index = item->offset + glyphs->log_clusters[glyph_index];
+             iter->end_char += pango_utf8_strlen (iter->text + iter->start_index,
+                                              iter->end_index - iter->start_index);
+             break;
+           }
+       }
+    }
+
+  iter->end_glyph = glyph_index;
+  return TRUE;
+}
+
+/**
+ * pango_glyph_item_iter_prev_cluster:
+ * @iter: a #PangoGlyphItemIter
+ *
+ * Moves the iterator to the preceding cluster in the glyph item.
+ * See #PangoGlyphItemIter for details of cluster orders.
+ *
+ * Return value: %TRUE if the iterator was moved, %FALSE if we were already on the
+ *  first cluster.
+ *
+ * Since: 1.22
+ **/
+gboolean
+pango_glyph_item_iter_prev_cluster (PangoGlyphItemIter *iter)
+{
+  int glyph_index = iter->start_glyph;
+  PangoGlyphString *glyphs = iter->glyph_item->glyphs;
+  int cluster;
+  PangoItem *item = iter->glyph_item->item;
+
+  if (LTR (iter->glyph_item))
+    {
+      if (glyph_index == 0)
+       return FALSE;
+    }
+  else
+    {
+      if (glyph_index == glyphs->num_glyphs - 1)
+       return FALSE;
+
+    }
+
+  iter->end_glyph = iter->start_glyph;
+  iter->end_index = iter->start_index;
+  iter->end_char = iter->start_char;
+
+  if (LTR (iter->glyph_item))
+    {
+      cluster = glyphs->log_clusters[glyph_index - 1];
+      while (TRUE)
+       {
+         glyph_index--;
+
+         if (glyph_index == 0)
+           {
+             iter->start_index = item->offset;
+             iter->start_char = 0;
+             break;
+           }
+
+         if (glyphs->log_clusters[glyph_index] != cluster)
+           {
+             glyph_index++;
+             iter->start_index = item->offset + glyphs->log_clusters[glyph_index];
+             iter->start_char -= pango_utf8_strlen (iter->text + iter->start_index,
+                                                iter->end_index - iter->start_index);
+             break;
+           }
+       }
+    }
+  else                 /* RTL */
+    {
+      cluster = glyphs->log_clusters[glyph_index + 1];
+      while (TRUE)
+       {
+         glyph_index++;
+
+         if (glyph_index == glyphs->num_glyphs - 1)
+           {
+             iter->start_index = item->offset;
+             iter->start_char = 0;
+             break;
+           }
+
+         if (glyphs->log_clusters[glyph_index] != cluster)
+           {
+             glyph_index--;
+             iter->start_index = item->offset + glyphs->log_clusters[glyph_index];
+             iter->start_char -= pango_utf8_strlen (iter->text + iter->start_index,
+                                                iter->end_index - iter->start_index);
+             break;
+           }
+       }
+    }
+
+  iter->start_glyph = glyph_index;
+  return TRUE;
+}
+
+/**
+ * pango_glyph_item_iter_init_start:
+ * @iter: a #PangoGlyphItemIter
+ * @glyph_item: the glyph item to iterate over
+ * @text: text corresponding to the glyph item
+ *
+ * Initializes a #PangoGlyphItemIter structure to point to the
+ * first cluster in a glyph item.
+ * See #PangoGlyphItemIter for details of cluster orders.
+ *
+ * Return value: %FALSE if there are no clusters in the glyph item
+ *
+ * Since: 1.22
+ **/
+gboolean
+pango_glyph_item_iter_init_start (PangoGlyphItemIter  *iter,
+                                 PangoGlyphItem      *glyph_item,
+                                 const char          *text)
+{
+  iter->glyph_item = glyph_item;
+  iter->text = text;
+
+  if (LTR (glyph_item))
+    iter->end_glyph = 0;
+  else
+    iter->end_glyph = glyph_item->glyphs->num_glyphs - 1;
+
+  iter->end_index = glyph_item->item->offset;
+  iter->end_char = 0;
+
+  iter->start_glyph = iter->end_glyph;
+  iter->start_index = iter->end_index;
+  iter->start_char = iter->end_char;
+
+  /* Advance onto the first cluster of the glyph item */
+  return pango_glyph_item_iter_next_cluster (iter);
+}
+
+/**
+ * pango_glyph_item_iter_init_end:
+ * @iter: a #PangoGlyphItemIter
+ * @glyph_item: the glyph item to iterate over
+ * @text: text corresponding to the glyph item
+ *
+ * Initializes a #PangoGlyphItemIter structure to point to the
+ * last cluster in a glyph item.
+ * See #PangoGlyphItemIter for details of cluster orders.
+ *
+ * Return value: %FALSE if there are no clusters in the glyph item
+ *
+ * Since: 1.22
+ **/
+gboolean
+pango_glyph_item_iter_init_end (PangoGlyphItemIter  *iter,
+                               PangoGlyphItem      *glyph_item,
+                               const char          *text)
+{
+  iter->glyph_item = glyph_item;
+  iter->text = text;
+
+  if (LTR (glyph_item))
+    iter->start_glyph = glyph_item->glyphs->num_glyphs;
+  else
+    iter->start_glyph = -1;
+
+  iter->start_index = glyph_item->item->offset + glyph_item->item->length;
+  iter->start_char = glyph_item->item->num_chars;
+
+  iter->end_glyph = iter->start_glyph;
+  iter->end_index = iter->start_index;
+  iter->end_char = iter->start_char;
+
+  /* Advance onto the first cluster of the glyph item */
+  return pango_glyph_item_iter_prev_cluster (iter);
+}
+
+typedef struct
+{
+  PangoGlyphItemIter iter;
+
+  GSList *segment_attrs;
+} ApplyAttrsState;
+
+/* Tack @attrs onto the attributes of glyph_item
+ */
+static void
+append_attrs (PangoGlyphItem *glyph_item,
+             GSList         *attrs)
+{
+  glyph_item->item->analysis.extra_attrs =
+    g_slist_concat (glyph_item->item->analysis.extra_attrs, attrs);
+}
+
+/* Make a deep copy of a #GSList of PangoAttribute
+ */
+static GSList *
+attr_slist_copy (GSList *attrs)
+{
+  GSList *tmp_list;
+  GSList *new_attrs;
+
+  new_attrs = g_slist_copy (attrs);
+
+  for (tmp_list = new_attrs; tmp_list; tmp_list = tmp_list->next)
+    tmp_list->data = pango_attribute_copy (tmp_list->data);
+
+  return new_attrs;
+}
+
+/* Split the glyph item at the start of the current cluster
+ */
+static PangoGlyphItem *
+split_before_cluster_start (ApplyAttrsState *state)
+{
+  PangoGlyphItem *split_item;
+  int split_len = state->iter.start_index - state->iter.glyph_item->item->offset;
+
+  split_item = pango_glyph_item_split (state->iter.glyph_item, state->iter.text, split_len);
+  append_attrs (split_item, state->segment_attrs);
+
+  /* Adjust iteration to account for the split
+   */
+  if (LTR (state->iter.glyph_item))
+    {
+      state->iter.start_glyph -= split_item->glyphs->num_glyphs;
+      state->iter.end_glyph -= split_item->glyphs->num_glyphs;
+    }
+
+  state->iter.start_char -= split_item->item->num_chars;
+  state->iter.end_char -= split_item->item->num_chars;
+
+  return split_item;
+}
+
+/**
+ * pango_glyph_item_apply_attrs:
+ * @glyph_item: a shaped item
+ * @text: text that @list applies to
+ * @list: a #PangoAttrList
+ *
+ * Splits a shaped item (PangoGlyphItem) into multiple items based
+ * on an attribute list. The idea is that if you have attributes
+ * that don't affect shaping, such as color or underline, to avoid
+ * affecting shaping, you filter them out (pango_attr_list_filter()),
+ * apply the shaping process and then reapply them to the result using
+ * this function.
+ *
+ * All attributes that start or end inside a cluster are applied
+ * to that cluster; for instance, if half of a cluster is underlined
+ * and the other-half strikethrough, then the cluster will end
+ * up with both underline and strikethrough attributes. In these
+ * cases, it may happen that item->extra_attrs for some of the
+ * result items can have multiple attributes of the same type.
+ *
+ * This function takes ownership of @glyph_item; it will be reused
+ * as one of the elements in the list.
+ *
+ * Return value: a list of glyph items resulting from splitting
+ *   @glyph_item. Free the elements using pango_glyph_item_free(),
+ *   the list using g_slist_free().
+ *
+ * Since: 1.2
+ **/
+GSList *
+pango_glyph_item_apply_attrs (PangoGlyphItem   *glyph_item,
+                             const char       *text,
+                             PangoAttrList    *list)
+{
+  PangoAttrIterator *iter = pango_attr_list_get_iterator (list);
+  GSList *result = NULL;
+  ApplyAttrsState state;
+  gboolean start_new_segment = FALSE;
+  gboolean have_cluster;
+  int range_start, range_end;
+
+  /* This routine works by iterating through the item cluster by
+   * cluster; we accumulate the attributes that we need to
+   * add to the next output item, and decide when to split
+   * off an output item based on two criteria:
+   *
+   * A) If start_index < attribute_start < end_index
+   *    (attribute starts within cluster) then we need
+   *    to split between the last cluster and this cluster.
+   * B) If start_index < attribute_end <= end_index,
+   *    (attribute ends within cluster) then we need to
+   *    split between this cluster and the next one.
+   */
+
+  /* Advance the attr iterator to the start of the item
+   */
+  do
+    {
+      pango_attr_iterator_range (iter, &range_start, &range_end);
+      if (range_end > glyph_item->item->offset)
+       break;
+    }
+  while (pango_attr_iterator_next (iter));
+
+  state.segment_attrs = pango_attr_iterator_get_attrs (iter);
+
+  /* Short circuit the case when we don't actually need to
+   * split the item
+   */
+  if (range_start <= glyph_item->item->offset &&
+      range_end >= glyph_item->item->offset + glyph_item->item->length)
+    goto out;
+
+  for (have_cluster = pango_glyph_item_iter_init_start (&state.iter, glyph_item, text);
+       have_cluster;
+       have_cluster = pango_glyph_item_iter_next_cluster (&state.iter))
+    {
+      gboolean have_next;
+
+      /* [range_start,range_end] is the first range that intersects
+       * the current cluster.
+       */
+
+      /* Split item into two, if this cluster isn't a continuation
+       * of the last cluster
+       */
+      if (start_new_segment)
+       {
+         result = g_slist_prepend (result,
+                                   split_before_cluster_start (&state));
+         state.segment_attrs = pango_attr_iterator_get_attrs (iter);
+       }
+
+      start_new_segment = FALSE;
+
+      /* Loop over all ranges that intersect this cluster; exiting
+       * leaving [range_start,range_end] being the first range that
+       * intersects the next cluster.
+       */
+      do
+       {
+         if (range_end > state.iter.end_index) /* Range intersects next cluster */
+           break;
+
+         /* Since ranges end in this cluster, the next cluster goes into a
+          * separate segment
+          */
+         start_new_segment = TRUE;
+
+         have_next = pango_attr_iterator_next (iter);
+         pango_attr_iterator_range (iter, &range_start, &range_end);
+
+         if (range_start >= state.iter.end_index) /* New range doesn't intersect this cluster */
+           {
+             /* No gap between ranges, so previous range must of ended
+              * at cluster boundary.
+              */
+             g_assert (range_start == state.iter.end_index && start_new_segment);
+             break;
+           }
+
+         /* If any ranges start *inside* this cluster, then we need
+          * to split the previous cluster into a separate segment
+          */
+         if (range_start > state.iter.start_index &&
+             state.iter.start_index != glyph_item->item->offset)
+           {
+             GSList *new_attrs = attr_slist_copy (state.segment_attrs);
+             result = g_slist_prepend (result,
+                                       split_before_cluster_start (&state));
+             state.segment_attrs = new_attrs;
+           }
+
+         state.segment_attrs = g_slist_concat (state.segment_attrs,
+                                               pango_attr_iterator_get_attrs (iter));
+       }
+      while (have_next);
+    }
+
+ out:
+  /* What's left in glyph_item is the remaining portion
+   */
+  append_attrs (glyph_item, state.segment_attrs);
+  result = g_slist_prepend (result, glyph_item);
+
+  if (LTR (glyph_item))
+    result = g_slist_reverse (result);
+
+  pango_attr_iterator_destroy (iter);
+
+  return result;
+}
+
+/**
+ * pango_glyph_item_letter_space:
+ * @glyph_item: a #PangoGlyphItem
+ * @text: text that @glyph_item corresponds to
+ *   (glyph_item->item->offset is an offset from the
+ *    start of @text)
+ * @log_attrs: logical attributes for the item (the
+ *   first logical attribute refers to the position
+ *   before the first character in the item)
+ * @letter_spacing: amount of letter spacing to add
+ *   in Pango units. May be negative, though too large
+ *   negative values will give ugly results.
+ *
+ * Adds spacing between the graphemes of @glyph_item to
+ * give the effect of typographic letter spacing.
+ *
+ * Since: 1.6
+ **/
+void
+pango_glyph_item_letter_space (PangoGlyphItem *glyph_item,
+                              const char     *text,
+                              PangoLogAttr   *log_attrs,
+                              int             letter_spacing)
+{
+  PangoGlyphItemIter iter;
+  PangoGlyphInfo *glyphs = glyph_item->glyphs->glyphs;
+  gboolean have_cluster;
+  int space_left, space_right;
+
+  space_left = letter_spacing / 2;
+
+  /* hinting */
+  if ((letter_spacing & (PANGO_SCALE - 1)) == 0)
+    {
+      space_left = PANGO_UNITS_ROUND (space_left);
+    }
+
+  space_right = letter_spacing - space_left;
+
+  for (have_cluster = pango_glyph_item_iter_init_start (&iter, glyph_item, text);
+       have_cluster;
+       have_cluster = pango_glyph_item_iter_next_cluster (&iter))
+    {
+      if (!log_attrs[iter.start_char].is_cursor_position)
+        continue;
+
+      if (iter.start_glyph < iter.end_glyph) /* LTR */
+       {
+         if (iter.start_char > 0)
+           {
+             glyphs[iter.start_glyph].geometry.width    += space_left ;
+             glyphs[iter.start_glyph].geometry.x_offset += space_left ;
+           }
+         if (iter.end_char < glyph_item->item->num_chars)
+           {
+             glyphs[iter.end_glyph-1].geometry.width    += space_right;
+           }
+       }
+      else                                      /* RTL */
+       {
+         if (iter.start_char > 0)
+           {
+             glyphs[iter.start_glyph].geometry.width    += space_right;
+           }
+         if (iter.end_char < glyph_item->item->num_chars)
+           {
+             glyphs[iter.end_glyph+1].geometry.x_offset += space_left ;
+             glyphs[iter.end_glyph+1].geometry.width    += space_left ;
+           }
+       }
+    }
+}
+
+/**
+ * pango_glyph_item_get_logical_widths:
+ * @glyph_item: a #PangoGlyphItem
+ * @text: text that @glyph_item corresponds to
+ *   (glyph_item->item->offset is an offset from the
+ *    start of @text)
+ * @logical_widths: an array whose length is the number of characters in
+ *                  glyph_item (equal to glyph_item->item->num_chars)
+ *                  to be filled in with the resulting character widths.
+ *
+ * Given a #PangoGlyphItem and the corresponding
+ * text, determine the screen width corresponding to each character. When
+ * multiple characters compose a single cluster, the width of the entire
+ * cluster is divided equally among the characters.
+ *
+ * See also pango_glyph_string_get_logical_widths().
+ *
+ * Since: 1.26
+ **/
+void
+pango_glyph_item_get_logical_widths (PangoGlyphItem *glyph_item,
+                                    const char     *text,
+                                    int            *logical_widths)
+{
+  PangoGlyphItemIter iter;
+  gboolean has_cluster;
+  int dir;
+
+  dir = glyph_item->item->analysis.level % 2 == 0 ? +1 : -1;
+  for (has_cluster = pango_glyph_item_iter_init_start (&iter, glyph_item, text);
+       has_cluster;
+       has_cluster = pango_glyph_item_iter_next_cluster (&iter))
+    {
+      int glyph_index, char_index, num_chars, cluster_width = 0, char_width;
+
+      for (glyph_index  = iter.start_glyph;
+          glyph_index != iter.end_glyph;
+          glyph_index += dir)
+        {
+         cluster_width += glyph_item->glyphs->glyphs[glyph_index].geometry.width;
+       }
+
+      num_chars = iter.end_char - iter.start_char;
+      if (num_chars) /* pedantic */
+        {
+         char_width = cluster_width / num_chars;
+
+         for (char_index = iter.start_char;
+              char_index < iter.end_char;
+              char_index++)
+           {
+             logical_widths[char_index] = char_width;
+           }
+
+         /* add any residues to the first char */
+         logical_widths[iter.start_char] += cluster_width - (char_width * num_chars);
+       }
+    }
+}
diff --git a/pango/pango-glyph-item.h b/pango/pango-glyph-item.h
new file mode 100755 (executable)
index 0000000..71c4ab3
--- /dev/null
@@ -0,0 +1,94 @@
+/* Pango
+ * pango-glyph-item.h: Pair of PangoItem and a glyph string
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_GLYPH_ITEM_H__
+#define __PANGO_GLYPH_ITEM_H__
+
+#include <pango/pango-attributes.h>
+#include <pango/pango-break.h>
+#include <pango/pango-item.h>
+#include <pango/pango-glyph.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoGlyphItem PangoGlyphItem;
+
+struct _PangoGlyphItem
+{
+  PangoItem        *item;
+  PangoGlyphString *glyphs;
+};
+
+#define PANGO_TYPE_GLYPH_ITEM (pango_glyph_item_get_type ())
+
+GType pango_glyph_item_get_type (void) G_GNUC_CONST;
+
+PangoGlyphItem *pango_glyph_item_split        (PangoGlyphItem *orig,
+                                              const char     *text,
+                                              int             split_index);
+PangoGlyphItem *pango_glyph_item_copy         (PangoGlyphItem *orig);
+void            pango_glyph_item_free         (PangoGlyphItem *glyph_item);
+GSList *        pango_glyph_item_apply_attrs  (PangoGlyphItem *glyph_item,
+                                              const char     *text,
+                                              PangoAttrList  *list);
+void            pango_glyph_item_letter_space (PangoGlyphItem *glyph_item,
+                                              const char     *text,
+                                              PangoLogAttr   *log_attrs,
+                                              int             letter_spacing);
+void     pango_glyph_item_get_logical_widths (PangoGlyphItem *glyph_item,
+                                              const char     *text,
+                                              int            *logical_widths);
+
+
+typedef struct _PangoGlyphItemIter PangoGlyphItemIter;
+
+struct _PangoGlyphItemIter
+{
+  PangoGlyphItem *glyph_item;
+  const gchar *text;
+
+  int start_glyph;
+  int start_index;
+  int start_char;
+
+  int end_glyph;
+  int end_index;
+  int end_char;
+};
+
+#define PANGO_TYPE_GLYPH_ITEM_ITER (pango_glyph_item_iter_get_type ())
+
+GType               pango_glyph_item_iter_get_type (void) G_GNUC_CONST;
+PangoGlyphItemIter *pango_glyph_item_iter_copy (PangoGlyphItemIter *orig);
+void                pango_glyph_item_iter_free (PangoGlyphItemIter *iter);
+
+gboolean pango_glyph_item_iter_init_start   (PangoGlyphItemIter *iter,
+                                            PangoGlyphItem     *glyph_item,
+                                            const char         *text);
+gboolean pango_glyph_item_iter_init_end     (PangoGlyphItemIter *iter,
+                                            PangoGlyphItem     *glyph_item,
+                                            const char         *text);
+gboolean pango_glyph_item_iter_next_cluster (PangoGlyphItemIter *iter);
+gboolean pango_glyph_item_iter_prev_cluster (PangoGlyphItemIter *iter);
+
+G_END_DECLS
+
+#endif /* __PANGO_GLYPH_ITEM_H__ */
diff --git a/pango/pango-glyph.h b/pango/pango-glyph.h
new file mode 100755 (executable)
index 0000000..4af63e7
--- /dev/null
@@ -0,0 +1,135 @@
+/* Pango
+ * pango-glyph.h: Glyph storage
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_GLYPH_H__
+#define __PANGO_GLYPH_H__
+
+#include <pango/pango-types.h>
+#include <pango/pango-item.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoGlyphGeometry PangoGlyphGeometry;
+typedef struct _PangoGlyphVisAttr PangoGlyphVisAttr;
+typedef struct _PangoGlyphInfo PangoGlyphInfo;
+typedef struct _PangoGlyphString PangoGlyphString;
+
+/* 1024ths of a device unit */
+typedef gint32 PangoGlyphUnit;
+
+/* Positioning information about a glyph
+ */
+struct _PangoGlyphGeometry
+{
+  PangoGlyphUnit width;
+  PangoGlyphUnit x_offset;
+  PangoGlyphUnit y_offset;
+};
+
+/* Visual attributes of a glyph
+ */
+struct _PangoGlyphVisAttr
+{
+  guint is_cluster_start : 1;
+};
+
+/* A single glyph
+ */
+struct _PangoGlyphInfo
+{
+  PangoGlyph    glyph;
+  PangoGlyphGeometry geometry;
+  PangoGlyphVisAttr  attr;
+};
+
+/* A string of glyphs with positional information and visual attributes -
+ * ready for drawing
+ */
+struct _PangoGlyphString {
+  gint num_glyphs;
+
+  PangoGlyphInfo *glyphs;
+
+  /* This is a memory inefficient way of representing the information
+   * here - each value gives the byte index within the text
+   * corresponding to the glyph string of the start of the cluster to
+   * which the glyph belongs.
+   */
+  gint *log_clusters;
+
+  /*< private >*/
+  gint space;
+};
+
+#define PANGO_TYPE_GLYPH_STRING (pango_glyph_string_get_type ())
+
+PangoGlyphString *pango_glyph_string_new      (void);
+void              pango_glyph_string_set_size (PangoGlyphString *string,
+                                              gint              new_len);
+GType             pango_glyph_string_get_type (void) G_GNUC_CONST;
+PangoGlyphString *pango_glyph_string_copy     (PangoGlyphString *string);
+void              pango_glyph_string_free     (PangoGlyphString *string);
+void              pango_glyph_string_extents  (PangoGlyphString *glyphs,
+                                              PangoFont        *font,
+                                              PangoRectangle   *ink_rect,
+                                              PangoRectangle   *logical_rect);
+int               pango_glyph_string_get_width(PangoGlyphString *glyphs);
+
+void              pango_glyph_string_extents_range  (PangoGlyphString *glyphs,
+                                                    int               start,
+                                                    int               end,
+                                                    PangoFont        *font,
+                                                    PangoRectangle   *ink_rect,
+                                                    PangoRectangle   *logical_rect);
+
+void pango_glyph_string_get_logical_widths (PangoGlyphString *glyphs,
+                                           const char       *text,
+                                           int               length,
+                                           int               embedding_level,
+                                           int              *logical_widths);
+
+void pango_glyph_string_index_to_x (PangoGlyphString *glyphs,
+                                   char             *text,
+                                   int               length,
+                                   PangoAnalysis    *analysis,
+                                   int               index_,
+                                   gboolean          trailing,
+                                   int              *x_pos);
+void pango_glyph_string_x_to_index (PangoGlyphString *glyphs,
+                                   char             *text,
+                                   int               length,
+                                   PangoAnalysis    *analysis,
+                                   int               x_pos,
+                                   int              *index_,
+                                   int              *trailing);
+
+/* Turn a string of characters into a string of glyphs
+ */
+void pango_shape (const gchar      *text,
+                 gint              length,
+                 const PangoAnalysis *analysis,
+                 PangoGlyphString *glyphs);
+
+GList *pango_reorder_items (GList *logical_items);
+
+G_END_DECLS
+
+#endif /* __PANGO_GLYPH_H__ */
diff --git a/pango/pango-gravity.c b/pango/pango-gravity.c
new file mode 100755 (executable)
index 0000000..297199a
--- /dev/null
@@ -0,0 +1,346 @@
+/* Pango
+ * pango-gravity.c: Gravity routines
+ *
+ * Copyright (C) 2006, 2007 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-gravity.h"
+
+#include <math.h>
+
+/**
+ * pango_gravity_to_rotation:
+ * @gravity: gravity to query
+ *
+ * Converts a #PangoGravity value to its natural rotation in radians.
+ * @gravity should not be %PANGO_GRAVITY_AUTO.
+ *
+ * Note that pango_matrix_rotate() takes angle in degrees, not radians.
+ * So, to call pango_matrix_rotate() with the output of this function
+ * you should multiply it by (180. / G_PI).
+ *
+ * Return value: the rotation value corresponding to @gravity.
+ *
+ * Since: 1.16
+ */
+double
+pango_gravity_to_rotation (PangoGravity gravity)
+{
+  double rotation;
+
+  g_return_val_if_fail (gravity != PANGO_GRAVITY_AUTO, 0);
+
+  switch (gravity)
+    {
+      default:
+      case PANGO_GRAVITY_AUTO: /* shut gcc up */
+      case PANGO_GRAVITY_SOUTH:        rotation =  0;          break;
+      case PANGO_GRAVITY_NORTH:        rotation =  G_PI;       break;
+      case PANGO_GRAVITY_EAST: rotation = -G_PI_2;     break;
+      case PANGO_GRAVITY_WEST: rotation = +G_PI_2;     break;
+    }
+
+  return rotation;
+}
+
+/**
+ * pango_gravity_get_for_matrix:
+ * @matrix: a #PangoMatrix
+ *
+ * Finds the gravity that best matches the rotation component
+ * in a #PangoMatrix.
+ *
+ * Return value: the gravity of @matrix, which will never be
+ * %PANGO_GRAVITY_AUTO, or %PANGO_GRAVITY_SOUTH if @matrix is %NULL
+ *
+ * Since: 1.16
+ */
+PangoGravity
+pango_gravity_get_for_matrix (const PangoMatrix *matrix)
+{
+  PangoGravity gravity;
+  double x;
+  double y;
+
+  if (!matrix)
+    return PANGO_GRAVITY_SOUTH;
+
+  x = matrix->xy;
+  y = matrix->yy;
+
+  if (fabs (x) > fabs (y))
+    gravity = x > 0 ? PANGO_GRAVITY_WEST : PANGO_GRAVITY_EAST;
+  else
+    gravity = y < 0 ? PANGO_GRAVITY_NORTH : PANGO_GRAVITY_SOUTH;
+
+  return gravity;
+}
+
+
+
+typedef enum
+{
+  PANGO_VERTICAL_DIRECTION_NONE,
+  PANGO_VERTICAL_DIRECTION_TTB,
+  PANGO_VERTICAL_DIRECTION_BTT
+} PangoVerticalDirection;
+
+typedef struct {
+  /* PangoDirection */
+  guint8 horiz_dir;            /* Orientation in horizontal context */
+
+  /* PangoVerticalDirection */
+  guint8 vert_dir;             /* Orientation in vertical context */
+
+  /* PangoGravity */
+  guint8 preferred_gravity;    /* Preferred context gravity */
+
+  /* gboolean */
+  guint8 wide;                 /* Whether script is mostly wide.
+                                * Wide characters are upright (ie.
+                                * not rotated) in foreign context */
+} PangoScriptProperties;
+
+#define NONE PANGO_VERTICAL_DIRECTION_NONE
+#define TTB  PANGO_VERTICAL_DIRECTION_TTB
+#define BTT  PANGO_VERTICAL_DIRECTION_BTT
+
+#define LTR  PANGO_DIRECTION_LTR
+#define RTL  PANGO_DIRECTION_RTL
+#define WEAK PANGO_DIRECTION_WEAK_LTR
+
+#define S PANGO_GRAVITY_SOUTH
+#define E PANGO_GRAVITY_EAST
+#define N PANGO_GRAVITY_NORTH
+#define W PANGO_GRAVITY_WEST
+
+const PangoScriptProperties script_properties[] =
+  {                            /* ISO 15924 code */
+      {LTR, NONE, S, FALSE},   /* Zyyy */
+      {LTR, NONE, S, FALSE},   /* Qaai */
+      {RTL, NONE, S, FALSE},   /* Arab */
+      {LTR, NONE, S, FALSE},   /* Armn */
+      {LTR, NONE, S, FALSE},   /* Beng */
+      {LTR, TTB,  E, TRUE },   /* Bopo */
+      {LTR, NONE, S, FALSE},   /* Cher */
+      {LTR, NONE, S, FALSE},   /* Qaac */
+      {LTR, NONE, S, FALSE},   /* Cyrl (Cyrs) */
+      {LTR, NONE, S, FALSE},   /* Dsrt */
+      {LTR, NONE, S, FALSE},   /* Deva */
+      {LTR, NONE, S, FALSE},   /* Ethi */
+      {LTR, NONE, S, FALSE},   /* Geor (Geon, Geoa) */
+      {LTR, NONE, S, FALSE},   /* Goth */
+      {LTR, NONE, S, FALSE},   /* Grek */
+      {LTR, NONE, S, FALSE},   /* Gujr */
+      {LTR, NONE, S, FALSE},   /* Guru */
+      {LTR, TTB,  E, TRUE },   /* Hani */
+      {LTR, TTB,  E, TRUE },   /* Hang */
+      {RTL, NONE, S, FALSE},   /* Hebr */
+      {LTR, TTB,  E, TRUE },   /* Hira */
+      {LTR, NONE, S, FALSE},   /* Knda */
+      {LTR, TTB,  E, TRUE },   /* Kana */
+      {LTR, NONE, S, FALSE},   /* Khmr */
+      {LTR, NONE, S, FALSE},   /* Laoo */
+      {LTR, NONE, S, FALSE},   /* Latn (Latf, Latg) */
+      {LTR, NONE, S, FALSE},   /* Mlym */
+      {WEAK,TTB,  W, FALSE},   /* Mong */
+      {LTR, NONE, S, FALSE},   /* Mymr */
+      {LTR, BTT,  W, FALSE},   /* Ogam */
+      {LTR, NONE, S, FALSE},   /* Ital */
+      {LTR, NONE, S, FALSE},   /* Orya */
+      {LTR, NONE, S, FALSE},   /* Runr */
+      {LTR, NONE, S, FALSE},   /* Sinh */
+      {RTL, NONE, S, FALSE},   /* Syrc (Syrj, Syrn, Syre) */
+      {LTR, NONE, S, FALSE},   /* Taml */
+      {LTR, NONE, S, FALSE},   /* Telu */
+      {RTL, NONE, S, FALSE},   /* Thaa */
+      {LTR, NONE, S, FALSE},   /* Thai */
+      {LTR, NONE, S, FALSE},   /* Tibt */
+      {LTR, NONE, S, FALSE},   /* Cans */
+      {LTR, TTB,  S, TRUE },   /* Yiii */
+      {LTR, NONE, S, FALSE},   /* Tglg */
+      {LTR, NONE, S, FALSE},   /* Hano */
+      {LTR, NONE, S, FALSE},   /* Buhd */
+      {LTR, NONE, S, FALSE},   /* Tagb */
+
+      /* Unicode-4.0 additions */
+      {LTR, NONE, S, FALSE},   /* Brai */
+      {LTR, NONE, S, FALSE},   /* Cprt */
+      {LTR, NONE, S, FALSE},   /* Limb */
+      {LTR, NONE, S, FALSE},   /* Osma */
+      {LTR, NONE, S, FALSE},   /* Shaw */
+      {LTR, NONE, S, FALSE},   /* Linb */
+      {LTR, NONE, S, FALSE},   /* Tale */
+      {LTR, NONE, S, FALSE},   /* Ugar */
+
+      /* Unicode-4.1 additions */
+      {LTR, NONE, S, FALSE},   /* Talu */
+      {LTR, NONE, S, FALSE},   /* Bugi */
+      {LTR, NONE, S, FALSE},   /* Glag */
+      {LTR, NONE, S, FALSE},   /* Tfng */
+      {LTR, NONE, S, FALSE},   /* Sylo */
+      {LTR, NONE, S, FALSE},   /* Xpeo */
+      {LTR, NONE, S, FALSE},   /* Khar */
+
+      /* Unicode-5.0 additions */
+      {LTR, NONE, S, FALSE},   /* Zzzz */
+      {LTR, NONE, S, FALSE},   /* Bali */
+      {LTR, NONE, S, FALSE},   /* Xsux */
+      {RTL, NONE, S, FALSE},   /* Phnx */
+      {LTR, NONE, S, FALSE},   /* Phag */
+      {RTL, NONE, S, FALSE}    /* Nkoo */
+};
+
+#undef NONE
+#undef TTB
+#undef BTT
+
+#undef LTR
+#undef RTL
+#undef WEAK
+
+#undef S
+#undef E
+#undef N
+#undef W
+
+static PangoScriptProperties
+get_script_properties (PangoScript script)
+{
+  g_return_val_if_fail (script >= 0, script_properties[0]);
+
+  if ((guint)script >= G_N_ELEMENTS (script_properties))
+    return script_properties[0];
+
+  return script_properties[script];
+}
+
+/**
+ * pango_gravity_get_for_script:
+ * @script: #PangoScript to query
+ * @base_gravity: base gravity of the paragraph
+ * @hint: orientation hint
+ *
+ * Based on the script, base gravity, and hint, returns actual gravity
+ * to use in laying out a single #PangoItem.
+ *
+ * If @base_gravity is %PANGO_GRAVITY_AUTO, it is first replaced with the
+ * preferred gravity of @script.  To get the preferred gravity of a script,
+ * pass %PANGO_GRAVITY_AUTO and %PANGO_GRAVITY_HINT_STRONG in.
+ *
+ * Return value: resolved gravity suitable to use for a run of text
+ * with @script.
+ *
+ * Since: 1.16
+ */
+PangoGravity
+pango_gravity_get_for_script (PangoScript      script,
+                             PangoGravity     base_gravity,
+                             PangoGravityHint hint)
+{
+  PangoScriptProperties props = get_script_properties (script);
+  gboolean vertical;
+
+
+  if (G_UNLIKELY (base_gravity == PANGO_GRAVITY_AUTO))
+    base_gravity = props.preferred_gravity;
+
+  vertical = PANGO_GRAVITY_IS_VERTICAL (base_gravity);
+
+  return pango_gravity_get_for_script_and_width (script, props.wide,
+                                                base_gravity, hint);
+}
+
+/**
+ * pango_gravity_get_for_script_and_width:
+ * @script: #PangoScript to query
+ * @wide: %TRUE for wide characters as returned by g_unichar_iswide()
+ * @base_gravity: base gravity of the paragraph
+ * @hint: orientation hint
+ *
+ * Based on the script, East Asian width, base gravity, and hint,
+ * returns actual gravity to use in laying out a single character
+ * or #PangoItem.
+ *
+ * This function is similar to pango_gravity_get_for_script() except
+ * that this function makes a distinction between narrow/half-width and
+ * wide/full-width characters also.  Wide/full-width characters always
+ * stand <emph>upright</emph>, that is, they always take the base gravity,
+ * whereas narrow/full-width characters are always rotated in vertical
+ * context.
+ *
+ * If @base_gravity is %PANGO_GRAVITY_AUTO, it is first replaced with the
+ * preferred gravity of @script.
+ *
+ * Return value: resolved gravity suitable to use for a run of text
+ * with @script and @wide.
+ *
+ * Since: 1.26
+ */
+PangoGravity
+pango_gravity_get_for_script_and_width (PangoScript        script,
+                                       gboolean           wide,
+                                       PangoGravity       base_gravity,
+                                       PangoGravityHint   hint)
+{
+  PangoScriptProperties props = get_script_properties (script);
+  gboolean vertical;
+
+
+  if (G_UNLIKELY (base_gravity == PANGO_GRAVITY_AUTO))
+    base_gravity = props.preferred_gravity;
+
+  vertical = PANGO_GRAVITY_IS_VERTICAL (base_gravity);
+
+  /* Everything is designed such that a system with no vertical support
+   * renders everything correctly horizontally.  So, if not in a vertical
+   * gravity, base and resolved gravities are always the same.
+   *
+   * Wide characters are always upright.
+   */
+  if (G_LIKELY (!vertical || wide))
+    return base_gravity;
+
+  /* If here, we have a narrow character in a vertical gravity setting.
+   * Resolve depending on the hint.
+   */
+  switch (hint)
+    {
+    default:
+    case PANGO_GRAVITY_HINT_NATURAL:
+      if (props.vert_dir == PANGO_VERTICAL_DIRECTION_NONE)
+       return PANGO_GRAVITY_SOUTH;
+      if ((base_gravity   == PANGO_GRAVITY_EAST) ^
+         (props.vert_dir == PANGO_VERTICAL_DIRECTION_BTT))
+       return PANGO_GRAVITY_SOUTH;
+      else
+       return PANGO_GRAVITY_NORTH;
+
+    case PANGO_GRAVITY_HINT_STRONG:
+      return base_gravity;
+
+    case PANGO_GRAVITY_HINT_LINE:
+      if ((base_gravity    == PANGO_GRAVITY_EAST) ^
+         (props.horiz_dir == PANGO_DIRECTION_RTL))
+       return PANGO_GRAVITY_SOUTH;
+      else
+       return PANGO_GRAVITY_NORTH;
+    }
+}
diff --git a/pango/pango-gravity.h b/pango/pango-gravity.h
new file mode 100755 (executable)
index 0000000..d2fa964
--- /dev/null
@@ -0,0 +1,114 @@
+/* Pango
+ * pango-gravity.h: Gravity routines
+ *
+ * Copyright (C) 2006, 2007 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_GRAVITY_H__
+#define __PANGO_GRAVITY_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PangoGravity:
+ * @PANGO_GRAVITY_SOUTH: Glyphs stand upright (default)
+ * @PANGO_GRAVITY_EAST: Glyphs are rotated 90 degrees clockwise
+ * @PANGO_GRAVITY_NORTH: Glyphs are upside-down
+ * @PANGO_GRAVITY_WEST: Glyphs are rotated 90 degrees counter-clockwise
+ * @PANGO_GRAVITY_AUTO: Gravity is resolved from the context matrix
+ *
+ * The #PangoGravity type represents the orientation of glyphs in a segment
+ * of text.  This is useful when rendering vertical text layouts.  In
+ * those situations, the layout is rotated using a non-identity PangoMatrix,
+ * and then glyph orientation is controlled using #PangoGravity.
+ * Not every value in this enumeration makes sense for every usage of
+ * #PangoGravity; for example, %PANGO_GRAVITY_AUTO only can be passed to
+ * pango_context_set_base_gravity() and can only be returned by
+ * pango_context_get_base_gravity().
+ *
+ * See also: #PangoGravityHint
+ *
+ * Since: 1.16
+ **/
+typedef enum {
+  PANGO_GRAVITY_SOUTH,
+  PANGO_GRAVITY_EAST,
+  PANGO_GRAVITY_NORTH,
+  PANGO_GRAVITY_WEST,
+  PANGO_GRAVITY_AUTO
+} PangoGravity;
+
+/**
+ * PangoGravityHint:
+ * @PANGO_GRAVITY_HINT_NATURAL: scripts will take their natural gravity based
+ * on the base gravity and the script.  This is the default.
+ * @PANGO_GRAVITY_HINT_STRONG: always use the base gravity set, regardless of
+ * the script.
+ * @PANGO_GRAVITY_HINT_LINE: for scripts not in their natural direction (eg.
+ * Latin in East gravity), choose per-script gravity such that every script
+ * respects the line progression.  This means, Latin and Arabic will take
+ * opposite gravities and both flow top-to-bottom for example.
+ *
+ * The #PangoGravityHint defines how horizontal scripts should behave in a
+ * vertical context.  That is, English excerpt in a vertical paragraph for
+ * example.
+ *
+ * See #PangoGravity.
+ *
+ * Since: 1.16
+ **/
+typedef enum {
+  PANGO_GRAVITY_HINT_NATURAL,
+  PANGO_GRAVITY_HINT_STRONG,
+  PANGO_GRAVITY_HINT_LINE
+} PangoGravityHint;
+
+/**
+ * PANGO_GRAVITY_IS_VERTICAL:
+ * @gravity: the #PangoGravity to check
+ *
+ * Whether a #PangoGravity represents vertical writing directions.
+ *
+ * Returns: %TRUE if @gravity is %PANGO_GRAVITY_EAST or %PANGO_GRAVITY_WEST,
+ *          %FALSE otherwise.
+ *
+ * Since: 1.16
+ **/
+#define PANGO_GRAVITY_IS_VERTICAL(gravity) \
+       ((gravity) == PANGO_GRAVITY_EAST || (gravity) == PANGO_GRAVITY_WEST)
+
+#include <pango/pango-matrix.h>
+#include <pango/pango-script.h>
+
+double       pango_gravity_to_rotation    (PangoGravity       gravity) G_GNUC_CONST;
+PangoGravity pango_gravity_get_for_matrix (const PangoMatrix *matrix) G_GNUC_PURE;
+PangoGravity pango_gravity_get_for_script (PangoScript        script,
+                                          PangoGravity       base_gravity,
+                                          PangoGravityHint   hint) G_GNUC_CONST;
+PangoGravity pango_gravity_get_for_script_and_width
+                                         (PangoScript        script,
+                                          gboolean           wide,
+                                          PangoGravity       base_gravity,
+                                          PangoGravityHint   hint) G_GNUC_CONST;
+
+
+G_END_DECLS
+
+#endif /* __PANGO_GRAVITY_H__ */
diff --git a/pango/pango-impl-utils.h b/pango/pango-impl-utils.h
new file mode 100755 (executable)
index 0000000..6d6c8ff
--- /dev/null
@@ -0,0 +1,180 @@
+/* Pango
+ * pango-impl-utils.h: Macros for get_type() functions
+ * Inspired by Jody Goldberg's gsf-impl-utils.h
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_IMPL_UTILS_H__
+#define __PANGO_IMPL_UTILS_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <pango/pango.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_DEFINE_TYPE_FULL(name, prefix,                              \
+                              class_init, instance_init,                  \
+                              parent_type, abstract)                      \
+GType                                                                     \
+prefix ## _get_type (void)                                                \
+{                                                                         \
+  static GType object_type = 0;                                                   \
+                                                                          \
+  if (!object_type)                                                       \
+    {                                                                     \
+      static const GTypeInfo object_info =                                \
+       {                                                                  \
+         sizeof (name ## Class),                                          \
+         (GBaseInitFunc) NULL,                                            \
+         (GBaseFinalizeFunc) NULL,                                        \
+         (GClassInitFunc) class_init,                                     \
+         (GClassFinalizeFunc) NULL,                                       \
+         NULL,          /* class_data */                                  \
+         sizeof (name),                                                   \
+         0,             /* n_prelocs */                                   \
+         (GInstanceInitFunc) instance_init,                               \
+         NULL           /* value_table */                                 \
+       };                                                                 \
+                                                                          \
+      object_type = g_type_register_static (parent_type,                  \
+                                           g_intern_static_string (# name), \
+                                           &object_info, abstract);       \
+    }                                                                     \
+                                                                          \
+  return object_type;                                                     \
+}
+
+#define PANGO_DEFINE_TYPE(name, prefix,                        \
+                         class_init, instance_init,    \
+                         parent_type)                  \
+ PANGO_DEFINE_TYPE_FULL (name, prefix,                 \
+                        class_init, instance_init,     \
+                        parent_type, 0)
+
+#define PANGO_DEFINE_TYPE_ABSTRACT(name, prefix,               \
+                         class_init, instance_init,            \
+                         parent_type)                          \
+ PANGO_DEFINE_TYPE_FULL (name, prefix,                         \
+                        class_init, instance_init,             \
+                        parent_type, G_TYPE_FLAG_ABSTRACT)
+
+
+/* String interning for static strings */
+#define I_(string) g_intern_static_string (string)
+
+
+/* Some functions for handling PANGO_ATTR_SHAPE */
+void _pango_shape_shape (const char       *text,
+                        gint              n_chars,
+                        PangoRectangle   *shape_ink,
+                        PangoRectangle   *shape_logical,
+                        PangoGlyphString *glyphs);
+
+void _pango_shape_get_extents (gint              n_chars,
+                              PangoRectangle   *shape_ink,
+                              PangoRectangle   *shape_logical,
+                              PangoRectangle   *ink_rect,
+                              PangoRectangle   *logical_rect);
+
+
+/* We define these functions static here because we don't want to add public API
+ * for them (if anything, it belongs to glib, but glib found it trivial enough
+ * not to add API for).  At some point metrics calculations will be
+ * centralized and this mess can be minimized.  Or so I hope.
+ */
+
+static inline G_GNUC_UNUSED int
+pango_unichar_width (gunichar c)
+{
+  return G_UNLIKELY (g_unichar_iszerowidth (c)) ? 0 :
+          G_UNLIKELY (g_unichar_iswide (c)) ? 2 : 1;
+}
+
+static G_GNUC_UNUSED glong
+pango_utf8_strwidth (const gchar *p)
+{
+  glong len = 0;
+  g_return_val_if_fail (p != NULL, 0);
+
+  while (*p)
+    {
+      len += pango_unichar_width (g_utf8_get_char (p));
+      p = g_utf8_next_char (p);
+    }
+
+  return len;
+}
+
+/* Glib's g_utf8_strlen() is broken and stops at embedded NUL's.
+ * Wrap it here. */
+static G_GNUC_UNUSED glong
+pango_utf8_strlen (const gchar *p, gssize max)
+{
+  glong len = 0;
+  const gchar *start = p;
+  g_return_val_if_fail (p != NULL || max == 0, 0);
+
+  if (max <= 0)
+    return g_utf8_strlen (p, max);
+
+  p = g_utf8_next_char (p);
+  while (p - start < max)
+    {
+      ++len;
+      p = g_utf8_next_char (p);
+    }
+
+  /* only do the last len increment if we got a complete
+   * char (don't count partial chars)
+   */
+  if (p - start <= max)
+    ++len;
+
+  return len;
+}
+
+
+/* To be made public at some point */
+
+static G_GNUC_UNUSED void
+pango_glyph_string_reverse_range (PangoGlyphString *glyphs,
+                                 int start, int end)
+{
+  int i, j;
+
+  for (i = start, j = end - 1; i < j; i++, j--)
+    {
+      PangoGlyphInfo glyph_info;
+      gint log_cluster;
+
+      glyph_info = glyphs->glyphs[i];
+      glyphs->glyphs[i] = glyphs->glyphs[j];
+      glyphs->glyphs[j] = glyph_info;
+
+      log_cluster = glyphs->log_clusters[i];
+      glyphs->log_clusters[i] = glyphs->log_clusters[j];
+      glyphs->log_clusters[j] = log_cluster;
+    }
+}
+
+
+G_END_DECLS
+
+#endif /* __PANGO_IMPL_UTILS_H__ */
diff --git a/pango/pango-item.c b/pango/pango-item.c
new file mode 100755 (executable)
index 0000000..9d8edd0
--- /dev/null
@@ -0,0 +1,163 @@
+/* Pango
+ * pango-item.c: Single run handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pango-attributes.h"
+#include "pango-item.h"
+#include "pango-impl-utils.h"
+
+/**
+ * pango_item_new:
+ *
+ * Creates a new #PangoItem structure initialized to default values.
+ *
+ * Return value: the newly allocated #PangoItem, which should
+ *               be freed with pango_item_free().
+ **/
+PangoItem *
+pango_item_new (void)
+{
+  PangoItem *result = g_slice_new0 (PangoItem);
+
+  return result;
+}
+
+/**
+ * pango_item_copy:
+ * @item: a #PangoItem, may be %NULL
+ *
+ * Copy an existing #PangoItem structure.
+ *
+ * Return value: the newly allocated #PangoItem, which should
+ *               be freed with pango_item_free(), or %NULL if
+ *               @item was NULL.
+ **/
+PangoItem *
+pango_item_copy (PangoItem *item)
+{
+  GSList *extra_attrs, *tmp_list;
+  PangoItem *result;
+
+  if (item == NULL)
+    return NULL;
+  
+  result = g_slice_new (PangoItem);
+
+  result->offset = item->offset;
+  result->length = item->length;
+  result->num_chars = item->num_chars;
+
+  result->analysis = item->analysis;
+  if (result->analysis.font)
+    g_object_ref (result->analysis.font);
+
+  extra_attrs = NULL;
+  tmp_list = item->analysis.extra_attrs;
+  while (tmp_list)
+    {
+      extra_attrs = g_slist_prepend (extra_attrs, pango_attribute_copy (tmp_list->data));
+      tmp_list = tmp_list->next;
+    }
+
+  result->analysis.extra_attrs = g_slist_reverse (extra_attrs);
+
+  return result;
+}
+
+/**
+ * pango_item_free:
+ * @item: a #PangoItem, may be %NULL
+ *
+ * Free a #PangoItem and all associated memory.
+ **/
+void
+pango_item_free (PangoItem *item)
+{
+  if (item == NULL)
+    return;
+
+  if (item->analysis.extra_attrs)
+    {
+      g_slist_foreach (item->analysis.extra_attrs, (GFunc)pango_attribute_destroy, NULL);
+      g_slist_free (item->analysis.extra_attrs);
+    }
+
+  if (item->analysis.font)
+    g_object_unref (item->analysis.font);
+
+  g_slice_free (PangoItem, item);
+}
+
+GType
+pango_item_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoItem"),
+                                            (GBoxedCopyFunc) pango_item_copy,
+                                            (GBoxedFreeFunc) pango_item_free);
+  return our_type;
+}
+
+/**
+ * pango_item_split:
+ * @orig: a #PangoItem
+ * @split_index: byte index of position to split item, relative to the start of the item
+ * @split_offset: number of chars between start of @orig and @split_index
+ *
+ * Modifies @orig to cover only the text after @split_index, and
+ * returns a new item that covers the text before @split_index that
+ * used to be in @orig. You can think of @split_index as the length of
+ * the returned item. @split_index may not be 0, and it may not be
+ * greater than or equal to the length of @orig (that is, there must
+ * be at least one byte assigned to each item, you can't create a
+ * zero-length item). @split_offset is the length of the first item in
+ * chars, and must be provided because the text used to generate the
+ * item isn't available, so pango_item_split() can't count the char
+ * length of the split items itself.
+ *
+ * Return value: new item representing text before @split_index, which
+ *               should be freed with pango_item_free().
+ **/
+PangoItem*
+pango_item_split (PangoItem  *orig,
+                 int         split_index,
+                 int         split_offset)
+{
+  PangoItem *new_item;
+
+  g_return_val_if_fail (orig != NULL, NULL);
+  g_return_val_if_fail (split_index > 0, NULL);
+  g_return_val_if_fail (split_index < orig->length, NULL);
+  g_return_val_if_fail (split_offset > 0, NULL);
+  g_return_val_if_fail (split_offset < orig->num_chars, NULL);
+
+  new_item = pango_item_copy (orig);
+  new_item->length = split_index;
+  new_item->num_chars = split_offset;
+
+  orig->offset += split_index;
+  orig->length -= split_index;
+  orig->num_chars -= split_offset;
+
+  return new_item;
+}
diff --git a/pango/pango-item.h b/pango/pango-item.h
new file mode 100755 (executable)
index 0000000..0775003
--- /dev/null
@@ -0,0 +1,72 @@
+/* Pango
+ * pango-item.h: Structure for storing run information
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_ITEM_H__
+#define __PANGO_ITEM_H__
+
+#include <pango/pango-types.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoAnalysis PangoAnalysis;
+typedef struct _PangoItem PangoItem;
+
+/* TODO: if more flags are needed, turn this into a real PangoAnalysisFlags enum */
+#define PANGO_ANALYSIS_FLAG_CENTERED_BASELINE (1 << 0)
+
+struct _PangoAnalysis
+{
+  PangoEngineShape *shape_engine;
+  PangoEngineLang  *lang_engine;
+  PangoFont *font;
+
+  guint8 level;
+  guint8 gravity; /* PangoGravity */
+  guint8 flags;
+
+  guint8 script; /* PangoScript */
+  PangoLanguage *language;
+
+  GSList *extra_attrs;
+};
+
+struct _PangoItem
+{
+  gint offset;
+  gint length;
+  gint num_chars;
+  PangoAnalysis analysis;
+};
+
+#define PANGO_TYPE_ITEM (pango_item_get_type ())
+
+GType pango_item_get_type (void) G_GNUC_CONST;
+
+PangoItem *pango_item_new   (void);
+PangoItem *pango_item_copy  (PangoItem  *item);
+void       pango_item_free  (PangoItem  *item);
+PangoItem *pango_item_split (PangoItem  *orig,
+                            int         split_index,
+                            int         split_offset);
+
+G_END_DECLS
+
+#endif /* __PANGO_ITEM_H__ */
diff --git a/pango/pango-language-sample-table.h b/pango/pango-language-sample-table.h
new file mode 100755 (executable)
index 0000000..2cd5e6b
--- /dev/null
@@ -0,0 +1,602 @@
+/* Pango Language Sample Table
+ *
+ * Each entry is of the form:
+ *
+ * LANGUAGE(
+ *      code   |* Name *|,
+ *      SOURCE,
+ *      "Sample text for the language."
+ *      |* Translation of the sample text to English *|
+ *     )
+ *
+ * Where code is the ISO639-1, ISO639-2, or ISO639-3 code for the language,
+ * the first one that exists.  Name is the name of the language in English.
+ *
+ * Source is where the sample text comes from.  One of:
+ *
+ * WP-PANG
+ *     Wikipedia's List of Pangrams in Other Languages
+ *     http://en.wikipedia.org/wiki/List_of_pangrams#Other_languages
+ *     Fetched on 2008-08-19
+ *
+ * WP-SFD
+ *     Wikipedia's Sample Font Displays in Other Languages
+ *     http://en.wikipedia.org/wiki/Sample_Font_Displays_In_Other_Languages
+ *     Fetched on 2008-08-19
+ *
+ * GLASS
+ *     Kermit project's "I Can Eat Glass" list, also available in pango-view/
+ *     http://www.columbia.edu/kermit/utf8.html#glass
+ *     Fetched on 2008-08-19
+ *
+ * KERMIT
+ *     Kermit project's Quick-Brown-Fox equivalents for other languages
+ *     http://www.columbia.edu/kermit/utf8.html#quickbrownfox
+ *     Fetched on 2008-08-19
+ *
+ * GSPECI
+ *     gnome-specimen's translations
+ *     http://svn.gnome.org/viewvc/gnome-specimen/trunk/po/
+ *     Fetched on 2008-08-19
+ *
+ * MISC
+ *     Miscellaneous
+ *
+ * The sample text may be a pangram, but is not necessarily.  It is chosen to
+ * be demonstrative of normal text in the language, as well as exposing font
+ * feature requirements unique to the language.  It should be suitable for use
+ * as sample text in a font selection dialog.
+ *
+ * Needless to say, the list MUST be sorted on the language code.
+ */
+LANGUAGE(
+        af     /* Afrikaans */,
+        GLASS,
+        "Ek kan glas eet, maar dit doen my nie skade nie."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        ar     /* Arabic */,
+        WP-PANG,
+        "نص حكيم له سر قاطع وذو شأن عظيم مكتوب على ثوب أخضر ومغلف بجلد أزرق."
+        /* A wise text which has an absolute secret and great importance, written on a green tissue and covered with blue leather. */
+       )
+LANGUAGE(
+        arn    /* Mapudungun */,
+        WP-PANG,
+        "Gvxam mincetu apocikvyeh: ñizol ce mamvj ka raq kuse bafkeh mew."
+        /* Tale under the full moon: the chief chemamull and the clay old woman at the lake/sea. */
+       )
+LANGUAGE(
+        bar    /* Bavarian */,
+        GLASS,
+        "I koh Glos esa, und es duard ma ned wei."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        bg     /* Bulgarian */,
+        WP-SFD,
+        "Под южно дърво, цъфтящо в синьо, бягаше малко пухкаво зайче."
+        /* A little fluffy young rabbit ran under a southern tree blooming in blue */
+       )
+LANGUAGE(
+        bi     /* Bislama */,
+        GLASS,
+        "Mi save kakae glas, hemi no save katem mi."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        bn     /* Bengali */,
+        GLASS,
+        "আমি কাঁচ খেতে পারি, তাতে আমার কোনো ক্ষতি হয় না।"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        bo     /* Tibetan */,
+        GLASS,
+        "ཤེལ་སྒོ་ཟ་ནས་ང་ན་གི་མ་རེད།"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        bs     /* Bosnian */,
+        WP-PANG,
+        "Fin džip, gluh jež i čvrst konjić dođoše bez moljca."
+        /* A nice jeep, a deaf hedgehog and a tough horse came without a moth. */
+       )
+LANGUAGE(
+        ca     /* Catalan */,
+        WP-PANG,
+        "Jove xef, porti whisky amb quinze glaçons d'hidrogen, coi!"
+        /* Young chef, bring whisky with fifteen hydrogen ice cubes, damn! */
+       )
+LANGUAGE(
+        ch     /* Chamorro */,
+        GLASS,
+        "Siña yo' chumocho krestat, ti ha na'lalamen yo'."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        cs     /* Czech */,
+        WP-SFD,
+        "Příliš žluťoučký kůň úpěl ďábelské ódy."
+        /* A too yellow horse moaned devil odes. */
+       )
+LANGUAGE(
+        cy     /* Welsh */,
+        GLASS,
+        "Dw i'n gallu bwyta gwydr, 'dyw e ddim yn gwneud dolur i mi."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        da     /* Danish */,
+        WP-SFD,
+        "Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen Walther spillede på xylofon."
+        /* The quiz contestants ate strawberries with cream while Walther the clown was playing the xylophone. */
+       )
+LANGUAGE(
+        de     /* German */,
+        WP-SFD,
+        "Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich."
+        /* Twelve boxing fighters drive Viktor over the great. */
+       )
+LANGUAGE(
+        el     /* Greek */,
+        WP-SFD,
+        "Θέλει αρετή και τόλμη η ελευθερία. (Ανδρέας Κάλβος)"
+        /* Liberty requires virtue and mettle. (Andreas Kalvos) */
+       )
+LANGUAGE(
+        en     /* English */,
+        GSPECI,
+        "The quick brown fox jumps over the lazy dog."
+       )
+LANGUAGE(
+        enm    /* Middle English */,
+        GLASS,
+        "Ich canne glas eten and hit hirtiþ me nouȝt."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        eo     /* Esperanto */,
+        WP-SFD,
+        "Eĥoŝanĝo ĉiuĵaŭde."
+        /* Change of echo every Thursday. */
+       )
+LANGUAGE(
+        es     /* Spanish */,
+        WP-PANG,
+        "Jovencillo emponzoñado de whisky: ¡qué figurota exhibe!"
+        /* Whisky-intoxicated youngster — what a figure he's showing! */
+       )
+LANGUAGE(
+        et     /* Estonian */,
+        WP-SFD,
+        "See väike mölder jõuab rongile hüpata."
+        /* This small miller is able to jump on the train. */
+       )
+LANGUAGE(
+        eu     /* Basque */,
+        GLASS,
+        "Kristala jan dezaket, ez dit minik ematen."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        fa     /* Persian */,
+        MISC   /* Behdad Esfahbod (#548730) */,
+        "«الا یا اَیُّها السّاقی! اَدِرْ کَأساً وَ ناوِلْها!» که عشق آسان نمود اوّل، ولی افتاد مشکل‌ها!"
+       )
+LANGUAGE(
+        fi     /* Finnish */,
+        WP-SFD,
+        "Viekas kettu punaturkki laiskan koiran takaa kurkki."
+        /* The cunning red-coated fox peeped from behind the lazy dog. */
+       )
+LANGUAGE(
+        fr     /* French */,
+        MISC   /* Vincent Untz (#549520) http://fr.wikipedia.org/wiki/Pangramme */,
+        "Voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis."
+        /* Ambiguous voice of a heart that, in the wind, prefers bowls of kiwis. */
+       )
+LANGUAGE(
+        fro    /* Old French */,
+        GLASS,
+        "Je puis mangier del voirre. Ne me nuit."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        ga     /* Irish */,
+        WP-PANG,
+        "D'ḟuascail Íosa Úrṁac na hÓiġe Beannaiṫe pór Éaḃa agus Áḋaiṁ."
+        /* Jesus, Son of the blessed Virgin, redeemed the seed of Eve and Adam. */
+       )
+LANGUAGE(
+        gd     /* Scottish Gaelic */,
+        GLASS,
+        "S urrainn dhomh gloinne ithe; cha ghoirtich i mi."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        gl     /* Galician */,
+        GLASS,
+        "Eu podo xantar cristais e non cortarme."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        got    /* Gothic */,
+        GLASS,
+        "𐌼𐌰𐌲 𐌲𐌻𐌴𐍃 𐌹̈𐍄𐌰𐌽, 𐌽𐌹 𐌼𐌹𐍃 𐍅𐌿 𐌽𐌳𐌰𐌽 𐌱𐍂𐌹𐌲𐌲𐌹𐌸."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        gv     /* Manx Gaelic */,
+        GLASS,
+        "Foddym gee glonney agh cha jean eh gortaghey mee."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        haw    /* Hawaiian */,
+        GLASS,
+        "Hiki iaʻu ke ʻai i ke aniani; ʻaʻole nō lā au e ʻeha."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        he     /* Hebrew */,
+        WP-SFD,
+        "דג סקרן שט לו בים זך אך לפתע פגש חבורה נחמדה שצצה כך."
+        /* A curious fish sailed a clear sea, and suddenly found nice company that just popped up. */
+       )
+LANGUAGE(
+        hi     /* Hindi */,
+        MISC   /* G Karunakar (#549532) */,
+        "नहीं नजर किसी की बुरी नहीं किसी का मुँह काला जो करे सो उपर वाला"
+        /* its not in the sight or the face, but its all in god's grace. */
+       )
+LANGUAGE(
+        hr     /* Croatian */,
+        GLASS,
+        "Ja mogu jesti staklo i ne boli me."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        hu     /* Hungarian */,
+        WP-SFD,
+        "Egy hűtlen vejét fülöncsípő, dühös mexikói úr Wesselényinél mázol Quitóban."
+        /* An angry Mexican man, who caught his faithless son-in-law, is painting Wesselényi's house in Quito. */
+       )
+LANGUAGE(
+        hy     /* Armenian */,
+        GLASS,
+        "Կրնամ ապակի ուտել և ինծի անհանգիստ չըներ։"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        is     /* Icelandic */,
+        WP-PANG,
+        "Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa"
+        /* If a new axe were here, thieves would feel increasing deterrence and punishment. */
+       )
+LANGUAGE(
+        it     /* Italian */,
+        WP-SFD,
+        "Ma la volpe, col suo balzo, ha raggiunto il quieto Fido."
+        /* But the fox, with its jump, reached the calm dog */
+       )
+LANGUAGE(
+        ja     /* Japanese */,
+        KERMIT,
+        "いろはにほへと ちりぬるを 色は匂へど 散りぬるを"
+       )
+LANGUAGE(
+        jam    /* Jamaican Creole English */,
+        KERMIT,
+        "Chruu, a kwik di kwik brong fox a jomp huova di liezi daag de, yu no siit?"
+       )
+LANGUAGE(
+        jbo    /* Lojban */,
+        WP-PANG,
+        ".o'i mu xagji sofybakni cu zvati le purdi"
+        /* Watch out, five hungry Soviet-cows are in the garden! */
+       )
+LANGUAGE(
+        jv     /* Javanese */,
+        GLASS,
+        "Aku isa mangan beling tanpa lara."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        ka     /* Georgian */,
+        GLASS,
+        "მინას ვჭამ და არა მტკივა."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        ko     /* Korean */,
+        WP-SFD,
+        "다람쥐 헌 쳇바퀴에 타고파"
+        /* I Wanna ride on the chipmunk's old hamster wheel. */
+       )
+LANGUAGE(
+        kw     /* Cornish */,
+        GLASS,
+        "Mý a yl dybry gwéder hag éf ny wra ow ankenya."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        la     /* Latin */,
+        WP-PANG,
+        "Sic surgens, dux, zelotypos quam karus haberis"
+       )
+LANGUAGE(
+        lt     /* Lithuanian */,
+        WP-PANG,
+        "Įlinkdama fechtuotojo špaga sublykčiojusi pragręžė apvalų arbūzą."
+        /* Incurving fencer sword sparkled and perforated a round watermelon. */
+       )
+LANGUAGE(
+        lv     /* Latvian */,
+        WP-SFD,
+        "Sarkanās jūrascūciņas peld pa jūru."
+        /* Red seapigs swim in the sea. */
+       )
+LANGUAGE(
+        map    /* Marquesan */,
+        GLASS,
+        "E koʻana e kai i te karahi, mea ʻā, ʻaʻe hauhau."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        mk     /* Macedonian */,
+        GLASS,
+        "Можам да јадам стакло, а не ме штета."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        mn     /* Mongolian */,
+        GLASS,
+        "ᠪᠢ ᠰᠢᠯᠢ ᠢᠳᠡᠶᠦ ᠴᠢᠳᠠᠨᠠ ᠂ ᠨᠠᠳᠤᠷ ᠬᠣᠤᠷᠠᠳᠠᠢ ᠪᠢᠰᠢ"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        mr     /* Marathi */,
+        GLASS,
+        "मी काच खाऊ शकतो, मला ते दुखत नाही."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        ms     /* Malay */,
+        GLASS,
+        "Saya boleh makan kaca dan ia tidak mencederakan saya."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        nap    /* Neapolitan */,
+        GLASS,
+        "M' pozz magna' o'vetr, e nun m' fa mal."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        nb     /* Norwegian Bokmål */,
+        GSPECI,
+        "Vår sære Zulu fra badeøya spilte jo whist og quickstep i min taxi."
+       )
+LANGUAGE(
+        nl     /* Dutch */,
+        WP-SFD,
+        "Pa's wijze lynx bezag vroom het fikse aquaduct."
+        /* Dad's wise lynx piously regarded the substantial aqueduct. */
+       )
+LANGUAGE(
+        nn     /* Norwegian Nynorsk */,
+        GLASS,
+        "Eg kan eta glas utan å skada meg."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        no     /* Norwegian Bokmål */,
+        GSPECI,
+        "Vår sære Zulu fra badeøya spilte jo whist og quickstep i min taxi."
+       )
+LANGUAGE(
+        nv     /* Navajo */,
+        GLASS,
+        "Tsésǫʼ yishą́ągo bííníshghah dóó doo shił neezgai da."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        oc     /* Occitan */,
+        GLASS,
+        "Pòdi manjar de veire, me nafrariá pas."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        pcd    /* Picard */,
+        GLASS,
+        "Ch'peux mingi du verre, cha m'foé mie n'ma."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        pl     /* Polish */,
+        WP-SFD,
+        "Pchnąć w tę łódź jeża lub ośm skrzyń fig."
+        /* Push into this boat a hedgehog or eight boxes of figs. */
+       )
+LANGUAGE(
+        pt     /* Portuguese */,
+        WP-SFD,
+        "Vejam a bruxa da raposa Salta-Pocinhas e o cão feliz que dorme regalado."
+        /* Watch the witch of the Jump-Puddles fox and the happy dog that sleeps delighted. */
+       )
+LANGUAGE(
+        pt-br  /* Brazilian Portuguese */,
+        WP-PANG,
+        "À noite, vovô Kowalsky vê o ímã cair no pé do pingüim queixoso e vovó põe açúcar no chá de tâmaras do jabuti feliz."
+        /* At night, grandpa Kowalsky sees the magnet falling in the complaining penguin's foot and grandma puts sugar in the happy tortoise's date tea.*/
+       )
+LANGUAGE(
+        ro     /* Romanian */,
+        MISC   /* Misu Moldovan (#552993) */,
+        "Fumegând hipnotic sașiul azvârle mreje în bălți."
+        /* Hypnotically smoking, the cross-eyed man throws fishing nets into ponds. */
+       )
+LANGUAGE(
+        ru     /* Russian */,
+        WP-PANG,
+        "В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!"
+        /* Would a citrus live in the bushes of the south? Yes, but only a fake one! */
+       )
+LANGUAGE(
+        sa     /* Sanskrit */,
+        GLASS,
+        "काचं शक्नोम्यत्तुम् । नोपहिनस्ति माम् ॥"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        scn    /* Sicilian */,
+        GLASS,
+        "Puotsu mangiari u vitru, nun mi fa mali."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        sk     /* Slovak */,
+        KERMIT,
+        "Starý kôň na hŕbe kníh žuje tíško povädnuté ruže, na stĺpe sa ďateľ učí kvákať novú ódu o živote."
+       )
+LANGUAGE(
+        sl     /* Slovenian */,
+        WP-PANG,
+        "Šerif bo za vajo spet kuhal domače žgance."
+        /* For an exercise, sheriff will again make home-made mush. */
+       )
+LANGUAGE(
+        sq     /* Albanian */,
+        GLASS,
+        "Unë mund të ha qelq dhe nuk më gjen gjë."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        sr     /* Serbian (Cyrillic) */,
+        WP-SFD,
+        "Чешће цeђење мрeжастим џаком побољшава фертилизацију генских хибрида."
+        /* More frequent filtering through the reticular bag improves fertilization of genetic hybrids. */
+       )
+#if 0
+LANGUAGE(
+        sr-sr@latin    /* Serbian (Latin) */,
+        WP-SFD,
+        "Češće ceđenje mrežastim džakom poboljšava fertilizaciju genskih hibrida."
+        /* More frequent filtering through the reticular bag improves fertilization of genetic hybrids. */
+       )
+#endif
+LANGUAGE(
+        sv     /* Swedish */,
+        WP-SFD,
+        "Flygande bäckasiner söka strax hwila på mjuka tuvor."
+        /* Flying snipes soon look to rest on soft grass beds. */
+       )
+LANGUAGE(
+        swg    /* Swabian */,
+        GLASS,
+        "I kå Glas frässa, ond des macht mr nix!"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        ta     /* Tamil */,
+        GLASS,
+        "நான் கண்ணாடி சாப்பிடுவேன், அதனால் எனக்கு ஒரு கேடும் வராது."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        th     /* Thai */,
+        WP-SFD,
+        "เป็นมนุษย์สุดประเสริฐเลิศคุณค่า - กว่าบรรดาฝูงสัตว์เดรัจฉาน - จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร - ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า - หัดอภัยเหมือนกีฬาอัชฌาสัย - ปฏิบัติประพฤติกฎกำหนดใจ - พูดจาให้จ๊ะ ๆ จ๋า ๆ น่าฟังเอยฯ"
+        /* Being a man is worthy - Beyond senseless animal - Begin educate thyself - Begone from killing and trouble - Bear not thy grudge, damn and, curse - Bestow forgiving and sporting - Befit with rules - Benign speech speak thou */
+       )
+LANGUAGE(
+        tl     /* Tagalog */,
+        GLASS,
+        "Kaya kong kumain nang bubog at hindi ako masaktan."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        tr     /* Turkish */,
+        WP-PANG,
+        "Pijamalı hasta yağız şoföre çabucak güvendi."
+        /* The patient in pajamas trusted the swarthy driver quickly. */
+       )
+LANGUAGE(
+        tw     /* Twi */,
+        GLASS,
+        "Metumi awe tumpan, ɜnyɜ me hwee."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        uk     /* Ukrainian */,
+        WP-PANG,
+        "Чуєш їх, доцю, га? Кумедна ж ти, прощайся без ґольфів!"
+        /* Daughter, do you hear them, eh? Oh, you are funny! Say good-bye without knee-length socks. */
+       )
+LANGUAGE(
+        ur     /* Urdu */,
+        GLASS,
+        "میں کانچ کھا سکتا ہوں اور مجھے تکلیف نہیں ہوتی ۔"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        vec    /* Venetian */,
+        GLASS,
+        "Mi posso magnare el vetro, no'l me fa mae."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        vi     /* Vietnamese */,
+        GSPECI,
+        "Con sói nâu nhảy qua con chó lười."
+       )
+LANGUAGE(
+        wa     /* Walloon */,
+        GLASS,
+        "Dji pou magnî do vêre, çoula m' freut nén må."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        yi     /* Yiddish */,
+        GLASS,
+        "איך קען עסן גלאָז און עס טוט מיר נישט װײ."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        yo     /* Yoruba */,
+        GLASS,
+        "Mo lè je̩ dígí, kò ní pa mí lára."
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        zh-cn  /* Chinese Simplified */,
+        GLASS,
+        "我能吞下玻璃而不伤身体。"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        zh-mo  /* Chinese Traditional */,
+        GLASS,
+        "我能吞下玻璃而不傷身體。"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        zh-sg  /* Chinese Simplified */,
+        GLASS,
+        "我能吞下玻璃而不伤身体。"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        zh-tw  /* Chinese Traditional */,
+        GLASS,
+        "我能吞下玻璃而不傷身體。"
+        /* I can eat glass and it doesn't hurt me. */
+       )
+LANGUAGE(
+        zlm    /* Malay */,
+        GLASS,
+        "Saya boleh makan kaca dan ia tidak mencederakan saya."
+        /* I can eat glass and it doesn't hurt me. */
+       )
diff --git a/pango/pango-language.c b/pango/pango-language.c
new file mode 100755 (executable)
index 0000000..bfde308
--- /dev/null
@@ -0,0 +1,918 @@
+/* Pango
+ * pango-language.c: Language handling routines
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <locale.h>
+
+#include "pango-language.h"
+#include "pango-impl-utils.h"
+
+
+/* We embed a private struct right *before* a where a PangoLanguage *
+ * points to.
+ */
+
+typedef struct {
+  gconstpointer lang_info;
+  gconstpointer script_for_lang;
+
+  int magic; /* Used for verification */
+} PangoLanguagePrivate;
+
+#define PANGO_LANGUAGE_PRIVATE_MAGIC 0x0BE4DAD0
+
+static void
+pango_language_private_init (PangoLanguagePrivate *priv)
+{
+  priv->magic = PANGO_LANGUAGE_PRIVATE_MAGIC;
+
+  priv->lang_info = (gconstpointer) -1;
+  priv->script_for_lang = (gconstpointer) -1;
+}
+
+static PangoLanguagePrivate * pango_language_get_private (PangoLanguage *language) G_GNUC_CONST;
+
+static PangoLanguagePrivate *
+pango_language_get_private (PangoLanguage *language)
+{
+  PangoLanguagePrivate *priv;
+
+  if (!language)
+    return NULL;
+
+  priv = (PangoLanguagePrivate *) ((char *)language - sizeof (PangoLanguagePrivate));
+
+  if (G_UNLIKELY (priv->magic != PANGO_LANGUAGE_PRIVATE_MAGIC))
+    {
+      g_critical ("Invalid PangoLanguage.  Did you pass in a straight string instead of calling pango_language_from_string()?");
+      return NULL;
+    }
+
+  return priv;
+}
+
+
+
+#define LANGUAGE_SEPARATORS ";:, \t"
+
+static const char canon_map[256] = {
+   0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   0,   0,   0,   0,
+   0,   0,   0,   0,   0,   0,   0,   0,    0,   0,   0,   0,   0,  '-',  0,   0,
+  '0', '1', '2', '3', '4', '5', '6', '7',  '8', '9',  0,   0,   0,   0,   0,   0,
+  '-', 'a', 'b', 'c', 'd', 'e', 'f', 'g',  'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+  'p', 'q', 'r', 's', 't', 'u', 'v', 'w',  'x', 'y', 'z',  0,   0,   0,   0,  '-',
+   0,  'a', 'b', 'c', 'd', 'e', 'f', 'g',  'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+  'p', 'q', 'r', 's', 't', 'u', 'v', 'w',  'x', 'y', 'z',  0,   0,   0,   0,   0
+};
+
+static gboolean
+lang_equal (gconstpointer v1,
+           gconstpointer v2)
+{
+  const guchar *p1 = v1;
+  const guchar *p2 = v2;
+
+  while (canon_map[*p1] && canon_map[*p1] == canon_map[*p2])
+    {
+      p1++, p2++;
+    }
+
+  return (canon_map[*p1] == canon_map[*p2]);
+}
+
+static guint
+lang_hash (gconstpointer key)
+{
+  const guchar *p = key;
+  guint h = 0;
+  while (canon_map[*p])
+    {
+      h = (h << 5) - h + canon_map[*p];
+      p++;
+    }
+
+  return h;
+}
+
+static PangoLanguage *
+pango_language_copy (PangoLanguage *language)
+{
+  return language; /* language tags are const */
+}
+
+static void
+pango_language_free (PangoLanguage *language G_GNUC_UNUSED)
+{
+  return; /* nothing */
+}
+
+GType
+pango_language_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoLanguage"),
+                                            (GBoxedCopyFunc)pango_language_copy,
+                                            (GBoxedFreeFunc)pango_language_free);
+  return our_type;
+}
+
+/**
+ * _pango_get_lc_ctype:
+ *
+ * Return the Unix-style locale string for the language currently in
+ * effect. On Unix systems, this is the return value from
+ * <literal>setlocale(LC_CTYPE, NULL)</literal>, and the user can
+ * affect this through the environment variables LC_ALL, LC_CTYPE or
+ * LANG (checked in that order). The locale strings typically is in
+ * the form lang_COUNTRY, where lang is an ISO-639 language code, and
+ * COUNTRY is an ISO-3166 country code. For instance, sv_FI for
+ * Swedish as written in Finland or pt_BR for Portuguese as written in
+ * Brazil.
+ *
+ * On Windows, the C library doesn't use any such environment
+ * variables, and setting them won't affect the behavior of functions
+ * like ctime(). The user sets the locale through the Regional Options
+ * in the Control Panel. The C library (in the setlocale() function)
+ * does not use country and language codes, but country and language
+ * names spelled out in English.
+ * However, this function does check the above environment
+ * variables, and does return a Unix-style locale string based on
+ * either said environment variables or the thread's current locale.
+ *
+ * Return value: a dynamically allocated string, free with g_free().
+ */
+static gchar *
+_pango_get_lc_ctype (void)
+{
+#ifdef G_OS_WIN32
+  /* Somebody might try to set the locale for this process using the
+   * LANG or LC_ environment variables. The Microsoft C library
+   * doesn't know anything about them. You set the locale in the
+   * Control Panel. Setting these env vars won't have any affect on
+   * locale-dependent C library functions like ctime(). But just for
+   * kicks, do obey LC_ALL, LC_CTYPE and LANG in Pango. (This also makes
+   * it easier to test GTK and Pango in various default languages, you
+   * don't have to clickety-click in the Control Panel, you can simply
+   * start the program with LC_ALL=something on the command line.)
+   */
+
+  gchar *p;
+
+  p = getenv ("LC_ALL");
+  if (p != NULL)
+    return g_strdup (p);
+
+  p = getenv ("LC_CTYPE");
+  if (p != NULL)
+    return g_strdup (p);
+
+  p = getenv ("LANG");
+  if (p != NULL)
+    return g_strdup (p);
+
+  return g_win32_getlocale ();
+#else
+  return g_strdup (setlocale (LC_CTYPE, NULL));
+#endif
+}
+
+/**
+ * pango_language_get_default:
+ *
+ * Returns the #PangoLanguage for the current locale of the process.
+ * Note that this can change over the life of an application.
+ *
+ * On Unix systems, this is the return value is derived from
+ * <literal>setlocale(LC_CTYPE, NULL)</literal>, and the user can
+ * affect this through the environment variables LC_ALL, LC_CTYPE or
+ * LANG (checked in that order). The locale string typically is in
+ * the form lang_COUNTRY, where lang is an ISO-639 language code, and
+ * COUNTRY is an ISO-3166 country code. For instance, sv_FI for
+ * Swedish as written in Finland or pt_BR for Portuguese as written in
+ * Brazil.
+ *
+ * On Windows, the C library does not use any such environment
+ * variables, and setting them won't affect the behavior of functions
+ * like ctime(). The user sets the locale through the Regional Options
+ * in the Control Panel. The C library (in the setlocale() function)
+ * does not use country and language codes, but country and language
+ * names spelled out in English.
+ * However, this function does check the above environment
+ * variables, and does return a Unix-style locale string based on
+ * either said environment variables or the thread's current locale.
+ *
+ * Your application should call <literal>setlocale(LC_ALL, "");</literal>
+ * for the user settings to take effect.  Gtk+ does this in its initialization
+ * functions automatically (by calling gtk_set_locale()).
+ * See <literal>man setlocale</literal> for more details.
+ *
+ * Return value: the default language as a #PangoLanguage, must not be
+ *               freed.
+ *
+ * Since: 1.16
+ **/
+PangoLanguage *
+pango_language_get_default (void)
+{
+  static PangoLanguage *result = NULL;
+
+  if (G_UNLIKELY (!result))
+    {
+      gchar *lang = _pango_get_lc_ctype ();
+      result = pango_language_from_string (lang);
+      g_free (lang);
+    }
+
+  return result;
+}
+
+/**
+ * pango_language_from_string:
+ * @language: a string representing a language tag, or %NULL
+ *
+ * Take a RFC-3066 format language tag as a string and convert it to a
+ * #PangoLanguage pointer that can be efficiently copied (copy the
+ * pointer) and compared with other language tags (compare the
+ * pointer.)
+ *
+ * This function first canonicalizes the string by converting it to
+ * lowercase, mapping '_' to '-', and stripping all characters other
+ * than letters and '-'.
+ *
+ * Use pango_language_get_default() if you want to get the #PangoLanguage for
+ * the current locale of the process.
+ *
+ * Return value: an opaque pointer to a #PangoLanguage structure, or %NULL
+ *               if @language was %NULL.  The returned pointer will be valid
+ *               forever after, and should not be freed.
+ **/
+PangoLanguage *
+pango_language_from_string (const char *language)
+{
+  static GHashTable *hash = NULL;
+  PangoLanguagePrivate *priv;
+  char *result;
+  int len;
+  char *p;
+
+  if (language == NULL)
+    return NULL;
+
+  if (G_UNLIKELY (!hash))
+    hash = g_hash_table_new (lang_hash, lang_equal);
+  else
+    {
+      result = g_hash_table_lookup (hash, language);
+      if (result)
+       return (PangoLanguage *)result;
+    }
+
+  len = strlen (language);
+  result = g_malloc0 (sizeof (PangoLanguagePrivate) + len + 1);
+  g_assert (result);
+
+  priv = (PangoLanguagePrivate *) result;
+  result += sizeof (*priv);
+
+  pango_language_private_init (priv);
+
+  p = result;
+  while ((*(p++) = canon_map[*(guchar *)language++]))
+    ;
+
+  g_hash_table_insert (hash, result, result);
+
+  return (PangoLanguage *)result;
+}
+
+/**
+ * pango_language_to_string:
+ * @language: a language tag.
+ *
+ * Gets the RFC-3066 format string representing the given language tag. 
+ *
+ * Returns: a string representing the language tag.  This is owned by
+ *          Pango and should not be freed.
+ */
+G_CONST_RETURN char *
+(pango_language_to_string) (PangoLanguage *language)
+{
+  return pango_language_to_string (language);
+}
+
+/**
+ * pango_language_matches:
+ * @language: a language tag (see pango_language_from_string()),
+ *            %NULL is allowed and matches nothing but '*'
+ * @range_list: a list of language ranges, separated by ';', ':',
+ *   ',', or space characters.
+ *   Each element must either be '*', or a RFC 3066 language range
+ *   canonicalized as by pango_language_from_string()
+ *
+ * Checks if a language tag matches one of the elements in a list of
+ * language ranges. A language tag is considered to match a range
+ * in the list if the range is '*', the range is exactly the tag,
+ * or the range is a prefix of the tag, and the character after it
+ * in the tag is '-'.
+ *
+ * Return value: %TRUE if a match was found.
+ **/
+gboolean
+pango_language_matches (PangoLanguage *language,
+                       const char    *range_list)
+{
+  const char *lang_str = pango_language_to_string (language);
+  const char *p = range_list;
+  gboolean done = FALSE;
+
+  while (!done)
+    {
+      const char *end = strpbrk (p, LANGUAGE_SEPARATORS);
+      if (!end)
+       {
+         end = p + strlen (p);
+         done = TRUE;
+       }
+
+      if (strncmp (p, "*", 1) == 0 ||
+         (lang_str && strncmp (lang_str, p, end - p) == 0 &&
+          (lang_str[end - p] == '\0' || lang_str[end - p] == '-')))
+       return TRUE;
+
+      if (!done)
+       p = end + 1;
+    }
+
+  return FALSE;
+}
+
+static int
+lang_compare_first_component (gconstpointer pa,
+                             gconstpointer pb)
+{
+  const char *a = pa, *b = pb;
+  unsigned int da, db;
+  const char *p;
+
+  p = strstr (a, "-");
+  da = p ? (unsigned int) (p - a) : strlen (a);
+
+  p = strstr (b, "-");
+  db = p ? (unsigned int) (p - b) : strlen (b);
+   
+  return strncmp (a, b, MAX (da, db));
+}
+
+/* Finds the best record for @language in an array of records.
+ * Each record should start with the string representation of the language
+ * code for the record (embedded, not a pointer), and the records must be
+ * sorted on language code.
+ */
+static gconstpointer
+find_best_lang_match (PangoLanguage *language,
+                     gconstpointer  records,
+                     guint          num_records,
+                     guint          record_size)
+{
+  const char *lang_str;
+  const char *record, *start, *end;
+
+  if (language == NULL)
+    return NULL;
+
+  lang_str = pango_language_to_string (language);
+
+  record = bsearch (lang_str,
+                   records, num_records, record_size,
+                   lang_compare_first_component);
+  if (!record)
+    return NULL;
+
+  start = (const char *) records;
+  end   = start + num_records * record_size;
+
+  /* find the best match among all those that have the same first-component */
+
+  /* go to the final one matching in the first component */
+  while (record < end - record_size &&
+        lang_compare_first_component (lang_str, record + record_size) == 0)
+    record += record_size;
+
+  /* go back, find which one matches completely */
+  while (start <= record &&
+        lang_compare_first_component (lang_str, record) == 0)
+    {
+      if (pango_language_matches (language, record))
+        return record;
+
+      record -= record_size;
+    }
+
+  return NULL;
+}
+
+static gconstpointer
+find_best_lang_match_cached (PangoLanguage *language,
+                            gconstpointer *cache,
+                            gconstpointer  records,
+                            guint          num_records,
+                            guint          record_size)
+{
+  gconstpointer result;
+
+  if (G_LIKELY (cache && *cache != (gconstpointer) -1))
+    return *cache;
+
+  result = find_best_lang_match (language,
+                                records,
+                                num_records,
+                                record_size);
+
+  if (cache)
+    *cache = result;
+
+  return result;
+}
+
+#define FIND_BEST_LANG_MATCH(language, records) \
+       find_best_lang_match ((language), \
+                             records, \
+                             G_N_ELEMENTS (records), \
+                             sizeof (*records));
+
+#define FIND_BEST_LANG_MATCH_CACHED(language, cache_key, records) \
+       find_best_lang_match_cached ((language), \
+                                    pango_language_get_private (language) ? \
+                                      &(pango_language_get_private (language)->cache_key) : NULL, \
+                                    records, \
+                                    G_N_ELEMENTS (records), \
+                                    sizeof (*records));
+
+typedef struct {
+  char lang[6];
+  guint16 offset;
+} LangInfo;
+
+/* Pure black magic, based on appendix of dsohowto.pdf */
+#define POOLSTRFIELD(line) POOLSTRFIELD1(line)
+#define POOLSTRFIELD1(line) str##line
+struct _LangPoolStruct {
+  char str0[1];
+#define LANGUAGE(id, source, sample) char POOLSTRFIELD(__LINE__)[sizeof(sample)];
+#include "pango-language-sample-table.h"
+#undef LANGUAGE
+};
+
+static const union _LangPool {
+  struct _LangPoolStruct lang_pool_struct;
+  const char str[1];
+} lang_pool = { {
+    "",
+#define LANGUAGE(id, source, sample) sample,
+#include "pango-language-sample-table.h"
+#undef LANGUAGE
+} };
+static const LangInfo lang_texts[] = {
+#define LANGUAGE(id, source, sample) {G_STRINGIFY(id), G_STRUCT_OFFSET(struct _LangPoolStruct, POOLSTRFIELD(__LINE__))},
+#include "pango-language-sample-table.h"
+#undef LANGUAGE
+  /* One extra entry with no final comma, to make it C89-happy */
+ {"~~",        0}
+};
+
+/**
+ * pango_language_get_sample_string:
+ * @language: a #PangoLanguage, or %NULL
+ *
+ * Get a string that is representative of the characters needed to
+ * render a particular language.
+ *
+ * The sample text may be a pangram, but is not necessarily.  It is chosen to
+ * be demonstrative of normal text in the language, as well as exposing font
+ * feature requirements unique to the language.  It is suitable for use
+ * as sample text in a font selection dialog.
+ *
+ * If @language is %NULL, the default language as found by
+ * pango_language_get_default() is used.
+ *
+ * If Pango does not have a sample string for @language, the classic
+ * "The quick brown fox..." is returned.  This can be detected by
+ * comparing the returned pointer value to that returned for (non-existent)
+ * language code "xx".  That is, compare to:
+ * <informalexample><programlisting>
+ * pango_language_get_sample_string (pango_language_from_string ("xx"))
+ * </programlisting></informalexample>
+ *
+ * Return value: the sample string. This value is owned by Pango
+ *   and should not be freed.
+ **/
+G_CONST_RETURN char *
+pango_language_get_sample_string (PangoLanguage *language)
+{
+  const LangInfo *lang_info;
+
+  if (!language)
+    language = pango_language_get_default ();
+
+  lang_info = FIND_BEST_LANG_MATCH_CACHED (language,
+                                          lang_info,
+                                          lang_texts);
+
+  if (lang_info)
+    return lang_pool.str + lang_info->offset;
+
+  return "The quick brown fox jumps over the lazy dog.";
+}
+
+
+
+
+/*
+ * From language to script
+ */
+
+
+#include "pango-script-lang-table.h"
+
+/**
+ * pango_language_get_scripts:
+ * @language: a #PangoLanguage, or %NULL
+ * @num_scripts: location to return number of scripts, or %NULL
+ *
+ * Determines the scripts used to to write @language.
+ * If nothing is known about the language tag @language,
+ * or if @language is %NULL, then %NULL is returned.
+ * The list of scripts returned starts with the script that the
+ * language uses most and continues to the one it uses least.
+ *
+ * The value @num_script points at will be set to the number
+ * of scripts in the returned array (or zero if %NULL is returned).
+ *
+ * Most languages use only one script for writing, but there are
+ * some that use two (Latin and Cyrillic for example), and a few
+ * use three (Japanese for example).  Applications should not make
+ * any assumptions on the maximum number of scripts returned
+ * though, except that it is positive if the return value is not
+ * %NULL, and it is a small number.
+ *
+ * The pango_language_includes_script() function uses this function
+ * internally.
+ *
+ * Return value: An array of #PangoScript values, with the
+ * number of entries in the array stored in @num_scripts, or
+ * %NULL if Pango does not have any information about this
+ * particular language tag (also the case if @language is %NULL).
+ * The returned array is owned by Pango and should not be modified
+ * or freed.
+ * Since: 1.22
+ **/
+G_CONST_RETURN PangoScript *
+pango_language_get_scripts (PangoLanguage *language,
+                           int           *num_scripts)
+{
+  const PangoScriptForLang *script_for_lang;
+  unsigned int j;
+
+  script_for_lang = FIND_BEST_LANG_MATCH_CACHED (language,
+                                                script_for_lang,
+                                                pango_script_for_lang);
+
+  if (!script_for_lang)
+    {
+      if (num_scripts)
+       *num_scripts = 0;
+
+      return NULL;
+    }
+
+  if (num_scripts)
+    {
+      for (j = 0; j < G_N_ELEMENTS (script_for_lang->scripts); j++)
+       if (script_for_lang->scripts[j] == 0)
+         break;
+
+      g_assert (j > 0);
+
+      *num_scripts = j;
+    }
+
+  return script_for_lang->scripts;
+}
+
+/**
+ * pango_language_includes_script:
+ * @language: a #PangoLanguage, or %NULL
+ * @script: a #PangoScript
+ *
+ * Determines if @script is one of the scripts used to
+ * write @language. The returned value is conservative;
+ * if nothing is known about the language tag @language,
+ * %TRUE will be returned, since, as far as Pango knows,
+ * @script might be used to write @language.
+ *
+ * This routine is used in Pango's itemization process when
+ * determining if a supplied language tag is relevant to
+ * a particular section of text. It probably is not useful for
+ * applications in most circumstances.
+ *
+ * This function uses pango_language_get_scripts() internally.
+ *
+ * Return value: %TRUE if @script is one of the scripts used
+ * to write @language or if nothing is known about @language
+ * (including the case that @language is %NULL),
+ * %FALSE otherwise.
+ * Since: 1.4
+ **/
+gboolean
+pango_language_includes_script (PangoLanguage *language,
+                               PangoScript    script)
+{
+  const PangoScript *scripts;
+  int num_scripts, j;
+
+/* copied from the one in pango-script.c */
+#define REAL_SCRIPT(script) \
+  ((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN)
+
+  if (!REAL_SCRIPT (script))
+    return TRUE;
+
+#undef REAL_SCRIPT
+
+  scripts = pango_language_get_scripts (language, &num_scripts);
+  if (!scripts)
+    return TRUE;
+
+  for (j = 0; j < num_scripts; j++)
+    if (scripts[j] == script)
+      return TRUE;
+
+  return FALSE;
+}
+
+
+
+
+/*
+ * From script to language
+ */
+
+
+static PangoLanguage **
+parse_default_languages (void)
+{
+  char *p, *p_copy;
+  gboolean done = FALSE;
+  GArray *langs;
+
+  p = getenv ("PANGO_LANGUAGE");
+
+  if (p == NULL)
+    p = getenv ("LANGUAGE");
+
+  if (p == NULL)
+    return NULL;
+
+  p_copy = p = g_strdup (p);
+
+  langs = g_array_new (TRUE, FALSE, sizeof (PangoLanguage *));
+
+  while (!done)
+    {
+      char *end = strpbrk (p, LANGUAGE_SEPARATORS);
+      if (!end)
+       {
+         end = p + strlen (p);
+         done = TRUE;
+       }
+      else
+        *end = '\0';
+
+      /* skip empty languages, and skip the language 'C' */
+      if (p != end && !(p + 1 == end && *p == 'C'))
+        {
+         PangoLanguage *l = pango_language_from_string (p);
+         
+         g_array_append_val (langs, l);
+       }
+
+      if (!done)
+       p = end + 1;
+    }
+
+  g_free (p_copy);
+
+  return (PangoLanguage **) g_array_free (langs, FALSE);
+}
+
+static PangoLanguage *
+_pango_script_get_default_language (PangoScript script)
+{
+  static gboolean initialized = FALSE;
+  static PangoLanguage * const * languages = NULL;
+  static GHashTable *hash = NULL;
+  PangoLanguage *result, * const * p;
+
+  if (G_UNLIKELY (!initialized))
+    {
+      languages = parse_default_languages ();
+
+      if (languages)
+       hash = g_hash_table_new (NULL, NULL);
+
+      initialized = TRUE;
+    }
+
+  if (!languages)
+    return NULL;
+
+  if (g_hash_table_lookup_extended (hash, GINT_TO_POINTER (script), NULL, (gpointer *) (gpointer) &result))
+    return result;
+
+  for (p = languages; *p; p++)
+    if (pango_language_includes_script (*p, script))
+      break;
+  result = *p;
+
+  g_hash_table_insert (hash, GINT_TO_POINTER (script), result);
+
+  return result;
+}
+
+/**
+ * pango_script_get_sample_language:
+ * @script: a #PangoScript
+ *
+ * Given a script, finds a language tag that is reasonably
+ * representative of that script. This will usually be the
+ * most widely spoken or used language written in that script:
+ * for instance, the sample language for %PANGO_SCRIPT_CYRILLIC
+ * is <literal>ru</literal> (Russian), the sample language
+ * for %PANGO_SCRIPT_ARABIC is <literal>ar</literal>.
+ *
+ * For some
+ * scripts, no sample language will be returned because there
+ * is no language that is sufficiently representative. The best
+ * example of this is %PANGO_SCRIPT_HAN, where various different
+ * variants of written Chinese, Japanese, and Korean all use
+ * significantly different sets of Han characters and forms
+ * of shared characters. No sample language can be provided
+ * for many historical scripts as well.
+ *
+ * As of 1.18, this function checks the environment variables
+ * PANGO_LANGUAGE and LANGUAGE (checked in that order) first.
+ * If one of them is set, it is parsed as a list of language tags
+ * separated by colons or other separators.  This function
+ * will return the first language in the parsed list that Pango
+ * believes may use @script for writing.  This last predicate
+ * is tested using pango_language_includes_script().  This can
+ * be used to control Pango's font selection for non-primary
+ * languages.  For example, a PANGO_LANGUAGE enviroment variable
+ * set to "en:fa" makes Pango choose fonts suitable for Persian (fa) 
+ * instead of Arabic (ar) when a segment of Arabic text is found
+ * in an otherwise non-Arabic text.  The same trick can be used to
+ * choose a default language for %PANGO_SCRIPT_HAN when setting
+ * context language is not feasible.
+ *
+ * Return value: a #PangoLanguage that is representative
+ * of the script, or %NULL if no such language exists.
+ *
+ * Since: 1.4
+ **/
+PangoLanguage *
+pango_script_get_sample_language (PangoScript script)
+{
+  /* Note that in the following, we want
+   * pango_language_includes_script() for the sample language
+   * to include the script, so alternate orthographies
+   * (Shavian for English, Osmanya for Somali, etc), typically
+   * have no sample language
+   */
+  static const char sample_languages[][4] = {
+    "",    /* PANGO_SCRIPT_COMMON */
+    "",    /* PANGO_SCRIPT_INHERITED */
+    "ar",  /* PANGO_SCRIPT_ARABIC */
+    "hy",  /* PANGO_SCRIPT_ARMENIAN */
+    "bn",  /* PANGO_SCRIPT_BENGALI */
+    /* Used primarily in Taiwan, but not part of the standard
+     * zh-tw orthography  */
+    "",    /* PANGO_SCRIPT_BOPOMOFO */
+    "chr", /* PANGO_SCRIPT_CHEROKEE */
+    "cop", /* PANGO_SCRIPT_COPTIC */
+    "ru",  /* PANGO_SCRIPT_CYRILLIC */
+    /* Deseret was used to write English */
+    "",    /* PANGO_SCRIPT_DESERET */
+    "hi",  /* PANGO_SCRIPT_DEVANAGARI */
+    "am",  /* PANGO_SCRIPT_ETHIOPIC */
+    "ka",  /* PANGO_SCRIPT_GEORGIAN */
+    "",    /* PANGO_SCRIPT_GOTHIC */
+    "el",  /* PANGO_SCRIPT_GREEK */
+    "gu",  /* PANGO_SCRIPT_GUJARATI */
+    "pa",  /* PANGO_SCRIPT_GURMUKHI */
+    "",    /* PANGO_SCRIPT_HAN */
+    "ko",  /* PANGO_SCRIPT_HANGUL */
+    "he",  /* PANGO_SCRIPT_HEBREW */
+    "ja",  /* PANGO_SCRIPT_HIRAGANA */
+    "kn",  /* PANGO_SCRIPT_KANNADA */
+    "ja",  /* PANGO_SCRIPT_KATAKANA */
+    "km",  /* PANGO_SCRIPT_KHMER */
+    "lo",  /* PANGO_SCRIPT_LAO */
+    "en",  /* PANGO_SCRIPT_LATIN */
+    "ml",  /* PANGO_SCRIPT_MALAYALAM */
+    "mn",  /* PANGO_SCRIPT_MONGOLIAN */
+    "my",  /* PANGO_SCRIPT_MYANMAR */
+    /* Ogham was used to write old Irish */
+    "",    /* PANGO_SCRIPT_OGHAM */
+    "",    /* PANGO_SCRIPT_OLD_ITALIC */
+    "or",  /* PANGO_SCRIPT_ORIYA */
+    "",    /* PANGO_SCRIPT_RUNIC */
+    "si",  /* PANGO_SCRIPT_SINHALA */
+    "syr", /* PANGO_SCRIPT_SYRIAC */
+    "ta",  /* PANGO_SCRIPT_TAMIL */
+    "te",  /* PANGO_SCRIPT_TELUGU */
+    "dv",  /* PANGO_SCRIPT_THAANA */
+    "th",  /* PANGO_SCRIPT_THAI */
+    "bo",  /* PANGO_SCRIPT_TIBETAN */
+    "iu",  /* PANGO_SCRIPT_CANADIAN_ABORIGINAL */
+    "",    /* PANGO_SCRIPT_YI */
+    "tl",  /* PANGO_SCRIPT_TAGALOG */
+    /* Phillipino languages/scripts */
+    "hnn", /* PANGO_SCRIPT_HANUNOO */
+    "bku", /* PANGO_SCRIPT_BUHID */
+    "tbw", /* PANGO_SCRIPT_TAGBANWA */
+
+    "",    /* PANGO_SCRIPT_BRAILLE */
+    "",    /* PANGO_SCRIPT_CYPRIOT */
+    "",    /* PANGO_SCRIPT_LIMBU */
+    /* Used for Somali (so) in the past */
+    "",    /* PANGO_SCRIPT_OSMANYA */
+    /* The Shavian alphabet was designed for English */
+    "",    /* PANGO_SCRIPT_SHAVIAN */
+    "",    /* PANGO_SCRIPT_LINEAR_B */
+    "",    /* PANGO_SCRIPT_TAI_LE */
+    "uga", /* PANGO_SCRIPT_UGARITIC */
+
+    "",    /* PANGO_SCRIPT_NEW_TAI_LUE */
+    "bug", /* PANGO_SCRIPT_BUGINESE */
+    /* The original script for Old Church Slavonic (chu), later
+     * written with Cyrillic */
+    "",    /* PANGO_SCRIPT_GLAGOLITIC */
+    /* Used for for Berber (ber), but Arabic script is more common */
+    "",    /* PANGO_SCRIPT_TIFINAGH */
+    "syl", /* PANGO_SCRIPT_SYLOTI_NAGRI */
+    "peo", /* PANGO_SCRIPT_OLD_PERSIAN */
+    "",    /* PANGO_SCRIPT_KHAROSHTHI */
+
+    "",    /* PANGO_SCRIPT_UNKNOWN */
+    "",    /* PANGO_SCRIPT_BALINESE */
+    "",    /* PANGO_SCRIPT_CUNEIFORM */
+    "",    /* PANGO_SCRIPT_PHOENICIAN */
+    "",    /* PANGO_SCRIPT_PHAGS_PA */
+    "nqo"  /* PANGO_SCRIPT_NKO */
+  };
+  const char *sample_language;
+  PangoLanguage *result;
+
+  g_return_val_if_fail (script >= 0, NULL);
+
+  if ((guint)script >= G_N_ELEMENTS (sample_languages))
+    return NULL;
+
+  result = _pango_script_get_default_language (script);
+  if (result)
+    return result;
+
+  sample_language = sample_languages[script];
+
+  if (!sample_language[0])
+    return NULL;
+  else
+    return pango_language_from_string (sample_language);
+}
diff --git a/pango/pango-language.h b/pango/pango-language.h
new file mode 100755 (executable)
index 0000000..37cdc16
--- /dev/null
@@ -0,0 +1,56 @@
+/* Pango
+ * pango-language.h: Language handling routines
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_LANGUAGE_H__
+#define __PANGO_LANGUAGE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoLanguage PangoLanguage;
+
+#define PANGO_TYPE_LANGUAGE (pango_language_get_type ())
+
+GType          pango_language_get_type    (void) G_GNUC_CONST;
+PangoLanguage *pango_language_from_string (const char *language);
+
+G_CONST_RETURN char *pango_language_to_string   (PangoLanguage *language) G_GNUC_CONST;
+/* For back compat.  Will have to keep indefinitely. */
+#define pango_language_to_string(language) ((const char *)language)
+
+G_CONST_RETURN char *pango_language_get_sample_string (PangoLanguage *language) G_GNUC_CONST;
+PangoLanguage *pango_language_get_default (void) G_GNUC_CONST;
+
+gboolean      pango_language_matches  (PangoLanguage *language,
+                                      const char *range_list) G_GNUC_PURE;
+
+#include <pango/pango-script.h>
+
+gboolean                   pango_language_includes_script (PangoLanguage *language,
+                                                           PangoScript    script) G_GNUC_PURE;
+G_CONST_RETURN PangoScript *pango_language_get_scripts    (PangoLanguage *language,
+                                                           int           *num_scripts);
+
+G_END_DECLS
+
+#endif /* __PANGO_LANGUAGE_H__ */
diff --git a/pango/pango-layout-private.h b/pango/pango-layout-private.h
new file mode 100755 (executable)
index 0000000..dc4f3d4
--- /dev/null
@@ -0,0 +1,88 @@
+/* Pango
+ * pango-layout-private.h: Internal structures of PangoLayout
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_LAYOUT_PRIVATE_H__
+#define __PANGO_LAYOUT_PRIVATE_H__
+
+#include <pango/pango-layout.h>
+
+G_BEGIN_DECLS
+
+struct _PangoLayout
+{
+  GObject parent_instance;
+
+  /* If you add fields to PangoLayout be sure to update _copy()
+   * unless you add a value between copy_begin and copy_end.
+   */
+
+  /* Referenced items */
+  PangoContext *context;
+  PangoAttrList *attrs;
+  PangoFontDescription *font_desc;
+  PangoTabArray *tabs;
+
+  /* Dupped */
+  gchar *text;
+
+  /* Value fields.  These will be memcpy'd in _copy() */
+  int copy_begin;
+
+  int length;                  /* length of text in bytes */
+  int n_chars;                 /* number of characters in layout */
+  int width;                   /* wrap/ellipsize width, in device units, or -1 if not set */
+  int height;                  /* ellipsize width, in device units if positive, number of lines if negative */
+  int indent;                  /* amount by which first line should be shorter */
+  int spacing;                 /* spacing between lines */
+
+  guint justify : 1;
+  guint alignment : 2;
+  guint single_paragraph : 1;
+  guint auto_dir : 1;
+  guint wrap : 2;              /* PangoWrapMode */
+  guint is_wrapped : 1;                /* Whether the layout has any wrapped lines */
+  guint ellipsize : 2;         /* PangoEllipsizeMode */
+  guint is_ellipsized : 1;     /* Whether the layout has any ellipsized lines */
+  int unknown_glyphs_count;    /* number of unknown glyphs */
+
+  /* some caching */
+  guint logical_rect_cached : 1;
+  guint ink_rect_cached : 1;
+  PangoRectangle logical_rect;
+  PangoRectangle ink_rect;
+  int tab_width;               /* Cached width of a tab. -1 == not yet calculated */
+
+  int copy_end;
+
+  /* Not copied during _copy() */
+
+  PangoLogAttr *log_attrs;     /* Logical attributes for layout's text */
+  GSList *lines;
+  guint line_count;            /* Number of lines in @lines. 0 if lines is %NULL */
+};
+
+gboolean _pango_layout_line_ellipsize (PangoLayoutLine *line,
+                                      PangoAttrList   *attrs,
+                                      int              goal_width);
+
+G_END_DECLS
+
+#endif /* __PANGO_LAYOUT_PRIVATE_H__ */
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
new file mode 100755 (executable)
index 0000000..77270c2
--- /dev/null
@@ -0,0 +1,6254 @@
+/* Pango
+ * pango-layout.c: High-level layout driver
+ *
+ * Copyright (C) 2000, 2001, 2006 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pango-glyph.h"               /* For pango_shape() */
+#include "pango-break.h"
+#include "pango-item.h"
+#include "pango-engine.h"
+#include "pango-impl-utils.h"
+#include "pango-glyph-item.h"
+#include <string.h>
+
+#include "pango-layout-private.h"
+
+
+typedef struct _Extents Extents;
+typedef struct _ItemProperties ItemProperties;
+typedef struct _ParaBreakState ParaBreakState;
+
+struct _Extents
+{
+  /* Vertical position of the line's baseline in layout coords */
+  int baseline;
+
+  /* Line extents in layout coords */
+  PangoRectangle ink_rect;
+  PangoRectangle logical_rect;
+};
+
+struct _ItemProperties
+{
+  PangoUnderline  uline;
+  gboolean        strikethrough;
+  gint            rise;
+  gint            letter_spacing;
+  gboolean        shape_set;
+  PangoRectangle *shape_ink_rect;
+  PangoRectangle *shape_logical_rect;
+};
+
+struct _PangoLayoutIter
+{
+  PangoLayout *layout;
+  GSList *line_list_link;
+  PangoLayoutLine *line;
+
+  /* If run is NULL, it means we're on a "virtual run"
+   * at the end of the line with 0 width
+   */
+  GSList *run_list_link;
+  PangoLayoutRun *run; /* FIXME nuke this, just keep the link */
+  int index;
+
+  /* list of Extents for each line in layout coordinates */
+  GSList *line_extents;
+  GSList *line_extents_link;
+
+  /* X position of the current run */
+  int run_x;
+
+  /* Width of the current run */
+  int run_width;
+
+  /* this run is left-to-right */
+  gboolean ltr;
+
+  /* X position of the left side of the current cluster */
+  int cluster_x;
+
+  /* The width of the current cluster */
+  int cluster_width;
+
+  /* glyph offset to the current cluster start */
+  int cluster_start;
+
+  /* first glyph in the next cluster */
+  int next_cluster_glyph;
+
+  /* number of Unicode chars in current cluster */
+  int cluster_num_chars;
+
+  /* visual position of current character within the cluster */
+  int character_position;
+
+  /* the real width of layout */
+  int layout_width;
+};
+
+typedef struct _PangoLayoutLinePrivate PangoLayoutLinePrivate;
+
+struct _PangoLayoutLinePrivate
+{
+  PangoLayoutLine line;
+  guint ref_count;
+
+  /* Extents cache status:
+   *
+   * LEAKED means that the user has access to this line structure or a
+   * run included in this line, and so can change the glyphs/glyph-widths.
+   * If this is true, extents caching will be disabled.
+   */
+  enum {
+    NOT_CACHED,
+    CACHED,
+    LEAKED
+  } cache_status;
+  PangoRectangle ink_rect;
+  PangoRectangle logical_rect;
+};
+
+struct _PangoLayoutClass
+{
+  GObjectClass parent_class;
+
+
+};
+
+#define LINE_IS_VALID(line) ((line)->layout != NULL)
+
+#ifdef G_DISABLE_CHECKS
+#define ITER_IS_INVALID(iter) FALSE
+#else
+#define ITER_IS_INVALID(iter) G_UNLIKELY (check_invalid ((iter), G_STRLOC))
+static gboolean
+check_invalid (PangoLayoutIter *iter,
+              const char      *loc)
+{
+  if (iter->line->layout == NULL)
+    {
+      g_warning ("%s: PangoLayout changed since PangoLayoutIter was created, iterator invalid", loc);
+      return TRUE;
+    }
+  else
+    {
+      return FALSE;
+    }
+}
+#endif
+
+static void pango_layout_clear_lines (PangoLayout *layout);
+static void pango_layout_check_lines (PangoLayout *layout);
+
+static PangoAttrList *pango_layout_get_effective_attributes (PangoLayout *layout);
+
+static PangoLayoutLine * pango_layout_line_new         (PangoLayout     *layout);
+static void              pango_layout_line_postprocess (PangoLayoutLine *line,
+                                                       ParaBreakState  *state,
+                                                       gboolean         wrapped);
+
+static int *pango_layout_line_get_log2vis_map (PangoLayoutLine  *line,
+                                              gboolean          strong);
+static int *pango_layout_line_get_vis2log_map (PangoLayoutLine  *line,
+                                              gboolean          strong);
+static void pango_layout_line_leaked (PangoLayoutLine *line);
+
+/* doesn't leak line */
+static PangoLayoutLine* _pango_layout_iter_get_line (PangoLayoutIter *iter);
+
+static void pango_layout_get_item_properties (PangoItem      *item,
+                                             ItemProperties *properties);
+
+static void pango_layout_get_empty_extents_at_index (PangoLayout    *layout,
+                                                    int             index,
+                                                    PangoRectangle *logical_rect);
+
+static void pango_layout_finalize    (GObject          *object);
+
+G_DEFINE_TYPE (PangoLayout, pango_layout, G_TYPE_OBJECT)
+
+static void
+pango_layout_init (PangoLayout *layout)
+{
+  layout->attrs = NULL;
+  layout->font_desc = NULL;
+  layout->text = NULL;
+  layout->length = 0;
+  layout->width = -1;
+  layout->height = -1;
+  layout->indent = 0;
+
+  layout->alignment = PANGO_ALIGN_LEFT;
+  layout->justify = FALSE;
+  layout->auto_dir = TRUE;
+
+  layout->log_attrs = NULL;
+  layout->lines = NULL;
+  layout->line_count = 0;
+
+  layout->tab_width = -1;
+  layout->unknown_glyphs_count = -1;
+
+  layout->wrap = PANGO_WRAP_WORD;
+  layout->is_wrapped = FALSE;
+  layout->ellipsize = PANGO_ELLIPSIZE_NONE;
+  layout->is_ellipsized = FALSE;
+}
+
+static void
+pango_layout_class_init (PangoLayoutClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = pango_layout_finalize;
+}
+
+static void
+pango_layout_finalize (GObject *object)
+{
+  PangoLayout *layout;
+
+  layout = PANGO_LAYOUT (object);
+
+  pango_layout_clear_lines (layout);
+
+  if (layout->context)
+    g_object_unref (layout->context);
+
+  if (layout->attrs)
+    pango_attr_list_unref (layout->attrs);
+
+  g_free (layout->text);
+
+  if (layout->font_desc)
+    pango_font_description_free (layout->font_desc);
+
+  if (layout->tabs)
+    pango_tab_array_free (layout->tabs);
+
+  G_OBJECT_CLASS (pango_layout_parent_class)->finalize (object);
+}
+
+
+/**
+ * pango_layout_new:
+ * @context: a #PangoContext
+ *
+ * Create a new #PangoLayout object with attributes initialized to
+ * default values for a particular #PangoContext.
+ *
+ * Return value: the newly allocated #PangoLayout, with a reference
+ *               count of one, which should be freed with
+ *               g_object_unref().
+ **/
+PangoLayout *
+pango_layout_new (PangoContext *context)
+{
+  PangoLayout *layout;
+
+  g_return_val_if_fail (context != NULL, NULL);
+
+  layout = g_object_new (PANGO_TYPE_LAYOUT, NULL);
+
+  layout->context = context;
+  g_object_ref (context);
+
+  return layout;
+}
+
+/**
+ * pango_layout_copy:
+ * @src: a #PangoLayout
+ *
+ * Does a deep copy-by-value of the @src layout. The attribute list,
+ * tab array, and text from the original layout are all copied by
+ * value.
+ *
+ * Return value: the newly allocated #PangoLayout, with a reference
+ *               count of one, which should be freed with
+ *               g_object_unref().
+ **/
+PangoLayout*
+pango_layout_copy (PangoLayout *src)
+{
+  PangoLayout *layout;
+
+  g_return_val_if_fail (PANGO_IS_LAYOUT (src), NULL);
+
+  /* Copy referenced members */
+
+  layout = pango_layout_new (src->context);
+  if (src->attrs)
+    layout->attrs = pango_attr_list_copy (src->attrs);
+  if (src->font_desc)
+    layout->font_desc = pango_font_description_copy (src->font_desc);
+  if (src->tabs)
+    layout->tabs = pango_tab_array_copy (src->tabs);
+
+  /* Dupped */
+  layout->text = g_strdup (src->text);
+
+  /* Value fields */
+  memcpy (&layout->copy_begin, &src->copy_begin,
+         G_STRUCT_OFFSET (PangoLayout, copy_end) - G_STRUCT_OFFSET (PangoLayout, copy_begin));
+
+  return layout;
+}
+
+/**
+ * pango_layout_get_context:
+ * @layout: a #PangoLayout
+ *
+ * Retrieves the #PangoContext used for this layout.
+ *
+ * Return value: the #PangoContext for the layout. This does not
+ * have an additional refcount added, so if you want to keep
+ * a copy of this around, you must reference it yourself.
+ **/
+PangoContext *
+pango_layout_get_context (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, NULL);
+
+  return layout->context;
+}
+
+/**
+ * pango_layout_set_width:
+ * @layout: a #PangoLayout.
+ * @width: the desired width in Pango units, or -1 to indicate that no
+ *         wrapping or ellipsization should be performed.
+ *
+ * Sets the width to which the lines of the #PangoLayout should wrap or
+ * ellipsized.  The default value is -1: no width set.
+ **/
+void
+pango_layout_set_width (PangoLayout *layout,
+                       int          width)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (width != layout->width)
+    {
+      layout->width = width;
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_width:
+ * @layout: a #PangoLayout
+ *
+ * Gets the width to which the lines of the #PangoLayout should wrap.
+ *
+ * Return value: the width in Pango units, or -1 if no width set.
+ **/
+int
+pango_layout_get_width (PangoLayout    *layout)
+{
+  g_return_val_if_fail (layout != NULL, 0);
+  return layout->width;
+}
+
+/**
+ * pango_layout_set_height:
+ * @layout: a #PangoLayout.
+ * @height: the desired height of the layout in Pango units if positive,
+ *          or desired number of lines if negative.
+ *
+ * Sets the height to which the #PangoLayout should be ellipsized at.  There
+ * are two different behaviors, based on whether @height is positive or
+ * negative.
+ *
+ * If @height is positive, it will be the maximum height of the layout.  Only
+ * lines would be shown that would fit, and if there is any text omitted,
+ * an ellipsis added.  At least one line is included in each paragraph regardless
+ * of how small the height value is.  A value of zero will render exactly one
+ * line for the entire layout.
+ *
+ * If @height is negative, it will be the (negative of) maximum number of lines per
+ * paragraph.  That is, the total number of lines shown may well be more than
+ * this value if the layout contains multiple paragraphs of text.
+ * The default value of -1 means that first line of each paragraph is ellipsized.
+ * This behvaior may be changed in the future to act per layout instead of per
+ * paragraph.  File a bug against pango at <ulink
+ * url="http://bugzilla.gnome.org/">http://bugzilla.gnome.org/</ulink> if your
+ * code relies on this behavior.
+ *
+ * Height setting only has effect if a positive width is set on
+ * @layout and ellipsization mode of @layout is not %PANGO_ELLIPSIZE_NONE.
+ * The behavior is undefined if a height other than -1 is set and
+ * ellipsization mode is set to %PANGO_ELLIPSIZE_NONE, and may change in the
+ * future.
+ *
+ * Since: 1.20
+ **/
+void
+pango_layout_set_height (PangoLayout *layout,
+                        int          height)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (height != layout->height)
+    {
+      layout->height = height;
+
+      /* Do not invalidate if the number of lines requested is
+       * larger than the total number of lines in layout.
+       * Bug 549003
+       */
+      if (layout->ellipsize != PANGO_ELLIPSIZE_NONE &&
+         !(layout->lines && layout->is_ellipsized == FALSE &&
+           height < 0 && layout->line_count <= (guint) -height))
+       pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_height:
+ * @layout: a #PangoLayout
+ *
+ * Gets the height of layout used for ellipsization.  See
+ * pango_layout_set_height() for details.
+ *
+ * Return value: the height, in Pango units if positive, or
+ * number of lines if negative.
+ *
+ * Since: 1.20
+ **/
+int
+pango_layout_get_height (PangoLayout    *layout)
+{
+  g_return_val_if_fail (layout != NULL, 0);
+  return layout->height;
+}
+
+/**
+ * pango_layout_set_wrap:
+ * @layout: a #PangoLayout
+ * @wrap: the wrap mode
+ *
+ * Sets the wrap mode; the wrap mode only has effect if a width
+ * is set on the layout with pango_layout_set_width().
+ * To turn off wrapping, set the width to -1.
+ **/
+void
+pango_layout_set_wrap (PangoLayout  *layout,
+                      PangoWrapMode wrap)
+{
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  if (layout->wrap != wrap)
+    {
+      layout->wrap = wrap;
+
+      if (layout->width != -1)
+       pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_wrap:
+ * @layout: a #PangoLayout
+ *
+ * Gets the wrap mode for the layout.
+ *
+ * Use pango_layout_is_wrapped() to query whether any paragraphs
+ * were actually wrapped.
+ *
+ * Return value: active wrap mode.
+ **/
+PangoWrapMode
+pango_layout_get_wrap (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), 0);
+
+  return layout->wrap;
+}
+
+/**
+ * pango_layout_is_wrapped:
+ * @layout: a #PangoLayout
+ *
+ * Queries whether the layout had to wrap any paragraphs.
+ *
+ * This returns %TRUE if a positive width is set on @layout,
+ * ellipsization mode of @layout is set to %PANGO_ELLIPSIZE_NONE,
+ * and there are paragraphs exceeding the layout width that have
+ * to be wrapped.
+ *
+ * Return value: %TRUE if any paragraphs had to be wrapped, %FALSE
+ * otherwise.
+ *
+ * Since: 1.16
+ */
+gboolean
+pango_layout_is_wrapped (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, FALSE);
+
+  pango_layout_check_lines (layout);
+
+  return layout->is_wrapped;
+}
+
+/**
+ * pango_layout_set_indent
+ * @layout: a #PangoLayout.
+ * @indent: the amount by which to indent.
+ *
+ * Sets the width in Pango units to indent each paragraph. A negative value
+ * of @indent will produce a hanging indentation. That is, the first line will
+ * have the full width, and subsequent lines will be indented by the
+ * absolute value of @indent.
+ *
+ * The indent setting is ignored if layout alignment is set to
+ * %PANGO_ALIGN_CENTER.
+ **/
+void
+pango_layout_set_indent (PangoLayout *layout,
+                        int          indent)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (indent != layout->indent)
+    {
+      layout->indent = indent;
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_indent:
+ * @layout: a #PangoLayout
+ *
+ * Gets the paragraph indent width in Pango units. A negative value
+ * indicates a hanging indentation.
+ *
+ * Return value: the indent in Pango units.
+ **/
+int
+pango_layout_get_indent (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, 0);
+  return layout->indent;
+}
+
+/**
+ * pango_layout_set_spacing:
+ * @layout: a #PangoLayout.
+ * @spacing: the amount of spacing
+ *
+ * Sets the amount of spacing in Pango unit between the lines of the
+ * layout.
+ **/
+void
+pango_layout_set_spacing (PangoLayout *layout,
+                         int          spacing)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (spacing != layout->spacing)
+    {
+      layout->spacing = spacing;
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_spacing:
+ * @layout: a #PangoLayout
+ *
+ * Gets the amount of spacing between the lines of the layout.
+ *
+ * Return value: the spacing in Pango units.
+ **/
+int
+pango_layout_get_spacing (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, 0);
+  return layout->spacing;
+}
+
+/**
+ * pango_layout_set_attributes:
+ * @layout: a #PangoLayout
+ * @attrs: a #PangoAttrList, can be %NULL
+ *
+ * Sets the text attributes for a layout object.
+ * References @attrs, so the caller can unref its reference.
+ **/
+void
+pango_layout_set_attributes (PangoLayout   *layout,
+                            PangoAttrList *attrs)
+{
+  PangoAttrList *old_attrs;
+  g_return_if_fail (layout != NULL);
+
+  old_attrs = layout->attrs;
+
+  /* We always clear lines such that this function can be called
+   * whenever attrs changes.
+   */
+
+  layout->attrs = attrs;
+  if (layout->attrs)
+    pango_attr_list_ref (layout->attrs);
+  pango_layout_clear_lines (layout);
+
+  if (old_attrs)
+    pango_attr_list_unref (old_attrs);
+  layout->tab_width = -1;
+}
+
+/**
+ * pango_layout_get_attributes:
+ * @layout: a #PangoLayout
+ *
+ * Gets the attribute list for the layout, if any.
+ *
+ * Return value: a #PangoAttrList.
+ **/
+PangoAttrList*
+pango_layout_get_attributes (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), NULL);
+
+  return layout->attrs;
+}
+
+/**
+ * pango_layout_set_font_description:
+ * @layout: a #PangoLayout
+ * @desc: the new #PangoFontDescription, or %NULL to unset the
+ *        current font description
+ *
+ * Sets the default font description for the layout. If no font
+ * description is set on the layout, the font description from
+ * the layout's context is used.
+ **/
+void
+pango_layout_set_font_description (PangoLayout                 *layout,
+                                   const PangoFontDescription *desc)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (desc != layout->font_desc &&
+      (!desc || !layout->font_desc || !pango_font_description_equal(desc, layout->font_desc)))
+    {
+      if (layout->font_desc)
+       pango_font_description_free (layout->font_desc);
+
+      layout->font_desc = desc ? pango_font_description_copy (desc) : NULL;
+
+      pango_layout_clear_lines (layout);
+      layout->tab_width = -1;
+    }
+}
+
+/**
+ * pango_layout_get_font_description:
+ * @layout: a #PangoLayout
+ *
+ * Gets the font description for the layout, if any.
+ *
+ * Return value: a pointer to the layout's font description,
+ *  or %NULL if the font description from the layout's
+ *  context is inherited. This value is owned by the layout
+ *  and must not be modified or freed.
+ *
+ * Since: 1.8
+ **/
+G_CONST_RETURN PangoFontDescription *
+pango_layout_get_font_description (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), NULL);
+
+  return layout->font_desc;
+}
+
+/**
+ * pango_layout_set_justify:
+ * @layout: a #PangoLayout
+ * @justify: whether the lines in the layout should be justified.
+ *
+ * Sets whether each complete line should be stretched to
+ * fill the entire width of the layout. This stretching is typically
+ * done by adding whitespace, but for some scripts (such as Arabic),
+ * the justification may be done in more complex ways, like extending
+ * the characters.
+ *
+ * Note that this setting is not implemented and so is ignored in Pango
+ * older than 1.18.
+ **/
+void
+pango_layout_set_justify (PangoLayout *layout,
+                         gboolean     justify)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (justify != layout->justify)
+    {
+      layout->justify = justify;
+
+      if (layout->is_ellipsized || layout->is_wrapped)
+       pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_justify:
+ * @layout: a #PangoLayout
+ *
+ * Gets whether each complete line should be stretched to fill the entire
+ * width of the layout.
+ *
+ * Return value: the justify.
+ **/
+gboolean
+pango_layout_get_justify (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, FALSE);
+  return layout->justify;
+}
+
+/**
+ * pango_layout_set_auto_dir:
+ * @layout: a #PangoLayout
+ * @auto_dir: if %TRUE, compute the bidirectional base direction
+ *   from the layout's contents.
+ *
+ * Sets whether to calculate the bidirectional base direction
+ * for the layout according to the contents of the layout;
+ * when this flag is on (the default), then paragraphs in
+   @layout that begin with strong right-to-left characters
+ * (Arabic and Hebrew principally), will have right-to-left
+ * layout, paragraphs with letters from other scripts will
+ * have left-to-right layout. Paragraphs with only neutral
+ * characters get their direction from the surrounding paragraphs.
+ *
+ * When %FALSE, the choice between left-to-right and
+ * right-to-left layout is done according to the base direction
+ * of the layout's #PangoContext. (See pango_context_set_base_dir()).
+ *
+ * When the auto-computed direction of a paragraph differs from the
+ * base direction of the context, the interpretation of
+ * %PANGO_ALIGN_LEFT and %PANGO_ALIGN_RIGHT are swapped.
+ *
+ * Since: 1.4
+ **/
+void
+pango_layout_set_auto_dir (PangoLayout *layout,
+                          gboolean     auto_dir)
+{
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  auto_dir = auto_dir != FALSE;
+
+  if (auto_dir != layout->auto_dir)
+    {
+      layout->auto_dir = auto_dir;
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_auto_dir:
+ * @layout: a #PangoLayout
+ *
+ * Gets whether to calculate the bidirectional base direction
+ * for the layout according to the contents of the layout.
+ * See pango_layout_set_auto_dir().
+ *
+ * Return value: %TRUE if the bidirectional base direction
+ *   is computed from the layout's contents, %FALSE otherwise.
+ *
+ * Since: 1.4
+ **/
+gboolean
+pango_layout_get_auto_dir (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), FALSE);
+
+  return layout->auto_dir;
+}
+
+/**
+ * pango_layout_set_alignment:
+ * @layout: a #PangoLayout
+ * @alignment: the alignment
+ *
+ * Sets the alignment for the layout: how partial lines are
+ * positioned within the horizontal space available.
+ **/
+void
+pango_layout_set_alignment (PangoLayout   *layout,
+                           PangoAlignment alignment)
+{
+  g_return_if_fail (layout != NULL);
+
+  if (alignment != layout->alignment)
+    {
+      layout->alignment = alignment;
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_alignment:
+ * @layout: a #PangoLayout
+ *
+ * Gets the alignment for the layout: how partial lines are
+ * positioned within the horizontal space available.
+ *
+ * Return value: the alignment.
+ **/
+PangoAlignment
+pango_layout_get_alignment (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, PANGO_ALIGN_LEFT);
+  return layout->alignment;
+}
+
+
+/**
+ * pango_layout_set_tabs:
+ * @layout: a #PangoLayout
+ * @tabs: a #PangoTabArray, or %NULL
+ *
+ * Sets the tabs to use for @layout, overriding the default tabs
+ * (by default, tabs are every 8 spaces). If @tabs is %NULL, the default
+ * tabs are reinstated. @tabs is copied into the layout; you must
+ * free your copy of @tabs yourself.
+ **/
+void
+pango_layout_set_tabs (PangoLayout   *layout,
+                      PangoTabArray *tabs)
+{
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+
+  if (tabs != layout->tabs)
+    {
+      if (layout->tabs)
+       pango_tab_array_free (layout->tabs);
+
+      layout->tabs = tabs ? pango_tab_array_copy (tabs) : NULL;
+
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_tabs:
+ * @layout: a #PangoLayout
+ *
+ * Gets the current #PangoTabArray used by this layout. If no
+ * #PangoTabArray has been set, then the default tabs are in use
+ * and %NULL is returned. Default tabs are every 8 spaces.
+ * The return value should be freed with pango_tab_array_free().
+ *
+ * Return value: a copy of the tabs for this layout, or %NULL.
+ **/
+PangoTabArray*
+pango_layout_get_tabs (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), NULL);
+
+  if (layout->tabs)
+    return pango_tab_array_copy (layout->tabs);
+  else
+    return NULL;
+}
+
+/**
+ * pango_layout_set_single_paragraph_mode:
+ * @layout: a #PangoLayout
+ * @setting: new setting
+ *
+ * If @setting is %TRUE, do not treat newlines and similar characters
+ * as paragraph separators; instead, keep all text in a single paragraph,
+ * and display a glyph for paragraph separator characters. Used when
+ * you want to allow editing of newlines on a single text line.
+ **/
+void
+pango_layout_set_single_paragraph_mode (PangoLayout *layout,
+                                       gboolean     setting)
+{
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  setting = setting != FALSE;
+
+  if (layout->single_paragraph != setting)
+    {
+      layout->single_paragraph = setting;
+
+      pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_single_paragraph_mode:
+ * @layout: a #PangoLayout
+ *
+ * Obtains the value set by pango_layout_set_single_paragraph_mode().
+ *
+ * Return value: %TRUE if the layout does not break paragraphs at
+ * paragraph separator characters, %FALSE otherwise.
+ **/
+gboolean
+pango_layout_get_single_paragraph_mode (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), FALSE);
+
+  return layout->single_paragraph;
+}
+
+/**
+ * pango_layout_set_ellipsize:
+ * @layout: a #PangoLayout
+ * @ellipsize: the new ellipsization mode for @layout
+ *
+ * Sets the type of ellipsization being performed for @layout.
+ * Depending on the ellipsization mode @ellipsize text is
+ * removed from the start, middle, or end of text so they
+ * fit within the width and height of layout set with
+ * pango_layout_set_width() and pango_layout_set_height().
+ *
+ * If the layout contains characters such as newlines that
+ * force it to be layed out in multiple paragraphs, then whether
+ * each paragraph is ellipsized separately or the entire layout
+ * is ellipsized as a whole depends on the set height of the layout.
+ * See pango_layout_set_height() for details.
+ *
+ * Since: 1.6
+ **/
+void
+pango_layout_set_ellipsize (PangoLayout        *layout,
+                           PangoEllipsizeMode  ellipsize)
+{
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  if (ellipsize != layout->ellipsize)
+    {
+      layout->ellipsize = ellipsize;
+
+      if (layout->is_ellipsized || layout->is_wrapped)
+       pango_layout_clear_lines (layout);
+    }
+}
+
+/**
+ * pango_layout_get_ellipsize:
+ * @layout: a #PangoLayout
+ *
+ * Gets the type of ellipsization being performed for @layout.
+ * See pango_layout_set_ellipsize()
+ *
+ * Return value: the current ellipsization mode for @layout.
+ *
+ * Use pango_layout_is_ellipsized() to query whether any paragraphs
+ * were actually ellipsized.
+ *
+ * Since: 1.6
+ **/
+PangoEllipsizeMode
+pango_layout_get_ellipsize (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), PANGO_ELLIPSIZE_NONE);
+
+  return layout->ellipsize;
+}
+
+/**
+ * pango_layout_is_ellipsized:
+ * @layout: a #PangoLayout
+ *
+ * Queries whether the layout had to ellipsize any paragraphs.
+ *
+ * This returns %TRUE if the ellipsization mode for @layout
+ * is not %PANGO_ELLIPSIZE_NONE, a positive width is set on @layout,
+ * and there are paragraphs exceeding that width that have to be
+ * ellipsized.
+ *
+ * Return value: %TRUE if any paragraphs had to be ellipsized, %FALSE
+ * otherwise.
+ *
+ * Since: 1.16
+ */
+gboolean
+pango_layout_is_ellipsized (PangoLayout *layout)
+{
+  g_return_val_if_fail (layout != NULL, FALSE);
+
+  pango_layout_check_lines (layout);
+
+  return layout->is_ellipsized;
+}
+
+/**
+ * pango_layout_set_text:
+ * @layout: a #PangoLayout
+ * @text: a valid UTF-8 string
+ * @length: maximum length of @text, in bytes. -1 indicates that
+ *          the string is nul-terminated and the length should be
+ *          calculated.  The text will also be truncated on
+ *          encountering a nul-termination even when @length is
+ *          positive.
+ *
+ * Sets the text of the layout.
+ *
+ * Note that if you have used
+ * pango_layout_set_markup() or pango_layout_set_markup_with_accel() on
+ * @layout before, you may want to call pango_layout_set_attributes() to clear
+ * the attributes set on the layout from the markup as this function does not
+ * clear attributes.
+ **/
+void
+pango_layout_set_text (PangoLayout *layout,
+                      const char  *text,
+                      int          length)
+{
+  char *old_text, *start, *end;
+
+  g_return_if_fail (layout != NULL);
+  g_return_if_fail (length == 0 || text != NULL);
+
+  old_text = layout->text;
+
+  if (length < 0)
+    layout->text = g_strdup (text);
+  else if (length > 0)
+    /* This is not exactly what we want.  We don't need the padding...
+     */
+    layout->text = g_strndup (text, length);
+  else
+    layout->text = g_malloc0 (1);
+
+  layout->length = strlen (layout->text);
+
+  /* validate it, and replace invalid bytes with '?'
+   */
+  start = layout->text;
+  for (;;) {
+    gboolean valid;
+
+    valid = g_utf8_validate (start, -1, (const char **)&end);
+
+    if (!*end)
+      break;
+
+    /* Replace invalid bytes with -1.  The -1 will be converted to
+     * ((gunichar) -1) by glib, and that in turn yields a glyph value of
+     * ((PangoGlyph) -1) by PANGO_GET_UNKNOWN_GLYPH(-1),
+     * and that's PANGO_GLYPH_INVALID_INPUT.
+     */
+    if (!valid)
+      *end++ = -1;
+
+    start = end;
+  }
+
+  if (start != layout->text)
+    /* TODO: Write out the beginning excerpt of text? */
+    g_warning ("Invalid UTF-8 string passed to pango_layout_set_text()");
+
+  layout->n_chars = pango_utf8_strlen (layout->text, -1);
+
+  pango_layout_clear_lines (layout);
+
+  g_free (old_text);
+}
+
+/**
+ * pango_layout_get_text:
+ * @layout: a #PangoLayout
+ *
+ * Gets the text in the layout. The returned text should not
+ * be freed or modified.
+ *
+ * Return value: the text in the @layout.
+ **/
+G_CONST_RETURN char*
+pango_layout_get_text (PangoLayout *layout)
+{
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), NULL);
+
+  return layout->text;
+}
+
+/**
+ * pango_layout_set_markup:
+ * @layout: a #PangoLayout
+ * @markup: marked-up text
+ * @length: length of marked-up text in bytes, or -1 if @markup is
+ * nul-terminated
+ *
+ * Same as pango_layout_set_markup_with_accel(), but
+ * the markup text isn't scanned for accelerators.
+ *
+ **/
+void
+pango_layout_set_markup (PangoLayout *layout,
+                        const char  *markup,
+                        int          length)
+{
+  pango_layout_set_markup_with_accel (layout, markup, length, 0, NULL);
+}
+
+/**
+ * pango_layout_set_markup_with_accel:
+ * @layout: a #PangoLayout
+ * @markup: marked-up text
+ * (see <link linkend="PangoMarkupFormat">markup format</link>)
+ * @length: length of marked-up text in bytes, or -1 if @markup is
+ * nul-terminated
+ * @accel_marker: marker for accelerators in the text
+ * @accel_char: return location for first located accelerator, or %NULL
+ *
+ * Sets the layout text and attribute list from marked-up text (see
+ * <link linkend="PangoMarkupFormat">markup format</link>). Replaces
+ * the current text and attribute list.
+ *
+ * If @accel_marker is nonzero, the given character will mark the
+ * character following it as an accelerator. For example, @accel_marker
+ * might be an ampersand or underscore. All characters marked
+ * as an accelerator will receive a %PANGO_UNDERLINE_LOW attribute,
+ * and the first character so marked will be returned in @accel_char.
+ * Two @accel_marker characters following each other produce a single
+ * literal @accel_marker character.
+ **/
+void
+pango_layout_set_markup_with_accel (PangoLayout    *layout,
+                                   const char     *markup,
+                                   int             length,
+                                   gunichar        accel_marker,
+                                   gunichar       *accel_char)
+{
+  PangoAttrList *list = NULL;
+  char *text = NULL;
+  GError *error;
+
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+  g_return_if_fail (markup != NULL);
+
+  error = NULL;
+  if (!pango_parse_markup (markup, length,
+                          accel_marker,
+                          &list, &text,
+                          accel_char,
+                          &error))
+    {
+      g_warning ("pango_layout_set_markup_with_accel: %s", error->message);
+      g_error_free (error);
+      return;
+    }
+
+  pango_layout_set_text (layout, text, -1);
+  pango_layout_set_attributes (layout, list);
+  pango_attr_list_unref (list);
+  g_free (text);
+}
+
+/**
+ * pango_layout_get_unknown_glyphs_count:
+ * @layout: a #PangoLayout
+ *
+ * Counts the number unknown glyphs in @layout.  That is, zero if
+ * glyphs for all characters in the layout text were found, or more
+ * than zero otherwise.
+ *
+ * This function can be used to determine if there are any fonts
+ * available to render all characters in a certain string, or when
+ * used in combination with %PANGO_ATTR_FALLBACK, to check if a
+ * certain font supports all the characters in the string.
+ *
+ * Return value: The number of unknown glyphs in @layout.
+ *
+ * Since: 1.16
+ */
+int
+pango_layout_get_unknown_glyphs_count (PangoLayout *layout)
+{
+    PangoLayoutLine *line;
+    PangoLayoutRun *run;
+    GSList *lines_list;
+    GSList *runs_list;
+    int i, count = 0;
+
+    g_return_val_if_fail (PANGO_IS_LAYOUT (layout), 0);
+
+    pango_layout_check_lines (layout);
+
+    if (layout->unknown_glyphs_count >= 0)
+      return layout->unknown_glyphs_count;
+
+    lines_list = layout->lines;
+    while (lines_list)
+      {
+       line = lines_list->data;
+       runs_list = line->runs;
+
+       while (runs_list)
+         {
+           run = runs_list->data;
+
+           for (i = 0; i < run->glyphs->num_glyphs; i++)
+             {
+               if (run->glyphs->glyphs[i].glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+                   count++;
+             }
+
+           runs_list = runs_list->next;
+         }
+       lines_list = lines_list->next;
+      }
+
+    layout->unknown_glyphs_count = count;
+    return count;
+}
+
+/**
+ * pango_layout_context_changed:
+ * @layout: a #PangoLayout
+ *
+ * Forces recomputation of any state in the #PangoLayout that
+ * might depend on the layout's context. This function should
+ * be called if you make changes to the context subsequent
+ * to creating the layout.
+ **/
+void
+pango_layout_context_changed (PangoLayout *layout)
+{
+  pango_layout_clear_lines (layout);
+  layout->tab_width = -1;
+}
+
+/**
+ * pango_layout_get_log_attrs:
+ * @layout: a #PangoLayout
+ * @attrs: location to store a pointer to an array of logical attributes
+ *         This value must be freed with g_free().
+ * @n_attrs: location to store the number of the attributes in the
+ *           array. (The stored value will be one more than the total number
+ *           of characters in the layout, since there need to be attributes
+ *           corresponding to both the position before the first character
+ *           and the position after the last character.)
+ *
+ * Retrieves an array of logical attributes for each character in
+ * the @layout.
+ **/
+void
+pango_layout_get_log_attrs (PangoLayout    *layout,
+                           PangoLogAttr  **attrs,
+                           gint           *n_attrs)
+{
+  g_return_if_fail (layout != NULL);
+
+  pango_layout_check_lines (layout);
+
+  if (attrs)
+    {
+      *attrs = g_new (PangoLogAttr, layout->n_chars + 1);
+      memcpy (*attrs, layout->log_attrs, sizeof(PangoLogAttr) * (layout->n_chars + 1));
+    }
+
+  if (n_attrs)
+    *n_attrs = layout->n_chars + 1;
+}
+
+
+/**
+ * pango_layout_get_line_count:
+ * @layout: #PangoLayout
+ *
+ * Retrieves the count of lines for the @layout.
+ *
+ * Return value: the line count.
+ **/
+int
+pango_layout_get_line_count (PangoLayout   *layout)
+{
+  g_return_val_if_fail (layout != NULL, 0);
+
+  pango_layout_check_lines (layout);
+  return layout->line_count;
+}
+
+/**
+ * pango_layout_get_lines:
+ * @layout: a #PangoLayout
+ *
+ * Returns the lines of the @layout as a list.
+ *
+ * Use the faster pango_layout_get_lines_readonly() if you do not plan
+ * to modify the contents of the lines (glyphs, glyph widths, etc.).
+ *
+ * Return value: (element-type Pango.LayoutLine): (transfer none): a #GSList containing
+ * the lines in the layout. This points to internal data of the #PangoLayout
+ * and must be used with care. It will become invalid on any change to the layout's
+ * text or properties.
+ **/
+GSList *
+pango_layout_get_lines (PangoLayout *layout)
+{
+  pango_layout_check_lines (layout);
+
+  if (layout->lines)
+    {
+      GSList *tmp_list = layout->lines;
+      while (tmp_list)
+       {
+         PangoLayoutLine *line = tmp_list->data;
+         tmp_list = tmp_list->next;
+
+         pango_layout_line_leaked (line);
+       }
+    }
+
+  return layout->lines;
+}
+
+/**
+ * pango_layout_get_lines_readonly:
+ * @layout: a #PangoLayout
+ *
+ * Returns the lines of the @layout as a list.
+ *
+ * This is a faster alternative to pango_layout_get_lines(),
+ * but the user is not expected
+ * to modify the contents of the lines (glyphs, glyph widths, etc.).
+ *
+ * Return value: (element-type Pango.LayoutLine): (transfer none): a #GSList containing
+ * the lines in the layout. This points to internal data of the #PangoLayout and
+ * must be used with care. It will become invalid on any change to the layout's
+ * text or properties.  No changes should be made to the lines.
+ *
+ * Since: 1.16
+ **/
+GSList *
+pango_layout_get_lines_readonly (PangoLayout *layout)
+{
+  pango_layout_check_lines (layout);
+
+  return layout->lines;
+}
+
+/**
+ * pango_layout_get_line:
+ * @layout: a #PangoLayout
+ * @line: the index of a line, which must be between 0 and
+ *        <literal>pango_layout_get_line_count(layout) - 1</literal>, inclusive.
+ *
+ * Retrieves a particular line from a #PangoLayout.
+ *
+ * Use the faster pango_layout_get_line_readonly() if you do not plan
+ * to modify the contents of the line (glyphs, glyph widths, etc.).
+ *
+ * Return value: the requested #PangoLayoutLine, or %NULL if the
+ *               index is out of range. This layout line can
+ *               be ref'ed and retained, but will become invalid
+ *               if changes are made to the #PangoLayout.
+ **/
+PangoLayoutLine *
+pango_layout_get_line (PangoLayout *layout,
+                      int          line)
+{
+  GSList *list_item;
+  g_return_val_if_fail (layout != NULL, NULL);
+  g_return_val_if_fail (line >= 0, NULL);
+
+  if (line < 0)
+    return NULL;
+
+  pango_layout_check_lines (layout);
+
+  list_item = g_slist_nth (layout->lines, line);
+
+  if (list_item)
+    {
+      PangoLayoutLine *line = list_item->data;
+
+      pango_layout_line_leaked (line);
+      return line;
+    }
+
+  return NULL;
+}
+
+/**
+ * pango_layout_get_line_readonly:
+ * @layout: a #PangoLayout
+ * @line: the index of a line, which must be between 0 and
+ *        <literal>pango_layout_get_line_count(layout) - 1</literal>, inclusive.
+ *
+ * Retrieves a particular line from a #PangoLayout.
+ *
+ * This is a faster alternative to pango_layout_get_line(),
+ * but the user is not expected
+ * to modify the contents of the line (glyphs, glyph widths, etc.).
+ *
+ * Return value: the requested #PangoLayoutLine, or %NULL if the
+ *               index is out of range. This layout line can
+ *               be ref'ed and retained, but will become invalid
+ *               if changes are made to the #PangoLayout.
+ *               No changes should be made to the line.
+ *
+ * Since: 1.16
+ **/
+PangoLayoutLine *
+pango_layout_get_line_readonly (PangoLayout *layout,
+                               int          line)
+{
+  GSList *list_item;
+  g_return_val_if_fail (layout != NULL, NULL);
+  g_return_val_if_fail (line >= 0, NULL);
+
+  if (line < 0)
+    return NULL;
+
+  pango_layout_check_lines (layout);
+
+  list_item = g_slist_nth (layout->lines, line);
+
+  if (list_item)
+    {
+      PangoLayoutLine *line = list_item->data;
+      return line;
+    }
+
+  return NULL;
+}
+
+/**
+ * pango_layout_line_index_to_x:
+ * @line:     a #PangoLayoutLine
+ * @index_:   byte offset of a grapheme within the layout
+ * @trailing: an integer indicating the edge of the grapheme to retrieve
+ *            the position of. If > 0, the trailing edge of the grapheme,
+ *            if 0, the leading of the grapheme.
+ * @x_pos: location to store the x_offset (in Pango unit)
+ *
+ * Converts an index within a line to a X position.
+ *
+ **/
+void
+pango_layout_line_index_to_x (PangoLayoutLine  *line,
+                             int               index,
+                             int               trailing,
+                             int              *x_pos)
+{
+  PangoLayout *layout = line->layout;
+  GSList *run_list = line->runs;
+  int width = 0;
+
+  while (run_list)
+    {
+      PangoLayoutRun *run = run_list->data;
+      ItemProperties properties;
+
+      pango_layout_get_item_properties (run->item, &properties);
+
+      if (run->item->offset <= index && run->item->offset + run->item->length > index)
+       {
+         int offset = g_utf8_pointer_to_offset (layout->text, layout->text + index);
+         if (trailing)
+           {
+             while (index < line->start_index + line->length &&
+                    offset + 1 < layout->n_chars &&
+                    !layout->log_attrs[offset + 1].is_cursor_position)
+               {
+                 offset++;
+                 index = g_utf8_next_char (layout->text + index) - layout->text;
+               }
+           }
+         else
+           {
+             while (index > line->start_index &&
+                    !layout->log_attrs[offset].is_cursor_position)
+               {
+                 offset--;
+                 index = g_utf8_prev_char (layout->text + index) - layout->text;
+               }
+
+           }
+
+         pango_glyph_string_index_to_x (run->glyphs,
+                                        layout->text + run->item->offset,
+                                        run->item->length,
+                                        &run->item->analysis,
+                                        index - run->item->offset, trailing, x_pos);
+         if (x_pos)
+           *x_pos += width;
+
+         return;
+       }
+
+      width += pango_glyph_string_get_width (run->glyphs);
+
+      run_list = run_list->next;
+    }
+
+  if (x_pos)
+    *x_pos = width;
+}
+
+static PangoLayoutLine *
+pango_layout_index_to_line (PangoLayout      *layout,
+                           int               index,
+                           int              *line_nr,
+                           PangoLayoutLine **line_before,
+                           PangoLayoutLine **line_after)
+{
+  GSList *tmp_list;
+  GSList *line_list;
+  PangoLayoutLine *line = NULL;
+  PangoLayoutLine *prev_line = NULL;
+  int i = -1;
+
+  line_list = tmp_list = layout->lines;
+  while (tmp_list)
+    {
+      PangoLayoutLine *tmp_line = tmp_list->data;
+
+      if (tmp_line->start_index > index)
+       break; /* index was in paragraph delimiters */
+
+      prev_line = line;
+      line = tmp_line;
+      line_list = tmp_list;
+      i++;
+
+      if (line->start_index + line->length > index)
+       break;
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (line_nr)
+    *line_nr = i;
+
+  if (line_before)
+    *line_before = prev_line;
+
+  if (line_after)
+    *line_after = (line_list && line_list->next) ? line_list->next->data : NULL;
+
+  return line;
+}
+
+static PangoLayoutLine *
+pango_layout_index_to_line_and_extents (PangoLayout     *layout,
+                                       int              index,
+                                       PangoRectangle  *line_rect)
+{
+  PangoLayoutIter *iter;
+  PangoLayoutLine *line = NULL;
+
+  iter = pango_layout_get_iter (layout);
+
+  if (!ITER_IS_INVALID (iter))
+    while (TRUE)
+      {
+       PangoLayoutLine *tmp_line = _pango_layout_iter_get_line (iter);
+
+       if (tmp_line->start_index > index)
+           break; /* index was in paragraph delimiters */
+
+       line = tmp_line;
+
+       pango_layout_iter_get_line_extents (iter, NULL, line_rect);
+
+       if (line->start_index + line->length > index)
+         break;
+
+       if (!pango_layout_iter_next_line (iter))
+         break; /* Use end of last line */
+      }
+
+  pango_layout_iter_free (iter);
+
+  return line;
+}
+
+/**
+ * pango_layout_index_to_line_x:
+ * @layout:    a #PangoLayout
+ * @index_:    the byte index of a grapheme within the layout.
+ * @trailing:  an integer indicating the edge of the grapheme to retrieve the
+ *             position of. If 0, the trailing edge of the grapheme, if > 0,
+ *             the leading of the grapheme.
+ * @line:      location to store resulting line index. (which will
+ *             between 0 and pango_layout_get_line_count(layout) - 1)
+ * @x_pos:     location to store resulting position within line
+ *             (%PANGO_SCALE units per device unit)
+ *
+ * Converts from byte @index_ within the @layout to line and X position.
+ * (X position is measured from the left edge of the line)
+ */
+void
+pango_layout_index_to_line_x (PangoLayout *layout,
+                             int          index,
+                             gboolean     trailing,
+                             int         *line,
+                             int         *x_pos)
+{
+  int line_num;
+  PangoLayoutLine *layout_line = NULL;
+
+  g_return_if_fail (layout != NULL);
+  g_return_if_fail (index >= 0);
+  g_return_if_fail (index <= layout->length);
+
+  pango_layout_check_lines (layout);
+
+  layout_line = pango_layout_index_to_line (layout, index,
+                                           &line_num, NULL, NULL);
+
+  if (layout_line)
+    {
+      /* use end of line if index was in the paragraph delimiters */
+      if (index > layout_line->start_index + layout_line->length)
+       index = layout_line->start_index + layout_line->length;
+
+      if (line)
+       *line = line_num;
+
+      pango_layout_line_index_to_x (layout_line, index, trailing, x_pos);
+    }
+  else
+    {
+      if (line)
+       *line = -1;
+      if (x_pos)
+       *x_pos = -1;
+    }
+}
+
+/**
+ * pango_layout_move_cursor_visually:
+ * @layout:       a #PangoLayout.
+ * @strong:       whether the moving cursor is the strong cursor or the
+ *                weak cursor. The strong cursor is the cursor corresponding
+ *                to text insertion in the base direction for the layout.
+ * @old_index:    the byte index of the grapheme for the old index
+ * @old_trailing: if 0, the cursor was at the trailing edge of the
+ *                grapheme indicated by @old_index, if > 0, the cursor
+ *                was at the leading edge.
+ * @direction:    direction to move cursor. A negative
+ *                value indicates motion to the left.
+ * @new_index:    location to store the new cursor byte index. A value of -1
+ *                indicates that the cursor has been moved off the beginning
+ *                of the layout. A value of %G_MAXINT indicates that
+ *                the cursor has been moved off the end of the layout.
+ * @new_trailing: number of characters to move forward from the location returned
+ *                for @new_index to get the position where the cursor should
+ *                be displayed. This allows distinguishing the position at
+ *                the beginning of one line from the position at the end
+ *                of the preceding line. @new_index is always on the line
+ *                where the cursor should be displayed.
+ *
+ * Computes a new cursor position from an old position and
+ * a count of positions to move visually. If @direction is positive,
+ * then the new strong cursor position will be one position
+ * to the right of the old cursor position. If @direction is negative,
+ * then the new strong cursor position will be one position
+ * to the left of the old cursor position.
+ *
+ * In the presence of bidirectional text, the correspondence
+ * between logical and visual order will depend on the direction
+ * of the current run, and there may be jumps when the cursor
+ * is moved off of the end of a run.
+ *
+ * Motion here is in cursor positions, not in characters, so a
+ * single call to pango_layout_move_cursor_visually() may move the
+ * cursor over multiple characters when multiple characters combine
+ * to form a single grapheme.
+ **/
+void
+pango_layout_move_cursor_visually (PangoLayout *layout,
+                                  gboolean     strong,
+                                  int          old_index,
+                                  int          old_trailing,
+                                  int          direction,
+                                  int         *new_index,
+                                  int         *new_trailing)
+{
+  PangoLayoutLine *line = NULL;
+  PangoLayoutLine *prev_line;
+  PangoLayoutLine *next_line;
+
+  int *log2vis_map;
+  int *vis2log_map;
+  int n_vis;
+  int vis_pos, vis_pos_old, log_pos;
+  int start_offset;
+  gboolean off_start = FALSE;
+  gboolean off_end = FALSE;
+
+  g_return_if_fail (layout != NULL);
+  g_return_if_fail (old_index >= 0 && old_index <= layout->length);
+  g_return_if_fail (old_index < layout->length || old_trailing == 0);
+  g_return_if_fail (new_index != NULL);
+  g_return_if_fail (new_trailing != NULL);
+
+  direction = (direction >= 0 ? 1 : -1);
+
+  pango_layout_check_lines (layout);
+
+  /* Find the line the old cursor is on */
+  line = pango_layout_index_to_line (layout, old_index,
+                                    NULL, &prev_line, &next_line);
+
+  start_offset = g_utf8_pointer_to_offset (layout->text, layout->text + line->start_index);
+
+  while (old_trailing--)
+    old_index = g_utf8_next_char (layout->text + old_index) - layout->text;
+
+  log2vis_map = pango_layout_line_get_log2vis_map (line, strong);
+  n_vis = pango_utf8_strlen (layout->text + line->start_index, line->length);
+
+  /* Clamp old_index to fit on the line */
+  if (old_index > (line->start_index + line->length))
+    old_index = line->start_index + line->length;
+
+  vis_pos = log2vis_map[old_index - line->start_index];
+
+  g_free (log2vis_map);
+
+  /* Handling movement between lines */
+  if (vis_pos == 0 && direction < 0)
+    {
+      if (line->resolved_dir == PANGO_DIRECTION_LTR)
+       off_start = TRUE;
+      else
+       off_end = TRUE;
+    }
+  else if (vis_pos == n_vis && direction > 0)
+    {
+      if (line->resolved_dir == PANGO_DIRECTION_LTR)
+       off_end = TRUE;
+      else
+       off_start = TRUE;
+    }
+
+  if (off_start || off_end)
+    {
+      /* If we move over a paragraph boundary, count that as
+       * an extra position in the motion
+       */
+      gboolean paragraph_boundary;
+
+      if (off_start)
+       {
+         if (!prev_line)
+           {
+             *new_index = -1;
+             *new_trailing = 0;
+             return;
+           }
+         line = prev_line;
+         paragraph_boundary = (line->start_index + line->length != old_index);
+       }
+      else
+       {
+         if (!next_line)
+           {
+             *new_index = G_MAXINT;
+             *new_trailing = 0;
+             return;
+           }
+         line = next_line;
+         paragraph_boundary = (line->start_index != old_index);
+       }
+
+      n_vis = pango_utf8_strlen (layout->text + line->start_index, line->length);
+      start_offset = g_utf8_pointer_to_offset (layout->text, layout->text + line->start_index);
+
+      if (vis_pos == 0 && direction < 0)
+       {
+         vis_pos = n_vis;
+         if (paragraph_boundary)
+           vis_pos++;
+       }
+      else /* (vis_pos == n_vis && direction > 0) */
+       {
+         vis_pos = 0;
+         if (paragraph_boundary)
+           vis_pos--;
+       }
+    }
+
+  vis2log_map = pango_layout_line_get_vis2log_map (line, strong);
+
+  vis_pos_old = vis_pos + direction;
+  log_pos = g_utf8_pointer_to_offset (layout->text + line->start_index,
+                                     layout->text + line->start_index + vis2log_map[vis_pos_old]);
+  do
+    {
+      vis_pos += direction;
+      log_pos += g_utf8_pointer_to_offset (layout->text + line->start_index + vis2log_map[vis_pos_old],
+                                          layout->text + line->start_index + vis2log_map[vis_pos]);
+      vis_pos_old = vis_pos;
+    }
+  while (vis_pos > 0 && vis_pos < n_vis &&
+        !layout->log_attrs[start_offset + log_pos].is_cursor_position);
+
+  *new_index = line->start_index + vis2log_map[vis_pos];
+  g_free (vis2log_map);
+
+  *new_trailing = 0;
+
+  if (*new_index == line->start_index + line->length && line->length > 0)
+    {
+      do
+       {
+         log_pos--;
+         *new_index = g_utf8_prev_char (layout->text + *new_index) - layout->text;
+         (*new_trailing)++;
+       }
+      while (log_pos > 0 && !layout->log_attrs[start_offset + log_pos].is_cursor_position);
+    }
+}
+
+/**
+ * pango_layout_xy_to_index:
+ * @layout:    a #PangoLayout
+ * @x:         the X offset (in Pango units)
+ *             from the left edge of the layout.
+ * @y:         the Y offset (in Pango units)
+ *             from the top edge of the layout
+ * @index_:    location to store calculated byte index
+ * @trailing:  location to store a integer indicating where
+ *             in the grapheme the user clicked. It will either
+ *             be zero, or the number of characters in the
+ *             grapheme. 0 represents the trailing edge of the grapheme.
+ *
+ * Converts from X and Y position within a layout to the byte
+ * index to the character at that logical position. If the
+ * Y position is not inside the layout, the closest position is chosen
+ * (the position will be clamped inside the layout). If the
+ * X position is not within the layout, then the start or the
+ * end of the line is chosen as  described for pango_layout_x_to_index().
+ * If either the X or Y positions were not inside the layout, then the
+ * function returns %FALSE; on an exact hit, it returns %TRUE.
+ *
+ * Return value: %TRUE if the coordinates were inside text, %FALSE otherwise.
+ **/
+gboolean
+pango_layout_xy_to_index (PangoLayout *layout,
+                         int          x,
+                         int          y,
+                         int         *index,
+                         gint        *trailing)
+{
+  PangoLayoutIter *iter;
+  PangoLayoutLine *prev_line = NULL;
+  PangoLayoutLine *found = NULL;
+  int found_line_x = 0;
+  int prev_last = 0;
+  int prev_line_x = 0;
+  gboolean retval = FALSE;
+  gboolean outside = FALSE;
+
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), FALSE);
+
+  iter = pango_layout_get_iter (layout);
+
+  do
+    {
+      PangoRectangle line_logical;
+      int first_y, last_y;
+
+      pango_layout_iter_get_line_extents (iter, NULL, &line_logical);
+      pango_layout_iter_get_line_yrange (iter, &first_y, &last_y);
+
+      if (y < first_y)
+       {
+         if (prev_line && y < (prev_last + (first_y - prev_last) / 2))
+           {
+             found = prev_line;
+             found_line_x = prev_line_x;
+           }
+         else
+           {
+             if (prev_line == NULL)
+               outside = TRUE; /* off the top */
+
+             found = _pango_layout_iter_get_line (iter);
+             found_line_x = x - line_logical.x;
+           }
+       }
+      else if (y >= first_y &&
+              y < last_y)
+       {
+         found = _pango_layout_iter_get_line (iter);
+         found_line_x = x - line_logical.x;
+       }
+
+      prev_line = _pango_layout_iter_get_line (iter);
+      prev_last = last_y;
+      prev_line_x = x - line_logical.x;
+
+      if (found != NULL)
+       break;
+    }
+  while (pango_layout_iter_next_line (iter));
+
+  pango_layout_iter_free (iter);
+
+  if (found == NULL)
+    {
+      /* Off the bottom of the layout */
+      outside = TRUE;
+
+      found = prev_line;
+      found_line_x = prev_line_x;
+    }
+
+  retval = pango_layout_line_x_to_index (found,
+                                        found_line_x,
+                                        index, trailing);
+
+  if (outside)
+    retval = FALSE;
+
+  return retval;
+}
+
+/**
+ * pango_layout_index_to_pos:
+ * @layout: a #PangoLayout
+ * @index_: byte index within @layout
+ * @pos: rectangle in which to store the position of the grapheme
+ *
+ * Converts from an index within a #PangoLayout to the onscreen position
+ * corresponding to the grapheme at that index, which is represented
+ * as rectangle.  Note that <literal>pos->x</literal> is always the leading
+ * edge of the grapheme and <literal>pos->x + pos->width</literal> the trailing
+ * edge of the grapheme. If the directionality of the grapheme is right-to-left,
+ * then <literal>pos->width</literal> will be negative.
+ **/
+void
+pango_layout_index_to_pos (PangoLayout    *layout,
+                          int             index,
+                          PangoRectangle *pos)
+{
+  PangoRectangle logical_rect;
+  PangoLayoutIter *iter;
+  PangoLayoutLine *layout_line = NULL;
+  int x_pos;
+
+  g_return_if_fail (layout != NULL);
+  g_return_if_fail (index >= 0);
+  g_return_if_fail (pos != NULL);
+
+  iter = pango_layout_get_iter (layout);
+
+  if (!ITER_IS_INVALID (iter))
+    {
+      while (TRUE)
+       {
+         PangoLayoutLine *tmp_line = _pango_layout_iter_get_line (iter);
+
+         if (tmp_line->start_index > index)
+           {
+             /* index is in the paragraph delimiters, move to
+              * end of previous line
+              */
+             index = layout_line->start_index + layout_line->length;
+             break;
+           }
+
+         layout_line = tmp_line;
+
+         pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
+
+         if (layout_line->start_index + layout_line->length > index)
+           break;
+
+         if (!pango_layout_iter_next_line (iter))
+           {
+             index = layout_line->start_index + layout_line->length;
+             break;
+           }
+       }
+
+      pos->y = logical_rect.y;
+      pos->height = logical_rect.height;
+
+      pango_layout_line_index_to_x (layout_line, index, 0, &x_pos);
+      pos->x = logical_rect.x + x_pos;
+
+      if (index < layout_line->start_index + layout_line->length)
+       {
+         pango_layout_line_index_to_x (layout_line, index, 1, &x_pos);
+         pos->width = (logical_rect.x + x_pos) - pos->x;
+       }
+      else
+       pos->width = 0;
+    }
+
+  pango_layout_iter_free (iter);
+}
+
+static void
+pango_layout_line_get_range (PangoLayoutLine *line,
+                            char           **start,
+                            char           **end)
+{
+  char *p;
+
+  p = line->layout->text + line->start_index;
+
+  if (start)
+    *start = p;
+  if (end)
+    *end = p + line->length;
+}
+
+static int *
+pango_layout_line_get_vis2log_map (PangoLayoutLine *line,
+                                  gboolean         strong)
+{
+  PangoLayout *layout = line->layout;
+  PangoDirection prev_dir;
+  PangoDirection cursor_dir;
+  GSList *tmp_list;
+  gchar *start, *end;
+  int *result;
+  int pos;
+  int n_chars;
+
+  pango_layout_line_get_range (line, &start, &end);
+  n_chars = pango_utf8_strlen (start, end - start);
+
+  result = g_new (int, n_chars + 1);
+
+  if (strong)
+    cursor_dir = line->resolved_dir;
+  else
+    cursor_dir = (line->resolved_dir == PANGO_DIRECTION_LTR) ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR;
+
+  /* Handle the first visual position
+   */
+  if (line->resolved_dir == cursor_dir)
+    result[0] = line->resolved_dir == PANGO_DIRECTION_LTR ? 0 : end - start;
+
+  prev_dir = line->resolved_dir;
+  pos = 0;
+  tmp_list = line->runs;
+  while (tmp_list)
+    {
+      PangoLayoutRun *run = tmp_list->data;
+      int run_n_chars = run->item->num_chars;
+      PangoDirection run_dir = (run->item->analysis.level % 2) ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR;
+      char *p = layout->text + run->item->offset;
+      int i;
+
+      /* pos is the visual position at the start of the run */
+      /* p is the logical byte index at the start of the run */
+
+      if (run_dir == PANGO_DIRECTION_LTR)
+       {
+         if ((cursor_dir == PANGO_DIRECTION_LTR) ||
+             (prev_dir == run_dir))
+           result[pos] = p - start;
+
+         p = g_utf8_next_char (p);
+
+         for (i = 1; i < run_n_chars; i++)
+           {
+             result[pos + i] = p - start;
+             p = g_utf8_next_char (p);
+           }
+
+         if (cursor_dir == PANGO_DIRECTION_LTR)
+           result[pos + run_n_chars] = p - start;
+       }
+      else
+       {
+         if (cursor_dir == PANGO_DIRECTION_RTL)
+           result[pos + run_n_chars] = p - start;
+
+         p = g_utf8_next_char (p);
+
+         for (i = 1; i < run_n_chars; i++)
+           {
+             result[pos + run_n_chars - i] = p - start;
+             p = g_utf8_next_char (p);
+           }
+
+         if ((cursor_dir == PANGO_DIRECTION_RTL) ||
+             (prev_dir == run_dir))
+           result[pos] = p - start;
+       }
+
+      pos += run_n_chars;
+      prev_dir = run_dir;
+      tmp_list = tmp_list->next;
+    }
+
+  /* And the last visual position
+   */
+  if ((cursor_dir == line->resolved_dir) || (prev_dir == line->resolved_dir))
+    result[pos] = line->resolved_dir == PANGO_DIRECTION_LTR ? end - start : 0;
+
+  return result;
+}
+
+static int *
+pango_layout_line_get_log2vis_map (PangoLayoutLine *line,
+                                  gboolean         strong)
+{
+  gchar *start, *end;
+  int *reverse_map;
+  int *result;
+  int i;
+  int n_chars;
+
+  pango_layout_line_get_range (line, &start, &end);
+  n_chars = pango_utf8_strlen (start, end - start);
+  result = g_new0 (int, end - start + 1);
+
+  reverse_map = pango_layout_line_get_vis2log_map (line, strong);
+
+  for (i=0; i <= n_chars; i++)
+    result[reverse_map[i]] = i;
+
+  g_free (reverse_map);
+
+  return result;
+}
+
+static PangoDirection
+pango_layout_line_get_char_direction (PangoLayoutLine *layout_line,
+                                     int              index)
+{
+  GSList *run_list;
+
+  run_list = layout_line->runs;
+  while (run_list)
+    {
+      PangoLayoutRun *run = run_list->data;
+
+      if (run->item->offset <= index && run->item->offset + run->item->length > index)
+       return run->item->analysis.level % 2 ? PANGO_DIRECTION_RTL : PANGO_DIRECTION_LTR;
+
+      run_list = run_list->next;
+    }
+
+  g_assert_not_reached ();
+
+  return PANGO_DIRECTION_LTR;
+}
+
+/**
+ * pango_layout_get_cursor_pos:
+ * @layout: a #PangoLayout
+ * @index_: the byte index of the cursor
+ * @strong_pos: location to store the strong cursor position (may be %NULL)
+ * @weak_pos: location to store the weak cursor position (may be %NULL)
+ *
+ * Given an index within a layout, determines the positions that of the
+ * strong and weak cursors if the insertion point is at that
+ * index. The position of each cursor is stored as a zero-width
+ * rectangle. The strong cursor location is the location where
+ * characters of the directionality equal to the base direction of the
+ * layout are inserted.  The weak cursor location is the location
+ * where characters of the directionality opposite to the base
+ * direction of the layout are inserted.
+ **/
+void
+pango_layout_get_cursor_pos (PangoLayout    *layout,
+                            int             index,
+                            PangoRectangle *strong_pos,
+                            PangoRectangle *weak_pos)
+{
+  PangoDirection dir1;
+  PangoRectangle line_rect;
+  PangoLayoutLine *layout_line = NULL; /* Quiet GCC */
+  int x1_trailing;
+  int x2;
+
+  g_return_if_fail (layout != NULL);
+  g_return_if_fail (index >= 0 && index <= layout->length);
+
+  layout_line = pango_layout_index_to_line_and_extents (layout, index,
+                                                       &line_rect);
+
+  g_assert (index >= layout_line->start_index);
+
+  /* Examine the trailing edge of the character before the cursor */
+  if (index == layout_line->start_index)
+    {
+      dir1 = layout_line->resolved_dir;
+      if (layout_line->resolved_dir == PANGO_DIRECTION_LTR)
+       x1_trailing = 0;
+      else
+       x1_trailing = line_rect.width;
+    }
+  else if (index >= layout_line->start_index + layout_line->length)
+    {
+      dir1 = layout_line->resolved_dir;
+      if (layout_line->resolved_dir == PANGO_DIRECTION_LTR)
+       x1_trailing = line_rect.width;
+      else
+       x1_trailing = 0;
+    }
+  else
+    {
+      gint prev_index = g_utf8_prev_char (layout->text + index) - layout->text;
+      dir1 = pango_layout_line_get_char_direction (layout_line, prev_index);
+      pango_layout_line_index_to_x (layout_line, prev_index, TRUE, &x1_trailing);
+    }
+
+  /* Examine the leading edge of the character after the cursor */
+  if (index >= layout_line->start_index + layout_line->length)
+    {
+      if (layout_line->resolved_dir == PANGO_DIRECTION_LTR)
+       x2 = line_rect.width;
+      else
+       x2 = 0;
+    }
+  else
+    {
+      pango_layout_line_index_to_x (layout_line, index, FALSE, &x2);
+    }
+
+  if (strong_pos)
+    {
+      strong_pos->x = line_rect.x;
+
+      if (dir1 == layout_line->resolved_dir)
+       strong_pos->x += x1_trailing;
+      else
+       strong_pos->x += x2;
+
+      strong_pos->y = line_rect.y;
+      strong_pos->width = 0;
+      strong_pos->height = line_rect.height;
+    }
+
+  if (weak_pos)
+    {
+      weak_pos->x = line_rect.x;
+
+      if (dir1 == layout_line->resolved_dir)
+       weak_pos->x += x2;
+      else
+       weak_pos->x += x1_trailing;
+
+      weak_pos->y = line_rect.y;
+      weak_pos->width = 0;
+      weak_pos->height = line_rect.height;
+    }
+}
+
+static inline int
+direction_simple (PangoDirection d)
+{
+  switch (d)
+    {
+    case PANGO_DIRECTION_LTR :
+    case PANGO_DIRECTION_WEAK_LTR :
+    case PANGO_DIRECTION_TTB_RTL :
+      return 1;
+    case PANGO_DIRECTION_RTL :
+    case PANGO_DIRECTION_WEAK_RTL :
+    case PANGO_DIRECTION_TTB_LTR :
+      return -1;
+    case PANGO_DIRECTION_NEUTRAL :
+      return 0;
+    /* no default, compiler should complain if a new values is added */
+    }
+  /* not reached */
+  return 0;
+}
+
+static PangoAlignment
+get_alignment (PangoLayout     *layout,
+              PangoLayoutLine *line)
+{
+  PangoAlignment alignment = layout->alignment;
+
+  if (alignment != PANGO_ALIGN_CENTER && line->layout->auto_dir &&
+      direction_simple (line->resolved_dir) ==
+      -direction_simple (pango_context_get_base_dir (layout->context)))
+    {
+      if (alignment == PANGO_ALIGN_LEFT)
+       alignment = PANGO_ALIGN_RIGHT;
+      else if (alignment == PANGO_ALIGN_RIGHT)
+       alignment = PANGO_ALIGN_LEFT;
+    }
+
+  return alignment;
+}
+
+static void
+get_x_offset (PangoLayout     *layout,
+             PangoLayoutLine *line,
+             int              layout_width,
+             int              line_width,
+             int             *x_offset)
+{
+  PangoAlignment alignment = get_alignment (layout, line);
+
+  /* Alignment */
+  if (layout_width == 0)
+    *x_offset = 0;
+  else if (alignment == PANGO_ALIGN_RIGHT)
+    *x_offset = layout_width - line_width;
+  else if (alignment == PANGO_ALIGN_CENTER) {
+    *x_offset = (layout_width - line_width) / 2;
+    /* hinting */
+    if (((layout_width | line_width) & (PANGO_SCALE - 1)) == 0)
+      {
+       *x_offset = PANGO_UNITS_ROUND (*x_offset);
+      }
+  } else
+    *x_offset = 0;
+
+  /* Indentation */
+
+
+  /* For center, we ignore indentation; I think I've seen word
+   * processors that still do the indentation here as if it were
+   * indented left/right, though we can't sensibly do that without
+   * knowing whether left/right is the "normal" thing for this text
+   */
+
+  if (alignment == PANGO_ALIGN_CENTER)
+    return;
+
+  if (line->is_paragraph_start)
+    {
+      if (layout->indent > 0)
+       {
+         if (alignment == PANGO_ALIGN_LEFT)
+           *x_offset += layout->indent;
+         else
+           *x_offset -= layout->indent;
+       }
+    }
+  else
+    {
+      if (layout->indent < 0)
+       {
+         if (alignment == PANGO_ALIGN_LEFT)
+           *x_offset -= layout->indent;
+         else
+           *x_offset += layout->indent;
+       }
+    }
+}
+
+static void
+get_line_extents_layout_coords (PangoLayout     *layout,
+                               PangoLayoutLine *line,
+                               int              layout_width,
+                               int              y_offset,
+                               int             *baseline,
+                               PangoRectangle  *line_ink_layout,
+                               PangoRectangle  *line_logical_layout)
+{
+  int x_offset;
+  /* Line extents in line coords (origin at line baseline) */
+  PangoRectangle line_ink;
+  PangoRectangle line_logical;
+
+  pango_layout_line_get_extents (line, line_ink_layout ? &line_ink : NULL,
+                                &line_logical);
+
+  get_x_offset (layout, line, layout_width, line_logical.width, &x_offset);
+
+  /* Convert the line's extents into layout coordinates */
+  if (line_ink_layout)
+    {
+      *line_ink_layout = line_ink;
+      line_ink_layout->x = line_ink.x + x_offset;
+      line_ink_layout->y = y_offset - line_logical.y + line_ink.y;
+    }
+
+  if (line_logical_layout)
+    {
+      *line_logical_layout = line_logical;
+      line_logical_layout->x = line_logical.x + x_offset;
+      line_logical_layout->y = y_offset;
+    }
+
+  if (baseline)
+    *baseline = y_offset - line_logical.y;
+}
+
+/* if non-NULL line_extents returns a list of line extents
+ * in layout coordinates
+ */
+static void
+pango_layout_get_extents_internal (PangoLayout    *layout,
+                                  PangoRectangle *ink_rect,
+                                  PangoRectangle *logical_rect,
+                                  GSList        **line_extents)
+{
+  GSList *line_list;
+  int y_offset = 0;
+  int width;
+  gboolean need_width = FALSE;
+
+  g_return_if_fail (layout != NULL);
+
+  if (ink_rect && layout->ink_rect_cached)
+    {
+      *ink_rect = layout->ink_rect;
+      ink_rect = NULL;
+    }
+  if (logical_rect && layout->logical_rect_cached)
+    {
+      *logical_rect = layout->logical_rect;
+      logical_rect = NULL;
+    }
+  if (!ink_rect && !logical_rect && !line_extents)
+    return;
+
+  pango_layout_check_lines (layout);
+
+  /* When we are not wrapping, we need the overall width of the layout to
+   * figure out the x_offsets of each line. However, we only need the
+   * x_offsets if we are computing the ink_rect or individual line extents.
+   */
+  width = layout->width;
+
+  if (layout->auto_dir)
+    {
+      /* If one of the lines of the layout is not left aligned, then we need
+       * the width of the layout to calculate line x-offsets; this requires
+       * looping through the lines for layout->auto_dir.
+       */
+      line_list = layout->lines;
+      while (line_list && !need_width)
+       {
+         PangoLayoutLine *line = line_list->data;
+
+         if (get_alignment (layout, line) != PANGO_ALIGN_LEFT)
+           need_width = TRUE;
+
+         line_list = line_list->next;
+       }
+    }
+  else if (layout->alignment != PANGO_ALIGN_LEFT)
+    need_width = TRUE;
+
+  if (width == -1 && need_width && (ink_rect || line_extents))
+    {
+      PangoRectangle overall_logical;
+
+      pango_layout_get_extents_internal (layout, NULL, &overall_logical, NULL);
+      width = overall_logical.width;
+    }
+
+  if (logical_rect)
+    {
+      logical_rect->x = 0;
+      logical_rect->y = 0;
+      logical_rect->width = 0;
+      logical_rect->height = 0;
+    }
+
+  line_list = layout->lines;
+  while (line_list)
+    {
+      PangoLayoutLine *line = line_list->data;
+      /* Line extents in layout coords (origin at 0,0 of the layout) */
+      PangoRectangle line_ink_layout;
+      PangoRectangle line_logical_layout;
+
+      int new_pos;
+
+      /* This block gets the line extents in layout coords */
+      {
+       int baseline;
+
+       get_line_extents_layout_coords (layout, line,
+                                       width, y_offset,
+                                       &baseline,
+                                       ink_rect ? &line_ink_layout : NULL,
+                                       &line_logical_layout);
+
+       if (line_extents)
+         {
+           Extents *ext = g_slice_new (Extents);
+           ext->baseline = baseline;
+           ext->ink_rect = line_ink_layout;
+           ext->logical_rect = line_logical_layout;
+           *line_extents = g_slist_prepend (*line_extents, ext);
+         }
+      }
+
+      if (ink_rect)
+       {
+         /* Compute the union of the current ink_rect with
+          * line_ink_layout
+          */
+
+         if (line_list == layout->lines)
+           {
+             *ink_rect = line_ink_layout;
+           }
+         else
+           {
+             new_pos = MIN (ink_rect->x, line_ink_layout.x);
+             ink_rect->width =
+               MAX (ink_rect->x + ink_rect->width,
+                    line_ink_layout.x + line_ink_layout.width) - new_pos;
+             ink_rect->x = new_pos;
+
+             new_pos = MIN (ink_rect->y, line_ink_layout.y);
+             ink_rect->height =
+               MAX (ink_rect->y + ink_rect->height,
+                    line_ink_layout.y + line_ink_layout.height) - new_pos;
+             ink_rect->y = new_pos;
+           }
+       }
+
+      if (logical_rect)
+       {
+         if (layout->width == -1)
+           {
+             /* When no width is set on layout, we can just compute the max of the
+              * line lengths to get the horizontal extents ... logical_rect.x = 0.
+              */
+             logical_rect->width = MAX (logical_rect->width, line_logical_layout.width);
+           }
+         else
+           {
+             /* When a width is set, we have to compute the union of the horizontal
+              * extents of all the lines.
+              */
+             if (line_list == layout->lines)
+               {
+                 logical_rect->x = line_logical_layout.x;
+                 logical_rect->width = line_logical_layout.width;
+               }
+             else
+               {
+                 new_pos = MIN (logical_rect->x, line_logical_layout.x);
+                 logical_rect->width =
+                   MAX (logical_rect->x + logical_rect->width,
+                        line_logical_layout.x + line_logical_layout.width) - new_pos;
+                 logical_rect->x = new_pos;
+
+               }
+           }
+
+         logical_rect->height += line_logical_layout.height;
+
+         /* No space after the last line, of course. */
+         if (line_list->next != NULL)
+           logical_rect->height += layout->spacing;
+       }
+
+      y_offset += line_logical_layout.height + layout->spacing;
+      line_list = line_list->next;
+    }
+
+  if (ink_rect)
+    {
+      layout->ink_rect = *ink_rect;
+      layout->ink_rect_cached = TRUE;
+    }
+  if (logical_rect)
+    {
+      layout->logical_rect = *logical_rect;
+      layout->logical_rect_cached = TRUE;
+    }
+  if (line_extents)
+    *line_extents = g_slist_reverse (*line_extents);
+}
+
+/**
+ * pango_layout_get_extents:
+ * @layout:   a #PangoLayout
+ * @ink_rect: rectangle used to store the extents of the layout as drawn
+ *            or %NULL to indicate that the result is not needed.
+ * @logical_rect: rectangle used to store the logical extents of the layout
+                or %NULL to indicate that the result is not needed.
+ *
+ * Computes the logical and ink extents of @layout. Logical extents
+ * are usually what you want for positioning things.  Note that both extents
+ * may have non-zero x and y.  You may want to use those to offset where you
+ * render the layout.  Not doing that is a very typical bug that shows up as
+ * right-to-left layouts not being correctly positioned in a layout with
+ * a set width.
+ *
+ * The extents are given in layout coordinates and in Pango units; layout
+ * coordinates begin at the top left corner of the layout.
+ */
+void
+pango_layout_get_extents (PangoLayout    *layout,
+                         PangoRectangle *ink_rect,
+                         PangoRectangle *logical_rect)
+{
+  g_return_if_fail (layout != NULL);
+
+  pango_layout_get_extents_internal (layout, ink_rect, logical_rect, NULL);
+}
+
+/**
+ * pango_layout_get_pixel_extents:
+ * @layout:   a #PangoLayout
+ * @ink_rect: rectangle used to store the extents of the layout as drawn
+ *            or %NULL to indicate that the result is not needed.
+ * @logical_rect: rectangle used to store the logical extents of the
+ *              layout or %NULL to indicate that the result is not needed.
+ *
+ * Computes the logical and ink extents of @layout in device units.
+ * This function just calls pango_layout_get_extents() followed by
+ * two pango_extents_to_pixels() calls, rounding @ink_rect and @logical_rect
+ * such that the rounded rectangles fully contain the unrounded one (that is,
+ * passes them as first argument to pango_extents_to_pixels()).
+ **/
+void
+pango_layout_get_pixel_extents (PangoLayout *layout,
+                               PangoRectangle *ink_rect,
+                               PangoRectangle *logical_rect)
+{
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  pango_layout_get_extents (layout, ink_rect, logical_rect);
+  pango_extents_to_pixels (ink_rect, NULL);
+  pango_extents_to_pixels (logical_rect, NULL);
+}
+
+/**
+ * pango_layout_get_size:
+ * @layout: a #PangoLayout
+ * @width: location to store the logical width, or %NULL
+ * @height: location to store the logical height, or %NULL
+ *
+ * Determines the logical width and height of a #PangoLayout
+ * in Pango units (device units scaled by %PANGO_SCALE). This
+ * is simply a convenience function around pango_layout_get_extents().
+ **/
+void
+pango_layout_get_size (PangoLayout *layout,
+                      int         *width,
+                      int         *height)
+{
+  PangoRectangle logical_rect;
+
+  pango_layout_get_extents (layout, NULL, &logical_rect);
+
+  if (width)
+    *width = logical_rect.width;
+  if (height)
+    *height = logical_rect.height;
+}
+
+/**
+ * pango_layout_get_pixel_size:
+ * @layout: a #PangoLayout
+ * @width: location to store the logical width, or %NULL
+ * @height: location to store the logical height, or %NULL
+ *
+ * Determines the logical width and height of a #PangoLayout
+ * in device units. (pango_layout_get_size() returns the width
+ * and height scaled by %PANGO_SCALE.) This
+ * is simply a convenience function around
+ * pango_layout_get_pixel_extents().
+ **/
+void
+pango_layout_get_pixel_size (PangoLayout *layout,
+                            int         *width,
+                            int         *height)
+{
+  PangoRectangle logical_rect;
+
+  pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+
+  if (width)
+    *width = logical_rect.width;
+  if (height)
+    *height = logical_rect.height;
+}
+
+/**
+ * pango_layout_get_baseline:
+ * @layout: a #PangoLayout
+ *
+ * Gets the Y position of baseline of the first line in @layout.
+ *
+ * Return value: baseline of first line, from top of @layout.
+ *
+ * Since: 1.22
+ **/
+int
+pango_layout_get_baseline (PangoLayout    *layout)
+{
+  int baseline;
+
+  /* XXX this is so inefficient */
+  PangoLayoutIter *iter = pango_layout_get_iter (layout);
+  baseline = pango_layout_iter_get_baseline (iter);
+  pango_layout_iter_free (iter);
+
+  return baseline;
+}
+
+static void
+pango_layout_clear_lines (PangoLayout *layout)
+{
+  if (layout->lines)
+    {
+      GSList *tmp_list = layout->lines;
+      while (tmp_list)
+       {
+         PangoLayoutLine *line = tmp_list->data;
+         tmp_list = tmp_list->next;
+
+         line->layout = NULL;
+         pango_layout_line_unref (line);
+       }
+
+      g_slist_free (layout->lines);
+      layout->lines = NULL;
+      layout->line_count = 0;
+
+      /* This could be handled separately, since we don't need to
+       * recompute log_attrs on a width change, but this is easiest
+       */
+      g_free (layout->log_attrs);
+      layout->log_attrs = NULL;
+    }
+
+  layout->unknown_glyphs_count = -1;
+  layout->logical_rect_cached = FALSE;
+  layout->ink_rect_cached = FALSE;
+  layout->is_ellipsized = FALSE;
+  layout->is_wrapped = FALSE;
+}
+
+static void
+pango_layout_line_leaked (PangoLayoutLine *line)
+{
+  PangoLayoutLinePrivate *private = (PangoLayoutLinePrivate *)line;
+
+  private->cache_status = LEAKED;
+
+  if (line->layout)
+    {
+      line->layout->logical_rect_cached = FALSE;
+      line->layout->ink_rect_cached = FALSE;
+    }
+}
+
+\f
+/*****************
+ * Line Breaking *
+ *****************/
+
+static void shape_tab (PangoLayoutLine  *line,
+                      PangoGlyphString *glyphs);
+
+static void
+free_run (PangoLayoutRun *run, gpointer data)
+{
+  gboolean free_item = data != NULL;
+  if (free_item)
+    pango_item_free (run->item);
+
+  pango_glyph_string_free (run->glyphs);
+  g_slice_free (PangoLayoutRun, run);
+}
+
+static void
+extents_free (Extents *ext, gpointer data G_GNUC_UNUSED)
+{
+  g_slice_free (Extents, ext);
+}
+
+static PangoItem *
+uninsert_run (PangoLayoutLine *line)
+{
+  PangoLayoutRun *run;
+  PangoItem *item;
+
+  GSList *tmp_node = line->runs;
+
+  run = tmp_node->data;
+  item = run->item;
+
+  line->runs = tmp_node->next;
+  line->length -= item->length;
+
+  g_slist_free_1 (tmp_node);
+  free_run (run, (gpointer)FALSE);
+
+  return item;
+}
+
+static void
+ensure_tab_width (PangoLayout *layout)
+{
+  if (layout->tab_width == -1)
+    {
+      /* Find out how wide 8 spaces are in the context's default
+       * font. Utter performance killer. :-(
+       */
+      PangoGlyphString *glyphs = pango_glyph_string_new ();
+      PangoItem *item;
+      GList *items;
+      PangoAttribute *attr;
+      PangoAttrList *layout_attrs;
+      PangoAttrList *tmp_attrs;
+      PangoAttrIterator *iter;
+      PangoFontDescription *font_desc = pango_font_description_copy_static (pango_context_get_font_description (layout->context));
+      PangoLanguage *language;
+
+      layout_attrs = pango_layout_get_effective_attributes (layout);
+      iter = pango_attr_list_get_iterator (layout_attrs);
+      pango_attr_iterator_get_font (iter, font_desc, &language, NULL);
+
+      tmp_attrs = pango_attr_list_new ();
+
+      attr = pango_attr_font_desc_new (font_desc);
+      pango_font_description_free (font_desc);
+      pango_attr_list_insert_before (tmp_attrs, attr);
+
+      if (language)
+       {
+         attr = pango_attr_language_new (language);
+         pango_attr_list_insert_before (tmp_attrs, attr);
+       }
+
+      items = pango_itemize (layout->context, " ", 0, 1, tmp_attrs, NULL);
+
+      pango_attr_iterator_destroy (iter);
+      if (layout_attrs != layout->attrs)
+        {
+         pango_attr_list_unref (layout_attrs);
+         layout_attrs = NULL;
+       }
+      pango_attr_list_unref (tmp_attrs);
+
+      item = items->data;
+      pango_shape ("        ", 8, &item->analysis, glyphs);
+
+      pango_item_free (item);
+      g_list_free (items);
+
+      layout->tab_width = pango_glyph_string_get_width (glyphs);
+
+      pango_glyph_string_free (glyphs);
+
+      /* We need to make sure the tab_width is > 0 so finding tab positions
+       * terminates. This check should be necessary only under extreme
+       * problems with the font.
+       */
+      if (layout->tab_width <= 0)
+       layout->tab_width = 50 * PANGO_SCALE; /* pretty much arbitrary */
+    }
+}
+
+/* For now we only need the tab position, we assume
+ * all tabs are left-aligned.
+ */
+static int
+get_tab_pos (PangoLayout *layout, int index, gboolean *is_default)
+{
+  gint n_tabs;
+  gboolean in_pixels;
+
+  if (layout->tabs)
+    {
+      n_tabs = pango_tab_array_get_size (layout->tabs);
+      in_pixels = pango_tab_array_get_positions_in_pixels (layout->tabs);
+      if (is_default)
+       *is_default = FALSE;
+    }
+  else
+    {
+      n_tabs = 0;
+      in_pixels = FALSE;
+      if (is_default)
+       *is_default = TRUE;
+    }
+
+  if (index < n_tabs)
+    {
+      gint pos = 0;
+
+      pango_tab_array_get_tab (layout->tabs, index, NULL, &pos);
+
+      if (in_pixels)
+       return pos * PANGO_SCALE;
+      else
+       return pos;
+    }
+
+  if (n_tabs > 0)
+    {
+      /* Extrapolate tab position, repeating the last tab gap to
+       * infinity.
+       */
+      int last_pos = 0;
+      int next_to_last_pos = 0;
+      int tab_width;
+
+      pango_tab_array_get_tab (layout->tabs, n_tabs - 1, NULL, &last_pos);
+
+      if (n_tabs > 1)
+       pango_tab_array_get_tab (layout->tabs, n_tabs - 2, NULL, &next_to_last_pos);
+      else
+       next_to_last_pos = 0;
+
+      if (in_pixels)
+       {
+         next_to_last_pos *= PANGO_SCALE;
+         last_pos *= PANGO_SCALE;
+       }
+
+      if (last_pos > next_to_last_pos)
+       {
+         tab_width = last_pos - next_to_last_pos;
+       }
+      else
+       {
+         tab_width = layout->tab_width;
+       }
+
+      return last_pos + tab_width * (index - n_tabs + 1);
+    }
+  else
+    {
+      /* No tab array set, so use default tab width
+       */
+      return layout->tab_width * index;
+    }
+}
+
+static int
+line_width (PangoLayoutLine *line)
+{
+  GSList *l;
+  int i;
+  int width = 0;
+
+  /* Compute the width of the line currently - inefficient, but easier
+   * than keeping the current width of the line up to date everywhere
+   */
+  for (l = line->runs; l; l = l->next)
+    {
+      PangoLayoutRun *run = l->data;
+
+      for (i=0; i < run->glyphs->num_glyphs; i++)
+       width += run->glyphs->glyphs[i].geometry.width;
+    }
+
+  return width;
+}
+
+static void
+shape_tab (PangoLayoutLine  *line,
+          PangoGlyphString *glyphs)
+{
+  int i, space_width;
+
+  int current_width = line_width (line);
+
+  pango_glyph_string_set_size (glyphs, 1);
+
+  glyphs->glyphs[0].glyph = PANGO_GLYPH_EMPTY;
+  glyphs->glyphs[0].geometry.x_offset = 0;
+  glyphs->glyphs[0].geometry.y_offset = 0;
+  glyphs->glyphs[0].attr.is_cluster_start = 1;
+
+  glyphs->log_clusters[0] = 0;
+
+  ensure_tab_width (line->layout);
+  space_width = line->layout->tab_width / 8;
+
+  for (i=0;;i++)
+    {
+      gboolean is_default;
+      int tab_pos = get_tab_pos (line->layout, i, &is_default);
+      /* Make sure there is at least a space-width of space between
+       * tab-aligned text and the text before it.  However, only do
+       * this if no tab array is set on the layout, ie. using default
+       * tab positions.  If use has set tab positions, respect it to
+       * the pixel.
+       */
+      if (tab_pos >= current_width + (is_default ? space_width : 1))
+       {
+         glyphs->glyphs[0].geometry.width = tab_pos - current_width;
+         break;
+       }
+    }
+}
+
+static inline gboolean
+can_break_at (PangoLayout *layout,
+             gint         offset,
+             gboolean     always_wrap_char)
+{
+  PangoWrapMode wrap;
+  /* We probably should have a mode where we treat all white-space as
+   * of fungible width - appropriate for typography but not for
+   * editing.
+   */
+  wrap = layout->wrap;
+
+  if (wrap == PANGO_WRAP_WORD_CHAR)
+    wrap = always_wrap_char ? PANGO_WRAP_CHAR : PANGO_WRAP_WORD;
+
+  if (offset == layout->n_chars)
+    return TRUE;
+  else if (wrap == PANGO_WRAP_WORD)
+    return layout->log_attrs[offset].is_line_break;
+  else if (wrap == PANGO_WRAP_CHAR)
+    return layout->log_attrs[offset].is_char_break;
+  else
+    {
+      g_warning (G_STRLOC": broken PangoLayout");
+      return TRUE;
+    }
+}
+
+static inline gboolean
+can_break_in (PangoLayout *layout,
+             int          start_offset,
+             int          num_chars,
+             gboolean     allow_break_at_start)
+{
+  int i;
+
+  for (i = allow_break_at_start ? 0 : 1; i < num_chars; i++)
+    if (can_break_at (layout, start_offset + i, FALSE))
+      return TRUE;
+
+  return FALSE;
+}
+
+static inline void
+distribute_letter_spacing (int  letter_spacing,
+                          int *space_left,
+                          int *space_right)
+{
+  *space_left = letter_spacing / 2;
+  /* hinting */
+  if ((letter_spacing & (PANGO_SCALE - 1)) == 0)
+    {
+      *space_left = PANGO_UNITS_ROUND (*space_left);
+    }
+  *space_right = letter_spacing - *space_left;
+}
+
+typedef enum
+{
+  BREAK_NONE_FIT,
+  BREAK_SOME_FIT,
+  BREAK_ALL_FIT,
+  BREAK_EMPTY_FIT,
+  BREAK_LINE_SEPARATOR
+} BreakResult;
+
+struct _ParaBreakState
+{
+  /* maintained per layout */
+  int line_height;             /* Estimate of height of current line; < 0 is no estimate */
+  int remaining_height;                /* Remaining height of the layout;  only defined if layout->height >= 0 */
+
+  /* maintained per paragraph */
+  PangoAttrList *attrs;                /* Attributes being used for itemization */
+  GList *items;                        /* This paragraph turned into items */
+  PangoDirection base_dir;     /* Current resolved base direction */
+  gboolean line_of_par;                /* Line of the paragraph, starting at 1 for first line */
+
+  PangoGlyphString *glyphs;    /* Glyphs for the first item in state->items */
+  int start_offset;            /* Character offset of first item in state->items in layout->text */
+  ItemProperties properties;   /* Properties for the first item in state->items */
+  int *log_widths;             /* Logical widths for first item in state->items.. */
+  int log_widths_offset;        /* Offset into log_widths to the point corresponding
+                                * to the remaining portion of the first item */
+
+  int line_start_index;                /* Start index (byte offset) of line in layout->text */
+  int line_start_offset;       /* Character offset of line in layout->text */
+
+  /* maintained per line */
+  int line_width;              /* Goal width of line currently processing; < 0 is infinite */
+  int remaining_width;         /* Amount of space remaining on line; < 0 is infinite */
+};
+
+static gboolean
+should_ellipsize_current_line (PangoLayout    *layout,
+                              ParaBreakState *state);
+
+static PangoGlyphString *
+shape_run (PangoLayoutLine *line,
+          ParaBreakState  *state,
+          PangoItem       *item)
+{
+  PangoLayout *layout = line->layout;
+  PangoGlyphString *glyphs = pango_glyph_string_new ();
+
+  if (layout->text[item->offset] == '\t')
+    shape_tab (line, glyphs);
+  else
+    {
+      if (state->properties.shape_set)
+       _pango_shape_shape (layout->text + item->offset, item->num_chars,
+                           state->properties.shape_ink_rect, state->properties.shape_logical_rect,
+                           glyphs);
+      else
+       pango_shape (layout->text + item->offset, item->length, &item->analysis, glyphs);
+
+      if (state->properties.letter_spacing)
+       {
+         PangoGlyphItem glyph_item;
+         int space_left, space_right;
+
+         glyph_item.item = item;
+         glyph_item.glyphs = glyphs;
+
+         pango_glyph_item_letter_space (&glyph_item,
+                                        layout->text,
+                                        layout->log_attrs + state->start_offset,
+                                        state->properties.letter_spacing);
+
+         distribute_letter_spacing (state->properties.letter_spacing, &space_left, &space_right);
+
+         glyphs->glyphs[0].geometry.width += space_left;
+         glyphs->glyphs[0].geometry.x_offset += space_left;
+         glyphs->glyphs[glyphs->num_glyphs - 1].geometry.width += space_right;
+       }
+    }
+
+  return glyphs;
+}
+
+static void
+insert_run (PangoLayoutLine *line,
+           ParaBreakState  *state,
+           PangoItem       *run_item,
+           gboolean         last_run)
+{
+  PangoLayoutRun *run = g_slice_new (PangoLayoutRun);
+
+  run->item = run_item;
+
+  if (last_run && state->log_widths_offset == 0)
+    run->glyphs = state->glyphs;
+  else
+    run->glyphs = shape_run (line, state, run_item);
+
+  if (last_run)
+    {
+      if (state->log_widths_offset > 0)
+       pango_glyph_string_free (state->glyphs);
+      state->glyphs = NULL;
+      g_free (state->log_widths);
+      state->log_widths = NULL;
+    }
+
+  line->runs = g_slist_prepend (line->runs, run);
+  line->length += run_item->length;
+}
+
+#if 0
+# define DEBUG debug
+void
+debug (const char *where, PangoLayoutLine *line, ParaBreakState *state)
+{
+  int line_width = pango_layout_line_get_width (line);
+
+  g_debug ("rem %d + line %d = %d              %s",
+          state->remaining_width,
+          line_width,
+          state->remaining_width + line_width,
+          where);
+}
+#else
+# define DEBUG(where, line, state) do { } while (0)
+#endif
+
+/* Tries to insert as much as possible of the item at the head of
+ * state->items onto @line. Five results are possible:
+ *
+ *  %BREAK_NONE_FIT: Couldn't fit anything.
+ *  %BREAK_SOME_FIT: The item was broken in the middle.
+ *  %BREAK_ALL_FIT: Everything fit.
+ *  %BREAK_EMPTY_FIT: Nothing fit, but that was ok, as we can break at the first char.
+ *  %BREAK_LINE_SEPARATOR: Item begins with a line separator.
+ *
+ * If @force_fit is %TRUE, then %BREAK_NONE_FIT will never
+ * be returned, a run will be added even if inserting the minimum amount
+ * will cause the line to overflow. This is used at the start of a line
+ * and until we've found at least some place to break.
+ *
+ * If @no_break_at_end is %TRUE, then %BREAK_ALL_FIT will never be
+ * returned even everything fits; the run will be broken earlier,
+ * or %BREAK_NONE_FIT returned. This is used when the end of the
+ * run is not a break position.
+ */
+static BreakResult
+process_item (PangoLayout     *layout,
+             PangoLayoutLine *line,
+             ParaBreakState  *state,
+             gboolean         force_fit,
+             gboolean         no_break_at_end)
+{
+  PangoItem *item = state->items->data;
+  gboolean shape_set = FALSE;
+  int width;
+  int length;
+  int i;
+  gboolean processing_new_item = FALSE;
+
+  /* Only one character has type G_UNICODE_LINE_SEPARATOR in Unicode 5.0;
+   * update this if that changes. */
+#define LINE_SEPARATOR 0x2028
+
+  if (!state->glyphs)
+    {
+      pango_layout_get_item_properties (item, &state->properties);
+      state->glyphs = shape_run (line, state, item);
+
+      state->log_widths = NULL;
+      state->log_widths_offset = 0;
+
+      processing_new_item = TRUE;
+    }
+
+  if (!layout->single_paragraph &&
+      g_utf8_get_char (layout->text + item->offset) == LINE_SEPARATOR &&
+      !should_ellipsize_current_line (layout, state))
+    {
+      insert_run (line, state, item, TRUE);
+      state->log_widths_offset += item->num_chars;
+      return BREAK_LINE_SEPARATOR;
+    }
+
+  if (state->remaining_width < 0 && !no_break_at_end)  /* Wrapping off */
+    {
+      insert_run (line, state, item, TRUE);
+
+      return BREAK_ALL_FIT;
+    }
+
+  width = 0;
+  if (processing_new_item)
+    {
+      width = pango_glyph_string_get_width (state->glyphs);
+    }
+  else
+    {
+      for (i = 0; i < item->num_chars; i++)
+       width += state->log_widths[state->log_widths_offset + i];
+    }
+
+  if ((width <= state->remaining_width || (item->num_chars == 1 && !line->runs)) &&
+      !no_break_at_end)
+    {
+      state->remaining_width -= width;
+      state->remaining_width = MAX (state->remaining_width, 0);
+      insert_run (line, state, item, TRUE);
+
+      return BREAK_ALL_FIT;
+    }
+  else
+    {
+      int num_chars = item->num_chars;
+      int break_num_chars = num_chars;
+      int break_width = width;
+      int orig_width = width;
+      gboolean retrying_with_char_breaks = FALSE;
+
+      if (processing_new_item)
+       {
+         PangoGlyphItem glyph_item = {item, state->glyphs};
+         state->log_widths = g_new (int, item->num_chars);
+         pango_glyph_item_get_logical_widths (&glyph_item, layout->text, state->log_widths);
+       }
+
+    retry_break:
+
+      /* See how much of the item we can stuff in the line
+       */
+      width = 0;
+      for (num_chars = 0; num_chars < item->num_chars; num_chars++)
+       {
+         if (width > state->remaining_width && break_num_chars < item->num_chars)
+           break;
+
+         /* If there are no previous runs we have to take care to grab at least one char. */
+         if (can_break_at (layout, state->start_offset + num_chars, retrying_with_char_breaks) &&
+             (num_chars > 0 || line->runs))
+           {
+             break_num_chars = num_chars;
+             break_width = width;
+           }
+
+         width += state->log_widths[state->log_widths_offset + num_chars];
+       }
+
+      if (layout->wrap == PANGO_WRAP_WORD_CHAR && force_fit && break_width > state->remaining_width && !retrying_with_char_breaks)
+       {
+         retrying_with_char_breaks = TRUE;
+         num_chars = item->num_chars;
+         width = orig_width;
+         break_num_chars = num_chars;
+         break_width = width;
+         goto retry_break;
+       }
+
+      if (force_fit || break_width <= state->remaining_width)  /* Successfully broke the item */
+       {
+         if (state->remaining_width >= 0)
+           {
+             state->remaining_width -= break_width;
+             state->remaining_width = MAX (state->remaining_width, 0);
+           }
+
+         if (break_num_chars == item->num_chars)
+           {
+             insert_run (line, state, item, TRUE);
+
+             return BREAK_ALL_FIT;
+           }
+         else if (break_num_chars == 0)
+           {
+             return BREAK_EMPTY_FIT;
+           }
+         else
+           {
+             PangoItem *new_item;
+
+             length = g_utf8_offset_to_pointer (layout->text + item->offset, break_num_chars) - (layout->text + item->offset);
+
+             new_item = pango_item_split (item, length, break_num_chars);
+             
+             /* reshaping may slightly change the item width.  update
+              * remaining_width if we are justifying */
+
+             state->remaining_width += break_width;
+
+             insert_run (line, state, new_item, FALSE);
+
+             if (layout->justify)
+               break_width = pango_glyph_string_get_width (((PangoGlyphItem *)(line->runs->data))->glyphs);
+
+             state->remaining_width -= break_width;
+
+             state->log_widths_offset += break_num_chars;
+
+             /* Shaped items should never be broken */
+             g_assert (!shape_set);
+
+             return BREAK_SOME_FIT;
+           }
+       }
+      else
+       {
+         pango_glyph_string_free (state->glyphs);
+         state->glyphs = NULL;
+         g_free (state->log_widths);
+         state->log_widths = NULL;
+
+         return BREAK_NONE_FIT;
+       }
+    }
+}
+
+/* The resolved direction for the line is always one
+ * of LTR/RTL; not a week or neutral directions
+ */
+static void
+line_set_resolved_dir (PangoLayoutLine *line,
+                      PangoDirection   direction)
+{
+  switch (direction)
+    {
+    default:
+    case PANGO_DIRECTION_LTR:
+    case PANGO_DIRECTION_TTB_RTL:
+    case PANGO_DIRECTION_WEAK_LTR:
+    case PANGO_DIRECTION_NEUTRAL:
+      line->resolved_dir = PANGO_DIRECTION_LTR;
+      break;
+    case PANGO_DIRECTION_RTL:
+    case PANGO_DIRECTION_WEAK_RTL:
+    case PANGO_DIRECTION_TTB_LTR:
+      line->resolved_dir = PANGO_DIRECTION_RTL;
+      break;
+    }
+
+  /* The direction vs. gravity dance:
+   *   - If gravity is SOUTH, leave direction untouched.
+   *   - If gravity is NORTH, switch direction.
+   *   - If gravity is EAST, set to LTR, as
+   *     it's a clockwise-rotated layout, so the rotated
+   *     top is unrotated left.
+   *   - If gravity is WEST, set to RTL, as
+   *     it's a counter-clockwise-rotated layout, so the rotated
+   *     top is unrotated right.
+   *
+   * A similar dance is performed in pango-context.c:
+   * itemize_state_add_character().  Keep in synch.
+   */
+  switch (pango_context_get_gravity (line->layout->context))
+    {
+    default:
+    case PANGO_GRAVITY_AUTO:
+    case PANGO_GRAVITY_SOUTH:
+      break;
+    case PANGO_GRAVITY_NORTH:
+      line->resolved_dir = PANGO_DIRECTION_LTR
+                        + PANGO_DIRECTION_RTL
+                        - line->resolved_dir;
+      break;
+    case PANGO_GRAVITY_EAST:
+      /* This is in fact why deprecated TTB_RTL is LTR */
+      line->resolved_dir = PANGO_DIRECTION_LTR;
+      break;
+    case PANGO_GRAVITY_WEST:
+      /* This is in fact why deprecated TTB_LTR is RTL */
+      line->resolved_dir = PANGO_DIRECTION_RTL;
+      break;
+    }
+}
+
+static gboolean
+should_ellipsize_current_line (PangoLayout    *layout, 
+                              ParaBreakState *state)
+{
+  if (G_LIKELY (layout->ellipsize == PANGO_ELLIPSIZE_NONE || layout->width < 0))
+    return FALSE;
+  
+
+  if (layout->height >= 0)
+    {
+      /* state->remaining_height is height of layout left */
+
+      /* if we can't stuff two more lines at the current guess of line height,
+       * the line we are going to produce is going to be the last line */
+      return state->line_height * 2 > state->remaining_height;
+    }
+  else
+    {
+      /* -layout->height is number of lines per paragraph to show */
+      return state->line_of_par == - layout->height;
+    }
+}
+
+static void
+add_line (PangoLayoutLine *line,
+         ParaBreakState  *state)
+{
+  PangoLayout *layout = line->layout;
+
+  /* we prepend, then reverse the list later */
+  layout->lines = g_slist_prepend (layout->lines, line);
+  layout->line_count++;
+
+  if (layout->height >= 0)
+    {
+      PangoRectangle logical_rect;
+      pango_layout_line_get_extents (line, NULL, &logical_rect);
+      state->remaining_height -= logical_rect.height;
+      state->line_height = logical_rect.height;
+    }
+}
+
+static void
+process_line (PangoLayout    *layout,
+             ParaBreakState *state)
+{
+  PangoLayoutLine *line;
+
+  gboolean have_break = FALSE;      /* If we've seen a possible break yet */
+  int break_remaining_width = 0;    /* Remaining width before adding run with break */
+  int break_start_offset = 0;      /* Start offset before adding run with break */
+  GSList *break_link = NULL;        /* Link holding run before break */
+  gboolean wrapped = FALSE;         /* If we had to wrap the line */
+
+  line = pango_layout_line_new (layout);
+  line->start_index = state->line_start_index;
+  line->is_paragraph_start = state->line_of_par == 1;
+  line_set_resolved_dir (line, state->base_dir);
+
+  state->line_width = layout->width;
+  if (state->line_width >= 0 && layout->alignment != PANGO_ALIGN_CENTER)
+    {
+      if (line->is_paragraph_start && layout->indent >= 0)
+       state->line_width -= layout->indent;
+      else if (!line->is_paragraph_start && layout->indent < 0)
+       state->line_width += layout->indent;
+
+      if (state->line_width < 0)
+        state->line_width = 0;
+    }
+
+  if (G_UNLIKELY (should_ellipsize_current_line (layout, state)))
+    state->remaining_width = -1;
+  else
+    state->remaining_width = state->line_width;
+  DEBUG ("starting to fill line", line, state);
+
+  while (state->items)
+    {
+      PangoItem *item = state->items->data;
+      BreakResult result;
+      int old_num_chars;
+      int old_remaining_width;
+      gboolean first_item_in_line;
+
+      old_num_chars = item->num_chars;
+      old_remaining_width = state->remaining_width;
+      first_item_in_line = line->runs != NULL;
+
+      result = process_item (layout, line, state, !have_break, FALSE);
+
+      switch (result)
+       {
+       case BREAK_ALL_FIT:
+         if (can_break_in (layout, state->start_offset, old_num_chars, first_item_in_line))
+           {
+             have_break = TRUE;
+             break_remaining_width = old_remaining_width;
+             break_start_offset = state->start_offset;
+             break_link = line->runs->next;
+           }
+
+         state->items = g_list_delete_link (state->items, state->items);
+         state->start_offset += old_num_chars;
+
+         break;
+
+       case BREAK_EMPTY_FIT:
+         wrapped = TRUE;
+         goto done;
+
+       case BREAK_SOME_FIT:
+         state->start_offset += old_num_chars - item->num_chars;
+         wrapped = TRUE;
+         goto done;
+
+       case BREAK_NONE_FIT:
+         /* Back up over unused runs to run where there is a break */
+         while (line->runs && line->runs != break_link)
+           state->items = g_list_prepend (state->items, uninsert_run (line));
+
+         state->start_offset = break_start_offset;
+         state->remaining_width = break_remaining_width;
+
+         /* Reshape run to break */
+         item = state->items->data;
+
+         old_num_chars = item->num_chars;
+         result = process_item (layout, line, state, TRUE, TRUE);
+         g_assert (result == BREAK_SOME_FIT || result == BREAK_EMPTY_FIT);
+
+         state->start_offset += old_num_chars - item->num_chars;
+
+         wrapped = TRUE;
+         goto done;
+
+       case BREAK_LINE_SEPARATOR:
+         state->items = g_list_delete_link (state->items, state->items);
+         state->start_offset += old_num_chars;
+         /* A line-separate is just a forced break.  Set wrapped, so we do
+          * justification */
+         wrapped = TRUE;
+         goto done;
+       }
+    }
+
+ done:
+  pango_layout_line_postprocess (line, state, wrapped);
+  add_line (line, state);
+  state->line_of_par++;
+  state->line_start_index += line->length;
+  state->line_start_offset = state->start_offset;
+}
+
+static void
+get_items_log_attrs (const char   *text,
+                    GList        *items,
+                    PangoLogAttr *log_attrs,
+                    int           para_delimiter_len)
+{
+  int offset = 0;
+  int index = 0;
+
+  while (items)
+    {
+      PangoItem tmp_item = *(PangoItem *)items->data;
+
+      /* Accumulate all the consecutive items that match in language
+       * characteristics, ignoring font, style tags, etc.
+       */
+      while (items->next)
+       {
+         PangoItem *next_item = items->next->data;
+
+         /* FIXME: Handle language tags */
+         if (next_item->analysis.lang_engine != tmp_item.analysis.lang_engine)
+           break;
+         else
+           {
+             tmp_item.length += next_item->length;
+             tmp_item.num_chars += next_item->num_chars;
+           }
+
+         items = items->next;
+       }
+
+      /* Break the paragraph delimiters with the last item */
+      if (items->next == NULL)
+       {
+         tmp_item.num_chars += pango_utf8_strlen (text + index + tmp_item.length, para_delimiter_len);
+         tmp_item.length += para_delimiter_len;
+       }
+
+      /* XXX This is wrong.  we should call pango_default_break on the entire
+       * layout text and then tailor_break on each lang_engine change, like
+       * pango_get_log_attrs does.
+       */
+      pango_break (text + index, tmp_item.length, &tmp_item.analysis,
+                  log_attrs + offset, tmp_item.num_chars + 1);
+
+      offset += tmp_item.num_chars;
+      index += tmp_item.length;
+
+      items = items->next;
+    }
+}
+
+static PangoAttrList *
+pango_layout_get_effective_attributes (PangoLayout *layout)
+{
+  PangoAttrList *attrs;
+
+  if (layout->attrs)
+    attrs = pango_attr_list_copy (layout->attrs);
+  else
+    attrs = pango_attr_list_new ();
+
+  if (layout->font_desc)
+    {
+      PangoAttribute *attr = pango_attr_font_desc_new (layout->font_desc);
+      pango_attr_list_insert_before (attrs, attr);
+    }
+
+  return attrs;
+}
+
+static gboolean
+no_shape_filter_func (PangoAttribute *attribute,
+                     gpointer        data G_GNUC_UNUSED)
+{
+  static const PangoAttrType no_shape_types[] = {
+    PANGO_ATTR_FOREGROUND,
+    PANGO_ATTR_BACKGROUND,
+    PANGO_ATTR_UNDERLINE,
+    PANGO_ATTR_STRIKETHROUGH,
+    PANGO_ATTR_RISE
+  };
+
+  int i;
+
+  for (i = 0; i < (int)G_N_ELEMENTS (no_shape_types); i++)
+    if (attribute->klass->type == no_shape_types[i])
+      return TRUE;
+
+  return FALSE;
+}
+
+static PangoAttrList *
+filter_no_shape_attributes (PangoAttrList *attrs)
+{
+  return pango_attr_list_filter (attrs,
+                                no_shape_filter_func,
+                                NULL);
+}
+
+static void
+apply_no_shape_attributes (PangoLayout   *layout,
+                          PangoAttrList *no_shape_attrs)
+{
+  GSList *line_list;
+
+  for (line_list = layout->lines; line_list; line_list = line_list->next)
+    {
+      PangoLayoutLine *line = line_list->data;
+      GSList *old_runs = g_slist_reverse (line->runs);
+      GSList *run_list;
+
+      line->runs = NULL;
+      for (run_list = old_runs; run_list; run_list = run_list->next)
+       {
+         PangoGlyphItem *glyph_item = run_list->data;
+         GSList *new_runs;
+
+         new_runs = pango_glyph_item_apply_attrs (glyph_item,
+                                                  layout->text,
+                                                  no_shape_attrs);
+
+         line->runs = g_slist_concat (new_runs, line->runs);
+       }
+
+      g_slist_free (old_runs);
+    }
+}
+
+static void
+pango_layout_check_lines (PangoLayout *layout)
+{
+  const char *start;
+  gboolean done = FALSE;
+  int start_offset;
+  PangoAttrList *attrs;
+  PangoAttrList *no_shape_attrs;
+  PangoAttrIterator *iter;
+  PangoDirection prev_base_dir = PANGO_DIRECTION_NEUTRAL, base_dir = PANGO_DIRECTION_NEUTRAL;
+  ParaBreakState state;
+
+  if (G_LIKELY (layout->lines))
+    return;
+
+  g_assert (!layout->log_attrs);
+
+  /* For simplicity, we make sure at this point that layout->text
+   * is non-NULL even if it is zero length
+   */
+  if (G_UNLIKELY (!layout->text))
+    pango_layout_set_text (layout, NULL, 0);
+
+  attrs = pango_layout_get_effective_attributes (layout);
+  no_shape_attrs = filter_no_shape_attributes (attrs);
+  iter = pango_attr_list_get_iterator (attrs);
+
+  layout->log_attrs = g_new (PangoLogAttr, layout->n_chars + 1);
+
+  start_offset = 0;
+  start = layout->text;
+
+  /* Find the first strong direction of the text */
+  if (layout->auto_dir)
+    {
+      prev_base_dir = pango_find_base_dir (layout->text, layout->length);
+      if (prev_base_dir == PANGO_DIRECTION_NEUTRAL)
+       prev_base_dir = pango_context_get_base_dir (layout->context);
+    }
+  else
+    base_dir = pango_context_get_base_dir (layout->context);
+
+  /* these are only used if layout->height >= 0 */
+  state.remaining_height = layout->height;
+  state.line_height = -1;
+  if (layout->height >= 0)
+    {
+      PangoRectangle logical;
+      pango_layout_get_empty_extents_at_index (layout, 0, &logical);
+      state.line_height = logical.height;
+    }
+
+  do
+    {
+      int delim_len;
+      const char *end;
+      int delimiter_index, next_para_index;
+
+      if (layout->single_paragraph)
+       {
+         delimiter_index = layout->length;
+         next_para_index = layout->length;
+       }
+      else
+       {
+         pango_find_paragraph_boundary (start,
+                                        (layout->text + layout->length) - start,
+                                        &delimiter_index,
+                                        &next_para_index);
+       }
+
+      g_assert (next_para_index >= delimiter_index);
+
+      if (layout->auto_dir)
+       {
+         base_dir = pango_find_base_dir (start, delimiter_index);
+
+         /* Propagate the base direction for neutral paragraphs */
+         if (base_dir == PANGO_DIRECTION_NEUTRAL)
+           base_dir = prev_base_dir;
+         else
+           prev_base_dir = base_dir;
+       }
+
+      end = start + delimiter_index;
+
+      delim_len = next_para_index - delimiter_index;
+
+      if (end == (layout->text + layout->length))
+       done = TRUE;
+
+      g_assert (end <= (layout->text + layout->length));
+      g_assert (start <= (layout->text + layout->length));
+      g_assert (delim_len < 4);        /* PS is 3 bytes */
+      g_assert (delim_len >= 0);
+
+      state.attrs = attrs;
+      state.items = pango_itemize_with_base_dir (layout->context,
+                                                base_dir,
+                                                layout->text,
+                                                start - layout->text,
+                                                end - start,
+                                                attrs,
+                                                iter);
+
+      get_items_log_attrs (start, state.items,
+                          layout->log_attrs + start_offset,
+                          delim_len);
+
+      state.base_dir = base_dir;
+      state.line_of_par = 1;
+      state.start_offset = start_offset;
+      state.line_start_offset = start_offset;
+      state.line_start_index = start - layout->text;
+
+      state.glyphs = NULL;
+      state.log_widths = NULL;
+
+      /* for deterministic bug hunting's sake set everything! */
+      state.line_width = -1;
+      state.remaining_width = -1;
+      state.log_widths_offset = 0;
+
+      if (state.items)
+       {
+         while (state.items)
+           process_line (layout, &state);
+       }
+      else
+       {
+         PangoLayoutLine *empty_line;
+
+         empty_line = pango_layout_line_new (layout);
+         empty_line->start_index = state.line_start_index;
+         empty_line->is_paragraph_start = TRUE;
+         line_set_resolved_dir (empty_line, base_dir);
+
+         add_line (empty_line, &state);
+       }
+
+      if (layout->height >= 0 && state.remaining_height < state.line_height)
+       done = TRUE;
+
+      if (!done)
+       start_offset += pango_utf8_strlen (start, (end - start) + delim_len);
+
+      start = end + delim_len;
+    }
+  while (!done);
+
+  pango_attr_iterator_destroy (iter);
+  pango_attr_list_unref (attrs);
+
+  if (no_shape_attrs)
+    {
+      apply_no_shape_attributes (layout, no_shape_attrs);
+      pango_attr_list_unref (no_shape_attrs);
+    }
+
+  layout->lines = g_slist_reverse (layout->lines);
+}
+
+/**
+ * pango_layout_line_ref:
+ * @line: a #PangoLayoutLine, may be %NULL
+ *
+ * Increase the reference count of a #PangoLayoutLine by one.
+ *
+ * Return value: the line passed in.
+ *
+ * Since: 1.10
+ **/
+PangoLayoutLine *
+pango_layout_line_ref (PangoLayoutLine *line)
+{
+  PangoLayoutLinePrivate *private = (PangoLayoutLinePrivate *)line;
+
+  if (line == NULL)
+    return NULL;
+
+  g_atomic_int_inc ((int *) &private->ref_count);
+
+  return line;
+}
+
+/**
+ * pango_layout_line_unref:
+ * @line: a #PangoLayoutLine
+ *
+ * Decrease the reference count of a #PangoLayoutLine by one.
+ * If the result is zero, the line and all associated memory
+ * will be freed.
+ **/
+void
+pango_layout_line_unref (PangoLayoutLine *line)
+{
+  PangoLayoutLinePrivate *private = (PangoLayoutLinePrivate *)line;
+
+  if (line == NULL)
+    return;
+
+  g_return_if_fail (private->ref_count > 0);
+
+  if (g_atomic_int_dec_and_test ((int *) &private->ref_count))
+    {
+      g_slist_foreach (line->runs, (GFunc)free_run, GINT_TO_POINTER (1));
+      g_slist_free (line->runs);
+      g_slice_free (PangoLayoutLinePrivate, private);
+    }
+}
+
+GType
+pango_layout_line_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoLayoutLine"),
+                                            (GBoxedCopyFunc) pango_layout_line_ref,
+                                            (GBoxedFreeFunc) pango_layout_line_unref);
+  return our_type;
+}
+
+/**
+ * pango_layout_line_x_to_index:
+ * @line:      a #PangoLayoutLine
+ * @x_pos:     the X offset (in Pango units)
+ *             from the left edge of the line.
+ * @index_:    location to store calculated byte index for
+ *             the grapheme in which the user clicked.
+ * @trailing:  location to store an integer indicating where
+ *             in the grapheme the user clicked. It will either
+ *             be zero, or the number of characters in the
+ *             grapheme. 0 represents the leading edge of the grapheme.
+ *
+ * Converts from x offset to the byte index of the corresponding
+ * character within the text of the layout. If @x_pos is outside the line,
+ * @index_ and @trailing will point to the very first or very last position
+ * in the line. This determination is based on the resolved direction
+ * of the paragraph; for example, if the resolved direction is
+ * right-to-left, then an X position to the right of the line (after it)
+ * results in 0 being stored in @index_ and @trailing. An X position to the
+ * left of the line results in @index_ pointing to the (logical) last
+ * grapheme in the line and @trailing being set to the number of characters
+ * in that grapheme. The reverse is true for a left-to-right line.
+ *
+ * Return value: %FALSE if @x_pos was outside the line, %TRUE if inside
+ **/
+gboolean
+pango_layout_line_x_to_index (PangoLayoutLine *line,
+                             int              x_pos,
+                             int             *index,
+                             int             *trailing)
+{
+  GSList *tmp_list;
+  gint start_pos = 0;
+  gint first_index = 0; /* line->start_index */
+  gint first_offset;
+  gint last_index;      /* start of last grapheme in line */
+  gint last_offset;
+  gint end_index;       /* end iterator for line */
+  gint end_offset;      /* end iterator for line */
+  PangoLayout *layout;
+  gint last_trailing;
+  gboolean suppress_last_trailing;
+
+  g_return_val_if_fail (line != NULL, FALSE);
+  g_return_val_if_fail (LINE_IS_VALID (line), FALSE);
+
+  if (!LINE_IS_VALID (line))
+    return FALSE;
+
+  layout = line->layout;
+
+  /* Find the last index in the line
+   */
+  first_index = line->start_index;
+
+  if (line->length == 0)
+    {
+      if (index)
+       *index = first_index;
+      if (trailing)
+       *trailing = 0;
+
+      return FALSE;
+    }
+
+  g_assert (line->length > 0);
+
+  first_offset = g_utf8_pointer_to_offset (layout->text, layout->text + line->start_index);
+
+  end_index = first_index + line->length;
+  end_offset = first_offset + g_utf8_pointer_to_offset (layout->text + first_index, layout->text + end_index);
+
+  last_index = end_index;
+  last_offset = end_offset;
+  last_trailing = 0;
+  do
+    {
+      last_index = g_utf8_prev_char (layout->text + last_index) - layout->text;
+      last_offset--;
+      last_trailing++;
+    }
+  while (last_offset > first_offset && !layout->log_attrs[last_offset].is_cursor_position);
+
+  /* This is a HACK. If a program only keeps track of cursor (etc)
+   * indices and not the trailing flag, then the trailing index of the
+   * last character on a wrapped line is identical to the leading
+   * index of the next line. So, we fake it and set the trailing flag
+   * to zero.
+   *
+   * That is, if the text is "now is the time", and is broken between
+   * 'now' and 'is'
+   *
+   * Then when the cursor is actually at:
+   *
+   * n|o|w| |i|s|
+   *              ^
+   * we lie and say it is at:
+   *
+   * n|o|w| |i|s|
+   *            ^
+   *
+   * So the cursor won't appear on the next line before 'the'.
+   *
+   * Actually, any program keeping cursor
+   * positions with wrapped lines should distinguish leading and
+   * trailing cursors.
+   */
+  tmp_list = layout->lines;
+  while (tmp_list->data != line)
+    tmp_list = tmp_list->next;
+
+  if (tmp_list->next &&
+      line->start_index + line->length == ((PangoLayoutLine *)tmp_list->next->data)->start_index)
+    suppress_last_trailing = TRUE;
+  else
+    suppress_last_trailing = FALSE;
+
+  if (x_pos < 0)
+    {
+      /* pick the leftmost char */
+      if (index)
+       *index = (line->resolved_dir == PANGO_DIRECTION_LTR) ? first_index : last_index;
+      /* and its leftmost edge */
+      if (trailing)
+       *trailing = (line->resolved_dir == PANGO_DIRECTION_LTR || suppress_last_trailing) ? 0 : last_trailing;
+
+      return FALSE;
+    }
+
+  tmp_list = line->runs;
+  while (tmp_list)
+    {
+      PangoLayoutRun *run = tmp_list->data;
+      ItemProperties properties;
+      int logical_width;
+
+      pango_layout_get_item_properties (run->item, &properties);
+
+      logical_width = pango_glyph_string_get_width (run->glyphs);
+
+      if (x_pos >= start_pos && x_pos < start_pos + logical_width)
+       {
+         int offset;
+         gboolean char_trailing;
+         int grapheme_start_index;
+         int grapheme_start_offset;
+         int grapheme_end_offset;
+         int pos;
+         int char_index;
+
+         pango_glyph_string_x_to_index (run->glyphs,
+                                        layout->text + run->item->offset, run->item->length,
+                                        &run->item->analysis,
+                                        x_pos - start_pos,
+                                        &pos, &char_trailing);
+
+         char_index = run->item->offset + pos;
+
+         /* Convert from characters to graphemes */
+
+         offset = g_utf8_pointer_to_offset (layout->text, layout->text + char_index);
+
+         grapheme_start_offset = offset;
+         grapheme_start_index = char_index;
+         while (grapheme_start_offset > first_offset &&
+                !layout->log_attrs[grapheme_start_offset].is_cursor_position)
+           {
+             grapheme_start_index = g_utf8_prev_char (layout->text + grapheme_start_index) - layout->text;
+             grapheme_start_offset--;
+           }
+
+         grapheme_end_offset = offset;
+         do
+           {
+             grapheme_end_offset++;
+           }
+         while (grapheme_end_offset < end_offset &&
+                !layout->log_attrs[grapheme_end_offset].is_cursor_position);
+
+         if (index)
+           *index = grapheme_start_index;
+
+         if (trailing)
+           {
+             if ((grapheme_end_offset == end_offset && suppress_last_trailing) ||
+                 offset + char_trailing <= (grapheme_start_offset + grapheme_end_offset) / 2)
+               *trailing = 0;
+             else
+               *trailing = grapheme_end_offset - grapheme_start_offset;
+           }
+
+         return TRUE;
+       }
+
+      start_pos += logical_width;
+      tmp_list = tmp_list->next;
+    }
+
+  /* pick the rightmost char */
+  if (index)
+    *index = (line->resolved_dir == PANGO_DIRECTION_LTR) ? last_index : first_index;
+
+  /* and its rightmost edge */
+  if (trailing)
+    *trailing = (line->resolved_dir == PANGO_DIRECTION_LTR && !suppress_last_trailing) ? last_trailing : 0;
+
+  return FALSE;
+}
+
+static int
+pango_layout_line_get_width (PangoLayoutLine *line)
+{
+  int width = 0;
+  GSList *tmp_list = line->runs;
+
+  while (tmp_list)
+    {
+      PangoLayoutRun *run = tmp_list->data;
+
+      width += pango_glyph_string_get_width (run->glyphs);
+
+      tmp_list = tmp_list->next;
+    }
+
+  return width;
+}
+
+/**
+ * pango_layout_line_get_x_ranges:
+ * @line:        a #PangoLayoutLine
+ * @start_index: Start byte index of the logical range. If this value
+ *               is less than the start index for the line, then
+ *               the first range will extend all the way to the leading
+ *               edge of the layout. Otherwise it will start at the
+ *               leading edge of the first character.
+ * @end_index:   Ending byte index of the logical range. If this value
+ *               is greater than the end index for the line, then
+ *               the last range will extend all the way to the trailing
+ *               edge of the layout. Otherwise, it will end at the
+ *               trailing edge of the last character.
+ * @ranges: (out): (array length=n_ranges): (transfer=full):
+ *               location to store a pointer to an array of ranges.
+ *               The array will be of length <literal>2*n_ranges</literal>,
+ *               with each range starting at <literal>(*ranges)[2*n]</literal>
+ *               and of width <literal>(*ranges)[2*n + 1] - (*ranges)[2*n]</literal>.
+ *               This array must be freed with g_free(). The coordinates are relative
+ *               to the layout and are in Pango units.
+ * @n_ranges: The number of ranges stored in @ranges.
+ *
+ * Gets a list of visual ranges corresponding to a given logical range.
+ * This list is not necessarily minimal - there may be consecutive
+ * ranges which are adjacent. The ranges will be sorted from left to
+ * right. The ranges are with respect to the left edge of the entire
+ * layout, not with respect to the line.
+ **/
+void
+pango_layout_line_get_x_ranges (PangoLayoutLine  *line,
+                               int               start_index,
+                               int               end_index,
+                               int             **ranges,
+                               int              *n_ranges)
+{
+  gint line_start_index = 0;
+  GSList *tmp_list;
+  int range_count = 0;
+  int accumulated_width = 0;
+  int x_offset;
+  int width, line_width;
+  PangoAlignment alignment;
+
+  g_return_if_fail (line != NULL);
+  g_return_if_fail (line->layout != NULL);
+  g_return_if_fail (start_index <= end_index);
+
+  alignment = get_alignment (line->layout, line);
+
+  width = line->layout->width;
+  if (width == -1 && alignment != PANGO_ALIGN_LEFT)
+    {
+      PangoRectangle logical_rect;
+      pango_layout_get_extents (line->layout, NULL, &logical_rect);
+      width = logical_rect.width;
+    }
+
+  /* FIXME: The computations here could be optimized, by moving the
+   * computations of the x_offset after we go through and figure
+   * out where each range is.
+   */
+
+  {
+    PangoRectangle logical_rect;
+    pango_layout_line_get_extents (line, NULL, &logical_rect);
+    line_width = logical_rect.width;
+  }
+
+  get_x_offset (line->layout, line, width, line_width, &x_offset);
+
+  line_start_index = line->start_index;
+
+  /* Allocate the maximum possible size */
+  if (ranges)
+    *ranges = g_new (int, 2 * (2 + g_slist_length (line->runs)));
+
+  if (x_offset > 0 &&
+      ((line->resolved_dir == PANGO_DIRECTION_LTR && start_index < line_start_index) ||
+       (line->resolved_dir == PANGO_DIRECTION_RTL && end_index > line_start_index + line->length)))
+    {
+      if (ranges)
+       {
+         (*ranges)[2*range_count] = 0;
+         (*ranges)[2*range_count + 1] = x_offset;
+       }
+
+      range_count ++;
+    }
+
+  tmp_list = line->runs;
+  while (tmp_list)
+    {
+      PangoLayoutRun *run = (PangoLayoutRun *)tmp_list->data;
+
+      if ((start_index < run->item->offset + run->item->length &&
+          end_index > run->item->offset))
+       {
+         if (ranges)
+           {
+             int run_start_index = MAX (start_index, run->item->offset);
+             int run_end_index = MIN (end_index, run->item->offset + run->item->length);
+             int run_start_x, run_end_x;
+
+             g_assert (run_end_index > 0);
+
+             /* Back the end_index off one since we want to find the trailing edge of the preceding character */
+
+             run_end_index = g_utf8_prev_char (line->layout->text + run_end_index) - line->layout->text;
+
+             pango_glyph_string_index_to_x (run->glyphs,
+                                            line->layout->text + run->item->offset,
+                                            run->item->length,
+                                            &run->item->analysis,
+                                            run_start_index - run->item->offset, FALSE,
+                                            &run_start_x);
+             pango_glyph_string_index_to_x (run->glyphs,
+                                            line->layout->text + run->item->offset,
+                                            run->item->length,
+                                            &run->item->analysis,
+                                            run_end_index - run->item->offset, TRUE,
+                                            &run_end_x);
+
+             (*ranges)[2*range_count] = x_offset + accumulated_width + MIN (run_start_x, run_end_x);
+             (*ranges)[2*range_count + 1] = x_offset + accumulated_width + MAX (run_start_x, run_end_x);
+           }
+
+         range_count++;
+       }
+
+      if (tmp_list->next)
+       accumulated_width += pango_glyph_string_get_width (run->glyphs);
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (x_offset + line_width < line->layout->width &&
+      ((line->resolved_dir == PANGO_DIRECTION_LTR && end_index > line_start_index + line->length) ||
+       (line->resolved_dir == PANGO_DIRECTION_RTL && start_index < line_start_index)))
+    {
+      if (ranges)
+       {
+         (*ranges)[2*range_count] = x_offset + line_width;
+         (*ranges)[2*range_count + 1] = line->layout->width;
+       }
+
+      range_count ++;
+    }
+
+  if (n_ranges)
+    *n_ranges = range_count;
+}
+
+static void
+pango_layout_get_empty_extents_at_index (PangoLayout    *layout,
+                                        int             index,
+                                        PangoRectangle *logical_rect)
+{
+  if (logical_rect)
+    {
+      PangoFont *font;
+      PangoFontDescription *font_desc = NULL;
+      gboolean free_font_desc = FALSE;
+
+      font_desc = pango_context_get_font_description (layout->context);
+
+      if (layout->font_desc)
+        {
+         font_desc = pango_font_description_copy_static (font_desc);
+         pango_font_description_merge (font_desc, layout->font_desc, TRUE);
+         free_font_desc = TRUE;
+       }
+
+      /* Find the font description for this line
+       */
+      if (layout->attrs)
+       {
+         PangoAttrIterator *iter = pango_attr_list_get_iterator (layout->attrs);
+         int start, end;
+
+         do
+           {
+             pango_attr_iterator_range (iter, &start, &end);
+
+             if (start <= index && index < end)
+               {
+                 PangoFontDescription *base_font_desc;
+
+                 if (layout->font_desc)
+                   base_font_desc = layout->font_desc;
+                 else
+                   base_font_desc = pango_context_get_font_description (layout->context);
+
+                 if (!free_font_desc)
+                   {
+                     font_desc = pango_font_description_copy_static (font_desc);
+                     free_font_desc = TRUE;
+                   }
+
+                 pango_attr_iterator_get_font (iter,
+                                               font_desc,
+                                               NULL,
+                                               NULL);
+
+                 break;
+               }
+
+           }
+         while (pango_attr_iterator_next (iter));
+
+         pango_attr_iterator_destroy (iter);
+       }
+
+      font = pango_context_load_font (layout->context, font_desc);
+      if (font)
+       {
+         PangoFontMetrics *metrics;
+
+         metrics = pango_font_get_metrics (font,
+                                           pango_context_get_language (layout->context));
+
+         if (metrics)
+           {
+             logical_rect->y = - pango_font_metrics_get_ascent (metrics);
+             logical_rect->height = - logical_rect->y + pango_font_metrics_get_descent (metrics);
+
+             pango_font_metrics_unref (metrics);
+           }
+         else
+           {
+             logical_rect->y = 0;
+             logical_rect->height = 0;
+           }
+         g_object_unref (font);
+       }
+      else
+       {
+         logical_rect->y = 0;
+         logical_rect->height = 0;
+       }
+
+      if (free_font_desc)
+       pango_font_description_free (font_desc);
+
+      logical_rect->x = 0;
+      logical_rect->width = 0;
+    }
+}
+
+static void
+pango_layout_line_get_empty_extents (PangoLayoutLine *line,
+                                    PangoRectangle  *logical_rect)
+{
+  pango_layout_get_empty_extents_at_index (line->layout, line->start_index, logical_rect);
+}
+
+static void
+pango_layout_run_get_extents (PangoLayoutRun *run,
+                             PangoRectangle *run_ink,
+                             PangoRectangle *run_logical)
+{
+  PangoRectangle logical;
+  ItemProperties properties;
+
+  if (G_UNLIKELY (!run_ink && !run_logical))
+    return;
+
+  pango_layout_get_item_properties (run->item, &properties);
+
+  if (!run_logical && (run->item->analysis.flags & PANGO_ANALYSIS_FLAG_CENTERED_BASELINE))
+    run_logical = &logical;
+
+  if (!run_logical && (properties.uline != PANGO_UNDERLINE_NONE || properties.strikethrough))
+    run_logical = &logical;
+
+  if (properties.shape_set)
+    _pango_shape_get_extents (run->item->num_chars,
+                             properties.shape_ink_rect,
+                             properties.shape_logical_rect,
+                             run_ink, run_logical);
+  else
+    pango_glyph_string_extents (run->glyphs, run->item->analysis.font,
+                               run_ink, run_logical);
+
+  if (run_ink && (properties.uline != PANGO_UNDERLINE_NONE || properties.strikethrough))
+    {
+      PangoFontMetrics *metrics = pango_font_get_metrics (run->item->analysis.font,
+                                                         run->item->analysis.language);
+      int underline_thickness = pango_font_metrics_get_underline_thickness (metrics);
+      int underline_position = pango_font_metrics_get_underline_position (metrics);
+      int strikethrough_thickness = pango_font_metrics_get_strikethrough_thickness (metrics);
+      int strikethrough_position = pango_font_metrics_get_strikethrough_position (metrics);
+
+      int new_pos;
+
+      /* the underline/strikethrough takes x,width of logical_rect.  reflect
+       * that into ink_rect.
+       */
+      new_pos = MIN (run_ink->x, run_logical->x);
+      run_ink->width = MAX (run_ink->x + run_ink->width, run_logical->x + run_logical->width) - new_pos;
+      run_ink->x = new_pos;
+
+      /* We should better handle the case of height==0 in the following cases.
+       * If run_ink->height == 0, we should adjust run_ink->y appropriately.
+       */
+
+      if (properties.strikethrough)
+       {
+         if (run_ink->height == 0)
+           {
+             run_ink->height = strikethrough_thickness;
+             run_ink->y = -strikethrough_position;
+           }
+       }
+
+      switch (properties.uline)
+       {
+       case PANGO_UNDERLINE_ERROR:
+         run_ink->height = MAX (run_ink->height,
+                                3 * underline_thickness - underline_position - run_ink->y);
+         break;
+       case PANGO_UNDERLINE_SINGLE:
+         run_ink->height = MAX (run_ink->height,
+                                underline_thickness - underline_position - run_ink->y);
+         break;
+       case PANGO_UNDERLINE_DOUBLE:
+         run_ink->height = MAX (run_ink->height,
+                                3 * underline_thickness - underline_position - run_ink->y);
+         break;
+       case PANGO_UNDERLINE_LOW:
+         run_ink->height += 2 * underline_thickness;
+         break;
+       case PANGO_UNDERLINE_NONE:
+         break;
+       default:
+         g_critical ("unknown underline mode");
+         break;
+       }
+
+      pango_font_metrics_unref (metrics);
+    }
+
+  if (run->item->analysis.flags & PANGO_ANALYSIS_FLAG_CENTERED_BASELINE)
+    {
+      gboolean is_hinted = (run_logical->y & run_logical->height & (PANGO_SCALE - 1)) == 0;
+      int adjustment = run_logical->y + run_logical->height / 2;
+
+      if (is_hinted)
+       adjustment = PANGO_UNITS_ROUND (adjustment);
+
+      properties.rise += adjustment;
+    }
+
+  if (properties.rise != 0)
+    {
+      if (run_ink)
+       run_ink->y -= properties.rise;
+
+      if (run_logical)
+       run_logical->y -= properties.rise;
+    }
+}
+
+/**
+ * pango_layout_line_get_extents:
+ * @line:     a #PangoLayoutLine
+ * @ink_rect: rectangle used to store the extents of the glyph string
+ *            as drawn, or %NULL
+ * @logical_rect: rectangle used to store the logical extents of the glyph
+ *            string, or %NULL
+ *
+ * Computes the logical and ink extents of a layout line. See
+ * pango_font_get_glyph_extents() for details about the interpretation
+ * of the rectangles.
+ */
+void
+pango_layout_line_get_extents (PangoLayoutLine *line,
+                              PangoRectangle  *ink_rect,
+                              PangoRectangle  *logical_rect)
+{
+  PangoLayoutLinePrivate *private = (PangoLayoutLinePrivate *)line;
+  GSList *tmp_list;
+  int x_pos = 0;
+  gboolean caching = FALSE;
+
+  g_return_if_fail (LINE_IS_VALID (line));
+
+  if (!LINE_IS_VALID (line))
+    return;
+
+  if (G_UNLIKELY (!ink_rect && !logical_rect))
+    return;
+
+  switch (private->cache_status)
+    {
+    case CACHED:
+      {
+       if (ink_rect)
+         *ink_rect = private->ink_rect;
+       if (logical_rect)
+         *logical_rect = private->logical_rect;
+       return;
+      }
+    case NOT_CACHED:
+      {
+       caching = TRUE;
+       if (!ink_rect)
+         ink_rect = &private->ink_rect;
+       if (!logical_rect)
+         logical_rect = &private->logical_rect;
+       break;
+      }
+    case LEAKED:
+      {
+       break;
+      }
+    }
+
+  if (ink_rect)
+    {
+      ink_rect->x = 0;
+      ink_rect->y = 0;
+      ink_rect->width = 0;
+      ink_rect->height = 0;
+    }
+
+  if (logical_rect)
+    {
+      logical_rect->x = 0;
+      logical_rect->y = 0;
+      logical_rect->width = 0;
+      logical_rect->height = 0;
+    }
+
+  tmp_list = line->runs;
+  while (tmp_list)
+    {
+      PangoLayoutRun *run = tmp_list->data;
+      int new_pos;
+      PangoRectangle run_ink;
+      PangoRectangle run_logical;
+
+      pango_layout_run_get_extents (run,
+                                   ink_rect ? &run_ink : NULL,
+                                   &run_logical);
+
+      if (ink_rect)
+       {
+         if (ink_rect->width == 0 || ink_rect->height == 0)
+           {
+             *ink_rect = run_ink;
+             ink_rect->x += x_pos;
+           }
+         else if (run_ink.width != 0 && run_ink.height != 0)
+           {
+             new_pos = MIN (ink_rect->x, x_pos + run_ink.x);
+             ink_rect->width = MAX (ink_rect->x + ink_rect->width,
+                                    x_pos + run_ink.x + run_ink.width) - new_pos;
+             ink_rect->x = new_pos;
+
+             new_pos = MIN (ink_rect->y, run_ink.y);
+             ink_rect->height = MAX (ink_rect->y + ink_rect->height,
+                                     run_ink.y + run_ink.height) - new_pos;
+             ink_rect->y = new_pos;
+           }
+       }
+
+      if (logical_rect)
+       {
+         new_pos = MIN (logical_rect->x, x_pos + run_logical.x);
+         logical_rect->width = MAX (logical_rect->x + logical_rect->width,
+                                    x_pos + run_logical.x + run_logical.width) - new_pos;
+         logical_rect->x = new_pos;
+
+         new_pos = MIN (logical_rect->y, run_logical.y);
+         logical_rect->height = MAX (logical_rect->y + logical_rect->height,
+                                     run_logical.y + run_logical.height) - new_pos;
+         logical_rect->y = new_pos;
+       }
+
+     x_pos += run_logical.width;
+     tmp_list = tmp_list->next;
+    }
+
+  if (logical_rect && !line->runs)
+    pango_layout_line_get_empty_extents (line, logical_rect);
+
+  if (caching)
+    {
+      if (&private->ink_rect != ink_rect)
+       private->ink_rect = *ink_rect;
+      if (&private->logical_rect != logical_rect)
+       private->logical_rect = *logical_rect;
+      private->cache_status = CACHED;
+    }
+}
+
+static PangoLayoutLine *
+pango_layout_line_new (PangoLayout *layout)
+{
+  PangoLayoutLinePrivate *private = g_slice_new (PangoLayoutLinePrivate);
+
+  private->ref_count = 1;
+  private->line.layout = layout;
+  private->line.runs = NULL;
+  private->line.length = 0;
+  private->cache_status = NOT_CACHED;
+
+  /* Note that we leave start_index, resolved_dir, and is_paragraph_start
+   *  uninitialized */
+
+  return (PangoLayoutLine *) private;
+}
+
+/**
+ * pango_layout_line_get_pixel_extents:
+ * @layout_line: a #PangoLayoutLine
+ * @ink_rect:    rectangle used to store the extents of the glyph string
+ *               as drawn, or %NULL
+ * @logical_rect: rectangle used to store the logical extents of the glyph
+ *               string, or %NULL
+ *
+ * Computes the logical and ink extents of @layout_line in device units.
+ * This function just calls pango_layout_line_get_extents() followed by
+ * two pango_extents_to_pixels() calls, rounding @ink_rect and @logical_rect
+ * such that the rounded rectangles fully contain the unrounded one (that is,
+ * passes them as first argument to pango_extents_to_pixels()).
+ **/
+void
+pango_layout_line_get_pixel_extents (PangoLayoutLine *layout_line,
+                                    PangoRectangle  *ink_rect,
+                                    PangoRectangle  *logical_rect)
+{
+  g_return_if_fail (LINE_IS_VALID (layout_line));
+
+  pango_layout_line_get_extents (layout_line, ink_rect, logical_rect);
+  pango_extents_to_pixels (ink_rect, NULL);
+  pango_extents_to_pixels (logical_rect, NULL);
+}
+
+/*
+ * NB: This implement the exact same algorithm as
+ *     reorder-items.c:pango_reorder_items().
+ */
+
+static GSList *
+reorder_runs_recurse (GSList *items, int n_items)
+{
+  GSList *tmp_list, *level_start_node;
+  int i, level_start_i;
+  int min_level = G_MAXINT;
+  GSList *result = NULL;
+
+  if (n_items == 0)
+    return NULL;
+
+  tmp_list = items;
+  for (i=0; i<n_items; i++)
+    {
+      PangoLayoutRun *run = tmp_list->data;
+
+      min_level = MIN (min_level, run->item->analysis.level);
+
+      tmp_list = tmp_list->next;
+    }
+
+  level_start_i = 0;
+  level_start_node = items;
+  tmp_list = items;
+  for (i=0; i<n_items; i++)
+    {
+      PangoLayoutRun *run = tmp_list->data;
+
+      if (run->item->analysis.level == min_level)
+       {
+         if (min_level % 2)
+           {
+             if (i > level_start_i)
+               result = g_slist_concat (reorder_runs_recurse (level_start_node, i - level_start_i), result);
+             result = g_slist_prepend (result, run);
+           }
+         else
+           {
+             if (i > level_start_i)
+               result = g_slist_concat (result, reorder_runs_recurse (level_start_node, i - level_start_i));
+             result = g_slist_append (result, run);
+           }
+
+         level_start_i = i + 1;
+         level_start_node = tmp_list->next;
+       }
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (min_level % 2)
+    {
+      if (i > level_start_i)
+       result = g_slist_concat (reorder_runs_recurse (level_start_node, i - level_start_i), result);
+    }
+  else
+    {
+      if (i > level_start_i)
+       result = g_slist_concat (result, reorder_runs_recurse (level_start_node, i - level_start_i));
+    }
+
+  return result;
+}
+
+static void
+pango_layout_line_reorder (PangoLayoutLine *line)
+{
+  GSList *logical_runs = line->runs;
+  line->runs = reorder_runs_recurse (logical_runs, g_slist_length (logical_runs));
+  g_slist_free (logical_runs);
+}
+
+static int
+get_item_letter_spacing (PangoItem *item)
+{
+  ItemProperties properties;
+
+  pango_layout_get_item_properties (item, &properties);
+
+  return properties.letter_spacing;
+}
+
+static void
+pad_glyphstring_right (PangoGlyphString *glyphs,
+                      ParaBreakState   *state,
+                      int               adjustment)
+{
+  int glyph = glyphs->num_glyphs - 1;
+
+  while (glyph >= 0 && glyphs->glyphs[glyph].geometry.width == 0)
+    glyph--;
+
+  if (glyph < 0)
+    return;
+
+  state->remaining_width -= adjustment;
+  glyphs->glyphs[glyph].geometry.width += adjustment;
+  if (glyphs->glyphs[glyph].geometry.width < 0)
+    {
+      state->remaining_width += glyphs->glyphs[glyph].geometry.width;
+      glyphs->glyphs[glyph].geometry.width = 0;
+    }
+}
+
+static void
+pad_glyphstring_left (PangoGlyphString *glyphs,
+                     ParaBreakState   *state,
+                     int               adjustment)
+{
+  int glyph = 0;
+
+  while (glyph < glyphs->num_glyphs && glyphs->glyphs[glyph].geometry.width == 0)
+    glyph++;
+
+  if (glyph == glyphs->num_glyphs)
+    return;
+
+  state->remaining_width -= adjustment;
+  glyphs->glyphs[glyph].geometry.width += adjustment;
+  glyphs->glyphs[glyph].geometry.x_offset += adjustment;
+}
+
+static gboolean
+is_tab_run (PangoLayout    *layout,
+           PangoLayoutRun *run)
+{
+  return (layout->text[run->item->offset] == '\t');
+}
+
+static void
+zero_line_final_space (PangoLayoutLine *line,
+                      ParaBreakState  *state,
+                      PangoLayoutRun  *run)
+{
+  PangoLayout *layout = line->layout;
+  PangoItem *item = run->item;
+  PangoGlyphString *glyphs = run->glyphs;
+  int glyph = item->analysis.level % 2 ? 0 : glyphs->num_glyphs - 1;
+  const char *p;
+
+  /* if the final char of line forms a cluster, and it's
+   * a whitespace char, zero its glyph's width as it's been wrapped
+   */
+
+  if (glyphs->num_glyphs < 1 || state->start_offset == 0 ||
+      !layout->log_attrs[state->start_offset - 1].is_white)
+    return;
+
+  p = g_utf8_prev_char (layout->text + item->offset + item->length);
+  if (p != layout->text + item->offset + glyphs->log_clusters[glyph])
+    return;
+
+  state->remaining_width += glyphs->glyphs[glyph].geometry.width;
+  glyphs->glyphs[glyph].geometry.width = 0;
+}
+
+/* When doing shaping, we add the letter spacing value for a
+ * run after every grapheme in the run. This produces ugly
+ * asymmetrical results, so what this routine is redistributes
+ * that space to the beginning and the end of the run.
+ *
+ * We also trim the letter spacing from runs adjacent to
+ * tabs and from the outside runs of the lines so that things
+ * line up properly. The line breaking and tab positioning
+ * were computed without this trimming so they are no longer
+ * exactly correct, but this won't be very noticeable in most
+ * cases.
+ */
+static void
+adjust_line_letter_spacing (PangoLayoutLine *line,
+                           ParaBreakState  *state)
+{
+  PangoLayout *layout = line->layout;
+  gboolean reversed;
+  PangoLayoutRun *last_run;
+  int tab_adjustment;
+  GSList *l;
+
+  /* If we have tab stops and the resolved direction of the
+   * line is RTL, then we need to walk through the line
+   * in reverse direction to figure out the corrections for
+   * tab stops.
+   */
+  reversed = FALSE;
+  if (line->resolved_dir == PANGO_DIRECTION_RTL)
+    {
+      for (l = line->runs; l; l = l->next)
+       if (is_tab_run (layout, l->data))
+         {
+           line->runs = g_slist_reverse (line->runs);
+           reversed = TRUE;
+           break;
+         }
+    }
+
+  /* Walk over the runs in the line, redistributing letter
+   * spacing from the end of the run to the start of the
+   * run and trimming letter spacing from the ends of the
+   * runs adjacent to the ends of the line or tab stops.
+   *
+   * We accumulate a correction factor from this trimming
+   * which we add onto the next tab stop space to keep the
+   * things properly aligned.
+   */
+
+  last_run = NULL;
+  tab_adjustment = 0;
+  for (l = line->runs; l; l = l->next)
+    {
+      PangoLayoutRun *run = l->data;
+      PangoLayoutRun *next_run = l->next ? l->next->data : NULL;
+
+      if (is_tab_run (layout, run))
+       {
+         pad_glyphstring_right (run->glyphs, state, tab_adjustment);
+         tab_adjustment = 0;
+       }
+      else
+       {
+         PangoLayoutRun *visual_next_run = reversed ? last_run : next_run;
+         PangoLayoutRun *visual_last_run = reversed ? next_run : last_run;
+         int run_spacing = get_item_letter_spacing (run->item);
+         int space_left, space_right;
+
+         distribute_letter_spacing (run_spacing, &space_left, &space_right);
+
+         if (run->glyphs->glyphs[0].geometry.width == 0)
+           {
+             /* we've zeroed this space glyph at the end of line, now remove
+              * the letter spacing added to its adjacent glyph */
+             pad_glyphstring_left (run->glyphs, state, - space_left);
+           }
+         else if (!visual_last_run || is_tab_run (layout, visual_last_run))
+           {
+             pad_glyphstring_left (run->glyphs, state, - space_left);
+             tab_adjustment += space_left;
+           }
+
+         if (run->glyphs->glyphs[run->glyphs->num_glyphs - 1].geometry.width == 0)
+           {
+             /* we've zeroed this space glyph at the end of line, now remove
+              * the letter spacing added to its adjacent glyph */
+             pad_glyphstring_right (run->glyphs, state, - space_right);
+           }
+         else if (!visual_next_run || is_tab_run (layout, visual_next_run))
+           {
+             pad_glyphstring_right (run->glyphs, state, - space_right);
+             tab_adjustment += space_right;
+           }
+       }
+
+      last_run = run;
+    }
+
+  if (reversed)
+    line->runs = g_slist_reverse (line->runs);
+}
+
+static void
+justify_clusters (PangoLayoutLine *line,
+                 ParaBreakState  *state)
+{
+  int total_remaining_width, total_gaps = 0;
+  int added_so_far, gaps_so_far;
+  gboolean is_hinted;
+  GSList *run_iter;
+  enum {
+    MEASURE,
+    ADJUST
+  } mode;
+
+  total_remaining_width = state->remaining_width;
+  if (total_remaining_width <= 0)
+    return;
+
+  /* hint to full pixel if total remaining width was so */
+  is_hinted = (total_remaining_width & (PANGO_SCALE - 1)) == 0;
+
+  for (mode = MEASURE; mode <= ADJUST; mode++)
+    {
+      added_so_far = 0;
+      gaps_so_far = 0;
+
+      for (run_iter = line->runs; run_iter; run_iter = run_iter->next)
+       {
+         PangoLayoutRun *run = run_iter->data;
+         PangoGlyphString *glyphs = run->glyphs;
+         gboolean is_first_gap = TRUE;
+
+         int i;
+
+         for (i = 0; i < glyphs->num_glyphs; i++)
+           {
+             if (!glyphs->glyphs[i].attr.is_cluster_start)
+               continue;
+
+             /* also don't expand zero-width spaces at the end of runs */
+             if (glyphs->glyphs[i].geometry.width == 0)
+               {
+                 if (i == glyphs->num_glyphs -1)
+                   continue;
+
+                 if (i == 0 && glyphs->num_glyphs > 1 && glyphs->glyphs[i+1].attr.is_cluster_start)
+                   continue;
+               }
+
+             if (is_first_gap)
+               {
+                 is_first_gap = FALSE;
+                 continue;
+               }
+
+             gaps_so_far++;
+
+             if (mode == ADJUST)
+               {
+                 int adjustment, space_left, space_right;
+
+                 adjustment = (gaps_so_far * total_remaining_width) / total_gaps - added_so_far;
+                 if (is_hinted)
+                   adjustment = PANGO_UNITS_ROUND (adjustment);
+                 /* distribute to before/after */
+                 distribute_letter_spacing (adjustment, &space_left, &space_right);
+
+                 glyphs->glyphs[i-1].geometry.width    += space_left ;
+                 glyphs->glyphs[i  ].geometry.width    += space_right;
+                 glyphs->glyphs[i  ].geometry.x_offset += space_right;
+
+                 added_so_far += adjustment;
+               }
+           }
+       }
+
+      if (mode == MEASURE)
+       {
+         total_gaps = gaps_so_far;
+
+         if (total_gaps == 0)
+           {
+             /* a single cluster, can't really justify it */
+             return;
+           }
+       }
+    }
+
+  state->remaining_width -= added_so_far;
+}
+
+static void
+justify_words (PangoLayoutLine *line,
+              ParaBreakState  *state)
+{
+  const gchar *text = line->layout->text;
+  const PangoLogAttr *log_attrs = line->layout->log_attrs;
+
+  int offset;
+  int total_remaining_width, total_space_width = 0;
+  int added_so_far, spaces_so_far;
+  gboolean is_hinted;
+  GSList *run_iter;
+  enum {
+    MEASURE,
+    ADJUST
+  } mode;
+
+  total_remaining_width = state->remaining_width;
+  if (total_remaining_width <= 0)
+    return;
+
+  /* hint to full pixel if total remaining width was so */
+  is_hinted = (total_remaining_width & (PANGO_SCALE - 1)) == 0;
+
+  for (mode = MEASURE; mode <= ADJUST; mode++)
+    {
+      added_so_far = 0;
+      spaces_so_far = 0;
+
+      offset = state->line_start_offset;
+      for (run_iter = line->runs; run_iter; run_iter = run_iter->next)
+       {
+         PangoLayoutRun *run = run_iter->data;
+         PangoGlyphString *glyphs = run->glyphs;
+         PangoGlyphItemIter cluster_iter;
+         gboolean have_cluster;
+
+         for (have_cluster = pango_glyph_item_iter_init_start (&cluster_iter, run, text);
+              have_cluster;
+              have_cluster = pango_glyph_item_iter_next_cluster (&cluster_iter))
+           {
+             int i;
+             int dir;
+
+             if (!log_attrs[offset + cluster_iter.start_char].is_expandable_space)
+               continue;
+
+             dir = (cluster_iter.start_glyph < cluster_iter.end_glyph) ? 1 : -1;
+             for (i = cluster_iter.start_glyph; i != cluster_iter.end_glyph; i += dir)
+               {
+                 int glyph_width = glyphs->glyphs[i].geometry.width;
+
+                 if (glyph_width == 0)
+                   continue;
+
+                 spaces_so_far += glyph_width;
+
+                 if (mode == ADJUST)
+                   {
+                     int adjustment;
+
+                     adjustment = ((guint64) spaces_so_far * total_remaining_width) / total_space_width - added_so_far;
+                     if (is_hinted)
+                       adjustment = PANGO_UNITS_ROUND (adjustment);
+
+                     glyphs->glyphs[i].geometry.width += adjustment;
+                     added_so_far += adjustment;
+                   }
+               }
+           }
+
+         offset += glyphs->num_glyphs;
+       }
+
+      if (mode == MEASURE)
+       {
+         total_space_width = spaces_so_far;
+
+         if (total_space_width == 0)
+           {
+             justify_clusters (line, state);
+             return;
+           }
+       }
+    }
+
+  state->remaining_width -= added_so_far;
+}
+
+static void
+pango_layout_line_postprocess (PangoLayoutLine *line,
+                              ParaBreakState  *state,
+                              gboolean         wrapped)
+{
+  gboolean ellipsized = FALSE;
+  
+  DEBUG ("postprocessing", line, state);
+
+  /* Truncate the logical-final whitespace in the line if we broke the line at it
+   */
+  if (wrapped)
+    /* The runs are in reverse order at this point, since we prepended them to the list.
+     * So, the first run is the last logical run. */
+    zero_line_final_space (line, state, line->runs->data);
+
+  /* Reverse the runs
+   */
+  line->runs = g_slist_reverse (line->runs);
+
+  /* Ellipsize the line if necessary
+   */
+  if (G_UNLIKELY (state->line_width >= 0 &&
+                 should_ellipsize_current_line (line->layout, state)))
+    {
+      ellipsized = _pango_layout_line_ellipsize (line, state->attrs, state->line_width);
+    }
+
+  DEBUG ("after removing final space", line, state);
+
+  /* Now convert logical to visual order
+   */
+  pango_layout_line_reorder (line);
+
+  DEBUG ("after reordering", line, state);
+
+  /* Fixup letter spacing between runs
+   */
+  adjust_line_letter_spacing (line, state);
+
+  DEBUG ("after letter spacing", line, state);
+
+  /* Distribute extra space between words if justifying and line was wrapped
+   */
+  if (line->layout->justify && (wrapped || ellipsized))
+    {
+      /* if we ellipsized, we don't have remaining_width set */
+      if (state->remaining_width < 0)
+       state->remaining_width = state->line_width - pango_layout_line_get_width (line);
+
+      justify_words (line, state);
+    }
+
+  DEBUG ("after justification", line, state);
+
+  line->layout->is_wrapped |= wrapped;
+  line->layout->is_ellipsized |= ellipsized;
+}
+
+static void
+pango_layout_get_item_properties (PangoItem      *item,
+                                 ItemProperties *properties)
+{
+  GSList *tmp_list = item->analysis.extra_attrs;
+
+  properties->uline = PANGO_UNDERLINE_NONE;
+  properties->strikethrough = FALSE;
+  properties->letter_spacing = 0;
+  properties->rise = 0;
+  properties->shape_set = FALSE;
+  properties->shape_ink_rect = NULL;
+  properties->shape_logical_rect = NULL;
+
+  while (tmp_list)
+    {
+      PangoAttribute *attr = tmp_list->data;
+
+      switch ((int) attr->klass->type)
+       {
+       case PANGO_ATTR_UNDERLINE:
+         properties->uline = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_STRIKETHROUGH:
+         properties->strikethrough = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_RISE:
+         properties->rise = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_LETTER_SPACING:
+         properties->letter_spacing = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_SHAPE:
+         properties->shape_set = TRUE;
+         properties->shape_logical_rect = &((PangoAttrShape *)attr)->logical_rect;
+         properties->shape_ink_rect = &((PangoAttrShape *)attr)->ink_rect;
+         break;
+
+       default:
+         break;
+       }
+      tmp_list = tmp_list->next;
+    }
+}
+
+static int
+next_cluster_start (PangoGlyphString *gs,
+                   int               cluster_start)
+{
+  int i;
+
+  i = cluster_start + 1;
+  while (i < gs->num_glyphs)
+    {
+      if (gs->glyphs[i].attr.is_cluster_start)
+       return i;
+
+      i++;
+    }
+
+  return gs->num_glyphs;
+}
+
+static int
+cluster_width (PangoGlyphString *gs,
+              int               cluster_start)
+{
+  int i;
+  int width;
+
+  width = gs->glyphs[cluster_start].geometry.width;
+  i = cluster_start + 1;
+  while (i < gs->num_glyphs)
+    {
+      if (gs->glyphs[i].attr.is_cluster_start)
+       break;
+
+      width += gs->glyphs[i].geometry.width;
+      i++;
+    }
+
+  return width;
+}
+
+static inline void
+offset_y (PangoLayoutIter *iter,
+         int             *y)
+{
+  Extents *line_ext;
+
+  line_ext = (Extents*)iter->line_extents_link->data;
+
+  *y += line_ext->baseline;
+}
+
+/* Sets up the iter for the start of a new cluster. cluster_start_index
+ * is the byte index of the cluster start relative to the run.
+ */
+static void
+update_cluster (PangoLayoutIter *iter,
+               int              cluster_start_index)
+{
+  char             *cluster_text;
+  PangoGlyphString *gs;
+  int               cluster_length;
+
+  iter->character_position = 0;
+
+  gs = iter->run->glyphs;
+  iter->cluster_width = cluster_width (gs, iter->cluster_start);
+  iter->next_cluster_glyph = next_cluster_start (gs, iter->cluster_start);
+
+  if (iter->ltr)
+    {
+      /* For LTR text, finding the length of the cluster is easy
+       * since logical and visual runs are in the same direction.
+       */
+      if (iter->next_cluster_glyph < gs->num_glyphs)
+       cluster_length = gs->log_clusters[iter->next_cluster_glyph] - cluster_start_index;
+      else
+       cluster_length = iter->run->item->length - cluster_start_index;
+    }
+  else
+    {
+      /* For RTL text, we have to scan backwards to find the previous
+       * visual cluster which is the next logical cluster.
+       */
+      int i = iter->cluster_start;
+      while (i > 0 && gs->log_clusters[i - 1] == cluster_start_index)
+       i--;
+
+      if (i == 0)
+       cluster_length = iter->run->item->length - cluster_start_index;
+      else
+       cluster_length = gs->log_clusters[i - 1] - cluster_start_index;
+    }
+
+  cluster_text = iter->layout->text + iter->run->item->offset + cluster_start_index;
+  iter->cluster_num_chars = pango_utf8_strlen (cluster_text, cluster_length);
+
+  if (iter->ltr)
+    iter->index = cluster_text - iter->layout->text;
+  else
+    iter->index = g_utf8_prev_char (cluster_text + cluster_length) - iter->layout->text;
+}
+
+static void
+update_run (PangoLayoutIter *iter,
+           int              run_start_index)
+{
+  Extents *line_ext;
+
+  line_ext = (Extents*)iter->line_extents_link->data;
+
+  /* Note that in iter_new() the iter->run_width
+   * is garbage but we don't use it since we're on the first run of
+   * a line.
+   */
+  if (iter->run_list_link == iter->line->runs)
+    iter->run_x = line_ext->logical_rect.x;
+  else
+    iter->run_x += iter->run_width;
+
+  if (iter->run)
+    {
+      iter->run_width = pango_glyph_string_get_width (iter->run->glyphs);
+    }
+  else
+    {
+      /* The empty run at the end of a line */
+      iter->run_width = 0;
+    }
+
+  if (iter->run)
+    iter->ltr = (iter->run->item->analysis.level % 2) == 0;
+  else
+    iter->ltr = TRUE;
+
+  iter->cluster_start = 0;
+  iter->cluster_x = iter->run_x;
+
+  if (iter->run)
+    {
+      update_cluster (iter, iter->run->glyphs->log_clusters[0]);
+    }
+  else
+    {
+      iter->cluster_width = 0;
+      iter->character_position = 0;
+      iter->cluster_num_chars = 0;
+      iter->index = run_start_index;
+    }
+}
+
+/**
+ * pango_layout_iter_copy:
+ * @iter: a #PangoLayoutIter, may be %NULL
+ *
+ * Copies a #PangLayoutIter.
+ *
+ * Return value: the newly allocated #PangoLayoutIter, which should
+ *               be freed with pango_layout_iter_free(), or %NULL if
+ *               @iter was %NULL.
+ *
+ * Since: 1.20
+ **/
+PangoLayoutIter *
+pango_layout_iter_copy (PangoLayoutIter *iter)
+{
+  PangoLayoutIter *new;
+  GSList *l;
+
+  if (iter == NULL)
+    return NULL;
+
+  new = g_slice_new (PangoLayoutIter);
+
+  new->layout = g_object_ref (iter->layout);
+  new->line_list_link = iter->line_list_link;
+  new->line = iter->line;
+  pango_layout_line_ref (new->line);
+
+  new->run_list_link = iter->run_list_link;
+  new->run = iter->run;
+  new->index = iter->index;
+
+  new->line_extents = NULL;
+  new->line_extents_link = NULL;
+  for (l = iter->line_extents; l; l = l->next)
+    {
+      new->line_extents = g_slist_prepend (new->line_extents,
+                              g_slice_dup (Extents, l->data));
+      if (l == iter->line_extents_link)
+       new->line_extents_link = new->line_extents;
+    }
+  new->line_extents = g_slist_reverse (new->line_extents);
+
+  new->run_x = iter->run_x;
+  new->run_width = iter->run_width;
+  new->ltr = iter->ltr;
+
+  new->cluster_x = iter->cluster_x;
+  new->cluster_width = iter->cluster_width;
+
+  new->cluster_start = iter->cluster_start;
+  new->next_cluster_glyph = iter->next_cluster_glyph;
+
+  new->cluster_num_chars = iter->cluster_num_chars;
+  new->character_position = iter->character_position;
+
+  new->layout_width = iter->layout_width;
+
+  return new;
+}
+
+GType
+pango_layout_iter_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoLayoutIter"),
+                                            (GBoxedCopyFunc) pango_layout_iter_copy,
+                                            (GBoxedFreeFunc) pango_layout_iter_free);
+
+  return our_type;
+}
+
+/**
+ * pango_layout_get_iter:
+ * @layout: a #PangoLayout
+ *
+ * Returns an iterator to iterate over the visual extents of the layout.
+ *
+ * Return value: the new #PangoLayoutIter that should be freed using
+ *               pango_layout_iter_free().
+ **/
+PangoLayoutIter*
+pango_layout_get_iter (PangoLayout *layout)
+{
+  int run_start_index;
+  PangoLayoutIter *iter;
+  PangoRectangle logical_rect;
+
+  g_return_val_if_fail (PANGO_IS_LAYOUT (layout), NULL);
+
+  iter = g_slice_new (PangoLayoutIter);
+
+  iter->layout = layout;
+  g_object_ref (iter->layout);
+
+  pango_layout_check_lines (layout);
+
+  iter->line_list_link = layout->lines;
+  iter->line = iter->line_list_link->data;
+  pango_layout_line_ref (iter->line);
+
+  run_start_index = iter->line->start_index;
+  iter->run_list_link = iter->line->runs;
+
+  if (iter->run_list_link)
+    {
+      iter->run = iter->run_list_link->data;
+      run_start_index = iter->run->item->offset;
+    }
+  else
+    iter->run = NULL;
+
+  iter->line_extents = NULL;
+  pango_layout_get_extents_internal (layout,
+                                    NULL,
+                                    &logical_rect,
+                                    &iter->line_extents);
+  iter->layout_width = layout->width == -1 ? logical_rect.width : layout->width;
+
+  iter->line_extents_link = iter->line_extents;
+
+  update_run (iter, run_start_index);
+
+  return iter;
+}
+
+/**
+ * pango_layout_iter_free:
+ * @iter: a #PangoLayoutIter, may be %NULL
+ *
+ * Frees an iterator that's no longer in use.
+ **/
+void
+pango_layout_iter_free (PangoLayoutIter *iter)
+{
+  if (iter == NULL)
+    return;
+
+  g_slist_foreach (iter->line_extents, (GFunc)extents_free, NULL);
+  g_slist_free (iter->line_extents);
+  pango_layout_line_unref (iter->line);
+  g_object_unref (iter->layout);
+  g_slice_free (PangoLayoutIter, iter);
+}
+
+/**
+ * pango_layout_iter_get_index:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the current byte index. Note that iterating forward by char
+ * moves in visual order, not logical order, so indexes may not be
+ * sequential. Also, the index may be equal to the length of the text
+ * in the layout, if on the %NULL run (see pango_layout_iter_get_run()).
+ *
+ * Return value: current byte index.
+ **/
+int
+pango_layout_iter_get_index (PangoLayoutIter *iter)
+{
+  if (ITER_IS_INVALID (iter))
+    return 0;
+
+  return iter->index;
+}
+
+/**
+ * pango_layout_iter_get_run:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the current run. When iterating by run, at the end of each
+ * line, there's a position with a %NULL run, so this function can return
+ * %NULL. The %NULL run at the end of each line ensures that all lines have
+ * at least one run, even lines consisting of only a newline.
+ *
+ * Use the faster pango_layout_iter_get_run_readonly() if you do not plan
+ * to modify the contents of the run (glyphs, glyph widths, etc.).
+ *
+ * Return value: the current run.
+ **/
+PangoLayoutRun*
+pango_layout_iter_get_run (PangoLayoutIter *iter)
+{
+  if (ITER_IS_INVALID (iter))
+    return NULL;
+
+  pango_layout_line_leaked (iter->line);
+
+  return iter->run;
+}
+
+/**
+ * pango_layout_iter_get_run_readonly:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the current run. When iterating by run, at the end of each
+ * line, there's a position with a %NULL run, so this function can return
+ * %NULL. The %NULL run at the end of each line ensures that all lines have
+ * at least one run, even lines consisting of only a newline.
+ *
+ * This is a faster alternative to pango_layout_iter_get_run(),
+ * but the user is not expected
+ * to modify the contents of the run (glyphs, glyph widths, etc.).
+ *
+ * Return value: the current run, that should not be modified.
+ *
+ * Since: 1.16
+ **/
+PangoLayoutRun*
+pango_layout_iter_get_run_readonly (PangoLayoutIter *iter)
+{
+  if (ITER_IS_INVALID (iter))
+    return NULL;
+
+  pango_layout_line_leaked (iter->line);
+
+  return iter->run;
+}
+
+/* an inline-able version for local use */
+static PangoLayoutLine*
+_pango_layout_iter_get_line (PangoLayoutIter *iter)
+{
+  return iter->line;
+}
+
+/**
+ * pango_layout_iter_get_line:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the current line.
+ *
+ * Use the faster pango_layout_iter_get_line_readonly() if you do not plan
+ * to modify the contents of the line (glyphs, glyph widths, etc.).
+ *
+ * Return value: the current line.
+ **/
+PangoLayoutLine*
+pango_layout_iter_get_line (PangoLayoutIter *iter)
+{
+  if (ITER_IS_INVALID (iter))
+    return NULL;
+
+  pango_layout_line_leaked (iter->line);
+
+  return iter->line;
+}
+
+/**
+ * pango_layout_iter_get_line_readonly:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the current line for read-only access.
+ *
+ * This is a faster alternative to pango_layout_iter_get_line(),
+ * but the user is not expected
+ * to modify the contents of the line (glyphs, glyph widths, etc.).
+ *
+ * Return value: the current line, that should not be modified.
+ *
+ * Since: 1.16
+ **/
+PangoLayoutLine*
+pango_layout_iter_get_line_readonly (PangoLayoutIter *iter)
+{
+  if (ITER_IS_INVALID (iter))
+    return NULL;
+
+  return iter->line;
+}
+
+/**
+ * pango_layout_iter_at_last_line:
+ * @iter: a #PangoLayoutIter
+ *
+ * Determines whether @iter is on the last line of the layout.
+ *
+ * Return value: %TRUE if @iter is on the last line.
+ **/
+gboolean
+pango_layout_iter_at_last_line (PangoLayoutIter *iter)
+{
+  if (ITER_IS_INVALID (iter))
+    return FALSE;
+
+  return iter->line_extents_link->next == NULL;
+}
+
+/**
+ * pango_layout_iter_get_layout:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the layout associated with a #PangoLayoutIter.
+ *
+ * Return value: the layout associated with @iter.
+ *
+ * Since: 1.20
+ **/
+PangoLayout*
+pango_layout_iter_get_layout (PangoLayoutIter *iter)
+{
+  /* check is redundant as it simply checks that iter->layout is not NULL */
+  if (ITER_IS_INVALID (iter))
+    return NULL;
+
+  return iter->layout;
+}
+
+
+static gboolean
+line_is_terminated (PangoLayoutIter *iter)
+{
+  /* There is a real terminator at the end of each paragraph other
+   * than the last.
+   */
+  if (iter->line_list_link->next)
+    {
+      PangoLayoutLine *next_line = iter->line_list_link->next->data;
+      if (next_line->is_paragraph_start)
+       return TRUE;
+    }
+
+  return FALSE;
+}
+
+/* Moves to the next non-empty line. If @include_terminators
+ * is set, a line with just an explicit paragraph separator
+ * is considered non-empty.
+ */
+static gboolean
+next_nonempty_line (PangoLayoutIter *iter,
+                   gboolean         include_terminators)
+{
+  gboolean result;
+
+  while (TRUE)
+    {
+      result = pango_layout_iter_next_line (iter);
+      if (!result)
+       break;
+
+      if (iter->line->runs)
+       break;
+
+      if (include_terminators && line_is_terminated (iter))
+       break;
+    }
+
+  return result;
+}
+
+/* Moves to the next non-empty run. If @include_terminators
+ * is set, the trailing run at the end of a line with an explicit
+ * paragraph separator is considered non-empty.
+ */
+static gboolean
+next_nonempty_run (PangoLayoutIter *iter,
+                   gboolean         include_terminators)
+{
+  gboolean result;
+
+  while (TRUE)
+    {
+      result = pango_layout_iter_next_run (iter);
+      if (!result)
+       break;
+
+      if (iter->run)
+       break;
+
+      if (include_terminators && line_is_terminated (iter))
+       break;
+    }
+
+  return result;
+}
+
+/* Like pango_layout_next_cluster(), but if @include_terminators
+ * is set, includes the fake runs/clusters for empty lines.
+ * (But not positions introduced by line wrapping).
+ */
+static gboolean
+next_cluster_internal (PangoLayoutIter *iter,
+                      gboolean         include_terminators)
+{
+  PangoGlyphString *gs;
+  int               next_start;
+
+  if (ITER_IS_INVALID (iter))
+    return FALSE;
+
+  if (iter->run == NULL)
+    return next_nonempty_line (iter, include_terminators);
+
+  gs = iter->run->glyphs;
+
+  next_start = iter->next_cluster_glyph;
+  if (next_start == gs->num_glyphs)
+    {
+      return next_nonempty_run (iter, include_terminators);
+    }
+  else
+    {
+      iter->cluster_start = next_start;
+      iter->cluster_x += iter->cluster_width;
+      update_cluster(iter, gs->log_clusters[iter->cluster_start]);
+
+      return TRUE;
+    }
+}
+
+/**
+ * pango_layout_iter_next_char:
+ * @iter: a #PangoLayoutIter
+ *
+ * Moves @iter forward to the next character in visual order. If @iter was already at
+ * the end of the layout, returns %FALSE.
+ *
+ * Return value: whether motion was possible.
+ **/
+gboolean
+pango_layout_iter_next_char (PangoLayoutIter *iter)
+{
+  const char *text;
+
+  if (ITER_IS_INVALID (iter))
+    return FALSE;
+
+  if (iter->run == NULL)
+    {
+      /* We need to fake an iterator position in the middle of a \r\n line terminator */
+      if (line_is_terminated (iter) &&
+         strncmp (iter->layout->text + iter->line->start_index + iter->line->length, "\r\n", 2) == 0 &&
+         iter->character_position == 0)
+       {
+         iter->character_position++;
+         return TRUE;
+       }
+
+      return next_nonempty_line (iter, TRUE);
+    }
+
+  iter->character_position++;
+  if (iter->character_position >= iter->cluster_num_chars)
+    return next_cluster_internal (iter, TRUE);
+
+  text = iter->layout->text;
+  if (iter->ltr)
+    iter->index = g_utf8_next_char (text + iter->index) - text;
+  else
+    iter->index = g_utf8_prev_char (text + iter->index) - text;
+
+  return TRUE;
+}
+
+/**
+ * pango_layout_iter_next_cluster:
+ * @iter: a #PangoLayoutIter
+ *
+ * Moves @iter forward to the next cluster in visual order. If @iter
+ * was already at the end of the layout, returns %FALSE.
+ *
+ * Return value: whether motion was possible.
+ **/
+gboolean
+pango_layout_iter_next_cluster (PangoLayoutIter *iter)
+{
+  return next_cluster_internal (iter, FALSE);
+}
+
+/**
+ * pango_layout_iter_next_run:
+ * @iter: a #PangoLayoutIter
+ *
+ * Moves @iter forward to the next run in visual order. If @iter was
+ * already at the end of the layout, returns %FALSE.
+ *
+ * Return value: whether motion was possible.
+ **/
+gboolean
+pango_layout_iter_next_run (PangoLayoutIter *iter)
+{
+  int next_run_start; /* byte index */
+  GSList *next_link;
+
+  if (ITER_IS_INVALID (iter))
+    return FALSE;
+
+  if (iter->run == NULL)
+    return pango_layout_iter_next_line (iter);
+
+  next_link = iter->run_list_link->next;
+
+  if (next_link == NULL)
+    {
+      /* Moving on to the zero-width "virtual run" at the end of each
+       * line
+       */
+      next_run_start = iter->run->item->offset + iter->run->item->length;
+      iter->run = NULL;
+      iter->run_list_link = NULL;
+    }
+  else
+    {
+      iter->run_list_link = next_link;
+      iter->run = iter->run_list_link->data;
+      next_run_start = iter->run->item->offset;
+    }
+
+  update_run (iter, next_run_start);
+
+  return TRUE;
+}
+
+/**
+ * pango_layout_iter_next_line:
+ * @iter: a #PangoLayoutIter
+ *
+ * Moves @iter forward to the start of the next line. If @iter is
+ * already on the last line, returns %FALSE.
+ *
+ * Return value: whether motion was possible.
+ **/
+gboolean
+pango_layout_iter_next_line (PangoLayoutIter *iter)
+{
+  GSList *next_link;
+
+  if (ITER_IS_INVALID (iter))
+    return FALSE;
+
+  next_link = iter->line_list_link->next;
+
+  if (next_link == NULL)
+    return FALSE;
+
+  iter->line_list_link = next_link;
+
+  pango_layout_line_unref (iter->line);
+
+  iter->line = iter->line_list_link->data;
+
+  pango_layout_line_ref (iter->line);
+
+  iter->run_list_link = iter->line->runs;
+
+  if (iter->run_list_link)
+    iter->run = iter->run_list_link->data;
+  else
+    iter->run = NULL;
+
+  iter->line_extents_link = iter->line_extents_link->next;
+  g_assert (iter->line_extents_link != NULL);
+
+  update_run (iter, iter->line->start_index);
+
+  return TRUE;
+}
+
+/**
+ * pango_layout_iter_get_char_extents:
+ * @iter: a #PangoLayoutIter
+ * @logical_rect: rectangle to fill with logical extents
+ *
+ * Gets the extents of the current character, in layout coordinates
+ * (origin is the top left of the entire layout). Only logical extents
+ * can sensibly be obtained for characters; ink extents make sense only
+ * down to the level of clusters.
+ *
+ **/
+void
+pango_layout_iter_get_char_extents (PangoLayoutIter *iter,
+                                   PangoRectangle  *logical_rect)
+{
+  PangoRectangle cluster_rect;
+  int            x0, x1;
+
+  if (ITER_IS_INVALID (iter))
+    return;
+
+  if (logical_rect == NULL)
+    return;
+
+  pango_layout_iter_get_cluster_extents (iter, NULL, &cluster_rect);
+
+  if (iter->run == NULL)
+    {
+      /* When on the NULL run, cluster, char, and run all have the
+       * same extents
+       */
+      *logical_rect = cluster_rect;
+      return;
+    }
+
+  x0 = (iter->character_position * cluster_rect.width) / iter->cluster_num_chars;
+  x1 = ((iter->character_position + 1) * cluster_rect.width) / iter->cluster_num_chars;
+
+  logical_rect->width = x1 - x0;
+  logical_rect->height = cluster_rect.height;
+  logical_rect->y = cluster_rect.y;
+  logical_rect->x = cluster_rect.x + x0;
+}
+
+/**
+ * pango_layout_iter_get_cluster_extents:
+ * @iter: a #PangoLayoutIter
+ * @ink_rect: rectangle to fill with ink extents, or %NULL
+ * @logical_rect: rectangle to fill with logical extents, or %NULL
+ *
+ * Gets the extents of the current cluster, in layout coordinates
+ * (origin is the top left of the entire layout).
+ *
+ **/
+void
+pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter,
+                                      PangoRectangle  *ink_rect,
+                                      PangoRectangle  *logical_rect)
+{
+  if (ITER_IS_INVALID (iter))
+    return;
+
+  if (iter->run == NULL)
+    {
+      /* When on the NULL run, cluster, char, and run all have the
+       * same extents
+       */
+      pango_layout_iter_get_run_extents (iter, ink_rect, logical_rect);
+      return;
+    }
+
+  pango_glyph_string_extents_range (iter->run->glyphs,
+                                   iter->cluster_start,
+                                   iter->next_cluster_glyph,
+                                   iter->run->item->analysis.font,
+                                   ink_rect,
+                                   logical_rect);
+
+  if (ink_rect)
+    {
+      ink_rect->x += iter->cluster_x;
+      offset_y (iter, &ink_rect->y);
+    }
+
+  if (logical_rect)
+    {
+      g_assert (logical_rect->width == iter->cluster_width);
+      logical_rect->x += iter->cluster_x;
+      offset_y (iter, &logical_rect->y);
+    }
+}
+
+/**
+ * pango_layout_iter_get_run_extents:
+ * @iter: a #PangoLayoutIter
+ * @ink_rect: rectangle to fill with ink extents, or %NULL
+ * @logical_rect: rectangle to fill with logical extents, or %NULL
+ *
+ * Gets the extents of the current run in layout coordinates
+ * (origin is the top left of the entire layout).
+ *
+ **/
+void
+pango_layout_iter_get_run_extents (PangoLayoutIter *iter,
+                                  PangoRectangle  *ink_rect,
+                                  PangoRectangle  *logical_rect)
+{
+  if (G_UNLIKELY (!ink_rect && !logical_rect))
+    return;
+
+  if (ITER_IS_INVALID (iter))
+    return;
+
+  if (iter->run)
+    {
+      pango_layout_run_get_extents (iter->run, ink_rect, logical_rect);
+
+      if (ink_rect)
+       {
+         offset_y (iter, &ink_rect->y);
+         ink_rect->x += iter->run_x;
+       }
+
+      if (logical_rect)
+       {
+         offset_y (iter, &logical_rect->y);
+         logical_rect->x += iter->run_x;
+       }
+    }
+  else
+    {
+      /* The empty run at the end of a line */
+
+      pango_layout_iter_get_line_extents (iter, ink_rect, logical_rect);
+
+      if (ink_rect)
+       {
+         ink_rect->x = iter->run_x;
+         ink_rect->width = 0;
+       }
+
+      if (logical_rect)
+       {
+         logical_rect->x = iter->run_x;
+         logical_rect->width = 0;
+       }
+    }
+}
+
+/**
+ * pango_layout_iter_get_line_extents:
+ * @iter: a #PangoLayoutIter
+ * @ink_rect: rectangle to fill with ink extents, or %NULL
+ * @logical_rect: rectangle to fill with logical extents, or %NULL
+ *
+ * Obtains the extents of the current line. @ink_rect or @logical_rect
+ * can be %NULL if you aren't interested in them. Extents are in layout
+ * coordinates (origin is the top-left corner of the entire
+ * #PangoLayout).  Thus the extents returned by this function will be
+ * the same width/height but not at the same x/y as the extents
+ * returned from pango_layout_line_get_extents().
+ *
+ **/
+void
+pango_layout_iter_get_line_extents (PangoLayoutIter *iter,
+                                   PangoRectangle  *ink_rect,
+                                   PangoRectangle  *logical_rect)
+{
+  Extents *ext;
+
+  if (ITER_IS_INVALID (iter))
+    return;
+
+  ext = iter->line_extents_link->data;
+
+  if (ink_rect)
+    {
+      get_line_extents_layout_coords (iter->layout, iter->line,
+                                     iter->layout_width,
+                                     ext->logical_rect.y,
+                                     NULL,
+                                     ink_rect,
+                                     NULL);
+    }
+
+  if (logical_rect)
+    *logical_rect = ext->logical_rect;
+}
+
+/**
+ * pango_layout_iter_get_line_yrange:
+ * @iter: a #PangoLayoutIter
+ * @y0_: start of line
+ * @y1_: end of line
+ *
+ * Divides the vertical space in the #PangoLayout being iterated over
+ * between the lines in the layout, and returns the space belonging to
+ * the current line.  A line's range includes the line's logical
+ * extents, plus half of the spacing above and below the line, if
+ * pango_layout_set_spacing() has been called to set layout spacing.
+ * The Y positions are in layout coordinates (origin at top left of the
+ * entire layout).
+ *
+ **/
+void
+pango_layout_iter_get_line_yrange (PangoLayoutIter *iter,
+                                  int             *y0,
+                                  int             *y1)
+{
+  Extents *ext;
+  int half_spacing;
+
+  if (ITER_IS_INVALID (iter))
+    return;
+
+  ext = iter->line_extents_link->data;
+
+  half_spacing = iter->layout->spacing / 2;
+
+  /* Note that if layout->spacing is odd, the remainder spacing goes
+   * above the line (this is pretty arbitrary of course)
+   */
+
+  if (y0)
+    {
+      /* No spacing above the first line */
+
+      if (iter->line_extents_link == iter->line_extents)
+       *y0 = ext->logical_rect.y;
+      else
+       *y0 = ext->logical_rect.y - (iter->layout->spacing - half_spacing);
+    }
+
+  if (y1)
+    {
+      /* No spacing below the last line */
+      if (iter->line_extents_link->next == NULL)
+       *y1 = ext->logical_rect.y + ext->logical_rect.height;
+      else
+       *y1 = ext->logical_rect.y + ext->logical_rect.height + half_spacing;
+    }
+}
+
+/**
+ * pango_layout_iter_get_baseline:
+ * @iter: a #PangoLayoutIter
+ *
+ * Gets the Y position of the current line's baseline, in layout
+ * coordinates (origin at top left of the entire layout).
+ *
+ * Return value: baseline of current line.
+ **/
+int
+pango_layout_iter_get_baseline (PangoLayoutIter *iter)
+{
+  Extents *ext;
+
+  if (ITER_IS_INVALID (iter))
+    return 0;
+
+  ext = iter->line_extents_link->data;
+
+  return ext->baseline;
+}
+
+/**
+ * pango_layout_iter_get_layout_extents:
+ * @iter: a #PangoLayoutIter
+ * @ink_rect: rectangle to fill with ink extents, or %NULL
+ * @logical_rect: rectangle to fill with logical extents, or %NULL
+ *
+ * Obtains the extents of the #PangoLayout being iterated
+ * over. @ink_rect or @logical_rect can be %NULL if you
+ * aren't interested in them.
+ *
+ **/
+void
+pango_layout_iter_get_layout_extents  (PangoLayoutIter *iter,
+                                      PangoRectangle  *ink_rect,
+                                      PangoRectangle  *logical_rect)
+{
+  if (ITER_IS_INVALID (iter))
+    return;
+
+  pango_layout_get_extents (iter->layout, ink_rect, logical_rect);
+}
diff --git a/pango/pango-layout.h b/pango/pango-layout.h
new file mode 100755 (executable)
index 0000000..3b769ff
--- /dev/null
@@ -0,0 +1,291 @@
+/* Pango
+ * pango-layout.h: High-level layout driver
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_LAYOUT_H__
+#define __PANGO_LAYOUT_H__
+
+#include <pango/pango-attributes.h>
+#include <pango/pango-context.h>
+#include <pango/pango-glyph-item.h>
+#include <pango/pango-tabs.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoLayout      PangoLayout;
+typedef struct _PangoLayoutClass PangoLayoutClass;
+typedef struct _PangoLayoutLine  PangoLayoutLine;
+
+typedef PangoGlyphItem PangoLayoutRun;
+
+typedef enum {
+  PANGO_ALIGN_LEFT,
+  PANGO_ALIGN_CENTER,
+  PANGO_ALIGN_RIGHT
+} PangoAlignment;
+
+typedef enum {
+  PANGO_WRAP_WORD,
+  PANGO_WRAP_CHAR,
+  PANGO_WRAP_WORD_CHAR
+} PangoWrapMode;
+
+/**
+ * PangoEllipsizeMode
+ * @PANGO_ELLIPSIZE_NONE: No ellipsization
+ * @PANGO_ELLIPSIZE_START: Omit characters at the start of the text
+ * @PANGO_ELLIPSIZE_MIDDLE: Omit characters in the middle of the text
+ * @PANGO_ELLIPSIZE_END: Omit characters at the end of the text
+ *
+ * The #PangoEllipsizeMode type describes what sort of (if any)
+ * ellipsization should be applied to a line of text. In
+ * the ellipsization process characters are removed from the
+ * text in order to make it fit to a given width and replaced
+ * with an ellipsis.
+ */
+typedef enum {
+  PANGO_ELLIPSIZE_NONE,
+  PANGO_ELLIPSIZE_START,
+  PANGO_ELLIPSIZE_MIDDLE,
+  PANGO_ELLIPSIZE_END
+} PangoEllipsizeMode;
+
+struct _PangoLayoutLine
+{
+  PangoLayout *layout;
+  gint         start_index;     /* start of line as byte index into layout->text */
+  gint         length;         /* length of line in bytes */
+  GSList      *runs;
+  guint        is_paragraph_start : 1;  /* TRUE if this is the first line of the paragraph */
+  guint        resolved_dir : 3;  /* Resolved PangoDirection of line */
+};
+
+#define PANGO_TYPE_LAYOUT              (pango_layout_get_type ())
+#define PANGO_LAYOUT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_LAYOUT, PangoLayout))
+#define PANGO_LAYOUT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_LAYOUT, PangoLayoutClass))
+#define PANGO_IS_LAYOUT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_LAYOUT))
+#define PANGO_IS_LAYOUT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_LAYOUT))
+#define PANGO_LAYOUT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_LAYOUT, PangoLayoutClass))
+
+/* The PangoLayout and PangoLayoutClass structs are private; if you
+ * need to create a subclass of these, file a bug.
+ */
+
+GType        pango_layout_get_type       (void) G_GNUC_CONST;
+PangoLayout *pango_layout_new            (PangoContext   *context);
+PangoLayout *pango_layout_copy           (PangoLayout    *src);
+
+PangoContext  *pango_layout_get_context    (PangoLayout    *layout);
+
+void           pango_layout_set_attributes (PangoLayout    *layout,
+                                           PangoAttrList  *attrs);
+PangoAttrList *pango_layout_get_attributes (PangoLayout    *layout);
+
+void           pango_layout_set_text       (PangoLayout    *layout,
+                                           const char     *text,
+                                           int             length);
+const char    *pango_layout_get_text       (PangoLayout    *layout);
+
+void           pango_layout_set_markup     (PangoLayout    *layout,
+                                           const char     *markup,
+                                           int             length);
+
+void           pango_layout_set_markup_with_accel (PangoLayout    *layout,
+                                                  const char     *markup,
+                                                  int             length,
+                                                  gunichar        accel_marker,
+                                                  gunichar       *accel_char);
+
+void           pango_layout_set_font_description (PangoLayout                *layout,
+                                                 const PangoFontDescription *desc);
+
+G_CONST_RETURN PangoFontDescription *pango_layout_get_font_description (PangoLayout *layout);
+
+void           pango_layout_set_width            (PangoLayout                *layout,
+                                                 int                         width);
+int            pango_layout_get_width            (PangoLayout                *layout);
+void           pango_layout_set_height           (PangoLayout                *layout,
+                                                 int                         height);
+int            pango_layout_get_height           (PangoLayout                *layout);
+void           pango_layout_set_wrap             (PangoLayout                *layout,
+                                                 PangoWrapMode               wrap);
+PangoWrapMode  pango_layout_get_wrap             (PangoLayout                *layout);
+gboolean       pango_layout_is_wrapped           (PangoLayout                *layout);
+void           pango_layout_set_indent           (PangoLayout                *layout,
+                                                 int                         indent);
+int            pango_layout_get_indent           (PangoLayout                *layout);
+void           pango_layout_set_spacing          (PangoLayout                *layout,
+                                                 int                         spacing);
+int            pango_layout_get_spacing          (PangoLayout                *layout);
+void           pango_layout_set_justify          (PangoLayout                *layout,
+                                                 gboolean                    justify);
+gboolean       pango_layout_get_justify          (PangoLayout                *layout);
+void           pango_layout_set_auto_dir         (PangoLayout                *layout,
+                                                 gboolean                    auto_dir);
+gboolean       pango_layout_get_auto_dir         (PangoLayout                *layout);
+void           pango_layout_set_alignment        (PangoLayout                *layout,
+                                                 PangoAlignment              alignment);
+PangoAlignment pango_layout_get_alignment        (PangoLayout                *layout);
+
+void           pango_layout_set_tabs             (PangoLayout                *layout,
+                                                 PangoTabArray              *tabs);
+
+PangoTabArray* pango_layout_get_tabs             (PangoLayout                *layout);
+
+void           pango_layout_set_single_paragraph_mode (PangoLayout                *layout,
+                                                      gboolean                    setting);
+gboolean       pango_layout_get_single_paragraph_mode (PangoLayout                *layout);
+
+void               pango_layout_set_ellipsize (PangoLayout        *layout,
+                                              PangoEllipsizeMode  ellipsize);
+PangoEllipsizeMode pango_layout_get_ellipsize (PangoLayout        *layout);
+gboolean           pango_layout_is_ellipsized (PangoLayout        *layout);
+
+int      pango_layout_get_unknown_glyphs_count (PangoLayout    *layout);
+
+void     pango_layout_context_changed (PangoLayout    *layout);
+
+void     pango_layout_get_log_attrs (PangoLayout    *layout,
+                                    PangoLogAttr  **attrs,
+                                    gint           *n_attrs);
+
+void     pango_layout_index_to_pos         (PangoLayout    *layout,
+                                           int             index_,
+                                           PangoRectangle *pos);
+void     pango_layout_index_to_line_x      (PangoLayout    *layout,
+                                           int             index_,
+                                           gboolean        trailing,
+                                           int            *line,
+                                           int            *x_pos);
+void     pango_layout_get_cursor_pos       (PangoLayout    *layout,
+                                           int             index_,
+                                           PangoRectangle *strong_pos,
+                                           PangoRectangle *weak_pos);
+void     pango_layout_move_cursor_visually (PangoLayout    *layout,
+                                           gboolean        strong,
+                                           int             old_index,
+                                           int             old_trailing,
+                                           int             direction,
+                                           int            *new_index,
+                                           int            *new_trailing);
+gboolean pango_layout_xy_to_index          (PangoLayout    *layout,
+                                           int             x,
+                                           int             y,
+                                           int            *index_,
+                                           int            *trailing);
+void     pango_layout_get_extents          (PangoLayout    *layout,
+                                           PangoRectangle *ink_rect,
+                                           PangoRectangle *logical_rect);
+void     pango_layout_get_pixel_extents    (PangoLayout    *layout,
+                                           PangoRectangle *ink_rect,
+                                           PangoRectangle *logical_rect);
+void     pango_layout_get_size             (PangoLayout    *layout,
+                                           int            *width,
+                                           int            *height);
+void     pango_layout_get_pixel_size       (PangoLayout    *layout,
+                                           int            *width,
+                                           int            *height);
+int      pango_layout_get_baseline         (PangoLayout    *layout);
+
+int              pango_layout_get_line_count       (PangoLayout    *layout);
+PangoLayoutLine *pango_layout_get_line             (PangoLayout    *layout,
+                                                   int             line);
+PangoLayoutLine *pango_layout_get_line_readonly    (PangoLayout    *layout,
+                                                   int             line);
+GSList *         pango_layout_get_lines            (PangoLayout    *layout);
+GSList *         pango_layout_get_lines_readonly   (PangoLayout    *layout);
+
+
+#define PANGO_TYPE_LAYOUT_LINE (pango_layout_line_get_type ())
+
+GType    pango_layout_line_get_type     (void) G_GNUC_CONST;
+
+PangoLayoutLine *pango_layout_line_ref   (PangoLayoutLine *line);
+void             pango_layout_line_unref (PangoLayoutLine *line);
+
+gboolean pango_layout_line_x_to_index   (PangoLayoutLine  *line,
+                                        int               x_pos,
+                                        int              *index_,
+                                        int              *trailing);
+void     pango_layout_line_index_to_x   (PangoLayoutLine  *line,
+                                        int               index_,
+                                        gboolean          trailing,
+                                        int              *x_pos);
+void     pango_layout_line_get_x_ranges (PangoLayoutLine  *line,
+                                        int               start_index,
+                                        int               end_index,
+                                        int             **ranges,
+                                        int              *n_ranges);
+void     pango_layout_line_get_extents  (PangoLayoutLine  *line,
+                                        PangoRectangle   *ink_rect,
+                                        PangoRectangle   *logical_rect);
+void     pango_layout_line_get_pixel_extents (PangoLayoutLine *layout_line,
+                                             PangoRectangle  *ink_rect,
+                                             PangoRectangle  *logical_rect);
+
+typedef struct _PangoLayoutIter PangoLayoutIter;
+
+#define PANGO_TYPE_LAYOUT_ITER         (pango_layout_iter_get_type ())
+
+GType            pango_layout_iter_get_type (void) G_GNUC_CONST;
+
+PangoLayoutIter *pango_layout_get_iter  (PangoLayout     *layout);
+PangoLayoutIter *pango_layout_iter_copy (PangoLayoutIter *iter);
+void             pango_layout_iter_free (PangoLayoutIter *iter);
+
+int              pango_layout_iter_get_index  (PangoLayoutIter *iter);
+PangoLayoutRun  *pango_layout_iter_get_run    (PangoLayoutIter *iter);
+PangoLayoutRun  *pango_layout_iter_get_run_readonly   (PangoLayoutIter *iter);
+PangoLayoutLine *pango_layout_iter_get_line   (PangoLayoutIter *iter);
+PangoLayoutLine *pango_layout_iter_get_line_readonly  (PangoLayoutIter *iter);
+gboolean         pango_layout_iter_at_last_line (PangoLayoutIter *iter);
+PangoLayout     *pango_layout_iter_get_layout (PangoLayoutIter *iter);
+
+gboolean pango_layout_iter_next_char    (PangoLayoutIter *iter);
+gboolean pango_layout_iter_next_cluster (PangoLayoutIter *iter);
+gboolean pango_layout_iter_next_run     (PangoLayoutIter *iter);
+gboolean pango_layout_iter_next_line    (PangoLayoutIter *iter);
+
+void pango_layout_iter_get_char_extents    (PangoLayoutIter *iter,
+                                           PangoRectangle  *logical_rect);
+void pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter,
+                                           PangoRectangle  *ink_rect,
+                                           PangoRectangle  *logical_rect);
+void pango_layout_iter_get_run_extents     (PangoLayoutIter *iter,
+                                           PangoRectangle  *ink_rect,
+                                           PangoRectangle  *logical_rect);
+void pango_layout_iter_get_line_extents    (PangoLayoutIter *iter,
+                                           PangoRectangle  *ink_rect,
+                                           PangoRectangle  *logical_rect);
+/* All the yranges meet, unlike the logical_rect's (i.e. the yranges
+ * assign between-line spacing to the nearest line)
+ */
+void pango_layout_iter_get_line_yrange     (PangoLayoutIter *iter,
+                                           int             *y0_,
+                                           int             *y1_);
+void pango_layout_iter_get_layout_extents  (PangoLayoutIter *iter,
+                                           PangoRectangle  *ink_rect,
+                                           PangoRectangle  *logical_rect);
+int  pango_layout_iter_get_baseline        (PangoLayoutIter *iter);
+
+G_END_DECLS
+
+#endif /* __PANGO_LAYOUT_H__ */
+
diff --git a/pango/pango-markup.c b/pango/pango-markup.c
new file mode 100755 (executable)
index 0000000..b1a8c9c
--- /dev/null
@@ -0,0 +1,1480 @@
+/* Pango
+ * pango-markup.c: Parse markup into attributed text
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include "pango-attributes.h"
+#include "pango-font.h"
+#include "pango-enum-types.h"
+#include "pango-impl-utils.h"
+
+/* FIXME */
+#define _(x) x
+
+/* CSS size levels */
+typedef enum
+{
+  XXSmall = -3,
+  XSmall = -2,
+  Small = -1,
+  Medium = 0,
+  Large = 1,
+  XLarge = 2,
+  XXLarge = 3
+} SizeLevel;
+
+typedef struct _MarkupData MarkupData;
+
+struct _MarkupData
+{
+  PangoAttrList *attr_list;
+  GString *text;
+  GSList *tag_stack;
+  gsize index;
+  GSList *to_apply;
+  gunichar accel_marker;
+  gunichar accel_char;
+};
+
+typedef struct _OpenTag OpenTag;
+
+struct _OpenTag
+{
+  GSList *attrs;
+  gsize start_index;
+  /* Current total scale level; reset whenever
+   * an absolute size is set.
+   * Each "larger" ups it 1, each "smaller" decrements it 1
+   */
+  gint scale_level;
+  /* Our impact on scale_level, so we know whether we
+   * need to create an attribute ourselves on close
+   */
+  gint scale_level_delta;
+  /* Base scale factor currently in effect
+   * or size that this tag
+   * forces, or parent's scale factor or size.
+   */
+  double base_scale_factor;
+  int base_font_size;
+  guint has_base_font_size : 1;
+};
+
+typedef gboolean (*TagParseFunc) (MarkupData            *md,
+                                 OpenTag               *tag,
+                                 const gchar          **names,
+                                 const gchar          **values,
+                                 GMarkupParseContext   *context,
+                                 GError               **error);
+
+static gboolean b_parse_func        (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean big_parse_func      (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean span_parse_func     (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean i_parse_func        (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean markup_parse_func   (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean s_parse_func        (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean sub_parse_func      (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean sup_parse_func      (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean small_parse_func    (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean tt_parse_func       (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+static gboolean u_parse_func        (MarkupData           *md,
+                                    OpenTag              *tag,
+                                    const gchar         **names,
+                                    const gchar         **values,
+                                    GMarkupParseContext  *context,
+                                    GError              **error);
+
+static double
+scale_factor (int scale_level, double base)
+{
+  double factor = base;
+  int i;
+
+  /* 1.2 is the CSS scale factor between sizes */
+
+  if (scale_level > 0)
+    {
+      i = 0;
+      while (i < scale_level)
+       {
+         factor *= 1.2;
+
+         ++i;
+       }
+    }
+  else if (scale_level < 0)
+    {
+      i = scale_level;
+      while (i < 0)
+       {
+         factor /= 1.2;
+
+         ++i;
+       }
+    }
+
+  return factor;
+}
+
+static void
+open_tag_free (OpenTag *ot)
+{
+  g_slist_foreach (ot->attrs, (GFunc) pango_attribute_destroy, NULL);
+  g_slist_free (ot->attrs);
+  g_slice_free (OpenTag, ot);
+}
+
+static void
+open_tag_set_absolute_font_size (OpenTag *ot,
+                                int      font_size)
+{
+  ot->base_font_size = font_size;
+  ot->has_base_font_size = TRUE;
+  ot->scale_level = 0;
+  ot->scale_level_delta = 0;
+}
+
+static void
+open_tag_set_absolute_font_scale (OpenTag *ot,
+                                 double   scale)
+{
+  ot->base_scale_factor = scale;
+  ot->has_base_font_size = FALSE;
+  ot->scale_level = 0;
+  ot->scale_level_delta = 0;
+}
+
+static OpenTag*
+markup_data_open_tag (MarkupData   *md)
+{
+  OpenTag *ot;
+  OpenTag *parent = NULL;
+
+  if (md->attr_list == NULL)
+    return NULL;
+
+  if (md->tag_stack)
+    parent = md->tag_stack->data;
+
+  ot = g_slice_new (OpenTag);
+  ot->attrs = NULL;
+  ot->start_index = md->index;
+  ot->scale_level_delta = 0;
+
+  if (parent == NULL)
+    {
+      ot->base_scale_factor = 1.0;
+      ot->base_font_size = 0;
+      ot->has_base_font_size = FALSE;
+      ot->scale_level = 0;
+    }
+  else
+    {
+      ot->base_scale_factor = parent->base_scale_factor;
+      ot->base_font_size = parent->base_font_size;
+      ot->has_base_font_size = parent->has_base_font_size;
+      ot->scale_level = parent->scale_level;
+    }
+
+  md->tag_stack = g_slist_prepend (md->tag_stack, ot);
+
+  return ot;
+}
+
+static void
+markup_data_close_tag (MarkupData *md)
+{
+  OpenTag *ot;
+  GSList *tmp_list;
+
+  if (md->attr_list == NULL)
+    return;
+
+  /* pop the stack */
+  ot = md->tag_stack->data;
+  md->tag_stack = g_slist_delete_link (md->tag_stack,
+                                      md->tag_stack);
+
+  /* Adjust end indexes, and push each attr onto the front of the
+   * to_apply list. This means that outermost tags are on the front of
+   * that list; if we apply the list in order, then the innermost
+   * tags will "win" which is correct.
+   */
+  tmp_list = ot->attrs;
+  while (tmp_list != NULL)
+    {
+      PangoAttribute *a = tmp_list->data;
+
+      a->start_index = ot->start_index;
+      a->end_index = md->index;
+
+      md->to_apply = g_slist_prepend (md->to_apply, a);
+
+      tmp_list = g_slist_next (tmp_list);
+    }
+
+  if (ot->scale_level_delta != 0)
+    {
+      /* We affected relative font size; create an appropriate
+       * attribute and reverse our effects on the current level
+       */
+      PangoAttribute *a;
+
+      if (ot->has_base_font_size)
+       {
+         /* Create a font using the absolute point size
+          * as the base size to be scaled from
+          */
+         a = pango_attr_size_new (scale_factor (ot->scale_level,
+                                                1.0) *
+                                  ot->base_font_size);
+       }
+      else
+       {
+         /* Create a font using the current scale factor
+          * as the base size to be scaled from
+          */
+         a = pango_attr_scale_new (scale_factor (ot->scale_level,
+                                                 ot->base_scale_factor));
+       }
+
+      a->start_index = ot->start_index;
+      a->end_index = md->index;
+
+      md->to_apply = g_slist_prepend (md->to_apply, a);
+    }
+
+  g_slist_free (ot->attrs);
+  g_slice_free (OpenTag, ot);
+}
+
+static void
+start_element_handler  (GMarkupParseContext *context,
+                       const gchar         *element_name,
+                       const gchar        **attribute_names,
+                       const gchar        **attribute_values,
+                       gpointer             user_data,
+                       GError             **error)
+{
+  TagParseFunc parse_func = NULL;
+  OpenTag *ot;
+
+  switch (*element_name)
+    {
+    case 'b':
+      if (strcmp ("b", element_name) == 0)
+       parse_func = b_parse_func;
+      else if (strcmp ("big", element_name) == 0)
+       parse_func = big_parse_func;
+      break;
+
+    case 'i':
+      if (strcmp ("i", element_name) == 0)
+       parse_func = i_parse_func;
+      break;
+
+    case 'm':
+      if (strcmp ("markup", element_name) == 0)
+       parse_func = markup_parse_func;
+      break;
+
+    case 's':
+      if (strcmp ("span", element_name) == 0)
+       parse_func = span_parse_func;
+      else if (strcmp ("s", element_name) == 0)
+       parse_func = s_parse_func;
+      else if (strcmp ("sub", element_name) == 0)
+       parse_func = sub_parse_func;
+      else if (strcmp ("sup", element_name) == 0)
+       parse_func = sup_parse_func;
+      else if (strcmp ("small", element_name) == 0)
+       parse_func = small_parse_func;
+      break;
+
+    case 't':
+      if (strcmp ("tt", element_name) == 0)
+       parse_func = tt_parse_func;
+      break;
+
+    case 'u':
+      if (strcmp ("u", element_name) == 0)
+       parse_func = u_parse_func;
+      break;
+    }
+
+  if (parse_func == NULL)
+    {
+      gint line_number, char_number;
+
+      g_markup_parse_context_get_position (context,
+                                          &line_number, &char_number);
+
+      g_set_error (error,
+                  G_MARKUP_ERROR,
+                  G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+                  _("Unknown tag '%s' on line %d char %d"),
+                  element_name,
+                  line_number, char_number);
+
+      return;
+    }
+
+  ot = markup_data_open_tag (user_data);
+
+  /* note ot may be NULL if the user didn't want the attribute list */
+
+  if (!(*parse_func) (user_data, ot,
+                     attribute_names, attribute_values,
+                     context, error))
+    {
+      /* there's nothing to do; we return an error, and end up
+       * freeing ot off the tag stack later.
+       */
+    }
+}
+
+static void
+end_element_handler    (GMarkupParseContext *context G_GNUC_UNUSED,
+                       const gchar         *element_name G_GNUC_UNUSED,
+                       gpointer             user_data,
+                       GError             **error G_GNUC_UNUSED)
+{
+  markup_data_close_tag (user_data);
+}
+
+static void
+text_handler           (GMarkupParseContext *context G_GNUC_UNUSED,
+                       const gchar         *text,
+                       gsize                text_len,
+                       gpointer             user_data,
+                       GError             **error G_GNUC_UNUSED)
+{
+  MarkupData *md = user_data;
+
+  if (md->accel_marker == 0)
+    {
+      /* Just append all the text */
+
+      md->index += text_len;
+
+      g_string_append_len (md->text, text, text_len);
+    }
+  else
+    {
+      /* Parse the accelerator */
+      const gchar *p;
+      const gchar *end;
+      const gchar *range_start;
+      const gchar *range_end;
+      gssize uline_index = -1;
+      gsize uline_len = 0;     /* Quiet GCC */
+
+      range_end = NULL;
+      range_start = text;
+      p = text;
+      end = text + text_len;
+
+      while (p != end)
+       {
+         gunichar c;
+
+         c = g_utf8_get_char (p);
+
+         if (range_end)
+           {
+             if (c == md->accel_marker)
+               {
+                 /* escaped accel marker; move range_end
+                  * past the accel marker that came before,
+                  * append the whole thing
+                  */
+                 range_end = g_utf8_next_char (range_end);
+                 g_string_append_len (md->text,
+                                      range_start,
+                                      range_end - range_start);
+                 md->index += range_end - range_start;
+
+                 /* set next range_start, skipping accel marker */
+                 range_start = g_utf8_next_char (p);
+               }
+             else
+               {
+                 /* Don't append the accel marker (leave range_end
+                  * alone); set the accel char to c; record location for
+                  * underline attribute
+                  */
+                 if (md->accel_char == 0)
+                   md->accel_char = c;
+
+                 g_string_append_len (md->text,
+                                      range_start,
+                                      range_end - range_start);
+                 md->index += range_end - range_start;
+
+                 /* The underline should go underneath the char
+                  * we're setting as the next range_start
+                  */
+                 uline_index = md->index;
+                 uline_len = g_utf8_next_char (p) - p;
+
+                 /* set next range_start to include this char */
+                 range_start = p;
+               }
+
+             /* reset range_end */
+             range_end = NULL;
+           }
+         else if (c == md->accel_marker)
+           {
+             range_end = p;
+           }
+
+         p = g_utf8_next_char (p);
+       }
+
+      if (range_end)
+       {
+         g_string_append_len (md->text,
+                              range_start,
+                              range_end - range_start);
+         md->index += range_end - range_start;
+       }
+      else
+       {
+         g_string_append_len (md->text,
+                              range_start,
+                              end - range_start);
+         md->index += end - range_start;
+       }
+
+      if (md->attr_list != NULL && uline_index >= 0)
+       {
+         /* Add the underline indicating the accelerator */
+         PangoAttribute *attr;
+
+         attr = pango_attr_underline_new (PANGO_UNDERLINE_LOW);
+
+         attr->start_index = uline_index;
+         attr->end_index = uline_index + uline_len;
+
+         pango_attr_list_change (md->attr_list, attr);
+       }
+    }
+}
+
+static gboolean
+xml_isspace (char c)
+{
+  return c == ' ' || c == '\t' || c == '\n' || c == '\r';
+}
+
+static const GMarkupParser pango_markup_parser = {
+  start_element_handler,
+  end_element_handler,
+  text_handler,
+  NULL,
+  NULL
+};
+
+/**
+ * pango_parse_markup:
+ * @markup_text: markup to parse (see <link linkend="PangoMarkupFormat">markup format</link>)
+ * @length: length of @markup_text, or -1 if nul-terminated
+ * @accel_marker: character that precedes an accelerator, or 0 for none
+ * @attr_list: address of return location for a #PangoAttrList, or %NULL
+ * @text: address of return location for text with tags stripped, or %NULL
+ * @accel_char: address of return location for accelerator char, or %NULL
+ * @error: address of return location for errors, or %NULL
+ *
+ * Parses marked-up text (see
+ * <link linkend="PangoMarkupFormat">markup format</link>) to create
+ * a plain-text string and an attribute list.
+ *
+ * If @accel_marker is nonzero, the given character will mark the
+ * character following it as an accelerator. For example, @accel_marker
+ * might be an ampersand or underscore. All characters marked
+ * as an accelerator will receive a %PANGO_UNDERLINE_LOW attribute,
+ * and the first character so marked will be returned in @accel_char.
+ * Two @accel_marker characters following each other produce a single
+ * literal @accel_marker character.
+ *
+ * If any error happens, none of the output arguments are touched except
+ * for @error.
+ *
+ * Return value: %FALSE if @error is set, otherwise %TRUE
+ **/
+gboolean
+pango_parse_markup (const char                 *markup_text,
+                   int                         length,
+                   gunichar                    accel_marker,
+                   PangoAttrList             **attr_list,
+                   char                      **text,
+                   gunichar                   *accel_char,
+                   GError                    **error)
+{
+  GMarkupParseContext *context = NULL;
+  MarkupData *md = NULL;
+  gboolean needs_root = TRUE;
+  GSList *tmp_list;
+  const char *p;
+  const char *end;
+
+  g_return_val_if_fail (markup_text != NULL, FALSE);
+
+  md = g_slice_new (MarkupData);
+
+  /* Don't bother creating these if they weren't requested;
+   * might be useful e.g. if you just want to validate
+   * some markup.
+   */
+  if (attr_list)
+    md->attr_list = pango_attr_list_new ();
+  else
+    md->attr_list = NULL;
+
+  md->text = g_string_new (NULL);
+
+  if (accel_char)
+    *accel_char = 0;
+
+  md->accel_marker = accel_marker;
+  md->accel_char = 0;
+
+  md->index = 0;
+  md->tag_stack = NULL;
+  md->to_apply = NULL;
+
+  context = g_markup_parse_context_new (&pango_markup_parser,
+                                       0, md, NULL);
+
+  if (length < 0)
+    length = strlen (markup_text);
+
+  p = markup_text;
+  end = markup_text + length;
+  while (p != end && xml_isspace (*p))
+    ++p;
+
+  if (end - p >= 8 && strncmp (p, "<markup>", 8) == 0)
+     needs_root = FALSE;
+
+  if (needs_root)
+    if (!g_markup_parse_context_parse (context,
+                                      "<markup>",
+                                      -1,
+                                      error))
+      goto error;
+
+
+  if (!g_markup_parse_context_parse (context,
+                                    markup_text,
+                                    length,
+                                    error))
+    goto error;
+
+  if (needs_root)
+    if (!g_markup_parse_context_parse (context,
+                                      "</markup>",
+                                      -1,
+                                      error))
+      goto error;
+
+  if (!g_markup_parse_context_end_parse (context, error))
+    goto error;
+
+  g_markup_parse_context_free (context);
+
+  if (md->attr_list)
+    {
+      /* The apply list has the most-recently-closed tags first;
+       * we want to apply the least-recently-closed tag last.
+       */
+      tmp_list = md->to_apply;
+      while (tmp_list != NULL)
+       {
+         PangoAttribute *attr = tmp_list->data;
+
+         /* Innermost tags before outermost */
+         pango_attr_list_insert (md->attr_list, attr);
+
+         tmp_list = g_slist_next (tmp_list);
+       }
+      g_slist_free (md->to_apply);
+      md->to_apply = NULL;
+    }
+
+  if (attr_list)
+    *attr_list = md->attr_list;
+
+  if (text)
+    *text = g_string_free (md->text, FALSE);
+  else
+    g_string_free (md->text, TRUE);
+
+  if (accel_char)
+    *accel_char = md->accel_char;
+
+  g_assert (md->tag_stack == NULL);
+
+  g_slice_free (MarkupData, md);
+
+  return TRUE;
+
+ error:
+  g_slist_foreach (md->tag_stack, (GFunc) open_tag_free, NULL);
+  g_slist_free (md->tag_stack);
+  g_slist_foreach (md->to_apply, (GFunc) pango_attribute_destroy, NULL);
+  g_slist_free (md->to_apply);
+  g_string_free (md->text, TRUE);
+
+  if (md->attr_list)
+    pango_attr_list_unref (md->attr_list);
+
+  g_slice_free (MarkupData, md);
+
+  if (context)
+    g_markup_parse_context_free (context);
+
+  return FALSE;
+}
+
+static void
+set_bad_attribute (GError             **error,
+                  GMarkupParseContext *context,
+                  const char          *element_name,
+                  const char          *attribute_name)
+{
+  gint line_number, char_number;
+
+  g_markup_parse_context_get_position (context,
+                                      &line_number, &char_number);
+
+  g_set_error (error,
+              G_MARKUP_ERROR,
+              G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
+              _("Tag '%s' does not support attribute '%s' on line %d char %d"),
+              element_name,
+              attribute_name,
+              line_number, char_number);
+}
+
+static void
+add_attribute (OpenTag        *ot,
+              PangoAttribute *attr)
+{
+  if (ot == NULL)
+    pango_attribute_destroy (attr);
+  else
+    ot->attrs = g_slist_prepend (ot->attrs, attr);
+}
+
+#define CHECK_NO_ATTRS(elem) G_STMT_START {                    \
+        if (*names != NULL) {                                 \
+          set_bad_attribute (error, context, (elem), *names); \
+          return FALSE;                                       \
+        } }G_STMT_END
+
+static gboolean
+b_parse_func        (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("b");
+  add_attribute (tag, pango_attr_weight_new (PANGO_WEIGHT_BOLD));
+  return TRUE;
+}
+
+static gboolean
+big_parse_func      (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("big");
+
+  /* Grow text one level */
+  if (tag)
+    {
+      tag->scale_level_delta += 1;
+      tag->scale_level += 1;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+parse_absolute_size (OpenTag               *tag,
+                    const char            *size)
+{
+  SizeLevel level = Medium;
+  double factor;
+
+  if (strcmp (size, "xx-small") == 0)
+    level = XXSmall;
+  else if (strcmp (size, "x-small") == 0)
+    level = XSmall;
+  else if (strcmp (size, "small") == 0)
+    level = Small;
+  else if (strcmp (size, "medium") == 0)
+    level = Medium;
+  else if (strcmp (size, "large") == 0)
+    level = Large;
+  else if (strcmp (size, "x-large") == 0)
+    level = XLarge;
+  else if (strcmp (size, "xx-large") == 0)
+    level = XXLarge;
+  else
+    return FALSE;
+
+  /* This is "absolute" in that it's relative to the base font,
+   * but not to sizes created by any other tags
+   */
+  factor = scale_factor (level, 1.0);
+  add_attribute (tag, pango_attr_scale_new (factor));
+  if (tag)
+    open_tag_set_absolute_font_scale (tag, factor);
+
+  return TRUE;
+}
+
+/* a string compare func that ignores '-' vs '_' differences */
+static gint
+attr_strcmp (gconstpointer pa,
+            gconstpointer pb)
+{
+  const char *a = pa;
+  const char *b = pb;
+
+  int ca;
+  int cb;
+
+  while (*a && *b)
+    {
+      ca = *a++;
+      cb = *b++;
+
+      if (ca == cb)
+       continue;
+
+      ca = ca == '_' ? '-' : ca;
+      cb = cb == '_' ? '-' : cb;
+
+      if (ca != cb)
+       return cb - ca;
+    }
+
+  ca = *a;
+  cb = *b;
+
+  return cb - ca;
+}
+
+static gboolean
+span_parse_int (const char *attr_name,
+               const char *attr_val,
+               int *val,
+               int line_number,
+               GError **error)
+{
+  const char *end = attr_val;
+
+  if (!pango_scan_int (&end, val) || *end != '\0')
+    {
+      g_set_error (error,
+                  G_MARKUP_ERROR,
+                  G_MARKUP_ERROR_INVALID_CONTENT,
+                  _("Value of '%s' attribute on <span> tag "
+                    "on line %d could not be parsed; "
+                    "should be an integer, not '%s'"),
+                  attr_name, line_number, attr_val);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+span_parse_boolean (const char *attr_name,
+                   const char *attr_val,
+                   gboolean *val,
+                   int line_number,
+                   GError **error)
+{
+  if (strcmp (attr_val, "true") == 0 ||
+      strcmp (attr_val, "yes") == 0 ||
+      strcmp (attr_val, "t") == 0 ||
+      strcmp (attr_val, "y") == 0)
+    *val = TRUE;
+  else if (strcmp (attr_val, "false") == 0 ||
+          strcmp (attr_val, "no") == 0 ||
+          strcmp (attr_val, "f") == 0 ||
+          strcmp (attr_val, "n") == 0)
+    *val = FALSE;
+  else
+    {
+      g_set_error (error,
+                  G_MARKUP_ERROR,
+                  G_MARKUP_ERROR_INVALID_CONTENT,
+                  _("Value of '%s' attribute on <span> tag "
+                    "line %d should have one of "
+                    "'true/yes/t/y' or 'false/no/f/n': '%s' is not valid"),
+                  attr_name, line_number, attr_val);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+span_parse_color (const char *attr_name,
+                 const char *attr_val,
+                 PangoColor *color,
+                 int line_number,
+                 GError **error)
+{
+  if (!pango_color_parse (color, attr_val))
+    {
+      g_set_error (error,
+                  G_MARKUP_ERROR,
+                  G_MARKUP_ERROR_INVALID_CONTENT,
+                  _("Value of '%s' attribute on <span> tag "
+                    "on line %d could not be parsed; "
+                    "should be a color specification, not '%s'"),
+                  attr_name, line_number, attr_val);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+span_parse_enum (const char *attr_name,
+                const char *attr_val,
+                GType type,
+                int *val,
+                int line_number,
+                GError **error)
+{
+  char *possible_values = NULL;
+
+  if (!pango_parse_enum (type, attr_val, val, FALSE, &possible_values))
+    {
+      g_set_error (error,
+                  G_MARKUP_ERROR,
+                  G_MARKUP_ERROR_INVALID_CONTENT,
+                  _("'%s' is not a valid value for the '%s' "
+                    "attribute on <span> tag, line %d; valid "
+                    "values are %s"),
+                  attr_val, attr_name, line_number, possible_values);
+      g_free (possible_values);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+span_parse_func     (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  int line_number, char_number;
+  int i;
+
+  const char *family = NULL;
+  const char *size = NULL;
+  const char *style = NULL;
+  const char *weight = NULL;
+  const char *variant = NULL;
+  const char *stretch = NULL;
+  const char *desc = NULL;
+  const char *foreground = NULL;
+  const char *background = NULL;
+  const char *underline = NULL;
+  const char *underline_color = NULL;
+  const char *strikethrough = NULL;
+  const char *strikethrough_color = NULL;
+  const char *rise = NULL;
+  const char *letter_spacing = NULL;
+  const char *lang = NULL;
+  const char *fallback = NULL;
+  const char *gravity = NULL;
+  const char *gravity_hint = NULL;
+
+  g_markup_parse_context_get_position (context,
+                                      &line_number, &char_number);
+
+#define CHECK_DUPLICATE(var) G_STMT_START{                              \
+         if ((var) != NULL) {                                          \
+           g_set_error (error, G_MARKUP_ERROR,                         \
+                        G_MARKUP_ERROR_INVALID_CONTENT,                \
+                        _("Attribute '%s' occurs twice on <span> tag " \
+                          "on line %d char %d, may only occur once"),  \
+                        names[i], line_number, char_number);           \
+           return FALSE;                                               \
+         }}G_STMT_END
+#define CHECK_ATTRIBUTE2(var, name) \
+       if (attr_strcmp (names[i], (name)) == 0) { \
+         CHECK_DUPLICATE (var); \
+         (var) = values[i]; \
+         found = TRUE; \
+         break; \
+       }
+#define CHECK_ATTRIBUTE(var) CHECK_ATTRIBUTE2 (var, G_STRINGIFY (var))
+
+  i = 0;
+  while (names[i])
+    {
+      gboolean found = FALSE;
+
+      switch (names[i][0]) {
+      case 'f':
+       CHECK_ATTRIBUTE (fallback);
+       CHECK_ATTRIBUTE2(desc, "font");
+       CHECK_ATTRIBUTE2(desc, "font_desc");
+       CHECK_ATTRIBUTE2(family, "face");
+
+       CHECK_ATTRIBUTE2(family, "font_family");
+       CHECK_ATTRIBUTE2(size, "font_size");
+       CHECK_ATTRIBUTE2(stretch, "font_stretch");
+       CHECK_ATTRIBUTE2(style, "font_style");
+       CHECK_ATTRIBUTE2(variant, "font_variant");
+       CHECK_ATTRIBUTE2(weight, "font_weight");
+
+       CHECK_ATTRIBUTE (foreground);
+       CHECK_ATTRIBUTE2 (foreground, "fgcolor");
+       break;
+      case 's':
+       CHECK_ATTRIBUTE (size);
+       CHECK_ATTRIBUTE (stretch);
+       CHECK_ATTRIBUTE (strikethrough);
+       CHECK_ATTRIBUTE (strikethrough_color);
+       CHECK_ATTRIBUTE (style);
+       break;
+      case 'g':
+       CHECK_ATTRIBUTE (gravity);
+       CHECK_ATTRIBUTE (gravity_hint);
+       break;
+      case 'l':
+       CHECK_ATTRIBUTE (lang);
+       CHECK_ATTRIBUTE (letter_spacing);
+       break;
+      case 'u':
+       CHECK_ATTRIBUTE (underline);
+       CHECK_ATTRIBUTE (underline_color);
+       break;
+      default:
+       CHECK_ATTRIBUTE (background);
+       CHECK_ATTRIBUTE2 (background, "bgcolor");
+       CHECK_ATTRIBUTE2(foreground, "color");
+       CHECK_ATTRIBUTE (rise);
+       CHECK_ATTRIBUTE (variant);
+       CHECK_ATTRIBUTE (weight);
+       break;
+      }
+
+      if (!found)
+       {
+         g_set_error (error, G_MARKUP_ERROR,
+                      G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
+                      _("Attribute '%s' is not allowed on the <span> tag "
+                        "on line %d char %d"),
+                      names[i], line_number, char_number);
+         return FALSE;
+       }
+
+      ++i;
+    }
+
+  /* Parse desc first, then modify it with other font-related attributes. */
+  if (G_UNLIKELY (desc))
+    {
+      PangoFontDescription *parsed;
+
+      parsed = pango_font_description_from_string (desc);
+      if (parsed)
+       {
+         add_attribute (tag, pango_attr_font_desc_new (parsed));
+         if (tag)
+           open_tag_set_absolute_font_size (tag, pango_font_description_get_size (parsed));
+         pango_font_description_free (parsed);
+       }
+    }
+
+  if (G_UNLIKELY (family))
+    {
+      add_attribute (tag, pango_attr_family_new (family));
+    }
+
+  if (G_UNLIKELY (size))
+    {
+      if (g_ascii_isdigit (*size))
+       {
+         const char *end;
+         gint n;
+
+/* cap size from the top at an arbitrary 2048 */
+#define MAX_SIZE (2048 * PANGO_SCALE)
+
+         if ((end = size, !pango_scan_int (&end, &n)) || *end != '\0' || n < 0 || n > MAX_SIZE)
+           {
+             g_set_error (error,
+                          G_MARKUP_ERROR,
+                          G_MARKUP_ERROR_INVALID_CONTENT,
+                          _("Value of 'size' attribute on <span> tag on line %d "
+                            "could not be parsed; should be an integer less than %d, or a "
+                            "string such as 'small', not '%s'"),
+                          line_number, MAX_SIZE+1, size);
+             goto error;
+           }
+
+         add_attribute (tag, pango_attr_size_new (n));
+         if (tag)
+           open_tag_set_absolute_font_size (tag, n);
+       }
+      else if (strcmp (size, "smaller") == 0)
+       {
+         if (tag)
+           {
+             tag->scale_level_delta -= 1;
+             tag->scale_level -= 1;
+           }
+       }
+      else if (strcmp (size, "larger") == 0)
+       {
+         if (tag)
+           {
+             tag->scale_level_delta += 1;
+             tag->scale_level += 1;
+           }
+       }
+      else if (parse_absolute_size (tag, size))
+       ; /* nothing */
+      else
+       {
+         g_set_error (error,
+                      G_MARKUP_ERROR,
+                      G_MARKUP_ERROR_INVALID_CONTENT,
+                      _("Value of 'size' attribute on <span> tag on line %d "
+                        "could not be parsed; should be an integer, or a "
+                        "string such as 'small', not '%s'"),
+                      line_number, size);
+         goto error;
+       }
+    }
+
+  if (G_UNLIKELY (style))
+    {
+      PangoStyle pango_style;
+
+      if (pango_parse_style (style, &pango_style, FALSE))
+       add_attribute (tag, pango_attr_style_new (pango_style));
+      else
+       {
+         g_set_error (error,
+                      G_MARKUP_ERROR,
+                      G_MARKUP_ERROR_INVALID_CONTENT,
+                      _("'%s' is not a valid value for the 'style' attribute "
+                        "on <span> tag, line %d; valid values are "
+                        "'normal', 'oblique', 'italic'"),
+                      style, line_number);
+         goto error;
+       }
+    }
+
+  if (G_UNLIKELY (weight))
+    {
+      PangoWeight pango_weight;
+
+      if (pango_parse_weight (weight, &pango_weight, FALSE))
+       add_attribute (tag,
+                      pango_attr_weight_new (pango_weight));
+      else
+       {
+         g_set_error (error,
+                      G_MARKUP_ERROR,
+                      G_MARKUP_ERROR_INVALID_CONTENT,
+                      _("'%s' is not a valid value for the 'weight' "
+                        "attribute on <span> tag, line %d; valid "
+                        "values are for example 'light', 'ultrabold' or a number"),
+                      weight, line_number);
+         goto error;
+       }
+    }
+
+  if (G_UNLIKELY (variant))
+    {
+      PangoVariant pango_variant;
+
+      if (pango_parse_variant (variant, &pango_variant, FALSE))
+       add_attribute (tag, pango_attr_variant_new (pango_variant));
+      else
+       {
+         g_set_error (error,
+                      G_MARKUP_ERROR,
+                      G_MARKUP_ERROR_INVALID_CONTENT,
+                      _("'%s' is not a valid value for the 'variant' "
+                        "attribute on <span> tag, line %d; valid values are "
+                        "'normal', 'smallcaps'"),
+                      variant, line_number);
+         goto error;
+       }
+    }
+
+  if (G_UNLIKELY (stretch))
+    {
+      PangoStretch pango_stretch;
+
+      if (pango_parse_stretch (stretch, &pango_stretch, FALSE))
+       add_attribute (tag, pango_attr_stretch_new (pango_stretch));
+      else
+       {
+         g_set_error (error,
+                      G_MARKUP_ERROR,
+                      G_MARKUP_ERROR_INVALID_CONTENT,
+                      _("'%s' is not a valid value for the 'stretch' "
+                        "attribute on <span> tag, line %d; valid "
+                        "values are for example 'condensed', "
+                        "'ultraexpanded', 'normal'"),
+                      stretch, line_number);
+         goto error;
+       }
+    }
+
+  if (G_UNLIKELY (foreground))
+    {
+      PangoColor color;
+
+      if (!span_parse_color ("foreground", foreground, &color, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_foreground_new (color.red, color.green, color.blue));
+    }
+
+  if (G_UNLIKELY (background))
+    {
+      PangoColor color;
+
+      if (!span_parse_color ("background", background, &color, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_background_new (color.red, color.green, color.blue));
+    }
+
+  if (G_UNLIKELY (underline))
+    {
+      PangoUnderline ul = PANGO_UNDERLINE_NONE;
+
+      if (!span_parse_enum ("underline", underline, PANGO_TYPE_UNDERLINE, (int*)(void*)&ul, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_underline_new (ul));
+    }
+
+  if (G_UNLIKELY (underline_color))
+    {
+      PangoColor color;
+
+      if (!span_parse_color ("underline_color", underline_color, &color, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_underline_color_new (color.red, color.green, color.blue));
+    }
+
+  if (G_UNLIKELY (gravity))
+    {
+      PangoGravity gr = PANGO_GRAVITY_SOUTH;
+
+      if (!span_parse_enum ("gravity", gravity, PANGO_TYPE_GRAVITY, (int*)(void*)&gr, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_gravity_new (gr));
+    }
+
+  if (G_UNLIKELY (gravity_hint))
+    {
+      PangoGravityHint hint = PANGO_GRAVITY_HINT_NATURAL;
+
+      if (!span_parse_enum ("gravity_hint", gravity_hint, PANGO_TYPE_GRAVITY_HINT, (int*)(void*)&hint, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_gravity_hint_new (hint));
+    }
+
+  if (G_UNLIKELY (strikethrough))
+    {
+      gboolean b = FALSE;
+
+      if (!span_parse_boolean ("strikethrough", strikethrough, &b, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_strikethrough_new (b));
+    }
+
+  if (G_UNLIKELY (strikethrough_color))
+    {
+      PangoColor color;
+
+      if (!span_parse_color ("strikethrough_color", strikethrough_color, &color, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_strikethrough_color_new (color.red, color.green, color.blue));
+    }
+
+  if (G_UNLIKELY (fallback))
+    {
+      gboolean b = FALSE;
+
+      if (!span_parse_boolean ("fallback", fallback, &b, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_fallback_new (b));
+    }
+
+  if (G_UNLIKELY (rise))
+    {
+      gint n = 0;
+
+      if (!span_parse_int ("rise", rise, &n, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_rise_new (n));
+    }
+
+  if (G_UNLIKELY (letter_spacing))
+    {
+      gint n = 0;
+
+      if (!span_parse_int ("letter_spacing", letter_spacing, &n, line_number, error))
+       goto error;
+
+      add_attribute (tag, pango_attr_letter_spacing_new (n));
+    }
+
+  if (G_UNLIKELY (lang))
+    {
+      add_attribute (tag,
+                    pango_attr_language_new (pango_language_from_string (lang)));
+    }
+
+  return TRUE;
+
+ error:
+
+  return FALSE;
+}
+
+static gboolean
+i_parse_func        (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("i");
+  add_attribute (tag, pango_attr_style_new (PANGO_STYLE_ITALIC));
+
+  return TRUE;
+}
+
+static gboolean
+markup_parse_func (MarkupData            *md G_GNUC_UNUSED,
+                  OpenTag               *tag G_GNUC_UNUSED,
+                  const gchar          **names G_GNUC_UNUSED,
+                  const gchar          **values G_GNUC_UNUSED,
+                  GMarkupParseContext   *context G_GNUC_UNUSED,
+                  GError               **error G_GNUC_UNUSED)
+{
+  /* We don't do anything with this tag at the moment. */
+
+  return TRUE;
+}
+
+static gboolean
+s_parse_func        (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("s");
+  add_attribute (tag, pango_attr_strikethrough_new (TRUE));
+
+  return TRUE;
+}
+
+#define SUPERSUB_RISE 5000
+
+static gboolean
+sub_parse_func      (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("sub");
+
+  /* Shrink font, and set a negative rise */
+  if (tag)
+    {
+      tag->scale_level_delta -= 1;
+      tag->scale_level -= 1;
+    }
+
+  add_attribute (tag, pango_attr_rise_new (-SUPERSUB_RISE));
+
+  return TRUE;
+}
+
+static gboolean
+sup_parse_func      (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("sup");
+
+  /* Shrink font, and set a positive rise */
+  if (tag)
+    {
+      tag->scale_level_delta -= 1;
+      tag->scale_level -= 1;
+    }
+
+  add_attribute (tag, pango_attr_rise_new (SUPERSUB_RISE));
+
+  return TRUE;
+}
+
+static gboolean
+small_parse_func    (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("small");
+
+  /* Shrink text one level */
+  if (tag)
+    {
+      tag->scale_level_delta -= 1;
+      tag->scale_level -= 1;
+    }
+
+  return TRUE;
+}
+
+static gboolean
+tt_parse_func       (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("tt");
+
+  add_attribute (tag, pango_attr_family_new ("Monospace"));
+
+  return TRUE;
+}
+
+static gboolean
+u_parse_func        (MarkupData            *md G_GNUC_UNUSED,
+                    OpenTag               *tag,
+                    const gchar          **names,
+                    const gchar          **values G_GNUC_UNUSED,
+                    GMarkupParseContext   *context,
+                    GError               **error)
+{
+  CHECK_NO_ATTRS("u");
+  add_attribute (tag, pango_attr_underline_new (PANGO_UNDERLINE_SINGLE));
+
+  return TRUE;
+}
diff --git a/pango/pango-matrix.c b/pango/pango-matrix.c
new file mode 100755 (executable)
index 0000000..70a1698
--- /dev/null
@@ -0,0 +1,468 @@
+/* Pango
+ * pango-matrix.c: Matrix manipulation routines
+ *
+ * Copyright (C) 2000, 2006 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <math.h>
+
+#include "pango-matrix.h"
+#include "pango-impl-utils.h"
+
+GType
+pango_matrix_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoMatrix"),
+                                            (GBoxedCopyFunc) pango_matrix_copy,
+                                            (GBoxedFreeFunc) pango_matrix_free);
+
+  return our_type;
+}
+
+/**
+ * pango_matrix_copy:
+ * @matrix: a #PangoMatrix, may be %NULL
+ *
+ * Copies a #PangoMatrix.
+ *
+ * Return value: the newly allocated #PangoMatrix, which should
+ *               be freed with pango_matrix_free(), or %NULL if
+ *               @matrix was %NULL.
+ *
+ * Since: 1.6
+ **/
+PangoMatrix *
+pango_matrix_copy (const PangoMatrix *matrix)
+{
+  PangoMatrix *new_matrix;
+
+  if (matrix == NULL)
+    return NULL;
+
+  new_matrix = g_slice_new (PangoMatrix);
+
+  *new_matrix = *matrix;
+
+  return new_matrix;
+}
+
+/**
+ * pango_matrix_free:
+ * @matrix: a #PangoMatrix, may be %NULL
+ *
+ * Free a #PangoMatrix created with pango_matrix_copy().
+ *
+ * Since: 1.6
+ **/
+void
+pango_matrix_free (PangoMatrix *matrix)
+{
+  if (matrix == NULL)
+    return;
+
+  g_slice_free (PangoMatrix, matrix);
+}
+
+/**
+ * pango_matrix_translate:
+ * @matrix: a #PangoMatrix
+ * @tx: amount to translate in the X direction
+ * @ty: amount to translate in the Y direction
+ *
+ * Changes the transformation represented by @matrix to be the
+ * transformation given by first translating by (@tx, @ty)
+ * then applying the original transformation.
+ *
+ * Since: 1.6
+ **/
+void
+pango_matrix_translate (PangoMatrix *matrix,
+                       double       tx,
+                       double       ty)
+{
+  g_return_if_fail (matrix != NULL);
+
+  matrix->x0  = matrix->xx * tx + matrix->xy * ty + matrix->x0;
+  matrix->y0  = matrix->yx * tx + matrix->yy * ty + matrix->y0;
+}
+
+/**
+ * pango_matrix_scale:
+ * @matrix: a #PangoMatrix
+ * @scale_x: amount to scale by in X direction
+ * @scale_y: amount to scale by in Y direction
+ *
+ * Changes the transformation represented by @matrix to be the
+ * transformation given by first scaling by @sx in the X direction
+ * and @sy in the Y direction then applying the original
+ * transformation.
+ *
+ * Since: 1.6
+ **/
+void
+pango_matrix_scale (PangoMatrix *matrix,
+                   double       scale_x,
+                   double       scale_y)
+{
+  g_return_if_fail (matrix != NULL);
+
+  matrix->xx *= scale_x;
+  matrix->xy *= scale_y;
+  matrix->yx *= scale_x;
+  matrix->yy *= scale_y;
+}
+
+/**
+ * pango_matrix_rotate:
+ * @matrix: a #PangoMatrix
+ * @degrees: degrees to rotate counter-clockwise
+ *
+ * Changes the transformation represented by @matrix to be the
+ * transformation given by first rotating by @degrees degrees
+ * counter-clockwise then applying the original transformation.
+ *
+ * Since: 1.6
+ **/
+void
+pango_matrix_rotate (PangoMatrix *matrix,
+                    double       degrees)
+{
+  PangoMatrix tmp;
+  gdouble r, s, c;
+
+  g_return_if_fail (matrix != NULL);
+
+  r = degrees * (G_PI / 180.);
+  s = sin (r);
+  c = cos (r);
+
+  tmp.xx = c;
+  tmp.xy = s;
+  tmp.yx = -s;
+  tmp.yy = c;
+  tmp.x0 = 0;
+  tmp.y0 = 0;
+
+  pango_matrix_concat (matrix, &tmp);
+}
+
+/**
+ * pango_matrix_concat:
+ * @matrix: a #PangoMatrix
+ * @new_matrix: a #PangoMatrix
+ *
+ * Changes the transformation represented by @matrix to be the
+ * transformation given by first applying transformation
+ * given by @new_matrix then applying the original transformation.
+ *
+ * Since: 1.6
+ **/
+void
+pango_matrix_concat (PangoMatrix       *matrix,
+                    const PangoMatrix *new_matrix)
+{
+  PangoMatrix tmp;
+
+  g_return_if_fail (matrix != NULL);
+
+  tmp = *matrix;
+
+  matrix->xx = tmp.xx * new_matrix->xx + tmp.xy * new_matrix->yx;
+  matrix->xy = tmp.xx * new_matrix->xy + tmp.xy * new_matrix->yy;
+  matrix->yx = tmp.yx * new_matrix->xx + tmp.yy * new_matrix->yx;
+  matrix->yy = tmp.yx * new_matrix->xy + tmp.yy * new_matrix->yy;
+  matrix->x0  = tmp.xx * new_matrix->x0 + tmp.xy * new_matrix->y0 + tmp.x0;
+  matrix->y0  = tmp.yx * new_matrix->x0 + tmp.yy * new_matrix->y0 + tmp.y0;
+}
+
+/**
+ * pango_matrix_get_font_scale_factor:
+ * @matrix: a #PangoMatrix, may be %NULL
+ *
+ * Returns the scale factor of a matrix on the height of the font.
+ * That is, the scale factor in the direction perpendicular to the
+ * vector that the X coordinate is mapped to.
+ *
+ * Return value: the scale factor of @matrix on the height of the font,
+ * or 1.0 if @matrix is %NULL.
+ *
+ * Since: 1.12
+ **/
+double
+pango_matrix_get_font_scale_factor (const PangoMatrix *matrix)
+{
+/*
+ * Based on cairo-matrix.c:_cairo_matrix_compute_scale_factors()
+ *
+ * Copyright 2005, Keith Packard
+ */
+  double det;
+
+  if (!matrix)
+    return 1.0;
+
+  det = matrix->xx * matrix->yy - matrix->yx * matrix->xy;
+
+  if (det == 0)
+    {
+      return 0.0;
+    }
+  else
+    {
+      double x = matrix->xx;
+      double y = matrix->yx;
+      double major, minor;
+
+      major = sqrt (x*x + y*y);
+
+      /*
+       * ignore mirroring
+       */
+      if (det < 0)
+       det = - det;
+
+      if (major)
+       minor = det / major;
+      else
+       minor = 0.0;
+
+      return minor;
+    }
+}
+
+/**
+ * pango_matrix_transform_distance:
+ * @matrix: a #PangoMatrix, or %NULL
+ * @dx: in/out X component of a distance vector
+ * @dy: yn/out Y component of a distance vector
+ *
+ * Transforms the distance vector (@dx,@dy) by @matrix. This is
+ * similar to pango_matrix_transform_point() except that the translation
+ * components of the transformation are ignored. The calculation of
+ * the returned vector is as follows:
+ *
+ * <programlisting>
+ * dx2 = dx1 * xx + dy1 * xy;
+ * dy2 = dx1 * yx + dy1 * yy;
+ * </programlisting>
+ *
+ * Affine transformations are position invariant, so the same vector
+ * always transforms to the same vector. If (@x1,@y1) transforms
+ * to (@x2,@y2) then (@x1+@dx1,@y1+@dy1) will transform to
+ * (@x1+@dx2,@y1+@dy2) for all values of @x1 and @x2.
+ *
+ * Since: 1.16
+ **/
+void
+pango_matrix_transform_distance (const PangoMatrix *matrix,
+                                double            *dx,
+                                double            *dy)
+{
+  if (matrix)
+    {
+      double new_x, new_y;
+
+      new_x = (matrix->xx * *dx + matrix->xy * *dy);
+      new_y = (matrix->yx * *dx + matrix->yy * *dy);
+
+      *dx = new_x;
+      *dy = new_y;
+    }
+}
+
+/**
+ * pango_matrix_transform_point:
+ * @matrix: a #PangoMatrix, or %NULL
+ * @x: in/out X position
+ * @y: in/out Y position
+ *
+ * Transforms the point (@x, @y) by @matrix.
+ *
+ * Since: 1.16
+ **/
+void
+pango_matrix_transform_point (const PangoMatrix *matrix,
+                             double            *x,
+                             double            *y)
+{
+  if (matrix)
+    {
+      pango_matrix_transform_distance (matrix, x, y);
+
+      *x += matrix->x0;
+      *y += matrix->y0;
+    }
+}
+
+/**
+ * pango_matrix_transform_rectangle:
+ * @matrix: a #PangoMatrix, or %NULL
+ * @rect: in/out bounding box in Pango units, or %NULL
+ *
+ * First transforms @rect using @matrix, then calculates the bounding box
+ * of the transformed rectangle.  The rectangle should be in Pango units.
+ *
+ * This function is useful for example when you want to draw a rotated
+ * @PangoLayout to an image buffer, and want to know how large the image
+ * should be and how much you should shift the layout when rendering.
+ *
+ * If you have a rectangle in device units (pixels), use
+ * pango_matrix_transform_pixel_rectangle().
+ *
+ * If you have the rectangle in Pango units and want to convert to
+ * transformed pixel bounding box, it is more accurate to transform it first
+ * (using this function) and pass the result to pango_extents_to_pixels(),
+ * first argument, for an inclusive rounded rectangle.
+ * However, there are valid reasons that you may want to convert
+ * to pixels first and then transform, for example when the transformed
+ * coordinates may overflow in Pango units (large matrix translation for
+ * example).
+ *
+ * Since: 1.16
+ **/
+void
+pango_matrix_transform_rectangle (const PangoMatrix *matrix,
+                                 PangoRectangle    *rect)
+{
+  int i;
+  double quad_x[4], quad_y[4];
+  double dx1, dy1;
+  double dx2, dy2;
+  double min_x, max_x;
+  double min_y, max_y;
+
+  if (!rect || !matrix)
+    return;
+
+  quad_x[0] = pango_units_to_double (rect->x);
+  quad_y[0] = pango_units_to_double (rect->y);
+  pango_matrix_transform_point (matrix, &quad_x[0], &quad_y[0]);
+
+  dx1 = pango_units_to_double (rect->width);
+  dy1 = 0;
+  pango_matrix_transform_distance (matrix, &dx1, &dy1);
+  quad_x[1] = quad_x[0] + dx1;
+  quad_y[1] = quad_y[0] + dy1;
+
+  dx2 = 0;
+  dy2 = pango_units_to_double (rect->height);
+  pango_matrix_transform_distance (matrix, &dx2, &dy2);
+  quad_x[2] = quad_x[0] + dx2;
+  quad_y[2] = quad_y[0] + dy2;
+
+  quad_x[3] = quad_x[0] + dx1 + dx2;
+  quad_y[3] = quad_y[0] + dy1 + dy2;
+
+  min_x = max_x = quad_x[0];
+  min_y = max_y = quad_y[0];
+
+  for (i=1; i < 4; i++) {
+      if (quad_x[i] < min_x)
+         min_x = quad_x[i];
+      else if (quad_x[i] > max_x)
+         max_x = quad_x[i];
+
+      if (quad_y[i] < min_y)
+         min_y = quad_y[i];
+      else if (quad_y[i] > max_y)
+         max_y = quad_y[i];
+  }
+
+  rect->x      = pango_units_from_double (min_x);
+  rect->y      = pango_units_from_double (min_y);
+  rect->width  = pango_units_from_double (max_x) - rect->x;
+  rect->height = pango_units_from_double (max_y) - rect->y;
+}
+
+/**
+ * pango_matrix_transform_pixel_rectangle:
+ * @matrix: a #PangoMatrix, or %NULL
+ * @rect: in/out bounding box in device units, or %NULL
+ *
+ * First transforms the @rect using @matrix, then calculates the bounding box
+ * of the transformed rectangle.  The rectangle should be in device units
+ * (pixels).
+ *
+ * This function is useful for example when you want to draw a rotated
+ * @PangoLayout to an image buffer, and want to know how large the image
+ * should be and how much you should shift the layout when rendering.
+ *
+ * For better accuracy, you should use pango_matrix_transform_rectangle() on
+ * original rectangle in Pango units and convert to pixels afterward
+ * using pango_extents_to_pixels()'s first argument.
+ *
+ * Since: 1.16
+ **/
+void
+pango_matrix_transform_pixel_rectangle (const PangoMatrix *matrix,
+                                       PangoRectangle    *rect)
+{
+  int i;
+  double quad_x[4], quad_y[4];
+  double dx1, dy1;
+  double dx2, dy2;
+  double min_x, max_x;
+  double min_y, max_y;
+
+  if (!rect || !matrix)
+    return;
+
+  quad_x[0] = rect->x;
+  quad_y[0] = rect->y;
+  pango_matrix_transform_point (matrix, &quad_x[0], &quad_y[0]);
+
+  dx1 = rect->width;
+  dy1 = 0;
+  pango_matrix_transform_distance (matrix, &dx1, &dy1);
+  quad_x[1] = quad_x[0] + dx1;
+  quad_y[1] = quad_y[0] + dy1;
+
+  dx2 = 0;
+  dy2 = rect->height;
+  pango_matrix_transform_distance (matrix, &dx2, &dy2);
+  quad_x[2] = quad_x[0] + dx2;
+  quad_y[2] = quad_y[0] + dy2;
+
+  quad_x[3] = quad_x[0] + dx1 + dx2;
+  quad_y[3] = quad_y[0] + dy1 + dy2;
+
+  min_x = max_x = quad_x[0];
+  min_y = max_y = quad_y[0];
+
+  for (i=1; i < 4; i++) {
+      if (quad_x[i] < min_x)
+         min_x = quad_x[i];
+      else if (quad_x[i] > max_x)
+         max_x = quad_x[i];
+
+      if (quad_y[i] < min_y)
+         min_y = quad_y[i];
+      else if (quad_y[i] > max_y)
+         max_y = quad_y[i];
+  }
+
+  rect->x      = floor (min_x);
+  rect->y      = floor (min_y);
+  rect->width  = ceil (max_x - rect->x);
+  rect->height = ceil (max_y - rect->y);
+}
diff --git a/pango/pango-matrix.h b/pango/pango-matrix.h
new file mode 100755 (executable)
index 0000000..5909367
--- /dev/null
@@ -0,0 +1,117 @@
+/* Pango
+ * pango-matrix.h: Matrix manipulation routines
+ *
+ * Copyright (C) 2002, 2006 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_MATRIX_H__
+#define __PANGO_MATRIX_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoMatrix    PangoMatrix;
+
+/**
+ * PangoMatrix:
+ * @xx: 1st component of the transformation matrix
+ * @xy: 2nd component of the transformation matrix
+ * @yx: 3rd component of the transformation matrix
+ * @yy: 4th component of the transformation matrix
+ * @x0: x translation
+ * @y0: y translation
+ *
+ * A structure specifying a transformation between user-space
+ * coordinates and device coordinates. The transformation
+ * is given by
+ *
+ * <programlisting>
+ * x_device = x_user * matrix->xx + y_user * matrix->xy + matrix->x0;
+ * y_device = x_user * matrix->yx + y_user * matrix->yy + matrix->y0;
+ * </programlisting>
+ *
+ * Since: 1.6
+ **/
+struct _PangoMatrix
+{
+  double xx;
+  double xy;
+  double yx;
+  double yy;
+  double x0;
+  double y0;
+};
+
+/**
+ * PANGO_TYPE_MATRIX
+ *
+ * The GObject type for #PangoMatrix
+ **/
+#define PANGO_TYPE_MATRIX (pango_matrix_get_type ())
+
+/**
+ * PANGO_MATRIX_INIT
+ *
+ * Constant that can be used to initialize a PangoMatrix to
+ * the identity transform.
+ *
+ * <informalexample><programlisting>
+ * PangoMatrix matrix = PANGO_MATRIX_INIT;
+ * pango_matrix_rotate (&amp;matrix, 45.);
+ * </programlisting></informalexample>
+ *
+ * Since: 1.6
+ **/
+#define PANGO_MATRIX_INIT { 1., 0., 0., 1., 0., 0. }
+
+/* for PangoRectangle */
+#include <pango/pango-types.h>
+
+GType pango_matrix_get_type (void) G_GNUC_CONST;
+
+PangoMatrix *pango_matrix_copy   (const PangoMatrix *matrix);
+void         pango_matrix_free   (PangoMatrix *matrix);
+
+void pango_matrix_translate (PangoMatrix *matrix,
+                            double       tx,
+                            double       ty);
+void pango_matrix_scale     (PangoMatrix *matrix,
+                            double       scale_x,
+                            double       scale_y);
+void pango_matrix_rotate    (PangoMatrix *matrix,
+                            double       degrees);
+void pango_matrix_concat    (PangoMatrix       *matrix,
+                            const PangoMatrix *new_matrix);
+void pango_matrix_transform_point    (const PangoMatrix *matrix,
+                                     double            *x,
+                                     double            *y);
+void pango_matrix_transform_distance (const PangoMatrix *matrix,
+                                     double            *dx,
+                                     double            *dy);
+void pango_matrix_transform_rectangle (const PangoMatrix *matrix,
+                                      PangoRectangle    *rect);
+void pango_matrix_transform_pixel_rectangle (const PangoMatrix *matrix,
+                                            PangoRectangle    *rect);
+double pango_matrix_get_font_scale_factor (const PangoMatrix *matrix) G_GNUC_PURE;
+
+
+G_END_DECLS
+
+#endif /* __PANGO_MATRIX_H__ */
diff --git a/pango/pango-modules.h b/pango/pango-modules.h
new file mode 100755 (executable)
index 0000000..5dbcfe9
--- /dev/null
@@ -0,0 +1,60 @@
+/* Pango
+ * pango-modules.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_MODULES_H__
+#define __PANGO_MODULES_H__
+
+#include <pango/pango-engine.h>
+
+G_BEGIN_DECLS
+
+#ifdef PANGO_ENABLE_BACKEND
+
+typedef struct _PangoMap PangoMap;
+typedef struct _PangoMapEntry PangoMapEntry;
+
+typedef struct _PangoIncludedModule PangoIncludedModule;
+
+struct _PangoIncludedModule
+{
+  void (*list) (PangoEngineInfo **engines,
+               int              *n_engines);
+  void (*init) (GTypeModule      *module);
+  void (*exit) (void);
+  PangoEngine *(*create) (const char       *id);
+};
+
+PangoMap *     pango_find_map        (PangoLanguage       *language,
+                                     guint                engine_type_id,
+                                     guint                render_type_id);
+PangoEngine *  pango_map_get_engine  (PangoMap            *map,
+                                     PangoScript          script);
+void           pango_map_get_engines (PangoMap            *map,
+                                     PangoScript          script,
+                                     GSList             **exact_engines,
+                                     GSList             **fallback_engines);
+void           pango_module_register (PangoIncludedModule *module);
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+G_END_DECLS
+
+#endif /* __PANGO_MODULES_H__ */
diff --git a/pango/pango-ot-buffer.c b/pango/pango-ot-buffer.c
new file mode 100755 (executable)
index 0000000..f5a6851
--- /dev/null
@@ -0,0 +1,435 @@
+/* Pango
+ * pango-ot-buffer.c: Buffer of glyphs for shaping/positioning
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-ot-private.h"
+#include "pangofc-private.h"
+#include "pango-impl-utils.h"
+
+/* cache a single hb_buffer_t */
+static hb_buffer_t *cached_buffer = NULL;
+G_LOCK_DEFINE_STATIC (cached_buffer);
+
+static hb_buffer_t *
+acquire_buffer (gboolean *free_buffer)
+{
+  hb_buffer_t *buffer;
+
+  if (G_LIKELY (G_TRYLOCK (cached_buffer)))
+    {
+      if (G_UNLIKELY (!cached_buffer))
+       cached_buffer = hb_buffer_create (64);
+
+      buffer = cached_buffer;
+      *free_buffer = FALSE;
+    }
+  else
+    {
+      buffer = hb_buffer_create (32);
+      *free_buffer = TRUE;
+    }
+
+  return buffer;
+}
+
+static void
+release_buffer (hb_buffer_t *buffer, gboolean free_buffer)
+{
+  if (G_LIKELY (!free_buffer) && hb_buffer_get_reference_count (buffer) == 1)
+    {
+      hb_buffer_clear (buffer);
+      G_UNLOCK (cached_buffer);
+    }
+  else
+    hb_buffer_destroy (buffer);
+}
+
+/**
+ * pango_ot_buffer_new
+ * @font: a #PangoFcFont
+ *
+ * Creates a new #PangoOTBuffer for the given OpenType font.
+ *
+ * Return value: the newly allocated #PangoOTBuffer, which should
+ *               be freed with pango_ot_buffer_destroy().
+ *
+ * Since: 1.4
+ **/
+PangoOTBuffer *
+pango_ot_buffer_new (PangoFcFont *font)
+{
+  PangoOTBuffer *buffer = g_slice_new (PangoOTBuffer);
+
+  buffer->buffer = acquire_buffer (&buffer->should_free_hb_buffer);
+  buffer->font = g_object_ref (font);
+  buffer->applied_gpos = FALSE;
+  buffer->rtl = FALSE;
+  buffer->zero_width_marks = FALSE;
+
+  return buffer;
+}
+
+/**
+ * pango_ot_buffer_destroy
+ * @buffer: a #PangoOTBuffer
+ *
+ * Destroys a #PangoOTBuffer and free all associated memory.
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_buffer_destroy (PangoOTBuffer *buffer)
+{
+  release_buffer (buffer->buffer, buffer->should_free_hb_buffer);
+  g_object_unref (buffer->font);
+  g_slice_free (PangoOTBuffer, buffer);
+}
+
+/**
+ * pango_ot_buffer_clear
+ * @buffer: a #PangoOTBuffer
+ *
+ * Empties a #PangoOTBuffer, make it ready to add glyphs to.
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_buffer_clear (PangoOTBuffer *buffer)
+{
+  hb_buffer_clear (buffer->buffer);
+  buffer->applied_gpos = FALSE;
+}
+
+/**
+ * pango_ot_buffer_add_glyph
+ * @buffer: a #PangoOTBuffer
+ * @glyph: the glyph index to add, like a #PangoGlyph
+ * @properties: the glyph properties
+ * @cluster: the cluster that this glyph belongs to
+ *
+ * Appends a glyph to a #PangoOTBuffer, with @properties identifying which
+ * features should be applied on this glyph.  See pango_ruleset_add_feature().
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_buffer_add_glyph (PangoOTBuffer *buffer,
+                          guint          glyph,
+                          guint          properties,
+                          guint          cluster)
+{
+  hb_buffer_add_glyph (buffer->buffer,
+                       glyph, properties, cluster);
+}
+
+/**
+ * pango_ot_buffer_set_rtl
+ * @buffer: a #PangoOTBuffer
+ * @rtl: %TRUE for right-to-left text
+ *
+ * Sets whether glyphs will be rendered right-to-left.  This setting
+ * is needed for proper horizontal positioning of right-to-left scripts.
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_buffer_set_rtl (PangoOTBuffer *buffer,
+                        gboolean       rtl)
+{
+  buffer->rtl = rtl != FALSE;
+  hb_buffer_set_direction (buffer->buffer,
+                          buffer->rtl ? HB_DIRECTION_RTL : HB_DIRECTION_LTR);
+}
+
+/**
+ * pango_ot_buffer_set_zero_width_marks
+ * @buffer: a #PangoOTBuffer
+ * @zero_width_marks: %TRUE if characters with a mark class should
+ *  be forced to zero width.
+ *
+ * Sets whether characters with a mark class should be forced to zero width.
+ * This setting is needed for proper positioning of Arabic accents,
+ * but will produce incorrect results with standard OpenType Indic
+ * fonts.
+ *
+ * Since: 1.6
+ **/
+void
+pango_ot_buffer_set_zero_width_marks (PangoOTBuffer     *buffer,
+                                     gboolean           zero_width_marks)
+{
+  buffer->zero_width_marks = zero_width_marks != FALSE;
+}
+
+/**
+ * pango_ot_buffer_get_glyphs
+ * @buffer: a #PangoOTBuffer
+ * @glyphs: location to store the array of glyphs, or %NULL
+ * @n_glyphs: location to store the number of glyphs, or %NULL
+ *
+ * Gets the glyph array contained in a #PangoOTBuffer.  The glyphs are
+ * owned by the buffer and should not be freed, and are only valid as long
+ * as buffer is not modified.
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_buffer_get_glyphs (const PangoOTBuffer  *buffer,
+                           PangoOTGlyph        **glyphs,
+                           int                  *n_glyphs)
+{
+  if (glyphs)
+    *glyphs = (PangoOTGlyph *) hb_buffer_get_glyph_infos (buffer->buffer);
+
+  if (n_glyphs)
+    *n_glyphs = hb_buffer_get_len (buffer->buffer);
+}
+
+static void
+apply_gpos_ltr (PangoGlyphString    *glyphs,
+               hb_glyph_position_t *positions,
+               gboolean             scale,
+               double               xscale,
+               double               yscale,
+               gboolean             is_hinted)
+{
+  int i;
+
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      FT_Pos x_pos = positions[i].x_pos;
+      FT_Pos y_pos = positions[i].y_pos;
+      int back = i;
+      int j;
+      int adjustment;
+
+
+      adjustment = PANGO_UNITS_26_6(positions[i].x_advance);
+
+      if (is_hinted)
+       adjustment = PANGO_UNITS_ROUND (adjustment);
+      if (G_UNLIKELY (scale))
+       adjustment *= xscale;
+
+      if (positions[i].new_advance)
+       glyphs->glyphs[i].geometry.width  = adjustment;
+      else
+       glyphs->glyphs[i].geometry.width += adjustment;
+
+
+      while (positions[back].back != 0)
+       {
+         back  -= positions[back].back;
+         x_pos += positions[back].x_pos;
+         y_pos += positions[back].y_pos;
+       }
+
+      for (j = back; j < i; j++)
+       glyphs->glyphs[i].geometry.x_offset -= glyphs->glyphs[j].geometry.width;
+
+      if (G_UNLIKELY (scale))
+        {
+         glyphs->glyphs[i].geometry.x_offset += xscale * PANGO_UNITS_26_6(x_pos);
+         glyphs->glyphs[i].geometry.y_offset -= yscale * PANGO_UNITS_26_6(y_pos);
+       }
+      else
+        {
+         glyphs->glyphs[i].geometry.x_offset += PANGO_UNITS_26_6(x_pos);
+         glyphs->glyphs[i].geometry.y_offset -= PANGO_UNITS_26_6(y_pos);
+       }
+    }
+}
+
+static void
+apply_gpos_rtl (PangoGlyphString    *glyphs,
+               hb_glyph_position_t *positions,
+               gboolean             scale,
+               double               xscale,
+               double               yscale,
+               gboolean             is_hinted)
+{
+  int i;
+
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      int i_rev = glyphs->num_glyphs - i - 1;
+      int back_rev = i_rev;
+      int back;
+      FT_Pos x_pos = positions[i_rev].x_pos;
+      FT_Pos y_pos = positions[i_rev].y_pos;
+      int j;
+      int adjustment;
+
+
+      adjustment = PANGO_UNITS_26_6(positions[i_rev].x_advance);
+
+      if (is_hinted)
+       adjustment = PANGO_UNITS_ROUND (adjustment);
+      if (G_UNLIKELY (scale))
+       adjustment *= xscale;
+
+      if (positions[i_rev].new_advance)
+       glyphs->glyphs[i].geometry.width  = adjustment;
+      else
+       glyphs->glyphs[i].geometry.width += adjustment;
+
+
+      while (positions[back_rev].back != 0)
+       {
+         back_rev -= positions[back_rev].back;
+         x_pos += positions[back_rev].x_pos;
+         y_pos += positions[back_rev].y_pos;
+       }
+
+      back = glyphs->num_glyphs - back_rev - 1;
+
+      for (j = i; j < back; j++)
+       glyphs->glyphs[i].geometry.x_offset += glyphs->glyphs[j].geometry.width;
+
+      if (G_UNLIKELY (scale))
+        {
+         glyphs->glyphs[i].geometry.x_offset += xscale * PANGO_UNITS_26_6(x_pos);
+         glyphs->glyphs[i].geometry.y_offset -= yscale * PANGO_UNITS_26_6(y_pos);
+       }
+      else
+        {
+         glyphs->glyphs[i].geometry.x_offset += PANGO_UNITS_26_6(x_pos);
+         glyphs->glyphs[i].geometry.y_offset -= PANGO_UNITS_26_6(y_pos);
+       }
+    }
+}
+
+/**
+ * pango_ot_buffer_output
+ * @buffer: a #PangoOTBuffer
+ * @glyphs: a #PangoGlyphString
+ *
+ * Exports the glyphs in a #PangoOTBuffer into a #PangoGlyphString.  This is
+ * typically used after the OpenType layout processing is over, to convert the
+ * resulting glyphs into a generic Pango glyph string.
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_buffer_output (const PangoOTBuffer *buffer,
+                       PangoGlyphString    *glyphs)
+{
+  FT_Face face;
+  hb_face_t *hb_face;
+  unsigned int i;
+  int last_cluster;
+
+  unsigned int len;
+  PangoOTGlyph *otglyphs;
+  hb_glyph_position_t *positions;
+
+  face = pango_fc_font_lock_face (buffer->font);
+  g_assert (face);
+
+  pango_ot_buffer_get_glyphs (buffer, &otglyphs, (int *) &len);
+
+  /* Copy glyphs into output glyph string */
+  pango_glyph_string_set_size (glyphs, len);
+
+  last_cluster = -1;
+  for (i = 0; i < len; i++)
+    {
+      PangoOTGlyph *otglyph = &otglyphs[i];
+
+      glyphs->glyphs[i].glyph = otglyph->glyph;
+
+      glyphs->log_clusters[i] = otglyph->cluster;
+      if (glyphs->log_clusters[i] != last_cluster)
+       glyphs->glyphs[i].attr.is_cluster_start = 1;
+      else
+       glyphs->glyphs[i].attr.is_cluster_start = 0;
+
+      last_cluster = glyphs->log_clusters[i];
+    }
+
+  hb_face = _pango_ot_info_get_hb_face (pango_ot_info_get (face));
+
+  /* Apply default positioning */
+  for (i = 0; i < (unsigned int)glyphs->num_glyphs; i++)
+    {
+      if (glyphs->glyphs[i].glyph)
+       {
+         PangoRectangle logical_rect;
+
+         if (buffer->zero_width_marks &&
+             hb_ot_layout_get_glyph_class (hb_face, glyphs->glyphs[i].glyph) == HB_OT_LAYOUT_GLYPH_CLASS_MARK)
+           {
+             glyphs->glyphs[i].geometry.width = 0;
+           }
+         else
+           {
+             pango_font_get_glyph_extents ((PangoFont *)buffer->font, glyphs->glyphs[i].glyph, NULL, &logical_rect);
+             glyphs->glyphs[i].geometry.width = logical_rect.width;
+           }
+       }
+      else
+       glyphs->glyphs[i].geometry.width = 0;
+
+      glyphs->glyphs[i].geometry.x_offset = 0;
+      glyphs->glyphs[i].geometry.y_offset = 0;
+    }
+
+  if (buffer->rtl)
+    {
+      /* Swap all glyphs */
+      pango_glyph_string_reverse_range (glyphs, 0, glyphs->num_glyphs);
+    }
+
+  positions = hb_buffer_get_glyph_positions (buffer->buffer);
+  if (buffer->applied_gpos)
+    {
+      gboolean scale = FALSE;
+      double xscale = 1, yscale = 1;
+      PangoFcFontKey *key = _pango_fc_font_get_font_key (buffer->font);
+
+      /* This is a kludge, and dupped in pango_fc_font_kern_glyphs().
+       * Should move the scale factor to PangoFcFont layer. */
+      if (key) {
+       const PangoMatrix *matrix = pango_fc_font_key_get_matrix (key);
+       PangoMatrix identity = PANGO_MATRIX_INIT;
+       if (G_UNLIKELY (matrix && 0 != memcmp (&identity, matrix, 4 * sizeof (double))))
+         {
+           scale = TRUE;
+           pango_matrix_get_font_scale_factors (matrix, &xscale, &yscale);
+           if (xscale) xscale = 1 / xscale;
+           if (yscale) yscale = 1 / yscale;
+         }
+      }
+
+      if (buffer->rtl)
+       apply_gpos_rtl (glyphs, positions, scale, xscale, yscale, buffer->font->is_hinted);
+      else
+       apply_gpos_ltr (glyphs, positions, scale, xscale, yscale, buffer->font->is_hinted);
+    }
+  else
+    {
+      /* FIXME we should only do this if the 'kern' feature was requested */
+      pango_fc_font_kern_glyphs (buffer->font, glyphs);
+    }
+
+  pango_fc_font_unlock_face (buffer->font);
+}
diff --git a/pango/pango-ot-info.c b/pango/pango-ot-info.c
new file mode 100755 (executable)
index 0000000..d6fa0da
--- /dev/null
@@ -0,0 +1,639 @@
+/* Pango
+ * pango-ot-info.c: Store tables for OpenType
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-ot-private.h"
+#include "pango-impl-utils.h"
+#include FT_TRUETYPE_TABLES_H
+
+static void pango_ot_info_class_init (GObjectClass *object_class);
+static void pango_ot_info_finalize   (GObject *object);
+
+static void synthesize_class_def (PangoOTInfo *info);
+
+static GObjectClass *parent_class;
+
+GType
+pango_ot_info_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoOTInfoClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc)pango_ot_info_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoOTInfo),
+       0,              /* n_preallocs */
+       NULL,           /* init */
+       NULL,           /* value_table */
+      };
+
+      object_type = g_type_register_static (G_TYPE_OBJECT,
+                                           I_("PangoOTInfo"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+static void
+pango_ot_info_class_init (GObjectClass *object_class)
+{
+  parent_class = g_type_class_peek_parent (object_class);
+
+  object_class->finalize = pango_ot_info_finalize;
+}
+
+static void
+pango_ot_info_finalize (GObject *object)
+{
+  PangoOTInfo *info = PANGO_OT_INFO (object);
+
+  if (info->hb_face)
+    hb_face_destroy (info->hb_face);
+
+  parent_class->finalize (object);
+}
+
+static void
+pango_ot_info_finalizer (void *object)
+{
+  FT_Face face = object;
+  PangoOTInfo *info = face->generic.data;
+
+  info->face = NULL;
+  g_object_unref (info);
+}
+
+static hb_blob_t *
+_get_table  (hb_tag_t tag, void *user_data)
+{
+  PangoOTInfo *info = (PangoOTInfo *) user_data;
+  FT_Byte *buffer;
+  FT_ULong  length = 0;
+  FT_Error error;
+
+  error = FT_Load_Sfnt_Table (info->face, tag, 0, NULL, &length);
+  if (error)
+    return hb_blob_create_empty ();
+
+  buffer = g_malloc (length);
+  if (buffer == NULL)
+    return hb_blob_create_empty ();
+
+  error = FT_Load_Sfnt_Table (info->face, tag, 0, buffer, &length);
+  if (error)
+    return hb_blob_create_empty ();
+
+  return hb_blob_create ((const char *) buffer, length,
+                        HB_MEMORY_MODE_WRITABLE,
+                        g_free, buffer);
+}
+
+
+/**
+ * pango_ot_info_get:
+ * @face: a <type>FT_Face</type>.
+ *
+ * Returns the #PangoOTInfo structure for the given FreeType font face.
+ *
+ * Return value: the #PangoOTInfo for @face. This object will have
+ * the same lifetime as @face.
+ *
+ * Since: 1.2
+ **/
+PangoOTInfo *
+pango_ot_info_get (FT_Face face)
+{
+  PangoOTInfo *info;
+
+  if (G_LIKELY (face->generic.data && face->generic.finalizer == pango_ot_info_finalizer))
+    return face->generic.data;
+  else
+    {
+      if (face->generic.finalizer)
+        face->generic.finalizer (face->generic.data);
+
+      info = face->generic.data = g_object_new (PANGO_TYPE_OT_INFO, NULL);
+      face->generic.finalizer = pango_ot_info_finalizer;
+
+      info->face = face;
+
+      if (face->stream->base != NULL) {
+       hb_blob_t *blob;
+
+       blob = hb_blob_create ((const char *) face->stream->base,
+                              (unsigned int) face->stream->size,
+                              HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE,
+                              NULL, NULL);
+       info->hb_face = hb_face_create_for_data (blob, face->face_index);
+       hb_blob_destroy (blob);
+      } else {
+       info->hb_face = hb_face_create_for_tables (_get_table, NULL, info);
+      }
+
+
+      hb_face_set_unicode_funcs (info->hb_face, hb_glib_get_unicode_funcs ());
+
+      /* XXX this is such a waste if not SFNT */
+      if (!hb_ot_layout_has_font_glyph_classes (info->hb_face))
+       synthesize_class_def (info);
+    }
+
+  return info;
+}
+
+hb_face_t *
+_pango_ot_info_get_hb_face (PangoOTInfo *info)
+{
+  return info->hb_face;
+}
+
+typedef struct _GlyphInfo GlyphInfo;
+
+struct _GlyphInfo {
+  unsigned short glyph;
+  unsigned short class;
+};
+
+static int
+compare_glyph_info (gconstpointer a,
+                   gconstpointer b)
+{
+  const GlyphInfo *info_a = a;
+  const GlyphInfo *info_b = b;
+
+  return (info_a->glyph < info_b->glyph) ? -1 :
+    (info_a->glyph == info_b->glyph) ? 0 : 1;
+}
+
+/* Make a guess at the appropriate class for a glyph given
+ * a character code that maps to the glyph
+ */
+static gboolean
+get_glyph_class (gunichar        charcode,
+                unsigned short *class)
+{
+  /* For characters mapped into the Arabic Presentation forms, using properties
+   * derived as we apply GSUB substitutions will be more reliable
+   */
+  if ((charcode >= 0xFB50 && charcode <= 0xFDFF) || /* Arabic Presentation Forms-A */
+      (charcode >= 0xFE70 && charcode <= 0XFEFF))   /* Arabic Presentation Forms-B */
+    return FALSE;
+
+  switch ((int) g_unichar_type (charcode))
+    {
+    case G_UNICODE_COMBINING_MARK:
+    case G_UNICODE_ENCLOSING_MARK:
+    case G_UNICODE_NON_SPACING_MARK:
+      *class = 3;              /* Mark glyph (non-spacing combining glyph) */
+      return TRUE;
+    case G_UNICODE_UNASSIGNED:
+    case G_UNICODE_PRIVATE_USE:
+      return FALSE;            /* Unknown, don't assign a class; classes get
+                                * propagated during GSUB application */
+    default:
+      *class = 1;               /* Base glyph (single character, spacing glyph) */
+      return TRUE;
+    }
+}
+
+static gboolean
+set_unicode_charmap (FT_Face face)
+{
+  int charmap;
+
+  for (charmap = 0; charmap < face->num_charmaps; charmap++)
+    if (face->charmaps[charmap]->encoding == ft_encoding_unicode)
+      {
+       FT_Error error = FT_Set_Charmap(face, face->charmaps[charmap]);
+       return error == FT_Err_Ok;
+      }
+
+  return FALSE;
+}
+
+/* Synthesize a GDEF table using the font's charmap and the
+ * Unicode property database. We'll fill in class definitions
+ * for glyphs not in the charmap as we walk through the tables.
+ */
+static void
+synthesize_class_def (PangoOTInfo *info)
+{
+  GArray *glyph_infos;
+  hb_codepoint_t *glyph_indices;
+  unsigned char *classes;
+  gunichar charcode;
+  FT_UInt glyph;
+  unsigned int i, j;
+  FT_CharMap old_charmap;
+
+  old_charmap = info->face->charmap;
+
+  if (!old_charmap || !old_charmap->encoding != ft_encoding_unicode)
+    if (!set_unicode_charmap (info->face))
+      return;
+
+  glyph_infos = g_array_new (FALSE, FALSE, sizeof (GlyphInfo));
+
+  /* Collect all the glyphs in the charmap, and guess
+   * the appropriate classes for them
+   */
+  charcode = FT_Get_First_Char (info->face, &glyph);
+  while (glyph != 0)
+    {
+      GlyphInfo glyph_info;
+
+      if (glyph <= 65535)
+       {
+         glyph_info.glyph = glyph;
+         if (get_glyph_class (charcode, &glyph_info.class))
+           g_array_append_val (glyph_infos, glyph_info);
+       }
+
+      charcode = FT_Get_Next_Char (info->face, charcode, &glyph);
+    }
+
+  /* Sort and remove duplicates
+   */
+  g_array_sort (glyph_infos, compare_glyph_info);
+
+  glyph_indices = g_new (hb_codepoint_t, glyph_infos->len);
+  classes = g_new (unsigned char, glyph_infos->len);
+
+  for (i = 0, j = 0; i < glyph_infos->len; i++)
+    {
+      GlyphInfo *info = &g_array_index (glyph_infos, GlyphInfo, i);
+
+      if (j == 0 || info->glyph != glyph_indices[j - 1])
+       {
+         glyph_indices[j] = info->glyph;
+         classes[j] = info->class;
+
+         j++;
+       }
+    }
+
+  g_array_free (glyph_infos, TRUE);
+
+  hb_ot_layout_build_glyph_classes (info->hb_face, info->face->num_glyphs,
+                                   glyph_indices, classes, j);
+
+  g_free (glyph_indices);
+  g_free (classes);
+
+  if (old_charmap && info->face->charmap != old_charmap)
+    FT_Set_Charmap (info->face, old_charmap);
+}
+
+static hb_tag_t
+get_hb_table_type (PangoOTTableType table_type)
+{
+  switch (table_type) {
+    case PANGO_OT_TABLE_GSUB: return HB_OT_TAG_GSUB;
+    case PANGO_OT_TABLE_GPOS: return HB_OT_TAG_GPOS;
+    default:                  return HB_TAG_NONE;
+  }
+}
+
+/**
+ * pango_ot_info_find_script:
+ * @info: a #PangoOTInfo.
+ * @table_type: the table type to obtain information about.
+ * @script_tag: the tag of the script to find.
+ * @script_index: location to store the index of the script, or %NULL.
+ *
+ * Finds the index of a script.  If not found, tries to find the 'DFLT'
+ * and then 'dflt' scripts and return the index of that in @script_index.
+ * If none of those is found either, %PANGO_OT_NO_SCRIPT is placed in
+ * @script_index.
+ *
+ * All other functions taking an input script_index parameter know
+ * how to handle %PANGO_OT_NO_SCRIPT, so one can ignore the return
+ * value of this function completely and proceed, to enjoy the automatic
+ * fallback to the 'DFLT'/'dflt' script.
+ *
+ * Return value: %TRUE if the script was found.
+ **/
+gboolean
+pango_ot_info_find_script (PangoOTInfo      *info,
+                          PangoOTTableType  table_type,
+                          PangoOTTag        script_tag,
+                          guint            *script_index)
+{
+  hb_tag_t tt = get_hb_table_type (table_type);
+
+  return hb_ot_layout_table_find_script (info->hb_face, tt,
+                                        script_tag,
+                                        script_index);
+}
+
+/**
+ * pango_ot_info_find_language:
+ * @info: a #PangoOTInfo.
+ * @table_type: the table type to obtain information about.
+ * @script_index: the index of the script whose languages are searched.
+ * @language_tag: the tag of the language to find.
+ * @language_index: location to store the index of the language, or %NULL.
+ * @required_feature_index: location to store the required feature index of
+ *    the language, or %NULL.
+ *
+ * Finds the index of a language and its required feature index.
+ * If the language is not found, sets @language_index to
+ * PANGO_OT_DEFAULT_LANGUAGE and the required feature of the default language
+ * system is returned in required_feature_index.  For best compatibility with
+ * some fonts, also searches the language system tag 'dflt' before falling
+ * back to the default language system, but that is transparent to the user.
+ * The user can simply ignore the return value of this function to
+ * automatically fall back to the default language system.
+ *
+ * Return value: %TRUE if the language was found.
+ **/
+gboolean
+pango_ot_info_find_language (PangoOTInfo      *info,
+                            PangoOTTableType  table_type,
+                            guint             script_index,
+                            PangoOTTag        language_tag,
+                            guint            *language_index,
+                            guint            *required_feature_index)
+{
+  gboolean ret;
+  unsigned l_index;
+  hb_tag_t tt = get_hb_table_type (table_type);
+
+  ret = hb_ot_layout_script_find_language (info->hb_face, tt,
+                                          script_index,
+                                          language_tag,
+                                          &l_index);
+  if (language_index) *language_index = l_index;
+
+  hb_ot_layout_language_get_required_feature_index (info->hb_face, tt,
+                                                   script_index,
+                                                   l_index,
+                                                   required_feature_index);
+
+  return ret;
+}
+
+/**
+ * pango_ot_info_find_feature:
+ * @info: a #PangoOTInfo.
+ * @table_type: the table type to obtain information about.
+ * @feature_tag: the tag of the feature to find.
+ * @script_index: the index of the script.
+ * @language_index: the index of the language whose features are searched,
+ *     or %PANGO_OT_DEFAULT_LANGUAGE to use the default language of the script.
+ * @feature_index: location to store the index of the feature, or %NULL.
+ *
+ * Finds the index of a feature.  If the feature is not found, sets
+ * @feature_index to PANGO_OT_NO_FEATURE, which is safe to pass to
+ * pango_ot_ruleset_add_feature() and similar functions.
+ *
+ * In the future, this may set @feature_index to an special value that if used
+ * in pango_ot_ruleset_add_feature() will ask Pango to synthesize the
+ * requested feature based on Unicode properties and data.  However, this
+ * function will still return %FALSE in those cases.  So, users may want to
+ * ignore the return value of this function in certain cases.
+ *
+ * Return value: %TRUE if the feature was found.
+ **/
+gboolean
+pango_ot_info_find_feature  (PangoOTInfo      *info,
+                            PangoOTTableType  table_type,
+                            PangoOTTag        feature_tag,
+                            guint             script_index,
+                            guint             language_index,
+                            guint            *feature_index)
+{
+  hb_tag_t tt = get_hb_table_type (table_type);
+
+  return hb_ot_layout_language_find_feature (info->hb_face, tt,
+                                            script_index,
+                                            language_index,
+                                            feature_tag,
+                                            feature_index);
+}
+
+/**
+ * pango_ot_info_list_scripts:
+ * @info: a #PangoOTInfo.
+ * @table_type: the table type to obtain information about.
+ *
+ * Obtains the list of available scripts.
+ *
+ * Return value: a newly-allocated zero-terminated array containing the tags of the
+ *   available scripts.  Should be freed using g_free().
+ **/
+PangoOTTag *
+pango_ot_info_list_scripts (PangoOTInfo      *info,
+                           PangoOTTableType  table_type)
+{
+  hb_tag_t tt = get_hb_table_type (table_type);
+  PangoOTTag *result;
+  unsigned int count = 0;
+
+  hb_ot_layout_table_get_script_tags (info->hb_face, tt, &count, NULL);
+  result = g_new (PangoOTTag, count + 1);
+  hb_ot_layout_table_get_script_tags (info->hb_face, tt, &count, result);
+  result[count] = 0;
+
+  return result;
+}
+
+/**
+ * pango_ot_info_list_languages:
+ * @info: a #PangoOTInfo.
+ * @table_type: the table type to obtain information about.
+ * @script_index: the index of the script to list languages for.
+ * @language_tag: unused parameter.
+ *
+ * Obtains the list of available languages for a given script.
+ *
+ * Return value: a newly-allocated zero-terminated array containing the tags of the
+ *   available languages.  Should be freed using g_free().
+ **/
+PangoOTTag *
+pango_ot_info_list_languages (PangoOTInfo      *info,
+                             PangoOTTableType  table_type,
+                             guint             script_index,
+                             PangoOTTag        language_tag G_GNUC_UNUSED)
+{
+  hb_tag_t tt = get_hb_table_type (table_type);
+  PangoOTTag *result;
+  unsigned int count = 0;
+
+  hb_ot_layout_script_get_language_tags (info->hb_face, tt, script_index, &count, NULL);
+  result = g_new (PangoOTTag, count + 1);
+  hb_ot_layout_script_get_language_tags (info->hb_face, tt, script_index, &count, result);
+  result[count] = 0;
+
+  return result;
+}
+
+/**
+ * pango_ot_info_list_features:
+ * @info: a #PangoOTInfo.
+ * @table_type: the table type to obtain information about.
+ * @tag: unused parameter.
+ * @script_index: the index of the script to obtain information about.
+ * @language_index: the index of the language to list features for, or
+ *     %PANGO_OT_DEFAULT_LANGUAGE, to list features for the default
+ *     language of the script.
+ *
+ * Obtains the list of features for the given language of the given script.
+ *
+ * Return value: a newly-allocated zero-terminated array containing the tags of the
+ * available features.  Should be freed using g_free().
+ **/
+PangoOTTag *
+pango_ot_info_list_features  (PangoOTInfo      *info,
+                             PangoOTTableType  table_type,
+                             PangoOTTag        tag G_GNUC_UNUSED,
+                             guint             script_index,
+                             guint             language_index)
+{
+  hb_tag_t tt = get_hb_table_type (table_type);
+  PangoOTTag *result;
+  unsigned int count = 0;
+
+  hb_ot_layout_language_get_feature_tags (info->hb_face, tt, script_index, language_index, &count, NULL);
+  result = g_new (PangoOTTag, count + 1);
+  hb_ot_layout_language_get_feature_tags (info->hb_face, tt, script_index, language_index, &count, result);
+  result[count] = 0;
+
+  return result;
+}
+
+void
+_pango_ot_info_substitute  (const PangoOTInfo    *info,
+                           const PangoOTRuleset *ruleset,
+                           PangoOTBuffer        *buffer)
+{
+  unsigned int i;
+
+  for (i = 0; i < ruleset->rules->len; i++)
+    {
+      PangoOTRule *rule = &g_array_index (ruleset->rules, PangoOTRule, i);
+      hb_mask_t mask;
+      unsigned int lookup_count, j;
+      unsigned int lookup_indexes[1000];
+
+      if (rule->table_type != PANGO_OT_TABLE_GSUB)
+       continue;
+
+      mask = rule->property_bit;
+      lookup_count = G_N_ELEMENTS (lookup_indexes);
+      hb_ot_layout_feature_get_lookup_indexes (info->hb_face,
+                                              HB_OT_TAG_GSUB,
+                                              rule->feature_index,
+                                              &lookup_count,
+                                              lookup_indexes);
+
+      lookup_count = MIN (G_N_ELEMENTS (lookup_indexes), lookup_count);
+      for (j = 0; j < lookup_count; j++)
+       hb_ot_layout_substitute_lookup (info->hb_face,
+                                       buffer->buffer,
+                                       lookup_indexes[j],
+                                       rule->property_bit);
+    }
+}
+
+void
+_pango_ot_info_position    (const PangoOTInfo    *info,
+                           const PangoOTRuleset *ruleset,
+                           PangoOTBuffer        *buffer)
+{
+  unsigned int i;
+  gboolean is_hinted;
+  hb_font_t *hb_font;
+
+  hb_buffer_clear_positions (buffer->buffer);
+
+  /* XXX reuse hb_font */
+  hb_font = hb_font_create ();
+  hb_font_set_scale (hb_font,
+                    info->face->size->metrics.x_scale,
+                    info->face->size->metrics.y_scale);
+  is_hinted = buffer->font->is_hinted;
+  hb_font_set_ppem (hb_font,
+                   is_hinted ? info->face->size->metrics.x_ppem : 0,
+                   is_hinted ? info->face->size->metrics.y_ppem : 0);
+
+  for (i = 0; i < ruleset->rules->len; i++)
+    {
+      PangoOTRule *rule = &g_array_index (ruleset->rules, PangoOTRule, i);
+      hb_mask_t mask;
+      unsigned int lookup_count, j;
+      unsigned int lookup_indexes[1000];
+
+      if (rule->table_type != PANGO_OT_TABLE_GPOS)
+       continue;
+
+      mask = rule->property_bit;
+      lookup_count = G_N_ELEMENTS (lookup_indexes);
+      hb_ot_layout_feature_get_lookup_indexes (info->hb_face,
+                                              HB_OT_TAG_GPOS,
+                                              rule->feature_index,
+                                              &lookup_count,
+                                              lookup_indexes);
+
+      lookup_count = MIN (G_N_ELEMENTS (lookup_indexes), lookup_count);
+      for (j = 0; j < lookup_count; j++)
+       hb_ot_layout_position_lookup (info->hb_face, hb_font,
+                                     buffer->buffer,
+                                     lookup_indexes[j],
+                                     rule->property_bit);
+
+      buffer->applied_gpos = TRUE;
+    }
+
+    if (buffer->applied_gpos)
+    {
+      unsigned int i, j;
+      unsigned int len = hb_buffer_get_len (buffer->buffer);
+      hb_glyph_position_t *positions = hb_buffer_get_glyph_positions (buffer->buffer);
+
+      /* First handle all left-to-right connections */
+      for (j = 0; j < len; j++)
+      {
+       if (positions[j].cursive_chain > 0)
+         positions[j].y_pos += positions[j - positions[j].cursive_chain].y_pos;
+      }
+
+      /* Then handle all right-to-left connections */
+      for (i = len; i > 0; i--)
+      {
+       j = i - 1;
+
+       if (positions[j].cursive_chain < 0)
+         positions[j].y_pos += positions[j - positions[j].cursive_chain].y_pos;
+      }
+    }
+
+  hb_font_destroy (hb_font);
+}
diff --git a/pango/pango-ot-private.h b/pango/pango-ot-private.h
new file mode 100755 (executable)
index 0000000..a011b74
--- /dev/null
@@ -0,0 +1,101 @@
+/* Pango
+ * pango-ot-private.h: Implementation details for Pango OpenType code
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_OT_PRIVATE_H__
+#define __PANGO_OT_PRIVATE_H__
+
+#include <glib-object.h>
+
+#include <pango/pango-ot.h>
+#include "opentype/hb-ot.h"
+#include "opentype/hb-glib.h"
+
+G_BEGIN_DECLS
+
+typedef struct _PangoOTInfoClass PangoOTInfoClass;
+
+struct _PangoOTInfo
+{
+  GObject parent_instance;
+
+  guint loaded;
+
+  FT_Face face;
+
+  hb_face_t *hb_face;
+};
+
+struct _PangoOTInfoClass
+{
+  GObjectClass parent_class;
+};
+
+
+typedef struct _PangoOTRule PangoOTRule;
+
+struct _PangoOTRule
+{
+  gulong property_bit;
+  guint  feature_index;
+  guint  table_type : 1;
+};
+
+typedef struct _PangoOTRulesetClass PangoOTRulesetClass;
+
+struct _PangoOTRuleset
+{
+  GObject parent_instance;
+
+  GArray *rules;
+  PangoOTInfo *info;
+
+  /* the index into these arrays is a PangoOTTableType */
+  guint n_features[2];
+  guint script_index[2];
+  guint language_index[2];
+};
+
+struct _PangoOTRulesetClass
+{
+  GObjectClass parent_class;
+};
+
+struct _PangoOTBuffer
+{
+  hb_buffer_t *buffer;
+  gboolean should_free_hb_buffer;
+  PangoFcFont *font;
+  guint rtl : 1;
+  guint zero_width_marks : 1;
+  guint applied_gpos : 1;
+};
+
+hb_face_t *_pango_ot_info_get_hb_face (PangoOTInfo *info);
+void _pango_ot_info_substitute  (const PangoOTInfo    *info,
+                                const PangoOTRuleset *ruleset,
+                                PangoOTBuffer        *buffer);
+void _pango_ot_info_position    (const PangoOTInfo    *info,
+                                const PangoOTRuleset *ruleset,
+                                PangoOTBuffer        *buffer);
+
+G_END_DECLS
+
+#endif /* __PANGO_OT_PRIVATE_H__ */
diff --git a/pango/pango-ot-ruleset.c b/pango/pango-ot-ruleset.c
new file mode 100755 (executable)
index 0000000..b5e2795
--- /dev/null
@@ -0,0 +1,660 @@
+/* Pango
+ * pango-ot-ruleset.c: Shaping using OpenType features
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-ot-private.h"
+#include "pango-impl-utils.h"
+
+static void pango_ot_ruleset_class_init (GObjectClass   *object_class);
+static void pango_ot_ruleset_init       (PangoOTRuleset *ruleset);
+static void pango_ot_ruleset_finalize   (GObject        *object);
+
+static GObjectClass *parent_class;
+
+GType
+pango_ot_ruleset_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoOTRulesetClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc)pango_ot_ruleset_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoOTRuleset),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc)pango_ot_ruleset_init,
+       NULL            /* value_table */
+      };
+
+      object_type = g_type_register_static (G_TYPE_OBJECT,
+                                           I_("PangoOTRuleset"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+static void
+pango_ot_ruleset_class_init (GObjectClass *object_class)
+{
+  parent_class = g_type_class_peek_parent (object_class);
+
+  object_class->finalize = pango_ot_ruleset_finalize;
+}
+
+static void
+pango_ot_ruleset_init (PangoOTRuleset *ruleset)
+{
+  ruleset->rules = g_array_new (FALSE, FALSE, sizeof (PangoOTRule));
+  ruleset->script_index[0]   = PANGO_OT_NO_SCRIPT;
+  ruleset->script_index[1]   = PANGO_OT_NO_SCRIPT;
+  ruleset->language_index[0] = PANGO_OT_DEFAULT_LANGUAGE;
+  ruleset->language_index[1] = PANGO_OT_DEFAULT_LANGUAGE;
+}
+
+static void
+pango_ot_ruleset_finalize (GObject *object)
+{
+  PangoOTRuleset *ruleset = PANGO_OT_RULESET (object);
+
+  g_array_free (ruleset->rules, TRUE);
+  if (ruleset->info)
+    g_object_remove_weak_pointer (G_OBJECT (ruleset->info), (gpointer *)(void *)&ruleset->info);
+
+  parent_class->finalize (object);
+}
+
+/**
+ * pango_ot_ruleset_get_for_description:
+ * @info: a #PangoOTInfo.
+ * @desc: a #PangoOTRulesetDescription.
+ *
+ * Returns a ruleset for the given OpenType info and ruleset
+ * description.  Rulesets are created on demand using
+ * pango_ot_ruleset_new_from_description().
+ * The returned ruleset should not be modified or destroyed.
+ *
+ * The static feature map members of @desc should be alive as
+ * long as @info is.
+ *
+ * Return value: the #PangoOTRuleset for @desc. This object will have
+ * the same lifetime as @info.
+ *
+ * Since: 1.18
+ **/
+G_CONST_RETURN PangoOTRuleset *
+pango_ot_ruleset_get_for_description (PangoOTInfo                     *info,
+                                     const PangoOTRulesetDescription *desc)
+{
+  PangoOTRuleset *ruleset;
+  static GQuark rulesets_quark = 0;
+  GHashTable *rulesets;
+
+  g_return_val_if_fail (info != NULL, NULL);
+  g_return_val_if_fail (desc != NULL, NULL);
+
+  if (!rulesets_quark)
+    rulesets_quark = g_quark_from_string ("pango-info-rulesets");
+
+  rulesets = g_object_get_qdata (G_OBJECT (info), rulesets_quark);
+
+  if (!rulesets)
+    {
+      rulesets = g_hash_table_new_full ((GHashFunc)  pango_ot_ruleset_description_hash,
+                                       (GEqualFunc) pango_ot_ruleset_description_equal,
+                                       (GDestroyNotify) pango_ot_ruleset_description_free,
+                                       (GDestroyNotify) g_object_unref);
+
+      g_object_set_qdata_full (G_OBJECT (info), rulesets_quark, rulesets, (GDestroyNotify) g_hash_table_destroy);
+    }
+
+  ruleset = g_hash_table_lookup (rulesets, desc);
+
+  if (!ruleset)
+    {
+      ruleset = pango_ot_ruleset_new_from_description (info, desc);
+
+      g_hash_table_insert (rulesets,
+                          pango_ot_ruleset_description_copy (desc),
+                          ruleset);
+    }
+
+  return ruleset;
+}
+
+/**
+ * pango_ot_ruleset_new:
+ * @info: a #PangoOTInfo.
+ *
+ * Creates a new #PangoOTRuleset for the given OpenType info.
+ *
+ * Return value: the newly allocated #PangoOTRuleset, which
+ *               should be freed with g_object_unref().
+ **/
+PangoOTRuleset *
+pango_ot_ruleset_new (PangoOTInfo *info)
+{
+  PangoOTRuleset *ruleset;
+
+  g_return_val_if_fail (PANGO_IS_OT_INFO (info), NULL);
+
+  ruleset = g_object_new (PANGO_TYPE_OT_RULESET, NULL);
+
+  ruleset->info = info;
+  g_object_add_weak_pointer (G_OBJECT (ruleset->info), (gpointer *)(void*)&ruleset->info);
+
+  return ruleset;
+}
+
+/**
+ * pango_ot_ruleset_new_for:
+ * @info: a #PangoOTInfo.
+ * @script: a #PangoScript.
+ * @language: a #PangoLanguage.
+ *
+ * Creates a new #PangoOTRuleset for the given OpenType info, script, and
+ * language.
+ *
+ * This function is part of a convenience scheme that highly simplifies
+ * using a #PangoOTRuleset to represent features for a specific pair of script
+ * and language.  So one can use this function passing in the script and
+ * language of interest, and later try to add features to the ruleset by just
+ * specifying the feature name or tag, without having to deal with finding
+ * script, language, or feature indices manually.
+ *
+ * In excess to what pango_ot_ruleset_new() does, this function will:
+ * <itemizedlist>
+ *   <listitem>
+ *   Find the #PangoOTTag script and language tags associated with
+ *   @script and @language using pango_ot_tag_from_script() and
+ *   pango_ot_tag_from_language(),
+ *   </listitem>
+ *   <listitem>
+ *   For each of table types %PANGO_OT_TABLE_GSUB and %PANGO_OT_TABLE_GPOS,
+ *   find the script index of the script tag found and the language
+ *   system index of the language tag found in that script system, using
+ *   pango_ot_info_find_script() and pango_ot_info_find_language(),
+ *   </listitem>
+ *   <listitem>
+ *   For found language-systems, if they have required feature
+ *   index, add that feature to the ruleset using
+ *   pango_ot_ruleset_add_feature(),
+ *   </listitem>
+ *   <listitem>
+ *   Remember found script and language indices for both table types,
+ *   and use them in future pango_ot_ruleset_maybe_add_feature() and
+ *   pango_ot_ruleset_maybe_add_features().
+ *   </listitem>
+ * </itemizedlist>
+ *
+ * Because of the way return values of pango_ot_info_find_script() and
+ * pango_ot_info_find_language() are ignored, this function automatically
+ * finds and uses the 'DFLT' script and the default language-system.
+ *
+ * Return value: the newly allocated #PangoOTRuleset, which
+ *               should be freed with g_object_unref().
+ *
+ * Since: 1.18
+ **/
+PangoOTRuleset *
+pango_ot_ruleset_new_for (PangoOTInfo       *info,
+                         PangoScript        script,
+                         PangoLanguage     *language)
+{
+  PangoOTRuleset *ruleset;
+  PangoOTTag script_tag, language_tag;
+  PangoOTTableType table_type;
+
+  g_return_val_if_fail (PANGO_IS_OT_INFO (info), NULL);
+
+  ruleset = pango_ot_ruleset_new (info);
+
+  script_tag   = pango_ot_tag_from_script (script);
+  language_tag = pango_ot_tag_from_language (language);
+
+  for (table_type = PANGO_OT_TABLE_GSUB; table_type <= PANGO_OT_TABLE_GPOS; table_type++)
+    {
+      guint script_index, language_index, feature_index;
+
+      pango_ot_info_find_script   (ruleset->info, table_type,
+                                  script_tag, &script_index);
+      pango_ot_info_find_language (ruleset->info, table_type, script_index,
+                                  language_tag, &language_index,
+                                  &feature_index);
+
+      ruleset->script_index[table_type] = script_index;
+      ruleset->language_index[table_type] = language_index;
+
+      /* add required feature of the language */
+      pango_ot_ruleset_add_feature (ruleset, table_type,
+                                   feature_index, PANGO_OT_ALL_GLYPHS);
+    }
+
+  return ruleset;
+}
+
+/**
+ * pango_ot_ruleset_new_from_description:
+ * @info: a #PangoOTInfo.
+ * @desc: a #PangoOTRulesetDescription.
+ *
+ * Creates a new #PangoOTRuleset for the given OpenType infor and
+ * matching the given ruleset description.
+ *
+ * This is a convenience function that calls pango_ot_ruleset_new_for() and
+ * adds the static GSUB/GPOS features to the resulting ruleset, followed by
+ * adding other features to both GSUB and GPOS.
+ *
+ * The static feature map members of @desc should be alive as
+ * long as @info is.
+ *
+ * Return value: the newly allocated #PangoOTRuleset, which
+ *               should be freed with g_object_unref().
+ *
+ * Since: 1.18
+ **/
+PangoOTRuleset *
+pango_ot_ruleset_new_from_description (PangoOTInfo                     *info,
+                                      const PangoOTRulesetDescription *desc)
+{
+  PangoOTRuleset *ruleset;
+
+  g_return_val_if_fail (info != NULL, NULL);
+  g_return_val_if_fail (desc != NULL, NULL);
+
+  ruleset = pango_ot_ruleset_new_for (info,
+                                     desc->script,
+                                     desc->language);
+
+  if (desc->n_static_gsub_features)
+    pango_ot_ruleset_maybe_add_features (ruleset, PANGO_OT_TABLE_GSUB,
+                                        desc->static_gsub_features,
+                                        desc->n_static_gsub_features);
+  if (desc->n_static_gpos_features)
+    pango_ot_ruleset_maybe_add_features (ruleset, PANGO_OT_TABLE_GPOS,
+                                        desc->static_gpos_features,
+                                        desc->n_static_gpos_features);
+
+  if (desc->n_other_features)
+    {
+      pango_ot_ruleset_maybe_add_features (ruleset, PANGO_OT_TABLE_GSUB,
+                                          desc->other_features,
+                                          desc->n_other_features);
+      pango_ot_ruleset_maybe_add_features (ruleset, PANGO_OT_TABLE_GPOS,
+                                          desc->other_features,
+                                          desc->n_other_features);
+    }
+
+  return ruleset;
+}
+
+/**
+ * pango_ot_ruleset_add_feature:
+ * @ruleset: a #PangoOTRuleset.
+ * @table_type: the table type to add a feature to.
+ * @feature_index: the index of the feature to add.
+ * @property_bit: the property bit to use for this feature. Used to identify
+ *                the glyphs that this feature should be applied to, or
+ *                %PANGO_OT_ALL_GLYPHS if it should be applied to all glyphs.
+ *
+ * Adds a feature to the ruleset.
+ **/
+void
+pango_ot_ruleset_add_feature (PangoOTRuleset   *ruleset,
+                             PangoOTTableType  table_type,
+                             guint             feature_index,
+                             gulong            property_bit)
+{
+  PangoOTRule tmp_rule;
+
+  g_return_if_fail (PANGO_IS_OT_RULESET (ruleset));
+  g_return_if_fail (ruleset->info != NULL);
+
+  if (feature_index == PANGO_OT_NO_FEATURE)
+    return;
+
+  tmp_rule.table_type = table_type;
+  tmp_rule.feature_index = feature_index;
+  tmp_rule.property_bit = property_bit;
+
+  g_array_append_val (ruleset->rules, tmp_rule);
+
+  ruleset->n_features[table_type]++;
+}
+
+/**
+ * pango_ot_ruleset_maybe_add_feature:
+ * @ruleset: a #PangoOTRuleset.
+ * @table_type: the table type to add a feature to.
+ * @feature_tag: the tag of the feature to add.
+ * @property_bit: the property bit to use for this feature. Used to identify
+ *                the glyphs that this feature should be applied to, or
+ *                %PANGO_OT_ALL_GLYPHS if it should be applied to all glyphs.
+ *
+ * This is a convenience function that first tries to find the feature
+ * using pango_ot_info_find_feature() and the ruleset script and language
+ * passed to pango_ot_ruleset_new_for(),
+ * and if the feature is found, adds it to the ruleset.
+ *
+ * If @ruleset was not created using pango_ot_ruleset_new_for(), this function
+ * does nothing.
+ *
+ * Return value: %TRUE if the feature was found and added to ruleset,
+ *               %FALSE otherwise.
+ *
+ * Since: 1.18
+ **/
+gboolean
+pango_ot_ruleset_maybe_add_feature (PangoOTRuleset          *ruleset,
+                                   PangoOTTableType         table_type,
+                                   PangoOTTag               feature_tag,
+                                   gulong                   property_bit)
+{
+  guint feature_index;
+
+  g_return_val_if_fail (PANGO_IS_OT_RULESET (ruleset), FALSE);
+  g_return_val_if_fail (ruleset->info != NULL, FALSE);
+
+  pango_ot_info_find_feature (ruleset->info, table_type,
+                             feature_tag,
+                             ruleset->script_index[table_type],
+                             ruleset->language_index[table_type],
+                             &feature_index);
+
+  if (feature_index != PANGO_OT_NO_FEATURE)
+    {
+      pango_ot_ruleset_add_feature (ruleset, table_type,
+                                   feature_index, property_bit);
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * pango_ot_ruleset_maybe_add_features:
+ * @ruleset: a #PangoOTRuleset.
+ * @table_type: the table type to add features to.
+ * @features: array of feature name and property bits to add.
+ * @n_features: number of feature records in @features array.
+ *
+ * This is a convenience function that 
+ * for each feature in the feature map array @features
+ * converts the feature name to a #PangoOTTag feature tag using PANGO_OT_TAG_MAKE()
+ * and calls pango_ot_ruleset_maybe_add_feature() on it.
+ *
+ * Return value: The number of features in @features that were found
+ *               and added to @ruleset.
+ *
+ * Since: 1.18
+ **/
+guint
+pango_ot_ruleset_maybe_add_features (PangoOTRuleset          *ruleset,
+                                    PangoOTTableType         table_type,
+                                    const PangoOTFeatureMap *features,
+                                    guint                    n_features)
+{
+  guint i, n_found_features = 0;
+
+  g_return_val_if_fail (PANGO_IS_OT_RULESET (ruleset), 0);
+  g_return_val_if_fail (ruleset->info != NULL, 0);
+
+  for (i = 0; i < n_features; i++)
+    {
+      PangoOTTag feature_tag = PANGO_OT_TAG_MAKE (features[i].feature_name[0],
+                                                 features[i].feature_name[1],
+                                                 features[i].feature_name[2],
+                                                 features[i].feature_name[3]);
+
+      n_found_features += pango_ot_ruleset_maybe_add_feature (ruleset,
+                                                             table_type,
+                                                             feature_tag,
+                                                             features[i].property_bit);
+    }
+
+  return n_found_features;
+}
+
+/**
+ * pango_ot_ruleset_get_feature_count:
+ * @ruleset: a #PangoOTRuleset.
+ * @n_gsub_features: location to store number of GSUB features, or %NULL.
+ * @n_gpos_features: location to store number of GPOS features, or %NULL.
+ *
+ * Gets the number of GSUB and GPOS features in the ruleset.
+ *
+ * Return value: Total number of features in the @ruleset.
+ *
+ * Since: 1.18
+ **/
+guint
+pango_ot_ruleset_get_feature_count (const PangoOTRuleset   *ruleset,
+                                   guint                  *n_gsub_features,
+                                   guint                  *n_gpos_features)
+{
+  g_return_val_if_fail (PANGO_IS_OT_RULESET (ruleset), 0);
+  
+  if (n_gsub_features)
+    *n_gsub_features = ruleset->n_features[PANGO_OT_TABLE_GSUB];
+
+  if (n_gpos_features)
+    *n_gpos_features = ruleset->n_features[PANGO_OT_TABLE_GPOS];
+
+  return ruleset->n_features[PANGO_OT_TABLE_GSUB] + ruleset->n_features[PANGO_OT_TABLE_GPOS];
+}
+
+/**
+ * pango_ot_ruleset_substitute:
+ * @ruleset: a #PangoOTRuleset.
+ * @buffer: a #PangoOTBuffer.
+ *
+ * Performs the OpenType GSUB substitution on @buffer using the features
+ * in @ruleset
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_ruleset_substitute  (const PangoOTRuleset *ruleset,
+                             PangoOTBuffer        *buffer)
+{
+  g_return_if_fail (PANGO_IS_OT_RULESET (ruleset));
+  g_return_if_fail (ruleset->info != NULL);
+
+  _pango_ot_info_substitute (ruleset->info,
+                            ruleset,
+                            buffer);
+}
+
+/**
+ * pango_ot_ruleset_position:
+ * @ruleset: a #PangoOTRuleset.
+ * @buffer: a #PangoOTBuffer.
+ *
+ * Performs the OpenType GPOS positioning on @buffer using the features
+ * in @ruleset
+ *
+ * Since: 1.4
+ **/
+void
+pango_ot_ruleset_position (const PangoOTRuleset *ruleset,
+                          PangoOTBuffer        *buffer)
+{
+  g_return_if_fail (PANGO_IS_OT_RULESET (ruleset));
+  g_return_if_fail (ruleset->info != NULL);
+
+  _pango_ot_info_position   (ruleset->info,
+                            ruleset,
+                            buffer);
+}
+
+
+/* ruleset descriptions */
+
+/**
+ * pango_ot_ruleset_description_hash:
+ * @desc: a ruleset description
+ *
+ * Computes a hash of a #PangoOTRulesetDescription structure suitable
+ * to be used, for example, as an argument to g_hash_table_new().
+ *
+ * Return value: the hash value.
+ *
+ * Since: 1.18
+ **/
+guint
+pango_ot_ruleset_description_hash  (const PangoOTRulesetDescription *desc)
+{
+  guint hash = 0;
+  guint i;
+
+  hash ^= desc->script;
+  hash ^= GPOINTER_TO_UINT (desc->language);
+
+  hash ^= desc->n_static_gsub_features << 8;
+  hash ^= GPOINTER_TO_UINT (desc->static_gsub_features);
+
+  hash ^= desc->n_static_gpos_features << 12;
+  hash ^= GPOINTER_TO_UINT (desc->static_gpos_features);
+
+  hash ^= desc->n_other_features << 16;
+  for (i = 0; i < desc->n_other_features; i++)
+    {
+      hash ^= * (guint32 *) desc->other_features[i].feature_name;
+      hash ^= desc->other_features[i].property_bit;
+    }
+
+  return hash;
+}
+
+/**
+ * pango_ot_ruleset_description_equal:
+ * @desc1: a ruleset description
+ * @desc2: a ruleset description
+ *
+ * Compares two ruleset descriptions for equality.
+ * Two ruleset descriptions are considered equal if the rulesets
+ * they describe are provably identical.  This means that their
+ * script, language, and all feature sets should be equal.  For static feature
+ * sets, the array addresses are compared directly, while for other
+ * features, the list of features is compared one by one.
+ * (Two ruleset descriptions may result in identical rulesets
+ * being created, but still compare %FALSE.)
+ *
+ * Return value: %TRUE if two ruleset descriptions are identical,
+ *               %FALSE otherwise.
+ *
+ * Since: 1.18
+ **/
+gboolean
+pango_ot_ruleset_description_equal (const PangoOTRulesetDescription *desc1,
+                                   const PangoOTRulesetDescription *desc2)
+{
+  guint i;
+
+#undef CHECK
+#define CHECK(x) if (desc1->x != desc2->x) return FALSE;
+#define CHECK_FEATURE_NAME(x) if (*(guint32 *)desc1->x != *(guint32 *)desc2->x) return FALSE
+
+  CHECK (script);
+  CHECK (language);
+
+  CHECK (static_gsub_features);
+  CHECK (n_static_gsub_features);
+  CHECK (static_gpos_features);
+  CHECK (n_static_gpos_features);
+
+  CHECK (n_other_features);
+
+  for (i = 0; i < desc1->n_other_features; i++)
+    {
+      CHECK_FEATURE_NAME (other_features[i].feature_name);
+      CHECK (other_features[i].property_bit);
+    }
+
+#undef CHECK
+
+  return TRUE;
+}
+
+/**
+ * pango_ot_ruleset_description_copy:
+ * @desc: ruleset description to copy
+ *
+ * Creates a copy of @desc, which should be freed with
+ * pango_ot_ruleset_description_free(). Primarily used internally
+ * by pango_ot_ruleset_get_for_description() to cache rulesets for
+ * ruleset descriptions.
+ *
+ * Return value: the newly allocated #PangoOTRulesetDescription, which
+ *               should be freed with pango_ot_ruleset_description_free().
+ *
+ * Since: 1.18
+ **/
+PangoOTRulesetDescription *
+pango_ot_ruleset_description_copy  (const PangoOTRulesetDescription *desc)
+{
+  PangoOTRulesetDescription *copy;
+
+  g_return_val_if_fail (desc != NULL, NULL);
+
+  copy = g_slice_new (PangoOTRulesetDescription);
+
+  *copy = *desc;
+
+  if (desc->n_other_features)
+    {
+      PangoOTFeatureMap *map = g_new (PangoOTFeatureMap, desc->n_other_features);
+      memcpy (map, desc->other_features, desc->n_other_features * sizeof (PangoOTFeatureMap));
+      copy->other_features = map;
+    }
+  else
+    {
+      copy->other_features = NULL;
+    }
+
+  return copy;
+}
+
+/**
+ * pango_ot_ruleset_description_free:
+ * @desc: an allocated #PangoOTRulesetDescription
+ *
+ * Frees a ruleset description allocated by 
+ * pango_ot_ruleset_description_copy().
+ *
+ * Since: 1.18
+ **/
+void
+pango_ot_ruleset_description_free  (PangoOTRulesetDescription *desc)
+{
+  g_return_if_fail (desc != NULL);
+
+  free ((gpointer) desc->other_features);
+
+  g_slice_free (PangoOTRulesetDescription, desc);
+}
diff --git a/pango/pango-ot-tag.c b/pango/pango-ot-tag.c
new file mode 100755 (executable)
index 0000000..756d051
--- /dev/null
@@ -0,0 +1,701 @@
+/* Pango
+ * pango-ot-tag.h:
+ *
+ * Copyright (C) 2007 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-ot.h"
+
+typedef union {
+  char string[4];
+  guint32 integer;
+} Tag;
+
+/*
+ * complete list at:
+ * http://www.microsoft.com/typography/developers/opentype/scripttags.aspx
+ */
+static const Tag ot_scripts[] = {
+  {"DFLT"},    /* PANGO_SCRIPT_COMMON */
+  {"DFLT"},    /* PANGO_SCRIPT_INHERITED */
+  {"arab"},    /* PANGO_SCRIPT_ARABIC */
+  {"armn"},    /* PANGO_SCRIPT_ARMENIAN */
+  {"beng"},    /* PANGO_SCRIPT_BENGALI */
+  {"bopo"},    /* PANGO_SCRIPT_BOPOMOFO */
+  {"cher"},    /* PANGO_SCRIPT_CHEROKEE */
+  {"copt"},    /* PANGO_SCRIPT_COPTIC */
+  {"cyrl"},    /* PANGO_SCRIPT_CYRILLIC */
+  {"dsrt"},    /* PANGO_SCRIPT_DESERET */
+  {"deva"},    /* PANGO_SCRIPT_DEVANAGARI */
+  {"ethi"},    /* PANGO_SCRIPT_ETHIOPIC */
+  {"geor"},    /* PANGO_SCRIPT_GEORGIAN */
+  {"goth"},    /* PANGO_SCRIPT_GOTHIC */
+  {"grek"},    /* PANGO_SCRIPT_GREEK */
+  {"gujr"},    /* PANGO_SCRIPT_GUJARATI */
+  {"guru"},    /* PANGO_SCRIPT_GURMUKHI */
+  {"hani"},    /* PANGO_SCRIPT_HAN */
+  {"hang"},    /* PANGO_SCRIPT_HANGUL */
+  {"hebr"},    /* PANGO_SCRIPT_HEBREW */
+  {"kana"},    /* PANGO_SCRIPT_HIRAGANA */
+  {"knda"},    /* PANGO_SCRIPT_KANNADA */
+  {"kana"},    /* PANGO_SCRIPT_KATAKANA */
+  {"khmr"},    /* PANGO_SCRIPT_KHMER */
+  {"lao "},    /* PANGO_SCRIPT_LAO */
+  {"latn"},    /* PANGO_SCRIPT_LATIN */
+  {"mlym"},    /* PANGO_SCRIPT_MALAYALAM */
+  {"mong"},    /* PANGO_SCRIPT_MONGOLIAN */
+  {"mymr"},    /* PANGO_SCRIPT_MYANMAR */
+  {"ogam"},    /* PANGO_SCRIPT_OGHAM */
+  {"ital"},    /* PANGO_SCRIPT_OLD_ITALIC */
+  {"orya"},    /* PANGO_SCRIPT_ORIYA */
+  {"runr"},    /* PANGO_SCRIPT_RUNIC */
+  {"sinh"},    /* PANGO_SCRIPT_SINHALA */
+  {"syrc"},    /* PANGO_SCRIPT_SYRIAC */
+  {"taml"},    /* PANGO_SCRIPT_TAMIL */
+  {"telu"},    /* PANGO_SCRIPT_TELUGU */
+  {"thaa"},    /* PANGO_SCRIPT_THAANA */
+  {"thai"},    /* PANGO_SCRIPT_THAI */
+  {"tibt"},    /* PANGO_SCRIPT_TIBETAN */
+  {"cans"},    /* PANGO_SCRIPT_CANADIAN_ABORIGINAL */
+  {"yi  "},    /* PANGO_SCRIPT_YI */
+  {"tglg"},    /* PANGO_SCRIPT_TAGALOG */
+  {"hano"},    /* PANGO_SCRIPT_HANUNOO */
+  {"buhd"},    /* PANGO_SCRIPT_BUHID */
+  {"tagb"},    /* PANGO_SCRIPT_TAGBANWA */
+  {"brai"},    /* PANGO_SCRIPT_BRAILLE */
+  {"cprt"},    /* PANGO_SCRIPT_CYPRIOT */
+  {"limb"},    /* PANGO_SCRIPT_LIMBU */
+  {"osma"},    /* PANGO_SCRIPT_OSMANYA */
+  {"shaw"},    /* PANGO_SCRIPT_SHAVIAN */
+  {"linb"},    /* PANGO_SCRIPT_LINEAR_B */
+  {"tale"},    /* PANGO_SCRIPT_TAI_LE */
+  {"ugar"},    /* PANGO_SCRIPT_UGARITIC */
+  {"talu"},    /* PANGO_SCRIPT_NEW_TAI_LUE */
+  {"bugi"},    /* PANGO_SCRIPT_BUGINESE */
+  {"glag"},    /* PANGO_SCRIPT_GLAGOLITIC */
+  {"tfng"},    /* PANGO_SCRIPT_TIFINAGH */
+  {"sylo"},    /* PANGO_SCRIPT_SYLOTI_NAGRI */
+  {"xpeo"},    /* PANGO_SCRIPT_OLD_PERSIAN */
+  {"khar"},    /* PANGO_SCRIPT_KHAROSHTHI */
+  {"DFLT"},    /* PANGO_SCRIPT_UNKNOWN */
+  {"bali"},    /* PANGO_SCRIPT_BALINESE */
+  {"xsux"},    /* PANGO_SCRIPT_CUNEIFORM */
+  {"phnx"},    /* PANGO_SCRIPT_PHOENICIAN */
+  {"phag"},    /* PANGO_SCRIPT_PHAGS_PA */
+  {"nko "}     /* PANGO_SCRIPT_NKO */
+};
+
+/**
+ * pango_ot_tag_from_script:
+ * @script: A #PangoScript
+ *
+ * Finds the OpenType script tag corresponding to @script.
+ *
+ * The %PANGO_SCRIPT_COMMON, %PANGO_SCRIPT_INHERITED, and
+ * %PANGO_SCRIPT_UNKNOWN scripts are mapped to the OpenType
+ * 'DFLT' script tag that is also defined as
+ * %PANGO_OT_TAG_DEFAULT_SCRIPT.
+ *
+ * Note that multiple #PangoScript values may map to the same
+ * OpenType script tag.  In particular, %PANGO_SCRIPT_HIRAGANA
+ * and %PANGO_SCRIPT_KATAKANA both map to the OT tag 'kana'.
+ *
+ * Return value: #PangoOTTag corresponding to @script or
+ * %PANGO_OT_TAG_DEFAULT_SCRIPT if none found.
+ *
+ * Since: 1.18
+ **/
+PangoOTTag
+pango_ot_tag_from_script (PangoScript script)
+{
+  g_return_val_if_fail (script >= 0, PANGO_OT_TAG_DEFAULT_SCRIPT);
+
+  if ((guint)script >= G_N_ELEMENTS (ot_scripts))
+    return PANGO_OT_TAG_DEFAULT_SCRIPT;
+
+  return GUINT32_FROM_BE (ot_scripts[script].integer);
+}
+
+/**
+ * pango_ot_tag_to_script:
+ * @script_tag: A #PangoOTTag OpenType script tag
+ *
+ * Finds the #PangoScript corresponding to @script_tag.
+ *
+ * The 'DFLT' script tag is mapped to %PANGO_SCRIPT_COMMON.
+ *
+ * Note that an OpenType script tag may correspond to multiple
+ * #PangoScript values.  In such cases, the #PangoScript value
+ * with the smallest value is returned.
+ * In particular, %PANGO_SCRIPT_HIRAGANA
+ * and %PANGO_SCRIPT_KATAKANA both map to the OT tag 'kana'.
+ * This function will return %PANGO_SCRIPT_HIRAGANA for
+ * 'kana'.
+ *
+ * Return value: #PangoScript corresponding to @script_tag or
+ * %PANGO_SCRIPT_UNKNOWN if none found.
+ *
+ * Since: 1.18
+ **/
+PangoScript
+pango_ot_tag_to_script (PangoOTTag script_tag)
+{
+  PangoScript i;
+  guint32 be_tag = GUINT32_TO_BE (script_tag);
+
+  for (i = 0; i < (PangoScript) G_N_ELEMENTS (ot_scripts); i++)
+    {
+      guint32 tag = ot_scripts[i].integer;
+
+      if (tag == be_tag)
+        return i;
+    }
+
+  return PANGO_SCRIPT_UNKNOWN;
+}
+
+
+typedef struct {
+  char language[6];
+  Tag tag;
+} LangTag;
+
+/*
+ * complete list at:
+ * http://www.microsoft.com/OpenType/OTSpec/languagetags.htm
+ *
+ * Generated by intersecting the OpenType language tag list from
+ * Draft OpenType 1.5 spec, with with the ISO 639-3 codes from
+ * 2008/08/04, matching on name, and finally adjusted manually.
+ *
+ * Many items still missing.  Those are commented out at the end.
+ * Keep sorted for bsearch.
+ */
+static const LangTag ot_languages[] = {
+  {"aa",       {"AFR "}},      /* Afar */
+  {"ab",       {"ABK "}},      /* Abkhazian */
+  {"abq",      {"ABA "}},      /* Abaza */
+  {"ady",      {"ADY "}},      /* Adyghe */
+  {"af",       {"AFK "}},      /* Afrikaans */
+  {"aiw",      {"ARI "}},      /* Aari */
+  {"am",       {"AMH "}},      /* Amharic */
+  {"ar",       {"ARA "}},      /* Arabic */
+  {"arn",      {"MAP "}},      /* Mapudungun */
+  {"as",       {"ASM "}},      /* Assamese */
+  {"av",       {"AVR "}},      /* Avaric */
+  {"awa",      {"AWA "}},      /* Awadhi */
+  {"ay",       {"AYM "}},      /* Aymara */
+  {"az",       {"AZE "}},      /* Azerbaijani */
+  {"ba",       {"BSH "}},      /* Bashkir */
+  {"bal",      {"BLI "}},      /* Baluchi */
+  {"bcq",      {"BCH "}},      /* Bench */
+  {"bem",      {"BEM "}},      /* Bemba (Zambia) */
+  {"bfq",      {"BAD "}},      /* Badaga */
+  {"bft",      {"BLT "}},      /* Balti */
+  {"bg",       {"BGR "}},      /* Bulgarian */
+  {"bhb",      {"BHI "}},      /* Bhili */
+  {"bho",      {"BHO "}},      /* Bhojpuri */
+  {"bik",      {"BIK "}},      /* Bikol */
+  {"bin",      {"EDO "}},      /* Bini */
+  {"bm",       {"BMB "}},      /* Bambara */
+  {"bn",       {"BEN "}},      /* Bengali */
+  {"bo",       {"TIB "}},      /* Tibetan */
+  {"br",       {"BRE "}},      /* Breton */
+  {"brh",      {"BRH "}},      /* Brahui */
+  {"bs",       {"BOS "}},      /* Bosnian */
+  {"btb",      {"BTI "}},      /* Beti (Cameroon) */
+  {"ca",       {"CAT "}},      /* Catalan */
+  {"ce",       {"CHE "}},      /* Chechen */
+  {"ceb",      {"CEB "}},      /* Cebuano */
+  {"chp",      {"CHP "}},      /* Chipewyan */
+  {"chr",      {"CHR "}},      /* Cherokee */
+  {"cop",      {"COP "}},      /* Coptic */
+  {"cr",       {"CRE "}},      /* Cree */
+  {"crh",      {"CRT "}},      /* Crimean Tatar */
+  {"crm",      {"MCR "}},      /* Moose Cree */
+  {"crx",      {"CRR "}},      /* Carrier */
+  {"cs",       {"CSY "}},      /* Czech */
+  {"cu",       {"CSL "}},      /* Church Slavic */
+  {"cv",       {"CHU "}},      /* Chuvash */
+  {"cwd",      {"DCR "}},      /* Woods Cree */
+  {"cy",       {"WEL "}},      /* Welsh */
+  {"da",       {"DAN "}},      /* Danish */
+  {"dap",      {"NIS "}},      /* Nisi (India) */
+  {"dar",      {"DAR "}},      /* Dargwa */
+  {"de",       {"DEU "}},      /* German */
+  {"din",      {"DNK "}},      /* Dinka */
+  {"dng",      {"DUN "}},      /* Dungan */
+  {"doi",      {"DGR "}},      /* Dogri */
+  {"dsb",      {"LSB "}},      /* Lower Sorbian */
+  {"dv",       {"DIV "}},      /* Dhivehi */
+  {"dz",       {"DZN "}},      /* Dzongkha */
+  {"ee",       {"EWE "}},      /* Ewe */
+  {"efi",      {"EFI "}},      /* Efik */
+  {"el",       {"ELL "}},      /* Modern Greek (1453-) */
+  {"en",       {"ENG "}},      /* English */
+  {"eo",       {"NTO "}},      /* Esperanto */
+  {"eot",      {"BTI "}},      /* Beti (Côte d'Ivoire) */
+  {"es",       {"ESP "}},      /* Spanish */
+  {"et",       {"ETI "}},      /* Estonian */
+  {"eu",       {"EUQ "}},      /* Basque */
+  {"eve",      {"EVN "}},      /* Even */
+  {"evn",      {"EVK "}},      /* Evenki */
+  {"fa",       {"FAR "}},      /* Persian */
+  {"ff",       {"FUL "}},      /* Fulah */
+  {"fi",       {"FIN "}},      /* Finnish */
+  {"fil",      {"PIL "}},      /* Filipino */
+  {"fj",       {"FJI "}},      /* Fijian */
+  {"fo",       {"FOS "}},      /* Faroese */
+  {"fon",      {"FON "}},      /* Fon */
+  {"fr",       {"FRA "}},      /* French */
+  {"fur",      {"FRL "}},      /* Friulian */
+  {"fy",       {"FRI "}},      /* Western Frisian */
+  {"ga",       {"IRI "}},      /* Irish */
+  {"gaa",      {"GAD "}},      /* Ga */
+  {"gag",      {"GAG "}},      /* Gagauz */
+  {"gbm",      {"GAW "}},      /* Garhwali */
+  {"gd",       {"GAE "}},      /* Scottish Gaelic */
+  {"gl",       {"GAL "}},      /* Galician */
+  {"gld",      {"NAN "}},      /* Nanai */
+  {"gn",       {"GUA "}},      /* Guarani */
+  {"gon",      {"GON "}},      /* Gondi */
+  {"grt",      {"GRO "}},      /* Garo */
+  {"gu",       {"GUJ "}},      /* Gujarati */
+  {"guk",      {"GMZ "}},      /* Gumuz */
+  {"gv",       {"MNX "}},      /* Manx Gaelic */
+  {"ha",       {"HAU "}},      /* Hausa */
+  {"har",      {"HRI "}},      /* Harari */
+  {"he",       {"IWR "}},      /* Hebrew */
+  {"hi",       {"HIN "}},      /* Hindi */
+  {"hil",      {"HIL "}},      /* Hiligaynon */
+  {"hoc",      {"HO  "}},      /* Ho */
+  {"hr",       {"HRV "}},      /* Croatian */
+  {"hsb",      {"USB "}},      /* Upper Sorbian */
+  {"ht",       {"HAI "}},      /* Haitian */
+  {"hu",       {"HUN "}},      /* Hungarian */
+  {"hy",       {"HYE "}},      /* Armenian */
+  {"id",       {"IND "}},      /* Indonesian */
+  {"ig",       {"IBO "}},      /* Igbo */
+  {"igb",      {"EBI "}},      /* Ebira */
+  {"inh",      {"ING "}},      /* Ingush */
+  {"is",       {"ISL "}},      /* Icelandic */
+  {"it",       {"ITA "}},      /* Italian */
+  {"iu",       {"INU "}},      /* Inuktitut */
+  {"ja",       {"JAN "}},      /* Japanese */
+  {"jv",       {"JAV "}},      /* Javanese */
+  {"ka",       {"KAT "}},      /* Georgian */
+  {"kam",      {"KMB "}},      /* Kamba (Kenya) */
+  {"kbd",      {"KAB "}},      /* Kabardian */
+  {"kdr",      {"KRM "}},      /* Karaim */
+  {"kdt",      {"KUY "}},      /* Kuy */
+  {"kfr",      {"KAC "}},      /* Kachchi */
+  {"kfy",      {"KMN "}},      /* Kumaoni */
+  {"kha",      {"KSI "}},      /* Khasi */
+  {"khw",      {"KHW "}},      /* Khowar */
+  {"ki",       {"KIK "}},      /* Kikuyu */
+  {"kk",       {"KAZ "}},      /* Kazakh */
+  {"kl",       {"GRN "}},      /* Kalaallisut */
+  {"kln",      {"KAL "}},      /* Kalenjin */
+  {"km",       {"KHM "}},      /* Central Khmer */
+  {"kmw",      {"KMO "}},      /* Komo (Democratic Republic of Congo) */
+  {"kn",       {"KAN "}},      /* Kannada */
+  {"ko",       {"KOR "}},      /* Korean */
+  {"koi",      {"KOP "}},      /* Komi-Permyak */
+  {"kok",      {"KOK "}},      /* Konkani */
+  {"kpe",      {"KPL "}},      /* Kpelle */
+  {"kpv",      {"KOZ "}},      /* Komi-Zyrian */
+  {"kpy",      {"KYK "}},      /* Koryak */
+  {"kqy",      {"KRT "}},      /* Koorete */
+  {"kr",       {"KNR "}},      /* Kanuri */
+  {"kri",      {"KRI "}},      /* Krio */
+  {"krl",      {"KRL "}},      /* Karelian */
+  {"kru",      {"KUU "}},      /* Kurukh */
+  {"ks",       {"KSH "}},      /* Kashmiri */
+  {"ku",       {"KUR "}},      /* Kurdish */
+  {"kum",      {"KUM "}},      /* Kumyk */
+  {"kvd",      {"KUI "}},      /* Kui (Indonesia) */
+  {"kxu",      {"KUI "}},      /* Kui (India) */
+  {"ky",       {"KIR "}},      /* Kirghiz */
+  {"la",       {"LAT "}},      /* Latin */
+  {"lad",      {"JUD "}},      /* Ladino */
+  {"lb",       {"LTZ "}},      /* Luxembourgish */
+  {"lbe",      {"LAK "}},      /* Lak */
+  {"lbj",      {"LDK "}},      /* Ladakhi */
+  {"lif",      {"LMB "}},      /* Limbu */
+  {"lld",      {"LAD "}},      /* Ladin */
+  {"ln",       {"LIN "}},      /* Lingala */
+  {"lo",       {"LAO "}},      /* Lao */
+  {"lt",       {"LTH "}},      /* Lithuanian */
+  {"luo",      {"LUO "}},      /* Luo (Kenya and Tanzania) */
+  {"luw",      {"LUO "}},      /* Luo (Cameroon) */
+  {"lv",       {"LVI "}},      /* Latvian */
+  {"lzz",      {"LAZ "}},      /* Laz */
+  {"mai",      {"MTH "}},      /* Maithili */
+  {"mdc",      {"MLE "}},      /* Male (Papua New Guinea) */
+  {"mdf",      {"MOK "}},      /* Moksha */
+  {"mdy",      {"MLE "}},      /* Male (Ethiopia) */
+  {"men",      {"MDE "}},      /* Mende (Sierra Leone) */
+  {"mg",       {"MLG "}},      /* Malagasy */
+  {"mi",       {"MRI "}},      /* Maori */
+  {"mk",       {"MKD "}},      /* Macedonian */
+  {"ml",       {"MLR "}},      /* Malayalam */
+  {"mn",       {"MNG "}},      /* Mongolian */
+  {"mnc",      {"MCH "}},      /* Manchu */
+  {"mni",      {"MNI "}},      /* Manipuri */
+  {"mnk",      {"MND "}},      /* Mandinka */
+  {"mns",      {"MAN "}},      /* Mansi */
+  {"mnw",      {"MON "}},      /* Mon */
+  {"mo",       {"MOL "}},      /* Moldavian */
+  {"moh",      {"MOH "}},      /* Mohawk */
+  {"mpe",      {"MAJ "}},      /* Majang */
+  {"mr",       {"MAR "}},      /* Marathi */
+  {"ms",       {"MLY "}},      /* Malay */
+  {"mt",       {"MTS "}},      /* Maltese */
+  {"mwr",      {"MAW "}},      /* Marwari */
+  {"my",       {"BRM "}},      /* Burmese */
+  {"mym",      {"MEN "}},      /* Me'en */
+  {"myv",      {"ERZ "}},      /* Erzya */
+  {"nb",       {"NOR "}},      /* Norwegian Bokmål */
+  {"nco",      {"SIB "}},      /* Sibe */
+  {"ne",       {"NEP "}},      /* Nepali */
+  {"new",      {"NEW "}},      /* Newari */
+  {"ng",       {"NDG "}},      /* Ndonga */
+  {"ngl",      {"LMW "}},      /* Lomwe */
+  {"niu",      {"NIU "}},      /* Niuean */
+  {"niv",      {"GIL "}},      /* Gilyak */
+  {"nl",       {"NLD "}},      /* Dutch */
+  {"nn",       {"NYN "}},      /* Norwegian Nynorsk */
+  {"no",       {"NOR "}},      /* Norwegian (deprecated) */
+  {"nog",      {"NOG "}},      /* Nogai */
+  {"nqo",      {"NKO "}},      /* N'Ko */
+  {"nsk",      {"NAS "}},      /* Naskapi */
+  {"ny",       {"CHI "}},      /* Nyanja */
+  {"oc",       {"OCI "}},      /* Occitan (post 1500) */
+  {"oj",       {"OJB "}},      /* Ojibwa */
+  {"om",       {"ORO "}},      /* Oromo */
+  {"or",       {"ORI "}},      /* Oriya */
+  {"os",       {"OSS "}},      /* Ossetian */
+  {"pa",       {"PAN "}},      /* Panjabi */
+  {"pi",       {"PAL "}},      /* Pali */
+  {"pl",       {"PLK "}},      /* Polish */
+  {"plp",      {"PAP "}},      /* Palpa */
+  {"prs",      {"DRI "}},      /* Dari */
+  {"ps",       {"PAS "}},      /* Pushto */
+  {"pt",       {"PTG "}},      /* Portuguese */
+  {"raj",      {"RAJ "}},      /* Rajasthani */
+  {"ria",      {"RIA "}},      /* Riang (India) */
+  {"ril",      {"RIA "}},      /* Riang (Myanmar) */
+  {"ro",       {"ROM "}},      /* Romanian */
+  {"rom",      {"ROY "}},      /* Romany */
+  {"ru",       {"RUS "}},      /* Russian */
+  {"rue",      {"RSY "}},      /* Rusyn */
+  {"sa",       {"SAN "}},      /* Sanskrit */
+  {"sah",      {"YAK "}},      /* Yakut */
+  {"sat",      {"SAT "}},      /* Santali */
+  {"sck",      {"SAD "}},      /* Sadri */
+  {"sd",       {"SND "}},      /* Sindhi */
+  {"se",       {"NSM "}},      /* Northern Sami */
+  {"seh",      {"SNA "}},      /* Sena */
+  {"sel",      {"SEL "}},      /* Selkup */
+  {"sg",       {"SGO "}},      /* Sango */
+  {"shn",      {"SHN "}},      /* Shan */
+  {"si",       {"SNH "}},      /* Sinhala */
+  {"sid",      {"SID "}},      /* Sidamo */
+  {"sjd",      {"KSM "}},      /* Kildin Sami */
+  {"sk",       {"SKY "}},      /* Slovak */
+  {"skr",      {"SRK "}},      /* Seraiki */
+  {"sl",       {"SLV "}},      /* Slovenian */
+  {"sm",       {"SMO "}},      /* Samoan */
+  {"sma",      {"SSM "}},      /* Southern Sami */
+  {"smj",      {"LSM "}},      /* Lule Sami */
+  {"smn",      {"ISM "}},      /* Inari Sami */
+  {"sms",      {"SKS "}},      /* Skolt Sami */
+  {"snk",      {"SNK "}},      /* Soninke */
+  {"so",       {"SML "}},      /* Somali */
+  {"sq",       {"SQI "}},      /* Albanian */
+  {"sr",       {"SRB "}},      /* Serbian */
+  {"srr",      {"SRR "}},      /* Serer */
+  {"suq",      {"SUR "}},      /* Suri */
+  {"sv",       {"SVE "}},      /* Swedish */
+  {"sva",      {"SVA "}},      /* Svan */
+  {"sw",       {"SWK "}},      /* Swahili */
+  {"swb",      {"CMR "}},      /* Comorian */
+  {"syr",      {"SYR "}},      /* Syriac */
+  {"ta",       {"TAM "}},      /* Tamil */
+  {"tcy",      {"TUL "}},      /* Tulu */
+  {"te",       {"TEL "}},      /* Telugu */
+  {"tg",       {"TAJ "}},      /* Tajik */
+  {"th",       {"THA "}},      /* Thai */
+  {"ti",       {"TGY "}},      /* Tigrinya */
+  {"tig",      {"TGR "}},      /* Tigre */
+  {"tk",       {"TKM "}},      /* Turkmen */
+  {"tn",       {"TNA "}},      /* Tswana */
+  {"tnz",      {"TNG "}},      /* Tonga (Thailand) */
+  {"to",       {"TNG "}},      /* Tonga (Tonga Islands) */
+  {"tog",      {"TNG "}},      /* Tonga (Nyasa) */
+  {"toi",      {"TNG "}},      /* Tonga (Zambia) */
+  {"tr",       {"TRK "}},      /* Turkish */
+  {"ts",       {"TSG "}},      /* Tsonga */
+  {"tt",       {"TAT "}},      /* Tatar */
+  {"tw",       {"TWI "}},      /* Twi */
+  {"ty",       {"THT "}},      /* Tahitian */
+  {"udm",      {"UDM "}},      /* Udmurt */
+  {"ug",       {"UYG "}},      /* Uighur */
+  {"uk",       {"UKR "}},      /* Ukrainian */
+  {"unr",      {"MUN "}},      /* Mundari */
+  {"ur",       {"URD "}},      /* Urdu */
+  {"uz",       {"UZB "}},      /* Uzbek */
+  {"ve",       {"VEN "}},      /* Venda */
+  {"vi",       {"VIT "}},      /* Vietnamese */
+  {"wbm",      {"WA  "}},      /* Wa */
+  {"wbr",      {"WAG "}},      /* Wagdi */
+  {"wo",       {"WLF "}},      /* Wolof */
+  {"xal",      {"KLM "}},      /* Kalmyk */
+  {"xh",       {"XHS "}},      /* Xhosa */
+  {"xom",      {"KMO "}},      /* Komo (Sudan) */
+  {"xsl",      {"SSL "}},      /* South Slavey */
+  {"yi",       {"JII "}},      /* Yiddish */
+  {"yo",       {"YBA "}},      /* Yoruba */
+  {"yso",      {"NIS "}},      /* Nisi (China) */
+  {"zh-cn",    {"ZHS "}},      /* Chinese (China) */
+  {"zh-hk",    {"ZHH "}},      /* Chinese (Hong Kong) */
+  {"zh-mo",    {"ZHT "}},      /* Chinese (Macao) */
+  {"zh-sg",    {"ZHS "}},      /* Chinese (Singapore) */
+  {"zh-tw",    {"ZHT "}},      /* Chinese (Taiwan) */
+  {"zne",      {"ZND "}},      /* Zande */
+  {"zu",       {"ZUL "}}       /* Zulu */
+
+  /* I couldn't find the language id for these */
+
+/*{"??",       {"AGW "}},*/    /* Agaw */
+/*{"??",       {"ALS "}},*/    /* Alsatian */
+/*{"??",       {"ALT "}},*/    /* Altai */
+/*{"??",       {"ARK "}},*/    /* Arakanese */
+/*{"??",       {"ATH "}},*/    /* Athapaskan */
+/*{"??",       {"BAG "}},*/    /* Baghelkhandi */
+/*{"??",       {"BAL "}},*/    /* Balkar */
+/*{"??",       {"BAU "}},*/    /* Baule */
+/*{"??",       {"BBR "}},*/    /* Berber */
+/*{"??",       {"BCR "}},*/    /* Bible Cree */
+/*{"??",       {"BEL "}},*/    /* Belarussian */
+/*{"??",       {"BIL "}},*/    /* Bilen */
+/*{"??",       {"BKF "}},*/    /* Blackfoot */
+/*{"??",       {"BLN "}},*/    /* Balante */
+/*{"??",       {"BML "}},*/    /* Bamileke */
+/*{"??",       {"BRI "}},*/    /* Braj Bhasha */
+/*{"??",       {"CHG "}},*/    /* Chaha Gurage */
+/*{"??",       {"CHH "}},*/    /* Chattisgarhi */
+/*{"??",       {"CHK "}},*/    /* Chukchi */
+/*{"??",       {"DJR "}},*/    /* Djerma */
+/*{"??",       {"DNG "}},*/    /* Dangme */
+/*{"??",       {"ECR "}},*/    /* Eastern Cree */
+/*{"??",       {"FAN "}},*/    /* French Antillean */
+/*{"??",       {"FLE "}},*/    /* Flemish */
+/*{"??",       {"FNE "}},*/    /* Forest Nenets */
+/*{"??",       {"FTA "}},*/    /* Futa */
+/*{"??",       {"GAR "}},*/    /* Garshuni */
+/*{"??",       {"GEZ "}},*/    /* Ge'ez */
+/*{"??",       {"HAL "}},*/    /* Halam */
+/*{"??",       {"HAR "}},*/    /* Harauti */
+/*{"??",       {"HAW "}},*/    /* Hawaiin */
+/*{"??",       {"HBN "}},*/    /* Hammer-Banna */
+/*{"??",       {"HMA "}},*/    /* High Mari */
+/*{"??",       {"HND "}},*/    /* Hindko */
+/*{"??",       {"IJO "}},*/    /* Ijo */
+/*{"??",       {"ILO "}},*/    /* Ilokano */
+/*{"??",       {"IRT "}},*/    /* Irish Traditional */
+/*{"??",       {"JUL "}},*/    /* Jula */
+/*{"??",       {"KAR "}},*/    /* Karachay */
+/*{"??",       {"KEB "}},*/    /* Kebena */
+/*{"??",       {"KGE "}},*/    /* Khutsuri Georgian */
+/*{"??",       {"KHA "}},*/    /* Khakass */
+/*{"??",       {"KHK "}},*/    /* Khanty-Kazim */
+/*{"??",       {"KHS "}},*/    /* Khanty-Shurishkar */
+/*{"??",       {"KHV "}},*/    /* Khanty-Vakhi */
+/*{"??",       {"KIS "}},*/    /* Kisii */
+/*{"??",       {"KKN "}},*/    /* Kokni */
+/*{"??",       {"KMS "}},*/    /* Komso */
+/*{"??",       {"KOD "}},*/    /* Kodagu */
+/*{"??",       {"KOH "}},*/    /* Korean Old Hangul */
+/*{"??",       {"KON "}},*/    /* Kikongo */
+/*{"??",       {"KRK "}},*/    /* Karakalpak */
+/*{"??",       {"KRN "}},*/    /* Karen */
+/*{"??",       {"KUL "}},*/    /* Kulvi */
+/*{"??",       {"LAH "}},*/    /* Lahuli */
+/*{"??",       {"LAM "}},*/    /* Lambani */
+/*{"??",       {"LCR "}},*/    /* L-Cree */
+/*{"??",       {"LEZ "}},*/    /* Lezgi */
+/*{"??",       {"LMA "}},*/    /* Low Mari */
+/*{"??",       {"LUB "}},*/    /* Luba */
+/*{"??",       {"LUG "}},*/    /* Luganda */
+/*{"??",       {"LUH "}},*/    /* Luhya */
+/*{"??",       {"MAK "}},*/    /* Makua */
+/*{"??",       {"MAL "}},*/    /* Malayalam Traditional */
+/*{"??",       {"MBN "}},*/    /* Mbundu */
+/*{"??",       {"MIZ "}},*/    /* Mizo */
+/*{"??",       {"MLN "}},*/    /* Malinke */
+/*{"??",       {"MNK "}},*/    /* Maninka */
+/*{"??",       {"MOR "}},*/    /* Moroccan */
+/*{"??",       {"NAG "}},*/    /* Naga-Assamese */
+/*{"??",       {"NCR "}},*/    /* N-Cree */
+/*{"??",       {"NDB "}},*/    /* Ndebele */
+/*{"??",       {"NGR "}},*/    /* Nagari */
+/*{"??",       {"NHC "}},*/    /* Norway House Cree */
+/*{"??",       {"NKL "}},*/    /* Nkole */
+/*{"??",       {"NTA "}},*/    /* Northern Tai */
+/*{"??",       {"OCR "}},*/    /* Oji-Cree */
+/*{"??",       {"PAA "}},*/    /* Palestinian Aramaic */
+/*{"??",       {"PGR "}},*/    /* Polytonic Greek */
+/*{"??",       {"PLG "}},*/    /* Palaung */
+/*{"??",       {"QIN "}},*/    /* Chin */
+/*{"??",       {"RBU "}},*/    /* Russian Buriat */
+/*{"??",       {"RCR "}},*/    /* R-Cree */
+/*{"??",       {"RMS "}},*/    /* Rhaeto-Romanic */
+/*{"??",       {"RUA "}},*/    /* Ruanda */
+/*{"??",       {"SAY "}},*/    /* Sayisi */
+/*{"??",       {"SEK "}},*/    /* Sekota */
+/*{"??",       {"SIG "}},*/    /* Silte Gurage */
+/*{"??",       {"SLA "}},*/    /* Slavey */
+/*{"??",       {"SOG "}},*/    /* Sodo Gurage */
+/*{"??",       {"SOT "}},*/    /* Sotho */
+/*{"??",       {"SWA "}},*/    /* Swadaya Aramaic */
+/*{"??",       {"SWZ "}},*/    /* Swazi */
+/*{"??",       {"SXT "}},*/    /* Sutu */
+/*{"??",       {"TAB "}},*/    /* Tabasaran */
+/*{"??",       {"TCR "}},*/    /* TH-Cree */
+/*{"??",       {"TGN "}},*/    /* Tongan */
+/*{"??",       {"TMN "}},*/    /* Temne */
+/*{"??",       {"TNE "}},*/    /* Tundra Nenets */
+/*{"??",       {"TOD "}},*/    /* Todo */
+/*{"??",       {"TUA "}},*/    /* Turoyo Aramaic */
+/*{"??",       {"TUV "}},*/    /* Tuvin */
+/*{"??",       {"WCR "}},*/    /* West-Cree */
+/*{"??",       {"XBD "}},*/    /* Tai Lue */
+/*{"??",       {"YCR "}},*/    /* Y-Cree */
+/*{"??",       {"YIC "}},*/    /* Yi Classic */
+/*{"??",       {"YIM "}},*/    /* Yi Modern */
+/*{"??",       {"ZHP "}},*/    /* Chinese Phonetic */
+};
+
+static int
+lang_compare_first_component (gconstpointer pa,
+                             gconstpointer pb)
+{
+  const char *a = pa, *b = pb;
+  unsigned int da, db;
+  const char *p;
+
+  p = strstr (a, "-");
+  da = p ? (unsigned int) (p - a) : strlen (a);
+
+  p = strstr (b, "-");
+  db = p ? (unsigned int) (p - b) : strlen (b);
+   
+  return strncmp (a, b, MAX (da, db));
+}
+
+/**
+ * pango_ot_tag_from_language:
+ * @language: A #PangoLanguage, or %NULL
+ *
+ * Finds the OpenType language-system tag best describing @language.
+ *
+ * Return value: #PangoOTTag best matching @language or
+ * %PANGO_OT_TAG_DEFAULT_LANGUAGE if none found or if @language
+ * is %NULL.
+ *
+ * Since: 1.18
+ **/
+PangoOTTag
+pango_ot_tag_from_language (PangoLanguage *language)
+{
+  const char *lang_str;
+  LangTag *lang_tag;
+
+  if (language == NULL)
+    return PANGO_OT_TAG_DEFAULT_LANGUAGE;
+
+  lang_str = pango_language_to_string (language);
+
+  /* find a language matching in the first component */
+  lang_tag = bsearch (lang_str, ot_languages,
+                     G_N_ELEMENTS (ot_languages), sizeof (LangTag),
+                     lang_compare_first_component);
+
+  /* we now need to find the best language matching */
+  if (lang_tag)
+    {
+      gboolean found = FALSE;
+
+      /* go to the final one matching in the first component */
+      while (lang_tag + 1 < ot_languages + G_N_ELEMENTS (ot_languages) &&
+            lang_compare_first_component (lang_str, lang_tag + 1) == 0)
+        lang_tag++;
+
+      /* go back, find which one matches completely */
+      while (lang_tag >= ot_languages &&
+            lang_compare_first_component (lang_str, lang_tag) == 0)
+        {
+         if (pango_language_matches (language, lang_tag->language))
+           {
+             found = TRUE;
+             break;
+           }
+
+          lang_tag--;
+       }
+
+      if (!found)
+        lang_tag = NULL;
+    }
+
+  if (lang_tag)
+    return GUINT32_FROM_BE (lang_tag->tag.integer);
+
+  return PANGO_OT_TAG_DEFAULT_LANGUAGE;
+}
+
+/**
+ * pango_ot_tag_to_language:
+ * @language_tag: A #PangoOTTag OpenType language-system tag
+ *
+ * Finds a #PangoLanguage corresponding to @language_tag.
+ *
+ * Return value: #PangoLanguage best matching @language_tag or
+ * #PangoLanguage corresponding to the string "xx" if none found.
+ *
+ * Since: 1.18
+ **/
+PangoLanguage *
+pango_ot_tag_to_language (PangoOTTag language_tag)
+{
+  int i;
+  guint32 be_tag = GUINT32_TO_BE (language_tag);
+
+  for (i = 0; i < (int) G_N_ELEMENTS (ot_languages); i++)
+    {
+      guint32 tag = ot_languages[i].tag.integer;
+
+      if (tag == be_tag)
+        return pango_language_from_string (ot_languages[i].language);
+    }
+
+  return pango_language_from_string ("xx");
+}
diff --git a/pango/pango-ot.h b/pango/pango-ot.h
new file mode 100755 (executable)
index 0000000..6a436fc
--- /dev/null
@@ -0,0 +1,197 @@
+/* Pango
+ * pango-ot.h:
+ *
+ * Copyright (C) 2000,2007 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_OT_H__
+#define __PANGO_OT_H__
+
+#include <pango/pangofc-font.h>
+#include <pango/pango-glyph.h>
+#include <pango/pango-font.h>
+#include <pango/pango-script.h>
+#include <pango/pango-language.h>
+
+G_BEGIN_DECLS
+
+#ifdef PANGO_ENABLE_ENGINE
+
+typedef guint32 PangoOTTag;
+
+#define PANGO_OT_TAG_MAKE(c1,c2,c3,c4)         ((PangoOTTag) FT_MAKE_TAG (c1, c2, c3, c4))
+#define PANGO_OT_TAG_MAKE_FROM_STRING(s)       (PANGO_OT_TAG_MAKE(((const char *) s)[0], \
+                                                                  ((const char *) s)[1], \
+                                                                  ((const char *) s)[2], \
+                                                                  ((const char *) s)[3]))
+
+typedef struct _PangoOTInfo       PangoOTInfo;
+typedef struct _PangoOTBuffer     PangoOTBuffer;
+typedef struct _PangoOTGlyph      PangoOTGlyph;
+typedef struct _PangoOTRuleset    PangoOTRuleset;
+typedef struct _PangoOTFeatureMap PangoOTFeatureMap;
+typedef struct _PangoOTRulesetDescription PangoOTRulesetDescription;
+
+typedef enum
+{
+  PANGO_OT_TABLE_GSUB,
+  PANGO_OT_TABLE_GPOS
+} PangoOTTableType;
+
+#define PANGO_OT_ALL_GLYPHS                    ((guint) 0xFFFF)
+#define PANGO_OT_NO_FEATURE                    ((guint) 0xFFFF)
+#define PANGO_OT_NO_SCRIPT                     ((guint) 0xFFFF)
+#define PANGO_OT_DEFAULT_LANGUAGE              ((guint) 0xFFFF)
+
+#define PANGO_OT_TAG_DEFAULT_SCRIPT            PANGO_OT_TAG_MAKE ('D', 'F', 'L', 'T')
+#define PANGO_OT_TAG_DEFAULT_LANGUAGE          PANGO_OT_TAG_MAKE ('d', 'f', 'l', 't')
+
+/* Note that this must match hb_glyph_info_t */
+struct _PangoOTGlyph
+{
+  guint32  glyph;
+  guint    properties;
+  guint    cluster;
+  gushort  component;
+  gushort  ligID;
+
+  guint    internal;
+};
+
+struct _PangoOTFeatureMap
+{
+  char     feature_name[5];
+  gulong   property_bit;
+};
+
+struct _PangoOTRulesetDescription {
+  PangoScript               script;
+  PangoLanguage            *language;
+  const PangoOTFeatureMap  *static_gsub_features;
+  guint                   n_static_gsub_features;
+  const PangoOTFeatureMap  *static_gpos_features;
+  guint                   n_static_gpos_features;
+  const PangoOTFeatureMap  *other_features;
+  guint                   n_other_features;
+};
+
+
+#define PANGO_TYPE_OT_INFO              (pango_ot_info_get_type ())
+#define PANGO_OT_INFO(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_INFO, PangoOTInfo))
+#define PANGO_IS_OT_INFO(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_INFO))
+GType pango_ot_info_get_type (void) G_GNUC_CONST;
+
+#define PANGO_TYPE_OT_RULESET           (pango_ot_ruleset_get_type ())
+#define PANGO_OT_RULESET(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_RULESET, PangoOTRuleset))
+#define PANGO_IS_OT_RULESET(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_RULESET))
+GType pango_ot_ruleset_get_type (void) G_GNUC_CONST;
+
+
+PangoOTInfo *pango_ot_info_get (FT_Face face);
+
+gboolean pango_ot_info_find_script   (PangoOTInfo      *info,
+                                     PangoOTTableType  table_type,
+                                     PangoOTTag        script_tag,
+                                     guint            *script_index);
+gboolean pango_ot_info_find_language (PangoOTInfo      *info,
+                                     PangoOTTableType  table_type,
+                                     guint             script_index,
+                                     PangoOTTag        language_tag,
+                                     guint            *language_index,
+                                     guint            *required_feature_index);
+gboolean pango_ot_info_find_feature  (PangoOTInfo      *info,
+                                     PangoOTTableType  table_type,
+                                     PangoOTTag        feature_tag,
+                                     guint             script_index,
+                                     guint             language_index,
+                                     guint            *feature_index);
+
+PangoOTTag *pango_ot_info_list_scripts   (PangoOTInfo      *info,
+                                         PangoOTTableType  table_type);
+PangoOTTag *pango_ot_info_list_languages (PangoOTInfo      *info,
+                                         PangoOTTableType  table_type,
+                                         guint             script_index,
+                                         PangoOTTag        language_tag);
+PangoOTTag *pango_ot_info_list_features  (PangoOTInfo      *info,
+                                         PangoOTTableType  table_type,
+                                         PangoOTTag        tag,
+                                         guint             script_index,
+                                         guint             language_index);
+
+PangoOTBuffer *pango_ot_buffer_new        (PangoFcFont       *font);
+void           pango_ot_buffer_destroy    (PangoOTBuffer     *buffer);
+void           pango_ot_buffer_clear      (PangoOTBuffer     *buffer);
+void           pango_ot_buffer_set_rtl    (PangoOTBuffer     *buffer,
+                                          gboolean           rtl);
+void           pango_ot_buffer_add_glyph  (PangoOTBuffer     *buffer,
+                                          guint              glyph,
+                                          guint              properties,
+                                          guint              cluster);
+void           pango_ot_buffer_get_glyphs (const PangoOTBuffer  *buffer,
+                                          PangoOTGlyph        **glyphs,
+                                          int                  *n_glyphs);
+void           pango_ot_buffer_output     (const PangoOTBuffer  *buffer,
+                                          PangoGlyphString     *glyphs);
+
+void           pango_ot_buffer_set_zero_width_marks (PangoOTBuffer     *buffer,
+                                                    gboolean           zero_width_marks);
+
+const PangoOTRuleset *pango_ot_ruleset_get_for_description (PangoOTInfo                     *info,
+                                                           const PangoOTRulesetDescription *desc);
+PangoOTRuleset *pango_ot_ruleset_new (PangoOTInfo       *info);
+PangoOTRuleset *pango_ot_ruleset_new_for (PangoOTInfo       *info,
+                                         PangoScript        script,
+                                         PangoLanguage     *language);
+PangoOTRuleset *pango_ot_ruleset_new_from_description (PangoOTInfo                     *info,
+                                                      const PangoOTRulesetDescription *desc);
+void            pango_ot_ruleset_add_feature (PangoOTRuleset   *ruleset,
+                                             PangoOTTableType  table_type,
+                                             guint             feature_index,
+                                             gulong            property_bit);
+gboolean        pango_ot_ruleset_maybe_add_feature (PangoOTRuleset   *ruleset,
+                                                   PangoOTTableType  table_type,
+                                                   PangoOTTag        feature_tag,
+                                                   gulong            property_bit);
+guint           pango_ot_ruleset_maybe_add_features (PangoOTRuleset          *ruleset,
+                                                    PangoOTTableType         table_type,
+                                                    const PangoOTFeatureMap *features,
+                                                    guint                    n_features);
+guint           pango_ot_ruleset_get_feature_count (const PangoOTRuleset   *ruleset,
+                                                   guint                  *n_gsub_features,
+                                                   guint                  *n_gpos_features);
+void            pango_ot_ruleset_substitute  (const PangoOTRuleset   *ruleset,
+                                             PangoOTBuffer          *buffer);
+void            pango_ot_ruleset_position    (const PangoOTRuleset   *ruleset,
+                                             PangoOTBuffer          *buffer);
+PangoScript     pango_ot_tag_to_script     (PangoOTTag     script_tag) G_GNUC_CONST;
+PangoOTTag      pango_ot_tag_from_script   (PangoScript    script) G_GNUC_CONST;
+PangoLanguage  *pango_ot_tag_to_language   (PangoOTTag     language_tag) G_GNUC_CONST;
+PangoOTTag      pango_ot_tag_from_language (PangoLanguage *language) G_GNUC_CONST;
+
+guint           pango_ot_ruleset_description_hash  (const PangoOTRulesetDescription *desc) G_GNUC_PURE;
+gboolean        pango_ot_ruleset_description_equal (const PangoOTRulesetDescription *desc1,
+                                                   const PangoOTRulesetDescription *desc2) G_GNUC_PURE;
+PangoOTRulesetDescription *pango_ot_ruleset_description_copy  (const PangoOTRulesetDescription *desc);
+void            pango_ot_ruleset_description_free  (PangoOTRulesetDescription       *desc);
+
+
+#endif /* PANGO_ENABLE_ENGINE */
+
+G_END_DECLS
+
+#endif /* __PANGO_OT_H__ */
diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c
new file mode 100755 (executable)
index 0000000..db75446
--- /dev/null
@@ -0,0 +1,1408 @@
+/* Pango
+ * pango-renderer.h: Base class for rendering
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+
+#include "pango-renderer.h"
+#include "pango-impl-utils.h"
+
+#define N_RENDER_PARTS 4
+
+#define PANGO_IS_RENDERER_FAST(renderer) (renderer != NULL)
+#define IS_VALID_PART(part) ((guint)part < N_RENDER_PARTS)
+
+typedef struct _LineState LineState;
+typedef struct _Point Point;
+
+struct _Point
+{
+  double x, y;
+};
+
+struct _LineState
+{
+  PangoUnderline underline;
+  PangoRectangle underline_rect;
+
+  gboolean strikethrough;
+  PangoRectangle strikethrough_rect;
+
+  int logical_rect_end;
+};
+
+struct _PangoRendererPrivate
+{
+  PangoColor color[N_RENDER_PARTS];
+  gboolean color_set[N_RENDER_PARTS];
+
+  PangoLayoutLine *line;
+  LineState *line_state;
+};
+
+static void pango_renderer_finalize                     (GObject          *gobject);
+static void pango_renderer_default_draw_glyphs          (PangoRenderer    *renderer,
+                                                        PangoFont        *font,
+                                                        PangoGlyphString *glyphs,
+                                                        int               x,
+                                                        int               y);
+static void pango_renderer_default_draw_glyph_item      (PangoRenderer    *renderer,
+                                                        const char       *text,
+                                                        PangoGlyphItem   *glyph_item,
+                                                        int               x,
+                                                        int               y);
+static void pango_renderer_default_draw_rectangle       (PangoRenderer    *renderer,
+                                                        PangoRenderPart   part,
+                                                        int               x,
+                                                        int               y,
+                                                        int               width,
+                                                        int               height);
+static void pango_renderer_default_draw_error_underline (PangoRenderer    *renderer,
+                                                        int               x,
+                                                        int               y,
+                                                        int               width,
+                                                        int               height);
+static void pango_renderer_default_prepare_run          (PangoRenderer    *renderer,
+                                                        PangoLayoutRun   *run);
+
+static void pango_renderer_prepare_run (PangoRenderer  *renderer,
+                                       PangoLayoutRun *run);
+
+static void
+to_device (PangoMatrix *matrix,
+          double       x,
+          double       y,
+          Point       *result)
+{
+  if (matrix)
+    {
+      result->x = (x * matrix->xx + y * matrix->xy) / PANGO_SCALE + matrix->x0;
+      result->y = (x * matrix->yx + y * matrix->yy) / PANGO_SCALE + matrix->y0;
+    }
+  else
+    {
+      result->x = x / PANGO_SCALE;
+      result->y = y / PANGO_SCALE;
+    }
+}
+
+G_DEFINE_ABSTRACT_TYPE (PangoRenderer, pango_renderer, G_TYPE_OBJECT)
+
+static GObjectClass *parent_class;
+
+static void
+pango_renderer_class_init (PangoRendererClass *klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
+
+  klass->draw_glyphs = pango_renderer_default_draw_glyphs;
+  klass->draw_glyph_item = pango_renderer_default_draw_glyph_item;
+  klass->draw_rectangle = pango_renderer_default_draw_rectangle;
+  klass->draw_error_underline = pango_renderer_default_draw_error_underline;
+  klass->prepare_run = pango_renderer_default_prepare_run;
+
+  gobject_class->finalize = pango_renderer_finalize;
+
+  g_type_class_add_private (gobject_class, sizeof (PangoRendererPrivate));
+}
+
+static void
+pango_renderer_init (PangoRenderer *renderer)
+{
+  renderer->priv = G_TYPE_INSTANCE_GET_PRIVATE (renderer,
+                                               PANGO_TYPE_RENDERER,
+                                               PangoRendererPrivate);
+  renderer->matrix = NULL;
+}
+
+static void
+pango_renderer_finalize (GObject *gobject)
+{
+  PangoRenderer *renderer = PANGO_RENDERER (gobject);
+
+  if (renderer->matrix)
+    pango_matrix_free (renderer->matrix);
+
+  parent_class->finalize (gobject);
+}
+
+/**
+ * pango_renderer_draw_layout:
+ * @renderer: a #PangoRenderer
+ * @layout: a #PangoLayout
+ * @x: X position of left edge of baseline, in user space coordinates
+ *   in Pango units.
+ * @y: Y position of left edge of baseline, in user space coordinates
+ *    in Pango units.
+ *
+ * Draws @layout with the specified #PangoRenderer.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_layout (PangoRenderer    *renderer,
+                           PangoLayout      *layout,
+                           int               x,
+                           int               y)
+{
+  PangoLayoutIter *iter;
+
+  g_return_if_fail (PANGO_IS_RENDERER (renderer));
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  /* We only change the matrix if the renderer isn't already
+   * active.
+   */
+  if (!renderer->active_count)
+    {
+      PangoContext *context = pango_layout_get_context (layout);
+      pango_renderer_set_matrix (renderer,
+                                pango_context_get_matrix (context));
+    }
+
+  pango_renderer_activate (renderer);
+
+  iter = pango_layout_get_iter (layout);
+
+  do
+    {
+      PangoRectangle   logical_rect;
+      PangoLayoutLine *line;
+      int              baseline;
+
+      line = pango_layout_iter_get_line_readonly (iter);
+
+      pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
+      baseline = pango_layout_iter_get_baseline (iter);
+
+      pango_renderer_draw_layout_line (renderer,
+                                      line,
+                                      x + logical_rect.x,
+                                      y + baseline);
+    }
+  while (pango_layout_iter_next_line (iter));
+
+  pango_layout_iter_free (iter);
+
+  pango_renderer_deactivate (renderer);
+}
+
+static void
+draw_underline (PangoRenderer *renderer,
+               LineState     *state)
+{
+  PangoRectangle *rect = &state->underline_rect;
+  PangoUnderline underline = state->underline;
+
+  state->underline = PANGO_UNDERLINE_NONE;
+
+  switch (underline)
+    {
+    case PANGO_UNDERLINE_NONE:
+      break;
+    case PANGO_UNDERLINE_DOUBLE:
+      pango_renderer_draw_rectangle (renderer,
+                                    PANGO_RENDER_PART_UNDERLINE,
+                                    rect->x,
+                                    rect->y + 2 * rect->height,
+                                    rect->width,
+                                    rect->height);
+      /* Fall through */
+    case PANGO_UNDERLINE_SINGLE:
+    case PANGO_UNDERLINE_LOW:
+      pango_renderer_draw_rectangle (renderer,
+                                    PANGO_RENDER_PART_UNDERLINE,
+                                    rect->x,
+                                    rect->y,
+                                    rect->width,
+                                    rect->height);
+      break;
+    case PANGO_UNDERLINE_ERROR:
+      pango_renderer_draw_error_underline (renderer,
+                                          rect->x,
+                                          rect->y,
+                                          rect->width,
+                                          3 * rect->height);
+      break;
+    }
+}
+
+static void
+draw_strikethrough (PangoRenderer *renderer,
+                   LineState     *state)
+{
+  PangoRectangle *rect = &state->strikethrough_rect;
+  gboolean strikethrough = state->strikethrough;
+
+  state->strikethrough = FALSE;
+
+  if (strikethrough)
+    pango_renderer_draw_rectangle (renderer,
+                                  PANGO_RENDER_PART_STRIKETHROUGH,
+                                  rect->x,
+                                  rect->y,
+                                  rect->width,
+                                  rect->height);
+}
+
+static void
+handle_line_state_change (PangoRenderer  *renderer,
+                         PangoRenderPart part)
+{
+  LineState *state = renderer->priv->line_state;
+  if (!state)
+    return;
+
+  if (part == PANGO_RENDER_PART_UNDERLINE &&
+      state->underline != PANGO_UNDERLINE_NONE)
+    {
+      PangoRectangle *rect = &state->underline_rect;
+
+      rect->width = state->logical_rect_end - rect->x;
+      draw_underline (renderer, state);
+      state->underline = renderer->underline;
+      rect->x = state->logical_rect_end;
+      rect->width = 0;
+    }
+
+  if (part == PANGO_RENDER_PART_STRIKETHROUGH &&
+      state->strikethrough)
+    {
+      PangoRectangle *rect = &state->strikethrough_rect;
+
+      rect->width = state->logical_rect_end - rect->x;
+      draw_strikethrough (renderer, state);
+      state->strikethrough = renderer->strikethrough;
+      rect->x = state->logical_rect_end;
+      rect->width = 0;
+    }
+}
+
+static void
+add_underline (PangoRenderer    *renderer,
+              LineState        *state,
+              PangoFontMetrics *metrics,
+              int               base_x,
+              int               base_y,
+              PangoRectangle   *ink_rect,
+              PangoRectangle   *logical_rect)
+{
+  PangoRectangle *current_rect = &state->underline_rect;
+  PangoRectangle new_rect;
+
+  int underline_thickness = pango_font_metrics_get_underline_thickness (metrics);
+  int underline_position = pango_font_metrics_get_underline_position (metrics);
+
+  new_rect.x = base_x + logical_rect->x;
+  new_rect.width = logical_rect->width;
+  new_rect.height = underline_thickness;
+  new_rect.y = base_y;
+
+  switch (renderer->underline)
+    {
+    case PANGO_UNDERLINE_NONE:
+      g_assert_not_reached ();
+      break;
+    case PANGO_UNDERLINE_SINGLE:
+    case PANGO_UNDERLINE_DOUBLE:
+    case PANGO_UNDERLINE_ERROR:
+      new_rect.y -= underline_position;
+      break;
+    case PANGO_UNDERLINE_LOW:
+      new_rect.y += ink_rect->y + ink_rect->height + underline_thickness;
+      break;
+    }
+
+  if (renderer->underline == state->underline &&
+      new_rect.y == current_rect->y &&
+      new_rect.height == current_rect->height)
+    {
+      current_rect->width = new_rect.x + new_rect.width - current_rect->x;
+    }
+  else
+    {
+      draw_underline (renderer, state);
+
+      *current_rect = new_rect;
+      state->underline = renderer->underline;
+    }
+}
+
+static void
+add_strikethrough (PangoRenderer    *renderer,
+                  LineState        *state,
+                  PangoFontMetrics *metrics,
+                  int               base_x,
+                  int               base_y,
+                  PangoRectangle   *ink_rect G_GNUC_UNUSED,
+                  PangoRectangle   *logical_rect)
+{
+  PangoRectangle *current_rect = &state->strikethrough_rect;
+  PangoRectangle new_rect;
+
+  int strikethrough_thickness = pango_font_metrics_get_strikethrough_thickness (metrics);
+  int strikethrough_position = pango_font_metrics_get_strikethrough_position (metrics);
+
+  new_rect.x = base_x + logical_rect->x;
+  new_rect.width = logical_rect->width;
+  new_rect.y = base_y - strikethrough_position;
+  new_rect.height = strikethrough_thickness;
+
+  if (state->strikethrough &&
+      new_rect.y == current_rect->y &&
+      new_rect.height == current_rect->height)
+    {
+      current_rect->width = new_rect.x + new_rect.width - current_rect->x;
+    }
+  else
+    {
+      draw_strikethrough (renderer, state);
+
+      *current_rect = new_rect;
+      state->strikethrough = TRUE;
+    }
+}
+
+static void
+get_item_properties (PangoItem       *item,
+                    gint            *rise,
+                    PangoAttrShape **shape_attr)
+{
+  GSList *l;
+
+  if (rise)
+    *rise = 0;
+
+  if (shape_attr)
+    *shape_attr = NULL;
+
+  for (l = item->analysis.extra_attrs; l; l = l->next)
+    {
+      PangoAttribute *attr = l->data;
+
+      switch ((int) attr->klass->type)
+       {
+       case PANGO_ATTR_SHAPE:
+         if (shape_attr)
+           *shape_attr = (PangoAttrShape *)attr;
+         break;
+
+       case PANGO_ATTR_RISE:
+         if (rise)
+           *rise = ((PangoAttrInt *)attr)->value;
+         break;
+
+       default:
+         break;
+       }
+    }
+}
+
+static void
+draw_shaped_glyphs (PangoRenderer    *renderer,
+                   PangoGlyphString *glyphs,
+                   PangoAttrShape   *attr,
+                   int               x,
+                   int               y)
+{
+  PangoRendererClass *class = PANGO_RENDERER_GET_CLASS (renderer);
+  int i;
+
+  if (!class->draw_shape)
+    return;
+
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      PangoGlyphInfo *gi = &glyphs->glyphs[i];
+
+      class->draw_shape (renderer, attr, x, y);
+
+      x += gi->geometry.width;
+    }
+}
+
+
+/**
+ * pango_renderer_draw_layout_line:
+ * @renderer: a #PangoRenderer
+ * @line: a #PangoLayoutLine
+ * @x: X position of left edge of baseline, in user space coordinates
+ *   in Pango units.
+ * @y: Y position of left edge of baseline, in user space coordinates
+ *    in Pango units.
+ *
+ * Draws @line with the specified #PangoRenderer.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_layout_line (PangoRenderer    *renderer,
+                                PangoLayoutLine  *line,
+                                int               x,
+                                int               y)
+{
+  int x_off = 0;
+  int glyph_string_width;
+  LineState state;
+  GSList *l;
+  gboolean got_overall = FALSE;
+  PangoRectangle overall_rect;
+  const char *text;
+
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+  /* We only change the matrix if the renderer isn't already
+   * active.
+   */
+  if (!renderer->active_count)
+    pango_renderer_set_matrix (renderer,
+                              G_LIKELY (line->layout) ?
+                              pango_context_get_matrix
+                              (pango_layout_get_context (line->layout)) :
+                              NULL);
+
+  pango_renderer_activate (renderer);
+
+  renderer->priv->line = line;
+  renderer->priv->line_state = &state;
+
+  state.underline = PANGO_UNDERLINE_NONE;
+  state.strikethrough = FALSE;
+
+  text = G_LIKELY (line->layout) ? pango_layout_get_text (line->layout) : NULL;
+
+  for (l = line->runs; l; l = l->next)
+    {
+      PangoFontMetrics *metrics;
+      gint rise;
+      PangoLayoutRun *run = l->data;
+      PangoAttrShape *shape_attr;
+      PangoRectangle ink_rect, *ink = NULL;
+      PangoRectangle logical_rect, *logical = NULL;
+
+      if (run->item->analysis.flags & PANGO_ANALYSIS_FLAG_CENTERED_BASELINE)
+       logical = &logical_rect;
+
+      pango_renderer_prepare_run (renderer, run);
+
+      get_item_properties (run->item, &rise, &shape_attr);
+
+      if (shape_attr)
+       {
+         ink = &ink_rect;
+         logical = &logical_rect;
+          _pango_shape_get_extents (run->glyphs->num_glyphs,
+                                   &shape_attr->ink_rect,
+                                   &shape_attr->logical_rect,
+                                   ink,
+                                   logical);
+         glyph_string_width = logical->width;
+       }
+      else
+       {
+         if (renderer->underline != PANGO_UNDERLINE_NONE ||
+             renderer->strikethrough)
+           {
+             ink = &ink_rect;
+             logical = &logical_rect;
+           }
+         if (G_UNLIKELY (ink || logical))
+           pango_glyph_string_extents (run->glyphs, run->item->analysis.font,
+                                       ink, logical);
+         if (logical)
+           glyph_string_width = logical_rect.width;
+         else
+           glyph_string_width = pango_glyph_string_get_width (run->glyphs);
+       }
+
+      state.logical_rect_end = x + x_off + glyph_string_width;
+
+      if (run->item->analysis.flags & PANGO_ANALYSIS_FLAG_CENTERED_BASELINE)
+       {
+         gboolean is_hinted = ((logical_rect.y | logical_rect.height) & (PANGO_SCALE - 1)) == 0;
+         int adjustment = logical_rect.y + logical_rect.height / 2;
+
+         if (is_hinted)
+           adjustment = PANGO_UNITS_ROUND (adjustment);
+
+         rise += adjustment;
+       }
+
+
+      if (renderer->priv->color_set[PANGO_RENDER_PART_BACKGROUND])
+       {
+         if (!got_overall)
+           {
+             pango_layout_line_get_extents (line, NULL, &overall_rect);
+             got_overall = TRUE;
+           }
+
+         pango_renderer_draw_rectangle (renderer,
+                                        PANGO_RENDER_PART_BACKGROUND,
+                                        x + x_off,
+                                        y + overall_rect.y,
+                                        glyph_string_width,
+                                        overall_rect.height);
+       }
+
+      if (shape_attr)
+       {
+         draw_shaped_glyphs (renderer, run->glyphs, shape_attr, x + x_off, y - rise);
+       }
+      else
+       {
+         pango_renderer_draw_glyph_item (renderer,
+                                         text,
+                                         run,
+                                         x + x_off, y - rise);
+       }
+
+      if (renderer->underline != PANGO_UNDERLINE_NONE ||
+         renderer->strikethrough)
+       {
+         metrics = pango_font_get_metrics (run->item->analysis.font,
+                                           run->item->analysis.language);
+
+         if (renderer->underline != PANGO_UNDERLINE_NONE)
+           add_underline (renderer, &state,metrics,
+                          x + x_off, y - rise,
+                          ink, logical);
+
+         if (renderer->strikethrough)
+           add_strikethrough (renderer, &state, metrics,
+                              x + x_off, y - rise,
+                              ink, logical);
+
+         pango_font_metrics_unref (metrics);
+       }
+
+      if (renderer->underline == PANGO_UNDERLINE_NONE &&
+         state.underline != PANGO_UNDERLINE_NONE)
+       draw_underline (renderer, &state);
+
+      if (!renderer->strikethrough && state.strikethrough)
+       draw_strikethrough (renderer, &state);
+
+      x_off += glyph_string_width;
+    }
+
+  /* Finish off any remaining underlines
+   */
+  draw_underline (renderer, &state);
+  draw_strikethrough (renderer, &state);
+
+  renderer->priv->line_state = NULL;
+  renderer->priv->line = NULL;
+
+  pango_renderer_deactivate (renderer);
+}
+
+/**
+ * pango_renderer_draw_glyphs:
+ * @renderer: a #PangoRenderer
+ * @font: a #PangoFont
+ * @glyphs: a #PangoGlyphString
+ * @x: X position of left edge of baseline, in user space coordinates
+ *   in Pango units.
+ * @y: Y position of left edge of baseline, in user space coordinates
+ *    in Pango units.
+ *
+ * Draws the glyphs in @glyphs with the specified #PangoRenderer.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_glyphs (PangoRenderer    *renderer,
+                           PangoFont        *font,
+                           PangoGlyphString *glyphs,
+                           int               x,
+                           int               y)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+  pango_renderer_activate (renderer);
+
+  PANGO_RENDERER_GET_CLASS (renderer)->draw_glyphs (renderer, font, glyphs, x, y);
+
+  pango_renderer_deactivate (renderer);
+}
+
+static void
+pango_renderer_default_draw_glyphs (PangoRenderer    *renderer,
+                                   PangoFont        *font,
+                                   PangoGlyphString *glyphs,
+                                   int               x,
+                                   int               y)
+{
+  int i;
+  int x_position = 0;
+
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      PangoGlyphInfo *gi = &glyphs->glyphs[i];
+      Point p;
+
+      to_device (renderer->matrix,
+                x + x_position + gi->geometry.x_offset,
+                y +              gi->geometry.y_offset,
+                &p);
+
+      pango_renderer_draw_glyph (renderer, font, gi->glyph, p.x, p.y);
+
+      x_position += gi->geometry.width;
+    }
+}
+
+/**
+ * pango_renderer_draw_glyph_item:
+ * @renderer: a #PangoRenderer
+ * @text: the UTF-8 text that @glyph_item refers to, or %NULL
+ * @glyph_item: a #PangoGlyphItem
+ * @x: X position of left edge of baseline, in user space coordinates
+ *   in Pango units.
+ * @y: Y position of left edge of baseline, in user space coordinates
+ *    in Pango units.
+ *
+ * Draws the glyphs in @glyph_item with the specified #PangoRenderer,
+ * embedding the text associated with the glyphs in the output if the
+ * output format supports it (PDF for example).
+ *
+ * Note that @text is the start of the text for layout, which is then
+ * indexed by <literal>@glyph_item->item->offset</literal>.
+ *
+ * If @text is %NULL, this simply calls pango_renderer_draw_glyphs().
+ *
+ * The default implementation of this method simply falls back to
+ * pango_renderer_draw_glyphs().
+ *
+ * Since: 1.22
+ **/
+void
+pango_renderer_draw_glyph_item (PangoRenderer    *renderer,
+                               const char       *text,
+                               PangoGlyphItem   *glyph_item,
+                               int               x,
+                               int               y)
+{
+  if (G_UNLIKELY (text))
+    {
+      pango_renderer_draw_glyphs (renderer,
+                                 glyph_item->item->analysis.font,
+                                 glyph_item->glyphs,
+                                 x, y);
+      return;
+    }
+
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+  pango_renderer_activate (renderer);
+
+  PANGO_RENDERER_GET_CLASS (renderer)->draw_glyph_item (renderer, text, glyph_item, x, y);
+
+  pango_renderer_deactivate (renderer);
+}
+
+static void
+pango_renderer_default_draw_glyph_item (PangoRenderer    *renderer,
+                                       const char       *text G_GNUC_UNUSED,
+                                       PangoGlyphItem   *glyph_item,
+                                       int               x,
+                                       int               y)
+{
+  pango_renderer_draw_glyphs (renderer,
+                             glyph_item->item->analysis.font,
+                             glyph_item->glyphs,
+                             x, y);
+}
+
+/**
+ * pango_renderer_draw_rectangle:
+ * @renderer: a #PangoRenderer
+ * @part: type of object this rectangle is part of
+ * @x: X position at which to draw rectangle, in user space coordinates in Pango units
+ * @y: Y position at which to draw rectangle, in user space coordinates in Pango units
+ * @width: width of rectangle in Pango units in user space coordinates
+ * @height: height of rectangle in Pango units in user space coordinates
+ *
+ * Draws an axis-aligned rectangle in user space coordinates with the
+ * specified #PangoRenderer.
+ *
+ * This should be called while @renderer is already active.  Use
+ * pango_renderer_activate() to activate a renderer.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_rectangle (PangoRenderer   *renderer,
+                              PangoRenderPart  part,
+                              int              x,
+                              int              y,
+                              int              width,
+                              int              height)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (IS_VALID_PART (part));
+  g_return_if_fail (renderer->active_count > 0);
+
+  PANGO_RENDERER_GET_CLASS (renderer)->draw_rectangle (renderer, part, x, y, width, height);
+}
+
+static int
+compare_points (const void *a,
+               const void *b)
+{
+  const Point *pa = a;
+  const Point *pb = b;
+
+  if (pa->y < pb->y)
+    return -1;
+  else if (pa->y > pb->y)
+    return 1;
+  else if (pa->x < pb->x)
+    return -1;
+  else if (pa->x > pb->x)
+    return 1;
+  else
+    return 0;
+}
+
+static void
+draw_rectangle (PangoRenderer   *renderer,
+               PangoMatrix     *matrix,
+               PangoRenderPart  part,
+               int              x,
+               int              y,
+               int              width,
+               int              height)
+{
+  Point points[4];
+
+  /* Convert the points to device coordinates, and sort
+   * in ascending Y order. (Ordering by X for ties)
+   */
+  to_device (matrix, x, y, &points[0]);
+  to_device (matrix, x + width, y, &points[1]);
+  to_device (matrix, x, y + height, &points[2]);
+  to_device (matrix, x + width, y + height, &points[3]);
+
+  qsort (points, 4, sizeof (Point), compare_points);
+
+  /* There are essentially three cases. (There is a fourth
+   * case where trapezoid B is degenerate and we just have
+   * two triangles, but we don't need to handle it separately.)
+   *
+   *     1            2             3
+   *
+   *     ______       /\           /\
+   *    /     /      /A \         /A \
+   *   /  B  /      /____\       /____\
+   *  /_____/      /  B  /       \  B  \
+   *              /_____/         \_____\
+   *              \ C  /           \ C  /
+   *               \  /             \  /
+   *                \/               \/
+   */
+  if (points[0].y == points[1].y)
+    {
+     /* Case 1 (pure shear) */
+      pango_renderer_draw_trapezoid (renderer, part,                                      /* B */
+                                    points[0].y, points[0].x, points[1].x,
+                                    points[2].y, points[2].x, points[3].x);
+    }
+  else if (points[1].x < points[2].x)
+    {
+      /* Case 2 */
+      double tmp_width = ((points[2].x - points[0].x) * (points[1].y - points[0].y)) / (points[2].y - points[0].y);
+      double base_width = tmp_width + points[0].x - points[1].x;
+
+      pango_renderer_draw_trapezoid (renderer, part,                                      /* A */
+                                    points[0].y, points[0].x, points[0].x,
+                                    points[1].y, points[1].x, points[1].x + base_width);
+      pango_renderer_draw_trapezoid (renderer, part,                                      /* B */
+                                    points[1].y, points[1].x, points[1].x + base_width,
+                                    points[2].y, points[2].x - base_width, points[2].x);
+      pango_renderer_draw_trapezoid (renderer, part,                                      /* C */
+                                    points[2].y, points[2].x - base_width, points[2].x,
+                                    points[3].y, points[3].x, points[3].x);
+    }
+  else
+    {
+      /* case 3 */
+      double tmp_width = ((points[0].x - points[2].x) * (points[1].y - points[0].y)) / (points[2].y - points[0].y);
+      double base_width = tmp_width + points[1].x - points[0].x;
+
+      pango_renderer_draw_trapezoid (renderer, part,                                     /* A */
+                                    points[0].y, points[0].x, points[0].x,
+                                    points[1].y,  points[1].x - base_width, points[1].x);
+      pango_renderer_draw_trapezoid (renderer, part,                                     /* B */
+                                    points[1].y, points[1].x - base_width, points[1].x,
+                                    points[2].y, points[2].x, points[2].x + base_width);
+      pango_renderer_draw_trapezoid (renderer, part,                                     /* C */
+                                    points[2].y, points[2].x, points[2].x + base_width,
+                                    points[3].y, points[3].x, points[3].x);
+    }
+}
+
+static void
+pango_renderer_default_draw_rectangle (PangoRenderer  *renderer,
+                                      PangoRenderPart part,
+                                      int             x,
+                                      int             y,
+                                      int             width,
+                                      int             height)
+{
+  draw_rectangle (renderer, renderer->matrix, part, x, y, width, height);
+}
+
+/**
+ * pango_renderer_draw_error_underline:
+ * @renderer: a #PangoRenderer
+ * @x: X coordinate of underline, in Pango units in user coordinate system
+ * @y: Y coordinate of underline, in Pango units in user coordinate system
+ * @width: width of underline, in Pango units in user coordinate system
+ * @height: height of underline, in Pango units in user coordinate system
+ *
+ * Draw a squiggly line that approximately covers the given rectangle
+ * in the style of an underline used to indicate a spelling error.
+ * (The width of the underline is rounded to an integer number
+ * of up/down segments and the resulting rectangle is centered
+ * in the original rectangle)
+ *
+ * This should be called while @renderer is already active.  Use
+ * pango_renderer_activate() to activate a renderer.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_error_underline (PangoRenderer *renderer,
+                                    int            x,
+                                    int            y,
+                                    int            width,
+                                    int            height)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (renderer->active_count > 0);
+
+  PANGO_RENDERER_GET_CLASS (renderer)->draw_error_underline (renderer, x, y, width, height);
+}
+
+/* We are drawing an error underline that looks like one of:
+ *
+ *  /\      /\      /\        /\      /\               -
+ * /  \    /  \    /  \      /  \    /  \              |
+ * \   \  /\   \  /   /      \   \  /\   \             |
+ *  \   \/B \   \/ C /        \   \/B \   \            | height = HEIGHT_SQUARES * square
+ *   \ A \  /\ A \  /          \ A \  /\ A \           |
+ *    \   \/  \   \/            \   \/  \   \          |
+ *     \  /    \  /              \  /    \  /          |
+ *      \/      \/                \/      \/           -
+ *      |---|
+ *    unit_width = (HEIGHT_SQUARES - 1) * square
+ *
+ * To do this conveniently, we work in a coordinate system where A,B,C
+ * are axis aligned rectangles. (If fonts were square, the diagrams
+ * would be clearer)
+ *
+ *             (0,0)
+ *              /\      /\
+ *             /  \    /  \
+ *            /\  /\  /\  /
+ *           /  \/  \/  \/
+ *          /    \  /\  /
+ *      Y axis    \/  \/
+ *                 \  /\
+ *                  \/  \
+ *                       \ X axis
+ *
+ * Note that the long side in this coordinate system is HEIGHT_SQUARES + 1
+ * units long
+ *
+ * The diagrams above are shown with HEIGHT_SQUARES an integer, but
+ * that is actually incidental; the value 2.5 below seems better than
+ * either HEIGHT_SQUARES=3 (a little long and skinny) or
+ * HEIGHT_SQUARES=2 (a bit short and stubby)
+ */
+
+#define HEIGHT_SQUARES 2.5
+
+static void
+get_total_matrix (PangoMatrix       *total,
+                 const PangoMatrix *global,
+                 int                x,
+                 int                y,
+                 int                square)
+{
+  PangoMatrix local;
+  gdouble scale = 0.5 * square;
+
+  /* The local matrix translates from the axis aligned coordinate system
+   * to the original user space coordinate system.
+   */
+  local.xx = scale;
+  local.xy = - scale;
+  local.yx = scale;
+  local.yy = scale;
+  local.x0 = 0;
+  local.y0 = 0;
+
+  *total = *global;
+  pango_matrix_concat (total, &local);
+
+  total->x0 = (global->xx * x + global->xy * y) / PANGO_SCALE + global->x0;
+  total->y0 = (global->yx * x + global->yy * y) / PANGO_SCALE + global->y0;
+}
+
+static void
+pango_renderer_default_draw_error_underline (PangoRenderer *renderer,
+                                            int            x,
+                                            int            y,
+                                            int            width,
+                                            int            height)
+{
+  int square = height / HEIGHT_SQUARES;
+  int unit_width = (HEIGHT_SQUARES - 1) * square;
+  int width_units = (width + unit_width / 2) / unit_width;
+  static const PangoMatrix identity = PANGO_MATRIX_INIT;
+  const PangoMatrix *matrix;
+  double dx, dx0, dy0;
+  PangoMatrix total;
+  int i;
+
+  x += (width - width_units * unit_width) / 2;
+  width = width_units * unit_width;
+
+  if (renderer->matrix)
+    matrix = renderer->matrix;
+  else
+    matrix = &identity;
+
+  get_total_matrix (&total, matrix, x, y, square);
+  dx = unit_width * 2;
+  dx0 = (matrix->xx * dx) / PANGO_SCALE;
+  dy0 = (matrix->yx * dx) / PANGO_SCALE;
+
+  i = (width_units - 1) / 2;
+  while (TRUE)
+    {
+      draw_rectangle (renderer, &total, PANGO_RENDER_PART_UNDERLINE, /* A */
+                     0,                      0,
+                     HEIGHT_SQUARES * 2 - 1, 1);
+
+      if (i <= 0)
+        break;
+      i--;
+
+      draw_rectangle (renderer, &total, PANGO_RENDER_PART_UNDERLINE, /* B */
+                     HEIGHT_SQUARES * 2 - 2, - (HEIGHT_SQUARES * 2 - 3),
+                     1,                      HEIGHT_SQUARES * 2 - 3);
+
+      total.x0 += dx0;
+      total.y0 += dy0;
+    }
+  if (width_units % 2 == 0)
+    {
+      draw_rectangle (renderer, &total, PANGO_RENDER_PART_UNDERLINE, /* C */
+                     HEIGHT_SQUARES * 2 - 2, - (HEIGHT_SQUARES * 2 - 2),
+                     1,                      HEIGHT_SQUARES * 2 - 2);
+    }
+}
+
+/**
+ * pango_renderer_draw_trapezoid:
+ * @renderer: a #PangoRenderer
+ * @part: type of object this trapezoid is part of
+ * @y1_: Y coordinate of top of trapezoid
+ * @x11: X coordinate of left end of top of trapezoid
+ * @x21: X coordinate of right end of top of trapezoid
+ * @y2: Y coordinate of bottom of trapezoid
+ * @x12: X coordinate of left end of bottom of trapezoid
+ * @x22: X coordinate of right end of bottom of trapezoid
+ *
+ * Draws a trapezoid with the parallel sides aligned with the X axis
+ * using the given #PangoRenderer; coordinates are in device space.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_trapezoid (PangoRenderer  *renderer,
+                              PangoRenderPart part,
+                              double          y1_,
+                              double          x11,
+                              double          x21,
+                              double          y2,
+                              double          x12,
+                              double          x22)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (renderer->active_count > 0);
+
+  if (PANGO_RENDERER_GET_CLASS (renderer)->draw_trapezoid)
+    PANGO_RENDERER_GET_CLASS (renderer)->draw_trapezoid (renderer, part,
+                                                        y1_, x11, x21,
+                                                        y2, x12, x22);
+}
+
+/**
+ * pango_renderer_draw_glyph:
+ * @renderer: a #PangoRenderer
+ * @font: a #PangoFont
+ * @glyph: the glyph index of a single glyph
+ * @x: X coordinate of left edge of baseline of glyph
+ * @y: Y coordinate of left edge of baseline of glyph
+ *
+ * Draws a single glyph with coordinates in device space.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_draw_glyph (PangoRenderer *renderer,
+                          PangoFont     *font,
+                          PangoGlyph     glyph,
+                          double         x,
+                          double         y)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (renderer->active_count > 0);
+
+  if (glyph == PANGO_GLYPH_EMPTY) /* glyph PANGO_GLYPH_EMPTY never renders */
+    return;
+
+  if (PANGO_RENDERER_GET_CLASS (renderer)->draw_glyph)
+    PANGO_RENDERER_GET_CLASS (renderer)->draw_glyph (renderer, font, glyph, x, y);
+}
+
+/**
+ * pango_renderer_activate:
+ * @renderer: a #PangoRenderer
+ *
+ * Does initial setup before rendering operations on @renderer.
+ * pango_renderer_deactivate() should be called when done drawing.
+ * Calls such as pango_renderer_draw_layout() automatically
+ * activate the layout before drawing on it. Calls to
+ * pango_renderer_activate() and pango_renderer_deactivate() can
+ * be nested and the renderer will only be initialized and
+ * deinitialized once.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_activate (PangoRenderer *renderer)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+  renderer->active_count++;
+  if (renderer->active_count == 1)
+    {
+      if (PANGO_RENDERER_GET_CLASS (renderer)->begin)
+       PANGO_RENDERER_GET_CLASS (renderer)->begin (renderer);
+    }
+}
+
+/**
+ * pango_renderer_deactivate:
+ * @renderer: a #PangoRenderer
+ *
+ * Cleans up after rendering operations on @renderer. See
+ * docs for pango_renderer_activate().
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_deactivate (PangoRenderer *renderer)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (renderer->active_count > 0);
+
+  if (renderer->active_count == 1)
+    {
+      if (PANGO_RENDERER_GET_CLASS (renderer)->end)
+       PANGO_RENDERER_GET_CLASS (renderer)->end (renderer);
+    }
+  renderer->active_count--;
+}
+
+/**
+ * pango_renderer_set_color:
+ * @renderer: a #PangoRenderer
+ * @part: the part to change the color of
+ * @color: the new color or %NULL to unset the current color
+ *
+ * Sets the color for part of the rendering.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_set_color (PangoRenderer    *renderer,
+                         PangoRenderPart   part,
+                         const PangoColor *color)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (IS_VALID_PART (part));
+
+  if ((!color && !renderer->priv->color_set[part]) ||
+      (color && renderer->priv->color_set[part] &&
+       renderer->priv->color[part].red == color->red &&
+       renderer->priv->color[part].green == color->green &&
+       renderer->priv->color[part].blue == color->blue))
+    return;
+
+  pango_renderer_part_changed (renderer, part);
+
+  if (color)
+    {
+      renderer->priv->color_set[part] = TRUE;
+      renderer->priv->color[part] = *color;
+    }
+  else
+    {
+      renderer->priv->color_set[part] = FALSE;
+    }
+}
+
+/**
+ * pango_renderer_get_color:
+ * @renderer: a #PangoRenderer
+ * @part: the part to get the color for
+ *
+ * Gets the current rendering color for the specified part.
+ *
+ * Return value: the color for the specified part, or %NULL
+ *  if it hasn't been set and should be inherited from the
+ *  environment.
+ *
+ * Since: 1.8
+ **/
+PangoColor *
+pango_renderer_get_color (PangoRenderer   *renderer,
+                         PangoRenderPart  part)
+{
+  g_return_val_if_fail (PANGO_IS_RENDERER_FAST (renderer), NULL);
+  g_return_val_if_fail (IS_VALID_PART (part), NULL);
+
+  if (renderer->priv->color_set[part])
+    return &renderer->priv->color[part];
+  else
+    return NULL;
+}
+
+/**
+ * pango_renderer_part_changed:
+ * @renderer: a #PangoRenderer
+ * @part: the part for which rendering has changed.
+ *
+ * Informs Pango that the way that the rendering is done
+ * for @part has changed in a way that would prevent multiple
+ * pieces being joined together into one drawing call. For
+ * instance, if a subclass of #PangoRenderer was to add a stipple
+ * option for drawing underlines, it needs to call
+ *
+ * <informalexample><programlisting>
+ * pango_renderer_part_changed (render, PANGO_RENDER_PART_UNDERLINE);
+ * </programlisting></informalexample>
+ *
+ * When the stipple changes or underlines with different stipples
+ * might be joined together. Pango automatically calls this for
+ * changes to colors. (See pango_renderer_set_color())
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_part_changed (PangoRenderer    *renderer,
+                            PangoRenderPart   part)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+  g_return_if_fail (IS_VALID_PART (part));
+  g_return_if_fail (renderer->active_count > 0);
+
+  handle_line_state_change (renderer, part);
+
+  if (PANGO_RENDERER_GET_CLASS (renderer)->part_changed)
+    PANGO_RENDERER_GET_CLASS (renderer)->part_changed (renderer, part);
+}
+
+/**
+ * pango_renderer_prepare_run:
+ * @renderer: a #PangoRenderer
+ * @run: a #PangoLayoutRun
+ *
+ * Set up the state of the #PangoRenderer for rendering @run.
+ *
+ * Since: 1.8
+ **/
+static void
+pango_renderer_prepare_run (PangoRenderer  *renderer,
+                           PangoLayoutRun *run)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+  PANGO_RENDERER_GET_CLASS (renderer)->prepare_run (renderer, run);
+}
+
+static void
+pango_renderer_default_prepare_run (PangoRenderer  *renderer,
+                                   PangoLayoutRun *run)
+{
+  PangoColor *fg_color = NULL;
+  PangoColor *bg_color = NULL;
+  PangoColor *underline_color = NULL;
+  PangoColor *strikethrough_color = NULL;
+  GSList *l;
+
+  renderer->underline = PANGO_UNDERLINE_NONE;
+  renderer->strikethrough = FALSE;
+
+  for (l = run->item->analysis.extra_attrs; l; l = l->next)
+    {
+      PangoAttribute *attr = l->data;
+
+      switch ((int) attr->klass->type)
+       {
+       case PANGO_ATTR_UNDERLINE:
+         renderer->underline = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_STRIKETHROUGH:
+         renderer->strikethrough = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_FOREGROUND:
+         fg_color = &((PangoAttrColor *)attr)->color;
+         break;
+
+       case PANGO_ATTR_BACKGROUND:
+         bg_color = &((PangoAttrColor *)attr)->color;
+         break;
+
+       case PANGO_ATTR_UNDERLINE_COLOR:
+         underline_color = &((PangoAttrColor *)attr)->color;
+         break;
+
+       case PANGO_ATTR_STRIKETHROUGH_COLOR:
+         strikethrough_color = &((PangoAttrColor *)attr)->color;
+         break;
+
+       default:
+         break;
+       }
+    }
+
+  if (!underline_color)
+    underline_color = fg_color;
+
+  if (!strikethrough_color)
+    strikethrough_color = fg_color;
+
+  pango_renderer_set_color (renderer, PANGO_RENDER_PART_FOREGROUND, fg_color);
+  pango_renderer_set_color (renderer, PANGO_RENDER_PART_BACKGROUND, bg_color);
+  pango_renderer_set_color (renderer, PANGO_RENDER_PART_UNDERLINE, underline_color);
+  pango_renderer_set_color (renderer, PANGO_RENDER_PART_STRIKETHROUGH, strikethrough_color);
+}
+
+/**
+ * pango_renderer_set_matrix:
+ * @renderer: a #PangoRenderer
+ * @matrix: a #PangoMatrix, or %NULL to unset any existing matrix.
+ *  (No matrix set is the same as setting the identity matrix.)
+ *
+ * Sets the transformation matrix that will be applied when rendering.
+ *
+ * Since: 1.8
+ **/
+void
+pango_renderer_set_matrix (PangoRenderer     *renderer,
+                          const PangoMatrix *matrix)
+{
+  g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
+
+  pango_matrix_free (renderer->matrix);
+  renderer->matrix = pango_matrix_copy (matrix);
+}
+
+/**
+ * pango_renderer_get_matrix:
+ * @renderer: a #PangoRenderer
+ *
+ * Gets the transformation matrix that will be applied when
+ * rendering. See pango_renderer_set_matrix().
+ *
+ * Return value: the matrix, or %NULL if no matrix has been set
+ *  (which is the same as the identity matrix). The returned
+ *  matrix is owned by Pango and must not be modified or
+ *  freed.
+ *
+ * Since: 1.8
+ **/
+G_CONST_RETURN PangoMatrix *
+pango_renderer_get_matrix (PangoRenderer *renderer)
+{
+  g_return_val_if_fail (PANGO_IS_RENDERER (renderer), NULL);
+
+  return renderer->matrix;
+}
+
+/**
+ * pango_renderer_get_layout:
+ * @renderer: a #PangoRenderer
+ *
+ * Gets the layout currently being rendered using @renderer.
+ * Calling this function only makes sense from inside a subclass's
+ * methods, like in its draw_shape<!---->() for example.
+ *
+ * The returned layout should not be modified while still being
+ * rendered.
+ *
+ * Return value: the layout, or %NULL if no layout is being
+ *  rendered using @renderer at this time.
+ *
+ * Since: 1.20
+ **/
+PangoLayout *
+pango_renderer_get_layout (PangoRenderer *renderer)
+{
+  if (G_UNLIKELY (renderer->priv->line == NULL))
+    return NULL;
+
+  return renderer->priv->line->layout;
+}
+
+/**
+ * pango_renderer_get_layout_line:
+ * @renderer: a #PangoRenderer
+ *
+ * Gets the layout line currently being rendered using @renderer.
+ * Calling this function only makes sense from inside a subclass's
+ * methods, like in its draw_shape<!---->() for example.
+ *
+ * The returned layout line should not be modified while still being
+ * rendered.
+ *
+ * Return value: the layout line, or %NULL if no layout line is being
+ *  rendered using @renderer at this time.
+ *
+ * Since: 1.20
+ **/
+PangoLayoutLine *
+pango_renderer_get_layout_line (PangoRenderer     *renderer)
+{
+  return renderer->priv->line;
+}
diff --git a/pango/pango-renderer.h b/pango/pango-renderer.h
new file mode 100755 (executable)
index 0000000..354127b
--- /dev/null
@@ -0,0 +1,260 @@
+/* Pango
+ * pango-renderer.h: Base class for rendering
+ *
+ * Copyright (C) 2004, Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef __PANGO_RENDERER_H_
+#define __PANGO_RENDERER_H_
+
+#include <pango/pango-layout.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_RENDERER            (pango_renderer_get_type())
+#define PANGO_RENDERER(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_RENDERER, PangoRenderer))
+#define PANGO_IS_RENDERER(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_RENDERER))
+#define PANGO_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_RENDERER, PangoRendererClass))
+#define PANGO_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_RENDERER))
+#define PANGO_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_RENDERER, PangoRendererClass))
+
+typedef struct _PangoRenderer        PangoRenderer;
+typedef struct _PangoRendererClass   PangoRendererClass;
+typedef struct _PangoRendererPrivate PangoRendererPrivate;
+
+/**
+ * PangoRenderPart:
+ * @PANGO_RENDER_PART_FOREGROUND: the text itself
+ * @PANGO_RENDER_PART_BACKGROUND: the area behind the text
+ * @PANGO_RENDER_PART_UNDERLINE: underlines
+ * @PANGO_RENDER_PART_STRIKETHROUGH: strikethrough lines
+ *
+ * #PangoRenderPart defines different items to render for such
+ * purposes as setting colors.
+ *
+ * Since: 1.8
+ **/
+/* When extending, note N_RENDER_PARTS #define in pango-renderer.c */
+typedef enum
+{
+  PANGO_RENDER_PART_FOREGROUND,
+  PANGO_RENDER_PART_BACKGROUND,
+  PANGO_RENDER_PART_UNDERLINE,
+  PANGO_RENDER_PART_STRIKETHROUGH
+} PangoRenderPart;
+
+/**
+ * PangoRenderer:
+ * @matrix: the current transformation matrix for the Renderer; may
+ *    be %NULL, which should be treated the same as the identity matrix.
+ *
+ * #PangoRenderer is a base class for objects that are used to
+ * render Pango objects such as #PangoGlyphString and
+ * #PangoLayout.
+ *
+ * Since: 1.8
+ **/
+struct _PangoRenderer
+{
+  /*< private >*/
+  GObject parent_instance;
+
+  PangoUnderline underline;
+  gboolean strikethrough;
+  int active_count;
+
+  /*< public >*/
+  PangoMatrix *matrix;         /* May be NULL */
+
+  /*< private >*/
+  PangoRendererPrivate *priv;
+};
+
+/**
+ * PangoRendererClass:
+ * @draw_glyphs: draws a #PangoGlyphString
+ * @draw_rectangle: draws a rectangle
+ * @draw_error_underline: draws a squiggly line that approximately
+ * covers the given rectangle in the style of an underline used to
+ * indicate a spelling error.
+ * @draw_shape: draw content for a glyph shaped with #PangoAttrShape.
+ *   @x, @y are the coordinates of the left edge of the baseline,
+ *   in user coordinates.
+ * @draw_trapezoid: draws a trapezoidal filled area
+ * @draw_glyph: draws a single glyph
+ * @part_changed: do renderer specific processing when rendering
+ *  attributes change
+ * @begin: Do renderer-specific initialization before drawing
+ * @end: Do renderer-specific cleanup after drawing
+ * @prepare_run: updates the renderer for a new run
+ * @draw_glyph_item: draws a #PangoGlyphItem
+ *
+ * Class structure for #PangoRenderer.
+ *
+ * Since: 1.8
+ **/
+struct _PangoRendererClass
+{
+  /*< private >*/
+  GObjectClass parent_class;
+
+  /* vtable - not signals */
+  /*< public >*/
+
+  /* All of the following have default implementations
+   * and take as coordinates user coordinates in Pango units
+   */
+  void (*draw_glyphs) (PangoRenderer     *renderer,
+                      PangoFont         *font,
+                      PangoGlyphString  *glyphs,
+                      int                x,
+                      int                y);
+  void (*draw_rectangle) (PangoRenderer     *renderer,
+                         PangoRenderPart    part,
+                         int                x,
+                         int                y,
+                         int                width,
+                         int                height);
+  void (*draw_error_underline) (PangoRenderer     *renderer,
+                               int                x,
+                               int                y,
+                               int                width,
+                               int                height);
+
+  /* Nothing is drawn for shaped glyphs unless this is implemented */
+  void (*draw_shape) (PangoRenderer  *renderer,
+                     PangoAttrShape *attr,
+                     int             x,
+                     int             y);
+
+  /* These two must be implemented and take coordinates in
+   * device space as doubles.
+   */
+  void (*draw_trapezoid) (PangoRenderer  *renderer,
+                         PangoRenderPart part,
+                         double          y1_,
+                         double          x11,
+                         double          x21,
+                         double          y2,
+                         double          x12,
+                         double          x22);
+  void (*draw_glyph) (PangoRenderer *renderer,
+                     PangoFont     *font,
+                     PangoGlyph     glyph,
+                     double         x,
+                     double         y);
+
+  /* Notification of change in rendering attributes
+   */
+  void (*part_changed) (PangoRenderer   *renderer,
+                       PangoRenderPart  part);
+
+  /* Paired around drawing operations
+   */
+  void (*begin) (PangoRenderer *renderer);
+  void (*end)   (PangoRenderer *renderer);
+
+  /* Hooks into the details of layout rendering
+   */
+  void (*prepare_run) (PangoRenderer  *renderer,
+                      PangoLayoutRun *run);
+
+  /* All of the following have default implementations
+   * and take as coordinates user coordinates in Pango units
+   */
+  void (*draw_glyph_item) (PangoRenderer     *renderer,
+                          const char        *text,
+                          PangoGlyphItem    *glyph_item,
+                          int                x,
+                          int                y);
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+GType pango_renderer_get_type    (void) G_GNUC_CONST;
+
+void pango_renderer_draw_layout          (PangoRenderer    *renderer,
+                                         PangoLayout      *layout,
+                                         int               x,
+                                         int               y);
+void pango_renderer_draw_layout_line     (PangoRenderer    *renderer,
+                                         PangoLayoutLine  *line,
+                                         int               x,
+                                         int               y);
+void pango_renderer_draw_glyphs          (PangoRenderer    *renderer,
+                                         PangoFont        *font,
+                                         PangoGlyphString *glyphs,
+                                         int               x,
+                                         int               y);
+void pango_renderer_draw_glyph_item      (PangoRenderer    *renderer,
+                                         const char       *text,
+                                         PangoGlyphItem   *glyph_item,
+                                         int               x,
+                                         int               y);
+void pango_renderer_draw_rectangle       (PangoRenderer    *renderer,
+                                         PangoRenderPart   part,
+                                         int               x,
+                                         int               y,
+                                         int               width,
+                                         int               height);
+void pango_renderer_draw_error_underline (PangoRenderer    *renderer,
+                                         int               x,
+                                         int               y,
+                                         int               width,
+                                         int               height);
+void pango_renderer_draw_trapezoid       (PangoRenderer    *renderer,
+                                         PangoRenderPart   part,
+                                         double            y1_,
+                                         double            x11,
+                                         double            x21,
+                                         double            y2,
+                                         double            x12,
+                                         double            x22);
+void pango_renderer_draw_glyph           (PangoRenderer    *renderer,
+                                         PangoFont        *font,
+                                         PangoGlyph        glyph,
+                                         double            x,
+                                         double            y);
+
+void pango_renderer_activate             (PangoRenderer    *renderer);
+void pango_renderer_deactivate           (PangoRenderer    *renderer);
+
+void        pango_renderer_part_changed (PangoRenderer   *renderer,
+                                        PangoRenderPart  part);
+
+void        pango_renderer_set_color (PangoRenderer    *renderer,
+                                     PangoRenderPart   part,
+                                     const PangoColor *color);
+PangoColor *pango_renderer_get_color (PangoRenderer    *renderer,
+                                     PangoRenderPart   part);
+
+void                        pango_renderer_set_matrix (PangoRenderer     *renderer,
+                                                      const PangoMatrix *matrix);
+G_CONST_RETURN PangoMatrix *pango_renderer_get_matrix (PangoRenderer     *renderer);
+
+PangoLayout     *pango_renderer_get_layout      (PangoRenderer     *renderer);
+PangoLayoutLine *pango_renderer_get_layout_line (PangoRenderer     *renderer);
+
+G_END_DECLS
+
+#endif /* __PANGO_RENDERER_H_ */
+
diff --git a/pango/pango-script-lang-table.h b/pango/pango-script-lang-table.h
new file mode 100755 (executable)
index 0000000..072e192
--- /dev/null
@@ -0,0 +1,252 @@
+/* pango-script-lang-table.h:
+ * 
+ * Generated by gen-script-for-lang.c
+ * Date: 2009-03-14
+ * Source: fontconfig-2.6.99
+ * 
+ * Do not edit.
+ */
+typedef struct _PangoScriptForLang {
+  const char lang[7];
+  PangoScript scripts[3];
+} PangoScriptForLang;
+
+static const PangoScriptForLang pango_script_for_lang[] = {
+  { "aa",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "ab",     { PANGO_SCRIPT_CYRILLIC/*90*/ } },
+  { "af",     { PANGO_SCRIPT_LATIN/*69*/ } },
+  { "ak",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "am",     { PANGO_SCRIPT_ETHIOPIC/*264*/ } },
+  { "an",     { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "ar",     { PANGO_SCRIPT_ARABIC/*125*/ } },
+  { "as",     { PANGO_SCRIPT_BENGALI/*64*/ } },
+  { "ast",    { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "av",     { PANGO_SCRIPT_CYRILLIC/*67*/ } },
+  { "ay",     { PANGO_SCRIPT_LATIN/*60*/ } },
+  { "az-az",  { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "az-ir",  { PANGO_SCRIPT_ARABIC/*129*/ } },
+  { "ba",     { PANGO_SCRIPT_CYRILLIC/*82*/ } },
+  { "be",     { PANGO_SCRIPT_CYRILLIC/*68*/ } },
+  { "ber-dz", { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ber-ma", { PANGO_SCRIPT_TIFINAGH/*32*/ } },
+  { "bg",     { PANGO_SCRIPT_CYRILLIC/*60*/ } },
+  { "bh",     { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "bho",    { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "bi",     { PANGO_SCRIPT_LATIN/*58*/ } },
+  { "bin",    { PANGO_SCRIPT_LATIN/*76*/ } },
+  { "bm",     { PANGO_SCRIPT_LATIN/*60*/ } },
+  { "bn",     { PANGO_SCRIPT_BENGALI/*63*/ } },
+  { "bo",     { PANGO_SCRIPT_TIBETAN/*95*/ } },
+  { "br",     { PANGO_SCRIPT_LATIN/*64*/ } },
+  { "bs",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "bua",    { PANGO_SCRIPT_CYRILLIC/*70*/ } },
+  { "byn",    { PANGO_SCRIPT_ETHIOPIC/*255*/ } },
+  { "ca",     { PANGO_SCRIPT_LATIN/*74*/ } },
+  { "ce",     { PANGO_SCRIPT_CYRILLIC/*67*/ } },
+  { "ch",     { PANGO_SCRIPT_LATIN/*58*/ } },
+  { "chm",    { PANGO_SCRIPT_CYRILLIC/*76*/ } },
+  { "chr",    { PANGO_SCRIPT_CHEROKEE/*85*/ } },
+  { "co",     { PANGO_SCRIPT_LATIN/*84*/ } },
+  { "crh",    { PANGO_SCRIPT_LATIN/*68*/ } },
+  { "cs",     { PANGO_SCRIPT_LATIN/*82*/ } },
+  { "csb",    { PANGO_SCRIPT_LATIN/*74*/ } },
+  { "cu",     { PANGO_SCRIPT_CYRILLIC/*103*/ } },
+  { "cv",     { PANGO_SCRIPT_CYRILLIC/*72*/, PANGO_SCRIPT_LATIN/*2*/ } },
+  { "cy",     { PANGO_SCRIPT_LATIN/*78*/ } },
+  { "da",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "de",     { PANGO_SCRIPT_LATIN/*59*/ } },
+  { "dv",     { PANGO_SCRIPT_THAANA/*49*/ } },
+  { "dz",     { PANGO_SCRIPT_TIBETAN/*95*/ } },
+  { "ee",     { PANGO_SCRIPT_LATIN/*96*/ } },
+  { "el",     { PANGO_SCRIPT_GREEK/*69*/ } },
+  { "en",     { PANGO_SCRIPT_LATIN/*72*/ } },
+  { "eo",     { PANGO_SCRIPT_LATIN/*64*/ } },
+  { "es",     { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "et",     { PANGO_SCRIPT_LATIN/*64*/ } },
+  { "eu",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "fa",     { PANGO_SCRIPT_ARABIC/*129*/ } },
+  { "fat",    { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ff",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "fi",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "fil",    { PANGO_SCRIPT_LATIN/*84*/ } },
+  { "fj",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "fo",     { PANGO_SCRIPT_LATIN/*68*/ } },
+  { "fr",     { PANGO_SCRIPT_LATIN/*84*/ } },
+  { "fur",    { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "fy",     { PANGO_SCRIPT_LATIN/*75*/ } },
+  { "ga",     { PANGO_SCRIPT_LATIN/*80*/ } },
+  { "gd",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "gez",    { PANGO_SCRIPT_ETHIOPIC/*218*/ } },
+  { "gl",     { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "gn",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "gu",     { PANGO_SCRIPT_GUJARATI/*68*/ } },
+  { "gv",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "ha",     { PANGO_SCRIPT_LATIN/*60*/ } },
+  { "haw",    { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "he",     { PANGO_SCRIPT_HEBREW/*27*/ } },
+  { "hi",     { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "hne",    { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "ho",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "hr",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "hsb",    { PANGO_SCRIPT_LATIN/*72*/ } },
+  { "ht",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "hu",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "hy",     { PANGO_SCRIPT_ARMENIAN/*77*/ } },
+  { "hz",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "ia",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "id",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "ie",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "ig",     { PANGO_SCRIPT_LATIN/*58*/ } },
+  { "ii",     { PANGO_SCRIPT_YI/*1165*/ } },
+  { "ik",     { PANGO_SCRIPT_CYRILLIC/*68*/ } },
+  { "io",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "is",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "it",     { PANGO_SCRIPT_LATIN/*72*/ } },
+  { "iu",     { PANGO_SCRIPT_CANADIAN_ABORIGINAL/*161*/ } },
+  { "ja",     { PANGO_SCRIPT_HAN/*6356*/, PANGO_SCRIPT_KATAKANA/*88*/, PANGO_SCRIPT_HIRAGANA/*85*/ } },
+  { "jv",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "ka",     { PANGO_SCRIPT_GEORGIAN/*33*/ } },
+  { "kaa",    { PANGO_SCRIPT_CYRILLIC/*78*/ } },
+  { "kab",    { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ki",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "kj",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "kk",     { PANGO_SCRIPT_CYRILLIC/*77*/ } },
+  { "kl",     { PANGO_SCRIPT_LATIN/*81*/ } },
+  { "km",     { PANGO_SCRIPT_KHMER/*63*/ } },
+  { "kn",     { PANGO_SCRIPT_KANNADA/*70*/ } },
+  { "ko",     { PANGO_SCRIPT_HANGUL/*2443*/ } },
+  { "kok",    { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "kr",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "ks",     { PANGO_SCRIPT_ARABIC/*145*/ } },
+  { "ku-am",  { PANGO_SCRIPT_CYRILLIC/*64*/ } },
+  { "ku-iq",  { PANGO_SCRIPT_ARABIC/*32*/ } },
+  { "ku-ir",  { PANGO_SCRIPT_ARABIC/*32*/ } },
+  { "ku-tr",  { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "kum",    { PANGO_SCRIPT_CYRILLIC/*66*/ } },
+  { "kv",     { PANGO_SCRIPT_CYRILLIC/*70*/ } },
+  { "kw",     { PANGO_SCRIPT_LATIN/*64*/ } },
+  { "kwm",    { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "ky",     { PANGO_SCRIPT_CYRILLIC/*70*/ } },
+  { "la",     { PANGO_SCRIPT_LATIN/*68*/ } },
+  { "lb",     { PANGO_SCRIPT_LATIN/*75*/ } },
+  { "lez",    { PANGO_SCRIPT_CYRILLIC/*67*/ } },
+  { "lg",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "li",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "ln",     { PANGO_SCRIPT_LATIN/*78*/ } },
+  { "lo",     { PANGO_SCRIPT_LAO/*55*/ } },
+  { "lt",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "lv",     { PANGO_SCRIPT_LATIN/*78*/ } },
+  { "mai",    { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "mg",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "mh",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "mi",     { PANGO_SCRIPT_LATIN/*64*/ } },
+  { "mk",     { PANGO_SCRIPT_CYRILLIC/*42*/ } },
+  { "ml",     { PANGO_SCRIPT_MALAYALAM/*68*/ } },
+  { "mn-cn",  { PANGO_SCRIPT_MONGOLIAN/*130*/ } },
+  { "mn-mn",  { PANGO_SCRIPT_CYRILLIC/*70*/ } },
+  { "mo",     { PANGO_SCRIPT_CYRILLIC/*66*/, PANGO_SCRIPT_LATIN/*62*/ } },
+  { "mr",     { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "ms",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "mt",     { PANGO_SCRIPT_LATIN/*72*/ } },
+  { "my",     { PANGO_SCRIPT_MYANMAR/*48*/ } },
+  { "na",     { PANGO_SCRIPT_LATIN/*60*/ } },
+  { "nb",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "nds",    { PANGO_SCRIPT_LATIN/*59*/ } },
+  { "ne",     { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "ng",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "nl",     { PANGO_SCRIPT_LATIN/*82*/ } },
+  { "nn",     { PANGO_SCRIPT_LATIN/*76*/ } },
+  { "no",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "nr",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "nso",    { PANGO_SCRIPT_LATIN/*58*/ } },
+  { "nv",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ny",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "oc",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "om",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "or",     { PANGO_SCRIPT_ORIYA/*68*/ } },
+  { "os",     { PANGO_SCRIPT_CYRILLIC/*66*/ } },
+  { "ota",    { PANGO_SCRIPT_ARABIC/*37*/ } },
+  { "pa-in",  { PANGO_SCRIPT_GURMUKHI/*63*/ } },
+  { "pa-pk",  { PANGO_SCRIPT_ARABIC/*145*/ } },
+  { "pap-an", { PANGO_SCRIPT_LATIN/*72*/ } },
+  { "pap-aw", { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "pl",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ps-af",  { PANGO_SCRIPT_ARABIC/*49*/ } },
+  { "ps-pk",  { PANGO_SCRIPT_ARABIC/*49*/ } },
+  { "pt",     { PANGO_SCRIPT_LATIN/*82*/ } },
+  { "qu",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "rm",     { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "rn",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "ro",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "ru",     { PANGO_SCRIPT_CYRILLIC/*66*/ } },
+  { "rw",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "sa",     { PANGO_SCRIPT_DEVANAGARI/*68*/ } },
+  { "sah",    { PANGO_SCRIPT_CYRILLIC/*76*/ } },
+  { "sc",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "sco",    { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "sd",     { PANGO_SCRIPT_ARABIC/*54*/ } },
+  { "se",     { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "sel",    { PANGO_SCRIPT_CYRILLIC/*66*/ } },
+  { "sg",     { PANGO_SCRIPT_LATIN/*72*/ } },
+  { "sh",     { PANGO_SCRIPT_CYRILLIC/*94*/, PANGO_SCRIPT_LATIN/*62*/ } },
+  { "shs",    { PANGO_SCRIPT_LATIN/*46*/ } },
+  { "si",     { PANGO_SCRIPT_SINHALA/*73*/ } },
+  { "sid",    { PANGO_SCRIPT_ETHIOPIC/*281*/ } },
+  { "sk",     { PANGO_SCRIPT_LATIN/*86*/ } },
+  { "sl",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "sm",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "sma",    { PANGO_SCRIPT_LATIN/*60*/ } },
+  { "smj",    { PANGO_SCRIPT_LATIN/*60*/ } },
+  { "smn",    { PANGO_SCRIPT_LATIN/*68*/ } },
+  { "sms",    { PANGO_SCRIPT_LATIN/*80*/ } },
+  { "sn",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "so",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "sq",     { PANGO_SCRIPT_LATIN/*56*/ } },
+  { "sr",     { PANGO_SCRIPT_CYRILLIC/*60*/ } },
+  { "ss",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "st",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "su",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "sv",     { PANGO_SCRIPT_LATIN/*68*/ } },
+  { "sw",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "syr",    { PANGO_SCRIPT_SYRIAC/*45*/ } },
+  { "ta",     { PANGO_SCRIPT_TAMIL/*48*/ } },
+  { "te",     { PANGO_SCRIPT_TELUGU/*70*/ } },
+  { "tg",     { PANGO_SCRIPT_CYRILLIC/*78*/ } },
+  { "th",     { PANGO_SCRIPT_THAI/*73*/ } },
+  { "ti-er",  { PANGO_SCRIPT_ETHIOPIC/*255*/ } },
+  { "ti-et",  { PANGO_SCRIPT_ETHIOPIC/*281*/ } },
+  { "tig",    { PANGO_SCRIPT_ETHIOPIC/*221*/ } },
+  { "tk",     { PANGO_SCRIPT_LATIN/*68*/ } },
+  { "tl",     { PANGO_SCRIPT_LATIN/*84*/ } },
+  { "tn",     { PANGO_SCRIPT_LATIN/*58*/ } },
+  { "to",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "tr",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ts",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "tt",     { PANGO_SCRIPT_CYRILLIC/*76*/ } },
+  { "tw",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "ty",     { PANGO_SCRIPT_LATIN/*64*/ } },
+  { "tyv",    { PANGO_SCRIPT_CYRILLIC/*70*/ } },
+  { "ug",     { PANGO_SCRIPT_ARABIC/*125*/ } },
+  { "uk",     { PANGO_SCRIPT_CYRILLIC/*72*/ } },
+  { "ur",     { PANGO_SCRIPT_ARABIC/*145*/ } },
+  { "uz",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "ve",     { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "vi",     { PANGO_SCRIPT_LATIN/*186*/ } },
+  { "vo",     { PANGO_SCRIPT_LATIN/*54*/ } },
+  { "vot",    { PANGO_SCRIPT_LATIN/*62*/ } },
+  { "wa",     { PANGO_SCRIPT_LATIN/*70*/ } },
+  { "wal",    { PANGO_SCRIPT_ETHIOPIC/*281*/ } },
+  { "wen",    { PANGO_SCRIPT_LATIN/*76*/ } },
+  { "wo",     { PANGO_SCRIPT_LATIN/*66*/ } },
+  { "xh",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "yap",    { PANGO_SCRIPT_LATIN/*58*/ } },
+  { "yi",     { PANGO_SCRIPT_HEBREW/*27*/ } },
+  { "yo",     { PANGO_SCRIPT_LATIN/*114*/ } },
+  { "za",     { PANGO_SCRIPT_LATIN/*52*/ } },
+  { "zh-cn",  { PANGO_SCRIPT_HAN/*6763*/ } },
+  { "zh-hk",  { PANGO_SCRIPT_HAN/*2213*/ } },
+  { "zh-mo",  { PANGO_SCRIPT_HAN/*2213*/ } },
+  { "zh-sg",  { PANGO_SCRIPT_HAN/*6763*/ } },
+  { "zh-tw",  { PANGO_SCRIPT_HAN/*13063*/ } },
+  { "zu",     { PANGO_SCRIPT_LATIN/*52*/ } }
+};
diff --git a/pango/pango-script-private.h b/pango/pango-script-private.h
new file mode 100755 (executable)
index 0000000..b77209c
--- /dev/null
@@ -0,0 +1,56 @@
+/* Pango
+ * pango-script-private.h: Script tag handling, private definitions
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_SCRIPT_PRIVATE_H__
+#define __PANGO_SCRIPT_PRIVATE_H__
+
+#define PAREN_STACK_DEPTH 128
+
+typedef struct _ParenStackEntry ParenStackEntry;
+
+struct _ParenStackEntry
+{
+  int pair_index;
+  PangoScript script_code;
+};
+
+struct _PangoScriptIter
+{
+  const gchar *text_start;
+  const gchar *text_end;
+
+  const gchar *script_start;
+  const gchar *script_end;
+  PangoScript script_code;
+
+  ParenStackEntry paren_stack[PAREN_STACK_DEPTH];
+  int paren_sp;
+};
+
+PangoScriptIter *
+_pango_script_iter_init (PangoScriptIter *iter,
+                        const char      *text,
+                        int              length);
+
+void
+_pango_script_iter_fini (PangoScriptIter *iter);
+
+#endif /* __PANGO_SCRIPT_PRIVATE_H__ */
diff --git a/pango/pango-script.c b/pango/pango-script.c
new file mode 100755 (executable)
index 0000000..605e46e
--- /dev/null
@@ -0,0 +1,344 @@
+/* Pango
+ * pango-script.c: Script tag handling
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Implementation of pango_script_iter is derived from ICU:
+ *
+ *  icu/sources/common/usc_impl.c
+ *
+ **********************************************************************
+ *   Copyright (C) 1999-2002, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ **********************************************************************
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, and/or sell copies of the Software, and to permit persons
+ * to whom the Software is furnished to do so, provided that the above
+ * copyright notice(s) and this permission notice appear in all copies of
+ * the Software and that both the above copyright notice(s) and this
+ * permission notice appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+ * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale, use
+ * or other dealings in this Software without prior written authorization
+ * of the copyright holder.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include "pango-script.h"
+#include "pango-script-private.h"
+
+/**
+ * pango_script_for_unichar:
+ * @ch: a Unicode character
+ *
+ * Looks up the #PangoScript for a particular character (as defined by
+ * Unicode Standard Annex #24). No check is made for @ch being a
+ * valid Unicode character; if you pass in invalid character, the
+ * result is undefined.
+ *
+ * As of Pango 1.18, this function simply returns the return value of
+ * g_unichar_get_script().
+ *
+ * Return value: the #PangoScript for the character.
+ *
+ * Since: 1.4
+ **/
+PangoScript
+pango_script_for_unichar (gunichar ch)
+{
+  return g_unichar_get_script (ch);
+}
+
+/**********************************************************************/
+
+PangoScriptIter *
+_pango_script_iter_init (PangoScriptIter *iter,
+                        const char      *text,
+                        int              length)
+{
+  iter->text_start = text;
+  if (length >= 0)
+    iter->text_end = text + length;
+  else
+    iter->text_end = text + strlen (text);
+
+  iter->script_start = text;
+  iter->script_end = text;
+  iter->script_code = PANGO_SCRIPT_COMMON;
+
+  iter->paren_sp = -1;
+
+  pango_script_iter_next (iter);
+
+  return iter;
+}
+
+/**
+ * pango_script_iter_new:
+ * @text: a UTF-8 string
+ * @length: length of @text, or -1 if @text is nul-terminated.
+ *
+ * Create a new #PangoScriptIter, used to break a string of
+ * Unicode into runs by text. No copy is made of @text, so
+ * the caller needs to make sure it remains valid until
+ * the iterator is freed with pango_script_iter_free().
+ *
+ * Return value: the new script iterator, initialized
+ *  to point at the first range in the text, which should be
+ *  freed with pango_script_iter_free(). If the string is
+ *  empty, it will point at an empty range.
+ *
+ * Since: 1.4
+ **/
+PangoScriptIter *
+pango_script_iter_new (const char *text,
+                      int         length)
+{
+  return _pango_script_iter_init (g_slice_new (PangoScriptIter), text, length);
+}
+
+void
+_pango_script_iter_fini (PangoScriptIter *iter)
+{
+}
+
+/**
+ * pango_script_iter_free:
+ * @iter: a #PangoScriptIter
+ *
+ * Frees a #PangoScriptIter created with pango_script_iter_new().
+ *
+ * Since: 1.4
+ **/
+void
+pango_script_iter_free (PangoScriptIter *iter)
+{
+  _pango_script_iter_fini (iter);
+  g_slice_free (PangoScriptIter, iter);
+}
+
+/**
+ * pango_script_iter_get_range:
+ * @iter: a #PangoScriptIter
+ * @start: location to store start position of the range, or %NULL
+ * @end: location to store end position of the range, or %NULL
+ * @script: location to store script for range, or %NULL
+ *
+ * Gets information about the range to which @iter currently points.
+ * The range is the set of locations p where *start <= p < *end.
+ * (That is, it doesn't include the character stored at *end)
+ *
+ * Since: 1.4
+ **/
+void
+pango_script_iter_get_range (PangoScriptIter      *iter,
+                            G_CONST_RETURN char **start,
+                            G_CONST_RETURN char **end,
+                            PangoScript          *script)
+{
+  if (start)
+    *start = iter->script_start;
+  if (end)
+    *end = iter->script_end;
+  if (script)
+    *script = iter->script_code;
+}
+
+static const gunichar paired_chars[] = {
+  0x0028, 0x0029, /* ascii paired punctuation */
+  0x003c, 0x003e,
+  0x005b, 0x005d,
+  0x007b, 0x007d,
+  0x00ab, 0x00bb, /* guillemets */
+  0x2018, 0x2019, /* general punctuation */
+  0x201c, 0x201d,
+  0x2039, 0x203a,
+  0x3008, 0x3009, /* chinese paired punctuation */
+  0x300a, 0x300b,
+  0x300c, 0x300d,
+  0x300e, 0x300f,
+  0x3010, 0x3011,
+  0x3014, 0x3015,
+  0x3016, 0x3017,
+  0x3018, 0x3019,
+  0x301a, 0x301b
+};
+
+static int
+get_pair_index (gunichar ch)
+{
+  int lower = 0;
+  int upper = G_N_ELEMENTS (paired_chars) - 1;
+
+  while (lower <= upper)
+    {
+      int mid = (lower + upper) / 2;
+
+      if (ch < paired_chars[mid])
+       upper = mid - 1;
+      else if (ch > paired_chars[mid])
+       lower = mid + 1;
+      else
+       return mid;
+    }
+
+  return -1;
+}
+
+/* duplicated in pango-language.c */
+#define REAL_SCRIPT(script) \
+  ((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN)
+
+#define SAME_SCRIPT(script1, script2) \
+  (!REAL_SCRIPT (script1) || !REAL_SCRIPT (script2) || (script1) == (script2))
+
+#define IS_OPEN(pair_index) (((pair_index) & 1) == 0)
+
+/**
+ * pango_script_iter_next:
+ * @iter: a #PangoScriptIter
+ *
+ * Advances a #PangoScriptIter to the next range. If @iter
+ * is already at the end, it is left unchanged and %FALSE
+ * is returned.
+ *
+ * Return value: %TRUE if @iter was successfully advanced.
+ *
+ * Since: 1.4
+ **/
+gboolean
+pango_script_iter_next (PangoScriptIter *iter)
+{
+  int start_sp;
+
+  if (iter->script_end == iter->text_end)
+    return FALSE;
+
+  start_sp = iter->paren_sp;
+  iter->script_code = PANGO_SCRIPT_COMMON;
+  iter->script_start = iter->script_end;
+
+  for (; iter->script_end < iter->text_end; iter->script_end = g_utf8_next_char (iter->script_end))
+    {
+      gunichar ch = g_utf8_get_char (iter->script_end);
+      PangoScript sc;
+      int pair_index;
+
+      sc = pango_script_for_unichar (ch);
+      if (sc != PANGO_SCRIPT_COMMON)
+       pair_index = -1;
+      else
+       pair_index = get_pair_index (ch);
+
+      /*
+       * Paired character handling:
+       *
+       * if it's an open character, push it onto the stack.
+       * if it's a close character, find the matching open on the
+       * stack, and use that script code. Any non-matching open
+       * characters above it on the stack will be poped.
+       */
+      if (pair_index >= 0)
+       {
+         if (IS_OPEN (pair_index))
+           {
+             /*
+              * If the paren stack is full, empty it. This
+              * means that deeply nested paired punctuation
+              * characters will be ignored, but that's an unusual
+              * case, and it's better to ignore them than to
+              * write off the end of the stack...
+              */
+             if (++iter->paren_sp >= PAREN_STACK_DEPTH)
+               iter->paren_sp = 0;
+
+             iter->paren_stack[iter->paren_sp].pair_index = pair_index;
+             iter->paren_stack[iter->paren_sp].script_code = iter->script_code;
+           }
+         else if (iter->paren_sp >= 0)
+           {
+             int pi = pair_index & ~1;
+
+             while (iter->paren_sp >= 0 && iter->paren_stack[iter->paren_sp].pair_index != pi)
+               iter->paren_sp--;
+
+             if (iter->paren_sp < start_sp)
+               start_sp = iter->paren_sp;
+
+             if (iter->paren_sp >= 0)
+               sc = iter->paren_stack[iter->paren_sp].script_code;
+           }
+       }
+
+      if (SAME_SCRIPT (iter->script_code, sc))
+       {
+         if (!REAL_SCRIPT (iter->script_code) && REAL_SCRIPT (sc))
+           {
+             iter->script_code = sc;
+
+             /*
+              * now that we have a final script code, fix any open
+              * characters we pushed before we knew the script code.
+              */
+             while (start_sp < iter->paren_sp)
+               iter->paren_stack[++start_sp].script_code = iter->script_code;
+           }
+
+         /*
+          * if this character is a close paired character,
+          * pop it from the stack
+          */
+         if (pair_index >= 0 && !IS_OPEN (pair_index) && iter->paren_sp >= 0)
+           {
+             iter->paren_sp--;
+
+             if (iter->paren_sp < start_sp)
+               start_sp = iter->paren_sp;
+           }
+       }
+      else
+       {
+         /* Different script, we're done */
+         break;
+       }
+    }
+
+  return TRUE;
+}
+
+/**********************************************************
+ * End of code from ICU
+ **********************************************************/
diff --git a/pango/pango-script.h b/pango/pango-script.h
new file mode 100755 (executable)
index 0000000..32ef737
--- /dev/null
@@ -0,0 +1,144 @@
+/* Pango
+ * pango-script.h: Script tag handling
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_SCRIPT_H__
+#define __PANGO_SCRIPT_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PangoScriptIter:
+ *
+ * A #PangoScriptIter is used to iterate through a string
+ * and identify ranges in different scripts.
+ **/
+typedef struct _PangoScriptIter PangoScriptIter;
+
+typedef enum {                         /* ISO 15924 code */
+      PANGO_SCRIPT_INVALID_CODE = -1,
+      PANGO_SCRIPT_COMMON       = 0,   /* Zyyy */
+      PANGO_SCRIPT_INHERITED,          /* Qaai */
+      PANGO_SCRIPT_ARABIC,             /* Arab */
+      PANGO_SCRIPT_ARMENIAN,           /* Armn */
+      PANGO_SCRIPT_BENGALI,            /* Beng */
+      PANGO_SCRIPT_BOPOMOFO,           /* Bopo */
+      PANGO_SCRIPT_CHEROKEE,           /* Cher */
+      PANGO_SCRIPT_COPTIC,             /* Qaac */
+      PANGO_SCRIPT_CYRILLIC,           /* Cyrl (Cyrs) */
+      PANGO_SCRIPT_DESERET,            /* Dsrt */
+      PANGO_SCRIPT_DEVANAGARI,         /* Deva */
+      PANGO_SCRIPT_ETHIOPIC,           /* Ethi */
+      PANGO_SCRIPT_GEORGIAN,           /* Geor (Geon, Geoa) */
+      PANGO_SCRIPT_GOTHIC,             /* Goth */
+      PANGO_SCRIPT_GREEK,              /* Grek */
+      PANGO_SCRIPT_GUJARATI,           /* Gujr */
+      PANGO_SCRIPT_GURMUKHI,           /* Guru */
+      PANGO_SCRIPT_HAN,                /* Hani */
+      PANGO_SCRIPT_HANGUL,             /* Hang */
+      PANGO_SCRIPT_HEBREW,             /* Hebr */
+      PANGO_SCRIPT_HIRAGANA,           /* Hira */
+      PANGO_SCRIPT_KANNADA,            /* Knda */
+      PANGO_SCRIPT_KATAKANA,           /* Kana */
+      PANGO_SCRIPT_KHMER,              /* Khmr */
+      PANGO_SCRIPT_LAO,                /* Laoo */
+      PANGO_SCRIPT_LATIN,              /* Latn (Latf, Latg) */
+      PANGO_SCRIPT_MALAYALAM,          /* Mlym */
+      PANGO_SCRIPT_MONGOLIAN,          /* Mong */
+      PANGO_SCRIPT_MYANMAR,            /* Mymr */
+      PANGO_SCRIPT_OGHAM,              /* Ogam */
+      PANGO_SCRIPT_OLD_ITALIC,         /* Ital */
+      PANGO_SCRIPT_ORIYA,              /* Orya */
+      PANGO_SCRIPT_RUNIC,              /* Runr */
+      PANGO_SCRIPT_SINHALA,            /* Sinh */
+      PANGO_SCRIPT_SYRIAC,             /* Syrc (Syrj, Syrn, Syre) */
+      PANGO_SCRIPT_TAMIL,              /* Taml */
+      PANGO_SCRIPT_TELUGU,             /* Telu */
+      PANGO_SCRIPT_THAANA,             /* Thaa */
+      PANGO_SCRIPT_THAI,               /* Thai */
+      PANGO_SCRIPT_TIBETAN,            /* Tibt */
+      PANGO_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */
+      PANGO_SCRIPT_YI,                 /* Yiii */
+      PANGO_SCRIPT_TAGALOG,            /* Tglg */
+      PANGO_SCRIPT_HANUNOO,            /* Hano */
+      PANGO_SCRIPT_BUHID,              /* Buhd */
+      PANGO_SCRIPT_TAGBANWA,           /* Tagb */
+
+      /* Unicode-4.0 additions */
+      PANGO_SCRIPT_BRAILLE,            /* Brai */
+      PANGO_SCRIPT_CYPRIOT,            /* Cprt */
+      PANGO_SCRIPT_LIMBU,              /* Limb */
+      PANGO_SCRIPT_OSMANYA,            /* Osma */
+      PANGO_SCRIPT_SHAVIAN,            /* Shaw */
+      PANGO_SCRIPT_LINEAR_B,           /* Linb */
+      PANGO_SCRIPT_TAI_LE,             /* Tale */
+      PANGO_SCRIPT_UGARITIC,           /* Ugar */
+
+      /* Unicode-4.1 additions */
+      PANGO_SCRIPT_NEW_TAI_LUE,        /* Talu */
+      PANGO_SCRIPT_BUGINESE,           /* Bugi */
+      PANGO_SCRIPT_GLAGOLITIC,         /* Glag */
+      PANGO_SCRIPT_TIFINAGH,           /* Tfng */
+      PANGO_SCRIPT_SYLOTI_NAGRI,       /* Sylo */
+      PANGO_SCRIPT_OLD_PERSIAN,        /* Xpeo */
+      PANGO_SCRIPT_KHAROSHTHI,         /* Khar */
+
+      /* Unicode-5.0 additions */
+      PANGO_SCRIPT_UNKNOWN,            /* Zzzz */
+      PANGO_SCRIPT_BALINESE,           /* Bali */
+      PANGO_SCRIPT_CUNEIFORM,          /* Xsux */
+      PANGO_SCRIPT_PHOENICIAN,         /* Phnx */
+      PANGO_SCRIPT_PHAGS_PA,           /* Phag */
+      PANGO_SCRIPT_NKO,                /* Nkoo */
+
+      /* Unicode-5.1 additions */
+      PANGO_SCRIPT_KAYAH_LI,           /* Kali */
+      PANGO_SCRIPT_LEPCHA,             /* Lepc */
+      PANGO_SCRIPT_REJANG,             /* Rjng */
+      PANGO_SCRIPT_SUNDANESE,          /* Sund */
+      PANGO_SCRIPT_SAURASHTRA,         /* Saur */
+      PANGO_SCRIPT_CHAM,               /* Cham */
+      PANGO_SCRIPT_OL_CHIKI,           /* Olck */
+      PANGO_SCRIPT_VAI,                /* Vaii */
+      PANGO_SCRIPT_CARIAN,             /* Cari */
+      PANGO_SCRIPT_LYCIAN,             /* Lyci */
+      PANGO_SCRIPT_LYDIAN              /* Lydi */
+} PangoScript;
+
+PangoScript pango_script_for_unichar         (gunichar             ch) G_GNUC_CONST;
+
+PangoScriptIter *pango_script_iter_new       (const char          *text,
+                                             int                  length);
+void             pango_script_iter_get_range (PangoScriptIter      *iter,
+                                             G_CONST_RETURN char **start,
+                                             G_CONST_RETURN char **end,
+                                             PangoScript          *script);
+gboolean         pango_script_iter_next      (PangoScriptIter      *iter);
+void             pango_script_iter_free      (PangoScriptIter      *iter);
+
+#include <pango/pango-language.h>
+
+PangoLanguage *pango_script_get_sample_language (PangoScript    script) G_GNUC_PURE;
+
+G_END_DECLS
+
+#endif /* __PANGO_SCRIPT_H__ */
diff --git a/pango/pango-tabs.c b/pango/pango-tabs.c
new file mode 100755 (executable)
index 0000000..6091d27
--- /dev/null
@@ -0,0 +1,370 @@
+/* Pango
+ * pango-tabs.c: Tab-related stuff
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pango-tabs.h"
+#include "pango-impl-utils.h"
+#include <string.h>
+
+typedef struct _PangoTab PangoTab;
+
+struct _PangoTab
+{
+  gint location;               /* Offset in pixels of this tab stop
+                                * from the left margin of the text.
+                                */
+  PangoTabAlign alignment;      /* Where the tab stop appears relative
+                                * to the text.
+                                */
+};
+
+struct _PangoTabArray
+{
+  gint size;
+  gint allocated;
+  gboolean positions_in_pixels;
+  PangoTab *tabs;
+};
+
+static void
+init_tabs (PangoTabArray *array, gint start, gint end)
+{
+  while (start < end)
+    {
+      array->tabs[start].location = 0;
+      array->tabs[start].alignment = PANGO_TAB_LEFT;
+      ++start;
+    }
+}
+
+/**
+ * pango_tab_array_new:
+ * @initial_size: Initial number of tab stops to allocate, can be 0
+ * @positions_in_pixels: whether positions are in pixel units
+ *
+ * Creates an array of @initial_size tab stops. Tab stops are specified in
+ * pixel units if @positions_in_pixels is %TRUE, otherwise in Pango
+ * units. All stops are initially at position 0.
+ *
+ * Return value: the newly allocated #PangoTabArray, which should
+ *               be freed with pango_tab_array_free().
+ **/
+PangoTabArray*
+pango_tab_array_new (gint initial_size,
+                    gboolean positions_in_pixels)
+{
+  PangoTabArray *array;
+
+  g_return_val_if_fail (initial_size >= 0, NULL);
+
+  /* alloc enough to treat array->tabs as an array of length
+   * size, though it's declared as an array of length 1.
+   * If we allowed tab array resizing we'd need to drop this
+   * optimization.
+   */
+  array = g_slice_new (PangoTabArray);
+  array->size = initial_size;
+  array->allocated = initial_size;
+
+  if (array->allocated > 0)
+    {
+      array->tabs = g_new (PangoTab, array->allocated);
+      init_tabs (array, 0, array->allocated);
+    }
+  else
+    array->tabs = NULL;
+
+  array->positions_in_pixels = positions_in_pixels;
+
+  return array;
+}
+
+/**
+ * pango_tab_array_new_with_positions:
+ * @size: number of tab stops in the array
+ * @positions_in_pixels: whether positions are in pixel units
+ * @first_alignment: alignment of first tab stop
+ * @first_position: position of first tab stop
+ * @varargs: additional alignment/position pairs
+ *
+ * This is a convenience function that creates a #PangoTabArray
+ * and allows you to specify the alignment and position of each
+ * tab stop. You <emphasis>must</emphasis> provide an alignment
+ * and position for @size tab stops.
+ *
+ * Return value: the newly allocated #PangoTabArray, which should
+ *               be freed with pango_tab_array_free().
+ **/
+PangoTabArray  *
+pango_tab_array_new_with_positions (gint           size,
+                                   gboolean       positions_in_pixels,
+                                   PangoTabAlign  first_alignment,
+                                   gint           first_position,
+                                   ...)
+{
+  PangoTabArray *array;
+  va_list args;
+  int i;
+
+  g_return_val_if_fail (size >= 0, NULL);
+
+  array = pango_tab_array_new (size, positions_in_pixels);
+
+  if (size == 0)
+    return array;
+
+  array->tabs[0].alignment = first_alignment;
+  array->tabs[0].location = first_position;
+
+  if (size == 1)
+    return array;
+
+  va_start (args, first_position);
+
+  i = 1;
+  while (i < size)
+    {
+      PangoTabAlign align = va_arg (args, PangoTabAlign);
+      int pos = va_arg (args, int);
+
+      array->tabs[i].alignment = align;
+      array->tabs[i].location = pos;
+
+      ++i;
+    }
+
+  va_end (args);
+
+  return array;
+}
+
+GType
+pango_tab_array_get_type (void)
+{
+  static GType our_type = 0;
+
+  if (G_UNLIKELY (our_type == 0))
+    our_type = g_boxed_type_register_static (I_("PangoTabArray"),
+                                            (GBoxedCopyFunc)pango_tab_array_copy,
+                                            (GBoxedFreeFunc)pango_tab_array_free);
+  return our_type;
+}
+
+/**
+ * pango_tab_array_copy:
+ * @src: #PangoTabArray to copy
+ *
+ * Copies a #PangoTabArray
+ *
+ * Return value: the newly allocated #PangoTabArray, which should
+ *               be freed with pango_tab_array_free().
+ **/
+PangoTabArray*
+pango_tab_array_copy (PangoTabArray *src)
+{
+  PangoTabArray *copy;
+
+  g_return_val_if_fail (src != NULL, NULL);
+
+  copy = pango_tab_array_new (src->size, src->positions_in_pixels);
+
+  memcpy (copy->tabs, src->tabs, sizeof(PangoTab)*src->size);
+
+  return copy;
+}
+
+/**
+ * pango_tab_array_free:
+ * @tab_array: a #PangoTabArray
+ *
+ * Frees a tab array and associated resources.
+ *
+ **/
+void
+pango_tab_array_free   (PangoTabArray *tab_array)
+{
+  g_return_if_fail (tab_array != NULL);
+
+  g_free (tab_array->tabs);
+
+  g_slice_free (PangoTabArray, tab_array);
+}
+
+/**
+ * pango_tab_array_get_size:
+ * @tab_array: a #PangoTabArray
+ *
+ * Gets the number of tab stops in @tab_array.
+ *
+ * Return value: the number of tab stops in the array.
+ **/
+gint
+pango_tab_array_get_size (PangoTabArray *tab_array)
+{
+  g_return_val_if_fail (tab_array != NULL, 0);
+
+  return tab_array->size;
+}
+
+/**
+ * pango_tab_array_resize:
+ * @tab_array: a #PangoTabArray
+ * @new_size: new size of the array
+ *
+ * Resizes a tab array. You must subsequently initialize any tabs that
+ * were added as a result of growing the array.
+ *
+ **/
+void
+pango_tab_array_resize (PangoTabArray *tab_array,
+                       gint           new_size)
+{
+  if (new_size > tab_array->allocated)
+    {
+      gint current_end = tab_array->allocated;
+
+      /* Ratchet allocated size up above the index. */
+      if (tab_array->allocated == 0)
+       tab_array->allocated = 2;
+
+      while (new_size > tab_array->allocated)
+       tab_array->allocated = tab_array->allocated * 2;
+
+      tab_array->tabs = g_renew (PangoTab, tab_array->tabs,
+                                tab_array->allocated);
+
+      init_tabs (tab_array, current_end, tab_array->allocated);
+    }
+
+  tab_array->size = new_size;
+}
+
+/**
+ * pango_tab_array_set_tab:
+ * @tab_array: a #PangoTabArray
+ * @tab_index: the index of a tab stop
+ * @alignment: tab alignment
+ * @location: tab location in Pango units
+ *
+ * Sets the alignment and location of a tab stop.
+ * @alignment must always be #PANGO_TAB_LEFT in the current
+ * implementation.
+ *
+ **/
+void
+pango_tab_array_set_tab  (PangoTabArray *tab_array,
+                         gint           tab_index,
+                         PangoTabAlign  alignment,
+                         gint           location)
+{
+  g_return_if_fail (tab_array != NULL);
+  g_return_if_fail (tab_index >= 0);
+  g_return_if_fail (alignment == PANGO_TAB_LEFT);
+  g_return_if_fail (location >= 0);
+
+  if (tab_index >= tab_array->size)
+    pango_tab_array_resize (tab_array, tab_index + 1);
+
+  tab_array->tabs[tab_index].alignment = alignment;
+  tab_array->tabs[tab_index].location = location;
+}
+
+/**
+ * pango_tab_array_get_tab:
+ * @tab_array: a #PangoTabArray
+ * @tab_index: tab stop index
+ * @alignment: location to store alignment, or %NULL
+ * @location: location to store tab position, or %NULL
+ *
+ * Gets the alignment and position of a tab stop.
+ *
+ **/
+void
+pango_tab_array_get_tab  (PangoTabArray *tab_array,
+                         gint           tab_index,
+                         PangoTabAlign *alignment,
+                         gint          *location)
+{
+  g_return_if_fail (tab_array != NULL);
+  g_return_if_fail (tab_index < tab_array->size);
+  g_return_if_fail (tab_index >= 0);
+
+  if (alignment)
+    *alignment = tab_array->tabs[tab_index].alignment;
+
+  if (location)
+    *location = tab_array->tabs[tab_index].location;
+}
+
+/**
+ * pango_tab_array_get_tabs:
+ * @tab_array: a #PangoTabArray
+ * @alignments: location to store an array of tab stop alignments, or %NULL
+ * @locations: location to store an array of tab positions, or %NULL
+ *
+ * If non-%NULL, @alignments and @locations are filled with allocated
+ * arrays of length pango_tab_array_get_size(). You must free the
+ * returned array.
+ *
+ **/
+void
+pango_tab_array_get_tabs (PangoTabArray *tab_array,
+                         PangoTabAlign **alignments,
+                         gint          **locations)
+{
+  gint i;
+
+  g_return_if_fail (tab_array != NULL);
+
+  if (alignments)
+    *alignments = g_new (PangoTabAlign, tab_array->size);
+
+  if (locations)
+    *locations = g_new (gint, tab_array->size);
+
+  i = 0;
+  while (i < tab_array->size)
+    {
+      if (alignments)
+       (*alignments)[i] = tab_array->tabs[i].alignment;
+      if (locations)
+       (*locations)[i] = tab_array->tabs[i].location;
+
+      ++i;
+    }
+}
+
+/**
+ * pango_tab_array_get_positions_in_pixels:
+ * @tab_array: a #PangoTabArray
+ *
+ * Returns %TRUE if the tab positions are in pixels, %FALSE if they are
+ * in Pango units.
+ *
+ * Return value: whether positions are in pixels.
+ **/
+gboolean
+pango_tab_array_get_positions_in_pixels (PangoTabArray *tab_array)
+{
+  g_return_val_if_fail (tab_array != NULL, FALSE);
+
+  return tab_array->positions_in_pixels;
+}
diff --git a/pango/pango-tabs.h b/pango/pango-tabs.h
new file mode 100755 (executable)
index 0000000..7f52d1d
--- /dev/null
@@ -0,0 +1,76 @@
+/* Pango
+ * pango-tabs.h: Tab-related stuff
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_TABS_H__
+#define __PANGO_TABS_H__
+
+#include <pango/pango-types.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoTabArray PangoTabArray;
+
+typedef enum
+{
+  PANGO_TAB_LEFT
+
+  /* These are not supported now, but may be in the
+   * future.
+   *
+   *  PANGO_TAB_RIGHT,
+   *  PANGO_TAB_CENTER,
+   *  PANGO_TAB_NUMERIC
+   */
+} PangoTabAlign;
+
+#define PANGO_TYPE_TAB_ARRAY (pango_tab_array_get_type ())
+
+PangoTabArray  *pango_tab_array_new                 (gint           initial_size,
+                                                    gboolean       positions_in_pixels);
+PangoTabArray  *pango_tab_array_new_with_positions  (gint           size,
+                                                    gboolean       positions_in_pixels,
+                                                    PangoTabAlign  first_alignment,
+                                                    gint           first_position,
+                                                    ...);
+GType           pango_tab_array_get_type            (void) G_GNUC_CONST;
+PangoTabArray  *pango_tab_array_copy                (PangoTabArray *src);
+void            pango_tab_array_free                (PangoTabArray *tab_array);
+gint            pango_tab_array_get_size            (PangoTabArray *tab_array);
+void            pango_tab_array_resize              (PangoTabArray *tab_array,
+                                                    gint           new_size);
+void            pango_tab_array_set_tab             (PangoTabArray *tab_array,
+                                                    gint           tab_index,
+                                                    PangoTabAlign  alignment,
+                                                    gint           location);
+void            pango_tab_array_get_tab             (PangoTabArray *tab_array,
+                                                    gint           tab_index,
+                                                    PangoTabAlign *alignment,
+                                                    gint          *location);
+void            pango_tab_array_get_tabs            (PangoTabArray *tab_array,
+                                                    PangoTabAlign **alignments,
+                                                    gint          **locations);
+
+gboolean        pango_tab_array_get_positions_in_pixels (PangoTabArray *tab_array);
+
+
+G_END_DECLS
+
+#endif /* __PANGO_TABS_H__ */
diff --git a/pango/pango-types.h b/pango/pango-types.h
new file mode 100755 (executable)
index 0000000..c4ef843
--- /dev/null
@@ -0,0 +1,100 @@
+/* Pango
+ * pango-types.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_TYPES_H__
+#define __PANGO_TYPES_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _PangoLogAttr PangoLogAttr;
+
+typedef struct _PangoEngineLang PangoEngineLang;
+typedef struct _PangoEngineShape PangoEngineShape;
+
+typedef struct _PangoFont    PangoFont;
+typedef struct _PangoFontMap PangoFontMap;
+
+typedef struct _PangoRectangle PangoRectangle;
+
+
+
+/* A index of a glyph into a font. Rendering system dependent */
+typedef guint32 PangoGlyph;
+
+
+
+#define PANGO_SCALE 1024
+#define PANGO_PIXELS(d) (((int)(d) + 512) >> 10)
+#define PANGO_PIXELS_FLOOR(d) (((int)(d)) >> 10)
+#define PANGO_PIXELS_CEIL(d) (((int)(d) + 1023) >> 10)
+/* The above expressions are just slightly wrong for floating point d;
+ * For example we'd expect PANGO_PIXELS(-512.5) => -1 but instead we get 0.
+ * That's unlikely to matter for practical use and the expression is much
+ * more compact and faster than alternatives that work exactly for both
+ * integers and floating point.
+ *
+ * PANGO_PIXELS also behaves differently for +512 and -512.
+ */
+
+#define PANGO_UNITS_ROUND(d)                           \
+  (((d) + (PANGO_SCALE >> 1)) & ~(PANGO_SCALE - 1))
+
+
+int    pango_units_from_double (double d) G_GNUC_CONST;
+double pango_units_to_double (int i) G_GNUC_CONST;
+
+
+
+/* A rectangle. Used to store logical and physical extents of glyphs,
+ * runs, strings, etc.
+ */
+struct _PangoRectangle
+{
+  int x;
+  int y;
+  int width;
+  int height;
+};
+
+/* Macros to translate from extents rectangles to ascent/descent/lbearing/rbearing
+ */
+#define PANGO_ASCENT(rect) (-(rect).y)
+#define PANGO_DESCENT(rect) ((rect).y + (rect).height)
+#define PANGO_LBEARING(rect) ((rect).x)
+#define PANGO_RBEARING(rect) ((rect).x + (rect).width)
+
+void pango_extents_to_pixels (PangoRectangle *inclusive,
+                             PangoRectangle *nearest);
+
+
+#include <pango/pango-gravity.h>
+#include <pango/pango-language.h>
+#include <pango/pango-matrix.h>
+#include <pango/pango-script.h>
+#include <pango/pango-bidi-type.h>
+
+
+G_END_DECLS
+
+#endif /* __PANGO_TYPES_H__ */
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
new file mode 100755 (executable)
index 0000000..100dbc7
--- /dev/null
@@ -0,0 +1,1414 @@
+/* Pango
+ * pango-utils.c: Utilities for internal functions and modules
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <locale.h>
+
+#include "pango-font.h"
+#include "pango-features.h"
+#include "pango-impl-utils.h"
+
+#include <glib/gstdio.h>
+
+#ifndef HAVE_FLOCKFILE
+#  define flockfile(f) (void)1
+#  define funlockfile(f) (void)1
+#  define getc_unlocked(f) getc(f)
+#endif /* !HAVE_FLOCKFILE */
+
+#ifdef G_OS_WIN32
+
+#include <sys/types.h>
+
+#define STRICT
+#include <windows.h>
+
+#endif
+
+struct PangoAlias
+{
+  char *alias;
+  int n_families;
+  char **families;
+  gboolean visible; /* Do we want/need this? */
+};
+
+static GHashTable *pango_aliases_ht = NULL;
+
+/**
+ * pango_version:
+ *
+ * This is similar to the macro %PANGO_VERSION except that
+ * it returns the encoded version of Pango available at run-time,
+ * as opposed to the version available at compile-time.
+ *
+ * A version number can be encoded into an integer using
+ * PANGO_VERSION_ENCODE().
+ *
+ * Returns: The encoded version of Pango library
+ *   available at run time.
+ *
+ * Since: 1.16
+ **/
+int
+pango_version (void)
+{
+  return PANGO_VERSION;
+}
+
+/**
+ * pango_version_string:
+ *
+ * This is similar to the macro %PANGO_VERSION_STRING except that
+ * it returns the version of Pango available at run-time, as opposed to
+ * the version available at compile-time.
+ *
+ * Returns: A string containing the version of Pango library
+ *   available at run time.
+ *   The returned string is owned by Pango and should not be modified
+ *   or freed.
+ *
+ * Since: 1.16
+ **/
+const char *
+pango_version_string (void)
+{
+  return PANGO_VERSION_STRING;
+}
+
+/**
+ * pango_version_check:
+ * @required_major: the required major version.
+ * @required_minor: the required minor version.
+ * @required_micro: the required major version.
+ *
+ * Checks that the Pango library in use is compatible with the
+ * given version. Generally you would pass in the constants
+ * %PANGO_VERSION_MAJOR, %PANGO_VERSION_MINOR, %PANGO_VERSION_MICRO
+ * as the three arguments to this function; that produces
+ * a check that the library in use at run-time is compatible with
+ * the version of Pango the application or module was compiled against.
+ *
+ * Compatibility is defined by two things: first the version
+ * of the running library is newer than the version
+ * @required_major.required_minor.@required_micro. Second
+ * the running library must be binary compatible with the
+ * version @required_major.required_minor.@required_micro
+ * (same major version.)
+ *
+ * For compile-time version checking use PANGO_VERSION_CHECK().
+ *
+ * Return value: %NULL if the Pango library is compatible with the
+ *   given version, or a string describing the version mismatch.
+ *   The returned string is owned by Pango and should not be modified
+ *   or freed.
+ *
+ * Since: 1.16
+ **/
+const gchar*
+pango_version_check (int required_major,
+                    int required_minor,
+                    int required_micro)
+{
+  gint pango_effective_micro = 100 * PANGO_VERSION_MINOR + PANGO_VERSION_MICRO;
+  gint required_effective_micro = 100 * required_minor + required_micro;
+
+  if (required_major < PANGO_VERSION_MAJOR)
+    return "Pango version too new (major mismatch)";
+  if (required_effective_micro < pango_effective_micro - PANGO_BINARY_AGE)
+    return "Pango version too new (micro mismatch)";
+  if (required_effective_micro > pango_effective_micro)
+    return "Pango version too old (micro mismatch)";
+  return NULL;
+}
+
+/**
+ * pango_trim_string:
+ * @str: a string
+ *
+ * Trims leading and trailing whitespace from a string.
+ *
+ * Return value: A newly-allocated string that must be freed with g_free()
+ **/
+char *
+pango_trim_string (const char *str)
+{
+  int len;
+
+  g_return_val_if_fail (str != NULL, NULL);
+
+  while (*str && g_ascii_isspace (*str))
+    str++;
+
+  len = strlen (str);
+  while (len > 0 && g_ascii_isspace (str[len-1]))
+    len--;
+
+  return g_strndup (str, len);
+}
+
+/**
+ * pango_split_file_list:
+ * @str: a %G_SEARCHPATH_SEPARATOR separated list of filenames
+ *
+ * Splits a %G_SEARCHPATH_SEPARATOR-separated list of files, stripping
+ * white space and substituting ~/ with $HOME/.
+ *
+ * Return value: a list of strings to be freed with g_strfreev()
+ **/
+char **
+pango_split_file_list (const char *str)
+{
+  int i = 0;
+  int j;
+  char **files;
+
+  files = g_strsplit (str, G_SEARCHPATH_SEPARATOR_S, -1);
+
+  while (files[i])
+    {
+      char *file = pango_trim_string (files[i]);
+
+      /* If the resulting file is empty, skip it */
+      if (file[0] == '\0')
+       {
+         g_free(file);
+         g_free (files[i]);
+
+         for (j = i + 1; files[j]; j++)
+           files[j - 1] = files[j];
+
+         files[j - 1] = NULL;
+
+         continue;
+       }
+#ifndef G_OS_WIN32
+      /* '~' is a quite normal and common character in file names on
+       * Windows, especially in the 8.3 versions of long file names, which
+       * still occur now and then. Also, few Windows user are aware of the
+       * Unix shell convention that '~' stands for the home directory,
+       * even if they happen to have a home directory.
+       */
+      if (file[0] == '~' && file[1] == G_DIR_SEPARATOR)
+       {
+         char *tmp = g_strconcat (g_get_home_dir(), file + 1, NULL);
+         g_free (file);
+         file = tmp;
+       }
+      else if (file[0] == '~' && file[1] == '\0')
+       {
+         g_free (file);
+         file = g_strdup (g_get_home_dir());
+       }
+#endif
+      g_free (files[i]);
+      files[i] = file;
+
+      i++;
+    }
+
+  return files;
+}
+
+/**
+ * pango_read_line:
+ * @stream: a stdio stream
+ * @str: #GString buffer into which to write the result
+ *
+ * Reads an entire line from a file into a buffer. Lines may
+ * be delimited with '\n', '\r', '\n\r', or '\r\n'. The delimiter
+ * is not written into the buffer. Text after a '#' character is treated as
+ * a comment and skipped. '\' can be used to escape a # character.
+ * '\' proceeding a line delimiter combines adjacent lines. A '\' proceeding
+ * any other character is ignored and written into the output buffer
+ * unmodified.
+ *
+ * Return value: 0 if the stream was already at an %EOF character, otherwise
+ *               the number of lines read (this is useful for maintaining
+ *               a line number counter which doesn't combine lines with '\')
+ **/
+gint
+pango_read_line (FILE *stream, GString *str)
+{
+  gboolean quoted = FALSE;
+  gboolean comment = FALSE;
+  int n_read = 0;
+  int lines = 1;
+
+  flockfile (stream);
+
+  g_string_truncate (str, 0);
+
+  while (1)
+    {
+      int c;
+
+      c = getc_unlocked (stream);
+
+      if (c == EOF)
+       {
+         if (quoted)
+           g_string_append_c (str, '\\');
+
+         goto done;
+       }
+      else
+       n_read++;
+
+      if (quoted)
+       {
+         quoted = FALSE;
+
+         switch (c)
+           {
+           case '#':
+             g_string_append_c (str, '#');
+             break;
+           case '\r':
+           case '\n':
+             {
+               int next_c = getc_unlocked (stream);
+
+               if (!(next_c == EOF ||
+                     (c == '\r' && next_c == '\n') ||
+                     (c == '\n' && next_c == '\r')))
+                 ungetc (next_c, stream);
+
+               lines++;
+
+               break;
+             }
+           default:
+             g_string_append_c (str, '\\');
+             g_string_append_c (str, c);
+           }
+       }
+      else
+       {
+         switch (c)
+           {
+           case '#':
+             comment = TRUE;
+             break;
+           case '\\':
+             if (!comment)
+               quoted = TRUE;
+             break;
+           case '\n':
+             {
+               int next_c = getc_unlocked (stream);
+
+               if (!(c == EOF ||
+                     (c == '\r' && next_c == '\n') ||
+                     (c == '\n' && next_c == '\r')))
+                 ungetc (next_c, stream);
+
+               goto done;
+             }
+           default:
+             if (!comment)
+               g_string_append_c (str, c);
+           }
+       }
+    }
+
+ done:
+
+  funlockfile (stream);
+
+  return (n_read > 0) ? lines : 0;
+}
+
+/**
+ * pango_skip_space:
+ * @pos: in/out string position
+ *
+ * Skips 0 or more characters of white space.
+ *
+ * Return value: %FALSE if skipping the white space leaves
+ * the position at a '\0' character.
+ **/
+gboolean
+pango_skip_space (const char **pos)
+{
+  const char *p = *pos;
+
+  while (g_ascii_isspace (*p))
+    p++;
+
+  *pos = p;
+
+  return !(*p == '\0');
+}
+
+/**
+ * pango_scan_word:
+ * @pos: in/out string position
+ * @out: a #GString into which to write the result
+ *
+ * Scans a word into a #GString buffer. A word consists
+ * of [A-Za-z_] followed by zero or more [A-Za-z_0-9]
+ * Leading white space is skipped.
+ *
+ * Return value: %FALSE if a parse error occurred.
+ **/
+gboolean
+pango_scan_word (const char **pos, GString *out)
+{
+  const char *p = *pos;
+
+  while (g_ascii_isspace (*p))
+    p++;
+
+  if (!((*p >= 'A' && *p <= 'Z') ||
+       (*p >= 'a' && *p <= 'z') ||
+       *p == '_'))
+    return FALSE;
+
+  g_string_truncate (out, 0);
+  g_string_append_c (out, *p);
+  p++;
+
+  while ((*p >= 'A' && *p <= 'Z') ||
+        (*p >= 'a' && *p <= 'z') ||
+        (*p >= '0' && *p <= '9') ||
+        *p == '_')
+    {
+      g_string_append_c (out, *p);
+      p++;
+    }
+
+  *pos = p;
+
+  return TRUE;
+}
+
+/**
+ * pango_scan_string:
+ * @pos: in/out string position
+ * @out: a #GString into which to write the result
+ *
+ * Scans a string into a #GString buffer. The string may either
+ * be a sequence of non-white-space characters, or a quoted
+ * string with '"'. Instead a quoted string, '\"' represents
+ * a literal quote. Leading white space outside of quotes is skipped.
+ *
+ * Return value: %FALSE if a parse error occurred.
+ **/
+gboolean
+pango_scan_string (const char **pos, GString *out)
+{
+  const char *p = *pos;
+
+  while (g_ascii_isspace (*p))
+    p++;
+
+  if (G_UNLIKELY (!*p))
+    return FALSE;
+  else if (*p == '"')
+    {
+      gboolean quoted = FALSE;
+      g_string_truncate (out, 0);
+
+      p++;
+
+      while (TRUE)
+       {
+         if (quoted)
+           {
+             int c = *p;
+
+             switch (c)
+               {
+               case '\0':
+                 return FALSE;
+               case 'n':
+                 c = '\n';
+                 break;
+               case 't':
+                 c = '\t';
+                 break;
+               default:
+                 break;
+               }
+
+             quoted = FALSE;
+             g_string_append_c (out, c);
+           }
+         else
+           {
+             switch (*p)
+               {
+               case '\0':
+                 return FALSE;
+               case '\\':
+                 quoted = TRUE;
+                 break;
+               case '"':
+                 p++;
+                 goto done;
+               default:
+                 g_string_append_c (out, *p);
+                 break;
+               }
+           }
+         p++;
+       }
+    done:
+      ;
+    }
+  else
+    {
+      g_string_truncate (out, 0);
+
+      while (*p && !g_ascii_isspace (*p))
+       {
+         g_string_append_c (out, *p);
+         p++;
+       }
+    }
+
+  *pos = p;
+
+  return TRUE;
+}
+
+/**
+ * pango_scan_int:
+ * @pos: in/out string position
+ * @out: an int into which to write the result
+ *
+ * Scans an integer.
+ * Leading white space is skipped.
+ *
+ * Return value: %FALSE if a parse error occurred.
+ **/
+gboolean
+pango_scan_int (const char **pos, int *out)
+{
+  char *end;
+  long temp;
+
+  errno = 0;
+  temp = strtol (*pos, &end, 10);
+  if (errno == ERANGE)
+    {
+      errno = 0;
+      return FALSE;
+    }
+
+  *out = (int)temp;
+  if ((long)(*out) != temp)
+    {
+      return FALSE;
+    }
+
+  *pos = end;
+
+  return TRUE;
+}
+
+static GHashTable *config_hash = NULL;
+
+static void
+read_config_file (const char *filename, gboolean enoent_error)
+{
+  GKeyFile *key_file = g_key_file_new();
+  GError *key_file_error = NULL;
+  gchar **groups;
+  gsize groups_count = 0;
+  guint group_index;
+
+  if (!g_key_file_load_from_file(key_file,filename, 0, &key_file_error))
+    {
+      if (key_file_error)
+       {
+         if (key_file_error->domain != G_FILE_ERROR || key_file_error->code != G_FILE_ERROR_NOENT || enoent_error)
+           {
+             g_warning ("error opening config file '%s': %s\n",
+                         filename, key_file_error->message);
+           }
+         g_error_free(key_file_error);
+       }
+      g_key_file_free(key_file);
+      return;
+    }
+
+  groups = g_key_file_get_groups (key_file, &groups_count);
+  for (group_index = 0; group_index < groups_count; group_index++)
+    {
+      gsize keys_count = 0;
+      const gchar *group = groups[group_index];
+      GError *keys_error = NULL;
+      gchar **keys;
+
+      keys = g_key_file_get_keys(key_file, group, &keys_count, &keys_error);
+
+      if (keys)
+       {
+         guint key_index;
+
+         for (key_index = 0; key_index < keys_count; key_index++)
+           {
+             const gchar *key = keys[key_index];
+             GError *key_error = NULL;
+             gchar *value =  g_key_file_get_value(key_file, group, key, &key_error);
+             if (value != NULL)
+               {
+                 g_hash_table_insert (config_hash,
+                                      g_strdup_printf ("%s/%s", group, key),
+                                      value);
+               }
+             if (key_error)
+               {
+                 g_warning ("error getting key '%s/%s' in config file '%s'\n",
+                            group, key, filename);
+                 g_error_free(key_error);
+               }
+           }
+         g_strfreev(keys);
+       }
+
+      if (keys_error)
+       {
+         g_warning ("error getting keys in group '%s' of config file '%s'\n",
+                    filename, group);
+         g_error_free(keys_error);
+       }
+    }
+  g_strfreev(groups);
+  g_key_file_free(key_file);
+}
+
+static void
+read_config (void)
+{
+  if (!config_hash)
+    {
+      char *filename;
+      const char *home;
+      const char *envvar;
+
+      config_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+                                          (GDestroyNotify)g_free,
+                                          (GDestroyNotify)g_free);
+      filename = g_build_filename (pango_get_sysconf_subdirectory (),
+                                  "pangorc",
+                                  NULL);
+      read_config_file (filename, FALSE);
+      g_free (filename);
+
+      home = g_get_home_dir ();
+      if (home && *home)
+       {
+         filename = g_build_filename (home, ".pangorc", NULL);
+         read_config_file (filename, FALSE);
+         g_free (filename);
+       }
+
+      envvar = g_getenv ("PANGO_RC_FILE");
+      if (envvar)
+       read_config_file (envvar, TRUE);
+    }
+}
+
+/**
+ * pango_config_key_get:
+ * @key: Key to look up, in the form "SECTION/KEY".
+ *
+ * Looks up a key in the Pango config database
+ * (pseudo-win.ini style, read from $sysconfdir/pango/pangorc,
+ *  ~/.pangorc, and getenv (PANGO_RC_FILE).)
+ *
+ * Return value: the value, if found, otherwise %NULL. The value is a
+ * newly-allocated string and must be freed with g_free().
+ **/
+char *
+pango_config_key_get (const char *key)
+{
+  g_return_val_if_fail (key != NULL, NULL);
+
+  read_config ();
+
+  return g_strdup (g_hash_table_lookup (config_hash, key));
+}
+
+#ifdef G_OS_WIN32
+
+/* DllMain function needed to tuck away the DLL handle */
+
+static HMODULE pango_dll;
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+        DWORD     fdwReason,
+        LPVOID    lpvReserved)
+{
+  switch (fdwReason)
+    {
+    case DLL_PROCESS_ATTACH:
+      pango_dll = (HMODULE) hinstDLL;
+      break;
+    }
+
+  return TRUE;
+}
+
+#endif
+
+/**
+ * pango_get_sysconf_subdirectory:
+ *
+ * On Unix, returns the name of the "pango" subdirectory of SYSCONFDIR
+ * (which is set at compile time). On Windows, returns the etc\pango
+ * subdirectory of the Pango installation directory (which is deduced
+ * at run time from the DLL's location).
+ *
+ * Return value: the Pango sysconf directory. The returned string should
+ * not be freed.
+ */
+G_CONST_RETURN char *
+pango_get_sysconf_subdirectory (void)
+{
+#ifdef G_OS_WIN32
+  static gchar *result = NULL;
+
+  if (result == NULL)
+    {
+      gchar *root = g_win32_get_package_installation_directory_of_module (pango_dll);
+      result = g_build_filename (root, "etc\\pango", NULL);
+      g_free (root);
+    }
+  return result;
+#else
+  return SYSCONFDIR "/pango";
+#endif
+}
+
+/**
+ * pango_get_lib_subdirectory:
+ *
+ * On Unix, returns the name of the "pango" subdirectory of LIBDIR
+ * (which is set at compile time). On Windows, returns the lib\pango
+ * subdirectory of the Pango installation directory (which is deduced
+ * at run time from the DLL's location).
+ *
+ * Return value: the Pango lib directory. The returned string should
+ * not be freed.
+ */
+G_CONST_RETURN char *
+pango_get_lib_subdirectory (void)
+{
+#ifdef G_OS_WIN32
+  static gchar *result = NULL;
+
+  if (result == NULL)
+    {
+      gchar *root = g_win32_get_package_installation_directory_of_module (pango_dll);
+      /* If we are running against an uninstalled copy of the Pango DLL,
+       * use the compile-time installation prefix.
+       */
+      if (g_str_has_suffix (root, "\\.libs"))
+       result = g_strdup (LIBDIR "/pango");
+      else
+       result = g_build_filename (root, "lib\\pango", NULL);
+      g_free (root);
+    }
+  return result;
+#else
+  return LIBDIR "/pango";
+#endif
+}
+
+
+static gboolean
+parse_int (const char *word,
+          int        *out)
+{
+  char *end;
+  long val = strtol (word, &end, 10);
+  int i = val;
+
+  if (end != word && *end == '\0' && val >= 0 && val == i)
+    {
+      if (out)
+        *out = i;
+
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+/**
+ * pango_parse_enum:
+ * @type: enum type to parse, eg. %PANGO_TYPE_ELLIPSIZE_MODE.
+ * @str: string to parse.  May be %NULL.
+ * @value: integer to store the result in, or %NULL.
+ * @warn: if %TRUE, issue a g_warning() on bad input.
+ * @possible_values: place to store list of possible values on failure, or %NULL.
+ *
+ * Parses an enum type and stores the result in @value.
+ *
+ * If @str does not match the nick name of any of the possible values for the
+ * enum and is not an integer, %FALSE is returned, a warning is issued
+ * if @warn is %TRUE, and a
+ * string representing the list of possible values is stored in
+ * @possible_values.  The list is slash-separated, eg.
+ * "none/start/middle/end".  If failed and @possible_values is not %NULL,
+ * returned string should be freed using g_free().
+ *
+ * Return value: %TRUE if @str was successfully parsed.
+ *
+ * Since: 1.16
+ **/
+gboolean
+pango_parse_enum (GType       type,
+                 const char *str,
+                 int        *value,
+                 gboolean    warn,
+                 char      **possible_values)
+{
+  GEnumClass *class = NULL;
+  gboolean ret = TRUE;
+  GEnumValue *v = NULL;
+
+  class = g_type_class_ref (type);
+
+  if (G_LIKELY (str))
+    v = g_enum_get_value_by_nick (class, str);
+
+  if (v)
+    {
+      if (G_LIKELY (value))
+       *value = v->value;
+    }
+  else if (!parse_int (str, value))
+    {
+      ret = FALSE;
+      if (G_LIKELY (warn || possible_values))
+       {
+         int i;
+         GString *s = g_string_new (NULL);
+
+         for (i = 0, v = g_enum_get_value (class, i); v;
+              i++  , v = g_enum_get_value (class, i))
+           {
+             if (i)
+               g_string_append_c (s, '/');
+             g_string_append (s, v->value_nick);
+           }
+
+         if (warn)
+           g_warning ("%s must be one of %s",
+                      G_ENUM_CLASS_TYPE_NAME(class),
+                      s->str);
+
+         if (possible_values)
+           *possible_values = s->str;
+
+         g_string_free (s, possible_values ? FALSE : TRUE);
+       }
+    }
+
+  g_type_class_unref (class);
+
+  return ret;
+}
+
+
+static guint
+alias_hash (struct PangoAlias *alias)
+{
+  return g_str_hash (alias->alias);
+}
+
+static gboolean
+alias_equal (struct PangoAlias *alias1,
+            struct PangoAlias *alias2)
+{
+  return g_str_equal (alias1->alias,
+                     alias2->alias);
+}
+
+
+static void
+alias_free (struct PangoAlias *alias)
+{
+  int i;
+  g_free (alias->alias);
+
+  for (i = 0; i < alias->n_families; i++)
+    g_free (alias->families[i]);
+
+  g_free (alias->families);
+
+  g_slice_free (struct PangoAlias, alias);
+}
+
+static void
+handle_alias_line (GString  *line_buffer,
+                  char    **errstring)
+{
+  GString *tmp_buffer1;
+  GString *tmp_buffer2;
+  const char *pos;
+  struct PangoAlias alias_key;
+  struct PangoAlias *alias;
+  gboolean append = FALSE;
+  char **new_families;
+  int n_new;
+  int i;
+
+  tmp_buffer1 = g_string_new (NULL);
+  tmp_buffer2 = g_string_new (NULL);
+
+
+  pos = line_buffer->str;
+  if (!pango_skip_space (&pos))
+    return;
+
+  if (!pango_scan_string (&pos, tmp_buffer1) ||
+      !pango_skip_space (&pos))
+    {
+      *errstring = g_strdup ("Line is not of the form KEY=VALUE or KEY+=VALUE");
+      goto error;
+    }
+
+  if (*pos == '+')
+    {
+      append = TRUE;
+      pos++;
+    }
+
+  if (*(pos++) != '=')
+    {
+      *errstring = g_strdup ("Line is not of the form KEY=VALUE or KEY+=VALUE");
+      goto error;
+    }
+
+  if (!pango_scan_string (&pos, tmp_buffer2))
+    {
+      *errstring = g_strdup ("Error parsing value string");
+      goto error;
+    }
+  if (pango_skip_space (&pos))
+    {
+      *errstring = g_strdup ("Junk after value string");
+      goto error;
+    }
+
+  alias_key.alias = g_ascii_strdown (tmp_buffer1->str, -1);
+
+  /* Remove any existing values */
+  alias = g_hash_table_lookup (pango_aliases_ht, &alias_key);
+
+  if (!alias)
+    {
+      alias = g_slice_new0 (struct PangoAlias);
+      alias->alias = alias_key.alias;
+      
+      g_hash_table_insert (pango_aliases_ht,
+                          alias, alias);
+    }
+  else
+    g_free (alias_key.alias);
+
+  new_families = g_strsplit (tmp_buffer2->str, ",", -1);
+
+  n_new = 0;
+  while (new_families[n_new])
+    n_new++;
+
+  if (alias->families && append)
+    {
+      alias->families = g_realloc (alias->families,
+                                  sizeof (char *) *(n_new + alias->n_families));
+      for (i = 0; i < n_new; i++)
+       alias->families[alias->n_families + i] = new_families[i];
+      g_free (new_families);
+      alias->n_families += n_new;
+    }
+  else
+    {
+      for (i = 0; i < alias->n_families; i++)
+       g_free (alias->families[i]);
+      g_free (alias->families);
+      
+      alias->families = new_families;
+      alias->n_families = n_new;
+    }
+
+ error:
+  
+  g_string_free (tmp_buffer1, TRUE);
+  g_string_free (tmp_buffer2, TRUE);
+}
+
+#ifdef HAVE_CAIRO_WIN32
+
+static const char *builtin_aliases[] = {
+  "courier = \"courier new\"",
+  "\"segoe ui\" = \"segoe ui,meiryo,malgun gothic,microsoft jhenghei,microsoft yahei,gisha,leelawadee,arial unicode ms,browallia new,mingliu,simhei,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\"",
+  "tahoma = \"tahoma,arial unicode ms,lucida sans unicode,browallia new,mingliu,simhei,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\"",
+  /* It sucks to use the same GulimChe, MS Gothic, Sylfaen, Kartika,
+   * Latha, Mangal and Raavi fonts for all three of sans, serif and
+   * mono, but it isn't like there would be much choice. For most
+   * non-Latin scripts that Windows includes any font at all for, it
+   * has ony one. One solution is to install the free DejaVu fonts
+   * that are popular on Linux. They are listed here first.
+   */
+  "sans = \"dejavu sans,tahoma,arial unicode ms,lucida sans unicode,browallia new,mingliu,simhei,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\"",
+  "sans-serif = \"dejavu sans,tahoma,arial unicode ms,lucida sans unicode,browallia new,mingliu,simhei,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\"",
+  "serif = \"dejavu serif,georgia,angsana new,mingliu,simsun,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\"",
+  "mono = \"dejavu sans mono,courier new,lucida console,courier monothai,mingliu,simsun,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\"",
+  "monospace = \"dejavu sans mono,courier new,lucida console,courier monothai,mingliu,simsun,gulimche,ms gothic,sylfaen,kartika,latha,mangal,raavi\""
+};
+
+static void
+read_builtin_aliases (void)
+{
+
+  GString *line_buffer;
+  char *errstring = NULL;
+  int line;
+
+  line_buffer = g_string_new (NULL);
+
+  for (line = 0; line < G_N_ELEMENTS (builtin_aliases) && errstring == NULL; line++)
+    {
+      g_string_assign (line_buffer, builtin_aliases[line]);
+      handle_alias_line (line_buffer, &errstring);
+    }
+
+  if (errstring)
+    {
+      g_error ("error in built-in aliases:%d: %s\n", line, errstring);
+      g_free (errstring);
+    }
+
+  g_string_free (line_buffer, TRUE);
+}
+
+#endif
+
+static void
+read_alias_file (const char *filename)
+{
+  FILE *file;
+
+  GString *line_buffer;
+  char *errstring = NULL;
+  int line = 0;
+
+  file = g_fopen (filename, "r");
+  if (!file)
+    return;
+
+  line_buffer = g_string_new (NULL);
+
+  while (pango_read_line (file, line_buffer) &&
+        errstring == NULL)
+    {
+      line++;
+      handle_alias_line (line_buffer, &errstring);
+    }
+
+  if (errstring == NULL && ferror (file))
+    errstring = g_strdup (g_strerror(errno));
+
+  if (errstring)
+    {
+      g_warning ("error reading alias file: %s:%d: %s\n", filename, line, errstring);
+      g_free (errstring);
+    }
+
+  g_string_free (line_buffer, TRUE);
+
+  fclose (file);
+}
+
+static void
+pango_load_aliases (void)
+{
+  char *filename;
+  const char *home;
+
+  pango_aliases_ht = g_hash_table_new_full ((GHashFunc)alias_hash,
+                                           (GEqualFunc)alias_equal,
+                                           (GDestroyNotify)alias_free,
+                                           NULL);
+
+#ifdef HAVE_CAIRO_WIN32
+  read_builtin_aliases ();
+#endif
+
+  filename = g_strconcat (pango_get_sysconf_subdirectory (),
+                         G_DIR_SEPARATOR_S "pango.aliases",
+                         NULL);
+  read_alias_file (filename);
+  g_free (filename);
+
+  home = g_get_home_dir ();
+  if (home && *home)
+    {
+      filename = g_strconcat (home,
+                             G_DIR_SEPARATOR_S ".pango.aliases",
+                             NULL);
+      read_alias_file (filename);
+      g_free (filename);
+    }
+}
+
+
+/**
+ * pango_lookup_aliases:
+ * @fontname: an ascii string
+ * @families: will be set to an array of font family names.
+ *    this array is owned by pango and should not be freed.
+ * @n_families: will be set to the length of the @families array.
+ *
+ * Look up all user defined aliases for the alias @fontname.
+ * The resulting font family names will be stored in @families,
+ * and the number of families in @n_families.
+ **/
+void
+pango_lookup_aliases (const char   *fontname,
+                     char       ***families,
+                     int          *n_families)
+{
+  struct PangoAlias alias_key;
+  struct PangoAlias *alias;
+
+  if (pango_aliases_ht == NULL)
+    pango_load_aliases ();
+
+  alias_key.alias = g_ascii_strdown (fontname, -1);
+  alias = g_hash_table_lookup (pango_aliases_ht, &alias_key);
+  g_free (alias_key.alias);
+
+  if (alias)
+    {
+      *families = alias->families;
+      *n_families = alias->n_families;
+    }
+  else
+    {
+      *families = NULL;
+      *n_families = 0;
+    }
+}
+
+/**
+ * pango_find_base_dir:
+ * @text:   the text to process
+ * @length: length of @text in bytes (may be -1 if @text is nul-terminated)
+ *
+ * Searches a string the first character that has a strong
+ * direction, according to the Unicode bidirectional algorithm.
+ *
+ * Return value: The direction corresponding to the first strong character.
+ * If no such character is found, then %PANGO_DIRECTION_NEUTRAL is returned.
+ *
+ * Since: 1.4
+ */
+PangoDirection
+pango_find_base_dir (const gchar *text,
+                    gint         length)
+{
+  PangoDirection dir = PANGO_DIRECTION_NEUTRAL;
+  const gchar *p;
+
+  g_return_val_if_fail (text != NULL || length == 0, PANGO_DIRECTION_NEUTRAL);
+
+  p = text;
+  while ((length < 0 || p < text + length) && *p)
+    {
+      gunichar wc = g_utf8_get_char (p);
+
+      dir = pango_unichar_direction (wc);
+
+      if (dir != PANGO_DIRECTION_NEUTRAL)
+       break;
+
+      p = g_utf8_next_char (p);
+    }
+
+  return dir;
+}
+
+/**
+ * pango_is_zero_width:
+ * @ch: a Unicode character
+ *
+ * Checks @ch to see if it is a character that should not be
+ * normally rendered on the screen.  This includes all Unicode characters
+ * with "ZERO WIDTH" in their name, as well as <firstterm>bidi</firstterm> formatting characters, and
+ * a few other ones.  This is totally different from g_unichar_iszerowidth()
+ * and is at best misnamed.
+ *
+ * Return value: %TRUE if @ch is a zero-width character, %FALSE otherwise
+ *
+ * Since: 1.10
+ */
+gboolean
+pango_is_zero_width (gunichar ch)
+{
+/* Zero Width characters:
+ *
+ *  00AD  SOFT HYPHEN
+ *  034F  COMBINING GRAPHEME JOINER
+ *
+ *  200B  ZERO WIDTH SPACE
+ *  200C  ZERO WIDTH NON-JOINER
+ *  200D  ZERO WIDTH JOINER
+ *  200E  LEFT-TO-RIGHT MARK
+ *  200F  RIGHT-TO-LEFT MARK
+ *
+ *  2028  LINE SEPARATOR
+ *
+ *  202A  LEFT-TO-RIGHT EMBEDDING
+ *  202B  RIGHT-TO-LEFT EMBEDDING
+ *  202C  POP DIRECTIONAL FORMATTING
+ *  202D  LEFT-TO-RIGHT OVERRIDE
+ *  202E  RIGHT-TO-LEFT OVERRIDE
+ *
+ *  2060  WORD JOINER
+ *  2061  FUNCTION APPLICATION
+ *  2062  INVISIBLE TIMES
+ *  2063  INVISIBLE SEPARATOR
+ *
+ *  FEFF  ZERO WIDTH NO-BREAK SPACE
+ */
+  return ((ch & ~(gunichar)0x007F) == 0x2000 && (
+               (ch >= 0x200B && ch <= 0x200F) ||
+               (ch >= 0x202A && ch <= 0x202E) ||
+               (ch >= 0x2060 && ch <= 0x2063) ||
+               (ch == 0x2028)
+        )) || G_UNLIKELY (ch == 0x00AD
+                       || ch == 0x034F
+                       || ch == 0xFEFF);
+}
+
+/**
+ * pango_quantize_line_geometry:
+ * @thickness: pointer to the thickness of a line, in Pango units
+ * @position: corresponding position
+ *
+ * Quantizes the thickness and position of a line, typically an
+ * underline or strikethrough, to whole device pixels, that is integer
+ * multiples of %PANGO_SCALE. The purpose of this function is to avoid
+ * such lines looking blurry.
+ *
+ * Care is taken to make sure @thickness is at least one pixel when this
+ * function returns, but returned @position may become zero as a result
+ * of rounding.
+ *
+ * Since: 1.12
+ */
+void
+pango_quantize_line_geometry (int *thickness,
+                             int *position)
+{
+  int thickness_pixels = (*thickness + PANGO_SCALE / 2) / PANGO_SCALE;
+  if (thickness_pixels == 0)
+    thickness_pixels = 1;
+
+  if (thickness_pixels & 1)
+    {
+      int new_center = ((*position - *thickness / 2) & ~(PANGO_SCALE - 1)) + PANGO_SCALE / 2;
+      *position = new_center + (PANGO_SCALE * thickness_pixels) / 2;
+    }
+  else
+    {
+      int new_center = ((*position - *thickness / 2 + PANGO_SCALE / 2) & ~(PANGO_SCALE - 1));
+      *position = new_center + (PANGO_SCALE * thickness_pixels) / 2;
+    }
+
+  *thickness = thickness_pixels * PANGO_SCALE;
+}
+
+/**
+ * pango_units_from_double:
+ * @d: double floating-point value
+ *
+ * Converts a floating-point number to Pango units: multiplies
+ * it by %PANGO_SCALE and rounds to nearest integer.
+ *
+ * Return value: the value in Pango units.
+ *
+ * Since: 1.16
+ */
+int
+pango_units_from_double (double d)
+{
+  return (int)floor (d * PANGO_SCALE + 0.5);
+}
+
+/**
+ * pango_units_to_double:
+ * @i: value in Pango units
+ *
+ * Converts a number in Pango units to floating-point: divides
+ * it by %PANGO_SCALE.
+ *
+ * Return value: the double value.
+ *
+ * Since: 1.16
+ */
+double
+pango_units_to_double (int i)
+{
+  return (double)i / PANGO_SCALE;
+}
+
+/**
+ * pango_extents_to_pixels:
+ * @inclusive: rectangle to round to pixels inclusively, or %NULL.
+ * @nearest: rectangle to round to nearest pixels, or %NULL.
+ *
+ * Converts extents from Pango units to device units, dividing by the
+ * %PANGO_SCALE factor and performing rounding.
+ *
+ * The @inclusive rectangle is converted by flooring the x/y coordinates and extending
+ * width/height, such that the final rectangle completely includes the original
+ * rectangle.
+ *
+ * The @nearest rectangle is converted by rounding the coordinates
+ * of the rectangle to the nearest device unit (pixel).
+ *
+ * The rule to which argument to use is: if you want the resulting device-space
+ * rectangle to completely contain the original rectangle, pass it in as @inclusive.
+ * If you want two touching-but-not-overlapping rectangles stay
+ * touching-but-not-overlapping after rounding to device units, pass them in
+ * as @nearest.
+ *
+ * Since: 1.16
+ **/
+void
+pango_extents_to_pixels (PangoRectangle *inclusive,
+                        PangoRectangle *nearest)
+{
+  if (inclusive)
+    {
+      int orig_x = inclusive->x;
+      int orig_y = inclusive->y;
+
+      inclusive->x = PANGO_PIXELS_FLOOR (inclusive->x);
+      inclusive->y = PANGO_PIXELS_FLOOR (inclusive->y);
+
+      inclusive->width  = PANGO_PIXELS_CEIL (orig_x + inclusive->width ) - inclusive->x;
+      inclusive->height = PANGO_PIXELS_CEIL (orig_y + inclusive->height) - inclusive->y;
+    }
+
+  if (nearest)
+    {
+      int orig_x = nearest->x;
+      int orig_y = nearest->y;
+
+      nearest->x = PANGO_PIXELS (nearest->x);
+      nearest->y = PANGO_PIXELS (nearest->y);
+
+      nearest->width  = PANGO_PIXELS (orig_x + nearest->width ) - nearest->x;
+      nearest->height = PANGO_PIXELS (orig_y + nearest->height) - nearest->y;
+    }
+}
+
+
+
+
+\f
+/*********************************************************
+ * Some internal functions for handling PANGO_ATTR_SHAPE *
+ ********************************************************/
+
+void
+_pango_shape_shape (const char       *text,
+                   gint              n_chars,
+                   PangoRectangle   *shape_ink G_GNUC_UNUSED,
+                   PangoRectangle   *shape_logical,
+                   PangoGlyphString *glyphs)
+{
+  int i;
+  const char *p;
+
+  pango_glyph_string_set_size (glyphs, n_chars);
+
+  for (i=0, p = text; i < n_chars; i++, p = g_utf8_next_char (p))
+    {
+      glyphs->glyphs[i].glyph = PANGO_GLYPH_EMPTY;
+      glyphs->glyphs[i].geometry.x_offset = 0;
+      glyphs->glyphs[i].geometry.y_offset = 0;
+      glyphs->glyphs[i].geometry.width = shape_logical->width;
+      glyphs->glyphs[i].attr.is_cluster_start = 1;
+
+      glyphs->log_clusters[i] = p - text;
+    }
+}
+
+void
+_pango_shape_get_extents (gint              n_chars,
+                         PangoRectangle   *shape_ink,
+                         PangoRectangle   *shape_logical,
+                         PangoRectangle   *ink_rect,
+                         PangoRectangle   *logical_rect)
+{
+  if (n_chars > 0)
+    {
+      if (ink_rect)
+       {
+         ink_rect->x = MIN (shape_ink->x, shape_ink->x + shape_logical->width * (n_chars - 1));
+         ink_rect->width = MAX (shape_ink->width, shape_ink->width + shape_logical->width * (n_chars - 1));
+         ink_rect->y = shape_ink->y;
+         ink_rect->height = shape_ink->height;
+       }
+      if (logical_rect)
+       {
+         logical_rect->x = MIN (shape_logical->x, shape_logical->x + shape_logical->width * (n_chars - 1));
+         logical_rect->width = MAX (shape_logical->width, shape_logical->width + shape_logical->width * (n_chars - 1));
+         logical_rect->y = shape_logical->y;
+         logical_rect->height = shape_logical->height;
+       }
+    }
+  else
+    {
+      if (ink_rect)
+       {
+         ink_rect->x = 0;
+         ink_rect->y = 0;
+         ink_rect->width = 0;
+         ink_rect->height = 0;
+       }
+
+      if (logical_rect)
+       {
+         logical_rect->x = 0;
+         logical_rect->y = 0;
+         logical_rect->width = 0;
+         logical_rect->height = 0;
+       }
+    }
+}
+
diff --git a/pango/pango-utils.h b/pango/pango-utils.h
new file mode 100755 (executable)
index 0000000..41a8bbb
--- /dev/null
@@ -0,0 +1,143 @@
+/* Pango
+ * pango-utils.c: Utilities for internal functions and modules
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_UTILS_H__
+#define __PANGO_UTILS_H__
+
+#include <stdio.h>
+#include <glib.h>
+#include <pango/pango-font.h>
+
+G_BEGIN_DECLS
+
+char **  pango_split_file_list (const char *str);
+
+char    *pango_trim_string     (const char *str);
+gint     pango_read_line      (FILE        *stream,
+                              GString     *str);
+gboolean pango_skip_space     (const char **pos);
+gboolean pango_scan_word      (const char **pos,
+                              GString     *out);
+gboolean pango_scan_string    (const char **pos,
+                              GString     *out);
+gboolean pango_scan_int       (const char **pos,
+                              int         *out);
+
+#ifdef PANGO_ENABLE_BACKEND
+char *   pango_config_key_get (const char  *key);
+void     pango_lookup_aliases (const char   *fontname,
+                              char       ***families,
+                              int          *n_families);
+#endif /* PANGO_ENABLE_BACKEND */
+
+gboolean pango_parse_enum     (GType       type,
+                              const char *str,
+                              int        *value,
+                              gboolean    warn,
+                              char      **possible_values);
+
+/* Functions for parsing textual representations
+ * of PangoFontDescription fields. They return TRUE if the input string
+ * contains a valid value, which then has been assigned to the corresponding
+ * field in the PangoFontDescription. If the warn parameter is TRUE,
+ * a warning is printed (with g_warning) if the string does not
+ * contain a valid value.
+ */
+gboolean pango_parse_style   (const char   *str,
+                             PangoStyle   *style,
+                             gboolean      warn);
+gboolean pango_parse_variant (const char   *str,
+                             PangoVariant *variant,
+                             gboolean      warn);
+gboolean pango_parse_weight  (const char   *str,
+                             PangoWeight  *weight,
+                             gboolean      warn);
+gboolean pango_parse_stretch (const char   *str,
+                             PangoStretch *stretch,
+                             gboolean      warn);
+
+#ifdef PANGO_ENABLE_BACKEND
+
+/* On Unix, return the name of the "pango" subdirectory of SYSCONFDIR
+ * (which is set at compile time). On Win32, return the Pango
+ * installation directory (which is set at installation time, and
+ * stored in the registry). The returned string should not be
+ * g_free'd.
+ */
+G_CONST_RETURN char *   pango_get_sysconf_subdirectory (void) G_GNUC_PURE;
+
+/* Ditto for LIBDIR/pango. On Win32, use the same Pango
+ * installation directory. This returned string should not be
+ * g_free'd either.
+ */
+G_CONST_RETURN char *   pango_get_lib_subdirectory (void) G_GNUC_PURE;
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+/* Hint line position and thickness.
+ */
+void pango_quantize_line_geometry (int *thickness,
+                                  int *position);
+
+/* A routine from fribidi that we either wrap or provide ourselves.
+ */
+guint8 * pango_log2vis_get_embedding_levels (const gchar    *text,
+                                            int             length,
+                                            PangoDirection *pbase_dir);
+
+/* Unicode characters that are zero-width and should not be rendered
+ * normally.
+ */
+gboolean pango_is_zero_width (gunichar ch) G_GNUC_CONST;
+
+/* Pango version checking */
+
+/* Encode a Pango version as an integer */
+#define PANGO_VERSION_ENCODE(major, minor, micro) (     \
+         ((major) * 10000)                             \
+       + ((minor) *   100)                             \
+       + ((micro) *     1))
+
+/* Encoded version of Pango at compile-time */
+#define PANGO_VERSION PANGO_VERSION_ENCODE(     \
+       PANGO_VERSION_MAJOR,                    \
+       PANGO_VERSION_MINOR,                    \
+       PANGO_VERSION_MICRO)
+
+/* Check that compile-time Pango is as new as required */
+#define PANGO_VERSION_CHECK(major,minor,micro)    \
+       (PANGO_VERSION >= PANGO_VERSION_ENCODE(major,minor,micro))
+
+
+/* Return encoded version of Pango at run-time */
+int pango_version (void) G_GNUC_CONST;
+
+/* Return run-time Pango version as an string */
+G_CONST_RETURN char * pango_version_string (void) G_GNUC_CONST;
+
+/* Check that run-time Pango is as new as required */
+G_CONST_RETURN char * pango_version_check (int required_major,
+                                          int required_minor,
+                                          int required_micro) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __PANGO_UTILS_H__ */
diff --git a/pango/pango.def b/pango/pango.def
new file mode 100755 (executable)
index 0000000..3b1bc76
--- /dev/null
@@ -0,0 +1,395 @@
+EXPORTS
+       pango_alignment_get_type
+       pango_attr_background_new
+       pango_attr_fallback_new
+       pango_attr_family_new
+       pango_attr_font_desc_new
+       pango_attr_foreground_new
+       pango_attr_gravity_hint_new
+       pango_attr_gravity_new
+       pango_attr_iterator_copy
+       pango_attr_iterator_destroy
+       pango_attr_iterator_get
+       pango_attr_iterator_get_attrs
+       pango_attr_iterator_get_font
+       pango_attr_iterator_next
+       pango_attr_iterator_range
+       pango_attr_language_new
+       pango_attr_letter_spacing_new
+       pango_attr_list_change
+       pango_attr_list_copy
+       pango_attr_list_filter
+       pango_attr_list_get_iterator
+       pango_attr_list_get_type
+       pango_attr_list_insert
+       pango_attr_list_insert_before
+       pango_attr_list_new
+       pango_attr_list_ref
+       pango_attr_list_splice
+       pango_attr_list_unref
+       pango_attr_rise_new
+       pango_attr_scale_new
+       pango_attr_shape_new
+       pango_attr_shape_new_with_data
+       pango_attr_size_new
+       pango_attr_size_new_absolute
+       pango_attr_stretch_new
+       pango_attr_strikethrough_color_new
+       pango_attr_strikethrough_new
+       pango_attr_style_new
+       pango_attr_type_get_type
+       pango_attr_type_register
+       pango_attr_type_get_name
+       pango_attr_underline_color_new
+       pango_attr_underline_new
+       pango_attr_variant_new
+       pango_attr_weight_new
+       pango_attribute_init
+       pango_attribute_copy
+       pango_attribute_destroy
+       pango_attribute_equal
+       pango_bidi_type_for_unichar
+       pango_bidi_type_get_type
+       pango_break
+       pango_color_copy
+       pango_color_free
+       pango_color_get_type
+       pango_color_parse
+       pango_color_to_string
+       pango_config_key_get
+       pango_context_get_base_dir
+       pango_context_get_base_gravity
+       pango_context_get_font_description
+       pango_context_get_font_map
+       pango_context_get_gravity
+       pango_context_get_gravity_hint
+       pango_context_get_language
+       pango_context_get_matrix
+       pango_context_get_metrics
+       pango_context_get_type
+       pango_context_list_families
+       pango_context_load_font
+       pango_context_load_fontset
+       pango_context_new
+       pango_context_set_base_dir
+       pango_context_set_base_gravity
+       pango_context_set_font_description
+       pango_context_set_font_map
+       pango_context_set_gravity_hint
+       pango_context_set_language
+       pango_context_set_matrix
+       pango_coverage_copy
+       pango_coverage_from_bytes
+       pango_coverage_get
+       pango_coverage_level_get_type
+       pango_coverage_max
+       pango_coverage_new
+       pango_coverage_ref
+       pango_coverage_set
+       pango_coverage_to_bytes
+       pango_coverage_unref
+       pango_default_break
+       pango_direction_get_type
+       pango_ellipsize_mode_get_type
+       pango_engine_get_type
+       pango_engine_lang_get_type
+       pango_engine_shape_get_type
+       pango_extents_to_pixels
+       pango_find_base_dir
+       pango_find_map
+       pango_find_paragraph_boundary
+       pango_font_describe
+       pango_font_describe_with_absolute_size
+       pango_font_description_better_match
+       pango_font_description_copy
+       pango_font_description_copy_static
+       pango_font_description_equal
+       pango_font_description_free
+       pango_font_description_from_string
+       pango_font_description_get_family
+       pango_font_description_get_gravity
+       pango_font_description_get_set_fields
+       pango_font_description_get_size
+       pango_font_description_get_size_is_absolute
+       pango_font_description_get_stretch
+       pango_font_description_get_style
+       pango_font_description_get_type
+       pango_font_description_get_variant
+       pango_font_description_get_weight
+       pango_font_description_hash
+       pango_font_description_merge
+       pango_font_description_merge_static
+       pango_font_description_new
+       pango_font_description_set_absolute_size
+       pango_font_description_set_family
+       pango_font_description_set_family_static
+       pango_font_description_set_gravity
+       pango_font_description_set_size
+       pango_font_description_set_stretch
+       pango_font_description_set_style
+       pango_font_description_set_variant
+       pango_font_description_set_weight
+       pango_font_description_to_filename
+       pango_font_description_to_string
+       pango_font_description_unset_fields
+       pango_font_descriptions_free
+       pango_font_face_describe
+       pango_font_face_get_face_name
+       pango_font_face_get_type
+       pango_font_face_is_synthesized
+       pango_font_face_list_sizes
+       pango_font_family_get_name
+       pango_font_family_get_type
+       pango_font_family_is_monospace
+       pango_font_family_list_faces
+       pango_font_find_shaper
+       pango_font_get_coverage
+       pango_font_get_font_map
+       pango_font_get_glyph_extents
+       pango_font_get_metrics
+       pango_font_get_type
+       pango_font_map_create_context
+       pango_font_map_get_shape_engine_type
+       pango_font_map_get_type
+       pango_font_map_list_families
+       pango_font_map_load_font
+       pango_font_map_load_fontset
+       pango_font_mask_get_type
+       pango_font_metrics_get_approximate_char_width
+       pango_font_metrics_get_approximate_digit_width
+       pango_font_metrics_get_ascent
+       pango_font_metrics_get_descent
+       pango_font_metrics_get_strikethrough_position
+       pango_font_metrics_get_strikethrough_thickness
+       pango_font_metrics_get_type
+       pango_font_metrics_get_underline_position
+       pango_font_metrics_get_underline_thickness
+       pango_font_metrics_new
+       pango_font_metrics_ref
+       pango_font_metrics_unref
+       pango_fontset_foreach
+       pango_fontset_get_font
+       pango_fontset_get_metrics
+       pango_fontset_get_type
+       pango_fontset_simple_append
+       pango_fontset_simple_get_type
+       pango_fontset_simple_new
+       pango_fontset_simple_size
+       pango_get_lib_subdirectory
+       pango_get_log_attrs
+       pango_get_mirror_char
+       pango_get_sysconf_subdirectory
+       pango_glyph_item_apply_attrs
+       pango_glyph_item_copy
+       pango_glyph_item_free
+       pango_glyph_item_get_logical_widths
+       pango_glyph_item_get_type
+       pango_glyph_item_iter_copy
+       pango_glyph_item_iter_free
+       pango_glyph_item_iter_get_type
+       pango_glyph_item_iter_init_end
+       pango_glyph_item_iter_init_start
+       pango_glyph_item_iter_next_cluster
+       pango_glyph_item_iter_prev_cluster
+       pango_glyph_item_letter_space
+       pango_glyph_item_split
+       pango_glyph_string_copy
+       pango_glyph_string_extents
+       pango_glyph_string_extents_range
+       pango_glyph_string_free
+       pango_glyph_string_get_logical_widths
+       pango_glyph_string_get_type
+       pango_glyph_string_get_width
+       pango_glyph_string_index_to_x
+       pango_glyph_string_new
+       pango_glyph_string_set_size
+       pango_glyph_string_x_to_index
+       pango_gravity_get_for_matrix
+       pango_gravity_get_for_script
+       pango_gravity_get_for_script_and_width
+       pango_gravity_get_type
+       pango_gravity_hint_get_type
+       pango_gravity_to_rotation
+       pango_is_zero_width
+       pango_item_copy
+       pango_item_free
+       pango_item_get_type
+       pango_item_new
+       pango_item_split
+       pango_itemize
+       pango_itemize_with_base_dir
+       pango_language_from_string
+       pango_language_get_default
+       pango_language_get_sample_string
+       pango_language_get_scripts
+       pango_language_get_type
+       pango_language_includes_script
+       pango_language_matches
+       pango_language_to_string
+       pango_layout_context_changed
+       pango_layout_copy
+       pango_layout_get_alignment
+       pango_layout_get_attributes
+       pango_layout_get_auto_dir
+       pango_layout_get_baseline
+       pango_layout_get_context
+       pango_layout_get_cursor_pos
+       pango_layout_get_ellipsize
+       pango_layout_get_extents
+       pango_layout_get_font_description
+       pango_layout_get_height
+       pango_layout_get_indent
+       pango_layout_get_iter
+       pango_layout_get_justify
+       pango_layout_get_line
+       pango_layout_get_line_count
+       pango_layout_get_line_readonly
+       pango_layout_get_lines
+       pango_layout_get_lines_readonly
+       pango_layout_get_log_attrs
+       pango_layout_get_pixel_extents
+       pango_layout_get_pixel_size
+       pango_layout_get_single_paragraph_mode
+       pango_layout_get_size
+       pango_layout_get_spacing
+       pango_layout_get_tabs
+       pango_layout_get_text
+       pango_layout_get_type
+       pango_layout_get_unknown_glyphs_count
+       pango_layout_get_width
+       pango_layout_get_wrap
+       pango_layout_index_to_line_x
+       pango_layout_index_to_pos
+       pango_layout_is_ellipsized
+       pango_layout_is_wrapped
+       pango_layout_iter_at_last_line
+       pango_layout_iter_copy
+       pango_layout_iter_free
+       pango_layout_iter_get_baseline
+       pango_layout_iter_get_char_extents
+       pango_layout_iter_get_cluster_extents
+       pango_layout_iter_get_index
+       pango_layout_iter_get_layout_extents
+       pango_layout_iter_get_layout
+       pango_layout_iter_get_line
+       pango_layout_iter_get_line_extents
+       pango_layout_iter_get_line_readonly
+       pango_layout_iter_get_line_yrange
+       pango_layout_iter_get_run
+       pango_layout_iter_get_run_extents
+       pango_layout_iter_get_run_readonly
+       pango_layout_iter_get_type
+       pango_layout_iter_next_char
+       pango_layout_iter_next_cluster
+       pango_layout_iter_next_line
+       pango_layout_iter_next_run
+       pango_layout_line_get_extents
+       pango_layout_line_get_pixel_extents
+       pango_layout_line_get_type
+       pango_layout_line_get_x_ranges
+       pango_layout_line_index_to_x
+       pango_layout_line_ref
+       pango_layout_line_unref
+       pango_layout_line_x_to_index
+       pango_layout_move_cursor_visually
+       pango_layout_new
+       pango_layout_set_alignment
+       pango_layout_set_attributes
+       pango_layout_set_auto_dir
+       pango_layout_set_ellipsize
+       pango_layout_set_font_description
+       pango_layout_set_height
+       pango_layout_set_indent
+       pango_layout_set_justify
+       pango_layout_set_markup
+       pango_layout_set_markup_with_accel
+       pango_layout_set_single_paragraph_mode
+       pango_layout_set_spacing
+       pango_layout_set_tabs
+       pango_layout_set_text
+       pango_layout_set_width
+       pango_layout_set_wrap
+       pango_layout_xy_to_index
+       pango_log2vis_get_embedding_levels
+       pango_lookup_aliases
+       pango_map_get_engine
+       pango_map_get_engines
+       pango_matrix_concat
+       pango_matrix_copy
+       pango_matrix_free
+       pango_matrix_get_font_scale_factor
+       pango_matrix_get_type
+       pango_matrix_rotate
+       pango_matrix_scale
+       pango_matrix_transform_distance
+       pango_matrix_transform_pixel_rectangle
+       pango_matrix_transform_point
+       pango_matrix_transform_rectangle
+       pango_matrix_translate
+       pango_module_register
+       pango_parse_enum
+       pango_parse_markup
+       pango_parse_stretch
+       pango_parse_style
+       pango_parse_variant
+       pango_parse_weight
+       pango_quantize_line_geometry
+       pango_read_line
+       pango_render_part_get_type
+       pango_renderer_activate
+       pango_renderer_deactivate
+       pango_renderer_draw_error_underline
+       pango_renderer_draw_glyph
+       pango_renderer_draw_glyph_item
+       pango_renderer_draw_glyphs
+       pango_renderer_draw_layout
+       pango_renderer_draw_layout_line
+       pango_renderer_draw_rectangle
+       pango_renderer_draw_trapezoid
+       pango_renderer_get_color
+       pango_renderer_get_layout
+       pango_renderer_get_layout_line
+       pango_renderer_get_matrix
+       pango_renderer_get_type
+       pango_renderer_part_changed
+       pango_renderer_set_color
+       pango_renderer_set_matrix
+       pango_reorder_items
+       pango_scan_int
+       pango_scan_string
+       pango_scan_word
+       pango_script_for_unichar
+       pango_script_get_sample_language
+       pango_script_get_type
+       pango_script_iter_free
+       pango_script_iter_get_range
+       pango_script_iter_new
+       pango_script_iter_next
+       pango_shape
+       pango_skip_space
+       pango_split_file_list
+       pango_stretch_get_type
+       pango_style_get_type
+       pango_tab_align_get_type
+       pango_tab_array_copy
+       pango_tab_array_free
+       pango_tab_array_get_positions_in_pixels
+       pango_tab_array_get_size
+       pango_tab_array_get_tab
+       pango_tab_array_get_tabs
+       pango_tab_array_get_type
+       pango_tab_array_new
+       pango_tab_array_new_with_positions
+       pango_tab_array_resize
+       pango_tab_array_set_tab
+       pango_trim_string
+       pango_underline_get_type
+       pango_unichar_direction
+       pango_units_from_double
+       pango_units_to_double
+       pango_variant_get_type
+       pango_version
+       pango_version_check
+       pango_version_string
+       pango_weight_get_type
+       pango_wrap_mode_get_type
diff --git a/pango/pango.h b/pango/pango.h
new file mode 100755 (executable)
index 0000000..5cc6957
--- /dev/null
@@ -0,0 +1,48 @@
+/* Pango
+ * pango.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_H__
+#define __PANGO_H__
+
+#include <pango/pango-attributes.h>
+#include <pango/pango-bidi-type.h>
+#include <pango/pango-break.h>
+#include <pango/pango-context.h>
+#include <pango/pango-coverage.h>
+#include <pango/pango-engine.h>
+#include <pango/pango-enum-types.h>
+#include <pango/pango-features.h>
+#include <pango/pango-font.h>
+#include <pango/pango-fontmap.h>
+#include <pango/pango-fontset.h>
+#include <pango/pango-glyph.h>
+#include <pango/pango-glyph-item.h>
+#include <pango/pango-gravity.h>
+#include <pango/pango-item.h>
+#include <pango/pango-layout.h>
+#include <pango/pango-matrix.h>
+#include <pango/pango-renderer.h>
+#include <pango/pango-script.h>
+#include <pango/pango-tabs.h>
+#include <pango/pango-types.h>
+#include <pango/pango-utils.h>
+
+#endif /* __PANGO_H__ */
diff --git a/pango/pango.rc b/pango/pango.rc
new file mode 100755 (executable)
index 0000000..96281b1
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION 1,26,1,0
+  PRODUCTVERSION 1,26,1,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "Pango"
+       VALUE "FileVersion", "1.26.1.0"
+       VALUE "InternalName", "pango-1.0-0"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software."
+       VALUE "OriginalFilename", "pango-1.0-0.dll"
+       VALUE "ProductName", "Pango"
+       VALUE "ProductVersion", "1.26.1"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pango.rc.in b/pango/pango.rc.in
new file mode 100755 (executable)
index 0000000..a6cd252
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "Pango"
+       VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+       VALUE "InternalName", "pango-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software."
+       VALUE "OriginalFilename", "pango-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+       VALUE "ProductName", "Pango"
+       VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangoatsui-fontmap.c b/pango/pangoatsui-fontmap.c
new file mode 100755 (executable)
index 0000000..f433440
--- /dev/null
@@ -0,0 +1,848 @@
+/* Pango
+ * pangoatsui-fontmap.c
+ *
+ * Copyright (C) 2000-2003 Red Hat, Inc.
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-fontmap.h"
+#include "pangoatsui-private.h"
+#include "pango-impl-utils.h"
+#include "modules.h"
+
+#import <Cocoa/Cocoa.h>
+
+typedef struct _FontHashKey      FontHashKey;
+
+struct _PangoATSUIFamily
+{
+  PangoFontFamily parent_instance;
+
+  char *family_name;
+
+  guint is_monospace : 1;
+
+  PangoFontFace **faces;
+  gint n_faces;
+};
+
+#define PANGO_TYPE_ATSUI_FAMILY              (pango_atsui_family_get_type ())
+#define PANGO_ATSUI_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ATSUI_FAMILY, PangoATSUIFamily))
+#define PANGO_IS_ATSUI_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ATSUI_FAMILY))
+
+#define PANGO_TYPE_ATSUI_FACE              (pango_atsui_face_get_type ())
+#define PANGO_ATSUI_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ATSUI_FACE, PangoATSUIFace))
+#define PANGO_IS_ATSUI_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ATSUI_FACE))
+
+struct _PangoATSUIFace
+{
+  PangoFontFace parent_instance;
+
+  PangoATSUIFamily *family;
+
+  PangoCoverage *coverage;
+
+  char *postscript_name;
+  char *style_name;
+
+  int weight;
+  int traits;
+  guint synthetic_italic : 1;
+};
+
+static GType pango_atsui_family_get_type (void);
+static GType pango_atsui_face_get_type (void);
+
+static gpointer pango_atsui_family_parent_class;
+static gpointer pango_atsui_face_parent_class;
+
+static const char *
+get_real_family (const char *family_name)
+{
+  switch (family_name[0])
+    {
+    case 'm':
+    case 'M':
+      if (g_ascii_strcasecmp (family_name, "monospace") == 0)
+       return "Courier";
+      break;
+    case 's':
+    case 'S':
+      if (g_ascii_strcasecmp (family_name, "sans") == 0)
+       return "Helvetica";
+      else if (g_ascii_strcasecmp (family_name, "serif") == 0)
+       return "Times";
+      break;
+    }
+
+  return family_name;
+}
+
+static void
+pango_atsui_family_list_faces (PangoFontFamily  *family,
+                              PangoFontFace  ***faces,
+                              int              *n_faces)
+{
+  PangoATSUIFamily *atsuifamily = PANGO_ATSUI_FAMILY (family);
+
+  if (atsuifamily->n_faces < 0)
+    {
+      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+      const char *real_family = get_real_family (atsuifamily->family_name);
+      NSFontManager *manager = [NSFontManager sharedFontManager];
+      NSArray *members = [manager availableMembersOfFontFamily:[NSString stringWithUTF8String:real_family]];
+      int i, count;
+      GHashTable *hash_table;
+      GList *faces = NULL, *l;
+      GList *synthetic_faces = NULL;
+
+      /* The NSFontManager API returns italic faces for some families
+       * even if they don't exist. When using Cocoa to create
+       * instances of those fonts, Cocoa synthesizes italic versions
+       * by applying a shear transformation. We do that manually for
+       * those fonts in pangocairo-atsuifont.c. For many other fonts,
+       * there is no italic face at all, so we create synthesized
+       * versions of those like in the win32 and fontconfig backends.
+       */
+      hash_table = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+      count = [members count];
+      for (i = 0; i < count; i++)
+       {
+         PangoATSUIFace *face = g_object_new (PANGO_TYPE_ATSUI_FACE, NULL);
+         NSArray *font_array = [members objectAtIndex:i];
+
+         face->family = atsuifamily;
+         face->postscript_name = g_strdup ([[font_array objectAtIndex:0] UTF8String]);
+         face->style_name = g_strdup ([[font_array objectAtIndex:1] UTF8String]);
+         face->weight = [[font_array objectAtIndex:2] intValue];
+         face->traits = [[font_array objectAtIndex:3] intValue];
+
+         faces = g_list_prepend (faces, face);
+
+         if (face->traits & NSItalicFontMask)
+           g_hash_table_insert (hash_table, GINT_TO_POINTER (face->weight), face);
+       }
+
+      for (l = faces; l; l = l->next)
+       {
+         PangoATSUIFace *face = l->data;
+
+         if (!g_hash_table_lookup (hash_table, GINT_TO_POINTER (face->weight)))
+           {
+             PangoATSUIFace *italic_face = g_object_new (PANGO_TYPE_ATSUI_FACE, NULL);
+
+             italic_face->family = atsuifamily;
+             italic_face->postscript_name = g_strdup (face->postscript_name);
+             italic_face->weight = face->weight;
+             italic_face->traits = face->traits | NSItalicFontMask;
+             italic_face->synthetic_italic = TRUE;
+
+             /* Try to create a sensible face name. */
+             if (strcasecmp (face->style_name, "regular") == 0)
+               italic_face->style_name = g_strdup ("Oblique");
+             else 
+               italic_face->style_name = g_strdup_printf ("%s Oblique", face->style_name);
+
+             synthetic_faces = g_list_prepend (synthetic_faces, italic_face);
+           }
+       }
+
+      faces = g_list_concat (faces, synthetic_faces);
+
+      atsuifamily->n_faces = g_list_length (faces);
+      atsuifamily->faces = g_new (PangoFontFace *, atsuifamily->n_faces);
+
+      for (l = faces, i = 0; l; l = l->next, i++)
+       atsuifamily->faces[i] = l->data;
+
+      g_list_free (faces);
+      g_hash_table_destroy (hash_table);
+
+      [pool release];
+    }
+
+  if (n_faces)
+    *n_faces = atsuifamily->n_faces;
+
+  if (faces)
+    *faces = g_memdup (atsuifamily->faces, atsuifamily->n_faces * sizeof (PangoFontFace *));
+}
+
+static const char *
+pango_atsui_family_get_name (PangoFontFamily *family)
+
+{
+  PangoATSUIFamily *atsuifamily = PANGO_ATSUI_FAMILY (family);
+
+  return atsuifamily->family_name;
+}
+
+static gboolean
+pango_atsui_family_is_monospace (PangoFontFamily *family)
+{
+  PangoATSUIFamily *atsuifamily = PANGO_ATSUI_FAMILY (family);
+
+  return atsuifamily->is_monospace;
+}
+
+static void
+pango_atsui_family_finalize (GObject *object)
+{
+  PangoATSUIFamily *family = PANGO_ATSUI_FAMILY (object);
+  int i;
+
+  g_free (family->family_name);
+
+  if (family->n_faces != -1)
+    {
+      for (i = 0; i < family->n_faces; i++)
+       g_object_unref (family->faces[i]);
+
+      g_free (family->faces);
+    }
+
+  G_OBJECT_CLASS (pango_atsui_family_parent_class)->finalize (object);
+}
+
+static void
+pango_atsui_family_class_init (PangoFontFamilyClass *class)
+{
+  GObjectClass *object_class = (GObjectClass *)class;
+  int i;
+
+  pango_atsui_family_parent_class = g_type_class_peek_parent (class);
+
+  object_class->finalize = pango_atsui_family_finalize;
+
+  class->list_faces = pango_atsui_family_list_faces;
+  class->get_name = pango_atsui_family_get_name;
+  class->is_monospace = pango_atsui_family_is_monospace;
+
+  for (i = 0; _pango_included_atsui_modules[i].list; i++)
+    pango_module_register (&_pango_included_atsui_modules[i]);
+}
+
+static void
+pango_atsui_family_init (PangoATSUIFamily *family)
+{
+  family->n_faces = -1;
+}
+
+static GType
+pango_atsui_family_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoFontFamilyClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_atsui_family_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoATSUIFamily),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) pango_atsui_family_init,
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT_FAMILY,
+                                           I_("PangoATSUIFamily"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+static PangoFontDescription *
+pango_atsui_face_describe (PangoFontFace *face)
+{
+  PangoATSUIFace *atsuiface = PANGO_ATSUI_FACE (face);
+  PangoFontDescription *description;
+  PangoWeight pango_weight;
+  PangoStyle pango_style;
+  PangoVariant pango_variant;
+  int weight;
+
+  description = pango_font_description_new ();
+
+  pango_font_description_set_family (description, atsuiface->family->family_name);
+
+  weight = atsuiface->weight;
+
+  if (weight == 1 || weight == 2)
+    pango_weight = PANGO_WEIGHT_ULTRALIGHT;
+  else if (weight == 3 || weight == 4)
+    pango_weight = PANGO_WEIGHT_LIGHT;
+  else if (weight == 5 || weight == 6)
+    pango_weight = PANGO_WEIGHT_NORMAL;
+  else if (weight == 7 || weight == 8)
+    pango_weight = PANGO_WEIGHT_SEMIBOLD;
+  else if (weight == 9 || weight == 10)
+    pango_weight = PANGO_WEIGHT_BOLD;
+  else if (weight == 11 || weight == 12)
+    pango_weight = PANGO_WEIGHT_ULTRABOLD;
+  else if (weight == 13 || weight == 14)
+    pango_weight = PANGO_WEIGHT_HEAVY;
+  else
+    g_assert_not_reached ();
+
+  if (atsuiface->traits & NSItalicFontMask)
+    pango_style = PANGO_STYLE_ITALIC;
+  else
+    pango_style = PANGO_STYLE_NORMAL;
+
+  if (atsuiface->traits & NSSmallCapsFontMask)
+    pango_variant = PANGO_VARIANT_SMALL_CAPS;
+  else
+    pango_variant = PANGO_VARIANT_NORMAL;
+
+  pango_font_description_set_weight (description, pango_weight);
+  pango_font_description_set_style (description, pango_style);
+  pango_font_description_set_variant (description, pango_variant);
+
+  return description;
+}
+
+static const char *
+pango_atsui_face_get_face_name (PangoFontFace *face)
+{
+  PangoATSUIFace *atsuiface = PANGO_ATSUI_FACE (face);
+
+  return atsuiface->style_name;
+}
+
+static void
+pango_atsui_face_list_sizes (PangoFontFace  *face,
+                            int           **sizes,
+                            int            *n_sizes)
+{
+  *n_sizes = 0;
+  *sizes = NULL;
+}
+
+static void
+pango_atsui_face_finalize (GObject *object)
+{
+  PangoATSUIFace *atsuiface = PANGO_ATSUI_FACE (object);
+
+  if (atsuiface->coverage)
+    pango_coverage_unref (atsuiface->coverage);
+
+  g_free (atsuiface->postscript_name);
+  g_free (atsuiface->style_name);
+
+  G_OBJECT_CLASS (pango_atsui_face_parent_class)->finalize (object);
+}
+
+static gboolean
+pango_atsui_face_is_synthesized (PangoFontFace *face)
+{
+  PangoATSUIFace *atsuiface = PANGO_ATSUI_FACE (face);
+
+  return atsuiface->synthetic_italic;
+}
+
+static void
+pango_atsui_face_class_init (PangoFontFaceClass *class)
+{
+  GObjectClass *object_class = (GObjectClass *)class;
+
+  pango_atsui_face_parent_class = g_type_class_peek_parent (class);
+
+  object_class->finalize = pango_atsui_face_finalize;
+
+  class->describe = pango_atsui_face_describe;
+  class->get_face_name = pango_atsui_face_get_face_name;
+  class->list_sizes = pango_atsui_face_list_sizes;
+  class->is_synthesized = pango_atsui_face_is_synthesized;
+}
+
+GType
+pango_atsui_face_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoFontFaceClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_atsui_face_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoATSUIFace),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) NULL,
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT_FACE,
+                                           I_("PangoATSUIFace"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+const char *
+_pango_atsui_face_get_postscript_name (PangoATSUIFace *face)
+{
+  return face->postscript_name;
+}
+
+gboolean
+_pango_atsui_face_get_synthetic_italic (PangoATSUIFace *face)
+{
+  return face->synthetic_italic;
+}
+
+PangoCoverage *
+_pango_atsui_face_get_coverage (PangoATSUIFace *face,
+                               PangoLanguage  *language)
+{
+  int i;
+
+  /* Note: We currently fake the coverage by reporting that the 255 first 
+   * glyphs exist in all fonts, which is not true. It's unclear how to get
+   * this done correctly.
+   */
+
+  if (face->coverage)
+    return face->coverage;
+
+  face->coverage = pango_coverage_new ();
+
+  for (i = 0; i < 256; i++)
+    pango_coverage_set (face->coverage, i, PANGO_COVERAGE_EXACT);
+
+  return face->coverage;
+}
+
+static void pango_atsui_font_map_class_init (PangoATSUIFontMapClass *class);
+static void pango_atsui_font_map_init (PangoATSUIFontMap *atsuifontmap);
+
+static guint    font_hash_key_hash  (const FontHashKey *key);
+static gboolean font_hash_key_equal (const FontHashKey *key_a,
+                                    const FontHashKey *key_b);
+static void     font_hash_key_free  (FontHashKey       *key);
+
+G_DEFINE_TYPE (PangoATSUIFontMap, pango_atsui_font_map, PANGO_TYPE_FONT_MAP);
+
+static void
+pango_atsui_font_map_finalize (GObject *object)
+{
+  PangoATSUIFontMap *fontmap = PANGO_ATSUI_FONT_MAP (object);
+
+  g_hash_table_destroy (fontmap->font_hash);
+  g_hash_table_destroy (fontmap->families);
+
+  G_OBJECT_CLASS (pango_atsui_font_map_parent_class)->finalize (object);
+}
+
+struct _FontHashKey {
+  PangoATSUIFontMap *fontmap;
+  PangoMatrix matrix;
+  PangoFontDescription *desc;
+  char *postscript_name;
+  gpointer context_key;
+};
+
+/* Fowler / Noll / Vo (FNV) Hash (http://www.isthe.com/chongo/tech/comp/fnv/)
+ *
+ * Not necessarily better than a lot of other hashes, but should be OK, and
+ * well tested with binary data.
+ */
+
+#define FNV_32_PRIME ((guint32)0x01000193)
+#define FNV1_32_INIT ((guint32)0x811c9dc5)
+
+static guint32
+hash_bytes_fnv (unsigned char *buffer,
+               int            len,
+               guint32        hval)
+{
+  while (len--)
+    {
+      hval *= FNV_32_PRIME;
+      hval ^= *buffer++;
+    }
+
+  return hval;
+}
+
+static gboolean
+font_hash_key_equal (const FontHashKey *key_a,
+                    const FontHashKey *key_b)
+{
+  if (key_a->matrix.xx == key_b->matrix.xx &&
+      key_a->matrix.xy == key_b->matrix.xy &&
+      key_a->matrix.yx == key_b->matrix.yx &&
+      key_a->matrix.yy == key_b->matrix.yy &&
+      pango_font_description_equal (key_a->desc, key_b->desc) &&
+      strcmp (key_a->postscript_name, key_b->postscript_name) == 0)
+    {
+      if (key_a->context_key)
+       return PANGO_ATSUI_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap,
+                                                                               key_a->context_key,
+                                                                               key_b->context_key);
+      else
+       return TRUE;
+    }
+  else
+    return FALSE;
+}
+
+static guint
+font_hash_key_hash (const FontHashKey *key)
+{
+    guint32 hash = FNV1_32_INIT;
+
+    /* We do a bytewise hash on the context matrix */
+    hash = hash_bytes_fnv ((unsigned char *)(&key->matrix),
+                          sizeof(double) * 4,
+                          hash);
+
+    if (key->context_key)
+      hash ^= PANGO_ATSUI_FONT_MAP_GET_CLASS (key->fontmap)->context_key_hash (key->fontmap,
+                                                                              key->context_key);
+
+    hash ^= g_str_hash (key->postscript_name);
+
+    return (hash ^ pango_font_description_hash (key->desc));
+}
+
+static void
+font_hash_key_free (FontHashKey *key)
+{
+  if (key->context_key)
+    PANGO_ATSUI_FONT_MAP_GET_CLASS (key->fontmap)->context_key_free (key->fontmap,
+                                                                    key->context_key);
+
+  g_slice_free (FontHashKey, key);
+}
+
+static FontHashKey *
+font_hash_key_copy (FontHashKey *old)
+{
+  FontHashKey *key = g_slice_new (FontHashKey);
+
+  key->fontmap = old->fontmap;
+  key->matrix = old->matrix;
+  key->desc = pango_font_description_copy (old->desc);
+  key->postscript_name = g_strdup (old->postscript_name);
+  if (old->context_key)
+    key->context_key = PANGO_ATSUI_FONT_MAP_GET_CLASS (key->fontmap)->context_key_copy (key->fontmap,
+                                                                                       old->context_key);
+  else
+    key->context_key = NULL;
+
+  return key;
+}
+
+
+static void
+get_context_matrix (PangoContext *context,
+                   PangoMatrix *matrix)
+{
+  const PangoMatrix *set_matrix;
+  static const PangoMatrix identity = PANGO_MATRIX_INIT;
+
+  if (context)
+    set_matrix = pango_context_get_matrix (context);
+  else
+    set_matrix = NULL;
+
+  if (set_matrix)
+    *matrix = *set_matrix;
+  else
+    *matrix = identity;
+}
+
+static void
+font_hash_key_for_context (PangoATSUIFontMap *fcfontmap,
+                          PangoContext   *context,
+                          FontHashKey    *key)
+{
+  key->fontmap = fcfontmap;
+  get_context_matrix (context, &key->matrix);
+
+  if (PANGO_ATSUI_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get)
+    key->context_key = (gpointer)PANGO_ATSUI_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get (fcfontmap, context);
+  else
+    key->context_key = NULL;
+}
+
+static void
+pango_atsui_font_map_add (PangoATSUIFontMap *atsuifontmap,
+                         PangoContext      *context,
+                         PangoATSUIFont    *atsuifont)
+{
+  FontHashKey key;
+  FontHashKey *key_copy;
+  PangoATSUIFace *face;
+
+  _pango_atsui_font_set_font_map (atsuifont, atsuifontmap);
+
+  font_hash_key_for_context (atsuifontmap, context, &key);
+  face = _pango_atsui_font_get_face (atsuifont);
+  key.postscript_name = (char *)_pango_atsui_face_get_postscript_name (face);
+  key.desc = _pango_atsui_font_get_font_description (atsuifont);
+
+  key_copy = font_hash_key_copy (&key);
+  _pango_atsui_font_set_context_key (atsuifont, key_copy->context_key);
+  g_hash_table_insert (atsuifontmap->font_hash, key_copy, g_object_ref (atsuifont));
+}
+
+static PangoATSUIFont *
+pango_atsui_font_map_lookup (PangoATSUIFontMap    *atsuifontmap,
+                            PangoContext         *context,
+                            PangoFontDescription *desc,
+                            PangoATSUIFace       *face)
+{
+  FontHashKey key;
+
+  font_hash_key_for_context (atsuifontmap, context, &key);
+  key.postscript_name = (char *)_pango_atsui_face_get_postscript_name (face);
+  key.desc = desc;
+
+  return g_hash_table_lookup (atsuifontmap->font_hash, &key);
+}
+
+static gboolean
+find_best_match (PangoATSUIFamily            *font_family,
+                const PangoFontDescription  *description,
+                PangoFontDescription       **best_description,
+                PangoATSUIFace             **best_face)
+{
+  PangoFontDescription *new_desc;
+  int i;
+
+  *best_description = NULL;
+  *best_face = NULL;
+
+  for (i = 0; i < font_family->n_faces; i++)
+    {
+      new_desc = pango_font_face_describe (font_family->faces[i]);
+
+      if (pango_font_description_better_match (description, *best_description, new_desc))
+       {
+         pango_font_description_free (*best_description);
+         *best_description = new_desc;
+         *best_face = (PangoATSUIFace *)font_family->faces[i];
+       }
+      else
+       pango_font_description_free (new_desc);
+    }
+
+  if (*best_description)
+    return TRUE;
+
+  return FALSE;
+}
+
+static PangoFont *
+pango_atsui_font_map_load_font (PangoFontMap               *fontmap,
+                               PangoContext               *context,
+                               const PangoFontDescription *description)
+{
+  PangoATSUIFontMap *atsuifontmap = (PangoATSUIFontMap *)fontmap;
+  PangoATSUIFamily *font_family;
+  const gchar *family;
+  gchar *name;
+  gint size;
+
+  size = pango_font_description_get_size (description);
+  if (size < 0)
+    return NULL;
+
+  family = pango_font_description_get_family (description);
+  family = family ? family : "";
+  name = g_utf8_casefold (family, -1);
+  font_family = g_hash_table_lookup (atsuifontmap->families, name);
+  g_free (name);
+
+  if (font_family)
+    {
+      PangoFontDescription *best_description;
+      PangoATSUIFace *best_face;
+      PangoATSUIFont *best_font;
+
+      /* Force a listing of the available faces */
+      pango_font_family_list_faces ((PangoFontFamily *)font_family, NULL, NULL);
+
+      if (!find_best_match (font_family, description, &best_description, &best_face))
+       return NULL;
+      
+      pango_font_description_set_size (best_description, size);
+
+      best_font = pango_atsui_font_map_lookup (atsuifontmap, 
+                                              context, 
+                                              best_description, 
+                                              best_face);
+
+      if (best_font)
+       g_object_ref (best_font);
+      else
+       {
+         PangoATSUIFontMapClass *klass;
+
+         klass = PANGO_ATSUI_FONT_MAP_GET_CLASS (atsuifontmap);
+         best_font = klass->create_font (atsuifontmap, context, 
+                                         best_face, best_description);
+         
+         if (best_font)
+           pango_atsui_font_map_add (atsuifontmap, context, best_font);
+           /* TODO: Handle the else case here. */
+       }
+
+      pango_font_description_free (best_description);
+
+      return (PangoFont *)best_font;
+    }
+
+  return NULL;
+}
+
+static void
+list_families_foreach (gpointer key,
+                      gpointer value,
+                      gpointer user_data)
+{
+  GSList **list = user_data;
+
+  *list = g_slist_prepend (*list, value);
+}
+
+static void
+pango_atsui_font_map_list_families (PangoFontMap      *fontmap,
+                                   PangoFontFamily ***families,
+                                   int               *n_families)
+{
+  GSList *family_list = NULL;
+  GSList *tmp_list;
+  PangoATSUIFontMap *atsuifontmap = (PangoATSUIFontMap *)fontmap;
+
+  if (!n_families)
+    return;
+
+  g_hash_table_foreach (atsuifontmap->families, list_families_foreach, &family_list);
+
+  *n_families = g_slist_length (family_list);
+
+  if (families)
+    {
+      int i = 0;
+
+      *families = g_new (PangoFontFamily *, *n_families);
+
+      tmp_list = family_list;
+      while (tmp_list)
+       {
+         (*families)[i] = tmp_list->data;
+         i++;
+         tmp_list = tmp_list->next;
+       }
+    }
+
+  g_slist_free (family_list);
+}
+
+static void
+pango_atsui_font_map_init (PangoATSUIFontMap *atsuifontmap)
+{
+  NSAutoreleasePool *pool;
+  NSFontManager *manager;
+  NSArray *family_array;
+  PangoATSUIFamily *family;
+  int size, i;
+
+  atsuifontmap->families = g_hash_table_new_full (g_str_hash, g_str_equal,
+                                                 g_free, g_object_unref);
+
+
+  atsuifontmap->font_hash = g_hash_table_new_full ((GHashFunc)font_hash_key_hash,
+                                                  (GEqualFunc)font_hash_key_equal,
+                                                  (GDestroyNotify)font_hash_key_free,
+                                                  NULL);
+
+  pool = [[NSAutoreleasePool alloc] init];
+  manager = [NSFontManager sharedFontManager];
+  family_array = [manager availableFontFamilies];
+  size = [family_array count];
+
+  for (i = 0; i < size; i++)
+    {
+      NSString *family_name = [family_array objectAtIndex:i];
+      NSArray *members;
+
+      family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL);
+      family->family_name = g_strdup ([family_name UTF8String]);
+  
+      members = [manager availableMembersOfFontFamily:family_name];
+      if ([members count] > 0)
+        {
+          NSArray *font_array = [members objectAtIndex:0];
+
+          /* We assume that all faces in the family are monospaced, or
+           * none.
+           */
+         if ([[font_array objectAtIndex:3] intValue] & NSFixedPitchFontMask)
+            family->is_monospace = TRUE;
+        }
+
+      g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family);
+    }
+
+  /* Insert aliases */
+  family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL);
+  family->family_name = g_strdup ("Sans");
+  g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family);
+
+  family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL);
+  family->family_name = g_strdup ("Serif");
+  g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family);
+
+  family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL);
+  family->family_name = g_strdup ("Monospace");
+  family->is_monospace = TRUE;
+  g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family);
+
+  [pool release];
+}
+
+static void
+pango_atsui_font_map_class_init (PangoATSUIFontMapClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontMapClass *fontmap_class = PANGO_FONT_MAP_CLASS (class);
+
+  object_class->finalize = pango_atsui_font_map_finalize;
+
+  fontmap_class->load_font = pango_atsui_font_map_load_font;
+  fontmap_class->list_families = pango_atsui_font_map_list_families;
+  fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_ATSUI;
+}
+
+
diff --git a/pango/pangoatsui-private.h b/pango/pangoatsui-private.h
new file mode 100755 (executable)
index 0000000..8c734f0
--- /dev/null
@@ -0,0 +1,101 @@
+/* Pango
+ * pangoatsui-private.h:
+ *
+ * Copyright (C) 2003 Red Hat Software
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOATSUI_PRIVATE_H__
+#define __PANGOATSUI_PRIVATE_H__
+
+#include <pango/pango-fontmap.h>
+#include <pango/pango-context.h>
+#include "pangoatsui.h"
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_ATSUI_FONT_MAP             (pango_atsui_font_map_get_type ())
+#define PANGO_ATSUI_FONT_MAP(object)          (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ATSUI_FONT_MAP, PangoATSUIFontMap))
+#define PANGO_ATSUI_IS_FONT_MAP(object)       (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ATSUI_FONT_MAP))
+#define PANGO_ATSUI_FONT_MAP_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ATSUI_FONT_MAP, PangoATSUIFontMapClass))
+#define PANGO_IS_ATSUI_FONT_MAP_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ATSUI_FONT_MAP))
+#define PANGO_ATSUI_FONT_MAP_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ATSUI_FONT_MAP, PangoATSUIFontMapClass))
+
+
+typedef struct _PangoATSUIFamily       PangoATSUIFamily;
+typedef struct _PangoATSUIFace         PangoATSUIFace;
+
+typedef struct _PangoATSUIFontMap      PangoATSUIFontMap;
+typedef struct _PangoATSUIFontMapClass PangoATSUIFontMapClass;
+
+struct _PangoATSUIFontMap
+{
+  PangoFontMap parent_instance;
+
+  GHashTable *font_hash;
+
+  GHashTable *families;
+};
+
+struct _PangoATSUIFontMapClass
+{
+  PangoFontMapClass parent_class;
+
+  gconstpointer (*context_key_get)   (PangoATSUIFontMap             *atsuifontmap,
+                                     PangoContext               *context);
+  gpointer     (*context_key_copy)   (PangoATSUIFontMap             *atsuifontmap,
+                                     gconstpointer               key);
+  void         (*context_key_free)   (PangoATSUIFontMap             *atsuifontmap,
+                                     gpointer                    key);
+  guint32      (*context_key_hash)   (PangoATSUIFontMap             *atsuifontmap,
+                                     gconstpointer               key);
+  gboolean     (*context_key_equal)  (PangoATSUIFontMap             *atsuifontmap,
+                                     gconstpointer               key_a,
+                                     gconstpointer               key_b);
+
+  PangoATSUIFont * (* create_font)   (PangoATSUIFontMap          *fontmap,
+                                     PangoContext               *context,
+                                     PangoATSUIFace             *face,
+                                     const PangoFontDescription *desc);
+};
+
+
+GType                 pango_atsui_font_map_get_type          (void) G_GNUC_CONST;
+
+const char *          _pango_atsui_face_get_postscript_name  (PangoATSUIFace    *face);
+PangoCoverage *       _pango_atsui_face_get_coverage         (PangoATSUIFace    *face,
+                                                              PangoLanguage     *language);
+gboolean              _pango_atsui_face_get_synthetic_italic (PangoATSUIFace    *face);
+
+void                  _pango_atsui_font_set_font_description (PangoATSUIFont    *afont,
+                                                              const PangoFontDescription *desc);
+PangoFontDescription *_pango_atsui_font_get_font_description (PangoATSUIFont    *afont);
+void                  _pango_atsui_font_set_font_map         (PangoATSUIFont    *afont,
+                                                              PangoATSUIFontMap *fontmap);
+void                  _pango_atsui_font_set_face             (PangoATSUIFont    *afont, 
+                                                              PangoATSUIFace    *aface);
+PangoATSUIFace *      _pango_atsui_font_get_face             (PangoATSUIFont    *font);
+gpointer              _pango_atsui_font_get_context_key      (PangoATSUIFont    *afont);
+void                  _pango_atsui_font_set_context_key      (PangoATSUIFont    *afont,
+                                                              gpointer           context_key);
+void                  _pango_atsui_font_set_cgfont           (PangoATSUIFont    *font,
+                                                              CGFontRef         font_id);
+
+G_END_DECLS
+
+#endif /* __PANGOATSUI_H__ */
diff --git a/pango/pangoatsui.c b/pango/pangoatsui.c
new file mode 100755 (executable)
index 0000000..6aa970e
--- /dev/null
@@ -0,0 +1,203 @@
+/* Pango
+ * pangatsui.c
+ *
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pangoatsui.h"
+#include "pangoatsui-private.h"
+
+G_DEFINE_TYPE (PangoATSUIFont, pango_atsui_font, PANGO_TYPE_FONT);
+
+struct _PangoATSUIFontPrivate
+{
+  PangoATSUIFace *face;
+  PangoFontDescription *desc;
+  gpointer context_key;
+
+  CGFontRef font_id;
+
+  PangoFontMap *fontmap;
+};
+
+static void
+pango_atsui_font_finalize (GObject *object)
+{
+  PangoATSUIFont *afont = (PangoATSUIFont *)object;
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  pango_font_description_free (priv->desc);
+
+  g_assert (priv->fontmap != NULL);
+  g_object_remove_weak_pointer (G_OBJECT (priv->fontmap), (gpointer *) (gpointer) &priv->fontmap);
+  priv->fontmap = NULL;
+
+  G_OBJECT_CLASS (pango_atsui_font_parent_class)->finalize (object);
+}
+
+static PangoFontDescription *
+pango_atsui_font_describe (PangoFont *font)
+{
+  PangoATSUIFont *afont = (PangoATSUIFont *)font;
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  return pango_font_description_copy (priv->desc);
+}
+
+static PangoCoverage *
+pango_atsui_font_get_coverage (PangoFont     *font,
+                              PangoLanguage *language)
+{
+  PangoATSUIFont *afont = (PangoATSUIFont *)font;
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  return pango_coverage_ref (_pango_atsui_face_get_coverage (priv->face,
+                                                             language));
+}
+
+static PangoEngineShape *
+pango_atsui_font_find_shaper (PangoFont     *font,
+                             PangoLanguage *language,
+                             guint32        ch)
+{
+  /* FIXME: Implement */
+  return NULL;
+}
+
+static PangoFontMap *
+pango_atsui_font_get_font_map (PangoFont *font)
+{
+  PangoATSUIFont *afont = (PangoATSUIFont *)font;
+
+  return afont->priv->fontmap;
+}
+
+static void
+pango_atsui_font_init (PangoATSUIFont *afont)
+{
+  afont->priv = G_TYPE_INSTANCE_GET_PRIVATE (afont,
+                                             PANGO_TYPE_ATSUI_FONT,
+                                             PangoATSUIFontPrivate);
+}
+
+static void
+pango_atsui_font_class_init (PangoATSUIFontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+
+  object_class->finalize = pango_atsui_font_finalize;
+
+  font_class->describe = pango_atsui_font_describe;
+  font_class->get_coverage = pango_atsui_font_get_coverage;
+  font_class->find_shaper = pango_atsui_font_find_shaper;
+  font_class->get_font_map = pango_atsui_font_get_font_map;
+
+  g_type_class_add_private (object_class, sizeof (PangoATSUIFontPrivate));
+}
+
+void
+_pango_atsui_font_set_font_description (PangoATSUIFont             *font,
+                                        const PangoFontDescription *desc)
+{
+  PangoATSUIFontPrivate *priv = font->priv;
+
+  priv->desc = pango_font_description_copy (desc);
+}
+
+PangoFontDescription *
+_pango_atsui_font_get_font_description (PangoATSUIFont *font)
+{
+  PangoATSUIFontPrivate *priv = font->priv;
+
+  return priv->desc;
+}
+
+void
+_pango_atsui_font_set_font_map (PangoATSUIFont    *font,
+                                PangoATSUIFontMap *fontmap)
+{
+  PangoATSUIFontPrivate *priv = font->priv;
+
+  g_assert (priv->fontmap == NULL);
+  priv->fontmap = (PangoFontMap *) fontmap;
+  g_object_add_weak_pointer (G_OBJECT (priv->fontmap), (gpointer *) (gpointer) &priv->fontmap);
+}
+
+void
+_pango_atsui_font_set_face (PangoATSUIFont *afont, 
+                            PangoATSUIFace *face)
+{
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  priv->face = face;
+}
+
+PangoATSUIFace *
+_pango_atsui_font_get_face (PangoATSUIFont *afont)
+{
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  return priv->face;
+}
+
+gpointer
+_pango_atsui_font_get_context_key (PangoATSUIFont *afont)
+{
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  return priv->context_key;
+}
+
+void
+_pango_atsui_font_set_context_key (PangoATSUIFont *afont,
+                                   gpointer        context_key)
+{
+  PangoATSUIFontPrivate *priv = afont->priv;
+
+  priv->context_key = context_key;
+}
+
+void
+_pango_atsui_font_set_cgfont (PangoATSUIFont *font,
+                                    CGFontRef      font_id)
+{
+  PangoATSUIFontPrivate *priv = font->priv;
+
+  priv->font_id = font_id;
+}
+
+/**
+ * pango_atsui_font_get_cgfont:
+ * @font: A #PangoATSUIFont
+ *
+ * Returns the CGFontRef of a font.
+ *
+ * Return value: the CGFontRef associated to @font.
+ *
+ * Since: 1.18
+ */
+CGFontRef
+pango_atsui_font_get_cgfont (PangoATSUIFont *font)
+{
+  PangoATSUIFontPrivate *priv = font->priv;
+
+  return priv->font_id;
+}
diff --git a/pango/pangoatsui.h b/pango/pangoatsui.h
new file mode 100755 (executable)
index 0000000..12db6de
--- /dev/null
@@ -0,0 +1,79 @@
+/* Pango
+ * pangoatsui.h:
+ *
+ * Copyright (C) 2005 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOATSUI_H__
+#define __PANGOATSUI_H__
+
+#include <pango/pango-context.h>
+#include <pango/pango-font.h>
+#include <ApplicationServices/ApplicationServices.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_ATSUI_FONT       (pango_atsui_font_get_type ())
+#define PANGO_ATSUI_FONT(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ATSUI_FONT, PangoATSUIFont))
+#define PANGO_IS_ATSUI_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ATSUI_FONT))
+
+typedef struct _PangoATSUIFont         PangoATSUIFont;
+typedef struct _PangoATSUIFontClass    PangoATSUIFontClass;
+
+#if defined(PANGO_ENABLE_ENGINE) || defined(PANGO_ENABLE_BACKEND)
+
+#define PANGO_RENDER_TYPE_ATSUI "PangoRenderATSUI"
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_ATSUI_FONT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ATSUI_FONT, PangoATSUIFontClass))
+#define PANGO_IS_ATSUI_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ATSUI_FONT))
+#define PANGO_ATSUI_FONT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ATSUI_FONT, PangoATSUIFontClass))
+
+typedef struct _PangoATSUIFontPrivate  PangoATSUIFontPrivate;
+
+struct _PangoATSUIFont
+{
+  PangoFont parent_instance;
+  PangoATSUIFontPrivate *priv;
+};
+
+struct _PangoATSUIFontClass
+{
+  PangoFontClass parent_class;
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+CGFontRef pango_atsui_font_get_cgfont (PangoATSUIFont *font);
+
+#endif /* PANGO_ENABLE_ENGINE || PANGO_ENABLE_BACKEND */
+
+GType      pango_atsui_font_get_type         (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __PANGOATSUI_H__ */
diff --git a/pango/pangocairo-atsui.h b/pango/pangocairo-atsui.h
new file mode 100755 (executable)
index 0000000..423cffc
--- /dev/null
@@ -0,0 +1,55 @@
+/* Pango
+ * pangoatsui.h:
+ *
+ * Copyright (C) 2005 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOCAIRO_ATSUI_H__
+#define __PANGOCAIRO_ATSUI_H__
+
+#include "pangoatsui-private.h"
+#include <pango/pangocairo.h>
+#include <cairo-quartz.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_CAIRO_ATSUI_FONT_MAP       (pango_cairo_atsui_font_map_get_type ())
+#define PANGO_CAIRO_ATSUI_FONT_MAP(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_ATSUI_FONT_MAP, PangoCairoATSUIFontMap))
+#define PANGO_IS_CAIRO_ATSUI_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_ATSUI_FONT_MAP))
+
+typedef struct _PangoCairoATSUIFontMap PangoCairoATSUIFontMap;
+
+struct _PangoCairoATSUIFontMap
+{
+  PangoATSUIFontMap parent_instance;
+
+  gdouble dpi;
+};
+
+GType pango_cairo_atsui_font_map_get_type (void) G_GNUC_CONST;
+
+PangoATSUIFont *
+_pango_cairo_atsui_font_new (PangoCairoATSUIFontMap     *cafontmap,
+                            PangoContext               *context,
+                            PangoATSUIFace             *face,
+                            const PangoFontDescription *desc);
+
+G_END_DECLS
+
+#endif /* __PANGOCAIRO_ATSUI_H__ */
+
diff --git a/pango/pangocairo-atsuifont.c b/pango/pangocairo-atsuifont.c
new file mode 100755 (executable)
index 0000000..2147244
--- /dev/null
@@ -0,0 +1,318 @@
+/* Pango
+ * pangocairo-atsuifont.c
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#import <Cocoa/Cocoa.h>
+
+#include "pango-impl-utils.h"
+#include "pangoatsui-private.h"
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pangocairo-atsui.h"
+#include "pangocairo-atsuifont.h"
+
+struct _PangoCairoATSUIFont
+{
+  PangoATSUIFont font;
+  PangoCairoFontPrivate cf_priv;
+
+  double size;
+  int absolute_size;
+};
+
+struct _PangoCairoATSUIFontClass
+{
+  PangoATSUIFontClass parent_class;
+};
+
+
+
+static cairo_font_face_t *pango_cairo_atsui_font_create_font_face           (PangoCairoFont *font);
+static PangoFontMetrics  *pango_cairo_atsui_font_create_metrics_for_context (PangoCairoFont *font,
+                                                                            PangoContext    *context);
+
+static void
+cairo_font_iface_init (PangoCairoFontIface *iface)
+{
+  iface->create_font_face = pango_cairo_atsui_font_create_font_face;
+  iface->create_metrics_for_context = pango_cairo_atsui_font_create_metrics_for_context;
+  iface->cf_priv_offset = G_STRUCT_OFFSET (PangoCairoATSUIFont, cf_priv);
+}
+
+G_DEFINE_TYPE_WITH_CODE (PangoCairoATSUIFont, pango_cairo_atsui_font, PANGO_TYPE_ATSUI_FONT,
+    { G_IMPLEMENT_INTERFACE (PANGO_TYPE_CAIRO_FONT, cairo_font_iface_init) });
+
+/* we want get_glyph_extents extremely fast, so we use a small wrapper here
+ * to avoid having to lookup the interface data like we do for get_metrics
+ * in _pango_cairo_font_get_metrics(). */
+static void
+pango_cairo_atsui_font_get_glyph_extents (PangoFont      *font,
+                                          PangoGlyph      glyph,
+                                          PangoRectangle *ink_rect,
+                                          PangoRectangle *logical_rect)
+{
+  PangoCairoATSUIFont *cafont = (PangoCairoATSUIFont *) (font);
+
+  _pango_cairo_font_private_get_glyph_extents (&cafont->cf_priv,
+                                              glyph,
+                                              ink_rect,
+                                              logical_rect);
+}
+
+static cairo_font_face_t *
+pango_cairo_atsui_font_create_font_face (PangoCairoFont *font)
+{
+  PangoATSUIFont *afont = (PangoATSUIFont *) (font);
+  CGFontRef font_id;
+
+  font_id = pango_atsui_font_get_cgfont (afont);
+  return cairo_quartz_font_face_create_for_cgfont (font_id);
+}
+
+static int
+max_glyph_width (PangoLayout *layout)
+{
+  int max_width = 0;
+  GSList *l, *r;
+
+  for (l = pango_layout_get_lines_readonly (layout); l; l = l->next)
+    {
+      PangoLayoutLine *line = l->data;
+
+      for (r = line->runs; r; r = r->next)
+       {
+         PangoGlyphString *glyphs = ((PangoGlyphItem *)r->data)->glyphs;
+         int i;
+
+         for (i = 0; i < glyphs->num_glyphs; i++)
+           if (glyphs->glyphs[i].geometry.width > max_width)
+             max_width = glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  return max_width;
+}
+
+static PangoFontMetrics *
+pango_cairo_atsui_font_create_metrics_for_context (PangoCairoFont *font,
+                                                   PangoContext   *context)
+{
+  PangoCairoATSUIFont *cafont = (PangoCairoATSUIFont *) font;
+  PangoATSUIFont *afont = (PangoATSUIFont *) font;
+  CGFontRef cg_font;
+  CTFontRef ct_font;
+  PangoFontMetrics *metrics;
+  PangoFontDescription *font_desc;
+  PangoLayout *layout;
+  PangoRectangle extents;
+  PangoLanguage *language = pango_context_get_language (context);
+  const char *sample_str = pango_language_get_sample_string (language);
+
+  cg_font = pango_atsui_font_get_cgfont (afont);
+  ct_font = CTFontCreateWithGraphicsFont(cg_font, cafont->size, NULL, NULL);
+
+  metrics = pango_font_metrics_new ();
+
+  metrics->ascent = CTFontGetAscent(ct_font) * PANGO_SCALE;
+  metrics->descent = -CTFontGetDescent(ct_font) * PANGO_SCALE;
+
+  metrics->underline_position = CTFontGetUnderlinePosition(ct_font) * PANGO_SCALE;
+  metrics->underline_thickness = CTFontGetUnderlineThickness(ct_font) * PANGO_SCALE;
+
+  metrics->strikethrough_position = metrics->ascent / 3;
+  metrics->strikethrough_thickness = metrics->underline_thickness * PANGO_SCALE;
+
+  layout = pango_layout_new (context);
+  font_desc = pango_font_describe_with_absolute_size ((PangoFont *) font);
+  pango_layout_set_font_description (layout, font_desc);
+  pango_layout_set_text (layout, sample_str, -1);
+  pango_layout_get_extents (layout, NULL, &extents);
+
+  metrics->approximate_char_width = extents.width / pango_utf8_strwidth (sample_str);
+
+  pango_layout_set_text (layout, "0123456789", -1);
+  metrics->approximate_digit_width = max_glyph_width (layout);
+
+  pango_font_description_free (font_desc);
+  g_object_unref (layout);
+  
+  
+
+  return metrics;
+}
+
+static PangoFontDescription *
+pango_cairo_atsui_font_describe_absolute (PangoFont *font)
+{
+  PangoFontDescription *desc;
+  PangoCairoATSUIFont *cafont = (PangoCairoATSUIFont *) font;
+
+  desc = pango_font_describe (font);
+  pango_font_description_set_absolute_size (desc, cafont->absolute_size);
+
+  return desc;
+}
+
+static void
+pango_cairo_atsui_font_finalize (GObject *object)
+{
+  PangoCairoATSUIFont *cafont = (PangoCairoATSUIFont *) object;
+
+  _pango_cairo_font_private_finalize (&cafont->cf_priv);
+
+  G_OBJECT_CLASS (pango_cairo_atsui_font_parent_class)->finalize (object);
+}
+
+static void
+pango_cairo_atsui_font_class_init (PangoCairoATSUIFontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+
+  object_class->finalize = pango_cairo_atsui_font_finalize;
+
+  font_class->get_glyph_extents = pango_cairo_atsui_font_get_glyph_extents;
+  font_class->get_metrics = _pango_cairo_font_get_metrics;
+  font_class->describe_absolute = pango_cairo_atsui_font_describe_absolute;
+}
+
+static void
+pango_cairo_atsui_font_init (PangoCairoATSUIFont *cafont G_GNUC_UNUSED)
+{
+}
+
+PangoATSUIFont *
+_pango_cairo_atsui_font_new (PangoCairoATSUIFontMap     *cafontmap,
+                            PangoContext               *context,
+                            PangoATSUIFace             *face,
+                            const PangoFontDescription *desc)
+{
+  const char *postscript_name;
+  gboolean synthesize_italic = FALSE;
+  PangoCairoATSUIFont *cafont;
+  PangoATSUIFont *afont;
+  CFStringRef cfstr;
+  ATSFontRef font_ref;
+  CGFontRef font_id;
+  double size;
+  double dpi;
+  double m;
+  cairo_matrix_t font_matrix;
+
+  postscript_name = _pango_atsui_face_get_postscript_name (face);
+  
+  cfstr = CFStringCreateWithCString (NULL, postscript_name,
+                                    kCFStringEncodingUTF8);
+  font_ref = ATSFontFindFromPostScriptName (cfstr, kATSOptionFlagsDefault);
+  CFRelease (cfstr);
+
+  /* We synthesize italic in two cases. The first is when
+   * NSFontManager has handed out a face that it claims has italic but
+   * it doesn't. The other is when an italic face is requested that
+   * doesn't have a real version.
+   */
+  if (font_ref == kATSFontRefUnspecified && 
+      pango_font_description_get_style (desc) != PANGO_STYLE_NORMAL)
+    {
+      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+      NSString *nsname;
+      NSFont *nsfont, *converted_font;
+
+      size = (double) pango_font_description_get_size (desc) / PANGO_SCALE;
+
+      nsname = [NSString stringWithUTF8String:postscript_name];
+      nsfont = [NSFont fontWithName:nsname size:size];
+
+      converted_font = [[NSFontManager sharedFontManager] convertFont:nsfont
+                       toHaveTrait:NSUnitalicFontMask];
+      font_ref = ATSFontFindFromPostScriptName ((CFStringRef) [converted_font fontName],
+                                               kATSOptionFlagsDefault);
+
+      [pool release];
+
+      synthesize_italic = TRUE;
+    }
+  else if (_pango_atsui_face_get_synthetic_italic (face))
+    synthesize_italic = TRUE;
+
+  if (font_ref == kATSFontRefUnspecified)
+    return NULL;
+
+  font_id = CGFontCreateWithPlatformFont (&font_ref);
+  if (!font_id)
+    return NULL;
+
+  cafont = g_object_new (PANGO_TYPE_CAIRO_ATSUI_FONT, NULL);
+  afont = PANGO_ATSUI_FONT (cafont);
+
+  _pango_atsui_font_set_font_description (afont, desc);
+  _pango_atsui_font_set_face (afont, face);
+
+  size = (double) pango_font_description_get_size (desc) / PANGO_SCALE;
+  _pango_atsui_font_set_cgfont (afont, font_id);
+
+  if (context)
+    {
+      dpi = pango_cairo_context_get_resolution (context);
+
+      if (dpi <= 0)
+       dpi = cafontmap->dpi;
+    }
+  else
+    dpi = cafontmap->dpi;
+
+  cafont->absolute_size = pango_font_description_get_size (desc);
+
+  if (!pango_font_description_get_size_is_absolute (desc))
+    size *= dpi / 72.;
+
+  cafont->size = size;
+
+  /* When synthesizing italics, apply a shear matrix matching what Cocoa
+   * does. Cairo quartz had transformed text wrong before 1.5.13, stay
+   * backwards compatible until pango requires a new enough cairo.
+   */
+  if (cairo_version () >= CAIRO_VERSION_ENCODE(1,5,13))
+    m = -0.25;
+  else
+    m = 0.25;
+
+  if (synthesize_italic)
+    cairo_matrix_init (&font_matrix,
+                       1, 0, 
+                       m, 1,
+                       0, 0);
+  else
+    cairo_matrix_init_identity (&font_matrix);
+
+  cairo_matrix_scale (&font_matrix, size, size);
+
+  _pango_cairo_font_private_initialize (&cafont->cf_priv,
+                                       (PangoCairoFont *) cafont,
+                                       pango_font_description_get_gravity (desc),
+                                       _pango_cairo_context_get_merged_font_options (context),
+                                       pango_context_get_matrix (context),
+                                       &font_matrix);
+
+  return afont;
+}
diff --git a/pango/pangocairo-atsuifont.h b/pango/pangocairo-atsuifont.h
new file mode 100755 (executable)
index 0000000..fe69278
--- /dev/null
@@ -0,0 +1,36 @@
+/* Pango
+ * pangocairo-atsuifont.c
+ *
+ * Copyright (C) 2005 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOCAIRO_ATSUIFONT_H__
+#define __PANGOCAIRO_ATSUIFONT_H__
+
+#define PANGO_TYPE_CAIRO_ATSUI_FONT           (pango_cairo_atsui_font_get_type ())
+#define PANGO_CAIRO_ATSUI_FONT(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_ATSUI_FONT, PangoCairoATSUIFont))
+#define PANGO_CAIRO_ATSUI_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_CAIRO_ATSUI_FONT, PangoCairoATSUIFontClass))
+#define PANGO_IS_CAIRO_ATSUI_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_CAIRO_ATSUI_FONT))
+#define PANGO_CAIRO_ATSUI_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_CAIRO_ATSUI_FONT, PangoCairoATSUIFontClass))
+
+typedef struct _PangoCairoATSUIFont      PangoCairoATSUIFont;
+typedef struct _PangoCairoATSUIFontClass PangoCairoATSUIFontClass;
+
+GType pango_cairo_atsui_font_get_type (void) G_GNUC_CONST;
+
+#endif /* __PANGOCAIRO_ATSUIFONT_H__ */
diff --git a/pango/pangocairo-atsuifontmap.c b/pango/pangocairo-atsuifontmap.c
new file mode 100755 (executable)
index 0000000..2d15ee7
--- /dev/null
@@ -0,0 +1,105 @@
+/* Pango
+ * pangocairo-atsuifontmap.c
+ *
+ * Copyright (C) 2005 Imendio AB
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pangoatsui-private.h"
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pangocairo-atsui.h"
+
+typedef struct _PangoCairoATSUIFontMapClass PangoCairoATSUIFontMapClass;
+
+struct _PangoCairoATSUIFontMapClass
+{
+  PangoATSUIFontMapClass parent_class;
+};
+
+static void
+pango_cairo_atsui_font_map_set_resolution (PangoCairoFontMap *cfontmap,
+                                          double             dpi)
+{
+  PangoCairoATSUIFontMap *cafontmap = PANGO_CAIRO_ATSUI_FONT_MAP (cfontmap);
+
+  cafontmap->dpi = dpi;
+}
+
+static double
+pango_cairo_atsui_font_map_get_resolution (PangoCairoFontMap *cfontmap)
+{
+  PangoCairoATSUIFontMap *cafontmap = PANGO_CAIRO_ATSUI_FONT_MAP (cfontmap);
+
+  return cafontmap->dpi;
+}
+
+static cairo_font_type_t
+pango_cairo_atsui_font_map_get_font_type (PangoCairoFontMap *cfontmap)
+{
+  return CAIRO_FONT_TYPE_ATSUI;
+}
+
+static void
+cairo_font_map_iface_init (PangoCairoFontMapIface *iface)
+{
+  iface->set_resolution = pango_cairo_atsui_font_map_set_resolution;
+  iface->get_resolution = pango_cairo_atsui_font_map_get_resolution;
+  iface->get_font_type  = pango_cairo_atsui_font_map_get_font_type;
+}
+
+G_DEFINE_TYPE_WITH_CODE (PangoCairoATSUIFontMap, pango_cairo_atsui_font_map, PANGO_TYPE_ATSUI_FONT_MAP,
+    { G_IMPLEMENT_INTERFACE (PANGO_TYPE_CAIRO_FONT_MAP, cairo_font_map_iface_init) });
+
+
+static PangoATSUIFont *
+pango_cairo_atsui_font_map_create_font (PangoATSUIFontMap          *fontmap,
+                                       PangoContext               *context,
+                                       PangoATSUIFace             *face,
+                                       const PangoFontDescription *desc)
+
+{
+  return _pango_cairo_atsui_font_new (PANGO_CAIRO_ATSUI_FONT_MAP (fontmap), 
+                                     context, face, desc);
+}
+
+static void
+pango_cairo_atsui_font_map_finalize (GObject *object)
+{
+  PangoCairoATSUIFontMap *cafontmap = PANGO_CAIRO_ATSUI_FONT_MAP (object);
+
+  G_OBJECT_CLASS (pango_cairo_atsui_font_map_parent_class)->finalize (object);
+}
+
+static void
+pango_cairo_atsui_font_map_class_init (PangoCairoATSUIFontMapClass *class)
+{
+  PangoATSUIFontMapClass *atsuifontmapclass = (PangoATSUIFontMapClass *)class;
+  GObjectClass *object_class = (GObjectClass *)class;
+
+  object_class->finalize = pango_cairo_atsui_font_map_finalize;
+
+  atsuifontmapclass->create_font = pango_cairo_atsui_font_map_create_font;
+}
+
+static void
+pango_cairo_atsui_font_map_init (PangoCairoATSUIFontMap *cafontmap)
+{
+  cafontmap->dpi = 72.;
+}
diff --git a/pango/pangocairo-context.c b/pango/pangocairo-context.c
new file mode 100755 (executable)
index 0000000..69432f0
--- /dev/null
@@ -0,0 +1,474 @@
+/* Pango
+ * pangocairo-fontmap.c: Cairo font handling
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pango-impl-utils.h"
+
+#include <string.h>
+
+typedef struct _PangoCairoContextInfo PangoCairoContextInfo;
+
+struct _PangoCairoContextInfo
+{
+  double dpi;
+
+  cairo_font_options_t *set_options;
+  cairo_font_options_t *surface_options;
+  cairo_font_options_t *merged_options;
+
+  PangoCairoShapeRendererFunc shape_renderer_func;
+  gpointer                    shape_renderer_data;
+  GDestroyNotify              shape_renderer_notify;
+};
+
+static void
+free_context_info (PangoCairoContextInfo *info)
+{
+  if (info->set_options)
+    cairo_font_options_destroy (info->set_options);
+  if (info->surface_options)
+    cairo_font_options_destroy (info->surface_options);
+  if (info->merged_options)
+    cairo_font_options_destroy (info->merged_options);
+
+  if (info->shape_renderer_notify)
+    info->shape_renderer_notify (info->shape_renderer_data);
+
+  g_slice_free (PangoCairoContextInfo, info);
+}
+
+static PangoCairoContextInfo *
+get_context_info (PangoContext *context,
+                 gboolean      create)
+{
+  static GQuark context_info_quark;
+  PangoCairoContextInfo *info;
+
+  if (G_UNLIKELY (!context_info_quark))
+    context_info_quark = g_quark_from_static_string ("pango-cairo-context-info");
+
+  info = g_object_get_qdata (G_OBJECT (context), context_info_quark);
+
+  if (G_UNLIKELY (!info) && create)
+    {
+      info = g_slice_new0 (PangoCairoContextInfo);
+      info->dpi = -1.0;
+
+      g_object_set_qdata_full (G_OBJECT (context), context_info_quark,
+                              info, (GDestroyNotify)free_context_info);
+    }
+
+  return info;
+}
+
+static gboolean
+_pango_cairo_update_context (cairo_t      *cr,
+                            PangoContext *context)
+{
+  PangoCairoContextInfo *info;
+  cairo_matrix_t cairo_matrix;
+  cairo_surface_t *target;
+  PangoMatrix pango_matrix;
+  const PangoMatrix *current_matrix, identity_matrix = PANGO_MATRIX_INIT;
+  const cairo_font_options_t *merged_options;
+  cairo_font_options_t *old_merged_options;
+  gboolean changed = FALSE;
+
+  info = get_context_info (context, TRUE);
+
+  target = cairo_get_target (cr);
+
+  if (!info->surface_options)
+    info->surface_options = cairo_font_options_create ();
+  cairo_surface_get_font_options (target, info->surface_options);
+
+  old_merged_options = info->merged_options;
+  info->merged_options = NULL;
+
+  merged_options = _pango_cairo_context_get_merged_font_options (context);
+
+  if (old_merged_options)
+    {
+      if (!cairo_font_options_equal (merged_options, old_merged_options))
+       changed = TRUE;
+      cairo_font_options_destroy (old_merged_options);
+      old_merged_options = NULL;
+    }
+  else
+    changed = TRUE;
+
+  cairo_get_matrix (cr, &cairo_matrix);
+  pango_matrix.xx = cairo_matrix.xx;
+  pango_matrix.yx = cairo_matrix.yx;
+  pango_matrix.xy = cairo_matrix.xy;
+  pango_matrix.yy = cairo_matrix.yy;
+  pango_matrix.x0 = 0;
+  pango_matrix.y0 = 0;
+
+  current_matrix = pango_context_get_matrix (context);
+  if (!current_matrix)
+    current_matrix = &identity_matrix;
+
+  /* layout is matrix-independent if metrics-hinting is off.
+   * also ignore matrix translation offsets */
+  if ((cairo_font_options_get_hint_metrics (merged_options) != CAIRO_HINT_METRICS_OFF) &&
+      (0 != memcmp (&pango_matrix, current_matrix, sizeof (PangoMatrix))))
+    changed = TRUE;
+
+  pango_context_set_matrix (context, &pango_matrix);
+
+
+  return changed;
+}
+
+/**
+ * pango_cairo_update_context:
+ * @cr: a Cairo context
+ * @context: a #PangoContext, from a pangocairo font map
+ *
+ * Updates a #PangoContext previously created for use with Cairo to
+ * match the current transformation and target surface of a Cairo
+ * context. If any layouts have been created for the context,
+ * it's necessary to call pango_layout_context_changed() on those
+ * layouts.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_update_context (cairo_t      *cr,
+                           PangoContext *context)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (PANGO_IS_CONTEXT (context));
+
+  (void) _pango_cairo_update_context (cr, context);
+}
+
+/**
+ * pango_cairo_context_set_resolution:
+ * @context: a #PangoContext, from a pangocairo font map
+ * @dpi: the resolution in "dots per inch". (Physical inches aren't actually
+ *   involved; the terminology is conventional.) A 0 or negative value
+ *   means to use the resolution from the font map.
+ *
+ * Sets the resolution for the context. This is a scale factor between
+ * points specified in a #PangoFontDescription and Cairo units. The
+ * default value is 96, meaning that a 10 point font will be 13
+ * units high. (10 * 96. / 72. = 13.3).
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_context_set_resolution (PangoContext *context,
+                                   double        dpi)
+{
+  PangoCairoContextInfo *info = get_context_info (context, TRUE);
+  info->dpi = dpi;
+}
+
+/**
+ * pango_cairo_context_get_resolution:
+ * @context: a #PangoContext, from a pangocairo font map
+ *
+ * Gets the resolution for the context. See pango_cairo_context_set_resolution()
+ *
+ * Return value: the resolution in "dots per inch". A negative value will
+ *  be returned if no resolution has previously been set.
+ *
+ * Since: 1.10
+ **/
+double
+pango_cairo_context_get_resolution (PangoContext *context)
+{
+  PangoCairoContextInfo *info = get_context_info (context, FALSE);
+
+  if (info)
+    return info->dpi;
+  else
+    return -1.0;
+}
+
+/**
+ * pango_cairo_context_set_font_options:
+ * @context: a #PangoContext, from a pangocairo font map
+ * @options: a #cairo_font_options_t, or %NULL to unset any previously set
+ *           options. A copy is made.
+ *
+ * Sets the font options used when rendering text with this context.
+ * These options override any options that pango_cairo_update_context()
+ * derives from the target surface.
+ *
+ * Since: 1.10
+ */
+void
+pango_cairo_context_set_font_options (PangoContext               *context,
+                                     const cairo_font_options_t *options)
+{
+  PangoCairoContextInfo *info;
+
+  g_return_if_fail (PANGO_IS_CONTEXT (context));
+
+  info  = get_context_info (context, TRUE);
+
+  if (info->set_options)
+    cairo_font_options_destroy (info->set_options);
+
+  if (options)
+    info->set_options = cairo_font_options_copy (options);
+  else
+    info->set_options = NULL;
+
+  if (info->merged_options)
+    {
+      cairo_font_options_destroy (info->merged_options);
+      info->merged_options = NULL;
+    }
+}
+
+/**
+ * pango_cairo_context_get_font_options:
+ * @context: a #PangoContext, from a pangocairo font map
+ *
+ * Retrieves any font rendering options previously set with
+ * pango_cairo_font_map_set_font_options(). This function does not report options
+ * that are derived from the target surface by pango_cairo_update_context()
+ *
+ * Return value: the font options previously set on the context, or %NULL
+ *   if no options have been set. This value is owned by the context
+ *   and must not be modified or freed.
+ *
+ * Since: 1.10
+ **/
+G_CONST_RETURN cairo_font_options_t *
+pango_cairo_context_get_font_options (PangoContext *context)
+{
+  PangoCairoContextInfo *info;
+
+  g_return_val_if_fail (PANGO_IS_CONTEXT (context), NULL);
+
+  info = get_context_info (context, FALSE);
+
+  if (info)
+    return info->set_options;
+  else
+    return NULL;
+}
+
+/**
+ * _pango_cairo_context_merge_font_options:
+ * @context: a #PangoContext
+ * @options: a #cairo_font_options_t
+ *
+ * Merge together options from the target surface and explicitly set
+ * on the context.
+ *
+ * Return value: the combined set of font options. This value is owned
+ * by the context and must not be modified or freed.
+ **/
+G_CONST_RETURN cairo_font_options_t *
+_pango_cairo_context_get_merged_font_options (PangoContext *context)
+{
+  PangoCairoContextInfo *info = get_context_info (context, TRUE);
+
+  if (!info->merged_options)
+    {
+      info->merged_options = cairo_font_options_create ();
+
+      if (info->surface_options)
+       cairo_font_options_merge (info->merged_options, info->surface_options);
+      if (info->set_options)
+       cairo_font_options_merge (info->merged_options, info->set_options);
+    }
+
+  return info->merged_options;
+}
+
+/**
+ * pango_cairo_context_set_shape_renderer:
+ * @context: a #PangoContext, from a pangocairo font map
+ * @func: Callback function for rendering attributes of type
+ * %PANGO_ATTR_SHAPE, or %NULL to disable shape rendering.
+ * @data: User data that will be passed to @func.
+ * @dnotify: Callback that will be called when the
+ *           context is freed to release @data, or %NULL.
+ *
+ * Sets callback function for context to use for rendering attributes
+ * of type %PANGO_ATTR_SHAPE.  See #PangoCairoShapeRendererFunc for
+ * details.
+ *
+ * Since: 1.18
+ */
+void
+pango_cairo_context_set_shape_renderer (PangoContext                *context,
+                                       PangoCairoShapeRendererFunc  func,
+                                       gpointer                     data,
+                                       GDestroyNotify               dnotify)
+{
+  PangoCairoContextInfo *info;
+
+  g_return_if_fail (PANGO_IS_CONTEXT (context));
+
+  info  = get_context_info (context, TRUE);
+
+  if (info->shape_renderer_notify)
+    info->shape_renderer_notify (info->shape_renderer_data);
+
+  info->shape_renderer_func   = func;
+  info->shape_renderer_data   = data;
+  info->shape_renderer_notify = dnotify;
+}
+
+/**
+ * pango_cairo_context_get_shape_renderer:
+ * @context: a #PangoContext, from a pangocairo font map
+ * @data: Pointer to #gpointer to return user data
+ *
+ * Sets callback function for context to use for rendering attributes
+ * of type %PANGO_ATTR_SHAPE.  See #PangoCairoShapeRendererFunc for
+ * details.
+ *
+ * Retrieves callback function and associated user data for rendering
+ * attributes of type %PANGO_ATTR_SHAPE as set by
+ * pango_cairo_context_set_shape_renderer(), if any.
+ *
+ * Return value: the shape rendering callback previously set on the context, or %NULL
+ *   if no shape rendering callback have been set.
+ *
+ * Since: 1.18
+ */
+PangoCairoShapeRendererFunc
+pango_cairo_context_get_shape_renderer (PangoContext                *context,
+                                       gpointer                    *data)
+{
+  PangoCairoContextInfo *info;
+
+  g_return_val_if_fail (PANGO_IS_CONTEXT (context), NULL);
+
+  info = get_context_info (context, FALSE);
+
+  if (info)
+    {
+      if (data)
+        *data = info->shape_renderer_data;
+      return info->shape_renderer_func;
+    }
+  else
+    {
+      if (data)
+        *data = NULL;
+      return NULL;
+    }
+}
+
+/**
+ * pango_cairo_create_context:
+ * @cr: a Cairo context
+ *
+ * Creates a context object set up to match the current transformation
+ * and target surface of the Cairo context.  This context can then be
+ * used to create a layout using pango_layout_new().
+ *
+ * This function is a convenience function that creates a context using
+ * the default font map, then updates it to @cr.  If you just need to
+ * create a layout for use with @cr and do not need to access #PangoContext
+ * directly, you can use pango_cairo_create_layout() instead.
+ *
+ * Return value: the newly created #PangoContext. Free with
+ *   g_object_unref().
+ *
+ * Since: 1.22
+ **/
+PangoContext *
+pango_cairo_create_context (cairo_t *cr)
+{
+  PangoFontMap *fontmap;
+  PangoContext *context;
+
+  g_return_val_if_fail (cr != NULL, NULL);
+
+  fontmap = pango_cairo_font_map_get_default ();
+  context = pango_font_map_create_context (fontmap);
+  pango_cairo_update_context (cr, context);
+
+  return context;
+}
+
+/**
+ * pango_cairo_create_layout:
+ * @cr: a Cairo context
+ *
+ * Creates a layout object set up to match the current transformation
+ * and target surface of the Cairo context.  This layout can then be
+ * used for text measurement with functions like
+ * pango_layout_get_size() or drawing with functions like
+ * pango_cairo_show_layout(). If you change the transformation
+ * or target surface for @cr, you need to call pango_cairo_update_layout()
+ *
+ * This function is the most convenient way to use Cairo with Pango,
+ * however it is slightly inefficient since it creates a separate
+ * #PangoContext object for each layout. This might matter in an
+ * application that was laying out large amounts of text.
+ *
+ * Return value: the newly created #PangoLayout. Free with
+ *   g_object_unref().
+ *
+ * Since: 1.10
+ **/
+PangoLayout *
+pango_cairo_create_layout  (cairo_t *cr)
+{
+  PangoContext *context;
+  PangoLayout *layout;
+
+  g_return_val_if_fail (cr != NULL, NULL);
+
+  context = pango_cairo_create_context (cr);
+  layout = pango_layout_new (context);
+  g_object_unref (context);
+
+  return layout;
+}
+
+/**
+ * pango_cairo_update_layout:
+ * @cr: a Cairo context
+ * @layout: a #PangoLayout, from pango_cairo_create_layout()
+ *
+ * Updates the private #PangoContext of a #PangoLayout created with
+ * pango_cairo_create_layout() to match the current transformation
+ * and target surface of a Cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_update_layout (cairo_t     *cr,
+                          PangoLayout *layout)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  if (_pango_cairo_update_context (cr, pango_layout_get_context (layout)))
+    pango_layout_context_changed (layout);
+}
+
diff --git a/pango/pangocairo-fc.h b/pango/pangocairo-fc.h
new file mode 100755 (executable)
index 0000000..ea4fccb
--- /dev/null
@@ -0,0 +1,54 @@
+/* Pango
+ * pangocairo-fc.h: Private header file for Cairo/fontconfig combination
+ *
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOCAIRO_FC_H__
+#define __PANGOCAIRO_FC_H__
+
+#include <pango/pangofc-fontmap.h>
+#include <pango/pangocairo.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_CAIRO_FC_FONT_MAP       (pango_cairo_fc_font_map_get_type ())
+#define PANGO_CAIRO_FC_FONT_MAP(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FC_FONT_MAP, PangoCairoFcFontMap))
+#define PANGO_IS_CAIRO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FC_FONT_MAP))
+
+typedef struct _PangoCairoFcFontMap PangoCairoFcFontMap;
+
+struct _PangoCairoFcFontMap
+{
+  PangoFcFontMap parent_instance;
+
+  double dpi;
+
+  FT_Library library;
+};
+
+GType pango_cairo_fc_font_map_get_type (void) G_GNUC_CONST;
+
+PangoFcFont *_pango_cairo_fc_font_new (PangoCairoFcFontMap *cffontmap,
+                                      PangoFcFontKey      *key);
+FT_Library   _pango_cairo_fc_font_map_get_library (PangoCairoFcFontMap *fontmap);
+
+G_END_DECLS
+
+#endif /* __PANGOCAIRO_FC_H__ */
+
diff --git a/pango/pangocairo-fcfont.c b/pango/pangocairo-fcfont.c
new file mode 100755 (executable)
index 0000000..8401ed8
--- /dev/null
@@ -0,0 +1,255 @@
+/* Pango
+ * pangocairofc-font.c: Cairo font handling, fontconfig backend
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <cairo-ft.h>
+
+#include "pango-fontmap.h"
+#include "pangocairo-private.h"
+#include "pangocairo-fc.h"
+#include "pangofc-private.h"
+#include "pango-impl-utils.h"
+
+#define PANGO_TYPE_CAIRO_FC_FONT           (pango_cairo_fc_font_get_type ())
+#define PANGO_CAIRO_FC_FONT(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FC_FONT, PangoCairoFcFont))
+#define PANGO_CAIRO_FC_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_CAIRO_FC_FONT, PangoCairoFcFontClass))
+#define PANGO_CAIRO_IS_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_CAIRO_FC_FONT))
+#define PANGO_CAIRO_FC_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_CAIRO_FC_FONT, PangoCairoFcFontClass))
+
+typedef struct _PangoCairoFcFont      PangoCairoFcFont;
+typedef struct _PangoCairoFcFontClass PangoCairoFcFontClass;
+
+struct _PangoCairoFcFont
+{
+  PangoFcFont font;
+  PangoCairoFontPrivate cf_priv;
+};
+
+struct _PangoCairoFcFontClass
+{
+  PangoFcFontClass  parent_class;
+};
+
+GType pango_cairo_fc_font_get_type (void);
+
+/********************************
+ *    Method implementations    *
+ ********************************/
+
+static cairo_font_face_t *
+pango_cairo_fc_font_create_font_face (PangoCairoFont *cfont)
+{
+  PangoFcFont *fcfont = (PangoFcFont *) (cfont);
+
+  return cairo_ft_font_face_create_for_pattern (fcfont->font_pattern);
+}
+
+static PangoFontMetrics *
+pango_cairo_fc_font_create_metrics_for_context (PangoCairoFont *cfont,
+                                               PangoContext   *context)
+{
+  PangoFcFont *fcfont = (PangoFcFont *) (cfont);
+
+  return pango_fc_font_create_metrics_for_context (fcfont, context);
+}
+
+static void
+cairo_font_iface_init (PangoCairoFontIface *iface)
+{
+  iface->create_font_face = pango_cairo_fc_font_create_font_face;
+  iface->create_metrics_for_context = pango_cairo_fc_font_create_metrics_for_context;
+  iface->cf_priv_offset = G_STRUCT_OFFSET (PangoCairoFcFont, cf_priv);
+}
+
+G_DEFINE_TYPE_WITH_CODE (PangoCairoFcFont, pango_cairo_fc_font, PANGO_TYPE_FC_FONT,
+    { G_IMPLEMENT_INTERFACE (PANGO_TYPE_CAIRO_FONT, cairo_font_iface_init) })
+
+static void
+pango_cairo_fc_font_finalize (GObject *object)
+{
+  PangoCairoFcFont *cffont = (PangoCairoFcFont *) object;
+
+  _pango_cairo_font_private_finalize (&cffont->cf_priv);
+
+  G_OBJECT_CLASS (pango_cairo_fc_font_parent_class)->finalize (object);
+}
+
+/* we want get_glyph_extents extremely fast, so we use a small wrapper here
+ * to avoid having to lookup the interface data like we do for get_metrics
+ * in _pango_cairo_font_get_metrics(). */
+static void
+pango_cairo_fc_font_get_glyph_extents (PangoFont      *font,
+                                      PangoGlyph      glyph,
+                                      PangoRectangle *ink_rect,
+                                      PangoRectangle *logical_rect)
+{
+  PangoCairoFcFont *cffont = (PangoCairoFcFont *) (font);
+
+  _pango_cairo_font_private_get_glyph_extents (&cffont->cf_priv,
+                                              glyph,
+                                              ink_rect,
+                                              logical_rect);
+}
+
+static FT_Face
+pango_cairo_fc_font_lock_face (PangoFcFont *font)
+{
+  PangoCairoFcFont *cffont = (PangoCairoFcFont *) (font);
+  cairo_scaled_font_t *scaled_font = _pango_cairo_font_private_get_scaled_font (&cffont->cf_priv);
+
+  if (G_UNLIKELY (!scaled_font))
+    return NULL;
+
+  return cairo_ft_scaled_font_lock_face (scaled_font);
+}
+
+static void
+pango_cairo_fc_font_unlock_face (PangoFcFont *font)
+{
+  PangoCairoFcFont *cffont = (PangoCairoFcFont *) (font);
+  cairo_scaled_font_t *scaled_font = _pango_cairo_font_private_get_scaled_font (&cffont->cf_priv);
+
+  if (G_UNLIKELY (!scaled_font))
+    return;
+
+  cairo_ft_scaled_font_unlock_face (scaled_font);
+}
+
+static void
+pango_cairo_fc_font_class_init (PangoCairoFcFontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+  PangoFcFontClass *fc_font_class = PANGO_FC_FONT_CLASS (class);
+
+  object_class->finalize = pango_cairo_fc_font_finalize;
+
+  font_class->get_glyph_extents = pango_cairo_fc_font_get_glyph_extents;
+  font_class->get_metrics = _pango_cairo_font_get_metrics;
+
+  fc_font_class->lock_face = pango_cairo_fc_font_lock_face;
+  fc_font_class->unlock_face = pango_cairo_fc_font_unlock_face;
+}
+
+static void
+pango_cairo_fc_font_init (PangoCairoFcFont *cffont G_GNUC_UNUSED)
+{
+}
+
+/********************
+ *    Private API   *
+ ********************/
+
+static double
+get_font_size (const FcPattern *pattern)
+{
+  double size;
+  double dpi;
+
+  if (FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &size) == FcResultMatch)
+    return size;
+
+  /* Just in case FC_PIXEL_SIZE got unset between pango_fc_make_pattern()
+   * and here.  That would be very weird.
+   */
+
+  if (FcPatternGetDouble (pattern, FC_DPI, 0, &dpi) != FcResultMatch)
+    dpi = 72;
+
+  if (FcPatternGetDouble (pattern, FC_SIZE, 0, &size) == FcResultMatch)
+    return size * dpi / 72.;
+
+  /* Whatever */
+  return 18.;
+}
+
+static gpointer
+get_gravity_class (void)
+{
+  static GEnumClass *class = NULL;
+
+  if (G_UNLIKELY (!class))
+    class = g_type_class_ref (PANGO_TYPE_GRAVITY);
+
+  return class;
+}
+
+static PangoGravity
+get_gravity (const FcPattern *pattern)
+{
+  char *s;
+
+  if (FcPatternGetString (pattern, PANGO_FC_GRAVITY, 0, (FcChar8 **)(void *)&s) == FcResultMatch)
+    {
+      GEnumValue *value = g_enum_get_value_by_nick (get_gravity_class (), s);
+      return value->value;
+    }
+
+  return PANGO_GRAVITY_SOUTH;
+}
+
+PangoFcFont *
+_pango_cairo_fc_font_new (PangoCairoFcFontMap *cffontmap,
+                         PangoFcFontKey      *key)
+{
+  PangoCairoFcFont *cffont;
+  const FcPattern *pattern = pango_fc_font_key_get_pattern (key);
+  cairo_matrix_t font_matrix;
+  FcMatrix fc_matrix, *fc_matrix_val;
+  double size;
+  int i;
+
+  g_return_val_if_fail (PANGO_IS_CAIRO_FC_FONT_MAP (cffontmap), NULL);
+  g_return_val_if_fail (pattern != NULL, NULL);
+
+  cffont = g_object_new (PANGO_TYPE_CAIRO_FC_FONT,
+                        "pattern", pattern,
+                        "fontmap", cffontmap,
+                        NULL);
+
+  size = get_font_size (pattern) /
+        pango_matrix_get_font_scale_factor (pango_fc_font_key_get_matrix (key));
+
+  FcMatrixInit (&fc_matrix);
+  for (i = 0; FcPatternGetMatrix (pattern, FC_MATRIX, i, &fc_matrix_val) == FcResultMatch; i++)
+    FcMatrixMultiply (&fc_matrix, &fc_matrix, fc_matrix_val);
+
+  cairo_matrix_init (&font_matrix,
+                    fc_matrix.xx,
+                    - fc_matrix.yx,
+                    - fc_matrix.xy,
+                    fc_matrix.yy,
+                    0., 0.);
+
+  cairo_matrix_scale (&font_matrix, size, size);
+
+  _pango_cairo_font_private_initialize (&cffont->cf_priv,
+                                       (PangoCairoFont *) cffont,
+                                       get_gravity (pattern),
+                                       pango_fc_font_key_get_context_key (key),
+                                       pango_fc_font_key_get_matrix (key),
+                                       &font_matrix);
+
+  ((PangoFcFont *)(cffont))->is_hinted = _pango_cairo_font_private_is_metrics_hinted (&cffont->cf_priv);
+
+  return (PangoFcFont *) cffont;
+}
diff --git a/pango/pangocairo-fcfontmap.c b/pango/pangocairo-fcfontmap.c
new file mode 100755 (executable)
index 0000000..c2b410e
--- /dev/null
@@ -0,0 +1,201 @@
+/* Pango
+ * pangocairo-fontmap.c: Cairo font handling, fontconfig backend
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include "config.h"
+#include <cairo-ft.h>
+
+#include "pangofc-fontmap.h"
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pangocairo-fc.h"
+
+typedef struct _PangoCairoFcFontMapClass PangoCairoFcFontMapClass;
+
+struct _PangoCairoFcFontMapClass
+{
+  PangoFcFontMapClass parent_class;
+};
+
+static void
+pango_cairo_fc_font_map_set_resolution (PangoCairoFontMap *cfontmap,
+                                       double             dpi)
+{
+  PangoCairoFcFontMap *cffontmap = (PangoCairoFcFontMap *) (cfontmap);
+
+  cffontmap->dpi = dpi;
+
+  pango_fc_font_map_cache_clear ((PangoFcFontMap *) (cfontmap));
+}
+
+static double
+pango_cairo_fc_font_map_get_resolution_cairo (PangoCairoFontMap *cfontmap)
+{
+  PangoCairoFcFontMap *cffontmap = (PangoCairoFcFontMap *) (cfontmap);
+
+  return cffontmap->dpi;
+}
+
+static cairo_font_type_t
+pango_cairo_fc_font_map_get_font_type (PangoCairoFontMap *cfontmap G_GNUC_UNUSED)
+{
+  return CAIRO_FONT_TYPE_FT;
+}
+
+static void
+cairo_font_map_iface_init (PangoCairoFontMapIface *iface)
+{
+  iface->set_resolution = pango_cairo_fc_font_map_set_resolution;
+  iface->get_resolution = pango_cairo_fc_font_map_get_resolution_cairo;
+  iface->get_font_type  = pango_cairo_fc_font_map_get_font_type;
+}
+
+G_DEFINE_TYPE_WITH_CODE (PangoCairoFcFontMap, pango_cairo_fc_font_map, PANGO_TYPE_FC_FONT_MAP,
+    { G_IMPLEMENT_INTERFACE (PANGO_TYPE_CAIRO_FONT_MAP, cairo_font_map_iface_init) })
+
+static void
+pango_cairo_fc_font_map_finalize (GObject *object)
+{
+  PangoCairoFcFontMap *cffontmap = (PangoCairoFcFontMap *) (object);
+
+  G_OBJECT_CLASS (pango_cairo_fc_font_map_parent_class)->finalize (object);
+
+  FT_Done_FreeType (cffontmap->library);
+}
+
+static void
+pango_cairo_fc_font_map_fontset_key_substitute (PangoFcFontMap    *fcfontmap G_GNUC_UNUSED,
+                                               PangoFcFontsetKey *fontkey,
+                                               FcPattern         *pattern)
+{
+  FcConfigSubstitute (NULL, pattern, FcMatchPattern);
+
+  if (fontkey)
+    cairo_ft_font_options_substitute (pango_fc_fontset_key_get_context_key (fontkey),
+                                     pattern);
+
+  FcDefaultSubstitute (pattern);
+}
+
+static double
+pango_cairo_fc_font_map_get_resolution_fc (PangoFcFontMap *fcfontmap,
+                                          PangoContext   *context)
+{
+  PangoCairoFcFontMap *cffontmap = (PangoCairoFcFontMap *) (fcfontmap);
+  double dpi;
+
+  if (context)
+    {
+      dpi = pango_cairo_context_get_resolution (context);
+
+      if (dpi <= 0)
+       dpi = cffontmap->dpi;
+    }
+  else
+    dpi = cffontmap->dpi;
+
+  return dpi;
+}
+
+static gconstpointer
+pango_cairo_fc_font_map_context_key_get (PangoFcFontMap *fcfontmap G_GNUC_UNUSED,
+                                        PangoContext   *context)
+{
+  return _pango_cairo_context_get_merged_font_options (context);
+}
+
+static gpointer
+pango_cairo_fc_font_map_context_key_copy (PangoFcFontMap *fcfontmap G_GNUC_UNUSED,
+                                         gconstpointer   key)
+{
+  return cairo_font_options_copy (key);
+}
+
+static void
+pango_cairo_fc_font_map_context_key_free (PangoFcFontMap *fcfontmap G_GNUC_UNUSED,
+                                         gpointer        key)
+{
+  cairo_font_options_destroy (key);
+}
+
+
+static guint32
+pango_cairo_fc_font_map_context_key_hash (PangoFcFontMap *fcfontmap G_GNUC_UNUSED,
+                                         gconstpointer        key)
+{
+  return (guint32)cairo_font_options_hash (key);
+}
+
+static gboolean
+pango_cairo_fc_font_map_context_key_equal (PangoFcFontMap *fcfontmap G_GNUC_UNUSED,
+                                          gconstpointer   key_a,
+                                          gconstpointer   key_b)
+{
+  return cairo_font_options_equal (key_a, key_b);
+}
+
+static PangoFcFont *
+pango_cairo_fc_font_map_create_font (PangoFcFontMap *fcfontmap,
+                                    PangoFcFontKey *key)
+{
+  return _pango_cairo_fc_font_new ((PangoCairoFcFontMap *) (fcfontmap),
+                                  key);
+}
+
+static void
+pango_cairo_fc_font_map_class_init (PangoCairoFcFontMapClass *class)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+  PangoFcFontMapClass *fcfontmap_class = PANGO_FC_FONT_MAP_CLASS (class);
+
+  gobject_class->finalize  = pango_cairo_fc_font_map_finalize;
+
+  fcfontmap_class->fontset_key_substitute = pango_cairo_fc_font_map_fontset_key_substitute;
+  fcfontmap_class->get_resolution = pango_cairo_fc_font_map_get_resolution_fc;
+
+  fcfontmap_class->context_key_get = pango_cairo_fc_font_map_context_key_get;
+  fcfontmap_class->context_key_copy = pango_cairo_fc_font_map_context_key_copy;
+  fcfontmap_class->context_key_free = pango_cairo_fc_font_map_context_key_free;
+  fcfontmap_class->context_key_hash = pango_cairo_fc_font_map_context_key_hash;
+  fcfontmap_class->context_key_equal = pango_cairo_fc_font_map_context_key_equal;
+
+  fcfontmap_class->create_font = pango_cairo_fc_font_map_create_font;
+}
+
+static void
+pango_cairo_fc_font_map_init (PangoCairoFcFontMap *cffontmap)
+{
+  FT_Error error;
+
+  cffontmap->library = NULL;
+  error = FT_Init_FreeType (&cffontmap->library);
+  if (error != FT_Err_Ok)
+    g_critical ("pango_cairo_font_map_init: Could not initialize freetype");
+
+  cffontmap->dpi   = 96.0;
+}
+
+FT_Library
+_pango_cairo_fc_font_map_get_library (PangoCairoFcFontMap *fontmap)
+{
+  g_return_val_if_fail (PANGO_IS_CAIRO_FC_FONT_MAP (fontmap), NULL);
+
+  return fontmap->library;
+}
+
diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c
new file mode 100755 (executable)
index 0000000..35da71c
--- /dev/null
@@ -0,0 +1,773 @@
+/* Pango
+ * pangocairo-font.c: Cairo font handling
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <math.h>
+
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pango-impl-utils.h"
+
+#define PANGO_CAIRO_FONT_PRIVATE(font)         \
+  ((PangoCairoFontPrivate *)                   \
+   (font == NULL ? NULL :                      \
+    G_STRUCT_MEMBER_P (font,                   \
+    PANGO_CAIRO_FONT_GET_IFACE(PANGO_CAIRO_FONT(font))->cf_priv_offset)))
+
+GType
+pango_cairo_font_get_type (void)
+{
+  static GType cairo_font_type = 0;
+
+  if (! cairo_font_type)
+    {
+      const GTypeInfo cairo_font_info =
+      {
+       sizeof (PangoCairoFontIface), /* class_size */
+       NULL,           /* base_init */
+       NULL,           /* base_finalize */
+       NULL,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       0,
+       0,
+       NULL,
+       NULL
+      };
+
+      cairo_font_type =
+       g_type_register_static (G_TYPE_INTERFACE, I_("PangoCairoFont"),
+                               &cairo_font_info, 0);
+
+      g_type_interface_add_prerequisite (cairo_font_type, PANGO_TYPE_FONT);
+    }
+
+  return cairo_font_type;
+}
+
+static PangoCairoFontPrivateScaledFontData *
+_pango_cairo_font_private_scaled_font_data_create (void)
+{
+  return g_slice_new (PangoCairoFontPrivateScaledFontData);
+}
+
+static void
+_pango_cairo_font_private_scaled_font_data_destroy (PangoCairoFontPrivateScaledFontData *data)
+{
+  if (data)
+    {
+      cairo_font_options_destroy (data->options);
+      g_slice_free (PangoCairoFontPrivateScaledFontData, data);
+    }
+}
+
+cairo_scaled_font_t *
+_pango_cairo_font_private_get_scaled_font (PangoCairoFontPrivate *cf_priv)
+{
+  cairo_font_face_t *font_face;
+
+  if (G_LIKELY (cf_priv->scaled_font))
+    return cf_priv->scaled_font;
+
+  /* need to create it */
+
+  if (G_UNLIKELY (cf_priv->data == NULL))
+    {
+      /* we have tried to create and failed before */
+      return NULL;
+    }
+
+  font_face = (* PANGO_CAIRO_FONT_GET_IFACE (cf_priv->cfont)->create_font_face) (cf_priv->cfont);
+  if (G_UNLIKELY (font_face == NULL))
+    goto done;
+
+  cf_priv->scaled_font = cairo_scaled_font_create (font_face,
+                                                  &cf_priv->data->font_matrix,
+                                                  &cf_priv->data->ctm,
+                                                  cf_priv->data->options);
+
+  cairo_font_face_destroy (font_face);
+
+done:
+
+  if (G_UNLIKELY (cf_priv->scaled_font == NULL || cairo_scaled_font_status (cf_priv->scaled_font) != CAIRO_STATUS_SUCCESS))
+    {
+      cairo_scaled_font_t *scaled_font = cf_priv->scaled_font;
+      PangoFont *font = PANGO_FONT (cf_priv->cfont);
+      static GQuark warned_quark = 0;
+      if (!warned_quark)
+       warned_quark = g_quark_from_static_string ("pangocairo-scaledfont-warned");
+
+      if (!g_object_get_qdata (G_OBJECT (font), warned_quark))
+       {
+         PangoFontDescription *desc;
+         char *s;
+
+         desc = pango_font_describe (font);
+         s = pango_font_description_to_string (desc);
+         pango_font_description_free (desc);
+
+         g_warning ("failed to create cairo %s, expect ugly output. the offending font is '%s'",
+                    font_face ? "scaled font" : "font face",
+                    s);
+
+         if (!font_face)
+               g_warning ("font_face is NULL");
+         else
+               g_warning ("font_face status is: %s",
+                          cairo_status_to_string (cairo_font_face_status (font_face)));
+
+         if (!scaled_font)
+               g_warning ("scaled_font is NULL");
+         else
+               g_warning ("scaled_font status is: %s",
+                          cairo_status_to_string (cairo_scaled_font_status (scaled_font)));
+
+         g_free (s);
+
+         g_object_set_qdata_full (G_OBJECT (font), warned_quark,
+                                  GINT_TO_POINTER (1), NULL);
+       }
+    }
+
+  _pango_cairo_font_private_scaled_font_data_destroy (cf_priv->data);
+  cf_priv->data = NULL;
+
+  return cf_priv->scaled_font;
+}
+
+/**
+ * pango_cairo_font_get_scaled_font:
+ * @font: a #PangoFont from a #PangoCairoFontMap
+ *
+ * Gets the #cairo_scaled_font_t used by @font.
+ * The scaled font can be referenced and kept using
+ * cairo_scaled_font_reference().
+ *
+ * Return value: the #cairo_scaled_font_t used by @font,
+ *               or %NULL if @font is %NULL.
+ *
+ * Since: 1.18
+ **/
+cairo_scaled_font_t *
+pango_cairo_font_get_scaled_font (PangoCairoFont *cfont)
+{
+  PangoCairoFontPrivate *cf_priv;
+
+  if (G_UNLIKELY (!cfont))
+    return NULL;
+
+  cf_priv = PANGO_CAIRO_FONT_PRIVATE (cfont);
+
+  return _pango_cairo_font_private_get_scaled_font (cf_priv);
+}
+
+/**
+ * _pango_cairo_font_install:
+ * @font: a #PangoCairoFont
+ * @cr: a #cairo_t
+ *
+ * Makes @font the current font for rendering in the specified
+ * Cairo context.
+ *
+ * Return value: %TRUE if font was installed successfully, %FALSE otherwise.
+ **/
+gboolean
+_pango_cairo_font_install (PangoFont *font,
+                          cairo_t   *cr)
+{
+  cairo_scaled_font_t *scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)font);
+
+  if (G_UNLIKELY (scaled_font == NULL || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS))
+    return FALSE;
+
+  cairo_set_scaled_font (cr, scaled_font);
+
+  return TRUE;
+}
+
+
+typedef struct _PangoCairoFontMetricsInfo
+{
+  const char       *sample_str;
+  PangoFontMetrics *metrics;
+} PangoCairoFontMetricsInfo;
+
+PangoFontMetrics *
+_pango_cairo_font_get_metrics (PangoFont     *font,
+                              PangoLanguage *language)
+{
+  PangoCairoFont *cfont = (PangoCairoFont *) font;
+  PangoCairoFontPrivate *cf_priv = PANGO_CAIRO_FONT_PRIVATE (font);
+  PangoCairoFontMetricsInfo *info = NULL; /* Quiet gcc */
+  GSList *tmp_list;
+
+  const char *sample_str = pango_language_get_sample_string (language);
+
+  tmp_list = cf_priv->metrics_by_lang;
+  while (tmp_list)
+    {
+      info = tmp_list->data;
+
+      if (info->sample_str == sample_str)    /* We _don't_ need strcmp */
+       break;
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (!tmp_list)
+    {
+      PangoFontMap *fontmap;
+      PangoContext *context;
+      cairo_font_options_t *font_options;
+      int height, shift;
+
+      /* XXX this is racy.  need a ref'ing getter... */
+      fontmap = pango_font_get_font_map (font);
+      if (!fontmap)
+        return pango_font_metrics_new ();
+      fontmap = g_object_ref (fontmap);
+
+      info = g_slice_new0 (PangoCairoFontMetricsInfo);
+
+      cf_priv->metrics_by_lang = g_slist_prepend (cf_priv->metrics_by_lang, info);
+
+      info->sample_str = sample_str;
+
+      context = pango_font_map_create_context (fontmap);
+      pango_context_set_language (context, language);
+      font_options = cairo_font_options_create ();
+      cairo_scaled_font_get_font_options (_pango_cairo_font_private_get_scaled_font (cf_priv), font_options);
+      pango_cairo_context_set_font_options (context, font_options);
+      cairo_font_options_destroy (font_options);
+
+      info->metrics = (* PANGO_CAIRO_FONT_GET_IFACE (font)->create_metrics_for_context) (cfont, context);
+
+      /* We may actually reuse ascent/descent we got from cairo here.  that's
+       * in cf_priv->font_extents.
+       */
+      height = info->metrics->ascent + info->metrics->descent;
+      switch (cf_priv->gravity)
+       {
+         default:
+         case PANGO_GRAVITY_AUTO:
+         case PANGO_GRAVITY_SOUTH:
+           break;
+         case PANGO_GRAVITY_NORTH:
+           info->metrics->ascent = info->metrics->descent;
+           break;
+         case PANGO_GRAVITY_EAST:
+         case PANGO_GRAVITY_WEST:
+           {
+             int ascent = height / 2;
+             if (cf_priv->is_hinted)
+               ascent = PANGO_UNITS_ROUND (ascent);
+             info->metrics->ascent = ascent;
+           }
+       }
+      shift = (height - info->metrics->ascent) - info->metrics->descent;
+      info->metrics->descent += shift;
+      info->metrics->underline_position -= shift;
+      info->metrics->strikethrough_position -= shift;
+      info->metrics->ascent = height - info->metrics->descent;
+
+      g_object_unref (context);
+      g_object_unref (fontmap);
+    }
+
+  return pango_font_metrics_ref (info->metrics);
+}
+
+static PangoCairoFontHexBoxInfo *
+_pango_cairo_font_private_get_hex_box_info (PangoCairoFontPrivate *cf_priv)
+{
+  static const char hexdigits[] = "0123456789ABCDEF";
+  char c[2] = {0, 0};
+  PangoFont *mini_font;
+  PangoCairoFontHexBoxInfo *hbi;
+
+  /* for metrics hinting */
+  double scale_x = 1., scale_x_inv = 1., scale_y = 1., scale_y_inv = 1.;
+  gboolean is_hinted;
+
+  int i;
+  int rows;
+  double pad;
+  double width = 0;
+  double height = 0;
+  cairo_font_options_t *font_options;
+  cairo_font_extents_t font_extents;
+  double size, mini_size;
+  PangoFontDescription *desc;
+  cairo_scaled_font_t *scaled_font, *scaled_mini_font;
+  PangoMatrix pango_ctm;
+  cairo_matrix_t cairo_ctm;
+  PangoGravity gravity;
+
+  if (!cf_priv)
+    return NULL;
+
+  if (cf_priv->hbi)
+    return cf_priv->hbi;
+
+  scaled_font = _pango_cairo_font_private_get_scaled_font (cf_priv);
+  if (G_UNLIKELY (scaled_font == NULL || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS))
+    return NULL;
+
+  is_hinted = cf_priv->is_hinted;
+
+  font_options = cairo_font_options_create ();
+  desc = pango_font_describe_with_absolute_size ((PangoFont *)cf_priv->cfont);
+  size = pango_font_description_get_size (desc) / (1.*PANGO_SCALE);
+  gravity = pango_font_description_get_gravity (desc);
+
+  cairo_scaled_font_get_ctm (scaled_font, &cairo_ctm);
+  cairo_scaled_font_get_font_options (scaled_font, font_options);
+  /* I started adding support for vertical hexboxes here, but it's too much
+   * work.  Easier to do with cairo user fonts and vertical writing mode
+   * support in cairo.
+   */
+  /*cairo_matrix_rotate (&cairo_ctm, pango_gravity_to_rotation (gravity));*/
+  pango_ctm.xx = cairo_ctm.xx;
+  pango_ctm.yx = cairo_ctm.yx;
+  pango_ctm.xy = cairo_ctm.xy;
+  pango_ctm.yy = cairo_ctm.yy;
+  pango_ctm.x0 = cairo_ctm.x0;
+  pango_ctm.y0 = cairo_ctm.y0;
+
+  if (is_hinted)
+    {
+      /* prepare for some hinting */
+      double x, y;
+
+      x = 1.; y = 0.;
+      cairo_matrix_transform_distance (&cairo_ctm, &x, &y);
+      scale_x = sqrt (x*x + y*y);
+      scale_x_inv = 1 / scale_x;
+
+      x = 0.; y = 1.;
+      cairo_matrix_transform_distance (&cairo_ctm, &x, &y);
+      scale_y = sqrt (x*x + y*y);
+      scale_y_inv = 1 / scale_y;
+    }
+
+/* we hint to the nearest device units */
+#define HINT(value, scale, scale_inv) (ceil ((value-1e-5) * scale) * scale_inv)
+#define HINT_X(value) HINT ((value), scale_x, scale_x_inv)
+#define HINT_Y(value) HINT ((value), scale_y, scale_y_inv)
+
+  /* create mini_font description */
+  {
+    PangoFontMap *fontmap;
+    PangoContext *context;
+
+    /* XXX this is racy.  need a ref'ing getter... */
+    fontmap = pango_font_get_font_map ((PangoFont *)cf_priv->cfont);
+    if (!fontmap)
+      return NULL;
+    fontmap = g_object_ref (fontmap);
+
+    /* we inherit most font properties for the mini font.  just
+     * change family and size.  means, you get bold hex digits
+     * in the hexbox for a bold font.
+     */
+
+    /* We should rotate the box, not glyphs */
+    pango_font_description_unset_fields (desc, PANGO_FONT_MASK_GRAVITY);
+
+    pango_font_description_set_family_static (desc, "monospace");
+
+    rows = 2;
+    mini_size = size / 2.2;
+    if (is_hinted)
+      {
+       mini_size = HINT_Y (mini_size);
+
+       if (mini_size < 6.0)
+         {
+           rows = 1;
+           mini_size = MIN (MAX (size - 1, 0), 6.0);
+         }
+      }
+
+    pango_font_description_set_absolute_size (desc, pango_units_from_double (mini_size));
+
+    /* load mini_font */
+
+    context = pango_font_map_create_context (fontmap);
+
+    pango_context_set_matrix (context, &pango_ctm);
+    pango_context_set_language (context, pango_script_get_sample_language (PANGO_SCRIPT_LATIN));
+    pango_cairo_context_set_font_options (context, font_options);
+    mini_font = pango_font_map_load_font (fontmap, context, desc);
+
+    g_object_unref (context);
+    g_object_unref (fontmap);
+  }
+
+  pango_font_description_free (desc);
+  cairo_font_options_destroy (font_options);
+
+
+  scaled_mini_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *) mini_font);
+
+  for (i = 0 ; i < 16 ; i++)
+    {
+      cairo_text_extents_t extents;
+
+      c[0] = hexdigits[i];
+      cairo_scaled_font_text_extents (scaled_mini_font, c, &extents);
+      width = MAX (width, extents.width);
+      height = MAX (height, extents.height);
+    }
+
+  cairo_scaled_font_extents (scaled_font, &font_extents);
+  if (font_extents.ascent + font_extents.descent <= 0)
+    {
+      font_extents.ascent = PANGO_UNKNOWN_GLYPH_HEIGHT;
+      font_extents.descent = 0;
+    }
+
+  pad = (font_extents.ascent + font_extents.descent) / 43;
+  pad = MIN (pad, mini_size);
+
+  hbi = g_slice_new (PangoCairoFontHexBoxInfo);
+  hbi->font = (PangoCairoFont *) mini_font;
+  hbi->rows = rows;
+
+  hbi->digit_width  = width;
+  hbi->digit_height = height;
+
+  hbi->pad_x = pad;
+  hbi->pad_y = pad;
+
+  if (is_hinted)
+    {
+      hbi->digit_width  = HINT_X (hbi->digit_width);
+      hbi->digit_height = HINT_Y (hbi->digit_height);
+      hbi->pad_x = HINT_X (hbi->pad_x);
+      hbi->pad_y = HINT_Y (hbi->pad_y);
+    }
+
+  hbi->line_width = MIN (hbi->pad_x, hbi->pad_y);
+
+  hbi->box_height = 3 * hbi->pad_y + rows * (hbi->pad_y + hbi->digit_height);
+
+  if (rows == 1 || hbi->box_height <= font_extents.ascent)
+    {
+      hbi->box_descent = 2 * hbi->pad_y;
+    }
+  else if (hbi->box_height <= font_extents.ascent + font_extents.descent - 2 * hbi->pad_y)
+    {
+      hbi->box_descent = 2 * hbi->pad_y + hbi->box_height - font_extents.ascent;
+    }
+  else
+    {
+      hbi->box_descent = font_extents.descent * hbi->box_height /
+                        (font_extents.ascent + font_extents.descent);
+    }
+  if (is_hinted)
+    {
+       hbi->box_descent = HINT_Y (hbi->box_descent);
+    }
+
+  cf_priv->hbi = hbi;
+  return hbi;
+}
+
+static void
+_pango_cairo_font_hex_box_info_destroy (PangoCairoFontHexBoxInfo *hbi)
+{
+  if (hbi)
+    {
+      g_object_unref (hbi->font);
+      g_slice_free (PangoCairoFontHexBoxInfo, hbi);
+    }
+}
+
+PangoCairoFontHexBoxInfo *
+_pango_cairo_font_get_hex_box_info (PangoCairoFont *cfont)
+{
+  PangoCairoFontPrivate *cf_priv = PANGO_CAIRO_FONT_PRIVATE (cfont);
+
+  return _pango_cairo_font_private_get_hex_box_info (cf_priv);
+}
+
+void
+_pango_cairo_font_private_initialize (PangoCairoFontPrivate      *cf_priv,
+                                     PangoCairoFont             *cfont,
+                                     PangoGravity                gravity,
+                                     const cairo_font_options_t *font_options,
+                                     const PangoMatrix          *pango_ctm,
+                                     const cairo_matrix_t       *font_matrix)
+{
+  cairo_matrix_t gravity_matrix;
+
+  cf_priv->cfont = cfont;
+  cf_priv->gravity = gravity;
+
+  cf_priv->data = _pango_cairo_font_private_scaled_font_data_create (); 
+
+  /* first apply gravity rotation, then font_matrix, such that
+   * vertical italic text comes out "correct".  we don't do anything
+   * like baseline adjustment etc though.  should be specially
+   * handled when we support italic correction. */
+  cairo_matrix_init_rotate(&gravity_matrix,
+                          pango_gravity_to_rotation (cf_priv->gravity));
+  cairo_matrix_multiply (&cf_priv->data->font_matrix,
+                        font_matrix,
+                        &gravity_matrix);
+
+  if (pango_ctm)
+    cairo_matrix_init (&cf_priv->data->ctm,
+                      pango_ctm->xx,
+                      pango_ctm->yx,
+                      pango_ctm->xy,
+                      pango_ctm->yy,
+                      0., 0.);
+  else
+    cairo_matrix_init_identity (&cf_priv->data->ctm);
+
+  cf_priv->data->options = cairo_font_options_copy (font_options);
+  cf_priv->is_hinted = cairo_font_options_get_hint_metrics (font_options) != CAIRO_HINT_METRICS_OFF;
+
+  cf_priv->scaled_font = NULL;
+  cf_priv->hbi = NULL;
+  cf_priv->glyph_extents_cache = NULL;
+  cf_priv->metrics_by_lang = NULL;
+}
+
+static void
+free_metrics_info (PangoCairoFontMetricsInfo *info)
+{
+  pango_font_metrics_unref (info->metrics);
+  g_slice_free (PangoCairoFontMetricsInfo, info);
+}
+
+void
+_pango_cairo_font_private_finalize (PangoCairoFontPrivate *cf_priv)
+{
+  _pango_cairo_font_private_scaled_font_data_destroy (cf_priv->data);
+
+  if (cf_priv->scaled_font)
+    cairo_scaled_font_destroy (cf_priv->scaled_font);
+  cf_priv->scaled_font = NULL;
+
+  _pango_cairo_font_hex_box_info_destroy (cf_priv->hbi);
+  cf_priv->hbi = NULL;
+
+  if (cf_priv->glyph_extents_cache)
+    g_free (cf_priv->glyph_extents_cache);
+  cf_priv->glyph_extents_cache = NULL;
+
+  g_slist_foreach (cf_priv->metrics_by_lang, (GFunc)free_metrics_info, NULL);
+  g_slist_free (cf_priv->metrics_by_lang);
+  cf_priv->metrics_by_lang = NULL;
+}
+
+gboolean
+_pango_cairo_font_private_is_metrics_hinted (PangoCairoFontPrivate *cf_priv)
+{
+  return cf_priv->is_hinted;
+}
+
+static void
+_pango_cairo_font_private_get_glyph_extents_missing (PangoCairoFontPrivate *cf_priv,
+                                                    PangoGlyph             glyph,
+                                                    PangoRectangle        *ink_rect,
+                                                    PangoRectangle        *logical_rect)
+{
+  PangoCairoFontHexBoxInfo *hbi;
+  gunichar ch;
+  gint rows, cols;
+
+  hbi = _pango_cairo_font_private_get_hex_box_info (cf_priv);
+  if (!hbi)
+    {
+      pango_font_get_glyph_extents (NULL, glyph, ink_rect, logical_rect);
+      return;
+    }
+
+  ch = glyph & ~PANGO_GLYPH_UNKNOWN_FLAG;
+
+  rows = hbi->rows;
+  if (G_UNLIKELY (glyph == PANGO_GLYPH_INVALID_INPUT || ch > 0x10FFFF))
+    cols = 1;
+  else
+    cols = ((glyph & ~PANGO_GLYPH_UNKNOWN_FLAG) > 0xffff ? 6 : 4) / rows;
+
+  if (ink_rect)
+    {
+      ink_rect->x = PANGO_SCALE * hbi->pad_x;
+      ink_rect->y = PANGO_SCALE * (hbi->box_descent - hbi->box_height);
+      ink_rect->width = PANGO_SCALE * (3 * hbi->pad_x + cols * (hbi->digit_width + hbi->pad_x));
+      ink_rect->height = PANGO_SCALE * hbi->box_height;
+    }
+
+  if (logical_rect)
+    {
+      logical_rect->x = 0;
+      logical_rect->y = PANGO_SCALE * (hbi->box_descent - (hbi->box_height + hbi->pad_y));
+      logical_rect->width = PANGO_SCALE * (5 * hbi->pad_x + cols * (hbi->digit_width + hbi->pad_x));
+      logical_rect->height = PANGO_SCALE * (hbi->box_height + 2 * hbi->pad_y);
+    }
+}
+
+#define GLYPH_CACHE_NUM_ENTRIES 256 /* should be power of two */
+#define GLYPH_CACHE_MASK (GLYPH_CACHE_NUM_ENTRIES - 1)
+/* An entry in the fixed-size cache for the glyph->extents mapping.
+ * The cache is indexed by the lower N bits of the glyph (see
+ * GLYPH_CACHE_NUM_ENTRIES).  For scripts with few glyphs,
+ * this should provide pretty much instant lookups.
+ */
+struct _PangoCairoFontGlyphExtentsCacheEntry
+{
+  PangoGlyph     glyph;
+  int            width;
+  PangoRectangle ink_rect;
+};
+
+static gboolean
+_pango_cairo_font_private_glyph_extents_cache_init (PangoCairoFontPrivate *cf_priv)
+{
+  cairo_scaled_font_t *scaled_font = _pango_cairo_font_private_get_scaled_font (cf_priv);
+  cairo_font_extents_t font_extents;
+
+  if (G_UNLIKELY (scaled_font == NULL || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS))
+    return FALSE;
+
+  cairo_scaled_font_extents (scaled_font, &font_extents);
+
+  cf_priv->font_extents.x = 0;
+  cf_priv->font_extents.width = 0;
+  cf_priv->font_extents.height = pango_units_from_double (font_extents.ascent + font_extents.descent);
+  switch (cf_priv->gravity)
+    {
+      default:
+      case PANGO_GRAVITY_AUTO:
+      case PANGO_GRAVITY_SOUTH:
+       cf_priv->font_extents.y = - pango_units_from_double (font_extents.ascent);
+       break;
+      case PANGO_GRAVITY_NORTH:
+       cf_priv->font_extents.y = - pango_units_from_double (font_extents.descent);
+       break;
+      case PANGO_GRAVITY_EAST:
+      case PANGO_GRAVITY_WEST:
+       {
+         int ascent = pango_units_from_double (font_extents.ascent + font_extents.descent) / 2;
+         if (cf_priv->is_hinted)
+           ascent = PANGO_UNITS_ROUND (ascent);
+         cf_priv->font_extents.y = - ascent;
+       }
+    }
+
+  cf_priv->glyph_extents_cache = g_new0 (PangoCairoFontGlyphExtentsCacheEntry, GLYPH_CACHE_NUM_ENTRIES);
+  /* Make sure all cache entries are invalid initially */
+  cf_priv->glyph_extents_cache[0].glyph = 1; /* glyph 1 cannot happen in bucket 0 */
+
+  return TRUE;
+}
+
+/* Fills in the glyph extents cache entry
+ */
+static void
+compute_glyph_extents (PangoCairoFontPrivate  *cf_priv,
+                      PangoGlyph              glyph,
+                      PangoCairoFontGlyphExtentsCacheEntry *entry)
+{
+  cairo_text_extents_t extents;
+  cairo_glyph_t cairo_glyph;
+
+  cairo_glyph.index = glyph;
+  cairo_glyph.x = 0;
+  cairo_glyph.y = 0;
+
+  cairo_scaled_font_glyph_extents (_pango_cairo_font_private_get_scaled_font (cf_priv),
+                                  &cairo_glyph, 1, &extents);
+
+  entry->glyph = glyph;
+  entry->width = pango_units_from_double (extents.x_advance);
+  entry->ink_rect.x = pango_units_from_double (extents.x_bearing);
+  entry->ink_rect.y = pango_units_from_double (extents.y_bearing);
+  entry->ink_rect.width = pango_units_from_double (extents.width);
+  entry->ink_rect.height = pango_units_from_double (extents.height);
+}
+
+static PangoCairoFontGlyphExtentsCacheEntry *
+_pango_cairo_font_private_get_glyph_extents_cache_entry (PangoCairoFontPrivate  *cf_priv,
+                                                        PangoGlyph              glyph)
+{
+  PangoCairoFontGlyphExtentsCacheEntry *entry;
+  guint idx;
+
+  idx = glyph & GLYPH_CACHE_MASK;
+  entry = cf_priv->glyph_extents_cache + idx;
+
+  if (entry->glyph != glyph)
+    {
+      compute_glyph_extents (cf_priv, glyph, entry);
+    }
+
+  return entry;
+}
+
+void
+_pango_cairo_font_private_get_glyph_extents (PangoCairoFontPrivate *cf_priv,
+                                            PangoGlyph             glyph,
+                                            PangoRectangle        *ink_rect,
+                                            PangoRectangle        *logical_rect)
+{
+  PangoCairoFontGlyphExtentsCacheEntry *entry;
+
+  if (!cf_priv ||
+      (cf_priv->glyph_extents_cache == NULL &&
+       !_pango_cairo_font_private_glyph_extents_cache_init (cf_priv)))
+    {
+      /* Get generic unknown-glyph extents. */
+      pango_font_get_glyph_extents (NULL, glyph, ink_rect, logical_rect);
+      return;
+    }
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->y = ink_rect->width = ink_rect->height = 0;
+      if (logical_rect)
+       *logical_rect = cf_priv->font_extents;
+      return;
+    }
+  else if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+    {
+      _pango_cairo_font_private_get_glyph_extents_missing(cf_priv, glyph, ink_rect, logical_rect);
+      return;
+    }
+
+  entry = _pango_cairo_font_private_get_glyph_extents_cache_entry (cf_priv, glyph);
+
+  if (ink_rect)
+    *ink_rect = entry->ink_rect;
+  if (logical_rect)
+    {
+      *logical_rect = cf_priv->font_extents;
+      logical_rect->width = entry->width;
+    }
+}
diff --git a/pango/pangocairo-fontmap.c b/pango/pangocairo-fontmap.c
new file mode 100755 (executable)
index 0000000..ae917d0
--- /dev/null
@@ -0,0 +1,288 @@
+/* Pango
+ * pangocairo-fontmap.c: Cairo font handling
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pango-impl-utils.h"
+
+#if defined (HAVE_CAIRO_ATSUI)
+#  include "pangocairo-atsui.h"
+#endif
+#if defined (HAVE_CAIRO_WIN32)
+#  include "pangocairo-win32.h"
+#endif
+#if defined (HAVE_CAIRO_FREETYPE)
+#  include "pangocairo-fc.h"
+#endif
+
+GType
+pango_cairo_font_map_get_type (void)
+{
+  static GType cairo_font_map_type = 0;
+
+  if (! cairo_font_map_type)
+    {
+      const GTypeInfo cairo_font_map_info =
+      {
+       sizeof (PangoCairoFontMapIface), /* class_size */
+       NULL,           /* base_init */
+       NULL,           /* base_finalize */
+       NULL,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       0,
+       0,
+       NULL,
+       NULL
+      };
+
+      cairo_font_map_type =
+       g_type_register_static (G_TYPE_INTERFACE, I_("PangoCairoFontMap"),
+                               &cairo_font_map_info, 0);
+
+      g_type_interface_add_prerequisite (cairo_font_map_type, PANGO_TYPE_FONT_MAP);
+    }
+
+  return cairo_font_map_type;
+}
+
+/**
+ * pango_cairo_font_map_new:
+ *
+ * Creates a new #PangoCairoFontMap object; a fontmap is used
+ * to cache information about available fonts, and holds
+ * certain global parameters such as the resolution.
+ * In most cases, you can use pango_cairo_font_map_get_default()
+ * instead.
+ *
+ * Note that the type of the returned object will depend
+ * on the particular font backend Cairo was compiled to use;
+ * You generally should only use the #PangoFontMap and
+ * #PangoCairoFontMap interfaces on the returned object.
+ *
+ * Return value: the newly allocated #PangoFontMap, which should
+ *               be freed with g_object_unref().
+ *
+ * Since: 1.10
+ **/
+PangoFontMap *
+pango_cairo_font_map_new (void)
+{
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+#if defined(HAVE_CAIRO_ATSUI)
+  return g_object_new (PANGO_TYPE_CAIRO_ATSUI_FONT_MAP, NULL);
+#elif defined(HAVE_CAIRO_WIN32)
+  return g_object_new (PANGO_TYPE_CAIRO_WIN32_FONT_MAP, NULL);
+#elif defined(HAVE_CAIRO_FREETYPE)
+  return g_object_new (PANGO_TYPE_CAIRO_FC_FONT_MAP, NULL);
+#else
+  g_assert_not_reached ();
+  return NULL;
+#endif
+}
+
+/**
+ * pango_cairo_font_map_new_for_font_type:
+ * @fonttype: desired #cairo_font_type_t
+ *
+ * Creates a new #PangoCairoFontMap object of the type suitable
+ * to be used with cairo font backend of type @fonttype.
+ *
+ * In most cases one should simply use @pango_cairo_font_map_new(),
+ * or in fact in most of those cases, just use
+ * @pango_cairo_font_map_get_default().
+ *
+ * Return value: the newly allocated #PangoFontMap of suitable type
+ *               which should be freed with g_object_unref(),
+ *               or %NULL if the requested cairo font backend is
+ *               not supported / compiled in.
+ *
+ * Since: 1.18
+ **/
+PangoFontMap *
+pango_cairo_font_map_new_for_font_type (cairo_font_type_t fonttype)
+{
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+  switch ((int) fonttype)
+  {
+#if defined(HAVE_CAIRO_ATSUI)
+    case CAIRO_FONT_TYPE_QUARTZ:
+      return g_object_new (PANGO_TYPE_CAIRO_ATSUI_FONT_MAP, NULL);
+#endif
+#if defined(HAVE_CAIRO_WIN32)
+    case CAIRO_FONT_TYPE_WIN32:
+      return g_object_new (PANGO_TYPE_CAIRO_WIN32_FONT_MAP, NULL);
+#endif
+#if defined(HAVE_CAIRO_FREETYPE)
+    case CAIRO_FONT_TYPE_FT:
+      return g_object_new (PANGO_TYPE_CAIRO_FC_FONT_MAP, NULL);
+#endif
+    default:
+      return NULL;
+  }
+}
+
+static PangoFontMap *default_font_map = NULL;
+
+/**
+ * pango_cairo_font_map_get_default:
+ *
+ * Gets a default #PangoCairoFontMap to use with Cairo.
+ *
+ * Note that the type of the returned object will depend
+ * on the particular font backend Cairo was compiled to use;
+ * You generally should only use the #PangoFontMap and
+ * #PangoCairoFontMap interfaces on the returned object.
+ *
+ * The default Cairo fontmap can be changed by using
+ * pango_cairo_font_map_set_default().  This can be used to
+ * change the Cairo font backend that the default fontmap
+ * uses for example.
+ *
+ * Return value: the default Cairo fontmap for Pango. This
+ *  object is owned by Pango and must not be freed.
+ *
+ * Since: 1.10
+ **/
+PangoFontMap *
+pango_cairo_font_map_get_default (void)
+{
+  if (G_UNLIKELY (!default_font_map))
+    default_font_map = pango_cairo_font_map_new ();
+
+  return default_font_map;
+}
+
+/**
+ * pango_cairo_font_map_set_default:
+ * @fontmap: The new default font map, or %NULL
+ *
+ * Sets a default #PangoCairoFontMap to use with Cairo.
+ *
+ * This can be used to change the Cairo font backend that the
+ * default fontmap uses for example.  The old default font map
+ * is unreffed and the new font map referenced.
+ *
+ * A value of %NULL for @fontmap will cause the current default
+ * font map to be released and a new default font
+ * map to be created on demand, using pango_cairo_font_map_new().
+ *
+ * Since: 1.22
+ **/
+void
+pango_cairo_font_map_set_default (PangoCairoFontMap *fontmap)
+{
+  g_return_if_fail (fontmap == NULL || PANGO_IS_CAIRO_FONT_MAP (fontmap));
+
+  if ((PangoFontMap *) fontmap == default_font_map)
+    return;
+
+  if (default_font_map)
+    g_object_unref (default_font_map);
+
+  if (fontmap)
+    g_object_ref (fontmap);
+  default_font_map = (PangoFontMap *) fontmap;
+}
+
+/**
+ * pango_cairo_font_map_set_resolution:
+ * @fontmap: a #PangoCairoFontMap
+ * @dpi: the resolution in "dots per inch". (Physical inches aren't actually
+ *   involved; the terminology is conventional.)
+ *
+ * Sets the resolution for the fontmap. This is a scale factor between
+ * points specified in a #PangoFontDescription and Cairo units. The
+ * default value is 96, meaning that a 10 point font will be 13
+ * units high. (10 * 96. / 72. = 13.3).
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_font_map_set_resolution (PangoCairoFontMap *fontmap,
+                                    double             dpi)
+{
+  g_return_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap));
+
+  (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->set_resolution) (fontmap, dpi);
+}
+
+/**
+ * pango_cairo_font_map_get_resolution:
+ * @fontmap: a #PangoCairoFontMap
+ *
+ * Gets the resolution for the fontmap. See pango_cairo_font_map_set_resolution()
+ *
+ * Return value: the resolution in "dots per inch"
+ *
+ * Since: 1.10
+ **/
+double
+pango_cairo_font_map_get_resolution (PangoCairoFontMap *fontmap)
+{
+  g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), 96.);
+
+  return (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->get_resolution) (fontmap);
+}
+
+/**
+ * pango_cairo_font_map_create_context:
+ * @fontmap: a #PangoCairoFontMap
+ *
+ * Create a #PangoContext for the given fontmap.
+ *
+ * Return value: the newly created context; free with g_object_unref().
+ *
+ * Since: 1.10
+ *
+ * Deprecated: 1.22: Use pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_cairo_font_map_create_context (PangoCairoFontMap *fontmap)
+{
+  g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), NULL);
+
+  return pango_font_map_create_context (PANGO_FONT_MAP (fontmap));
+}
+
+/**
+ * pango_cairo_font_map_get_font_type:
+ * @fontmap: a #PangoCairoFontMap
+ *
+ * Gets the type of Cairo font backend that @fontmap uses.  
+ *
+ * Return value: the #cairo_font_type_t cairo font backend type
+ *
+ * Since: 1.18
+ **/
+cairo_font_type_t
+pango_cairo_font_map_get_font_type (PangoCairoFontMap *fontmap)
+{
+  g_return_val_if_fail (PANGO_IS_CAIRO_FONT_MAP (fontmap), CAIRO_FONT_TYPE_TOY);
+
+  return (* PANGO_CAIRO_FONT_MAP_GET_IFACE (fontmap)->get_font_type) (fontmap);
+}
diff --git a/pango/pangocairo-private.h b/pango/pangocairo-private.h
new file mode 100755 (executable)
index 0000000..3a4a9d0
--- /dev/null
@@ -0,0 +1,138 @@
+/* Pango
+ * pangocairo-private.h: private symbols for the Cairo backend
+ *
+ * Copyright (C) 2000,2004 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOCAIRO_PRIVATE_H__
+#define __PANGOCAIRO_PRIVATE_H__
+
+#include <pango/pangocairo.h>
+#include <pango/pango-renderer.h>
+
+G_BEGIN_DECLS
+
+
+#define PANGO_CAIRO_FONT_MAP_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PANGO_TYPE_CAIRO_FONT_MAP, PangoCairoFontMapIface))
+
+typedef struct _PangoCairoFontMapIface PangoCairoFontMapIface;
+
+struct _PangoCairoFontMapIface
+{
+  GTypeInterface g_iface;
+
+  void           (*set_resolution) (PangoCairoFontMap *fontmap,
+                                   double             dpi);
+  double         (*get_resolution) (PangoCairoFontMap *fontmap);
+
+  cairo_font_type_t (*get_font_type) (PangoCairoFontMap *fontmap);
+};
+
+
+#define PANGO_CAIRO_FONT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PANGO_TYPE_CAIRO_FONT, PangoCairoFontIface))
+
+typedef struct _PangoCairoFontIface                  PangoCairoFontIface;
+typedef struct _PangoCairoFontPrivate                PangoCairoFontPrivate;
+typedef struct _PangoCairoFontHexBoxInfo             PangoCairoFontHexBoxInfo;
+typedef struct _PangoCairoFontPrivateScaledFontData  PangoCairoFontPrivateScaledFontData;
+typedef struct _PangoCairoFontGlyphExtentsCacheEntry PangoCairoFontGlyphExtentsCacheEntry;
+
+struct _PangoCairoFontHexBoxInfo
+{
+  PangoCairoFont *font;
+  int rows;
+  double digit_width;
+  double digit_height;
+  double pad_x;
+  double pad_y;
+  double line_width;
+  double box_descent;
+  double box_height;
+};
+
+struct _PangoCairoFontPrivateScaledFontData
+{
+  cairo_matrix_t font_matrix;
+  cairo_matrix_t ctm;
+  cairo_font_options_t *options;
+};
+
+struct _PangoCairoFontPrivate
+{
+  PangoCairoFont *cfont;
+   
+  PangoCairoFontPrivateScaledFontData *data;
+
+  cairo_scaled_font_t *scaled_font;
+  PangoCairoFontHexBoxInfo *hbi;
+
+  gboolean is_hinted;
+  PangoGravity gravity;
+
+  PangoRectangle font_extents;
+  PangoCairoFontGlyphExtentsCacheEntry *glyph_extents_cache;
+
+  GSList *metrics_by_lang;
+};
+
+struct _PangoCairoFontIface
+{
+  GTypeInterface g_iface;
+
+  cairo_font_face_t *(*create_font_face) (PangoCairoFont *cfont);
+  PangoFontMetrics *(*create_metrics_for_context) (PangoCairoFont *cfont,
+                                                  PangoContext   *context);
+
+  gssize cf_priv_offset;
+};
+
+gboolean _pango_cairo_font_install (PangoFont *font,
+                                   cairo_t   *cr);
+PangoFontMetrics * _pango_cairo_font_get_metrics (PangoFont     *font,
+                                                 PangoLanguage *language);
+PangoCairoFontHexBoxInfo *_pango_cairo_font_get_hex_box_info (PangoCairoFont *cfont);
+
+void _pango_cairo_font_private_initialize (PangoCairoFontPrivate      *cf_priv,
+                                          PangoCairoFont             *font,
+                                          PangoGravity                gravity,
+                                          const cairo_font_options_t *font_options,
+                                          const PangoMatrix          *pango_ctm,
+                                          const cairo_matrix_t       *font_matrix);
+void _pango_cairo_font_private_finalize (PangoCairoFontPrivate *cf_priv);
+cairo_scaled_font_t *_pango_cairo_font_private_get_scaled_font (PangoCairoFontPrivate *cf_priv);
+gboolean _pango_cairo_font_private_is_metrics_hinted (PangoCairoFontPrivate *cf_priv);
+void _pango_cairo_font_private_get_glyph_extents (PangoCairoFontPrivate *cf_priv,
+                                                 PangoGlyph             glyph,
+                                                 PangoRectangle        *ink_rect,
+                                                 PangoRectangle        *logical_rect);
+
+#define PANGO_TYPE_CAIRO_RENDERER            (pango_cairo_renderer_get_type())
+#define PANGO_CAIRO_RENDERER(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_RENDERER, PangoCairoRenderer))
+#define PANGO_IS_CAIRO_RENDERER(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_RENDERER))
+
+typedef struct _PangoCairoRenderer PangoCairoRenderer;
+
+GType pango_cairo_renderer_get_type    (void) G_GNUC_CONST;
+
+
+const cairo_font_options_t *_pango_cairo_context_get_merged_font_options (PangoContext *context);
+
+
+G_END_DECLS
+
+#endif /* __PANGOCAIRO_PRIVATE_H__ */
diff --git a/pango/pangocairo-render.c b/pango/pangocairo-render.c
new file mode 100755 (executable)
index 0000000..2706fd2
--- /dev/null
@@ -0,0 +1,1130 @@
+/* Pango
+ * pangocairo-render.c: Rendering routines to Cairo surfaces
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <math.h>
+
+#include "pangocairo-private.h"
+#include "pango-glyph-item.h"
+
+typedef struct _PangoCairoRendererClass PangoCairoRendererClass;
+
+#define PANGO_CAIRO_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_CAIRO_RENDERER, PangoCairoRendererClass))
+#define PANGO_IS_CAIRO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_CAIRO_RENDERER))
+#define PANGO_CAIRO_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_CAIRO_RENDERER, PangoCairoRendererClass))
+
+struct _PangoCairoRenderer
+{
+  PangoRenderer parent_instance;
+
+  cairo_t *cr;
+  gboolean do_path;
+  gboolean has_show_text_glyphs;
+  double x_offset, y_offset;
+
+  /* house-keeping options */
+  gboolean is_cached_renderer;
+  gboolean cr_had_current_point;
+};
+
+struct _PangoCairoRendererClass
+{
+  PangoRendererClass parent_class;
+};
+
+G_DEFINE_TYPE (PangoCairoRenderer, pango_cairo_renderer, PANGO_TYPE_RENDERER)
+
+static void
+set_color (PangoCairoRenderer *crenderer,
+          PangoRenderPart     part)
+{
+  PangoColor *color = pango_renderer_get_color ((PangoRenderer *) (crenderer), part);
+
+  if (color)
+    cairo_set_source_rgb (crenderer->cr,
+                         color->red / 65535.,
+                         color->green / 65535.,
+                         color->blue / 65535.);
+}
+
+/* note: modifies crenderer->cr without doing cairo_save/restore() */
+static void
+_pango_cairo_renderer_draw_frame (PangoCairoRenderer *crenderer,
+                                 double              x,
+                                 double              y,
+                                 double              width,
+                                 double              height,
+                                 double              line_width,
+                                 gboolean            invalid)
+{
+  cairo_t *cr = crenderer->cr;
+
+  if (crenderer->do_path)
+    {
+      double d2 = line_width * .5, d = line_width;
+
+      /* we draw an outer box in one winding direction and an inner one in the
+       * opposite direction.  This works for both cairo windings rules.
+       *
+       * what we really want is cairo_stroke_to_path(), but that's not
+       * implemented in cairo yet.
+       */
+
+      /* outer */
+      cairo_rectangle (cr, x-d2, y-d2, width+d, height+d);
+
+      /* inner */
+      if (invalid)
+        {
+         /* delicacies of computing the joint... this is REALLY slow */
+
+         double alpha, tan_alpha2, cos_alpha;
+         double sx, sy;
+
+         alpha = atan2 (height, width);
+
+         tan_alpha2 = tan (alpha * .5);
+         if (tan_alpha2 < 1e-5 || (sx = d2 / tan_alpha2, 2. * sx > width - d))
+           sx = (width - d) * .5;
+
+         cos_alpha = cos (alpha);
+         if (cos_alpha < 1e-5 || (sy = d2 / cos_alpha, 2. * sy > height - d))
+           sy = (height - d) * .5;
+
+         /* top triangle */
+         cairo_new_sub_path (cr);
+         cairo_line_to (cr, x+width-sx, y+d2);
+         cairo_line_to (cr, x+sx, y+d2);
+         cairo_line_to (cr, x+.5*width, y+.5*height-sy);
+         cairo_close_path (cr);
+
+         /* bottom triangle */
+         cairo_new_sub_path (cr);
+         cairo_line_to (cr, x+width-sx, y+height-d2);
+         cairo_line_to (cr, x+.5*width, y+.5*height+sy);
+         cairo_line_to (cr, x+sx, y+height-d2);
+         cairo_close_path (cr);
+
+
+         alpha = G_PI_2 - alpha;
+         tan_alpha2 = tan (alpha * .5);
+         if (tan_alpha2 < 1e-5 || (sy = d2 / tan_alpha2, 2. * sy > height - d))
+           sy = (width - d) * .5;
+
+         cos_alpha = cos (alpha);
+         if (cos_alpha < 1e-5 || (sx = d2 / cos_alpha, 2. * sx > width - d))
+           sx = (width - d) * .5;
+
+         /* left triangle */
+         cairo_new_sub_path (cr);
+         cairo_line_to (cr, x+d2, y+sy);
+         cairo_line_to (cr, x+d2, y+height-sy);
+         cairo_line_to (cr, x+.5*width-sx, y+.5*height);
+         cairo_close_path (cr);
+
+         /* right triangle */
+         cairo_new_sub_path (cr);
+         cairo_line_to (cr, x+width-d2, y+sy);
+         cairo_line_to (cr, x+.5*width+sx, y+.5*height);
+         cairo_line_to (cr, x+width-d2, y+height-sy);
+         cairo_close_path (cr);
+       }
+      else
+       cairo_rectangle (cr, x+width-d2, y+d2, - (width-d), height-d);
+    }
+  else
+    {
+      cairo_rectangle (cr, x, y, width, height);
+
+      if (invalid)
+        {
+         /* draw an X */
+
+         cairo_new_sub_path (cr);
+         cairo_move_to (cr, x, y);
+         cairo_rel_line_to (cr, width, height);
+
+         cairo_new_sub_path (cr);
+         cairo_move_to (cr, x + width, y);
+         cairo_rel_line_to (cr, -width, height);
+
+         cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+       }
+
+      cairo_set_line_width (cr, line_width);
+      cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
+      cairo_set_miter_limit (cr, 2.);
+      cairo_stroke (cr);
+    }
+}
+
+static void
+_pango_cairo_renderer_draw_box_glyph (PangoCairoRenderer *crenderer,
+                                     PangoGlyphInfo     *gi,
+                                     double              cx,
+                                     double              cy,
+                                     gboolean            invalid)
+{
+  cairo_save (crenderer->cr);
+
+  _pango_cairo_renderer_draw_frame (crenderer,
+                                   cx + 1.5,
+                                   cy + 1.5 - PANGO_UNKNOWN_GLYPH_HEIGHT,
+                                   (double)gi->geometry.width / PANGO_SCALE - 3.0,
+                                   PANGO_UNKNOWN_GLYPH_HEIGHT - 3.0,
+                                   1.0,
+                                   invalid);
+
+  cairo_restore (crenderer->cr);
+}
+
+static void
+_pango_cairo_renderer_draw_unknown_glyph (PangoCairoRenderer *crenderer,
+                                         PangoFont          *font,
+                                         PangoGlyphInfo     *gi,
+                                         double              cx,
+                                         double              cy)
+{
+  char buf[7];
+  double x0, y0;
+  int row, col;
+  int rows, cols;
+  char hexbox_string[2] = {0, 0};
+  PangoCairoFontHexBoxInfo *hbi;
+  gunichar ch;
+  gboolean invalid_input;
+
+  cairo_save (crenderer->cr);
+
+  ch = gi->glyph & ~PANGO_GLYPH_UNKNOWN_FLAG;
+  invalid_input = G_UNLIKELY (gi->glyph == PANGO_GLYPH_INVALID_INPUT || ch > 0x10FFFF);
+
+  hbi = _pango_cairo_font_get_hex_box_info ((PangoCairoFont *)font);
+  if (!hbi || !_pango_cairo_font_install ((PangoFont *)(hbi->font), crenderer->cr))
+    {
+      _pango_cairo_renderer_draw_box_glyph (crenderer, gi, cx, cy, invalid_input);
+      goto done;
+    }
+
+  rows = hbi->rows;
+  if (G_UNLIKELY (invalid_input))
+    {
+      cols = 1;
+    }
+  else
+    {
+      cols = (ch > 0xffff ? 6 : 4) / rows;
+      g_snprintf (buf, sizeof(buf), (ch > 0xffff) ? "%06X" : "%04X", ch);
+    }
+
+  _pango_cairo_renderer_draw_frame (crenderer,
+                                   cx + hbi->pad_x * 1.5,
+                                   cy + hbi->box_descent - hbi->box_height + hbi->pad_y * 0.5,
+                                   (double)gi->geometry.width / PANGO_SCALE - 3 * hbi->pad_x,
+                                   (hbi->box_height - hbi->pad_y),
+                                   hbi->line_width,
+                                   invalid_input);
+
+  if (invalid_input)
+    goto done;
+
+  x0 = cx + hbi->pad_x * 3.0;
+  y0 = cy + hbi->box_descent - hbi->pad_y * 2;
+
+  for (row = 0; row < rows; row++)
+    {
+      double y = y0 - (rows - 1 - row) * (hbi->digit_height + hbi->pad_y);
+      for (col = 0; col < cols; col++)
+       {
+         double x = x0 + col * (hbi->digit_width + hbi->pad_x);
+
+         cairo_move_to (crenderer->cr, x, y);
+
+         hexbox_string[0] = buf[row * cols + col];
+
+         if (crenderer->do_path)
+             cairo_text_path (crenderer->cr, hexbox_string);
+         else
+             cairo_show_text (crenderer->cr, hexbox_string);
+       }
+    }
+
+done:
+  cairo_restore (crenderer->cr);
+}
+
+#ifndef STACK_BUFFER_SIZE
+#define STACK_BUFFER_SIZE (512 * sizeof (int))
+#endif
+
+#define STACK_ARRAY_LENGTH(T) (STACK_BUFFER_SIZE / sizeof(T))
+
+static void
+pango_cairo_renderer_show_text_glyphs (PangoRenderer        *renderer,
+                                      const char           *text,
+                                      int                   text_len,
+                                      PangoGlyphString     *glyphs,
+                                      cairo_text_cluster_t *clusters,
+                                      int                   num_clusters,
+                                      gboolean              backward,
+                                      PangoFont            *font,
+                                      int                   x,
+                                      int                   y)
+{
+  PangoCairoRenderer *crenderer = (PangoCairoRenderer *) (renderer);
+
+  int i, count;
+  int x_position = 0;
+  cairo_glyph_t *cairo_glyphs;
+  cairo_glyph_t stack_glyphs[STACK_ARRAY_LENGTH (cairo_glyph_t)];
+  double base_x = crenderer->x_offset + (double)x / PANGO_SCALE;
+  double base_y = crenderer->y_offset + (double)y / PANGO_SCALE;
+
+  cairo_save (crenderer->cr);
+  if (!crenderer->do_path)
+    set_color (crenderer, PANGO_RENDER_PART_FOREGROUND);
+
+  if (!_pango_cairo_font_install (font, crenderer->cr))
+    {
+      for (i = 0; i < glyphs->num_glyphs; i++)
+       {
+         PangoGlyphInfo *gi = &glyphs->glyphs[i];
+
+         if (gi->glyph != PANGO_GLYPH_EMPTY)
+           {
+             double cx = base_x + (double)(x_position + gi->geometry.x_offset) / PANGO_SCALE;
+             double cy = gi->geometry.y_offset == 0 ?
+                         base_y :
+                         base_y + (double)(gi->geometry.y_offset) / PANGO_SCALE;
+
+             _pango_cairo_renderer_draw_unknown_glyph (crenderer, font, gi, cx, cy);
+           }
+         x_position += gi->geometry.width;
+       }
+
+      goto done;
+    }
+
+  if (glyphs->num_glyphs > (int) G_N_ELEMENTS (stack_glyphs))
+    cairo_glyphs = g_new (cairo_glyph_t, glyphs->num_glyphs);
+  else
+    cairo_glyphs = stack_glyphs;
+
+  count = 0;
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      PangoGlyphInfo *gi = &glyphs->glyphs[i];
+
+      if (gi->glyph != PANGO_GLYPH_EMPTY)
+       {
+         double cx = base_x + (double)(x_position + gi->geometry.x_offset) / PANGO_SCALE;
+         double cy = gi->geometry.y_offset == 0 ?
+                     base_y :
+                     base_y + (double)(gi->geometry.y_offset) / PANGO_SCALE;
+
+         if (gi->glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+           _pango_cairo_renderer_draw_unknown_glyph (crenderer, font, gi, cx, cy);
+         else
+           {
+             cairo_glyphs[count].index = gi->glyph;
+             cairo_glyphs[count].x = cx;
+             cairo_glyphs[count].y = cy;
+             count++;
+           }
+       }
+      x_position += gi->geometry.width;
+    }
+
+  if (G_UNLIKELY (crenderer->do_path))
+    cairo_glyph_path (crenderer->cr, cairo_glyphs, count);
+  else
+    if (G_UNLIKELY (clusters))
+      cairo_show_text_glyphs (crenderer->cr,
+                             text, text_len,
+                             cairo_glyphs, count,
+                             clusters, num_clusters,
+                             backward ? CAIRO_TEXT_CLUSTER_FLAG_BACKWARD : 0);
+    else
+      cairo_show_glyphs (crenderer->cr, cairo_glyphs, count);
+
+  if (cairo_glyphs != stack_glyphs)
+    g_free (cairo_glyphs);
+
+done:
+  cairo_restore (crenderer->cr);
+}
+
+static void
+pango_cairo_renderer_draw_glyphs (PangoRenderer     *renderer,
+                                 PangoFont         *font,
+                                 PangoGlyphString  *glyphs,
+                                 int                x,
+                                 int                y)
+{
+  pango_cairo_renderer_show_text_glyphs (renderer,
+                                        NULL, 0,
+                                        glyphs,
+                                        NULL, 0,
+                                        FALSE,
+                                        font,
+                                        x, y);
+}
+
+static void
+pango_cairo_renderer_draw_glyph_item (PangoRenderer     *renderer,
+                                     const char        *text,
+                                     PangoGlyphItem    *glyph_item,
+                                     int                x,
+                                     int                y)
+{
+  PangoCairoRenderer *crenderer = (PangoCairoRenderer *) (renderer);
+  PangoFont          *font      = glyph_item->item->analysis.font;
+  PangoGlyphString   *glyphs    = glyph_item->glyphs;
+  PangoItem          *item      = glyph_item->item;
+  gboolean            backward  = (item->analysis.level & 1) != 0;
+
+  PangoGlyphItemIter   iter;
+  cairo_text_cluster_t *cairo_clusters;
+  cairo_text_cluster_t stack_clusters[STACK_ARRAY_LENGTH (cairo_text_cluster_t)];
+  int num_clusters;
+
+  if (!crenderer->has_show_text_glyphs || crenderer->do_path)
+    {
+      pango_cairo_renderer_show_text_glyphs (renderer,
+                                            NULL, 0,
+                                            glyphs,
+                                            NULL, 0,
+                                            FALSE,
+                                            font,
+                                            x, y);
+      return;
+    }
+
+  if (glyphs->num_glyphs > (int) G_N_ELEMENTS (stack_clusters))
+    cairo_clusters = g_new (cairo_text_cluster_t, glyphs->num_glyphs);
+  else
+    cairo_clusters = stack_clusters;
+
+  num_clusters = 0;
+  if (pango_glyph_item_iter_init_start (&iter, glyph_item, text))
+    {
+      do {
+        int num_bytes, num_glyphs, i;
+
+        num_bytes  = iter.end_index - iter.start_index;
+        num_glyphs = backward ? iter.start_glyph - iter.end_glyph : iter.end_glyph - iter.start_glyph;
+
+       if (num_bytes < 1)
+         g_warning ("pango_cairo_renderer_draw_glyph_item: bad cluster has num_bytess %d", num_bytes);
+       if (num_glyphs < 1)
+         g_warning ("pango_cairo_renderer_draw_glyph_item: bad cluster has num_glyphs %d", num_glyphs);
+
+       /* Discount empty and unknown glyphs */
+       for (i = MIN (iter.start_glyph, iter.end_glyph+1);
+            i < MAX (iter.start_glyph+1, iter.end_glyph);
+            i++)
+         {
+           PangoGlyphInfo *gi = &glyphs->glyphs[i];
+
+           if (gi->glyph == PANGO_GLYPH_EMPTY ||
+               gi->glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+             num_glyphs--;
+         }
+
+        cairo_clusters[num_clusters].num_bytes  = num_bytes;
+        cairo_clusters[num_clusters].num_glyphs = num_glyphs;
+        num_clusters++;
+      } while (pango_glyph_item_iter_next_cluster (&iter));
+    }
+
+  pango_cairo_renderer_show_text_glyphs (renderer,
+                                        text + item->offset, item->length,
+                                        glyphs,
+                                        cairo_clusters, num_clusters,
+                                        backward,
+                                        font,
+                                        x, y);
+
+  if (cairo_clusters != stack_clusters)
+    g_free (cairo_clusters);
+}
+
+static void
+pango_cairo_renderer_draw_rectangle (PangoRenderer     *renderer,
+                                    PangoRenderPart    part,
+                                    int                x,
+                                    int                y,
+                                    int                width,
+                                    int                height)
+{
+  PangoCairoRenderer *crenderer = (PangoCairoRenderer *) (renderer);
+
+  if (!crenderer->do_path)
+    {
+      cairo_save (crenderer->cr);
+
+      set_color (crenderer, part);
+    }
+
+  cairo_rectangle (crenderer->cr,
+                  crenderer->x_offset + (double)x / PANGO_SCALE,
+                  crenderer->y_offset + (double)y / PANGO_SCALE,
+                  (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+
+  if (!crenderer->do_path)
+    {
+      cairo_fill (crenderer->cr);
+
+      cairo_restore (crenderer->cr);
+    }
+}
+
+static void
+pango_cairo_renderer_draw_trapezoid (PangoRenderer     *renderer,
+                                    PangoRenderPart    part,
+                                    double             y1_,
+                                    double             x11,
+                                    double             x21,
+                                    double             y2,
+                                    double             x12,
+                                    double             x22)
+{
+  PangoCairoRenderer *crenderer = (PangoCairoRenderer *) (renderer);
+  cairo_t *cr;
+  double x, y;
+
+  cr = crenderer->cr;
+
+  cairo_save (cr);
+
+  if (!crenderer->do_path)
+    set_color (crenderer, part);
+
+  x = crenderer->x_offset,
+  y = crenderer->y_offset;
+  cairo_user_to_device_distance (cr, &x, &y);
+  cairo_identity_matrix (cr);
+  cairo_translate (cr, x, y);
+
+  cairo_move_to (cr, x11, y1_);
+  cairo_line_to (cr, x21, y1_);
+  cairo_line_to (cr, x22, y2);
+  cairo_line_to (cr, x12, y2);
+  cairo_close_path (cr);
+
+  if (!crenderer->do_path)
+    cairo_fill (cr);
+
+  cairo_restore (cr);
+}
+
+/* Draws an error underline that looks like one of:
+ *              H       E                H
+ *     /\      /\      /\        /\      /\               -
+ *   A/  \    /  \    /  \     A/  \    /  \              |
+ *    \   \  /    \  /   /D     \   \  /    \             |
+ *     \   \/  C   \/   /        \   \/   C  \            | height = HEIGHT_SQUARES * square
+ *      \      /\  F   /          \  F   /\   \           |
+ *       \    /  \    /            \    /  \   \G         |
+ *        \  /    \  /              \  /    \  /          |
+ *         \/      \/                \/      \/           -
+ *         B                         B
+ *         |---|
+ *       unit_width = (HEIGHT_SQUARES - 1) * square
+ *
+ * The x, y, width, height passed in give the desired bounding box;
+ * x/width are adjusted to make the underline a integer number of units
+ * wide.
+ */
+#define HEIGHT_SQUARES 2.5
+
+static void
+draw_error_underline (cairo_t *cr,
+                     double   x,
+                     double   y,
+                     double   width,
+                     double   height)
+{
+  double square = height / HEIGHT_SQUARES;
+  double unit_width = (HEIGHT_SQUARES - 1) * square;
+  double double_width = 2 * unit_width;
+  int width_units = (width + unit_width / 2) / unit_width;
+  double y_top, y_bottom;
+  double x_left, x_middle, x_right;
+  int i;
+
+  x += (width - width_units * unit_width) / 2;
+  width = width_units * unit_width;
+
+  y_top = y;
+  y_bottom = y + height;
+
+  /* Bottom of squiggle */
+  x_middle = x + unit_width;
+  x_right  = x + double_width;
+  cairo_move_to (cr, x - square / 2, y_top + square / 2); /* A */
+  for (i = 0; i < width_units-2; i += 2)
+    {
+      cairo_line_to (cr, x_middle, y_bottom); /* B */
+      cairo_line_to (cr, x_right, y_top + square); /* C */
+
+      x_middle += double_width;
+      x_right  += double_width;
+    }
+  cairo_line_to (cr, x_middle, y_bottom); /* B */
+
+  if (i + 1 == width_units)
+    cairo_line_to (cr, x_middle + square / 2, y_bottom - square / 2); /* G */
+  else if (i + 2 == width_units) {
+    cairo_line_to (cr, x_right + square / 2, y_top + square / 2); /* D */
+    cairo_line_to (cr, x_right, y_top); /* E */
+  }
+
+  /* Top of squiggle */
+  x_left = x_middle - unit_width;
+  for (; i >= 0; i -= 2)
+    {
+      cairo_line_to (cr, x_middle, y_bottom - square); /* F */
+      cairo_line_to (cr, x_left, y_top);   /* H */
+
+      x_left   -= double_width;
+      x_middle -= double_width;
+    }
+}
+
+static void
+pango_cairo_renderer_draw_error_underline (PangoRenderer *renderer,
+                                          int            x,
+                                          int            y,
+                                          int            width,
+                                          int            height)
+{
+  PangoCairoRenderer *crenderer = (PangoCairoRenderer *) (renderer);
+  cairo_t *cr = crenderer->cr;
+
+  if (!crenderer->do_path)
+    {
+      cairo_save (cr);
+
+      set_color (crenderer, PANGO_RENDER_PART_UNDERLINE);
+
+      cairo_new_path (cr);
+    }
+
+  draw_error_underline (cr,
+                       crenderer->x_offset + (double)x / PANGO_SCALE,
+                       crenderer->y_offset + (double)y / PANGO_SCALE,
+                       (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+
+  if (!crenderer->do_path)
+    {
+      cairo_fill (cr);
+
+      cairo_restore (cr);
+    }
+}
+
+static void
+pango_cairo_renderer_draw_shape (PangoRenderer  *renderer,
+                                PangoAttrShape *attr,
+                                int             x,
+                                int             y)
+{
+  PangoCairoRenderer *crenderer = (PangoCairoRenderer *) (renderer);
+  cairo_t *cr = crenderer->cr;
+  PangoLayout *layout;
+  PangoCairoShapeRendererFunc shape_renderer;
+  gpointer                    shape_renderer_data;
+  double base_x, base_y;
+
+  layout = pango_renderer_get_layout (renderer);
+
+  if (!layout)
+       return;
+
+  shape_renderer = pango_cairo_context_get_shape_renderer (pango_layout_get_context (layout),
+                                                          &shape_renderer_data);
+
+  if (!shape_renderer)
+    return;
+
+  base_x = crenderer->x_offset + (double)x / PANGO_SCALE;
+  base_y = crenderer->y_offset + (double)y / PANGO_SCALE;
+
+  cairo_save (cr);
+  if (!crenderer->do_path)
+    set_color (crenderer, PANGO_RENDER_PART_FOREGROUND);
+
+  cairo_move_to (cr, base_x, base_y);
+
+  shape_renderer (cr, attr, crenderer->do_path, shape_renderer_data);
+
+  cairo_restore (cr);
+}
+
+static void
+pango_cairo_renderer_init (PangoCairoRenderer *renderer G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_cairo_renderer_class_init (PangoCairoRendererClass *klass)
+{
+  PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass);
+
+  renderer_class->draw_glyphs = pango_cairo_renderer_draw_glyphs;
+  renderer_class->draw_glyph_item = pango_cairo_renderer_draw_glyph_item;
+  renderer_class->draw_rectangle = pango_cairo_renderer_draw_rectangle;
+  renderer_class->draw_trapezoid = pango_cairo_renderer_draw_trapezoid;
+  renderer_class->draw_error_underline = pango_cairo_renderer_draw_error_underline;
+  renderer_class->draw_shape = pango_cairo_renderer_draw_shape;
+}
+
+static PangoCairoRenderer *cached_renderer = NULL;
+G_LOCK_DEFINE_STATIC (cached_renderer);
+
+static PangoCairoRenderer *
+acquire_renderer (void)
+{
+  PangoCairoRenderer *renderer;
+
+  if (G_LIKELY (G_TRYLOCK (cached_renderer)))
+    {
+      if (G_UNLIKELY (!cached_renderer))
+        {
+         cached_renderer = g_object_new (PANGO_TYPE_CAIRO_RENDERER, NULL);
+         cached_renderer->is_cached_renderer = TRUE;
+       }
+
+      renderer = cached_renderer;
+    }
+  else
+    {
+      renderer = g_object_new (PANGO_TYPE_CAIRO_RENDERER, NULL);
+    }
+
+  return renderer;
+}
+
+static void
+release_renderer (PangoCairoRenderer *renderer)
+{
+  if (G_LIKELY (renderer->is_cached_renderer))
+    {
+      renderer->cr = NULL;
+      renderer->do_path = FALSE;
+      renderer->has_show_text_glyphs = FALSE;
+      renderer->x_offset = 0.;
+      renderer->y_offset = 0.;
+
+      G_UNLOCK (cached_renderer);
+    }
+  else
+    g_object_unref (renderer);
+}
+
+static void
+save_current_point (PangoCairoRenderer *renderer)
+{
+  renderer->cr_had_current_point = cairo_has_current_point (renderer->cr);
+  cairo_get_current_point (renderer->cr, &renderer->x_offset, &renderer->y_offset);
+
+  /* abuse save_current_point() to cache cairo_has_show_text_glyphs() result */
+  renderer->has_show_text_glyphs = cairo_surface_has_show_text_glyphs (cairo_get_target (renderer->cr));
+}
+
+static void
+restore_current_point (PangoCairoRenderer *renderer)
+{
+  if (renderer->cr_had_current_point)
+    /* XXX should do cairo_set_current_point() when we have that function */
+    cairo_move_to (renderer->cr, renderer->x_offset, renderer->y_offset);
+  else
+    cairo_new_sub_path (renderer->cr);
+}
+
+
+/* convenience wrappers using the default renderer */
+
+
+static void
+_pango_cairo_do_glyph_string (cairo_t          *cr,
+                             PangoFont        *font,
+                             PangoGlyphString *glyphs,
+                             gboolean          do_path)
+{
+  PangoCairoRenderer *crenderer = acquire_renderer ();
+  PangoRenderer *renderer = (PangoRenderer *) crenderer;
+
+  crenderer->cr = cr;
+  crenderer->do_path = do_path;
+  save_current_point (crenderer);
+
+  if (!do_path)
+    {
+      /* unset all part colors, since when drawing just a glyph string,
+       * prepare_run() isn't called.
+       */
+
+      pango_renderer_activate (renderer);
+
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_FOREGROUND, NULL);
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_BACKGROUND, NULL);
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_UNDERLINE, NULL);
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_STRIKETHROUGH, NULL);
+    }
+
+  pango_renderer_draw_glyphs (renderer, font, glyphs, 0, 0);
+
+  if (!do_path)
+    {
+      pango_renderer_deactivate (renderer);
+    }
+
+  restore_current_point (crenderer);
+
+  release_renderer (crenderer);
+}
+
+static void
+_pango_cairo_do_glyph_item (cairo_t          *cr,
+                           const char       *text,
+                           PangoGlyphItem   *glyph_item,
+                           gboolean          do_path)
+{
+  PangoCairoRenderer *crenderer = acquire_renderer ();
+  PangoRenderer *renderer = (PangoRenderer *) crenderer;
+
+  crenderer->cr = cr;
+  crenderer->do_path = do_path;
+  save_current_point (crenderer);
+
+  if (!do_path)
+    {
+      /* unset all part colors, since when drawing just a glyph string,
+       * prepare_run() isn't called.
+       */
+
+      pango_renderer_activate (renderer);
+
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_FOREGROUND, NULL);
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_BACKGROUND, NULL);
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_UNDERLINE, NULL);
+      pango_renderer_set_color (renderer, PANGO_RENDER_PART_STRIKETHROUGH, NULL);
+    }
+
+  pango_renderer_draw_glyph_item (renderer, text, glyph_item, 0, 0);
+
+  if (!do_path)
+    {
+      pango_renderer_deactivate (renderer);
+    }
+
+  restore_current_point (crenderer);
+
+  release_renderer (crenderer);
+}
+
+static void
+_pango_cairo_do_layout_line (cairo_t          *cr,
+                            PangoLayoutLine  *line,
+                            gboolean          do_path)
+{
+  PangoCairoRenderer *crenderer = acquire_renderer ();
+  PangoRenderer *renderer = (PangoRenderer *) crenderer;
+
+  crenderer->cr = cr;
+  crenderer->do_path = do_path;
+  save_current_point (crenderer);
+
+  pango_renderer_draw_layout_line (renderer, line, 0, 0);
+
+  restore_current_point (crenderer);
+
+  release_renderer (crenderer);
+}
+
+static void
+_pango_cairo_do_layout (cairo_t     *cr,
+                       PangoLayout *layout,
+                       gboolean     do_path)
+{
+  PangoCairoRenderer *crenderer = acquire_renderer ();
+  PangoRenderer *renderer = (PangoRenderer *) crenderer;
+
+  crenderer->cr = cr;
+  crenderer->do_path = do_path;
+  save_current_point (crenderer);
+
+  pango_renderer_draw_layout (renderer, layout, 0, 0);
+
+  restore_current_point (crenderer);
+
+  release_renderer (crenderer);
+}
+
+static void
+_pango_cairo_do_error_underline (cairo_t *cr,
+                                double   x,
+                                double   y,
+                                double   width,
+                                double   height,
+                                gboolean do_path)
+{
+  /* We don't use a renderer here, for a simple reason:
+   * the only renderer we can get is the default renderer, that
+   * is all implemented here, so we shortcircuit and make our
+   * life way easier.
+   */
+
+  if (!do_path)
+    cairo_new_path (cr);
+
+  draw_error_underline (cr, x, y, width, height);
+
+  if (!do_path)
+    cairo_fill (cr);
+}
+
+
+/* public wrapper of above to show or append path */
+
+
+/**
+ * pango_cairo_show_glyph_string:
+ * @cr: a Cairo context
+ * @font: a #PangoFont from a #PangoCairoFontMap
+ * @glyphs: a #PangoGlyphString
+ *
+ * Draws the glyphs in @glyphs in the specified cairo context.
+ * The origin of the glyphs (the left edge of the baseline) will
+ * be drawn at the current point of the cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_show_glyph_string (cairo_t          *cr,
+                              PangoFont        *font,
+                              PangoGlyphString *glyphs)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (glyphs != NULL);
+
+  _pango_cairo_do_glyph_string (cr, font, glyphs, FALSE);
+}
+
+
+/**
+ * pango_cairo_show_glyph_item:
+ * @cr: a Cairo context
+ * @text: the UTF-8 text that @glyph_item refers to
+ * @glyph_item: a #PangoGlyphItem
+ *
+ * Draws the glyphs in @glyph_item in the specified cairo context,
+ * embedding the text associated with the glyphs in the output if the
+ * output format supports it (PDF for example), otherwise it acts
+ * similar to pango_cairo_show_glyph_string().
+ *
+ * The origin of the glyphs (the left edge of the baseline) will
+ * be drawn at the current point of the cairo context.
+ *
+ * Note that @text is the start of the text for layout, which is then
+ * indexed by <literal>@glyph_item->item->offset</literal>.
+ *
+ * Since: 1.22
+ **/
+void
+pango_cairo_show_glyph_item (cairo_t          *cr,
+                            const char       *text,
+                            PangoGlyphItem   *glyph_item)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (text != NULL);
+  g_return_if_fail (glyph_item != NULL);
+
+  _pango_cairo_do_glyph_item (cr, text, glyph_item, FALSE);
+}
+
+/**
+ * pango_cairo_show_layout_line:
+ * @cr: a Cairo context
+ * @line: a #PangoLayoutLine
+ *
+ * Draws a #PangoLayoutLine in the specified cairo context.
+ * The origin of the glyphs (the left edge of the line) will
+ * be drawn at the current point of the cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_show_layout_line (cairo_t          *cr,
+                             PangoLayoutLine  *line)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (line != NULL);
+
+  _pango_cairo_do_layout_line (cr, line, FALSE);
+}
+
+/**
+ * pango_cairo_show_layout:
+ * @cr: a Cairo context
+ * @layout: a Pango layout
+ *
+ * Draws a #PangoLayout in the specified cairo context.
+ * The top-left corner of the #PangoLayout will be drawn
+ * at the current point of the cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_show_layout (cairo_t     *cr,
+                        PangoLayout *layout)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  _pango_cairo_do_layout (cr, layout, FALSE);
+}
+
+/**
+ * pango_cairo_show_error_underline:
+ * @cr: a Cairo context
+ * @x: The X coordinate of one corner of the rectangle
+ * @y: The Y coordinate of one corner of the rectangle
+ * @width: Non-negative width of the rectangle
+ * @height: Non-negative height of the rectangle
+ *
+ * Draw a squiggly line in the specified cairo context that approximately
+ * covers the given rectangle in the style of an underline used to indicate a
+ * spelling error.  (The width of the underline is rounded to an integer
+ * number of up/down segments and the resulting rectangle is centered in the
+ * original rectangle)
+ *
+ * Since: 1.14
+ **/
+void
+pango_cairo_show_error_underline (cairo_t *cr,
+                                 double  x,
+                                 double  y,
+                                 double  width,
+                                 double  height)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail ((width >= 0) && (height >= 0));
+
+  _pango_cairo_do_error_underline (cr, x, y, width, height, FALSE);
+}
+
+/**
+ * pango_cairo_glyph_string_path
+ * @cr: a Cairo context
+ * @font: a #PangoFont from a #PangoCairoFontMap
+ * @glyphs: a #PangoGlyphString
+ *
+ * Adds the glyphs in @glyphs to the current path in the specified
+ * cairo context. The origin of the glyphs (the left edge of the baseline)
+ * will be at the current point of the cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_glyph_string_path (cairo_t          *cr,
+                              PangoFont        *font,
+                              PangoGlyphString *glyphs)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (glyphs != NULL);
+
+  _pango_cairo_do_glyph_string (cr, font, glyphs, TRUE);
+}
+
+/**
+ * pango_cairo_layout_line_path:
+ * @cr: a Cairo context
+ * @line: a #PangoLayoutLine
+ *
+ * Adds the text in #PangoLayoutLine to the current path in the
+ * specified cairo context.  The origin of the glyphs (the left edge
+ * of the line) will be at the current point of the cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_layout_line_path (cairo_t          *cr,
+                             PangoLayoutLine  *line)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (line != NULL);
+
+  _pango_cairo_do_layout_line (cr, line, TRUE);
+}
+
+/**
+ * pango_cairo_layout_path:
+ * @cr: a Cairo context
+ * @layout: a Pango layout
+ *
+ * Adds the text in a #PangoLayout to the current path in the
+ * specified cairo context.  The top-left corner of the #PangoLayout
+ * will be at the current point of the cairo context.
+ *
+ * Since: 1.10
+ **/
+void
+pango_cairo_layout_path (cairo_t     *cr,
+                        PangoLayout *layout)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  _pango_cairo_do_layout (cr, layout, TRUE);
+}
+
+/**
+ * pango_cairo_error_underline_path:
+ * @cr: a Cairo context
+ * @x: The X coordinate of one corner of the rectangle
+ * @y: The Y coordinate of one corner of the rectangle
+ * @width: Non-negative width of the rectangle
+ * @height: Non-negative height of the rectangle
+ *
+ * Add a squiggly line to the current path in the specified cairo context that
+ * approximately covers the given rectangle in the style of an underline used
+ * to indicate a spelling error.  (The width of the underline is rounded to an
+ * integer number of up/down segments and the resulting rectangle is centered
+ * in the original rectangle)
+ *
+ * Since: 1.14
+ **/
+void
+pango_cairo_error_underline_path (cairo_t *cr,
+                                 double   x,
+                                 double   y,
+                                 double   width,
+                                 double   height)
+{
+  g_return_if_fail (cr != NULL);
+  g_return_if_fail ((width >= 0) && (height >= 0));
+
+  _pango_cairo_do_error_underline (cr, x, y, width, height, TRUE);
+}
diff --git a/pango/pangocairo-win32.h b/pango/pangocairo-win32.h
new file mode 100755 (executable)
index 0000000..7a71c0a
--- /dev/null
@@ -0,0 +1,53 @@
+/* Pango
+ * pangocairo-win32.h: Private header file for Cairo/Win32 combination
+ *
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOCAIRO_WIN32_H__
+#define __PANGOCAIRO_WIN32_H__
+
+#include <pango/pangowin32.h>
+#include "pangowin32-private.h"
+#include <pango/pangocairo.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_CAIRO_WIN32_FONT_MAP       (pango_cairo_win32_font_map_get_type ())
+#define PANGO_CAIRO_WIN32_FONT_MAP(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_WIN32_FONT_MAP, PangoCairoWin32FontMap))
+#define PANGO_IS_CAIRO_WIN32_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_WIN32_FONT_MAP))
+
+typedef struct _PangoCairoWin32FontMap PangoCairoWin32FontMap;
+
+struct _PangoCairoWin32FontMap
+{
+  PangoWin32FontMap parent_instance;
+
+  double dpi;
+};
+
+GType pango_cairo_win32_font_map_get_type (void) G_GNUC_CONST;
+
+PangoFont *_pango_cairo_win32_font_new (PangoCairoWin32FontMap       *cwfontmap,
+                                       PangoContext                 *context,
+                                       PangoWin32Face               *face,
+                                       const PangoFontDescription   *desc);
+G_END_DECLS
+
+#endif /* __PANGOCAIRO_WIN32_H__ */
+
diff --git a/pango/pangocairo-win32font.c b/pango/pangocairo-win32font.c
new file mode 100755 (executable)
index 0000000..3493d58
--- /dev/null
@@ -0,0 +1,327 @@
+/* Pango
+ * pangocairowin32-font.c: Cairo font handling, Win32 backend
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pango-fontmap.h"
+#include "pango-impl-utils.h"
+#include "pangocairo-private.h"
+#include "pangocairo-win32.h"
+
+#include <cairo-win32.h>
+
+#define PANGO_TYPE_CAIRO_WIN32_FONT           (pango_cairo_win32_font_get_type ())
+#define PANGO_CAIRO_WIN32_FONT(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_WIN32_FONT, PangoCairoWin32Font))
+#define PANGO_CAIRO_WIN32_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_CAIRO_WIN32_FONT, PangoCairoWin32FontClass))
+#define PANGO_CAIRO_IS_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_CAIRO_WIN32_FONT))
+#define PANGO_CAIRO_WIN32_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_CAIRO_WIN32_FONT, PangoCairoWin32FontClass))
+
+typedef struct _PangoCairoWin32Font      PangoCairoWin32Font;
+typedef struct _PangoCairoWin32FontClass PangoCairoWin32FontClass;
+
+struct _PangoCairoWin32Font
+{
+  PangoWin32Font font;
+  PangoCairoFontPrivate cf_priv;
+};
+
+struct _PangoCairoWin32FontClass
+{
+  PangoWin32FontClass  parent_class;
+};
+
+GType pango_cairo_win32_font_get_type (void);
+
+static cairo_font_face_t *pango_cairo_win32_font_create_font_face           (PangoCairoFont *font);
+static PangoFontMetrics  *pango_cairo_win32_font_create_metrics_for_context (PangoCairoFont *font,
+                                                                            PangoContext    *context);
+
+
+static void
+cairo_font_iface_init (PangoCairoFontIface *iface)
+{
+  iface->create_font_face = pango_cairo_win32_font_create_font_face;
+  iface->create_metrics_for_context = pango_cairo_win32_font_create_metrics_for_context;
+  iface->cf_priv_offset = G_STRUCT_OFFSET (PangoCairoWin32Font, cf_priv);
+}
+
+G_DEFINE_TYPE_WITH_CODE (PangoCairoWin32Font, pango_cairo_win32_font, PANGO_TYPE_WIN32_FONT,
+    { G_IMPLEMENT_INTERFACE (PANGO_TYPE_CAIRO_FONT, cairo_font_iface_init) });
+
+static cairo_font_face_t *
+pango_cairo_win32_font_create_font_face (PangoCairoFont *font)
+{
+  PangoCairoWin32Font *cwfont = PANGO_CAIRO_WIN32_FONT (font);
+  PangoWin32Font *win32font =  &cwfont->font;
+
+  return cairo_win32_font_face_create_for_logfontw (&win32font->logfontw);
+}
+
+static int
+max_glyph_width (PangoLayout *layout)
+{
+  int max_width = 0;
+  GSList *l, *r;
+
+  for (l = pango_layout_get_lines_readonly (layout); l; l = l->next)
+    {
+      PangoLayoutLine *line = l->data;
+
+      for (r = line->runs; r; r = r->next)
+       {
+         PangoGlyphString *glyphs = ((PangoGlyphItem *)r->data)->glyphs;
+         int i;
+
+         for (i = 0; i < glyphs->num_glyphs; i++)
+           if (glyphs->glyphs[i].geometry.width > max_width)
+             max_width = glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  return max_width;
+}
+
+static PangoFontMetrics *
+pango_cairo_win32_font_create_metrics_for_context (PangoCairoFont *font,
+                                                   PangoContext   *context)
+{
+  PangoFontMetrics *metrics;
+  PangoFontDescription *font_desc;
+  PangoLayout *layout;
+  PangoRectangle extents;
+  PangoLanguage *language = pango_context_get_language (context);
+  const char *sample_str = pango_language_get_sample_string (language);
+  cairo_scaled_font_t *scaled_font;
+  cairo_font_extents_t font_extents;
+  double height;
+
+  metrics = pango_font_metrics_new ();
+
+  scaled_font = pango_cairo_font_get_scaled_font ((PangoFont *) font);
+
+  cairo_scaled_font_extents (scaled_font, &font_extents);
+  cairo_win32_scaled_font_done_font (scaled_font);
+
+  metrics->ascent = font_extents.ascent * PANGO_SCALE;
+  metrics->descent = font_extents.descent * PANGO_SCALE;
+
+  /* FIXME: Should get the real settings for these from the TrueType
+   * font file.
+   */
+  height = metrics->ascent + metrics->descent;
+  metrics->underline_thickness = height / 14;
+  metrics->underline_position = - metrics->underline_thickness;
+  metrics->strikethrough_thickness = metrics->underline_thickness;
+  metrics->strikethrough_position = height / 4;
+
+  pango_quantize_line_geometry (&metrics->underline_thickness,
+                               &metrics->underline_position);
+  pango_quantize_line_geometry (&metrics->strikethrough_thickness,
+                               &metrics->strikethrough_position);
+  /* Quantizing may have pushed underline_position to 0.  Not good */
+  if (metrics->underline_position == 0)
+    metrics->underline_position = - metrics->underline_thickness;
+
+  layout = pango_layout_new (context);
+  font_desc = pango_font_describe_with_absolute_size ((PangoFont *) font);
+  pango_layout_set_font_description (layout, font_desc);
+  pango_layout_set_text (layout, sample_str, -1);
+  pango_layout_get_extents (layout, NULL, &extents);
+
+  metrics->approximate_char_width = extents.width / pango_utf8_strwidth (sample_str);
+
+  pango_layout_set_text (layout, "0123456789", -1);
+  metrics->approximate_digit_width = max_glyph_width (layout);
+
+  pango_font_description_free (font_desc);
+  g_object_unref (layout);
+
+  return metrics;
+}
+
+static void
+pango_cairo_win32_font_finalize (GObject *object)
+{
+  PangoCairoWin32Font *cwfont = (PangoCairoWin32Font *) object;
+
+  _pango_cairo_font_private_finalize (&cwfont->cf_priv);
+
+  G_OBJECT_CLASS (pango_cairo_win32_font_parent_class)->finalize (object);
+}
+
+static void
+pango_cairo_win32_font_get_glyph_extents (PangoFont        *font,
+                                         PangoGlyph        glyph,
+                                         PangoRectangle   *ink_rect,
+                                         PangoRectangle   *logical_rect)
+{
+  PangoCairoWin32Font *cwfont = (PangoCairoWin32Font *) font;
+
+  _pango_cairo_font_private_get_glyph_extents (&cwfont->cf_priv,
+                                              glyph,
+                                              ink_rect,
+                                              logical_rect);
+}
+
+static gboolean
+pango_cairo_win32_font_select_font (PangoFont *font,
+                                   HDC        hdc)
+{
+  cairo_scaled_font_t *scaled_font = _pango_cairo_font_private_get_scaled_font (&PANGO_CAIRO_WIN32_FONT (font)->cf_priv);
+
+  return cairo_win32_scaled_font_select_font (scaled_font, hdc) == CAIRO_STATUS_SUCCESS;
+}
+
+static void
+pango_cairo_win32_font_done_font (PangoFont *font)
+{
+  cairo_scaled_font_t *scaled_font = _pango_cairo_font_private_get_scaled_font (&PANGO_CAIRO_WIN32_FONT (font)->cf_priv);
+
+  cairo_win32_scaled_font_done_font (scaled_font);
+}
+
+static double
+pango_cairo_win32_font_get_metrics_factor (PangoFont *font)
+{
+  PangoWin32Font *win32font = PANGO_WIN32_FONT (font);
+  cairo_scaled_font_t *scaled_font = _pango_cairo_font_private_get_scaled_font (&PANGO_CAIRO_WIN32_FONT (font)->cf_priv);
+
+  return cairo_win32_scaled_font_get_metrics_factor (scaled_font) * win32font->size;
+}
+
+static void
+pango_cairo_win32_font_class_init (PangoCairoWin32FontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+  PangoWin32FontClass *win32_font_class = PANGO_WIN32_FONT_CLASS (class);
+
+  object_class->finalize = pango_cairo_win32_font_finalize;
+
+  font_class->get_glyph_extents = pango_cairo_win32_font_get_glyph_extents;
+  font_class->get_metrics = _pango_cairo_font_get_metrics;
+
+  win32_font_class->select_font = pango_cairo_win32_font_select_font;
+  win32_font_class->done_font = pango_cairo_win32_font_done_font;
+  win32_font_class->get_metrics_factor = pango_cairo_win32_font_get_metrics_factor;
+}
+
+static void
+pango_cairo_win32_font_init (PangoCairoWin32Font *cwfont G_GNUC_UNUSED)
+{
+}
+
+/********************
+ *    Private API   *
+ ********************/
+
+PangoFont *
+_pango_cairo_win32_font_new (PangoCairoWin32FontMap     *cwfontmap,
+                            PangoContext               *context,
+                            PangoWin32Face             *face,
+                            const PangoFontDescription *desc)
+{
+  PangoCairoWin32Font *cwfont;
+  PangoWin32Font *win32font;
+  double size;
+  double dpi;
+#define USE_FACE_CACHED_FONTS
+#ifdef USE_FACE_CACHED_FONTS
+  PangoWin32FontMap *win32fontmap;
+  GSList *tmp_list;
+#endif
+  cairo_matrix_t font_matrix;
+
+  g_return_val_if_fail (PANGO_IS_CAIRO_WIN32_FONT_MAP (cwfontmap), NULL);
+
+  size = (double) pango_font_description_get_size (desc) / PANGO_SCALE;
+
+  if (context)
+    {
+      dpi = pango_cairo_context_get_resolution (context);
+
+      if (dpi <= 0)
+       dpi = cwfontmap->dpi;
+    }
+  else
+    dpi = cwfontmap->dpi;
+
+  if (!pango_font_description_get_size_is_absolute (desc))
+    size *= dpi / 72.;
+
+#ifdef USE_FACE_CACHED_FONTS
+  win32fontmap = PANGO_WIN32_FONT_MAP (cwfontmap);
+
+  tmp_list = face->cached_fonts;
+  while (tmp_list)
+    {
+      win32font = tmp_list->data;
+      if (ABS (win32font->size - size * PANGO_SCALE) < 2)
+       {
+         g_object_ref (win32font);
+         if (win32font->in_cache)
+           _pango_win32_fontmap_cache_remove (PANGO_FONT_MAP (win32fontmap), win32font);
+
+         return PANGO_FONT (win32font);
+       }
+      tmp_list = tmp_list->next;
+    }
+#endif
+  cwfont = g_object_new (PANGO_TYPE_CAIRO_WIN32_FONT, NULL);
+  win32font = PANGO_WIN32_FONT (cwfont);
+
+  g_assert (win32font->fontmap == NULL);
+  win32font->fontmap = (PangoFontMap *) cwfontmap;
+  g_object_add_weak_pointer (G_OBJECT (win32font->fontmap), (gpointer *) (gpointer) &win32font->fontmap);
+
+  win32font->win32face = face;
+
+#ifdef USE_FACE_CACHED_FONTS
+  face->cached_fonts = g_slist_prepend (face->cached_fonts, win32font);
+#endif
+
+  /* FIXME: This is a pixel size, so not really what we want for describe(),
+   * but it's what we need when computing the scale factor.
+   */
+  win32font->size = size * PANGO_SCALE;
+
+  _pango_win32_make_matching_logfontw (win32font->fontmap,
+                                      &face->logfontw,
+                                      win32font->size,
+                                      &win32font->logfontw);
+
+  cairo_matrix_init_identity (&font_matrix);
+
+  cairo_matrix_scale (&font_matrix, size, size);
+
+  _pango_cairo_font_private_initialize (&cwfont->cf_priv,
+                                       (PangoCairoFont *) cwfont,
+                                       pango_font_description_get_gravity (desc),
+                                       _pango_cairo_context_get_merged_font_options (context),
+                                       pango_context_get_matrix (context),
+                                       &font_matrix);
+
+  return PANGO_FONT (cwfont);
+}
diff --git a/pango/pangocairo-win32fontmap.c b/pango/pangocairo-win32fontmap.c
new file mode 100755 (executable)
index 0000000..c5ec6cd
--- /dev/null
@@ -0,0 +1,102 @@
+/* Pango
+ * pangocairo-win32fontmap.c: Cairo font handling, Win32 backend
+ *
+ * Copyright (C) 2000-2005 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pangowin32-private.h"
+#include "pangocairo.h"
+#include "pangocairo-private.h"
+#include "pangocairo-win32.h"
+
+typedef struct _PangoCairoWin32FontMapClass PangoCairoWin32FontMapClass;
+
+struct _PangoCairoWin32FontMapClass
+{
+  PangoWin32FontMapClass parent_class;
+};
+
+static void
+pango_cairo_win32_font_map_set_resolution (PangoCairoFontMap *cfontmap,
+                                          double             dpi)
+{
+  PangoCairoWin32FontMap *cwfontmap = PANGO_CAIRO_WIN32_FONT_MAP (cfontmap);
+
+  cwfontmap->dpi = dpi;
+}
+
+static double
+pango_cairo_win32_font_map_get_resolution (PangoCairoFontMap *cfontmap)
+{
+  PangoCairoWin32FontMap *cwfontmap = PANGO_CAIRO_WIN32_FONT_MAP (cfontmap);
+
+  return cwfontmap->dpi;
+}
+
+static cairo_font_type_t
+pango_cairo_win32_font_map_get_font_type (PangoCairoFontMap *cfontmap)
+{
+  return CAIRO_FONT_TYPE_WIN32;
+}
+
+static void
+cairo_font_map_iface_init (PangoCairoFontMapIface *iface)
+{
+  iface->set_resolution = pango_cairo_win32_font_map_set_resolution;
+  iface->get_resolution = pango_cairo_win32_font_map_get_resolution;
+  iface->get_font_type  = pango_cairo_win32_font_map_get_font_type;
+}
+
+G_DEFINE_TYPE_WITH_CODE (PangoCairoWin32FontMap, pango_cairo_win32_font_map, PANGO_TYPE_WIN32_FONT_MAP,
+    { G_IMPLEMENT_INTERFACE (PANGO_TYPE_CAIRO_FONT_MAP, cairo_font_map_iface_init) });
+
+static void
+pango_cairo_win32_font_map_finalize (GObject *object)
+{
+  PangoCairoWin32FontMap *cwfontmap = PANGO_CAIRO_WIN32_FONT_MAP (object);
+
+  G_OBJECT_CLASS (pango_cairo_win32_font_map_parent_class)->finalize (object);
+}
+
+static PangoFont *
+pango_cairo_win32_font_map_find_font (PangoWin32FontMap          *fontmap,
+                                     PangoContext               *context,
+                                     PangoWin32Face             *face,
+                                     const PangoFontDescription *desc)
+{
+  return _pango_cairo_win32_font_new (PANGO_CAIRO_WIN32_FONT_MAP (fontmap),
+                                     context, face, desc);
+}
+
+static void
+pango_cairo_win32_font_map_class_init (PangoCairoWin32FontMapClass *class)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+  PangoWin32FontMapClass *win32fontmap_class = PANGO_WIN32_FONT_MAP_CLASS (class);
+
+  gobject_class->finalize  = pango_cairo_win32_font_map_finalize;
+  win32fontmap_class->find_font = pango_cairo_win32_font_map_find_font;
+}
+
+static void
+pango_cairo_win32_font_map_init (PangoCairoWin32FontMap *cwfontmap)
+{
+  cwfontmap->dpi = GetDeviceCaps (pango_win32_get_dc (), LOGPIXELSY);
+}
diff --git a/pango/pangocairo.def b/pango/pangocairo.def
new file mode 100755 (executable)
index 0000000..f3052eb
--- /dev/null
@@ -0,0 +1,34 @@
+EXPORTS
+       pango_cairo_context_get_font_options
+       pango_cairo_context_get_resolution
+       pango_cairo_context_get_shape_renderer
+       pango_cairo_context_set_font_options
+       pango_cairo_context_set_resolution
+       pango_cairo_context_set_shape_renderer
+       pango_cairo_create_context
+       pango_cairo_create_layout
+       pango_cairo_error_underline_path
+;      pango_cairo_fc_font_get_type
+;      pango_cairo_fc_font_map_get_type
+       pango_cairo_font_get_type
+       pango_cairo_font_get_scaled_font
+       pango_cairo_font_map_create_context
+       pango_cairo_font_map_get_default
+       pango_cairo_font_map_set_default
+       pango_cairo_font_map_get_font_type
+       pango_cairo_font_map_get_resolution
+       pango_cairo_font_map_get_type
+       pango_cairo_font_map_new
+       pango_cairo_font_map_new_for_font_type
+       pango_cairo_font_map_set_resolution
+       pango_cairo_glyph_string_path
+       pango_cairo_layout_line_path
+       pango_cairo_layout_path
+       pango_cairo_renderer_get_type
+       pango_cairo_show_error_underline
+       pango_cairo_show_glyph_item
+       pango_cairo_show_glyph_string
+       pango_cairo_show_layout
+       pango_cairo_show_layout_line
+       pango_cairo_update_context
+       pango_cairo_update_layout
diff --git a/pango/pangocairo.h b/pango/pangocairo.h
new file mode 100755 (executable)
index 0000000..f6fc261
--- /dev/null
@@ -0,0 +1,154 @@
+/* Pango
+ * pangocairo.h:
+ *
+ * Copyright (C) 1999, 2004 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOCAIRO_H__
+#define __PANGOCAIRO_H__
+
+#include <pango/pango.h>
+#include <cairo.h>
+
+G_BEGIN_DECLS
+
+/**
+ * PangoCairoFont:
+ *
+ * #PangoCairoFont is an interface exported by fonts for
+ * use with Cairo. The actual type of the font will depend
+ * on the particular font technology Cairo was compiled to use.
+ *
+ * Since: 1.18
+ **/
+typedef struct _PangoCairoFont      PangoCairoFont;
+#define PANGO_TYPE_CAIRO_FONT       (pango_cairo_font_get_type ())
+#define PANGO_CAIRO_FONT(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT, PangoCairoFont))
+#define PANGO_IS_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT))
+
+/**
+ * PangoCairoFontMap:
+ *
+ * #PangoCairoFontMap is an interface exported by font maps for
+ * use with Cairo. The actual type of the font map will depend
+ * on the particular font technology Cairo was compiled to use.
+ *
+ * Since: 1.10
+ **/
+typedef struct _PangoCairoFontMap        PangoCairoFontMap;
+#define PANGO_TYPE_CAIRO_FONT_MAP       (pango_cairo_font_map_get_type ())
+#define PANGO_CAIRO_FONT_MAP(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT_MAP, PangoCairoFontMap))
+#define PANGO_IS_CAIRO_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT_MAP))
+
+typedef void (* PangoCairoShapeRendererFunc) (cairo_t        *cr,
+                                             PangoAttrShape *attr,
+                                             gboolean        do_path,
+                                             gpointer        data);
+
+/*
+ * PangoCairoFontMap
+ */
+GType         pango_cairo_font_map_get_type          (void) G_GNUC_CONST;
+
+PangoFontMap *pango_cairo_font_map_new               (void);
+PangoFontMap *pango_cairo_font_map_new_for_font_type (cairo_font_type_t fonttype);
+PangoFontMap *pango_cairo_font_map_get_default       (void);
+void          pango_cairo_font_map_set_default       (PangoCairoFontMap *fontmap);
+cairo_font_type_t pango_cairo_font_map_get_font_type (PangoCairoFontMap *fontmap);
+
+void          pango_cairo_font_map_set_resolution (PangoCairoFontMap *fontmap,
+                                                  double             dpi);
+double        pango_cairo_font_map_get_resolution (PangoCairoFontMap *fontmap);
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoContext *pango_cairo_font_map_create_context (PangoCairoFontMap *fontmap);
+#endif
+
+/*
+ * PangoCairoFont
+ */
+GType         pango_cairo_font_get_type               (void) G_GNUC_CONST;
+
+cairo_scaled_font_t *pango_cairo_font_get_scaled_font (PangoCairoFont *font);
+
+/* Update a Pango context for the current state of a cairo context
+ */
+void         pango_cairo_update_context (cairo_t      *cr,
+                                        PangoContext *context);
+
+void                        pango_cairo_context_set_font_options (PangoContext               *context,
+                                                                 const cairo_font_options_t *options);
+const cairo_font_options_t *pango_cairo_context_get_font_options (PangoContext               *context);
+
+void               pango_cairo_context_set_resolution     (PangoContext       *context,
+                                                          double              dpi);
+double             pango_cairo_context_get_resolution     (PangoContext       *context);
+
+void                        pango_cairo_context_set_shape_renderer (PangoContext                *context,
+                                                                   PangoCairoShapeRendererFunc  func,
+                                                                   gpointer                     data,
+                                                                   GDestroyNotify               dnotify);
+PangoCairoShapeRendererFunc pango_cairo_context_get_shape_renderer (PangoContext                *context,
+                                                                   gpointer                    *data);
+
+/* Convenience
+ */
+PangoContext *pango_cairo_create_context (cairo_t   *cr);
+PangoLayout *pango_cairo_create_layout (cairo_t     *cr);
+void         pango_cairo_update_layout (cairo_t     *cr,
+                                       PangoLayout *layout);
+
+/*
+ * Rendering
+ */
+void pango_cairo_show_glyph_string (cairo_t          *cr,
+                                   PangoFont        *font,
+                                   PangoGlyphString *glyphs);
+void pango_cairo_show_glyph_item   (cairo_t          *cr,
+                                   const char       *text,
+                                   PangoGlyphItem   *glyph_item);
+void pango_cairo_show_layout_line  (cairo_t          *cr,
+                                   PangoLayoutLine  *line);
+void pango_cairo_show_layout       (cairo_t          *cr,
+                                   PangoLayout      *layout);
+
+void pango_cairo_show_error_underline (cairo_t       *cr,
+                                      double         x,
+                                      double         y,
+                                      double         width,
+                                      double         height);
+
+/*
+ * Rendering to a path
+ */
+void pango_cairo_glyph_string_path (cairo_t          *cr,
+                                   PangoFont        *font,
+                                   PangoGlyphString *glyphs);
+void pango_cairo_layout_line_path  (cairo_t          *cr,
+                                   PangoLayoutLine  *line);
+void pango_cairo_layout_path       (cairo_t          *cr,
+                                   PangoLayout      *layout);
+
+void pango_cairo_error_underline_path (cairo_t       *cr,
+                                      double         x,
+                                      double         y,
+                                      double         width,
+                                      double         height);
+
+G_END_DECLS
+
+#endif /* __PANGOCAIRO_H__ */
diff --git a/pango/pangofc-decoder.c b/pango/pangofc-decoder.c
new file mode 100755 (executable)
index 0000000..09a4eed
--- /dev/null
@@ -0,0 +1,86 @@
+/* Pango
+ * pangofc-decoder.c: Custom font encoder/decoders
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pangofc-decoder.h"
+
+G_DEFINE_ABSTRACT_TYPE (PangoFcDecoder, pango_fc_decoder, G_TYPE_OBJECT)
+
+static void
+pango_fc_decoder_init (PangoFcDecoder *decoder G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_fc_decoder_class_init (PangoFcDecoderClass *klass G_GNUC_UNUSED)
+{
+}
+
+/**
+ * pango_fc_decoder_get_charset:
+ * @decoder: a #PangoFcDecoder
+ * @fcfont: the #PangoFcFont to query.
+ *
+ * Generates an #FcCharSet of supported characters for the fcfont
+ * given.  The returned #FcCharSet will be a reference to an
+ * internal value stored by the #PangoFcDecoder and must not
+ * be modified or freed.
+ *
+ * Return value: the #FcCharset for @fcfont; must not be modified
+ *   or freed.
+ *
+ * Since: 1.6
+ **/
+FcCharSet *
+pango_fc_decoder_get_charset (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont)
+{
+  g_return_val_if_fail (PANGO_IS_FC_DECODER (decoder), NULL);
+
+  return PANGO_FC_DECODER_GET_CLASS (decoder)->get_charset (decoder, fcfont);
+}
+
+/**
+ * pango_fc_decoder_get_glyph:
+ * @decoder: a #PangoFcDecoder
+ * @fcfont: a #PangoFcFont to query.
+ * @wc: the Unicode code point to convert to a single #PangoGlyph.
+ *
+ * Generates a #PangoGlyph for the given Unicode point using the
+ * custom decoder. For complex scripts where there can be multiple
+ * glyphs for a single character, the decoder will return whatever
+ * glyph is most convenient for it. (Usually whatever glyph is directly
+ * in the fonts character map table.)
+ *
+ * Return value: the glyph index, or 0 if the glyph isn't
+ * covered by the font.
+ *
+ * Since: 1.6
+ **/
+PangoGlyph
+pango_fc_decoder_get_glyph (PangoFcDecoder *decoder,
+                           PangoFcFont    *fcfont,
+                           guint32         wc)
+{
+  g_return_val_if_fail (PANGO_IS_FC_DECODER (decoder), 0);
+
+  return PANGO_FC_DECODER_GET_CLASS (decoder)->get_glyph (decoder, fcfont, wc);
+}
diff --git a/pango/pangofc-decoder.h b/pango/pangofc-decoder.h
new file mode 100755 (executable)
index 0000000..8e34146
--- /dev/null
@@ -0,0 +1,110 @@
+/* Pango
+ * pangofc-decoder.h: Custom encoders/decoders on a per-font basis.
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_DECODER_H_
+#define __PANGO_DECODER_H_
+
+#include <pango/pangofc-font.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_FC_DECODER       (pango_fc_decoder_get_type())
+#define PANGO_FC_DECODER(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_DECODER, PangoFcDecoder))
+#define PANGO_IS_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_DECODER))
+
+typedef struct _PangoFcDecoder      PangoFcDecoder;
+typedef struct _PangoFcDecoderClass PangoFcDecoderClass;
+
+#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass))
+#define PANGO_IS_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_DECODER))
+#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass))
+
+/**
+ * PangoFcDecoder:
+ *
+ * #PangoFcDecoder is a virtual base class that implementations will
+ * inherit from.  It's the interface that is used to define a custom
+ * encoding for a font.  These objects are created in your code from a
+ * function callback that was originally registered with
+ * pango_fc_font_map_add_decoder_find_func().  Pango requires
+ * information about the supported charset for a font as well as the
+ * individual character to glyph conversions.  Pango gets that
+ * information via the #get_charset and #get_glyph callbacks into your
+ * object implementation.
+ *
+ * Since: 1.6
+ **/
+struct _PangoFcDecoder
+{
+  /*< private >*/
+  GObject parent_instance;
+};
+
+/**
+ * PangoFcDecoderClass:
+ * @get_charset: This returns an #FcCharset given a #PangoFcFont that
+ *  includes a list of supported characters in the font.  The
+ *  #FcCharSet that is returned should be an internal reference to your
+ *  code.  Pango will not free this structure.  It is important that
+ *  you make this callback fast because this callback is called
+ *  separately for each character to determine Unicode coverage.
+ * @get_glyph: This returns a single #PangoGlyph for a given Unicode
+ *  code point.
+ *
+ * Class structure for #PangoFcDecoder.
+ *
+ * Since: 1.6
+ **/
+struct _PangoFcDecoderClass
+{
+  /*< private >*/
+  GObjectClass parent_class;
+
+  /* vtable - not signals */
+  /*< public >*/
+  FcCharSet  *(*get_charset) (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont);
+  PangoGlyph  (*get_glyph)   (PangoFcDecoder *decoder,
+                             PangoFcFont    *fcfont,
+                             guint32         wc);
+
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+GType      pango_fc_decoder_get_type    (void) G_GNUC_CONST;
+
+FcCharSet *pango_fc_decoder_get_charset (PangoFcDecoder *decoder,
+                                        PangoFcFont    *fcfont);
+
+PangoGlyph pango_fc_decoder_get_glyph   (PangoFcDecoder *decoder,
+                                        PangoFcFont    *fcfont,
+                                        guint32         wc);
+
+G_END_DECLS
+
+#endif /* __PANGO_DECODER_H_ */
+
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c
new file mode 100755 (executable)
index 0000000..ad234be
--- /dev/null
@@ -0,0 +1,1041 @@
+/* Pango
+ * pangofc-font.c: Shared interfaces for fontconfig-based backends
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pangofc-font.h"
+#include "pangofc-fontmap.h"
+#include "pangofc-private.h"
+#include "pango-layout.h"
+#include "pango-modules.h"
+#include "pango-impl-utils.h"
+
+#include <fontconfig/fcfreetype.h>
+
+#include FT_TRUETYPE_TABLES_H
+
+enum {
+  PROP_0,
+  PROP_PATTERN,
+  PROP_FONTMAP
+};
+
+typedef struct _PangoFcFontPrivate PangoFcFontPrivate;
+
+struct _PangoFcFontPrivate
+{
+  PangoFcDecoder *decoder;
+  PangoFcFontKey *key;
+  PangoFcCmapCache *cmap_cache;
+  gboolean has_weak_pointer; /* have set a weak_pointer from fontmap to us */
+};
+
+static gboolean pango_fc_font_real_has_char  (PangoFcFont *font,
+                                             gunichar     wc);
+static guint    pango_fc_font_real_get_glyph (PangoFcFont *font,
+                                             gunichar     wc);
+
+static void                  pango_fc_font_finalize     (GObject          *object);
+static void                  pango_fc_font_set_property (GObject          *object,
+                                                        guint             prop_id,
+                                                        const GValue     *value,
+                                                        GParamSpec       *pspec);
+static void                  pango_fc_font_get_property (GObject          *object,
+                                                        guint             prop_id,
+                                                        GValue           *value,
+                                                        GParamSpec       *pspec);
+static PangoEngineShape *    pango_fc_font_find_shaper  (PangoFont        *font,
+                                                        PangoLanguage    *language,
+                                                        guint32           ch);
+static PangoCoverage *       pango_fc_font_get_coverage (PangoFont        *font,
+                                                        PangoLanguage    *language);
+static PangoFontMetrics *    pango_fc_font_get_metrics  (PangoFont        *font,
+                                                        PangoLanguage    *language);
+static PangoFontMap *        pango_fc_font_get_font_map (PangoFont        *font);
+static PangoFontDescription *pango_fc_font_describe     (PangoFont        *font);
+static PangoFontDescription *pango_fc_font_describe_absolute (PangoFont        *font);
+
+
+#define PANGO_FC_FONT_LOCK_FACE(font)  (PANGO_FC_FONT_GET_CLASS (font)->lock_face (font))
+#define PANGO_FC_FONT_UNLOCK_FACE(font)        (PANGO_FC_FONT_GET_CLASS (font)->unlock_face (font))
+
+G_DEFINE_ABSTRACT_TYPE (PangoFcFont, pango_fc_font, PANGO_TYPE_FONT)
+
+static void
+pango_fc_font_class_init (PangoFcFontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+
+  class->has_char = pango_fc_font_real_has_char;
+  class->get_glyph = pango_fc_font_real_get_glyph;
+  class->get_unknown_glyph = NULL;
+
+  object_class->finalize = pango_fc_font_finalize;
+  object_class->set_property = pango_fc_font_set_property;
+  object_class->get_property = pango_fc_font_get_property;
+  font_class->describe = pango_fc_font_describe;
+  font_class->describe_absolute = pango_fc_font_describe_absolute;
+  font_class->find_shaper = pango_fc_font_find_shaper;
+  font_class->get_coverage = pango_fc_font_get_coverage;
+  font_class->get_metrics = pango_fc_font_get_metrics;
+  font_class->get_font_map = pango_fc_font_get_font_map;
+
+  g_object_class_install_property (object_class, PROP_PATTERN,
+                                  g_param_spec_pointer ("pattern",
+                                                        "Pattern",
+                                                        "The fontconfig pattern for this font",
+                                                        G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+                                                        G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, PROP_FONTMAP,
+                                  g_param_spec_object ("fontmap",
+                                                       "Font Map",
+                                                       "The PangoFc font map this font is associated with (Since: 1.26)",
+                                                       PANGO_TYPE_FC_FONT_MAP,
+                                                       G_PARAM_READWRITE |
+                                                       G_PARAM_STATIC_STRINGS));
+
+  g_type_class_add_private (object_class, sizeof (PangoFcFontPrivate));
+}
+
+static void
+pango_fc_font_init (PangoFcFont *fcfont)
+{
+  fcfont->priv = G_TYPE_INSTANCE_GET_PRIVATE (fcfont,
+                                             PANGO_TYPE_FC_FONT,
+                                             PangoFcFontPrivate);
+}
+
+static void
+free_metrics_info (PangoFcMetricsInfo *info)
+{
+  pango_font_metrics_unref (info->metrics);
+  g_slice_free (PangoFcMetricsInfo, info);
+}
+
+static void
+pango_fc_font_finalize (GObject *object)
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (object);
+  PangoFcFontPrivate *priv = fcfont->priv;
+
+  g_slist_foreach (fcfont->metrics_by_lang, (GFunc)free_metrics_info, NULL);
+  g_slist_free (fcfont->metrics_by_lang);
+
+  if (fcfont->fontmap)
+    {
+      _pango_fc_font_map_remove (PANGO_FC_FONT_MAP (fcfont->fontmap), fcfont);
+      if (priv->has_weak_pointer)
+        {
+         priv->has_weak_pointer = FALSE;
+         g_object_remove_weak_pointer (G_OBJECT (fcfont->fontmap), (gpointer *) (gpointer) &fcfont->fontmap);
+       }
+      fcfont->fontmap = NULL;
+    }
+
+  FcPatternDestroy (fcfont->font_pattern);
+  pango_font_description_free (fcfont->description);
+
+  if (priv->decoder)
+    _pango_fc_font_set_decoder (fcfont, NULL);
+
+  if (priv->cmap_cache)
+    _pango_fc_cmap_cache_unref (priv->cmap_cache);
+
+  G_OBJECT_CLASS (pango_fc_font_parent_class)->finalize (object);
+}
+
+static gboolean
+pattern_is_hinted (FcPattern *pattern)
+{
+  FcBool hinting;
+
+  if (FcPatternGetBool (pattern,
+                       FC_HINTING, 0, &hinting) != FcResultMatch)
+    hinting = FcTrue;
+
+  return hinting;
+}
+
+static gboolean
+pattern_is_transformed (FcPattern *pattern)
+{
+  FcMatrix *fc_matrix;
+
+  if (FcPatternGetMatrix (pattern, FC_MATRIX, 0, &fc_matrix) == FcResultMatch)
+    {
+      FT_Matrix ft_matrix;
+
+      ft_matrix.xx = 0x10000L * fc_matrix->xx;
+      ft_matrix.yy = 0x10000L * fc_matrix->yy;
+      ft_matrix.xy = 0x10000L * fc_matrix->xy;
+      ft_matrix.yx = 0x10000L * fc_matrix->yx;
+
+      return ((ft_matrix.xy | ft_matrix.yx) != 0 ||
+             ft_matrix.xx != 0x10000L ||
+             ft_matrix.yy != 0x10000L);
+    }
+  else
+    return FALSE;
+}
+
+static void
+pango_fc_font_set_property (GObject       *object,
+                           guint          prop_id,
+                           const GValue  *value,
+                           GParamSpec    *pspec)
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (object);
+
+  switch (prop_id)
+    {
+    case PROP_PATTERN:
+      {
+       FcPattern *pattern = g_value_get_pointer (value);
+
+       g_return_if_fail (pattern != NULL);
+       g_return_if_fail (fcfont->font_pattern == NULL);
+
+       FcPatternReference (pattern);
+       fcfont->font_pattern = pattern;
+       fcfont->description = pango_fc_font_description_from_pattern (pattern, TRUE);
+       fcfont->is_hinted = pattern_is_hinted (pattern);
+       fcfont->is_transformed = pattern_is_transformed (pattern);
+      }
+      goto set_decoder;
+
+    case PROP_FONTMAP:
+      {
+       PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (g_value_get_object (value));
+
+       g_return_if_fail (fcfont->fontmap == NULL);
+       fcfont->fontmap = (PangoFontMap *) fcfontmap;
+       if (fcfont->fontmap)
+         {
+           PangoFcFontPrivate *priv = fcfont->priv;
+           priv->has_weak_pointer = TRUE;
+           g_object_add_weak_pointer (G_OBJECT (fcfont->fontmap), (gpointer *) (gpointer) &fcfont->fontmap);
+         }
+      }
+      goto set_decoder;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      return;
+    }
+
+set_decoder:
+  /* set decoder if both pattern and fontmap are set now */
+  if (fcfont->font_pattern && fcfont->fontmap)
+    _pango_fc_font_set_decoder (fcfont,
+                               pango_fc_font_map_find_decoder  ((PangoFcFontMap *) fcfont->fontmap,
+                                                                fcfont->font_pattern));
+}
+
+static void
+pango_fc_font_get_property (GObject       *object,
+                           guint          prop_id,
+                           GValue        *value,
+                           GParamSpec    *pspec)
+{
+  switch (prop_id)
+    {
+    case PROP_PATTERN:
+      {
+       PangoFcFont *fcfont = PANGO_FC_FONT (object);
+       g_value_set_pointer (value, fcfont->font_pattern);
+      }
+      break;
+    case PROP_FONTMAP:
+      {
+       PangoFcFont *fcfont = PANGO_FC_FONT (object);
+       g_value_set_object (value, fcfont->fontmap);
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static PangoFontDescription *
+pango_fc_font_describe (PangoFont *font)
+{
+  PangoFcFont *fcfont = (PangoFcFont *)font;
+
+  return pango_font_description_copy (fcfont->description);
+}
+
+static PangoFontDescription *
+pango_fc_font_describe_absolute (PangoFont *font)
+{
+  PangoFcFont *fcfont = (PangoFcFont *)font;
+  PangoFontDescription *desc = pango_font_description_copy (fcfont->description);
+  double size;
+
+  if (FcPatternGetDouble (fcfont->font_pattern, FC_PIXEL_SIZE, 0, &size) == FcResultMatch)
+    pango_font_description_set_absolute_size (desc, size * PANGO_SCALE);
+
+  return desc;
+}
+
+static PangoMap *
+pango_fc_get_shaper_map (PangoLanguage *language)
+{
+  static guint engine_type_id = 0;
+  static guint render_type_id = 0;
+
+  if (engine_type_id == 0)
+    {
+      engine_type_id = g_quark_from_static_string (PANGO_ENGINE_TYPE_SHAPE);
+      render_type_id = g_quark_from_static_string (PANGO_RENDER_TYPE_FC);
+    }
+
+  return pango_find_map (language, engine_type_id, render_type_id);
+}
+
+static PangoEngineShape *
+pango_fc_font_find_shaper (PangoFont     *font G_GNUC_UNUSED,
+                          PangoLanguage *language,
+                          guint32        ch)
+{
+  PangoMap *shaper_map = NULL;
+  PangoScript script;
+
+  shaper_map = pango_fc_get_shaper_map (language);
+  script = pango_script_for_unichar (ch);
+  return (PangoEngineShape *)pango_map_get_engine (shaper_map, script);
+}
+
+static PangoCoverage *
+pango_fc_font_get_coverage (PangoFont     *font,
+                           PangoLanguage *language G_GNUC_UNUSED)
+{
+  PangoFcFont *fcfont = (PangoFcFont *)font;
+  PangoFcFontPrivate *priv = fcfont->priv;
+  FcCharSet *charset;
+
+  if (priv->decoder)
+    {
+      charset = pango_fc_decoder_get_charset (priv->decoder, fcfont);
+      return _pango_fc_font_map_fc_to_coverage (charset);
+    }
+
+  if (!fcfont->fontmap)
+    return pango_coverage_new ();
+
+  return _pango_fc_font_map_get_coverage (PANGO_FC_FONT_MAP (fcfont->fontmap),
+                                         fcfont);
+}
+
+/* For Xft, it would be slightly more efficient to simply to
+ * call Xft, and also more robust against changes in Xft.
+ * But for now, we simply use the same code for all backends.
+ *
+ * The code in this function is partly based on code from Xft,
+ * Copyright 2000 Keith Packard
+ */
+static void
+get_face_metrics (PangoFcFont      *fcfont,
+                 PangoFontMetrics *metrics)
+{
+  FT_Face face = PANGO_FC_FONT_LOCK_FACE (fcfont);
+  FcMatrix *fc_matrix;
+  FT_Matrix ft_matrix;
+  TT_OS2 *os2;
+  gboolean have_transform = FALSE;
+
+  if (G_UNLIKELY (!face))
+    {
+      metrics->descent = 0;
+      metrics->ascent = PANGO_SCALE * PANGO_UNKNOWN_GLYPH_HEIGHT;
+      metrics->underline_thickness = PANGO_SCALE;
+      metrics->underline_position = - PANGO_SCALE;
+      metrics->strikethrough_thickness = PANGO_SCALE;
+      metrics->strikethrough_position = PANGO_SCALE * (PANGO_UNKNOWN_GLYPH_HEIGHT/2);
+      return;
+    }
+
+  if  (FcPatternGetMatrix (fcfont->font_pattern,
+                          FC_MATRIX, 0, &fc_matrix) == FcResultMatch)
+    {
+      ft_matrix.xx = 0x10000L * fc_matrix->xx;
+      ft_matrix.yy = 0x10000L * fc_matrix->yy;
+      ft_matrix.xy = 0x10000L * fc_matrix->xy;
+      ft_matrix.yx = 0x10000L * fc_matrix->yx;
+
+      have_transform = (ft_matrix.xx != 0x10000 || ft_matrix.xy != 0 ||
+                       ft_matrix.yx != 0 || ft_matrix.yy != 0x10000);
+    }
+
+  if (have_transform)
+    {
+      FT_Vector        vector;
+
+      vector.x = 0;
+      vector.y = face->size->metrics.descender;
+      FT_Vector_Transform (&vector, &ft_matrix);
+      metrics->descent = - PANGO_UNITS_26_6 (vector.y);
+
+      vector.x = 0;
+      vector.y = face->size->metrics.ascender;
+      FT_Vector_Transform (&vector, &ft_matrix);
+      metrics->ascent = PANGO_UNITS_26_6 (vector.y);
+    }
+  else if (fcfont->is_hinted ||
+          (face->face_flags & FT_FACE_FLAG_SCALABLE) == 0)
+    {
+      metrics->descent = - PANGO_UNITS_26_6 (face->size->metrics.descender);
+      metrics->ascent = PANGO_UNITS_26_6 (face->size->metrics.ascender);
+    }
+  else
+    {
+      FT_Fixed ascender, descender;
+
+      descender = FT_MulFix (face->descender, face->size->metrics.y_scale);
+      metrics->descent = - PANGO_UNITS_26_6 (descender);
+
+      ascender = FT_MulFix (face->ascender, face->size->metrics.y_scale);
+      metrics->ascent = PANGO_UNITS_26_6 (ascender);
+    }
+
+
+  metrics->underline_thickness = 0;
+  metrics->underline_position = 0;
+
+  {
+    FT_Fixed ft_thickness, ft_position;
+
+    ft_thickness = FT_MulFix (face->underline_thickness, face->size->metrics.y_scale);
+    metrics->underline_thickness = PANGO_UNITS_26_6 (ft_thickness);
+
+    ft_position = FT_MulFix (face->underline_position, face->size->metrics.y_scale);
+    metrics->underline_position = PANGO_UNITS_26_6 (ft_position);
+  }
+
+  if (metrics->underline_thickness == 0 || metrics->underline_position == 0)
+    {
+      metrics->underline_thickness = (PANGO_SCALE * face->size->metrics.y_ppem) / 14;
+      metrics->underline_position = - metrics->underline_thickness;
+    }
+
+
+  metrics->strikethrough_thickness = 0;
+  metrics->strikethrough_position = 0;
+
+  os2 = FT_Get_Sfnt_Table (face, ft_sfnt_os2);
+  if (os2 && os2->version != 0xFFFF)
+    {
+      FT_Fixed ft_thickness, ft_position;
+
+      ft_thickness = FT_MulFix (os2->yStrikeoutSize, face->size->metrics.y_scale);
+      metrics->strikethrough_thickness = PANGO_UNITS_26_6 (ft_thickness);
+
+      ft_position = FT_MulFix (os2->yStrikeoutPosition, face->size->metrics.y_scale);
+      metrics->strikethrough_position = PANGO_UNITS_26_6 (ft_position);
+    }
+
+  if (metrics->strikethrough_thickness == 0 || metrics->strikethrough_position == 0)
+    {
+      metrics->strikethrough_thickness = metrics->underline_thickness;
+      metrics->strikethrough_position = (PANGO_SCALE * face->size->metrics.y_ppem) / 4;
+    }
+
+
+  /* If hinting is on for this font, quantize the underline and strikethrough position
+   * to integer values.
+   */
+  if (fcfont->is_hinted)
+    {
+      pango_quantize_line_geometry (&metrics->underline_thickness,
+                                   &metrics->underline_position);
+      pango_quantize_line_geometry (&metrics->strikethrough_thickness,
+                                   &metrics->strikethrough_position);
+
+      /* Quantizing may have pushed underline_position to 0.  Not good */
+      if (metrics->underline_position == 0)
+       metrics->underline_position = - metrics->underline_thickness;
+    }
+
+
+  PANGO_FC_FONT_UNLOCK_FACE (fcfont);
+}
+
+static int
+max_glyph_width (PangoLayout *layout)
+{
+  int max_width = 0;
+  GSList *l, *r;
+
+  for (l = pango_layout_get_lines_readonly (layout); l; l = l->next)
+    {
+      PangoLayoutLine *line = l->data;
+
+      for (r = line->runs; r; r = r->next)
+       {
+         PangoGlyphString *glyphs = ((PangoGlyphItem *)r->data)->glyphs;
+         int i;
+
+         for (i = 0; i < glyphs->num_glyphs; i++)
+           if (glyphs->glyphs[i].geometry.width > max_width)
+             max_width = glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  return max_width;
+}
+
+PangoFontMetrics *
+pango_fc_font_create_metrics_for_context (PangoFcFont   *fcfont,
+                                         PangoContext  *context)
+{
+  PangoFontMetrics *metrics;
+  PangoLayout *layout;
+  PangoRectangle extents;
+  PangoLanguage *language = pango_context_get_language (context);
+  const char *sample_str = pango_language_get_sample_string (language);
+  PangoFontDescription *desc = pango_font_describe_with_absolute_size (PANGO_FONT (fcfont));
+
+  metrics = pango_font_metrics_new ();
+
+  get_face_metrics (fcfont, metrics);
+
+  layout = pango_layout_new (context);
+  pango_layout_set_font_description (layout, desc);
+  pango_font_description_free (desc);
+
+  pango_layout_set_text (layout, sample_str, -1);
+  pango_layout_get_extents (layout, NULL, &extents);
+
+  metrics->approximate_char_width =
+    extents.width / pango_utf8_strwidth (sample_str);
+
+  pango_layout_set_text (layout, "0123456789", -1);
+  metrics->approximate_digit_width = max_glyph_width (layout);
+
+  g_object_unref (layout);
+
+  return metrics;
+}
+
+/* This function is cut-and-pasted into pangocairo-fcfont.c - it might be
+ * better to add a virtual fcfont->create_context (font).
+ */
+static PangoFontMetrics *
+pango_fc_font_get_metrics (PangoFont     *font,
+                          PangoLanguage *language)
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (font);
+  PangoFcMetricsInfo *info = NULL; /* Quiet gcc */
+  GSList *tmp_list;
+
+  const char *sample_str = pango_language_get_sample_string (language);
+
+  tmp_list = fcfont->metrics_by_lang;
+  while (tmp_list)
+    {
+      info = tmp_list->data;
+
+      if (info->sample_str == sample_str)    /* We _don't_ need strcmp */
+       break;
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (!tmp_list)
+    {
+      PangoFontMap *fontmap;
+      PangoContext *context;
+
+      /* XXX this is racy.  because weakref's are racy... */
+      fontmap = fcfont->fontmap;
+      if (!fontmap)
+       return pango_font_metrics_new ();
+      fontmap = g_object_ref (fontmap);
+
+      info = g_slice_new0 (PangoFcMetricsInfo);
+
+      fcfont->metrics_by_lang = g_slist_prepend (fcfont->metrics_by_lang,
+                                                info);
+
+      info->sample_str = sample_str;
+
+      context = pango_font_map_create_context (fontmap);
+      pango_context_set_language (context, language);
+
+      info->metrics = pango_fc_font_create_metrics_for_context (fcfont, context);
+
+      g_object_unref (context);
+      g_object_unref (fontmap);
+    }
+
+  return pango_font_metrics_ref (info->metrics);
+}
+
+static PangoFontMap *
+pango_fc_font_get_font_map (PangoFont *font)
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (font);
+
+  return fcfont->fontmap;
+}
+
+static gboolean
+pango_fc_font_real_has_char (PangoFcFont *font,
+                            gunichar     wc)
+{
+  FcCharSet *charset;
+
+  if (FcPatternGetCharSet (font->font_pattern,
+                          FC_CHARSET, 0, &charset) != FcResultMatch)
+    return FALSE;
+
+  return FcCharSetHasChar (charset, wc);
+}
+
+static guint
+pango_fc_font_real_get_glyph (PangoFcFont *font,
+                             gunichar     wc)
+{
+  PangoFcFontPrivate *priv = font->priv;
+  FT_Face face;
+  FT_UInt index;
+
+  guint idx;
+  PangoFcCmapCacheEntry *entry;
+
+
+  if (G_UNLIKELY (priv->cmap_cache == NULL))
+    {
+      priv->cmap_cache = _pango_fc_font_map_get_cmap_cache ((PangoFcFontMap *) font->fontmap,
+                                                           font);
+
+      if (G_UNLIKELY (!priv->cmap_cache))
+       return 0;
+    }
+
+  idx = wc & CMAP_CACHE_MASK;
+  entry = priv->cmap_cache->entries + idx;
+
+  if (entry->ch != wc)
+    {
+      face = PANGO_FC_FONT_LOCK_FACE (font);
+      if (G_LIKELY (face))
+        {
+         index = FcFreeTypeCharIndex (face, wc);
+         if (index > (FT_UInt)face->num_glyphs)
+           index = 0;
+
+         PANGO_FC_FONT_UNLOCK_FACE (font);
+       }
+      else
+        index = 0;
+
+      entry->ch = wc;
+      entry->glyph = index;
+    }
+
+  return entry->glyph;
+}
+
+/**
+ * pango_fc_font_lock_face:
+ * @font: a #PangoFcFont.
+ *
+ * Gets the FreeType <type>FT_Face</type> associated with a font,
+ * This face will be kept around until you call
+ * pango_fc_font_unlock_face().
+ *
+ * Return value: the FreeType <type>FT_Face</type> associated with @font.
+ *
+ * Since: 1.4
+ **/
+FT_Face
+pango_fc_font_lock_face (PangoFcFont *font)
+{
+  g_return_val_if_fail (PANGO_IS_FC_FONT (font), NULL);
+
+  return PANGO_FC_FONT_LOCK_FACE (font);
+}
+
+/**
+ * pango_fc_font_unlock_face:
+ * @font: a #PangoFcFont.
+ *
+ * Releases a font previously obtained with
+ * pango_fc_font_lock_face().
+ *
+ * Since: 1.4
+ **/
+void
+pango_fc_font_unlock_face (PangoFcFont *font)
+{
+  g_return_if_fail (PANGO_IS_FC_FONT (font));
+
+  PANGO_FC_FONT_UNLOCK_FACE (font);
+}
+
+/**
+ * pango_fc_font_has_char:
+ * @font: a #PangoFcFont
+ * @wc: Unicode codepoint to look up
+ *
+ * Determines whether @font has a glyph for the codepoint @wc.
+ *
+ * Return value: %TRUE if @font has the requested codepoint.
+ *
+ * Since: 1.4
+ **/
+gboolean
+pango_fc_font_has_char (PangoFcFont *font,
+                       gunichar     wc)
+{
+  PangoFcFontPrivate *priv = font->priv;
+  FcCharSet *charset;
+
+  g_return_val_if_fail (PANGO_IS_FC_FONT (font), FALSE);
+
+  if (priv->decoder)
+    {
+      charset = pango_fc_decoder_get_charset (priv->decoder, font);
+      return FcCharSetHasChar (charset, wc);
+    }
+
+  return PANGO_FC_FONT_GET_CLASS (font)->has_char (font, wc);
+}
+
+/**
+ * pango_fc_font_get_glyph:
+ * @font: a #PangoFcFont
+ * @wc: Unicode character to look up
+ *
+ * Gets the glyph index for a given Unicode character
+ * for @font. If you only want to determine
+ * whether the font has the glyph, use pango_fc_font_has_char().
+ *
+ * Return value: the glyph index, or 0, if the Unicode
+ *   character doesn't exist in the font.
+ *
+ * Since: 1.4
+ **/
+PangoGlyph
+pango_fc_font_get_glyph (PangoFcFont *font,
+                        gunichar     wc)
+{
+  PangoFcFontPrivate *priv = font->priv;
+
+  /* Replace NBSP with a normal space; it should be invariant that
+   * they shape the same other than breaking properties.
+   */
+  if (wc == 0xA0)
+         wc = 0x20;
+
+  if (priv->decoder)
+    return pango_fc_decoder_get_glyph (priv->decoder, font, wc);
+
+  return PANGO_FC_FONT_GET_CLASS (font)->get_glyph (font, wc);
+}
+
+
+/**
+ * pango_fc_font_get_unknown_glyph:
+ * @font: a #PangoFcFont
+ * @wc: the Unicode character for which a glyph is needed.
+ *
+ * Returns the index of a glyph suitable for drawing @wc as an
+ * unknown character.
+ *
+ * Use PANGO_GET_UNKNOWN_GLYPH() instead.
+ *
+ * Return value: a glyph index into @font.
+ *
+ * Since: 1.4
+ **/
+PangoGlyph
+pango_fc_font_get_unknown_glyph (PangoFcFont *font,
+                                gunichar     wc)
+{
+  if (font && PANGO_FC_FONT_GET_CLASS (font)->get_unknown_glyph)
+    return PANGO_FC_FONT_GET_CLASS (font)->get_unknown_glyph (font, wc);
+
+  return PANGO_GET_UNKNOWN_GLYPH (wc);
+}
+
+void
+_pango_fc_font_shutdown (PangoFcFont *font)
+{
+  g_return_if_fail (PANGO_IS_FC_FONT (font));
+
+  if (PANGO_FC_FONT_GET_CLASS (font)->shutdown)
+    PANGO_FC_FONT_GET_CLASS (font)->shutdown (font);
+}
+
+/**
+ * pango_fc_font_kern_glyphs
+ * @font: a #PangoFcFont
+ * @glyphs: a #PangoGlyphString
+ *
+ * Adjust each adjacent pair of glyphs in @glyphs according to
+ * kerning information in @font.
+ *
+ * Since: 1.4
+ **/
+void
+pango_fc_font_kern_glyphs (PangoFcFont      *font,
+                          PangoGlyphString *glyphs)
+{
+  FT_Face face;
+  FT_Error error;
+  FT_Vector kerning;
+  int i;
+  gboolean hinting = font->is_hinted;
+  gboolean scale = FALSE;
+  double xscale = 1;
+  PangoFcFontKey *key;
+
+  g_return_if_fail (PANGO_IS_FC_FONT (font));
+  g_return_if_fail (glyphs != NULL);
+
+  face = PANGO_FC_FONT_LOCK_FACE (font);
+  if (G_UNLIKELY (!face))
+    return;
+
+  if (!FT_HAS_KERNING (face))
+    {
+      PANGO_FC_FONT_UNLOCK_FACE (font);
+      return;
+    }
+
+  /* This is a kludge, and dupped in pango_ot_buffer_output().
+   * Should move the scale factor to PangoFcFont layer. */
+  key = _pango_fc_font_get_font_key (font);
+  if (key) {
+    const PangoMatrix *matrix = pango_fc_font_key_get_matrix (key);
+    PangoMatrix identity = PANGO_MATRIX_INIT;
+    if (G_UNLIKELY (matrix && 0 != memcmp (&identity, matrix, 2 * sizeof (double))))
+      {
+       scale = TRUE;
+       pango_matrix_get_font_scale_factors (matrix, &xscale, NULL);
+       if (xscale) xscale = 1 / xscale;
+      }
+  }
+
+  for (i = 1; i < glyphs->num_glyphs; ++i)
+    {
+      error = FT_Get_Kerning (face,
+                             glyphs->glyphs[i-1].glyph,
+                             glyphs->glyphs[i].glyph,
+                             ft_kerning_default,
+                             &kerning);
+
+      if (error == FT_Err_Ok) {
+       int adjustment = PANGO_UNITS_26_6 (kerning.x);
+
+       if (hinting)
+         adjustment = PANGO_UNITS_ROUND (adjustment);
+       if (G_UNLIKELY (scale))
+         adjustment *= xscale;
+
+       glyphs->glyphs[i-1].geometry.width += adjustment;
+      }
+    }
+
+  PANGO_FC_FONT_UNLOCK_FACE (font);
+}
+
+/**
+ * _pango_fc_font_get_decoder
+ * @font: a #PangoFcFont
+ *
+ * This will return any custom decoder set on this font.
+ *
+ * Return value: The custom decoder
+ *
+ * Since: 1.6
+ **/
+
+PangoFcDecoder *
+_pango_fc_font_get_decoder (PangoFcFont *font)
+{
+  PangoFcFontPrivate *priv = font->priv;
+
+  return priv->decoder;
+}
+
+/**
+ * _pango_fc_font_set_decoder
+ * @font: a #PangoFcFont
+ * @decoder: a #PangoFcDecoder to set for this font
+ *
+ * This sets a custom decoder for this font.  Any previous decoder
+ * will be released before this one is set.
+ *
+ * Since: 1.6
+ **/
+
+void
+_pango_fc_font_set_decoder (PangoFcFont    *font,
+                           PangoFcDecoder *decoder)
+{
+  PangoFcFontPrivate *priv = font->priv;
+
+  if (priv->decoder)
+    g_object_unref (priv->decoder);
+
+  priv->decoder = decoder;
+
+  if (priv->decoder)
+    g_object_ref (priv->decoder);
+}
+
+PangoFcFontKey *
+_pango_fc_font_get_font_key (PangoFcFont *fcfont)
+{
+  PangoFcFontPrivate *priv = fcfont->priv;
+
+  return priv->key;
+}
+
+void
+_pango_fc_font_set_font_key (PangoFcFont    *fcfont,
+                            PangoFcFontKey *key)
+{
+  PangoFcFontPrivate *priv = fcfont->priv;
+
+  priv->key = key;
+}
+
+static FT_Glyph_Metrics *
+get_per_char (FT_Face      face,
+             FT_Int32     load_flags,
+             PangoGlyph   glyph)
+{
+  FT_Error error;
+  FT_Glyph_Metrics *result;
+
+  error = FT_Load_Glyph (face, glyph, load_flags);
+  if (error == FT_Err_Ok)
+    result = &face->glyph->metrics;
+  else
+    result = NULL;
+
+  return result;
+}
+
+/**
+ * pango_fc_font_get_raw_extents:
+ * @fcfont: a #PangoFcFont
+ * @load_flags: flags to pass to FT_Load_Glyph()
+ * @glyph: the glyph index to load
+ * @ink_rect: location to store ink extents of the glyph, or %NULL
+ * @logical_rect: location to store logical extents of the glyph or %NULL
+ *
+ * Gets the extents of a single glyph from a font. The extents are in
+ * user space; that is, they are not transformed by any matrix in effect
+ * for the font.
+ *
+ * Long term, this functionality probably belongs in the default
+ * implementation of the get_glyph_extents() virtual function.
+ * The other possibility would be to to make it public in something
+ * like it's current form, and also expose glyph information
+ * caching functionality similar to pango_ft2_font_set_glyph_info().
+ *
+ * Since: 1.6
+ **/
+void
+pango_fc_font_get_raw_extents (PangoFcFont    *fcfont,
+                              FT_Int32        load_flags,
+                              PangoGlyph      glyph,
+                              PangoRectangle *ink_rect,
+                              PangoRectangle *logical_rect)
+{
+  FT_Glyph_Metrics *gm;
+  FT_Face face;
+
+  g_return_if_fail (PANGO_IS_FC_FONT (fcfont));
+
+  face = PANGO_FC_FONT_LOCK_FACE (fcfont);
+  if (G_UNLIKELY (!face))
+    {
+      /* Get generic unknown-glyph extents. */
+      pango_font_get_glyph_extents (NULL, glyph, ink_rect, logical_rect);
+      return;
+    }
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    gm = NULL;
+  else
+    gm = get_per_char (face, load_flags, glyph);
+
+  if (gm)
+    {
+      if (ink_rect)
+       {
+         ink_rect->x = PANGO_UNITS_26_6 (gm->horiBearingX);
+         ink_rect->width = PANGO_UNITS_26_6 (gm->width);
+         ink_rect->y = -PANGO_UNITS_26_6 (gm->horiBearingY);
+         ink_rect->height = PANGO_UNITS_26_6 (gm->height);
+       }
+
+      if (logical_rect)
+       {
+         logical_rect->x = 0;
+         logical_rect->width = PANGO_UNITS_26_6 (gm->horiAdvance);
+         if (fcfont->is_hinted ||
+             (face->face_flags & FT_FACE_FLAG_SCALABLE) == 0)
+           {
+             logical_rect->y = - PANGO_UNITS_26_6 (face->size->metrics.ascender);
+             logical_rect->height = PANGO_UNITS_26_6 (face->size->metrics.ascender - face->size->metrics.descender);
+           }
+         else
+           {
+             FT_Fixed ascender, descender;
+
+             ascender = FT_MulFix (face->ascender, face->size->metrics.y_scale);
+             descender = FT_MulFix (face->descender, face->size->metrics.y_scale);
+
+             logical_rect->y = - PANGO_UNITS_26_6 (ascender);
+             logical_rect->height = PANGO_UNITS_26_6 (ascender - descender);
+           }
+       }
+    }
+  else
+    {
+      if (ink_rect)
+       {
+         ink_rect->x = 0;
+         ink_rect->width = 0;
+         ink_rect->y = 0;
+         ink_rect->height = 0;
+       }
+
+      if (logical_rect)
+       {
+         logical_rect->x = 0;
+         logical_rect->width = 0;
+         logical_rect->y = 0;
+         logical_rect->height = 0;
+       }
+    }
+
+  PANGO_FC_FONT_UNLOCK_FACE (fcfont);
+}
+
diff --git a/pango/pangofc-font.h b/pango/pangofc-font.h
new file mode 100755 (executable)
index 0000000..ae16b16
--- /dev/null
@@ -0,0 +1,151 @@
+/* Pango
+ * pangofc-font.h: Base fontmap type for fontconfig-based backends
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_FC_FONT_H__
+#define __PANGO_FC_FONT_H__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include <fontconfig/fontconfig.h>
+#include <pango/pango-font.h>
+#include <pango/pango-fontmap.h>
+#include <pango/pango-glyph.h>
+
+G_BEGIN_DECLS
+
+#define PANGO_TYPE_FC_FONT              (pango_fc_font_get_type ())
+#define PANGO_FC_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_FONT, PangoFcFont))
+#define PANGO_IS_FC_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_FONT))
+
+typedef struct _PangoFcFont      PangoFcFont;
+typedef struct _PangoFcFontClass PangoFcFontClass;
+
+#if defined(PANGO_ENABLE_ENGINE) || defined(PANGO_ENABLE_BACKEND)
+
+/**
+ * PANGO_RENDER_TYPE_FC:
+ *
+ * A string constant used to identify shape engines that work
+ * with the fontconfig based backends. See the @engine_type field
+ * of #PangoEngineInfo.
+ **/
+#define PANGO_RENDER_TYPE_FC "PangoRenderFc"
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_FC_FONT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_FONT, PangoFcFontClass))
+#define PANGO_IS_FC_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_FONT))
+#define PANGO_FC_FONT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_FONT, PangoFcFontClass))
+
+/**
+ * PangoFcFont:
+ *
+ * #PangoFcFont is a base class for font implementations
+ * using the Fontconfig and FreeType libraries and is used in
+ * conjunction with #PangoFcFontMap. When deriving from this
+ * class, you need to implement all of its virtual functions
+ * other than shutdown() along with the get_glyph_extents()
+ * virtual function from #PangoFont.
+ **/
+struct _PangoFcFont
+{
+  PangoFont parent_instance;
+
+  FcPattern *font_pattern;         /* fully resolved pattern */
+  PangoFontMap *fontmap;           /* associated map */
+  gpointer priv;                   /* used internally */
+  PangoMatrix matrix;              /* used internally */
+  PangoFontDescription *description;
+
+  GSList *metrics_by_lang;
+
+  guint is_hinted : 1;
+  guint is_transformed : 1;
+};
+
+/**
+ * PangoFcFontClass:
+ * @lock_face: Returns the FT_Face of the font and increases
+ *  the reference count for the face by one.
+ * @unlock_face: Decreases the reference count for the
+ *  FT_Face of the font by one. When the count is zero,
+ *  the #PangoFcFont subclass is allowed to free the
+ *  FT_Face.
+ * @has_char: Return %TRUE if the the font contains a glyph
+ *   corresponding to the specified character.
+ * @get_glyph: Gets the glyph that corresponds to the given
+ *   Unicode character.
+ * @get_unknown_glyph: Gets the glyph that should be used to
+ *   display an unknown-glyph indication for the specified
+ *   Unicode character.
+ *   May be %NULL.
+ * @shutdown: Performs any font-specific shutdown code that
+ *   needs to be done when pango_fc_font_map_shutdown is called.
+ *   May be %NULL.
+ *
+ * Class structure for #PangoFcFont.
+ **/
+struct _PangoFcFontClass
+{
+  /*< private >*/
+  PangoFontClass parent_class;
+
+  /*< public >*/
+  FT_Face    (*lock_face)         (PangoFcFont      *font);
+  void       (*unlock_face)       (PangoFcFont      *font);
+  gboolean   (*has_char)          (PangoFcFont      *font,
+                                  gunichar          wc);
+  guint      (*get_glyph)         (PangoFcFont      *font,
+                                  gunichar          wc);
+  PangoGlyph (*get_unknown_glyph) (PangoFcFont      *font,
+                                  gunichar          wc);
+  void       (*shutdown)          (PangoFcFont      *font);
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+#endif /* PANGO_ENABLE_BACKEND */
+
+gboolean   pango_fc_font_has_char          (PangoFcFont      *font,
+                                           gunichar          wc);
+guint      pango_fc_font_get_glyph         (PangoFcFont      *font,
+                                           gunichar          wc);
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoGlyph pango_fc_font_get_unknown_glyph (PangoFcFont      *font,
+                                           gunichar          wc);
+#endif /* PANGO_DISABLE_DEPRECATED */
+void       pango_fc_font_kern_glyphs       (PangoFcFont      *font,
+                                           PangoGlyphString *glyphs);
+
+#endif /* PANGO_ENABLE_ENGINE || PANGO_ENABLE_BACKEND */
+
+GType      pango_fc_font_get_type (void) G_GNUC_CONST;
+
+FT_Face    pango_fc_font_lock_face         (PangoFcFont      *font);
+void       pango_fc_font_unlock_face       (PangoFcFont      *font);
+
+G_END_DECLS
+#endif /* __PANGO_FC_FONT_H__ */
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
new file mode 100755 (executable)
index 0000000..5211361
--- /dev/null
@@ -0,0 +1,2596 @@
+/* Pango
+ * pangofc-fontmap.c: Base fontmap type for fontconfig-based backends
+ *
+ * Copyright (C) 2000-2003 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define FONTSET_CACHE_SIZE 256
+
+#include "config.h"
+#include <math.h>
+
+#include "pango-context.h"
+#include "pangofc-fontmap.h"
+#include "pangofc-private.h"
+#include "pango-impl-utils.h"
+#include "modules.h"
+#include "pango-enum-types.h"
+
+
+/* Overview:
+ *
+ * All programming is a practice in caching data.  PangoFcFontMap is the
+ * major caching container of a Pango system on a Linux desktop.  Here is
+ * a short overview of how it all works.
+ *
+ * In short, Fontconfig search patterns are constructed and a fontset loaded
+ * using them.  Here is how we achieve that:
+ *
+ * - All FcPattern's referenced by any object in the fontmap are uniquified
+ *   and cached in the fontmap.  This both speeds lookups based on patterns
+ *   faster, and saves memory.  This is handled by fontmap->priv->pattern_hash.
+ *   The patterns are cached indefinitely.
+ *
+ * - The results of a FcFontSort() are used to populate fontsets.  However,
+ *   FcFontSort() relies on the search pattern only, which includes the font
+ *   size but not the full font matrix.  The fontset however depends on the
+ *   matrix.  As a result, multiple fontsets may need results of the
+ *   FcFontSort() on the same input pattern (think rotating text).  As such,
+ *   we cache FcFontSort() results in fontmap->priv->patterns_hash which
+ *   is a refcounted structure.  This level of abstraction also allows for
+ *   optimizations like calling FcFontMatch() instead of FcFontSort(), and
+ *   only calling FcFontSort() if any patterns other than the first match
+ *   are needed.  Another possible optimization would be to call FcFontSort()
+ *   without trimming, and do the trimming lazily as we go.  Only pattern sets
+ *   already referenced by a fontset are cached.
+ *
+ * - A number of most-recently-used fontsets are cached and reused when
+ *   needed.  This is achieved using fontmap->priv->fontset_hash and
+ *   fontmap->priv->fontset_cache.
+ *
+ * - All fonts created by any of our fontsets are also cached and reused.
+ *   This is what fontmap->priv->font_hash does.
+ *
+ * - Data that only depends on the font file and face index is cached and
+ *   reused by multiple fonts.  This includes coverage and cmap cache info.
+ *   This is done using fontmap->priv->font_face_data_hash.
+ *
+ * Upon a cache_clear() request, all caches are emptied.  All objects (fonts,
+ * fontsets, faces, families) having a reference from outside will still live
+ * and may reference the fontmap still, but will not be reused by the fontmap.
+ *
+ *
+ * Todo:
+ *
+ * - Make PangoCoverage a GObject and subclass it as PangoFcCoverage which
+ *   will directly use FcCharset. (#569622)
+ *
+ * - Lazy trimming of FcFontSort() results.  Requires fontconfig with
+ *   FcCharSetMerge().
+ */
+
+
+typedef struct _PangoFcFontFaceData PangoFcFontFaceData;
+typedef struct _PangoFcFace         PangoFcFace;
+typedef struct _PangoFcFamily       PangoFcFamily;
+typedef struct _PangoFcFindFuncInfo PangoFcFindFuncInfo;
+typedef struct _PangoFcPatterns     PangoFcPatterns;
+typedef struct _PangoFcFontset      PangoFcFontset;
+
+#define PANGO_FC_TYPE_FAMILY            (pango_fc_family_get_type ())
+#define PANGO_FC_FAMILY(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FAMILY, PangoFcFamily))
+#define PANGO_FC_IS_FAMILY(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FAMILY))
+
+#define PANGO_FC_TYPE_FACE              (pango_fc_face_get_type ())
+#define PANGO_FC_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FACE, PangoFcFace))
+#define PANGO_FC_IS_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FACE))
+
+#define PANGO_FC_TYPE_FONTSET           (pango_fc_fontset_get_type ())
+#define PANGO_FC_FONTSET(object)        (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FONTSET, PangoFcFontset))
+#define PANGO_FC_IS_FONTSET(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FONTSET))
+
+struct _PangoFcFontMapPrivate
+{
+  GHashTable *fontset_hash;    /* Maps PangoFcFontsetKey -> PangoFcFontset  */
+  GQueue *fontset_cache;       /* Recently used fontsets */
+
+  GHashTable *font_hash;       /* Maps PangoFcFontKey -> PangoFcFont */
+
+  GHashTable *patterns_hash;   /* Maps FcPattern -> PangoFcPatterns */
+
+  /* pattern_hash is used to make sure we only store one copy of
+   * each identical pattern. (Speeds up lookup).
+   */
+  GHashTable *pattern_hash;
+
+  GHashTable *font_face_data_hash; /* Maps font file name/id -> data */
+
+  /* List of all families availible */
+  PangoFcFamily **families;
+  int n_families;              /* -1 == uninitialized */
+
+  double dpi;
+
+  /* Decoders */
+  GSList *findfuncs;
+
+  guint closed : 1;
+};
+
+struct _PangoFcFontFaceData
+{
+  /* Key */
+  char *filename;
+  int id;            /* needed to handle TTC files with multiple faces */
+
+  /* Data */
+  FcPattern *pattern;  /* Referenced pattern that owns filename */
+  PangoCoverage *coverage;
+  PangoFcCmapCache *cmap_cache;
+};
+
+struct _PangoFcFace
+{
+  PangoFontFace parent_instance;
+
+  PangoFcFamily *family;
+  char *style;
+
+  guint fake : 1;
+};
+
+struct _PangoFcFamily
+{
+  PangoFontFamily parent_instance;
+
+  PangoFcFontMap *fontmap;
+  char *family_name;
+
+  PangoFcFace **faces;
+  int n_faces;         /* -1 == uninitialized */
+
+  int spacing;  /* FC_SPACING */
+};
+
+struct _PangoFcFindFuncInfo
+{
+  PangoFcDecoderFindFunc findfunc;
+  gpointer               user_data;
+  GDestroyNotify         dnotify;
+  gpointer               ddata;
+};
+
+static GType    pango_fc_family_get_type     (void);
+static GType    pango_fc_face_get_type       (void);
+static GType    pango_fc_fontset_get_type    (void);
+
+static void          pango_fc_font_map_finalize      (GObject                      *object);
+static PangoFont *   pango_fc_font_map_load_font     (PangoFontMap                 *fontmap,
+                                                      PangoContext                 *context,
+                                                      const PangoFontDescription   *description);
+static PangoFontset *pango_fc_font_map_load_fontset  (PangoFontMap                 *fontmap,
+                                                      PangoContext                 *context,
+                                                      const PangoFontDescription   *desc,
+                                                      PangoLanguage                *language);
+static void          pango_fc_font_map_list_families (PangoFontMap                 *fontmap,
+                                                      PangoFontFamily            ***families,
+                                                      int                          *n_families);
+
+static double pango_fc_font_map_get_resolution (PangoFcFontMap *fcfontmap,
+                                               PangoContext   *context);
+static PangoFont *pango_fc_font_map_new_font   (PangoFcFontMap    *fontmap,
+                                               PangoFcFontsetKey *fontset_key,
+                                               FcPattern         *match);
+
+static guint    pango_fc_font_face_data_hash  (PangoFcFontFaceData *key);
+static gboolean pango_fc_font_face_data_equal (PangoFcFontFaceData *key1,
+                                              PangoFcFontFaceData *key2);
+
+static void               pango_fc_fontset_key_init  (PangoFcFontsetKey          *key,
+                                                     PangoFcFontMap             *fcfontmap,
+                                                     PangoContext               *context,
+                                                     const PangoFontDescription *desc,
+                                                     PangoLanguage              *language);
+static PangoFcFontsetKey *pango_fc_fontset_key_copy  (const PangoFcFontsetKey *key);
+static void               pango_fc_fontset_key_free  (PangoFcFontsetKey       *key);
+static guint              pango_fc_fontset_key_hash  (const PangoFcFontsetKey *key);
+static gboolean           pango_fc_fontset_key_equal (const PangoFcFontsetKey *key_a,
+                                                     const PangoFcFontsetKey *key_b);
+
+static void               pango_fc_font_key_init     (PangoFcFontKey       *key,
+                                                     PangoFcFontMap       *fcfontmap,
+                                                     PangoFcFontsetKey    *fontset_key,
+                                                     FcPattern            *pattern);
+static PangoFcFontKey    *pango_fc_font_key_copy     (const PangoFcFontKey *key);
+static void               pango_fc_font_key_free     (PangoFcFontKey       *key);
+static guint              pango_fc_font_key_hash     (const PangoFcFontKey *key);
+static gboolean           pango_fc_font_key_equal    (const PangoFcFontKey *key_a,
+                                                     const PangoFcFontKey *key_b);
+
+static PangoFcPatterns *pango_fc_patterns_new   (FcPattern       *pat,
+                                                PangoFcFontMap  *fontmap);
+static PangoFcPatterns *pango_fc_patterns_ref   (PangoFcPatterns *pats);
+static void             pango_fc_patterns_unref (PangoFcPatterns *pats);
+static FcPattern       *pango_fc_patterns_get_pattern      (PangoFcPatterns *pats);
+static FcPattern       *pango_fc_patterns_get_font_pattern (PangoFcPatterns *pats, int i);
+
+static FcPattern *uniquify_pattern (PangoFcFontMap *fcfontmap,
+                                   FcPattern      *pattern);
+
+static gpointer
+get_gravity_class (void)
+{
+  static GEnumClass *class = NULL;
+
+  if (G_UNLIKELY (!class))
+    class = g_type_class_ref (PANGO_TYPE_GRAVITY);
+
+  return class;
+}
+
+static guint
+pango_fc_font_face_data_hash (PangoFcFontFaceData *key)
+{
+  return g_str_hash (key->filename) ^ key->id;
+}
+
+static gboolean
+pango_fc_font_face_data_equal (PangoFcFontFaceData *key1,
+                              PangoFcFontFaceData *key2)
+{
+  return key1->id == key2->id &&
+        (key1 == key2 || 0 == strcmp (key1->filename, key2->filename));
+}
+
+static void
+pango_fc_font_face_data_free (PangoFcFontFaceData *data)
+{
+  FcPatternDestroy (data->pattern);
+
+  if (data->coverage)
+    pango_coverage_unref (data->coverage);
+
+  if (data->cmap_cache)
+    _pango_fc_cmap_cache_unref (data->cmap_cache);
+
+  g_slice_free (PangoFcFontFaceData, data);
+}
+
+/* Fowler / Noll / Vo (FNV) Hash (http://www.isthe.com/chongo/tech/comp/fnv/)
+ *
+ * Not necessarily better than a lot of other hashes, but should be OK, and
+ * well tested with binary data.
+ */
+
+#define FNV_32_PRIME ((guint32)0x01000193)
+#define FNV1_32_INIT ((guint32)0x811c9dc5)
+
+static guint32
+hash_bytes_fnv (unsigned char *buffer,
+               int            len,
+               guint32        hval)
+{
+  while (len--)
+    {
+      hval *= FNV_32_PRIME;
+      hval ^= *buffer++;
+    }
+
+  return hval;
+}
+
+static void
+get_context_matrix (PangoContext *context,
+                   PangoMatrix *matrix)
+{
+  const PangoMatrix *set_matrix;
+  static const PangoMatrix identity = PANGO_MATRIX_INIT;
+
+  set_matrix = context ? pango_context_get_matrix (context) : NULL;
+  *matrix = set_matrix ? *set_matrix : identity;
+  matrix->x0 = matrix->y0 = 0.;
+}
+
+static int
+get_scaled_size (PangoFcFontMap             *fcfontmap,
+                PangoContext               *context,
+                const PangoFontDescription *desc)
+{
+  double size = pango_font_description_get_size (desc);
+
+  if (!pango_font_description_get_size_is_absolute (desc))
+    {
+      double dpi = pango_fc_font_map_get_resolution (fcfontmap, context);
+
+      size = size * dpi / 72.;
+    }
+
+  return .5 + pango_matrix_get_font_scale_factor (pango_context_get_matrix (context)) * size;
+}
+
+
+
+struct _PangoFcFontsetKey {
+  PangoFcFontMap *fontmap;
+  PangoLanguage *language;
+  PangoFontDescription *desc;
+  PangoMatrix matrix;
+  int pixelsize;
+  double resolution;
+  gpointer context_key;
+};
+
+struct _PangoFcFontKey {
+  PangoFcFontMap *fontmap;
+  FcPattern *pattern;
+  PangoMatrix matrix;
+  gpointer context_key;
+};
+
+static void
+pango_fc_fontset_key_init (PangoFcFontsetKey          *key,
+                          PangoFcFontMap             *fcfontmap,
+                          PangoContext               *context,
+                          const PangoFontDescription *desc,
+                          PangoLanguage              *language)
+{
+  if (!language && context)
+    language = pango_context_get_language (context);
+
+  key->fontmap = fcfontmap;
+  get_context_matrix (context, &key->matrix);
+  key->pixelsize = get_scaled_size (fcfontmap, context, desc);
+  key->resolution = pango_fc_font_map_get_resolution (fcfontmap, context);
+  key->language = language;
+  key->desc = pango_font_description_copy_static (desc);
+  pango_font_description_unset_fields (key->desc, PANGO_FONT_MASK_SIZE);
+
+  if (context && PANGO_FC_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get)
+    key->context_key = (gpointer)PANGO_FC_FONT_MAP_GET_CLASS (fcfontmap)->context_key_get (fcfontmap, context);
+  else
+    key->context_key = NULL;
+}
+
+static gboolean
+pango_fc_fontset_key_equal (const PangoFcFontsetKey *key_a,
+                           const PangoFcFontsetKey *key_b)
+{
+  if (key_a->language == key_b->language &&
+      key_a->pixelsize == key_b->pixelsize &&
+      key_a->resolution == key_b->resolution &&
+      pango_font_description_equal (key_a->desc, key_b->desc) &&
+      0 == memcmp (&key_a->matrix, &key_b->matrix, 4 * sizeof (double)))
+    {
+      if (key_a->context_key)
+       return PANGO_FC_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap,
+                                                                               key_a->context_key,
+                                                                               key_b->context_key);
+      else
+        return key_a->context_key == key_b->context_key;
+    }
+  else
+    return FALSE;
+}
+
+static guint
+pango_fc_fontset_key_hash (const PangoFcFontsetKey *key)
+{
+    guint32 hash = FNV1_32_INIT;
+
+    /* We do a bytewise hash on the doubles */
+    hash = hash_bytes_fnv ((unsigned char *)(&key->matrix), sizeof (double) * 4, hash);
+    hash = hash_bytes_fnv ((unsigned char *)(&key->resolution), sizeof (double), hash);
+
+    hash ^= key->pixelsize;
+
+    if (key->context_key)
+      hash ^= PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_hash (key->fontmap,
+                                                                           key->context_key);
+
+    return (hash ^
+           GPOINTER_TO_UINT (key->language) ^
+           pango_font_description_hash (key->desc));
+}
+
+static void
+pango_fc_fontset_key_free (PangoFcFontsetKey *key)
+{
+  pango_font_description_free (key->desc);
+
+  if (key->context_key)
+    PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_free (key->fontmap,
+                                                                 key->context_key);
+
+  g_slice_free (PangoFcFontsetKey, key);
+}
+
+static PangoFcFontsetKey *
+pango_fc_fontset_key_copy (const PangoFcFontsetKey *old)
+{
+  PangoFcFontsetKey *key = g_slice_new (PangoFcFontsetKey);
+
+  key->fontmap = old->fontmap;
+  key->language = old->language;
+  key->desc = pango_font_description_copy (old->desc);
+  key->matrix = old->matrix;
+  key->pixelsize = old->pixelsize;
+  key->resolution = old->resolution;
+  if (old->context_key)
+    key->context_key = PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_copy (key->fontmap,
+                                                                                    old->context_key);
+  else
+    key->context_key = NULL;
+
+  return key;
+}
+
+/**
+ * pango_fc_fontset_key_get_language:
+ * @key: the fontset key
+ *
+ * Gets the language member of @key.
+ *
+ * Returns: the language
+ *
+ * Since: 1.24
+ **/
+PangoLanguage *
+pango_fc_fontset_key_get_language (const PangoFcFontsetKey *key)
+{
+  return key->language;
+}
+
+/**
+ * pango_fc_fontset_key_get_description:
+ * @key: the fontset key
+ *
+ * Gets the font description of @key.
+ *
+ * Returns: the font description, which is owned by @key and should not be modified.
+ *
+ * Since: 1.24
+ **/
+const PangoFontDescription *
+pango_fc_fontset_key_get_description (const PangoFcFontsetKey *key)
+{
+  return key->desc;
+}
+
+/**
+ * pango_fc_fontset_key_get_matrix:
+ * @key: the fontset key
+ *
+ * Gets the matrix member of @key.
+ *
+ * Returns: the matrix, which is owned by @key and should not be modified.
+ *
+ * Since: 1.24
+ **/
+const PangoMatrix *
+pango_fc_fontset_key_get_matrix      (const PangoFcFontsetKey *key)
+{
+  return &key->matrix;
+}
+
+/**
+ * pango_fc_fontset_key_get_absolute_size:
+ * @key: the fontset key
+ *
+ * Gets the absolute font size of @key in Pango units.  This is adjusted
+ * for both resolution and transformation matrix.
+ *
+ * Returns: the pixel size of @key.
+ *
+ * Since: 1.24
+ **/
+double
+pango_fc_fontset_key_get_absolute_size   (const PangoFcFontsetKey *key)
+{
+  return key->pixelsize;
+}
+
+/**
+ * pango_fc_fontset_key_get_resolution:
+ * @key: the fontset key
+ *
+ * Gets the resolution of @key
+ *
+ * Returns: the resolution of @key
+ *
+ * Since: 1.24
+ **/
+double
+pango_fc_fontset_key_get_resolution  (const PangoFcFontsetKey *key)
+{
+  return key->resolution;
+}
+
+/**
+ * pango_fc_fontset_key_get_context_key:
+ * @key: the font key
+ *
+ * Gets the context key member of @key.
+ *
+ * Returns: the context key, which is owned by @key and should not be modified.
+ *
+ * Since: 1.24
+ **/
+gpointer
+pango_fc_fontset_key_get_context_key (const PangoFcFontsetKey *key)
+{
+  return key->context_key;
+}
+
+/*
+ * PangoFcFontKey
+ */
+
+static gboolean
+pango_fc_font_key_equal (const PangoFcFontKey *key_a,
+                        const PangoFcFontKey *key_b)
+{
+  if (key_a->pattern == key_b->pattern &&
+      0 == memcmp (&key_a->matrix, &key_b->matrix, 4 * sizeof (double)))
+    {
+      if (key_a->context_key && key_b->context_key)
+       return PANGO_FC_FONT_MAP_GET_CLASS (key_a->fontmap)->context_key_equal (key_a->fontmap,
+                                                                               key_a->context_key,
+                                                                               key_b->context_key);
+      else
+        return key_a->context_key == key_b->context_key;
+    }
+  else
+    return FALSE;
+}
+
+static guint
+pango_fc_font_key_hash (const PangoFcFontKey *key)
+{
+    guint32 hash = FNV1_32_INIT;
+
+    /* We do a bytewise hash on the doubles */
+    hash = hash_bytes_fnv ((unsigned char *)(&key->matrix), sizeof (double) * 4, hash);
+
+    if (key->context_key)
+      hash ^= PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_hash (key->fontmap,
+                                                                           key->context_key);
+
+    return (hash ^ GPOINTER_TO_UINT (key->pattern));
+}
+
+static void
+pango_fc_font_key_free (PangoFcFontKey *key)
+{
+  if (key->pattern)
+    FcPatternDestroy (key->pattern);
+
+  if (key->context_key)
+    PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_free (key->fontmap,
+                                                                 key->context_key);
+
+  g_slice_free (PangoFcFontKey, key);
+}
+
+static PangoFcFontKey *
+pango_fc_font_key_copy (const PangoFcFontKey *old)
+{
+  PangoFcFontKey *key = g_slice_new (PangoFcFontKey);
+
+  key->fontmap = old->fontmap;
+  FcPatternReference (old->pattern);
+  key->pattern = old->pattern;
+  key->matrix = old->matrix;
+  if (old->context_key)
+    key->context_key = PANGO_FC_FONT_MAP_GET_CLASS (key->fontmap)->context_key_copy (key->fontmap,
+                                                                                    old->context_key);
+  else
+    key->context_key = NULL;
+
+  return key;
+}
+
+static void
+pango_fc_font_key_init (PangoFcFontKey    *key,
+                       PangoFcFontMap    *fcfontmap,
+                       PangoFcFontsetKey *fontset_key,
+                       FcPattern         *pattern)
+{
+  key->fontmap = fcfontmap;
+  key->pattern = pattern;
+  key->matrix = *pango_fc_fontset_key_get_matrix (fontset_key);
+  key->context_key = pango_fc_fontset_key_get_context_key (fontset_key);
+}
+
+/* Public API */
+
+/**
+ * pango_fc_font_key_get_pattern:
+ * @key: the font key
+ *
+ * Gets the fontconfig pattern member of @key.
+ *
+ * Returns: the pattern, which is owned by @key and should not be modified.
+ *
+ * Since: 1.24
+ **/
+const FcPattern *
+pango_fc_font_key_get_pattern (const PangoFcFontKey *key)
+{
+  return key->pattern;
+}
+
+/**
+ * pango_fc_font_key_get_matrix:
+ * @key: the font key
+ *
+ * Gets the matrix member of @key.
+ *
+ * Returns: the matrix, which is owned by @key and should not be modified.
+ *
+ * Since: 1.24
+ **/
+const PangoMatrix *
+pango_fc_font_key_get_matrix (const PangoFcFontKey *key)
+{
+  return &key->matrix;
+}
+
+/**
+ * pango_fc_font_key_get_context_key:
+ * @key: the font key
+ *
+ * Gets the context key member of @key.
+ *
+ * Returns: the context key, which is owned by @key and should not be modified.
+ *
+ * Since: 1.24
+ **/
+gpointer
+pango_fc_font_key_get_context_key (const PangoFcFontKey *key)
+{
+  return key->context_key;
+}
+
+
+/*
+ * PangoFcPatterns
+ */
+
+struct _PangoFcPatterns {
+  guint ref_count;
+
+  PangoFcFontMap *fontmap;
+
+  FcPattern *pattern;
+  FcPattern *match;
+  FcFontSet *fontset;
+};
+
+static PangoFcPatterns *
+pango_fc_patterns_new (FcPattern *pat, PangoFcFontMap *fontmap)
+{
+  PangoFcPatterns *pats;
+
+  pat = uniquify_pattern (fontmap, pat);
+  pats = g_hash_table_lookup (fontmap->priv->patterns_hash, pat);
+  if (pats)
+    return pango_fc_patterns_ref (pats);
+
+  pats = g_slice_new0 (PangoFcPatterns);
+
+  pats->fontmap = fontmap;
+
+  pats->ref_count = 1;
+  FcPatternReference (pat);
+  pats->pattern = pat;
+
+  g_hash_table_insert (fontmap->priv->patterns_hash,
+                      pats->pattern, pats);
+
+  return pats;
+}
+
+static PangoFcPatterns *
+pango_fc_patterns_ref (PangoFcPatterns *pats)
+{
+  g_return_val_if_fail (pats->ref_count > 0, NULL);
+
+  pats->ref_count++;
+
+  return pats;
+}
+
+static void
+pango_fc_patterns_unref (PangoFcPatterns *pats)
+{
+  g_return_if_fail (pats->ref_count > 0);
+
+  pats->ref_count--;
+
+  if (pats->ref_count)
+    return;
+
+  /* Only remove from fontmap hash if we are in it.  This is not necessarily
+   * the case after a cache_clear() call. */
+  if (pats->fontmap->priv->patterns_hash &&
+      pats == g_hash_table_lookup (pats->fontmap->priv->patterns_hash, pats->pattern))
+    g_hash_table_remove (pats->fontmap->priv->patterns_hash,
+                        pats->pattern);
+
+  if (pats->pattern)
+    FcPatternDestroy (pats->pattern);
+
+  if (pats->match)
+    FcPatternDestroy (pats->match);
+
+  if (pats->fontset)
+    FcFontSetDestroy (pats->fontset);
+
+  g_slice_free (PangoFcPatterns, pats);
+}
+
+static FcPattern *
+pango_fc_patterns_get_pattern (PangoFcPatterns *pats)
+{
+  return pats->pattern;
+}
+
+static FcPattern *
+pango_fc_patterns_get_font_pattern (PangoFcPatterns *pats, int i)
+{
+  if (i == 0)
+    {
+      FcResult result;
+      if (!pats->match && !pats->fontset)
+        {
+         pats->match = FcFontMatch (NULL, pats->pattern, &result);
+       }
+
+      if (pats->match)
+       return pats->match;
+    }
+  else
+    {
+      if (!pats->fontset)
+        {
+         FcResult result;
+         pats->fontset = FcFontSort (NULL, pats->pattern, FcTrue, NULL, &result);
+         if (pats->match)
+           {
+             FcPatternDestroy (pats->match);
+             pats->match = NULL;
+           }
+       }
+    }
+
+  if (pats->fontset && i < pats->fontset->nfont)
+    return pats->fontset->fonts[i];
+  else
+    return NULL;
+}
+
+
+/*
+ * PangoFcFontset
+ */
+
+static void              pango_fc_fontset_finalize     (GObject                 *object);
+static void              pango_fc_fontset_init         (PangoFcFontset      *fontset);
+static PangoLanguage *   pango_fc_fontset_get_language (PangoFontset            *fontset);
+static  PangoFont *      pango_fc_fontset_get_font     (PangoFontset            *fontset,
+                                                       guint                    wc);
+static void              pango_fc_fontset_foreach      (PangoFontset            *fontset,
+                                                       PangoFontsetForeachFunc  func,
+                                                       gpointer                 data);
+
+struct _PangoFcFontset
+{
+  PangoFontset parent_instance;
+
+  PangoFcFontsetKey *key;
+
+  PangoFcPatterns *patterns;
+  int patterns_i;
+
+  GPtrArray *fonts;
+  GPtrArray *coverages;
+
+  GList *cache_link;
+};
+
+typedef PangoFontsetClass PangoFcFontsetClass;
+
+static PangoFontsetClass *fc_fontset_parent_class;     /* Parent class structure for PangoFcFontset */
+
+static PangoFcFontset *
+pango_fc_fontset_new (PangoFcFontsetKey *key,
+                     PangoFcPatterns   *patterns)
+{
+  PangoFcFontset *fontset;
+
+  fontset = g_object_new (PANGO_FC_TYPE_FONTSET, NULL);
+
+  fontset->key = pango_fc_fontset_key_copy (key);
+  fontset->patterns = pango_fc_patterns_ref (patterns);
+
+  return fontset;
+}
+
+static PangoFcFontsetKey *
+pango_fc_fontset_get_key (PangoFcFontset *fontset)
+{
+  return fontset->key;
+}
+
+static PangoFont *
+pango_fc_fontset_load_next_font (PangoFcFontset *fontset)
+{
+  FcPattern *pattern, *font_pattern;
+  PangoFont *font;
+
+  pattern = pango_fc_patterns_get_pattern (fontset->patterns),
+  font_pattern = pango_fc_patterns_get_font_pattern (fontset->patterns,
+                                                    fontset->patterns_i++);
+  if (G_UNLIKELY (!font_pattern))
+    return NULL;
+
+  font_pattern = FcFontRenderPrepare (NULL, pattern, font_pattern);
+
+  if (G_UNLIKELY (!font_pattern))
+    return NULL;
+
+#ifdef FC_PATTERN
+    /* The FC_PATTERN element, which points back to our the original
+     * pattern defeats our hash tables.
+     */
+    FcPatternDel (font_pattern, FC_PATTERN);
+#endif /* FC_PATTERN */
+
+  font = pango_fc_font_map_new_font (fontset->key->fontmap,
+                                    fontset->key,
+                                    font_pattern);
+
+  FcPatternDestroy (font_pattern);
+
+  return font;
+}
+
+static PangoFont *
+pango_fc_fontset_get_font_at (PangoFcFontset *fontset,
+                             unsigned int i)
+{
+  while (i >= fontset->fonts->len)
+    {
+      PangoFont *font = pango_fc_fontset_load_next_font (fontset);
+      g_ptr_array_add (fontset->fonts, font);
+      g_ptr_array_add (fontset->coverages, NULL);
+      if (!font)
+        return NULL;
+    }
+
+  return g_ptr_array_index (fontset->fonts, i);
+}
+
+static void
+pango_fc_fontset_class_init (PangoFcFontsetClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontsetClass *fontset_class = PANGO_FONTSET_CLASS (class);
+
+  fc_fontset_parent_class = g_type_class_peek_parent (class);
+
+  object_class->finalize = pango_fc_fontset_finalize;
+  fontset_class->get_font = pango_fc_fontset_get_font;
+  fontset_class->get_language = pango_fc_fontset_get_language;
+  fontset_class->foreach = pango_fc_fontset_foreach;
+}
+
+static void
+pango_fc_fontset_init (PangoFcFontset *fontset)
+{
+  fontset->fonts = g_ptr_array_new ();
+  fontset->coverages = g_ptr_array_new ();
+}
+
+static void
+pango_fc_fontset_finalize (GObject *object)
+{
+  PangoFcFontset *fontset = PANGO_FC_FONTSET (object);
+  unsigned int i;
+
+  for (i = 0; i < fontset->fonts->len; i++)
+  {
+    PangoFont *font = g_ptr_array_index(fontset->fonts, i);
+    if (font)
+      g_object_unref (font);
+  }
+  g_ptr_array_free (fontset->fonts, TRUE);
+
+  for (i = 0; i < fontset->coverages->len; i++)
+    {
+      PangoCoverage *coverage = g_ptr_array_index (fontset->coverages, i);
+      if (coverage)
+       pango_coverage_unref (coverage);
+    }
+  g_ptr_array_free (fontset->coverages, TRUE);
+
+  if (fontset->key)
+    pango_fc_fontset_key_free (fontset->key);
+
+  if (fontset->patterns)
+    pango_fc_patterns_unref (fontset->patterns);
+
+  G_OBJECT_CLASS (fc_fontset_parent_class)->finalize (object);
+}
+
+static PangoLanguage *
+pango_fc_fontset_get_language (PangoFontset  *fontset)
+{
+  PangoFcFontset *fcfontset = PANGO_FC_FONTSET (fontset);
+
+  return pango_fc_fontset_key_get_language (pango_fc_fontset_get_key (fcfontset));
+}
+
+static PangoFont *
+pango_fc_fontset_get_font (PangoFontset  *fontset,
+                          guint          wc)
+{
+  PangoFcFontset *fcfontset = PANGO_FC_FONTSET (fontset);
+  PangoCoverageLevel best_level = PANGO_COVERAGE_NONE;
+  PangoCoverageLevel level;
+  PangoFont *font;
+  PangoCoverage *coverage;
+  int result = -1;
+  unsigned int i;
+
+  for (i = 0;
+       (font = pango_fc_fontset_get_font_at (fcfontset, i));
+       i++)
+    {
+      coverage = g_ptr_array_index (fcfontset->coverages, i);
+
+      if (coverage == NULL)
+       {
+         font = g_ptr_array_index (fcfontset->fonts, i);
+
+         coverage = pango_font_get_coverage (font, fcfontset->key->language);
+         g_ptr_array_index (fcfontset->coverages, i) = coverage;
+       }
+
+      level = pango_coverage_get (coverage, wc);
+
+      if (result == -1 || level > best_level)
+       {
+         result = i;
+         best_level = level;
+         if (level == PANGO_COVERAGE_EXACT)
+           break;
+       }
+    }
+
+  if (G_UNLIKELY (result == -1))
+    return NULL;
+
+  font = g_ptr_array_index(fcfontset->fonts, result);
+  return g_object_ref (font);
+}
+
+static void
+pango_fc_fontset_foreach (PangoFontset           *fontset,
+                         PangoFontsetForeachFunc func,
+                         gpointer                data)
+{
+  PangoFcFontset *fcfontset = PANGO_FC_FONTSET (fontset);
+  PangoFont *font;
+  unsigned int i;
+
+  for (i = 0;
+       (font = pango_fc_fontset_get_font_at (fcfontset, i));
+       i++)
+    {
+      if ((*func) (fontset, font, data))
+       return;
+    }
+}
+
+static PANGO_DEFINE_TYPE (PangoFcFontset, pango_fc_fontset,
+                         pango_fc_fontset_class_init, pango_fc_fontset_init,
+                         PANGO_TYPE_FONTSET)
+
+/*
+ * PangoFcFontMap
+ */
+
+G_DEFINE_ABSTRACT_TYPE (PangoFcFontMap, pango_fc_font_map, PANGO_TYPE_FONT_MAP)
+
+static void
+pango_fc_font_map_init (PangoFcFontMap *fcfontmap)
+{
+  static gboolean registered_modules = FALSE;
+  PangoFcFontMapPrivate *priv;
+
+  priv = fcfontmap->priv = G_TYPE_INSTANCE_GET_PRIVATE (fcfontmap,
+                                                       PANGO_TYPE_FC_FONT_MAP,
+                                                       PangoFcFontMapPrivate);
+
+  if (!registered_modules)
+    {
+      int i;
+
+      registered_modules = TRUE;
+
+      for (i = 0; _pango_included_fc_modules[i].list; i++)
+       pango_module_register (&_pango_included_fc_modules[i]);
+    }
+
+  priv->n_families = -1;
+
+  priv->font_hash = g_hash_table_new ((GHashFunc)pango_fc_font_key_hash,
+                                     (GEqualFunc)pango_fc_font_key_equal);
+
+  priv->fontset_hash = g_hash_table_new_full ((GHashFunc)pango_fc_fontset_key_hash,
+                                             (GEqualFunc)pango_fc_fontset_key_equal,
+                                             NULL,
+                                             (GDestroyNotify)g_object_unref);
+  priv->fontset_cache = g_queue_new ();
+
+  priv->patterns_hash = g_hash_table_new (NULL, NULL);
+
+  priv->pattern_hash = g_hash_table_new_full ((GHashFunc) FcPatternHash,
+                                             (GEqualFunc) FcPatternEqual,
+                                             (GDestroyNotify) FcPatternDestroy,
+                                             NULL);
+
+  priv->font_face_data_hash = g_hash_table_new_full ((GHashFunc)pango_fc_font_face_data_hash,
+                                                    (GEqualFunc)pango_fc_font_face_data_equal,
+                                                    (GDestroyNotify)pango_fc_font_face_data_free,
+                                                    NULL);
+  priv->dpi = -1;
+}
+
+static void
+pango_fc_font_map_fini (PangoFcFontMap *fcfontmap)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  int i;
+
+  g_queue_free (priv->fontset_cache);
+  priv->fontset_cache = NULL;
+
+  g_hash_table_destroy (priv->fontset_hash);
+  priv->fontset_hash = NULL;
+
+  g_hash_table_destroy (priv->patterns_hash);
+  priv->patterns_hash = NULL;
+
+  g_hash_table_destroy (priv->font_hash);
+  priv->font_hash = NULL;
+
+  g_hash_table_destroy (priv->font_face_data_hash);
+  priv->font_face_data_hash = NULL;
+
+  g_hash_table_destroy (priv->pattern_hash);
+  priv->pattern_hash = NULL;
+
+  for (i = 0; i < priv->n_families; i++)
+    g_object_unref (priv->families[i]);
+  g_free (priv->families);
+  priv->n_families = -1;
+  priv->families = NULL;
+}
+
+static void
+pango_fc_font_map_class_init (PangoFcFontMapClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontMapClass *fontmap_class = PANGO_FONT_MAP_CLASS (class);
+
+  object_class->finalize = pango_fc_font_map_finalize;
+  fontmap_class->load_font = pango_fc_font_map_load_font;
+  fontmap_class->load_fontset = pango_fc_font_map_load_fontset;
+  fontmap_class->list_families = pango_fc_font_map_list_families;
+  fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_FC;
+
+  g_type_class_add_private (object_class, sizeof (PangoFcFontMapPrivate));
+}
+
+
+/**
+ * pango_fc_font_map_add_decoder_find_func:
+ * @fcfontmap: The #PangoFcFontMap to add this method to.
+ * @findfunc: The #PangoFcDecoderFindFunc callback function
+ * @user_data: User data.
+ * @dnotify: A #GDestroyNotify callback that will be called when the
+ *  fontmap is finalized and the decoder is released.
+ *
+ * This function saves a callback method in the #PangoFcFontMap that
+ * will be called whenever new fonts are created.  If the
+ * function returns a #PangoFcDecoder, that decoder will be used to
+ * determine both coverage via a #FcCharSet and a one-to-one mapping of
+ * characters to glyphs.  This will allow applications to have
+ * application-specific encodings for various fonts.
+ *
+ * Since: 1.6.
+ **/
+void
+pango_fc_font_map_add_decoder_find_func (PangoFcFontMap        *fcfontmap,
+                                        PangoFcDecoderFindFunc findfunc,
+                                        gpointer               user_data,
+                                        GDestroyNotify         dnotify)
+{
+  PangoFcFontMapPrivate *priv;
+  PangoFcFindFuncInfo *info;
+
+  g_return_if_fail (PANGO_IS_FC_FONT_MAP (fcfontmap));
+
+  priv = fcfontmap->priv;
+
+  info = g_slice_new (PangoFcFindFuncInfo);
+
+  info->findfunc = findfunc;
+  info->user_data = user_data;
+  info->dnotify = dnotify;
+
+  priv->findfuncs = g_slist_append (priv->findfuncs, info);
+}
+
+/**
+ * pango_fc_font_map_find_decoder:
+ * @fcfontmap: The #PangoFcFontMap to use.
+ * @pattern: The #FcPattern to find the decoder for.
+ *
+ * Finds the decoder to use for @pattern.  Decoders can be added to
+ * a font map using pango_fc_font_map_add_decoder_find_func().
+ *
+ * Returns: a newly created #PangoFcDecoder object or %NULL if
+ *          no decoder is set for @pattern.
+ *
+ * Since: 1.26.
+ **/
+PangoFcDecoder *
+pango_fc_font_map_find_decoder  (PangoFcFontMap *fcfontmap,
+                                FcPattern      *pattern)
+{
+  GSList *l;
+
+  g_return_val_if_fail (PANGO_IS_FC_FONT_MAP (fcfontmap), NULL);
+  g_return_val_if_fail (pattern != NULL, NULL);
+
+  for (l = fcfontmap->priv->findfuncs; l && l->data; l = l->next)
+    {
+      PangoFcFindFuncInfo *info = l->data;
+      PangoFcDecoder *decoder;
+
+      decoder = info->findfunc (pattern, info->user_data);
+      if (decoder)
+       return decoder;
+    }
+
+  return NULL;
+}
+
+static void
+pango_fc_font_map_finalize (GObject *object)
+{
+  PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (object);
+
+  pango_fc_font_map_shutdown (fcfontmap);
+
+  G_OBJECT_CLASS (pango_fc_font_map_parent_class)->finalize (object);
+}
+
+/* Add a mapping from key to fcfont */
+static void
+pango_fc_font_map_add (PangoFcFontMap *fcfontmap,
+                      PangoFcFontKey *key,
+                      PangoFcFont    *fcfont)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  PangoFcFontKey *key_copy;
+
+  key_copy = pango_fc_font_key_copy (key);
+  _pango_fc_font_set_font_key (fcfont, key_copy);
+  g_hash_table_insert (priv->font_hash, key_copy, fcfont);
+}
+
+/* Remove mapping from fcfont->key to fcfont */
+/* Closely related to shutdown_font() */
+void
+_pango_fc_font_map_remove (PangoFcFontMap *fcfontmap,
+                          PangoFcFont    *fcfont)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  PangoFcFontKey *key;
+
+  key = _pango_fc_font_get_font_key (fcfont);
+  if (key)
+    {
+      /* Only remove from fontmap hash if we are in it.  This is not necessarily
+       * the case after a cache_clear() call. */
+      if (priv->font_hash &&
+         fcfont == g_hash_table_lookup (priv->font_hash, key))
+        {
+         g_hash_table_remove (priv->font_hash, key);
+       }
+      _pango_fc_font_set_font_key (fcfont, NULL);
+      pango_fc_font_key_free (key);
+    }
+}
+
+static PangoFcFamily *
+create_family (PangoFcFontMap *fcfontmap,
+              const char     *family_name,
+              int             spacing)
+{
+  PangoFcFamily *family = g_object_new (PANGO_FC_TYPE_FAMILY, NULL);
+  family->fontmap = fcfontmap;
+  family->family_name = g_strdup (family_name);
+  family->spacing = spacing;
+
+  return family;
+}
+
+static gboolean
+is_alias_family (const char *family_name)
+{
+  switch (family_name[0])
+    {
+    case 'm':
+    case 'M':
+      return (g_ascii_strcasecmp (family_name, "monospace") == 0);
+    case 's':
+    case 'S':
+      return (g_ascii_strcasecmp (family_name, "sans") == 0 ||
+             g_ascii_strcasecmp (family_name, "serif") == 0);
+    }
+
+  return FALSE;
+}
+
+static void
+pango_fc_font_map_list_families (PangoFontMap      *fontmap,
+                                PangoFontFamily ***families,
+                                int               *n_families)
+{
+  PangoFcFontMap *fcfontmap = PANGO_FC_FONT_MAP (fontmap);
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  FcFontSet *fontset;
+  int i;
+  int count;
+
+  if (priv->closed)
+    {
+      if (families)
+       *families = NULL;
+      if (n_families)
+       *n_families = 0;
+
+      return;
+    }
+
+  if (priv->n_families < 0)
+    {
+      FcObjectSet *os = FcObjectSetBuild (FC_FAMILY, FC_SPACING, NULL);
+      FcPattern *pat = FcPatternCreate ();
+      /* use hash table to avoid duplicate listings if different faces in
+       * the same family have different spacing values */
+      GHashTable *temp_family_hash;
+
+      fontset = FcFontList (NULL, pat, os);
+
+      FcPatternDestroy (pat);
+      FcObjectSetDestroy (os);
+
+      priv->families = g_new (PangoFcFamily *, fontset->nfont + 3); /* 3 standard aliases */
+      temp_family_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+      count = 0;
+      for (i = 0; i < fontset->nfont; i++)
+       {
+         char *s;
+         FcResult res;
+         int spacing;
+
+         res = FcPatternGetString (fontset->fonts[i], FC_FAMILY, 0, (FcChar8 **)(void*)&s);
+         g_assert (res == FcResultMatch);
+
+         res = FcPatternGetInteger (fontset->fonts[i], FC_SPACING, 0, &spacing);
+         g_assert (res == FcResultMatch || res == FcResultNoMatch);
+         if (res == FcResultNoMatch)
+           spacing = FC_PROPORTIONAL;
+
+         if (!is_alias_family (s) && !g_hash_table_lookup (temp_family_hash, s))
+           {
+             PangoFcFamily *temp_family = create_family (fcfontmap, s, spacing);
+             g_hash_table_insert (temp_family_hash, g_strdup (s), s);
+             priv->families[count++] = temp_family;
+           }
+       }
+
+      FcFontSetDestroy (fontset);
+      g_hash_table_destroy (temp_family_hash);
+
+      priv->families[count++] = create_family (fcfontmap, "Sans", FC_PROPORTIONAL);
+      priv->families[count++] = create_family (fcfontmap, "Serif", FC_PROPORTIONAL);
+      priv->families[count++] = create_family (fcfontmap, "Monospace", FC_MONO);
+
+      priv->n_families = count;
+    }
+
+  if (n_families)
+    *n_families = priv->n_families;
+
+  if (families)
+    *families = g_memdup (priv->families, priv->n_families * sizeof (PangoFontFamily *));
+}
+
+static int
+pango_fc_convert_weight_to_fc (PangoWeight pango_weight)
+{
+  if (pango_weight <= (PANGO_WEIGHT_THIN + PANGO_WEIGHT_ULTRALIGHT) / 2)
+    return FC_WEIGHT_THIN;
+  else if (pango_weight <= (PANGO_WEIGHT_ULTRALIGHT + PANGO_WEIGHT_LIGHT) / 2)
+    return FC_WEIGHT_ULTRALIGHT;
+  else if (pango_weight <= (PANGO_WEIGHT_LIGHT + PANGO_WEIGHT_BOOK) / 2)
+    return FC_WEIGHT_LIGHT;
+  else if (pango_weight <= (PANGO_WEIGHT_BOOK + PANGO_WEIGHT_NORMAL) / 2)
+    return FC_WEIGHT_BOOK;
+  else if (pango_weight <= (PANGO_WEIGHT_NORMAL + PANGO_WEIGHT_MEDIUM) / 2)
+    return FC_WEIGHT_NORMAL;
+  else if (pango_weight <= (PANGO_WEIGHT_MEDIUM + PANGO_WEIGHT_SEMIBOLD) / 2)
+    return FC_WEIGHT_MEDIUM;
+  else if (pango_weight <= (PANGO_WEIGHT_SEMIBOLD + PANGO_WEIGHT_BOLD) / 2)
+    return FC_WEIGHT_DEMIBOLD;
+  else if (pango_weight <= (PANGO_WEIGHT_BOLD + PANGO_WEIGHT_ULTRABOLD) / 2)
+    return FC_WEIGHT_BOLD;
+  else if (pango_weight <= (PANGO_WEIGHT_ULTRABOLD + PANGO_WEIGHT_HEAVY) / 2)
+    return FC_WEIGHT_ULTRABOLD;
+  else if (pango_weight <= (PANGO_WEIGHT_HEAVY + PANGO_WEIGHT_ULTRAHEAVY) / 2)
+    return FC_WEIGHT_BLACK;
+  else
+    return FC_WEIGHT_EXTRABLACK;
+}
+
+static int
+pango_fc_convert_slant_to_fc (PangoStyle pango_style)
+{
+  switch (pango_style)
+    {
+    case PANGO_STYLE_NORMAL:
+      return FC_SLANT_ROMAN;
+    case PANGO_STYLE_ITALIC:
+      return FC_SLANT_ITALIC;
+    case PANGO_STYLE_OBLIQUE:
+      return FC_SLANT_OBLIQUE;
+    default:
+      return FC_SLANT_ROMAN;
+    }
+}
+
+#ifdef FC_WIDTH
+static int
+pango_fc_convert_width_to_fc (PangoStretch pango_stretch)
+{
+  switch (pango_stretch)
+    {
+    case PANGO_STRETCH_NORMAL:
+      return FC_WIDTH_NORMAL;
+    case PANGO_STRETCH_ULTRA_CONDENSED:
+      return FC_WIDTH_ULTRACONDENSED;
+    case PANGO_STRETCH_EXTRA_CONDENSED:
+      return FC_WIDTH_EXTRACONDENSED;
+    case PANGO_STRETCH_CONDENSED:
+      return FC_WIDTH_CONDENSED;
+    case PANGO_STRETCH_SEMI_CONDENSED:
+      return FC_WIDTH_SEMICONDENSED;
+    case PANGO_STRETCH_SEMI_EXPANDED:
+      return FC_WIDTH_SEMIEXPANDED;
+    case PANGO_STRETCH_EXPANDED:
+      return FC_WIDTH_EXPANDED;
+    case PANGO_STRETCH_EXTRA_EXPANDED:
+      return FC_WIDTH_EXTRAEXPANDED;
+    case PANGO_STRETCH_ULTRA_EXPANDED:
+      return FC_WIDTH_ULTRAEXPANDED;
+    default:
+      return FC_WIDTH_NORMAL;
+    }
+}
+#endif
+
+static FcPattern *
+pango_fc_make_pattern (const  PangoFontDescription *description,
+                      PangoLanguage               *language,
+                      int                          pixel_size,
+                      double                       dpi)
+{
+  FcPattern *pattern;
+  const char *prgname;
+  int slant;
+  int weight;
+  PangoGravity gravity;
+  FcBool vertical;
+  char **families;
+  int i;
+#ifdef FC_WIDTH
+  int width;
+#endif
+
+  prgname = g_get_prgname ();
+  slant = pango_fc_convert_slant_to_fc (pango_font_description_get_style (description));
+  weight = pango_fc_convert_weight_to_fc (pango_font_description_get_weight (description));
+#ifdef FC_WIDTH
+  width = pango_fc_convert_width_to_fc (pango_font_description_get_stretch (description));
+#endif
+
+  gravity = pango_font_description_get_gravity (description);
+  vertical = PANGO_GRAVITY_IS_VERTICAL (gravity) ? FcTrue : FcFalse;
+
+  /* The reason for passing in FC_SIZE as well as FC_PIXEL_SIZE is
+   * to work around a bug in libgnomeprint where it doesn't look
+   * for FC_PIXEL_SIZE. See http://bugzilla.gnome.org/show_bug.cgi?id=169020
+   *
+   * Putting FC_SIZE in here slightly reduces the efficiency
+   * of caching of patterns and fonts when working with multiple different
+   * dpi values.
+   */
+  pattern = FcPatternBuild (NULL,
+                           PANGO_FC_VERSION, FcTypeInteger, pango_version(),
+                           FC_WEIGHT, FcTypeInteger, weight,
+                           FC_SLANT,  FcTypeInteger, slant,
+#ifdef FC_WIDTH
+                           FC_WIDTH,  FcTypeInteger, width,
+#endif
+#ifdef FC_VERTICAL_LAYOUT
+                           FC_VERTICAL_LAYOUT,  FcTypeBool, vertical,
+#endif
+                           FC_DPI, FcTypeDouble, dpi,
+                           FC_SIZE,  FcTypeDouble,  pixel_size * (72. / 1024. / dpi),
+                           FC_PIXEL_SIZE,  FcTypeDouble,  pixel_size / 1024.,
+                           NULL);
+
+  if (pango_font_description_get_family (description))
+    {
+      families = g_strsplit (pango_font_description_get_family (description), ",", -1);
+
+      for (i = 0; families[i]; i++)
+       FcPatternAddString (pattern, FC_FAMILY, (FcChar8*) families[i]);
+
+      g_strfreev (families);
+    }
+
+  if (language)
+    FcPatternAddString (pattern, FC_LANG, (FcChar8 *) pango_language_to_string (language));
+
+  if (gravity != PANGO_GRAVITY_SOUTH)
+    {
+      GEnumValue *value = g_enum_get_value (get_gravity_class (), gravity);
+      FcPatternAddString (pattern, PANGO_FC_GRAVITY, (FcChar8*) value->value_nick);
+    }
+
+  if (prgname)
+    FcPatternAddString (pattern, PANGO_FC_PRGNAME, (FcChar8*) prgname);
+
+  return pattern;
+}
+
+static FcPattern *
+uniquify_pattern (PangoFcFontMap *fcfontmap,
+                 FcPattern      *pattern)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  FcPattern *old_pattern;
+
+  old_pattern = g_hash_table_lookup (priv->pattern_hash, pattern);
+  if (old_pattern)
+    {
+      return old_pattern;
+    }
+  else
+    {
+      FcPatternReference (pattern);
+      g_hash_table_insert (priv->pattern_hash, pattern, pattern);
+      return pattern;
+    }
+}
+
+static PangoFont *
+pango_fc_font_map_new_font (PangoFcFontMap    *fcfontmap,
+                           PangoFcFontsetKey *fontset_key,
+                           FcPattern         *match)
+{
+  PangoFcFontMapClass *class;
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  FcPattern *pattern;
+  PangoFcFont *fcfont;
+  PangoFcFontKey key;
+
+  if (priv->closed)
+    return NULL;
+
+  match = uniquify_pattern (fcfontmap, match);
+
+  pango_fc_font_key_init (&key, fcfontmap, fontset_key, match);
+
+  fcfont = g_hash_table_lookup (priv->font_hash, &key);
+  if (fcfont)
+    return g_object_ref (fcfont);
+
+  class = PANGO_FC_FONT_MAP_GET_CLASS (fcfontmap);
+
+  if (class->create_font)
+    {
+      fcfont = class->create_font (fcfontmap, &key);
+    }
+  else
+    {
+      const PangoMatrix *pango_matrix = pango_fc_fontset_key_get_matrix (fontset_key);
+      FcMatrix fc_matrix, *fc_matrix_val;
+      int i;
+
+      /* Fontconfig has the Y axis pointing up, Pango, down.
+       */
+      fc_matrix.xx = pango_matrix->xx;
+      fc_matrix.xy = - pango_matrix->xy;
+      fc_matrix.yx = - pango_matrix->yx;
+      fc_matrix.yy = pango_matrix->yy;
+
+      pattern = FcPatternDuplicate (match);
+
+      for (i = 0; FcPatternGetMatrix (pattern, FC_MATRIX, i, &fc_matrix_val) == FcResultMatch; i++)
+       FcMatrixMultiply (&fc_matrix, &fc_matrix, fc_matrix_val);
+
+      FcPatternDel (pattern, FC_MATRIX);
+      FcPatternAddMatrix (pattern, FC_MATRIX, &fc_matrix);
+
+      fcfont = class->new_font (fcfontmap, uniquify_pattern (fcfontmap, pattern));
+
+      FcPatternDestroy (pattern);
+    }
+
+  if (!fcfont)
+    return NULL;
+
+  fcfont->matrix = key.matrix;
+  /* In case the backend didn't set the fontmap */
+  if (!fcfont->fontmap)
+    g_object_set (fcfont,
+                 "fontmap", fcfontmap,
+                 NULL);
+
+  /* cache it on fontmap */
+  pango_fc_font_map_add (fcfontmap, &key, fcfont);
+
+  return (PangoFont *)fcfont;
+}
+
+static void
+pango_fc_default_substitute (PangoFcFontMap    *fontmap,
+                            PangoFcFontsetKey *fontsetkey,
+                            FcPattern         *pattern)
+{
+  if (PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->fontset_key_substitute)
+    PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->fontset_key_substitute (fontmap, fontsetkey, pattern);
+  else if (PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->default_substitute)
+    PANGO_FC_FONT_MAP_GET_CLASS (fontmap)->default_substitute (fontmap, pattern);
+}
+
+static double
+pango_fc_font_map_get_resolution (PangoFcFontMap *fcfontmap,
+                                 PangoContext   *context)
+{
+  if (PANGO_FC_FONT_MAP_GET_CLASS (fcfontmap)->get_resolution)
+    return PANGO_FC_FONT_MAP_GET_CLASS (fcfontmap)->get_resolution (fcfontmap, context);
+
+  if (fcfontmap->priv->dpi < 0)
+    {
+      FcResult result = FcResultNoMatch;
+      FcPattern *tmp = FcPatternBuild (NULL,
+                                      FC_FAMILY, FcTypeString, "Sans",
+                                      FC_SIZE,   FcTypeDouble, 10.,
+                                      NULL);
+      if (tmp)
+       {
+         pango_fc_default_substitute (fcfontmap, NULL, tmp);
+         result = FcPatternGetDouble (tmp, FC_DPI, 0, &fcfontmap->priv->dpi);
+         FcPatternDestroy (tmp);
+       }
+
+      if (result != FcResultMatch)
+       {
+         g_warning ("Error getting DPI from fontconfig, using 72.0");
+         fcfontmap->priv->dpi = 72.0;
+       }
+    }
+
+  return fcfontmap->priv->dpi;
+}
+
+static FcPattern *
+pango_fc_fontset_key_make_pattern (PangoFcFontsetKey *key)
+{
+  return pango_fc_make_pattern (key->desc,
+                               key->language,
+                               key->pixelsize,
+                               key->resolution);
+}
+
+static PangoFcPatterns *
+pango_fc_font_map_get_patterns (PangoFontMap      *fontmap,
+                               PangoFcFontsetKey *key)
+{
+  PangoFcFontMap *fcfontmap = (PangoFcFontMap *)fontmap;
+  PangoFcPatterns *patterns;
+  FcPattern *pattern;
+
+  pattern = pango_fc_fontset_key_make_pattern (key);
+  pango_fc_default_substitute (fcfontmap, key, pattern);
+
+  patterns = pango_fc_patterns_new (pattern, fcfontmap);
+
+  FcPatternDestroy (pattern);
+
+  return patterns;
+}
+
+static gboolean
+get_first_font (PangoFontset  *fontset G_GNUC_UNUSED,
+               PangoFont     *font,
+               gpointer       data)
+{
+  *(PangoFont **)data = font;
+
+  return TRUE;
+}
+
+static PangoFont *
+pango_fc_font_map_load_font (PangoFontMap               *fontmap,
+                            PangoContext               *context,
+                            const PangoFontDescription *description)
+{
+  PangoLanguage *language;
+  PangoFontset *fontset;
+  PangoFont *font = NULL;
+
+  if (context)
+    language = pango_context_get_language (context);
+  else
+    language = NULL;
+
+  fontset = pango_font_map_load_fontset (fontmap, context, description, language);
+
+  if (fontset)
+    {
+      pango_fontset_foreach (fontset, get_first_font, &font);
+
+      if (font)
+       g_object_ref (font);
+
+      g_object_unref (fontset);
+    }
+
+  return font;
+}
+
+static void
+pango_fc_fontset_cache (PangoFcFontset *fontset,
+                       PangoFcFontMap *fcfontmap)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  GQueue *cache = priv->fontset_cache;
+
+  if (fontset->cache_link)
+    {
+      if (fontset->cache_link == cache->head)
+        return;
+
+      /* Already in cache, move to head
+       */
+      if (fontset->cache_link == cache->tail)
+       cache->tail = fontset->cache_link->prev;
+
+      cache->head = g_list_remove_link (cache->head, fontset->cache_link);
+      cache->length--;
+    }
+  else
+    {
+      /* Add to cache initially
+       */
+      if (cache->length == FONTSET_CACHE_SIZE)
+       {
+         PangoFcFontset *tmp_fontset = g_queue_pop_tail (cache);
+         tmp_fontset->cache_link = NULL;
+         g_hash_table_remove (priv->fontset_hash, tmp_fontset->key);
+       }
+
+      fontset->cache_link = g_list_prepend (NULL, fontset);
+    }
+
+  g_queue_push_head_link (cache, fontset->cache_link);
+}
+
+static PangoFontset *
+pango_fc_font_map_load_fontset (PangoFontMap                 *fontmap,
+                               PangoContext                 *context,
+                               const PangoFontDescription   *desc,
+                               PangoLanguage                *language)
+{
+  PangoFcFontMap *fcfontmap = (PangoFcFontMap *)fontmap;
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  PangoFcFontset *fontset;
+  PangoFcFontsetKey key;
+
+  pango_fc_fontset_key_init (&key, fcfontmap, context, desc, language);
+
+  fontset = g_hash_table_lookup (priv->fontset_hash, &key);
+
+  if (G_UNLIKELY (!fontset))
+    {
+      PangoFcPatterns *patterns = pango_fc_font_map_get_patterns (fontmap, &key);
+
+      if (!patterns)
+       return NULL;
+
+      fontset = pango_fc_fontset_new (&key, patterns);
+      g_hash_table_insert (priv->fontset_hash, pango_fc_fontset_get_key (fontset), fontset);
+
+      pango_fc_patterns_unref (patterns);
+    }
+
+  pango_fc_fontset_cache (fontset, fcfontmap);
+
+  pango_font_description_free (key.desc);
+
+  return g_object_ref (fontset);
+}
+
+/**
+ * pango_fc_font_map_cache_clear:
+ * @fcfontmap: a #PangoFcFontmap
+ *
+ * Clear all cached information and fontsets for this font map;
+ * this should be called whenever there is a change in the
+ * output of the default_substitute() virtual function of the
+ * font map, or if fontconfig has been reinitialized to new
+ * configuration.
+ *
+ * Since: 1.4
+ **/
+void
+pango_fc_font_map_cache_clear (PangoFcFontMap *fcfontmap)
+{
+  if (G_UNLIKELY (fcfontmap->priv->closed))
+    return;
+
+  pango_fc_font_map_fini (fcfontmap);
+  pango_fc_font_map_init (fcfontmap);
+}
+
+static PangoFcFontFaceData *
+pango_fc_font_map_get_font_face_data (PangoFcFontMap *fcfontmap,
+                                     FcPattern      *font_pattern)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  PangoFcFontFaceData key;
+  PangoFcFontFaceData *data;
+
+  if (FcPatternGetString (font_pattern, FC_FILE, 0, (FcChar8 **)(void*)&key.filename) != FcResultMatch)
+    return NULL;
+
+  if (FcPatternGetInteger (font_pattern, FC_INDEX, 0, &key.id) != FcResultMatch)
+    return NULL;
+
+  data = g_hash_table_lookup (priv->font_face_data_hash, &key);
+  if (G_LIKELY (data))
+    return data;
+
+  data = g_slice_new0 (PangoFcFontFaceData);
+  data->filename = key.filename;
+  data->id = key.id;
+
+  data->pattern = font_pattern;
+  FcPatternReference (data->pattern);
+
+  g_hash_table_insert (priv->font_face_data_hash, data, data);
+
+  return data;
+}
+
+static PangoFcCmapCache *
+_pango_fc_cmap_cache_ref (PangoFcCmapCache *cmap_cache)
+{
+  g_atomic_int_inc ((int *) &cmap_cache->ref_count);
+
+  return cmap_cache;
+}
+
+void
+_pango_fc_cmap_cache_unref (PangoFcCmapCache *cmap_cache)
+{
+  g_return_if_fail (cmap_cache->ref_count > 0);
+
+  if (g_atomic_int_dec_and_test ((int *) &cmap_cache->ref_count))
+    {
+      g_free (cmap_cache);
+    }
+}
+
+PangoFcCmapCache *
+_pango_fc_font_map_get_cmap_cache (PangoFcFontMap *fcfontmap,
+                                  PangoFcFont    *fcfont)
+{
+  PangoFcFontMapPrivate *priv;
+  PangoFcFontFaceData *data;
+
+  if (G_UNLIKELY (fcfontmap == NULL))
+       return NULL;
+
+  if (G_UNLIKELY (!fcfont->font_pattern))
+    return NULL;
+
+  priv = fcfontmap->priv;
+
+  data = pango_fc_font_map_get_font_face_data (fcfontmap, fcfont->font_pattern);
+  if (G_UNLIKELY (!data))
+    return NULL;
+
+  if (G_UNLIKELY (data->cmap_cache == NULL))
+    {
+      data->cmap_cache = g_new0 (PangoFcCmapCache, 1);
+      data->cmap_cache->ref_count = 1;
+
+      /* Make sure all cache entries are invalid initially */
+      data->cmap_cache->entries[0].ch = 1; /* char 1 cannot happen in bucket 0 */
+    }
+
+  return _pango_fc_cmap_cache_ref (data->cmap_cache);
+}
+
+PangoCoverage *
+_pango_fc_font_map_get_coverage (PangoFcFontMap *fcfontmap,
+                                PangoFcFont    *fcfont)
+{
+  PangoFcFontFaceData *data;
+  FcCharSet *charset;
+
+  if (G_UNLIKELY (!fcfont->font_pattern))
+    return NULL;
+
+  data = pango_fc_font_map_get_font_face_data (fcfontmap, fcfont->font_pattern);
+  if (G_UNLIKELY (!data))
+    return NULL;
+
+  if (G_UNLIKELY (data->coverage == NULL))
+    {
+      /*
+       * Pull the coverage out of the pattern, this
+       * doesn't require loading the font
+       */
+      if (FcPatternGetCharSet (fcfont->font_pattern, FC_CHARSET, 0, &charset) != FcResultMatch)
+       return NULL;
+
+      data->coverage = _pango_fc_font_map_fc_to_coverage (charset);
+    }
+
+  return pango_coverage_ref (data->coverage);
+}
+
+/**
+ * _pango_fc_font_map_fc_to_coverage:
+ * @charset: #FcCharSet to convert to a #PangoCoverage object.
+ *
+ * Convert the given #FcCharSet into a new #PangoCoverage object.  The
+ * caller is responsible for freeing the newly created object.
+ *
+ * Since: 1.6
+ **/
+PangoCoverage  *
+_pango_fc_font_map_fc_to_coverage (FcCharSet *charset)
+{
+  PangoCoverage *coverage;
+  FcChar32  ucs4, pos;
+  FcChar32  map[FC_CHARSET_MAP_SIZE];
+  int i;
+
+  /*
+   * Convert an Fc CharSet into a pango coverage structure.  Sure
+   * would be nice to just use the Fc structure in place...
+   */
+  coverage = pango_coverage_new ();
+  for (ucs4 = FcCharSetFirstPage (charset, map, &pos);
+       ucs4 != FC_CHARSET_DONE;
+       ucs4 = FcCharSetNextPage (charset, map, &pos))
+    {
+      for (i = 0; i < FC_CHARSET_MAP_SIZE; i++)
+       {
+         FcChar32  bits = map[i];
+         FcChar32  base = ucs4 + i * 32;
+         int b = 0;
+
+         while (bits)
+           {
+             if (bits & 1)
+               pango_coverage_set (coverage, base + b, PANGO_COVERAGE_EXACT);
+
+             bits >>= 1;
+             b++;
+           }
+       }
+    }
+
+  /* Awful hack so Hangul Tone marks get rendered with the same
+   * font and in the same run as other Hangul characters. If a font
+   * covers the first composed Hangul glyph, then it is declared to cover
+   * the Hangul tone marks. This hack probably needs to be formalized
+   * by choosing fonts for scripts rather than individual code points.
+   */
+  if (pango_coverage_get (coverage, 0xac00) == PANGO_COVERAGE_EXACT)
+    {
+      pango_coverage_set (coverage, 0x302e, PANGO_COVERAGE_EXACT);
+      pango_coverage_set (coverage, 0x302f, PANGO_COVERAGE_EXACT);
+    }
+
+  return coverage;
+}
+
+/**
+ * pango_fc_font_map_create_context:
+ * @fcfontmap: a #PangoFcFontMap
+ *
+ * Creates a new context for this fontmap. This function is intended
+ * only for backend implementations deriving from #PangoFcFontmap;
+ * it is possible that a backend will store additional information
+ * needed for correct operation on the #PangoContext after calling
+ * this function.
+ *
+ * Return value: a new #PangoContext
+ *
+ * Since: 1.4
+ *
+ * Deprecated: 1.22: Use pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_fc_font_map_create_context (PangoFcFontMap *fcfontmap)
+{
+  g_return_val_if_fail (PANGO_IS_FC_FONT_MAP (fcfontmap), NULL);
+
+  return pango_font_map_create_context (PANGO_FONT_MAP (fcfontmap));
+}
+
+static void
+shutdown_font (gpointer        key,
+              PangoFcFont    *fcfont,
+              PangoFcFontMap *fcfontmap)
+{
+  _pango_fc_font_shutdown (fcfont);
+
+  _pango_fc_font_set_font_key (fcfont, NULL);
+  pango_fc_font_key_free (key);
+}
+
+/**
+ * pango_fc_font_map_shutdown:
+ * @fcfontmap: a #PangoFcFontmap
+ *
+ * Clears all cached information for the fontmap and marks
+ * all fonts open for the fontmap as dead. (See the shutdown()
+ * virtual function of #PangoFcFont.) This function might be used
+ * by a backend when the underlying windowing system for the font
+ * map exits. This function is only intended to be called
+ * only for backend implementations deriving from #PangoFcFontmap.
+ *
+ * Since: 1.4
+ **/
+void
+pango_fc_font_map_shutdown (PangoFcFontMap *fcfontmap)
+{
+  PangoFcFontMapPrivate *priv = fcfontmap->priv;
+  int i;
+
+  if (priv->closed)
+    return;
+
+  g_hash_table_foreach (priv->font_hash, (GHFunc) shutdown_font, fcfontmap);
+  for (i = 0; i < priv->n_families; i++)
+    priv->families[i]->fontmap = NULL;
+
+  pango_fc_font_map_fini (fcfontmap);
+
+  while (priv->findfuncs)
+    {
+      PangoFcFindFuncInfo *info;
+      info = priv->findfuncs->data;
+      if (info->dnotify)
+       info->dnotify (info->user_data);
+
+      g_slice_free (PangoFcFindFuncInfo, info);
+      priv->findfuncs = g_slist_delete_link (priv->findfuncs, priv->findfuncs);
+    }
+
+  priv->closed = TRUE;
+}
+
+static PangoWeight
+pango_fc_convert_weight_to_pango (int fc_weight)
+{
+  if (fc_weight <= (FC_WEIGHT_THIN + FC_WEIGHT_EXTRALIGHT) / 2)
+    return PANGO_WEIGHT_THIN;
+  else if (fc_weight <= (FC_WEIGHT_EXTRALIGHT + FC_WEIGHT_LIGHT) / 2)
+    return PANGO_WEIGHT_ULTRALIGHT;
+  else if (fc_weight <= (FC_WEIGHT_LIGHT + FC_WEIGHT_BOOK) / 2)
+    return PANGO_WEIGHT_LIGHT;
+  else if (fc_weight <= (FC_WEIGHT_BOOK + FC_WEIGHT_REGULAR) / 2)
+    return PANGO_WEIGHT_BOOK;
+  else if (fc_weight <= (FC_WEIGHT_REGULAR + FC_WEIGHT_MEDIUM) / 2)
+    return PANGO_WEIGHT_NORMAL;
+   else if (fc_weight <= (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2)
+    return PANGO_WEIGHT_MEDIUM;
+  else if (fc_weight <= (FC_WEIGHT_DEMIBOLD + FC_WEIGHT_BOLD) / 2)
+    return PANGO_WEIGHT_SEMIBOLD;
+  else if (fc_weight <= (FC_WEIGHT_BOLD + FC_WEIGHT_EXTRABOLD) / 2)
+    return PANGO_WEIGHT_BOLD;
+  else if (fc_weight <= (FC_WEIGHT_EXTRABOLD + FC_WEIGHT_BLACK) / 2)
+    return PANGO_WEIGHT_ULTRABOLD;
+  else if (fc_weight <= (FC_WEIGHT_BLACK + FC_WEIGHT_EXTRABLACK) / 2)
+    return PANGO_WEIGHT_HEAVY;
+  else
+    return PANGO_WEIGHT_ULTRAHEAVY;
+}
+
+static PangoStyle
+pango_fc_convert_slant_to_pango (int fc_style)
+{
+  switch (fc_style)
+    {
+    case FC_SLANT_ROMAN:
+      return PANGO_STYLE_NORMAL;
+    case FC_SLANT_ITALIC:
+      return PANGO_STYLE_ITALIC;
+    case FC_SLANT_OBLIQUE:
+      return PANGO_STYLE_OBLIQUE;
+    default:
+      return PANGO_STYLE_NORMAL;
+    }
+}
+
+#ifdef FC_WIDTH
+static PangoStretch
+pango_fc_convert_width_to_pango (int fc_stretch)
+{
+  switch (fc_stretch)
+    {
+    case FC_WIDTH_NORMAL:
+      return PANGO_STRETCH_NORMAL;
+    case FC_WIDTH_ULTRACONDENSED:
+      return PANGO_STRETCH_ULTRA_CONDENSED;
+    case FC_WIDTH_EXTRACONDENSED:
+      return PANGO_STRETCH_EXTRA_CONDENSED;
+    case FC_WIDTH_CONDENSED:
+      return PANGO_STRETCH_CONDENSED;
+    case FC_WIDTH_SEMICONDENSED:
+      return PANGO_STRETCH_SEMI_CONDENSED;
+    case FC_WIDTH_SEMIEXPANDED:
+      return PANGO_STRETCH_SEMI_EXPANDED;
+    case FC_WIDTH_EXPANDED:
+      return PANGO_STRETCH_EXPANDED;
+    case FC_WIDTH_EXTRAEXPANDED:
+      return PANGO_STRETCH_EXTRA_EXPANDED;
+    case FC_WIDTH_ULTRAEXPANDED:
+      return PANGO_STRETCH_ULTRA_EXPANDED;
+    default:
+      return PANGO_STRETCH_NORMAL;
+    }
+}
+#endif
+
+/**
+ * pango_fc_font_description_from_pattern:
+ * @pattern: a #FcPattern
+ * @include_size: if %TRUE, the pattern will include the size from
+ *   the @pattern; otherwise the resulting pattern will be unsized.
+ *   (only %FC_SIZE is examined, not %FC_PIXEL_SIZE)
+ *
+ * Creates a #PangoFontDescription that matches the specified
+ * Fontconfig pattern as closely as possible. Many possible Fontconfig
+ * pattern values, such as %FC_RASTERIZER or %FC_DPI, don't make sense in
+ * the context of #PangoFontDescription, so will be ignored.
+ *
+ * Return value: a new #PangoFontDescription. Free with
+ *  pango_font_description_free().
+ *
+ * Since: 1.4
+ **/
+PangoFontDescription *
+pango_fc_font_description_from_pattern (FcPattern *pattern, gboolean include_size)
+{
+  PangoFontDescription *desc;
+  PangoStyle style;
+  PangoWeight weight;
+  PangoStretch stretch;
+  double size;
+  PangoGravity gravity;
+
+  FcChar8 *s;
+  int i;
+  FcResult res;
+
+  desc = pango_font_description_new ();
+
+  res = FcPatternGetString (pattern, FC_FAMILY, 0, (FcChar8 **) &s);
+  g_assert (res == FcResultMatch);
+
+  pango_font_description_set_family (desc, (gchar *)s);
+
+  if (FcPatternGetInteger (pattern, FC_SLANT, 0, &i) == FcResultMatch)
+    style = pango_fc_convert_slant_to_pango (i);
+  else
+    style = PANGO_STYLE_NORMAL;
+
+  pango_font_description_set_style (desc, style);
+
+  if (FcPatternGetInteger (pattern, FC_WEIGHT, 0, &i) == FcResultMatch)
+    weight = pango_fc_convert_weight_to_pango (i);
+  else
+    weight = PANGO_WEIGHT_NORMAL;
+
+  pango_font_description_set_weight (desc, weight);
+
+#ifdef FC_WIDTH
+  if (FcPatternGetInteger (pattern, FC_WIDTH, 0, &i) == FcResultMatch)
+    stretch = pango_fc_convert_width_to_pango (i);
+  else
+#endif
+    stretch = PANGO_STRETCH_NORMAL;
+
+  pango_font_description_set_stretch (desc, stretch);
+
+  pango_font_description_set_variant (desc, PANGO_VARIANT_NORMAL);
+
+  if (include_size && FcPatternGetDouble (pattern, FC_SIZE, 0, &size) == FcResultMatch)
+    pango_font_description_set_size (desc, size * PANGO_SCALE);
+
+  /* gravity is a bit different.  we don't want to set it if it was not set on
+   * the pattern */
+  if (FcPatternGetString (pattern, PANGO_FC_GRAVITY, 0, (FcChar8 **)&s) == FcResultMatch)
+    {
+      GEnumValue *value = g_enum_get_value_by_nick (get_gravity_class (), (char *)s);
+      gravity = value->value;
+
+      pango_font_description_set_gravity (desc, gravity);
+    }
+
+  return desc;
+}
+
+/*
+ * PangoFcFace
+ */
+
+static GObjectClass *pango_fc_face_parent_class = NULL;
+
+static PangoFontDescription *
+make_alias_description (PangoFcFamily *fcfamily,
+                       gboolean        bold,
+                       gboolean        italic)
+{
+  PangoFontDescription *desc = pango_font_description_new ();
+
+  pango_font_description_set_family (desc, fcfamily->family_name);
+  pango_font_description_set_style (desc, italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL);
+  pango_font_description_set_weight (desc, bold ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL);
+
+  return desc;
+}
+
+static PangoFontDescription *
+pango_fc_face_describe (PangoFontFace *face)
+{
+  PangoFcFace *fcface = PANGO_FC_FACE (face);
+  PangoFcFamily *fcfamily = fcface->family;
+  PangoFontDescription *desc = NULL;
+  FcResult res;
+  FcPattern *match_pattern;
+  FcPattern *result_pattern;
+
+  if (G_UNLIKELY (!fcfamily))
+    return pango_font_description_new ();
+
+  if (fcface->fake)
+    {
+      if (strcmp (fcface->style, "Regular") == 0)
+       return make_alias_description (fcfamily, FALSE, FALSE);
+      else if (strcmp (fcface->style, "Bold") == 0)
+       return make_alias_description (fcfamily, TRUE, FALSE);
+      else if (strcmp (fcface->style, "Italic") == 0)
+       return make_alias_description (fcfamily, FALSE, TRUE);
+      else                     /* Bold Italic */
+       return make_alias_description (fcfamily, TRUE, TRUE);
+    }
+
+  match_pattern = FcPatternBuild (NULL,
+                                 FC_FAMILY, FcTypeString, fcfamily->family_name,
+                                 FC_STYLE, FcTypeString, fcface->style,
+                                 NULL);
+
+  g_assert (match_pattern);
+
+  FcConfigSubstitute (NULL, match_pattern, FcMatchPattern);
+  FcDefaultSubstitute (match_pattern);
+
+  result_pattern = FcFontMatch (NULL, match_pattern, &res);
+  if (result_pattern)
+    {
+      desc = pango_fc_font_description_from_pattern (result_pattern, FALSE);
+      FcPatternDestroy (result_pattern);
+    }
+
+  FcPatternDestroy (match_pattern);
+
+  return desc;
+}
+
+static const char *
+pango_fc_face_get_face_name (PangoFontFace *face)
+{
+  PangoFcFace *fcface = PANGO_FC_FACE (face);
+
+  return fcface->style;
+}
+
+static int
+compare_ints (gconstpointer ap,
+             gconstpointer bp)
+{
+  int a = *(int *)ap;
+  int b = *(int *)bp;
+
+  if (a == b)
+    return 0;
+  else if (a > b)
+    return 1;
+  else
+    return -1;
+}
+
+static void
+pango_fc_face_list_sizes (PangoFontFace  *face,
+                         int           **sizes,
+                         int            *n_sizes)
+{
+  PangoFcFace *fcface = PANGO_FC_FACE (face);
+  FcPattern *pattern;
+  FcFontSet *fontset;
+  FcObjectSet *objectset;
+
+  *sizes = NULL;
+  *n_sizes = 0;
+  if (G_UNLIKELY (!fcface->family || !fcface->family->fontmap))
+    return;
+
+  pattern = FcPatternCreate ();
+  FcPatternAddString (pattern, FC_FAMILY, (FcChar8*)(void*)fcface->family->family_name);
+  FcPatternAddString (pattern, FC_STYLE, (FcChar8*)(void*)fcface->style);
+
+  objectset = FcObjectSetCreate ();
+  FcObjectSetAdd (objectset, FC_PIXEL_SIZE);
+
+  fontset = FcFontList (NULL, pattern, objectset);
+
+  if (fontset)
+    {
+      GArray *size_array;
+      double size, dpi = -1.0;
+      int i, size_i;
+
+      size_array = g_array_new (FALSE, FALSE, sizeof (int));
+
+      for (i = 0; i < fontset->nfont; i++)
+       {
+         if (FcPatternGetDouble (fontset->fonts[i], FC_PIXEL_SIZE, 0, &size) == FcResultMatch)
+           {
+             if (dpi < 0)
+               dpi = pango_fc_font_map_get_resolution (fcface->family->fontmap, NULL);
+
+             size_i = (int) (PANGO_SCALE * size * 72.0 / dpi);
+             g_array_append_val (size_array, size_i);
+           }
+       }
+
+      g_array_sort (size_array, compare_ints);
+
+      if (size_array->len == 0)
+       {
+         *n_sizes = 0;
+         if (sizes)
+           *sizes = NULL;
+         g_array_free (size_array, TRUE);
+       }
+      else
+       {
+         *n_sizes = size_array->len;
+         if (sizes)
+           {
+             *sizes = (int *) size_array->data;
+             g_array_free (size_array, FALSE);
+           }
+         else
+           g_array_free (size_array, TRUE);
+       }
+
+      FcFontSetDestroy (fontset);
+    }
+  else
+    {
+      *n_sizes = 0;
+      if (sizes)
+       *sizes = NULL;
+    }
+
+  FcPatternDestroy (pattern);
+  FcObjectSetDestroy (objectset);
+}
+
+static gboolean
+pango_fc_face_is_synthesized (PangoFontFace *face)
+{
+  PangoFcFace *fcface = PANGO_FC_FACE (face);
+
+  return fcface->fake;
+}
+
+static void
+pango_fc_face_finalize (GObject *object)
+{
+  PangoFcFace *fcface = PANGO_FC_FACE (object);
+
+  g_free (fcface->style);
+
+  pango_fc_face_parent_class->finalize (object);
+}
+
+typedef PangoFontFaceClass PangoFcFaceClass;
+
+static void
+pango_fc_face_class_init (PangoFcFaceClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  pango_fc_face_parent_class = g_type_class_peek_parent (class);
+  object_class->finalize = pango_fc_face_finalize;
+
+  class->describe = pango_fc_face_describe;
+  class->get_face_name = pango_fc_face_get_face_name;
+  class->list_sizes = pango_fc_face_list_sizes;
+  class->is_synthesized = pango_fc_face_is_synthesized;
+}
+
+static PANGO_DEFINE_TYPE (PangoFcFace, pango_fc_face,
+                         pango_fc_face_class_init, NULL,
+                         PANGO_TYPE_FONT_FACE)
+
+/*
+ * PangoFcFamily
+ */
+
+static GObjectClass *pango_fc_family_parent_class = NULL;
+
+static PangoFcFace *
+create_face (PangoFcFamily *fcfamily,
+            const char     *style,
+            gboolean       fake)
+{
+  PangoFcFace *face = g_object_new (PANGO_FC_TYPE_FACE, NULL);
+  face->style = g_strdup (style);
+  face->family = fcfamily;
+  face->fake = fake;
+
+  return face;
+}
+
+static void
+pango_fc_family_list_faces (PangoFontFamily  *family,
+                           PangoFontFace  ***faces,
+                           int              *n_faces)
+{
+  PangoFcFamily *fcfamily = PANGO_FC_FAMILY (family);
+  PangoFcFontMap *fcfontmap = fcfamily->fontmap;
+  PangoFcFontMapPrivate *priv;
+
+  *faces = NULL;
+  *n_faces = 0;
+  if (G_UNLIKELY (!fcfontmap))
+    return;
+
+  priv = fcfontmap->priv;
+
+  if (fcfamily->n_faces < 0)
+    {
+      FcFontSet *fontset;
+      int i;
+
+      if (is_alias_family (fcfamily->family_name) || priv->closed)
+       {
+         fcfamily->n_faces = 4;
+         fcfamily->faces = g_new (PangoFcFace *, fcfamily->n_faces);
+
+         i = 0;
+         fcfamily->faces[i++] = create_face (fcfamily, "Regular", TRUE);
+         fcfamily->faces[i++] = create_face (fcfamily, "Bold", TRUE);
+         fcfamily->faces[i++] = create_face (fcfamily, "Italic", TRUE);
+         fcfamily->faces[i++] = create_face (fcfamily, "Bold Italic", TRUE);
+       }
+      else
+       {
+         FcObjectSet *os = FcObjectSetBuild (FC_STYLE, FC_WEIGHT, FC_SLANT, NULL);
+         FcPattern *pat = FcPatternBuild (NULL,
+                                          FC_FAMILY, FcTypeString, fcfamily->family_name,
+                                          NULL);
+
+         enum {
+           REGULAR,
+           ITALIC,
+           BOLD,
+           BOLD_ITALIC
+         };
+         /* Regular, Italic, Bold, Bold Italic */
+         gboolean has_face [4] = { FALSE, FALSE, FALSE, FALSE };
+         PangoFcFace **faces;
+         gint num = 0;
+
+         fontset = FcFontList (NULL, pat, os);
+
+         FcPatternDestroy (pat);
+         FcObjectSetDestroy (os);
+
+         /* at most we have 3 additional artifical faces */
+         faces = g_new (PangoFcFace *, fontset->nfont + 3);
+
+         for (i = 0; i < fontset->nfont; i++)
+           {
+             const char *style, *font_style = NULL;
+             int weight, slant;
+
+             if (FcPatternGetInteger(fontset->fonts[i], FC_WEIGHT, 0, &weight) != FcResultMatch)
+               weight = FC_WEIGHT_MEDIUM;
+
+             if (FcPatternGetInteger(fontset->fonts[i], FC_SLANT, 0, &slant) != FcResultMatch)
+               slant = FC_SLANT_ROMAN;
+
+             if (FcPatternGetString (fontset->fonts[i], FC_STYLE, 0, (FcChar8 **)(void*)&font_style) != FcResultMatch)
+               font_style = NULL;
+
+             if (weight <= FC_WEIGHT_MEDIUM)
+               {
+                 if (slant == FC_SLANT_ROMAN)
+                   {
+                     has_face[REGULAR] = TRUE;
+                     style = "Regular";
+                   }
+                 else
+                   {
+                     has_face[ITALIC] = TRUE;
+                     style = "Italic";
+                   }
+               }
+             else
+               {
+                 if (slant == FC_SLANT_ROMAN)
+                   {
+                     has_face[BOLD] = TRUE;
+                     style = "Bold";
+                   }
+                 else
+                   {
+                     has_face[BOLD_ITALIC] = TRUE;
+                     style = "Bold Italic";
+                   }
+               }
+
+             if (!font_style)
+               font_style = style;
+             faces[num++] = create_face (fcfamily, font_style, FALSE);
+           }
+
+         if (has_face[REGULAR])
+           {
+             if (!has_face[ITALIC])
+               faces[num++] = create_face (fcfamily, "Italic", TRUE);
+             if (!has_face[BOLD])
+               faces[num++] = create_face (fcfamily, "Bold", TRUE);
+
+           }
+         if ((has_face[REGULAR] || has_face[ITALIC] || has_face[BOLD]) && !has_face[BOLD_ITALIC])
+           faces[num++] = create_face (fcfamily, "Bold Italic", TRUE);
+
+         faces = g_renew (PangoFcFace *, faces, num);
+
+         fcfamily->n_faces = num;
+         fcfamily->faces = faces;
+
+         FcFontSetDestroy (fontset);
+       }
+    }
+
+  if (n_faces)
+    *n_faces = fcfamily->n_faces;
+
+  if (faces)
+    *faces = g_memdup (fcfamily->faces, fcfamily->n_faces * sizeof (PangoFontFace *));
+}
+
+static const char *
+pango_fc_family_get_name (PangoFontFamily  *family)
+{
+  PangoFcFamily *fcfamily = PANGO_FC_FAMILY (family);
+
+  return fcfamily->family_name;
+}
+
+static gboolean
+pango_fc_family_is_monospace (PangoFontFamily *family)
+{
+  PangoFcFamily *fcfamily = PANGO_FC_FAMILY (family);
+
+  return fcfamily->spacing == FC_MONO ||
+#ifdef FC_DUAL
+        fcfamily->spacing == FC_DUAL ||
+#endif
+        fcfamily->spacing == FC_CHARCELL;
+}
+
+static void
+pango_fc_family_finalize (GObject *object)
+{
+  int i;
+  PangoFcFamily *fcfamily = PANGO_FC_FAMILY (object);
+
+  g_free (fcfamily->family_name);
+
+  for (i = 0; i < fcfamily->n_faces; i++)
+    {
+      fcfamily->faces[i]->family = NULL;
+      g_object_unref (fcfamily->faces[i]);
+    }
+  g_free (fcfamily->faces);
+
+  pango_fc_family_parent_class->finalize (object);
+}
+
+typedef PangoFontFamilyClass PangoFcFamilyClass;
+
+static void
+pango_fc_family_class_init (PangoFcFamilyClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  pango_fc_family_parent_class = g_type_class_peek_parent (class);
+  object_class->finalize = pango_fc_family_finalize;
+
+  class->list_faces = pango_fc_family_list_faces;
+  class->get_name = pango_fc_family_get_name;
+  class->is_monospace = pango_fc_family_is_monospace;
+}
+
+static void
+pango_fc_family_init (PangoFcFamily *fcfamily)
+{
+  fcfamily->n_faces = -1;
+}
+
+static PANGO_DEFINE_TYPE (PangoFcFamily, pango_fc_family,
+                         pango_fc_family_class_init, pango_fc_family_init,
+                         PANGO_TYPE_FONT_FAMILY)
diff --git a/pango/pangofc-fontmap.h b/pango/pangofc-fontmap.h
new file mode 100755 (executable)
index 0000000..8d496eb
--- /dev/null
@@ -0,0 +1,270 @@
+/* Pango
+ * pangofc-fontmap.h: Base fontmap type for fontconfig-based backends
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGO_FC_FONT_MAP_H__
+#define __PANGO_FC_FONT_MAP_H__
+
+#include <fontconfig/fontconfig.h>
+#include <pango/pango-fontmap.h>
+#include <pango/pangofc-decoder.h>
+#include <pango/pangofc-font.h>
+
+G_BEGIN_DECLS
+
+
+#ifdef PANGO_ENABLE_BACKEND
+
+/**
+ * PangoFcFontsetKey:
+ *
+ * An opaque structure containing all the information needed for
+ * loading a fontset with the PangoFc fontmap.
+ *
+ * Since: 1.24
+ **/
+typedef struct _PangoFcFontsetKey  PangoFcFontsetKey;
+
+PangoLanguage              *pango_fc_fontset_key_get_language      (const PangoFcFontsetKey *key);
+const PangoFontDescription *pango_fc_fontset_key_get_description   (const PangoFcFontsetKey *key);
+const PangoMatrix          *pango_fc_fontset_key_get_matrix        (const PangoFcFontsetKey *key);
+double                      pango_fc_fontset_key_get_absolute_size (const PangoFcFontsetKey *key);
+double                      pango_fc_fontset_key_get_resolution    (const PangoFcFontsetKey *key);
+gpointer                    pango_fc_fontset_key_get_context_key   (const PangoFcFontsetKey *key);
+
+/**
+ * PangoFcFontKey:
+ *
+ * An opaque structure containing all the information needed for
+ * loading a font with the PangoFc fontmap.
+ *
+ * Since: 1.24
+ **/
+typedef struct _PangoFcFontKey     PangoFcFontKey;
+
+const FcPattern   *pango_fc_font_key_get_pattern     (const PangoFcFontKey *key);
+const PangoMatrix *pango_fc_font_key_get_matrix      (const PangoFcFontKey *key);
+gpointer           pango_fc_font_key_get_context_key (const PangoFcFontKey *key);
+
+#endif
+
+
+/*
+ * PangoFcFontMap
+ */
+
+#define PANGO_TYPE_FC_FONT_MAP              (pango_fc_font_map_get_type ())
+#define PANGO_FC_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_FONT_MAP, PangoFcFontMap))
+#define PANGO_IS_FC_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_FONT_MAP))
+
+typedef struct _PangoFcFontMap        PangoFcFontMap;
+typedef struct _PangoFcFontMapClass   PangoFcFontMapClass;
+typedef struct _PangoFcFontMapPrivate PangoFcFontMapPrivate;
+
+#ifdef PANGO_ENABLE_BACKEND
+
+#define PANGO_FC_FONT_MAP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_FONT_MAP, PangoFcFontMapClass))
+#define PANGO_IS_FC_FONT_MAP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_FONT_MAP))
+#define PANGO_FC_FONT_MAP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_FONT_MAP, PangoFcFontMapClass))
+
+/**
+ * PangoFcFontMap:
+ *
+ * #PangoFcFontMap is a base class for font map implementations
+ * using the Fontconfig and FreeType libraries. To create a new
+ * backend using Fontconfig and FreeType, you derive from this class
+ * and implement a new_font() virtual function that creates an
+ * instance deriving from #PangoFcFont.
+ **/
+struct _PangoFcFontMap
+{
+  PangoFontMap parent_instance;
+
+  PangoFcFontMapPrivate *priv;
+};
+
+/**
+ * PangoFcFontMapClass:
+ * @default_substitute: Substitutes in default values for
+ *  unspecified fields in a #FcPattern. This will be called
+ *  prior to creating a font for the pattern. May be %NULL.
+ *  Deprecated in favor of @font_key_substitute().
+ * @new_font: Creates a new #PangoFcFont for the specified
+ *  pattern of the appropriate type for this font map. The
+ *  @pattern argument must be passed to the "pattern" property
+ *  of #PangoFcFont when you call g_object_new(). Deprecated
+ *  in favor of @create_font().
+ * @get_resolution: Gets the resolution (the scale factor
+ *  between logical and absolute font sizes) that the backend
+ *  will use for a particular fontmap and context. @context
+ *  may be null.
+ * @context_key_get: Gets an opaque key holding backend
+ *  specific options for the context that will affect
+ *  fonts created by create_font(). The result must point to
+ *  persistant storage owned by the fontmap. This key
+ *  is used to index hash tables used to look up fontsets
+ *  and fonts.
+ * @context_key_copy: Copies a context key. Pango uses this
+ *  to make a persistant copy of the value returned from
+ *  @context_key_get.
+ * @context_key_free: Frees a context key copied with
+ *  @context_key_copy.
+ * @context_key_hash: Gets a hash value for a context key
+ * @context_key_equal: Compares two context keys for equality.
+ * @fontset_key_substitute: Substitutes in default values for
+ *  unspecified fields in a #FcPattern. This will be called
+ *  prior to creating a font for the pattern. May be %NULL.
+ *  (Since: 1.24)
+ * @create_font: Creates a new #PangoFcFont for the specified
+ *  pattern of the appropriate type for this font map using
+ *  information from the font key that is passed in. The
+ *  @pattern member of @font_key can be retrieved using
+ *  pango_fc_font_key_get_pattern() and must be passed to
+ *  the "pattern" property of #PangoFcFont when you call
+ *  g_object_new().  If %NULL, new_font() is used.
+ *  (Since: 1.24)
+ *
+ * Class structure for #PangoFcFontMap.
+ **/
+struct _PangoFcFontMapClass
+{
+  /*< private >*/
+  PangoFontMapClass parent_class;
+
+  /*< public >*/
+  /* Deprecated in favor of fontset_key_substitute */
+  void         (*default_substitute) (PangoFcFontMap   *fontmap,
+                                     FcPattern        *pattern);
+  /* Deprecated in favor of create_font */
+  PangoFcFont  *(*new_font)          (PangoFcFontMap  *fontmap,
+                                     FcPattern       *pattern);
+
+  double       (*get_resolution)     (PangoFcFontMap             *fcfontmap,
+                                     PangoContext               *context);
+
+  gconstpointer (*context_key_get)   (PangoFcFontMap             *fcfontmap,
+                                     PangoContext               *context);
+  gpointer     (*context_key_copy)   (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key);
+  void         (*context_key_free)   (PangoFcFontMap             *fcfontmap,
+                                     gpointer                    key);
+  guint32      (*context_key_hash)   (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key);
+  gboolean     (*context_key_equal)  (PangoFcFontMap             *fcfontmap,
+                                     gconstpointer               key_a,
+                                     gconstpointer               key_b);
+
+  void         (*fontset_key_substitute)(PangoFcFontMap             *fontmap,
+                                     PangoFcFontsetKey          *fontsetkey,
+                                     FcPattern                  *pattern);
+  PangoFcFont  *(*create_font)       (PangoFcFontMap             *fontmap,
+                                     PangoFcFontKey             *fontkey);
+  /*< private >*/
+
+  /* Padding for future expansion */
+  void (*_pango_reserved1) (void);
+  void (*_pango_reserved2) (void);
+  void (*_pango_reserved3) (void);
+  void (*_pango_reserved4) (void);
+};
+
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoContext * pango_fc_font_map_create_context (PangoFcFontMap *fcfontmap);
+#endif
+void           pango_fc_font_map_shutdown       (PangoFcFontMap *fcfontmap);
+
+#endif
+
+GType pango_fc_font_map_get_type (void) G_GNUC_CONST;
+
+void           pango_fc_font_map_cache_clear    (PangoFcFontMap *fcfontmap);
+
+/**
+ * PangoFcDecoderFindFunc:
+ * @pattern: a fully resolved #FcPattern specifying the font on the system
+ * @user_data: user data passed to pango_fc_font_map_add_decoder_find_func()
+ *
+ * Callback function passed to pango_fc_font_map_add_decoder_find_func().
+ *
+ * Return value: a new reference to a custom decoder for this pattern,
+ *  or %NULL if the default decoder handling should be used.
+ **/
+typedef PangoFcDecoder * (*PangoFcDecoderFindFunc) (FcPattern *pattern,
+                                                   gpointer   user_data);
+
+void pango_fc_font_map_add_decoder_find_func (PangoFcFontMap        *fcfontmap,
+                                             PangoFcDecoderFindFunc findfunc,
+                                             gpointer               user_data,
+                                             GDestroyNotify         dnotify);
+PangoFcDecoder *pango_fc_font_map_find_decoder (PangoFcFontMap *fcfontmap,
+                                               FcPattern      *pattern);
+
+PangoFontDescription *pango_fc_font_description_from_pattern (FcPattern *pattern,
+                                                             gboolean   include_size);
+
+/**
+ * PANGO_FC_GRAVITY:
+ *
+ * String representing a fontconfig property name that Pango sets on any
+ * fontconfig pattern it passes to fontconfig if a #PangoGravity other
+ * than %PangoGravitySouth is desired.
+ *
+ * The property will have a #PangoGravity value as a string, like "east".
+ * This can be used to write fontconfig configuration rules to choose
+ * different fonts for horizontal and vertical writing directions.
+ *
+ * Since: 1.20
+ */
+#define PANGO_FC_GRAVITY "pangogravity"
+
+/**
+ * PANGO_FC_VERSION:
+ *
+ * String representing a fontconfig property name that Pango sets on any
+ * fontconfig pattern it passes to fontconfig.
+ *
+ * The property will have an integer value equal to what
+ * pango_version() returns.
+ * This can be used to write fontconfig configuration rules that only affect
+ * certain pango versions (or only pango-using applications, or only
+ * non-pango-using applications).
+ *
+ * Since: 1.20
+ */
+#define PANGO_FC_VERSION "pangoversion"
+
+/**
+ * PANGO_FC_PRGNAME:
+ *
+ * String representing a fontconfig property name that Pango sets on any
+ * fontconfig pattern it passes to fontconfig.
+ *
+ * The property will have a string equal to what
+ * g_get_prgname() returns.
+ * This can be used to write fontconfig configuration rules that only affect
+ * certain applications.
+ *
+ * Since: 1.24
+ */
+#define PANGO_FC_PRGNAME "pangoprgname"
+
+G_END_DECLS
+
+#endif /* __PANGO_FC_FONT_MAP_H__ */
diff --git a/pango/pangofc-private.h b/pango/pangofc-private.h
new file mode 100755 (executable)
index 0000000..e7c08bf
--- /dev/null
@@ -0,0 +1,142 @@
+/* Pango
+ * pangofc-private.h: Private routines and declarations for generic
+ *  fontconfig operation
+ *
+ * Copyright (C) 2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOFC_PRIVATE_H__
+#define __PANGOFC_PRIVATE_H__
+
+#include <pangofc-fontmap.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _PangoFcMetricsInfo  PangoFcMetricsInfo;
+
+struct _PangoFcMetricsInfo
+{
+  const char       *sample_str;
+  PangoFontMetrics *metrics;
+};
+
+
+typedef struct _PangoFcCmapCacheEntry  PangoFcCmapCacheEntry;
+typedef struct _PangoFcCmapCache       PangoFcCmapCache;
+
+#define CMAP_CACHE_NUM_ENTRIES 256 /* should be power of two */
+#define CMAP_CACHE_MASK (CMAP_CACHE_NUM_ENTRIES - 1)
+
+struct _PangoFcCmapCacheEntry
+{
+  gunichar   ch;
+  PangoGlyph glyph;
+};
+
+struct _PangoFcCmapCache
+{
+  guint ref_count;
+  PangoFcCmapCacheEntry entries[CMAP_CACHE_NUM_ENTRIES];
+};
+
+
+#define PANGO_SCALE_26_6 (PANGO_SCALE / (1<<6))
+#define PANGO_PIXELS_26_6(d)                           \
+  (((d) >= 0) ?                                                \
+   ((d) + PANGO_SCALE_26_6 / 2) / PANGO_SCALE_26_6 :   \
+   ((d) - PANGO_SCALE_26_6 / 2) / PANGO_SCALE_26_6)
+#define PANGO_UNITS_26_6(d) (PANGO_SCALE_26_6 * (d))
+
+void _pango_fc_font_shutdown (PangoFcFont *fcfont);
+
+void           _pango_fc_font_map_remove          (PangoFcFontMap *fcfontmap,
+                                                  PangoFcFont    *fcfont);
+
+PangoCoverage *_pango_fc_font_map_get_coverage    (PangoFcFontMap *fcfontmap,
+                                                  PangoFcFont    *fcfont);
+PangoCoverage  *_pango_fc_font_map_fc_to_coverage (FcCharSet      *charset);
+
+PangoFcCmapCache *_pango_fc_font_map_get_cmap_cache (PangoFcFontMap *fcfontmap,
+                                                    PangoFcFont    *fcfont);
+void              _pango_fc_cmap_cache_unref (PangoFcCmapCache *cmap_cache);
+
+PangoFcDecoder *_pango_fc_font_get_decoder       (PangoFcFont    *font);
+void            _pango_fc_font_set_decoder       (PangoFcFont    *font,
+                                                 PangoFcDecoder *decoder);
+
+PangoFcFontKey *_pango_fc_font_get_font_key      (PangoFcFont    *fcfont);
+void            _pango_fc_font_set_font_key      (PangoFcFont    *fcfont,
+                                                 PangoFcFontKey *key);
+
+void            pango_fc_font_get_raw_extents    (PangoFcFont    *font,
+                                                 FT_Int32        load_flags,
+                                                 PangoGlyph      glyph,
+                                                 PangoRectangle *ink_rect,
+                                                 PangoRectangle *logical_rect);
+
+PangoFontMetrics *pango_fc_font_create_metrics_for_context (PangoFcFont   *font,
+                                                           PangoContext  *context);
+
+
+
+/* To be made public at some point */
+
+#include <math.h>
+
+static G_GNUC_UNUSED void
+pango_matrix_get_font_scale_factors (const PangoMatrix *matrix,
+                                    double *xscale, double *yscale)
+{
+/*
+ * Based on cairo-matrix.c:_cairo_matrix_compute_scale_factors()
+ *
+ * Copyright 2005, Keith Packard
+ */
+  double major = 0, minor = 0;
+
+  if (matrix) {
+    double det = matrix->xx * matrix->yy - matrix->yx * matrix->xy;
+
+    if (det)
+      {
+       double x = matrix->xx;
+       double y = matrix->yx;
+
+       major = sqrt (x*x + y*y);
+
+       /*
+        * ignore mirroring
+        */
+       if (det < 0)
+         det = - det;
+
+       if (major)
+         minor = det / major;
+      }
+  }
+
+  if (xscale)
+    *xscale = major;
+  if (yscale)
+    *yscale = minor;
+}
+
+G_END_DECLS
+
+#endif /* __PANGOFC_PRIVATE_H__ */
diff --git a/pango/pangoft2-fontmap.c b/pango/pangoft2-fontmap.c
new file mode 100755 (executable)
index 0000000..3da0f16
--- /dev/null
@@ -0,0 +1,354 @@
+/* Pango
+ * pangoft2-fontmap.c:
+ *
+ * Copyright (C) 2000 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include <fontconfig/fontconfig.h>
+
+#include "pango-impl-utils.h"
+#include "pangoft2-private.h"
+#include "pangofc-fontmap.h"
+
+typedef struct _PangoFT2Family       PangoFT2Family;
+typedef struct _PangoFT2FontMapClass PangoFT2FontMapClass;
+
+struct _PangoFT2FontMap
+{
+  PangoFcFontMap parent_instance;
+
+  FT_Library library;
+
+  double dpi_x;
+  double dpi_y;
+
+  /* Function to call on prepared patterns to do final
+   * config tweaking.
+   */
+  PangoFT2SubstituteFunc substitute_func;
+  gpointer substitute_data;
+  GDestroyNotify substitute_destroy;
+
+  PangoRenderer *renderer;
+};
+
+struct _PangoFT2FontMapClass
+{
+  PangoFcFontMapClass parent_class;
+};
+
+static void          pango_ft2_font_map_finalize            (GObject              *object);
+static PangoFcFont * pango_ft2_font_map_new_font            (PangoFcFontMap       *fcfontmap,
+                                                            FcPattern            *pattern);
+static double        pango_ft2_font_map_get_resolution      (PangoFcFontMap       *fcfontmap,
+                                                            PangoContext         *context);
+
+static PangoFT2FontMap *pango_ft2_global_fontmap = NULL;
+
+G_DEFINE_TYPE (PangoFT2FontMap, pango_ft2_font_map, PANGO_TYPE_FC_FONT_MAP)
+
+static void
+pango_ft2_font_map_class_init (PangoFT2FontMapClass *class)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+  PangoFcFontMapClass *fcfontmap_class = PANGO_FC_FONT_MAP_CLASS (class);
+
+  gobject_class->finalize = pango_ft2_font_map_finalize;
+  fcfontmap_class->default_substitute = _pango_ft2_font_map_default_substitute;
+  fcfontmap_class->new_font = pango_ft2_font_map_new_font;
+  fcfontmap_class->get_resolution = pango_ft2_font_map_get_resolution;
+}
+
+static void
+pango_ft2_font_map_init (PangoFT2FontMap *fontmap)
+{
+  fontmap->library = NULL;
+  fontmap->dpi_x   = 72.0;
+  fontmap->dpi_y   = 72.0;
+}
+
+static void
+pango_ft2_font_map_finalize (GObject *object)
+{
+  PangoFT2FontMap *ft2fontmap = PANGO_FT2_FONT_MAP (object);
+
+  if (ft2fontmap->renderer)
+    g_object_unref (ft2fontmap->renderer);
+
+  if (ft2fontmap->substitute_destroy)
+    ft2fontmap->substitute_destroy (ft2fontmap->substitute_data);
+
+  G_OBJECT_CLASS (pango_ft2_font_map_parent_class)->finalize (object);
+
+  FT_Done_FreeType (ft2fontmap->library);
+}
+
+/**
+ * pango_ft2_font_map_new:
+ *
+ * Create a new #PangoFT2FontMap object; a fontmap is used
+ * to cache information about available fonts, and holds
+ * certain global parameters such as the resolution and
+ * the default substitute function (see
+ * pango_ft2_font_map_set_default_substitute()).
+ *
+ * Return value: the newly created fontmap object. Unref
+ * with g_object_unref() when you are finished with it.
+ *
+ * Since: 1.2
+ **/
+PangoFontMap *
+pango_ft2_font_map_new (void)
+{
+  PangoFT2FontMap *ft2fontmap;
+  FT_Error error;
+
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+  ft2fontmap = g_object_new (PANGO_TYPE_FT2_FONT_MAP, NULL);
+
+  error = FT_Init_FreeType (&ft2fontmap->library);
+  if (error != FT_Err_Ok)
+    g_critical ("pango_ft2_font_map_new: Could not initialize freetype");
+
+  return (PangoFontMap *)ft2fontmap;
+}
+
+/**
+ * pango_ft2_font_map_set_default_substitute:
+ * @fontmap: a #PangoFT2FontMap
+ * @func: function to call to to do final config tweaking
+ *        on #FcPattern objects.
+ * @data: data to pass to @func
+ * @notify: function to call when @data is no longer used.
+ *
+ * Sets a function that will be called to do final configuration
+ * substitution on a #FcPattern before it is used to load
+ * the font. This function can be used to do things like set
+ * hinting and antialiasing options.
+ *
+ * Since: 1.2
+ **/
+void
+pango_ft2_font_map_set_default_substitute (PangoFT2FontMap        *fontmap,
+                                          PangoFT2SubstituteFunc  func,
+                                          gpointer                data,
+                                          GDestroyNotify          notify)
+{
+  if (fontmap->substitute_destroy)
+    fontmap->substitute_destroy (fontmap->substitute_data);
+
+  fontmap->substitute_func = func;
+  fontmap->substitute_data = data;
+  fontmap->substitute_destroy = notify;
+
+  pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
+}
+
+/**
+ * pango_ft2_font_map_substitute_changed:
+ * @fontmap: a #PangoFT2Fontmap
+ *
+ * Call this function any time the results of the
+ * default substitution function set with
+ * pango_ft2_font_map_set_default_substitute() change.
+ * That is, if your substitution function will return different
+ * results for the same input pattern, you must call this function.
+ *
+ * Since: 1.2
+ **/
+void
+pango_ft2_font_map_substitute_changed (PangoFT2FontMap *fontmap)
+{
+  pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
+}
+
+/**
+ * pango_ft2_font_map_set_resolution:
+ * @fontmap: a #PangoFT2Fontmap
+ * @dpi_x: dots per inch in the X direction
+ * @dpi_y: dots per inch in the Y direction
+ *
+ * Sets the horizontal and vertical resolutions for the fontmap.
+ *
+ * Since: 1.2
+ **/
+void
+pango_ft2_font_map_set_resolution (PangoFT2FontMap *fontmap,
+                                  double           dpi_x,
+                                  double           dpi_y)
+{
+  g_return_if_fail (PANGO_FT2_IS_FONT_MAP (fontmap));
+
+  fontmap->dpi_x = dpi_x;
+  fontmap->dpi_y = dpi_y;
+
+  pango_ft2_font_map_substitute_changed (fontmap);
+}
+
+/**
+ * pango_ft2_font_map_create_context:
+ * @fontmap: a #PangoFT2Fontmap
+ *
+ * Create a #PangoContext for the given fontmap.
+ *
+ * Return value: the newly created context; free with g_object_unref().
+ *
+ * Since: 1.2
+ *
+ * Deprecated: 1.22: Use pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_ft2_font_map_create_context (PangoFT2FontMap *fontmap)
+{
+  g_return_val_if_fail (PANGO_FT2_IS_FONT_MAP (fontmap), NULL);
+
+  return pango_font_map_create_context (PANGO_FONT_MAP (fontmap));
+}
+
+/**
+ * pango_ft2_get_context:
+ * @dpi_x:  the horizontal DPI of the target device
+ * @dpi_y:  the vertical DPI of the target device
+ *
+ * Retrieves a #PangoContext for the default PangoFT2 fontmap
+ * (see pango_ft2_fontmap_get_for_display()) and sets the resolution
+ * for the default fontmap to @dpi_x by @dpi_y.
+ *
+ * Return value: the new #PangoContext
+ *
+ * Deprecated: 1.22: Use pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_ft2_get_context (double dpi_x, double dpi_y)
+{
+  PangoFontMap *fontmap;
+
+  fontmap = pango_ft2_font_map_for_display ();
+  pango_ft2_font_map_set_resolution (PANGO_FT2_FONT_MAP (fontmap), dpi_x, dpi_y);
+
+  return pango_font_map_create_context (fontmap);
+}
+
+/**
+ * pango_ft2_font_map_for_display:
+ *
+ * Returns a #PangoFT2FontMap. This font map is cached and should
+ * not be freed. If the font map is no longer needed, it can
+ * be released with pango_ft2_shutdown_display(). Use of the
+ * global PangoFT2 fontmap is deprecated; use pango_ft2_font_map_new()
+ * instead.
+ *
+ * Return value: a #PangoFT2FontMap.
+ **/
+PangoFontMap *
+pango_ft2_font_map_for_display (void)
+{
+  if (pango_ft2_global_fontmap != NULL)
+    return PANGO_FONT_MAP (pango_ft2_global_fontmap);
+
+  pango_ft2_global_fontmap = (PangoFT2FontMap *)pango_ft2_font_map_new ();
+
+  return PANGO_FONT_MAP (pango_ft2_global_fontmap);
+}
+
+/**
+ * pango_ft2_shutdown_display:
+ *
+ * Free the global fontmap. (See pango_ft2_font_map_for_display())
+ * Use of the global PangoFT2 fontmap is deprecated.
+ **/
+void
+pango_ft2_shutdown_display (void)
+{
+  if (pango_ft2_global_fontmap)
+    {
+      pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (pango_ft2_global_fontmap));
+
+      g_object_unref (pango_ft2_global_fontmap);
+
+      pango_ft2_global_fontmap = NULL;
+    }
+}
+
+FT_Library
+_pango_ft2_font_map_get_library (PangoFontMap *fontmap)
+{
+  PangoFT2FontMap *ft2fontmap = (PangoFT2FontMap *)fontmap;
+
+  return ft2fontmap->library;
+}
+
+
+/**
+ * _pango_ft2_font_map_get_renderer:
+ * @fontmap: a #PangoFT2Fontmap
+ *
+ * Gets the singleton PangoFT2Renderer for this fontmap.
+ *
+ * Return value: the renderer.
+ **/
+PangoRenderer *
+_pango_ft2_font_map_get_renderer (PangoFT2FontMap *ft2fontmap)
+{
+  if (!ft2fontmap->renderer)
+    ft2fontmap->renderer = g_object_new (PANGO_TYPE_FT2_RENDERER, NULL);
+
+  return ft2fontmap->renderer;
+}
+
+void
+_pango_ft2_font_map_default_substitute (PangoFcFontMap *fcfontmap,
+                                      FcPattern      *pattern)
+{
+  PangoFT2FontMap *ft2fontmap = PANGO_FT2_FONT_MAP (fcfontmap);
+  FcValue v;
+
+  FcConfigSubstitute (NULL, pattern, FcMatchPattern);
+
+  if (ft2fontmap->substitute_func)
+    ft2fontmap->substitute_func (pattern, ft2fontmap->substitute_data);
+
+  if (FcPatternGet (pattern, FC_DPI, 0, &v) == FcResultNoMatch)
+    FcPatternAddDouble (pattern, FC_DPI, ft2fontmap->dpi_y);
+  FcDefaultSubstitute (pattern);
+}
+
+static double
+pango_ft2_font_map_get_resolution (PangoFcFontMap       *fcfontmap,
+                                  PangoContext         *context G_GNUC_UNUSED)
+{
+  return ((PangoFT2FontMap *)fcfontmap)->dpi_y;
+}
+
+static PangoFcFont *
+pango_ft2_font_map_new_font (PangoFcFontMap  *fcfontmap,
+                            FcPattern       *pattern)
+{
+  return (PangoFcFont *)_pango_ft2_font_new (PANGO_FT2_FONT_MAP (fcfontmap), pattern);
+}
diff --git a/pango/pangoft2-private.h b/pango/pangoft2-private.h
new file mode 100755 (executable)
index 0000000..cf00d38
--- /dev/null
@@ -0,0 +1,118 @@
+/* Pango
+ * pangoft2-private.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOFT2_PRIVATE_H__
+#define __PANGOFT2_PRIVATE_H__
+
+#include <pango/pangoft2.h>
+#include <pango/pangofc-fontmap.h>
+#include <pango/pango-renderer.h>
+#include <fontconfig/fontconfig.h>
+
+/* Debugging... */
+/*#define DEBUGGING 1*/
+
+#if defined(DEBUGGING) && DEBUGGING
+#ifdef __GNUC__
+#define PING(printlist)                                        \
+(g_print ("%s:%d ", __PRETTY_FUNCTION__, __LINE__),    \
+ g_print printlist,                                    \
+ g_print ("\n"))
+#else
+#define PING(printlist)                                        \
+(g_print ("%s:%d ", __FILE__, __LINE__),               \
+ g_print printlist,                                    \
+ g_print ("\n"))
+#endif
+#else  /* !DEBUGGING */
+#define PING(printlist)
+#endif
+
+typedef struct _PangoFT2Font      PangoFT2Font;
+typedef struct _PangoFT2GlyphInfo PangoFT2GlyphInfo;
+typedef struct _PangoFT2Renderer  PangoFT2Renderer;
+
+struct _PangoFT2Font
+{
+  PangoFcFont font;
+
+  FT_Face face;
+  int load_flags;
+
+  int size;
+
+  GSList *metrics_by_lang;
+
+  GHashTable *glyph_info;
+  GDestroyNotify glyph_cache_destroy;
+};
+
+struct _PangoFT2GlyphInfo
+{
+  PangoRectangle logical_rect;
+  PangoRectangle ink_rect;
+  void *cached_glyph;
+};
+
+#define PANGO_TYPE_FT2_FONT              (pango_ft2_font_get_type ())
+#define PANGO_FT2_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FT2_FONT, PangoFT2Font))
+#define PANGO_FT2_IS_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FT2_FONT))
+
+GType pango_ft2_font_get_type (void) G_GNUC_CONST;
+
+PangoFT2Font * _pango_ft2_font_new                (PangoFT2FontMap   *ft2fontmap,
+                                                  FcPattern         *pattern);
+FT_Library     _pango_ft2_font_map_get_library    (PangoFontMap      *fontmap);
+const char    *_pango_ft2_ft_strerror             (FT_Error           error);
+void _pango_ft2_font_map_default_substitute (PangoFcFontMap *fcfontmap,
+                                            FcPattern      *pattern);
+
+void *_pango_ft2_font_get_cache_glyph_data    (PangoFont      *font,
+                                              int             glyph_index);
+void  _pango_ft2_font_set_cache_glyph_data    (PangoFont      *font,
+                                              int             glyph_index,
+                                              void           *cached_glyph);
+void  _pango_ft2_font_set_glyph_cache_destroy (PangoFont      *font,
+                                              GDestroyNotify  destroy_notify);
+
+void _pango_ft2_draw_rect            (FT_Bitmap         *bitmap,
+                                     const PangoMatrix *matrix,
+                                     int                x,
+                                     int                y,
+                                     int                width,
+                                     int                height);
+void _pango_ft2_draw_error_underline (FT_Bitmap         *bitmap,
+                                     const PangoMatrix *matrix,
+                                     int                x,
+                                     int                y,
+                                     int                width,
+                                     int                height);
+
+#define PANGO_TYPE_FT2_RENDERER            (pango_ft2_renderer_get_type())
+#define PANGO_FT2_RENDERER(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FT2_RENDERER, PangoFT2Renderer))
+#define PANGO_IS_FT2_RENDERER(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FT2_RENDERER))
+
+GType pango_ft2_renderer_get_type    (void) G_GNUC_CONST;
+
+PangoRenderer *_pango_ft2_font_map_get_renderer (PangoFT2FontMap *ft2fontmap);
+
+#endif /* __PANGOFT2_PRIVATE_H__ */
diff --git a/pango/pangoft2-render.c b/pango/pangoft2-render.c
new file mode 100755 (executable)
index 0000000..bd3b7d4
--- /dev/null
@@ -0,0 +1,738 @@
+/* Pango
+ * pangoft2-render.c: Rendering routines to FT_Bitmap objects
+ *
+ * Copyright (C) 2004 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <math.h>
+
+#include "pangoft2-private.h"
+
+/* for compatibility with older freetype versions */
+#ifndef FT_LOAD_TARGET_MONO
+#define FT_LOAD_TARGET_MONO  FT_LOAD_MONOCHROME
+#endif
+
+typedef struct _PangoFT2RendererClass PangoFT2RendererClass;
+
+#define PANGO_FT2_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FT2_RENDERER, PangoFT2RendererClass))
+#define PANGO_IS_FT2_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FT2_RENDERER))
+#define PANGO_FT2_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FT2_RENDERER, PangoFT2RendererClass))
+
+struct _PangoFT2Renderer
+{
+  PangoRenderer parent_instance;
+
+  FT_Bitmap *bitmap;
+};
+
+struct _PangoFT2RendererClass
+{
+  PangoRendererClass parent_class;
+};
+
+static void pango_ft2_renderer_draw_glyph     (PangoRenderer    *renderer,
+                                              PangoFont        *font,
+                                              PangoGlyph        glyph,
+                                              double            x,
+                                              double            y);
+static void pango_ft2_renderer_draw_trapezoid (PangoRenderer    *renderer,
+                                              PangoRenderPart   part,
+                                              double            y1,
+                                              double            x11,
+                                              double            x21,
+                                              double            y2,
+                                              double            x12,
+                                              double            x22);
+
+G_DEFINE_TYPE (PangoFT2Renderer, pango_ft2_renderer, PANGO_TYPE_RENDERER)
+
+static void
+pango_ft2_renderer_init (PangoFT2Renderer *renderer G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_ft2_renderer_class_init (PangoFT2RendererClass *klass)
+{
+  PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass);
+
+  renderer_class->draw_glyph = pango_ft2_renderer_draw_glyph;
+  renderer_class->draw_trapezoid = pango_ft2_renderer_draw_trapezoid;
+}
+
+static void
+pango_ft2_renderer_set_bitmap (PangoFT2Renderer *renderer,
+                             FT_Bitmap         *bitmap)
+{
+  renderer->bitmap = bitmap;
+}
+
+typedef struct
+{
+  FT_Bitmap bitmap;
+  int bitmap_left;
+  int bitmap_top;
+} PangoFT2RenderedGlyph;
+
+static void
+pango_ft2_free_rendered_glyph (PangoFT2RenderedGlyph *rendered)
+{
+  g_free (rendered->bitmap.buffer);
+  g_slice_free (PangoFT2RenderedGlyph, rendered);
+}
+
+static PangoFT2RenderedGlyph *
+pango_ft2_font_render_box_glyph (int      width,
+                                int      height,
+                                int      top,
+                                gboolean invalid)
+{
+  PangoFT2RenderedGlyph *box;
+  int i, j, offset1, offset2, line_width;
+
+  line_width = MAX ((height + 43) / 44, 1);
+  if (width < 1 || height < 1)
+    line_width = 0;
+
+  box = g_slice_new (PangoFT2RenderedGlyph);
+
+  box->bitmap_left = 0;
+  box->bitmap_top = top;
+
+  box->bitmap.pixel_mode = ft_pixel_mode_grays;
+
+  box->bitmap.width = width;
+  box->bitmap.rows = height;
+  box->bitmap.pitch = height;
+
+  box->bitmap.buffer = g_malloc0 (box->bitmap.rows * box->bitmap.pitch);
+
+  /* draw the box */
+  for (j = 0; j < line_width; j++)
+    {
+      offset1 = box->bitmap.pitch * (MIN (1 + j, height - 1));
+      offset2 = box->bitmap.pitch * (MAX (box->bitmap.rows - 2 - j, 0));
+      for (i = 1;
+          i < box->bitmap.width - 1;
+          i++)
+       {
+         box->bitmap.buffer[offset1 + i] = 0xff;
+         box->bitmap.buffer[offset2 + i] = 0xff;
+       }
+    }
+  for (j = 0; j < line_width; j++)
+    {
+      offset1 = MIN (1 + j, width - 1);
+      offset2 = MAX (box->bitmap.width - 2 - j, 0);
+      for (i = box->bitmap.pitch;
+          i < (box->bitmap.rows - 1) * box->bitmap.pitch;
+          i += box->bitmap.pitch)
+       {
+         box->bitmap.buffer[offset1 + i] = 0xff;
+         box->bitmap.buffer[offset2 + i] = 0xff;
+       }
+    }
+
+  if (invalid)
+    {
+      /* XXX This may scrabble memory.  Didn't check close enough */
+      int inc = PANGO_SCALE * MAX (width - line_width, 0) / (height + 1);
+      offset1 = PANGO_SCALE;
+      offset2 = PANGO_SCALE * MAX (width - line_width - 1, 0) ;
+      for (i = box->bitmap.pitch;
+          i < (box->bitmap.rows - 1) * box->bitmap.pitch;
+          i += box->bitmap.pitch)
+        {
+         for (j = 0; j < line_width; j++)
+           {
+             box->bitmap.buffer[PANGO_PIXELS (offset1) + i + j] = 0xff;
+             box->bitmap.buffer[PANGO_PIXELS (offset2) + i + j] = 0xff;
+           }
+         offset1 += inc;
+         offset2 -= inc;
+       }
+
+    }
+
+  return box;
+}
+
+static PangoFT2RenderedGlyph *
+pango_ft2_font_render_glyph (PangoFont *font,
+                            PangoGlyph glyph_index)
+{
+  FT_Face face;
+  gboolean invalid_input;
+
+  invalid_input = glyph_index == PANGO_GLYPH_INVALID_INPUT || (glyph_index & ~PANGO_GLYPH_UNKNOWN_FLAG) > 0x10FFFF;
+
+  if (glyph_index & PANGO_GLYPH_UNKNOWN_FLAG)
+    {
+      PangoFT2RenderedGlyph *box;
+      PangoFontMetrics *metrics;
+
+      if (!font)
+       goto generic_box;
+
+      metrics = pango_font_get_metrics (font, NULL);
+      if (!metrics)
+       goto generic_box;
+
+      box = pango_ft2_font_render_box_glyph (PANGO_PIXELS (metrics->approximate_char_width),
+                                            PANGO_PIXELS (metrics->ascent + metrics->descent),
+                                            PANGO_PIXELS (metrics->ascent),
+                                            invalid_input);
+      pango_font_metrics_unref (metrics);
+
+      return box;
+    }
+
+  face = pango_ft2_font_get_face (font);
+
+  if (face)
+    {
+      PangoFT2RenderedGlyph *rendered;
+      PangoFT2Font *ft2font = (PangoFT2Font *) font;
+
+      rendered = g_slice_new (PangoFT2RenderedGlyph);
+
+      /* Draw glyph */
+      FT_Load_Glyph (face, glyph_index, ft2font->load_flags);
+      FT_Render_Glyph (face->glyph,
+                      (ft2font->load_flags & FT_LOAD_TARGET_MONO ?
+                       ft_render_mode_mono : ft_render_mode_normal));
+
+      rendered->bitmap = face->glyph->bitmap;
+      rendered->bitmap.buffer = g_memdup (face->glyph->bitmap.buffer,
+                                         face->glyph->bitmap.rows * face->glyph->bitmap.pitch);
+      rendered->bitmap_left = face->glyph->bitmap_left;
+      rendered->bitmap_top = face->glyph->bitmap_top;
+
+      return rendered;
+    }
+  else
+    {
+generic_box:
+      return  pango_ft2_font_render_box_glyph (PANGO_UNKNOWN_GLYPH_WIDTH,
+                                              PANGO_UNKNOWN_GLYPH_HEIGHT,
+                                              PANGO_UNKNOWN_GLYPH_HEIGHT,
+                                              invalid_input);
+    }
+}
+
+static void
+pango_ft2_renderer_draw_glyph (PangoRenderer *renderer,
+                              PangoFont     *font,
+                              PangoGlyph     glyph,
+                              double         x,
+                              double         y)
+{
+  FT_Bitmap *bitmap = PANGO_FT2_RENDERER (renderer)->bitmap;
+  PangoFT2RenderedGlyph *rendered_glyph;
+  gboolean add_glyph_to_cache;
+  guchar *src, *dest;
+
+  int x_start, x_limit;
+  int y_start, y_limit;
+  int ixoff = floor (x + 0.5);
+  int iyoff = floor (y + 0.5);
+  int ix, iy;
+
+  if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+    {
+      /* Since we don't draw hexbox for FT2 renderer,
+       * unifiy the rendered bitmap in the cache by converting
+       * all missing glyphs to either INVALID_INPUT or UNKNOWN_FLAG.
+       */
+
+      gunichar wc = glyph & (~PANGO_GLYPH_UNKNOWN_FLAG);
+
+      if (G_UNLIKELY (glyph == PANGO_GLYPH_INVALID_INPUT || wc > 0x10FFFF))
+       glyph = PANGO_GLYPH_INVALID_INPUT;
+      else
+       glyph = PANGO_GLYPH_UNKNOWN_FLAG;
+    }
+
+  rendered_glyph = _pango_ft2_font_get_cache_glyph_data (font, glyph);
+  add_glyph_to_cache = FALSE;
+  if (rendered_glyph == NULL)
+    {
+      rendered_glyph = pango_ft2_font_render_glyph (font, glyph);
+      add_glyph_to_cache = TRUE;
+    }
+
+  x_start = MAX (0, - (ixoff + rendered_glyph->bitmap_left));
+  x_limit = MIN (rendered_glyph->bitmap.width,
+                bitmap->width - (ixoff + rendered_glyph->bitmap_left));
+
+  y_start = MAX (0,  - (iyoff - rendered_glyph->bitmap_top));
+  y_limit = MIN (rendered_glyph->bitmap.rows,
+                bitmap->rows - (iyoff - rendered_glyph->bitmap_top));
+
+  src = rendered_glyph->bitmap.buffer +
+    y_start * rendered_glyph->bitmap.pitch;
+
+  dest = bitmap->buffer +
+    (y_start + iyoff - rendered_glyph->bitmap_top) * bitmap->pitch +
+    x_start + ixoff + rendered_glyph->bitmap_left;
+
+  switch (rendered_glyph->bitmap.pixel_mode)
+    {
+    case ft_pixel_mode_grays:
+      src += x_start;
+      for (iy = y_start; iy < y_limit; iy++)
+       {
+         guchar *s = src;
+         guchar *d = dest;
+
+         for (ix = x_start; ix < x_limit; ix++)
+           {
+             switch (*s)
+               {
+               case 0:
+                 break;
+               case 0xff:
+                 *d = 0xff;
+               default:
+                 *d = MIN ((gushort) *d + (gushort) *s, 0xff);
+                 break;
+               }
+
+             s++;
+             d++;
+           }
+
+         dest += bitmap->pitch;
+         src  += rendered_glyph->bitmap.pitch;
+       }
+      break;
+
+    case ft_pixel_mode_mono:
+      src += x_start / 8;
+      for (iy = y_start; iy < y_limit; iy++)
+       {
+         guchar *s = src;
+         guchar *d = dest;
+
+         for (ix = x_start; ix < x_limit; ix++)
+           {
+             if ((*s) & (1 << (7 - (ix % 8))))
+               *d |= 0xff;
+
+             if ((ix % 8) == 7)
+               s++;
+             d++;
+           }
+
+         dest += bitmap->pitch;
+         src  += rendered_glyph->bitmap.pitch;
+       }
+      break;
+
+    default:
+      g_warning ("pango_ft2_render: "
+                "Unrecognized glyph bitmap pixel mode %d\n",
+                rendered_glyph->bitmap.pixel_mode);
+      break;
+    }
+
+  if (add_glyph_to_cache)
+    {
+      _pango_ft2_font_set_glyph_cache_destroy (font,
+                                              (GDestroyNotify) pango_ft2_free_rendered_glyph);
+      _pango_ft2_font_set_cache_glyph_data (font,
+                                           glyph, rendered_glyph);
+    }
+}
+
+typedef struct {
+  double y;
+  double x1;
+  double x2;
+} Position;
+
+static void
+draw_simple_trap (PangoRenderer *renderer,
+                 Position      *t,
+                 Position      *b)
+{
+  FT_Bitmap *bitmap = PANGO_FT2_RENDERER (renderer)->bitmap;
+  int iy = floor (t->y);
+  int x1, x2, x;
+  double dy = b->y - t->y;
+  guchar *dest;
+
+  if (iy < 0 || iy >= bitmap->rows)
+    return;
+  dest = bitmap->buffer + iy * bitmap->pitch;
+
+  if (t->x1 < b->x1)
+    x1 = floor (t->x1);
+  else
+    x1 = floor (b->x1);
+
+  if (t->x2 > b->x2)
+    x2 = ceil (t->x2);
+  else
+    x2 = ceil (b->x2);
+
+  x1 = CLAMP (x1, 0, bitmap->width);
+  x2 = CLAMP (x2, 0, bitmap->width);
+
+  for (x = x1; x < x2; x++)
+    {
+      double top_left = MAX (t->x1, x);
+      double top_right = MIN (t->x2, x + 1);
+      double bottom_left = MAX (b->x1, x);
+      double bottom_right = MIN (b->x2, x + 1);
+      double c = 0.5 * dy * ((top_right - top_left) + (bottom_right - bottom_left));
+
+      /* When converting to [0,255], we round up. This is intended
+       * to prevent the problem of pixels that get divided into
+       * multiple slices not being fully black.
+       */
+      int ic = c * 256;
+
+      dest[x] = MIN (dest[x] + ic, 255);
+    }
+}
+
+static void
+interpolate_position (Position *result,
+                     Position *top,
+                     Position *bottom,
+                     double    val,
+                     double    val1,
+                     double    val2)
+{
+  result->y  = (top->y *  (val2 - val) + bottom->y *  (val - val1)) / (val2 - val1);
+  result->x1 = (top->x1 * (val2 - val) + bottom->x1 * (val - val1)) / (val2 - val1);
+  result->x2 = (top->x2 * (val2 - val) + bottom->x2 * (val - val1)) / (val2 - val1);
+}
+
+/* This draws a trapezoid with the parallel sides aligned with
+ * the X axis. We do this by subdividing the trapezoid vertically
+ * into thin slices (themselves trapezoids) where two edge sides are each
+ * contained within a single pixel and then rasterizing each
+ * slice. There are frequently multiple slices within a single
+ * line so we have to accumulate to get the final result.
+ */
+static void
+pango_ft2_renderer_draw_trapezoid (PangoRenderer   *renderer,
+                                  PangoRenderPart  part G_GNUC_UNUSED,
+                                  double           y1,
+                                  double           x11,
+                                  double           x21,
+                                  double           y2,
+                                  double           x12,
+                                  double           x22)
+{
+  Position pos;
+  Position t;
+  Position b;
+  gboolean done = FALSE;
+
+  if (y1 == y2)
+    return;
+
+  pos.y = t.y = y1;
+  pos.x1 = t.x1 = x11;
+  pos.x2 = t.x2 = x21;
+  b.y = y2;
+  b.x1 = x12;
+  b.x2 = x22;
+
+  while (!done)
+    {
+      Position pos_next;
+      double y_next, x1_next, x2_next;
+      double ix1, ix2;
+
+      /* The algorithm here is written to emphasize simplicity and
+       * numerical stability as opposed to speed.
+       *
+       * While the end result is slicing up the polygon vertically,
+       * conceptually we aren't walking in the X direction, rather we
+       * are walking along the edges. When we compute crossing of
+       * horizontal pixel boundaries, we use the X coordinate as the
+       * interpolating variable, when we compute crossing for vertical
+       * pixel boundaries, we use the Y coordinate.
+       *
+       * This allows us to handle almost exactly horizontal edges without
+       * running into difficulties. (Almost exactly horizontal edges
+       * come up frequently due to inexactness in computing, say,
+       * a 90 degree rotation transformation)
+       */
+
+      pos_next = b;
+      done = TRUE;
+
+      /* Check for crossing vertical pixel boundaries */
+      y_next = floor (pos.y) + 1;
+      if (y_next < pos_next.y)
+       {
+         interpolate_position (&pos_next, &t, &b,
+                               y_next, t.y, b.y);
+         pos_next.y = y_next;
+         done = FALSE;
+       }
+
+      /* Check left side for crossing horizontal pixel boundaries */
+      ix1 = floor (pos.x1);
+
+      if (b.x1 < t.x1)
+       {
+         if (ix1 == pos.x1)
+           x1_next = ix1 - 1;
+         else
+           x1_next = ix1;
+
+         if (x1_next > pos_next.x1)
+           {
+             interpolate_position (&pos_next, &t, &b,
+                                   x1_next, t.x1, b.x1);
+             pos_next.x1 = x1_next;
+             done = FALSE;
+           }
+       }
+      else if (b.x1 > t.x1)
+       {
+         x1_next = ix1 + 1;
+
+         if (x1_next < pos_next.x1)
+           {
+             interpolate_position (&pos_next, &t, &b,
+                                   x1_next, t.x1, b.x1);
+             pos_next.x1 = x1_next;
+             done = FALSE;
+           }
+       }
+
+      /* Check right side for crossing horizontal pixel boundaries */
+      ix2 = floor (pos.x2);
+
+      if (b.x2 < t.x2)
+       {
+         if (ix2 == pos.x2)
+           x2_next = ix2 - 1;
+         else
+           x2_next = ix2;
+
+         if (x2_next > pos_next.x2)
+           {
+             interpolate_position (&pos_next, &t, &b,
+                                   x2_next, t.x2, b.x2);
+             pos_next.x2 = x2_next;
+             done = FALSE;
+           }
+       }
+      else if (x22 > x21)
+       {
+         x2_next = ix2 + 1;
+
+         if (x2_next < pos_next.x2)
+           {
+             interpolate_position (&pos_next, &t, &b,
+                                   x2_next, t.x2, b.x2);
+             pos_next.x2 = x2_next;
+             done = FALSE;
+           }
+       }
+
+      draw_simple_trap (renderer, &pos, &pos_next);
+      pos = pos_next;
+    }
+}
+
+/**
+ * pango_ft2_render_layout_subpixel:
+ * @bitmap:    a <type>FT_Bitmap</type> to render the layout onto
+ * @layout:    a #PangoLayout
+ * @x:         the X position of the left of the layout (in Pango units)
+ * @y:         the Y position of the top of the layout (in Pango units)
+ *
+ * Render a #PangoLayout onto a FreeType2 bitmap, with he
+ * location specified in fixed-point Pango units rather than
+ * pixels. (Using this will avoid extra inaccuracies from
+ * rounding to integer pixels multiple times, even if the
+ * final glyph positions are integers.)
+ *
+ * Since: 1.6
+ */
+void
+pango_ft2_render_layout_subpixel (FT_Bitmap   *bitmap,
+                                 PangoLayout *layout,
+                                 int          x,
+                                 int          y)
+{
+  PangoContext *context;
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (bitmap != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  context = pango_layout_get_context (layout);
+  fontmap = pango_context_get_font_map (context);
+  renderer = _pango_ft2_font_map_get_renderer (PANGO_FT2_FONT_MAP (fontmap));
+
+  pango_ft2_renderer_set_bitmap (PANGO_FT2_RENDERER (renderer), bitmap);
+
+  pango_renderer_draw_layout (renderer, layout, x, y);
+}
+
+/**
+ * pango_ft2_render_layout:
+ * @bitmap:    a <type>FT_Bitmap</type> to render the layout onto
+ * @layout:    a #PangoLayout
+ * @x:         the X position of the left of the layout (in pixels)
+ * @y:         the Y position of the top of the layout (in pixels)
+ *
+ * Render a #PangoLayout onto a FreeType2 bitmap
+ */
+void
+pango_ft2_render_layout (FT_Bitmap   *bitmap,
+                        PangoLayout *layout,
+                        int          x,
+                        int          y)
+{
+  pango_ft2_render_layout_subpixel (bitmap, layout, x * PANGO_SCALE, y * PANGO_SCALE);
+}
+
+/**
+ * pango_ft2_render_layout_line_subpixel:
+ * @bitmap:    a <type>FT_Bitmap</type> to render the line onto
+ * @line:      a #PangoLayoutLine
+ * @x:         the x position of start of string (in Pango units)
+ * @y:         the y position of baseline (in Pango units)
+ *
+ * Render a #PangoLayoutLine onto a FreeType2 bitmap, with he
+ * location specified in fixed-point Pango units rather than
+ * pixels. (Using this will avoid extra inaccuracies from
+ * rounding to integer pixels multiple times, even if the
+ * final glyph positions are integers.)
+ *
+ * Since: 1.6
+ */
+void
+pango_ft2_render_layout_line_subpixel (FT_Bitmap       *bitmap,
+                                      PangoLayoutLine *line,
+                                      int              x,
+                                      int              y)
+{
+  PangoContext *context;
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (bitmap != NULL);
+  g_return_if_fail (line != NULL);
+
+  context = pango_layout_get_context (line->layout);
+  fontmap = pango_context_get_font_map (context);
+  renderer = _pango_ft2_font_map_get_renderer (PANGO_FT2_FONT_MAP (fontmap));
+
+  pango_ft2_renderer_set_bitmap (PANGO_FT2_RENDERER (renderer), bitmap);
+
+  pango_renderer_draw_layout_line (renderer, line, x, y);
+}
+
+/**
+ * pango_ft2_render_layout_line:
+ * @bitmap:    a <type>FT_Bitmap</type> to render the line onto
+ * @line:      a #PangoLayoutLine
+ * @x:         the x position of start of string (in pixels)
+ * @y:         the y position of baseline (in pixels)
+ *
+ * Render a #PangoLayoutLine onto a FreeType2 bitmap
+ */
+void
+pango_ft2_render_layout_line (FT_Bitmap       *bitmap,
+                             PangoLayoutLine *line,
+                             int              x,
+                             int              y)
+{
+  pango_ft2_render_layout_line_subpixel (bitmap, line, x * PANGO_SCALE, y * PANGO_SCALE);
+}
+
+/**
+ * pango_ft2_render_transformed:
+ * @bitmap:  the FreeType2 bitmap onto which to draw the string
+ * @font:    the font in which to draw the string
+ * @matrix:  a #PangoMatrix, or %NULL to use an identity transformation
+ * @glyphs:  the glyph string to draw
+ * @x:       the x position of the start of the string (in Pango
+ *           units in user space coordinates)
+ * @y:       the y position of the baseline (in Pango units
+ *           in user space coordinates)
+ *
+ * Renders a #PangoGlyphString onto a FreeType2 bitmap, possibly
+ * transforming the layed-out coordinates through a transformation
+ * matrix. Note that the transformation matrix for @font is not
+ * changed, so to produce correct rendering results, the @font
+ * must have been loaded using a #PangoContext with an identical
+ * transformation matrix to that passed in to this function.
+ *
+ * Since: 1.6
+ **/
+void
+pango_ft2_render_transformed (FT_Bitmap         *bitmap,
+                             const PangoMatrix *matrix,
+                             PangoFont         *font,
+                             PangoGlyphString  *glyphs,
+                             int                x,
+                             int                y)
+{
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (bitmap != NULL);
+  g_return_if_fail (glyphs != NULL);
+  g_return_if_fail (PANGO_FT2_IS_FONT (font));
+
+  fontmap = PANGO_FC_FONT (font)->fontmap;
+  renderer = _pango_ft2_font_map_get_renderer (PANGO_FT2_FONT_MAP (fontmap));
+
+  pango_ft2_renderer_set_bitmap (PANGO_FT2_RENDERER (renderer), bitmap);
+  pango_renderer_set_matrix (renderer, matrix);
+
+  pango_renderer_draw_glyphs (renderer, font, glyphs, x, y);
+}
+
+/**
+ * pango_ft2_render:
+ * @bitmap:  the FreeType2 bitmap onto which to draw the string
+ * @font:    the font in which to draw the string
+ * @glyphs:  the glyph string to draw
+ * @x:       the x position of the start of the string (in pixels)
+ * @y:       the y position of the baseline (in pixels)
+ *
+ * Renders a #PangoGlyphString onto a FreeType2 bitmap.
+ **/
+void
+pango_ft2_render (FT_Bitmap        *bitmap,
+                 PangoFont        *font,
+                 PangoGlyphString *glyphs,
+                 int               x,
+                 int               y)
+{
+  pango_ft2_render_transformed (bitmap, NULL, font, glyphs, x * PANGO_SCALE, y * PANGO_SCALE);
+}
+
diff --git a/pango/pangoft2.c b/pango/pangoft2.c
new file mode 100755 (executable)
index 0000000..f4a3864
--- /dev/null
@@ -0,0 +1,597 @@
+/* Pango
+ * pangoft2.c: Routines for handling FreeType2 fonts
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+
+#include "pangoft2.h"
+#include "pangoft2-private.h"
+#include "pangofc-fontmap.h"
+#include "pangofc-private.h"
+
+/* for compatibility with older freetype versions */
+#ifndef FT_LOAD_TARGET_MONO
+#define FT_LOAD_TARGET_MONO  FT_LOAD_MONOCHROME
+#endif
+
+#define PANGO_FT2_FONT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FT2_FONT, PangoFT2FontClass))
+#define PANGO_FT2_IS_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FT2_FONT))
+#define PANGO_FT2_FONT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FT2_FONT, PangoFT2FontClass))
+
+typedef struct _PangoFT2FontClass   PangoFT2FontClass;
+
+struct _PangoFT2FontClass
+{
+  PangoFcFontClass parent_class;
+};
+
+static void     pango_ft2_font_finalize          (GObject        *object);
+
+static void     pango_ft2_font_get_glyph_extents (PangoFont      *font,
+                                                  PangoGlyph      glyph,
+                                                  PangoRectangle *ink_rect,
+                                                  PangoRectangle *logical_rect);
+
+static FT_Face  pango_ft2_font_real_lock_face    (PangoFcFont    *font);
+static void     pango_ft2_font_real_unlock_face  (PangoFcFont    *font);
+
+
+PangoFT2Font *
+_pango_ft2_font_new (PangoFT2FontMap *ft2fontmap,
+                    FcPattern       *pattern)
+{
+  PangoFontMap *fontmap = PANGO_FONT_MAP (ft2fontmap);
+  PangoFT2Font *ft2font;
+  double d;
+
+  g_return_val_if_fail (fontmap != NULL, NULL);
+  g_return_val_if_fail (pattern != NULL, NULL);
+
+  ft2font = (PangoFT2Font *)g_object_new (PANGO_TYPE_FT2_FONT,
+                                         "pattern", pattern,
+                                         "fontmap", fontmap,
+                                         NULL);
+
+  if (FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &d) == FcResultMatch)
+    ft2font->size = d*PANGO_SCALE;
+
+  return ft2font;
+}
+
+static void
+load_fallback_face (PangoFT2Font *ft2font,
+                   const char   *original_file)
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (ft2font);
+  FcPattern *sans;
+  FcPattern *matched;
+  FcResult result;
+  FT_Error error;
+  FcChar8 *filename2 = NULL;
+  gchar *name;
+  int id;
+
+  sans = FcPatternBuild (NULL,
+                        FC_FAMILY,     FcTypeString, "sans",
+                        FC_PIXEL_SIZE, FcTypeDouble, (double)ft2font->size / PANGO_SCALE,
+                        NULL);
+
+  _pango_ft2_font_map_default_substitute ((PangoFcFontMap *)fcfont->fontmap, sans);
+
+  matched = FcFontMatch (NULL, sans, &result);
+
+  if (FcPatternGetString (matched, FC_FILE, 0, &filename2) != FcResultMatch)
+    goto bail1;
+
+  if (FcPatternGetInteger (matched, FC_INDEX, 0, &id) != FcResultMatch)
+    goto bail1;
+
+  error = FT_New_Face (_pango_ft2_font_map_get_library (fcfont->fontmap),
+                      (char *) filename2, id, &ft2font->face);
+
+
+  if (error)
+    {
+    bail1:
+      name = pango_font_description_to_string (fcfont->description);
+      g_error ("Unable to open font file %s for font %s, exiting\n", filename2, name);
+    }
+  else
+    {
+      name = pango_font_description_to_string (fcfont->description);
+      g_warning ("Unable to open font file %s for font %s, falling back to %s\n", original_file, name, filename2);
+      g_free (name);
+    }
+
+  FcPatternDestroy (sans);
+  FcPatternDestroy (matched);
+}
+
+static void
+set_transform (PangoFT2Font *ft2font)
+{
+  PangoFcFont *fcfont = (PangoFcFont *)ft2font;
+  FcMatrix *fc_matrix;
+
+  if (FcPatternGetMatrix (fcfont->font_pattern, FC_MATRIX, 0, &fc_matrix) == FcResultMatch)
+    {
+      FT_Matrix ft_matrix;
+
+      ft_matrix.xx = 0x10000L * fc_matrix->xx;
+      ft_matrix.yy = 0x10000L * fc_matrix->yy;
+      ft_matrix.xy = 0x10000L * fc_matrix->xy;
+      ft_matrix.yx = 0x10000L * fc_matrix->yx;
+
+      FT_Set_Transform (ft2font->face, &ft_matrix, NULL);
+    }
+}
+
+/**
+ * pango_ft2_font_get_face:
+ * @font: a #PangoFont
+ *
+ * Returns the native FreeType2 <type>FT_Face</type> structure used for this #PangoFont.
+ * This may be useful if you want to use FreeType2 functions directly.
+ *
+ * Use pango_fc_font_lock_face() instead; when you are done with a
+ * face from pango_fc_font_lock_face() you must call
+ * pango_fc_font_unlock_face().
+ *
+ * Return value: a pointer to a <type>FT_Face</type> structure, with the size set correctly,
+ *               or %NULL if @font is %NULL.
+ **/
+FT_Face
+pango_ft2_font_get_face (PangoFont *font)
+{
+  PangoFT2Font *ft2font = (PangoFT2Font *)font;
+  PangoFcFont *fcfont = (PangoFcFont *)font;
+  FT_Error error;
+  FcPattern *pattern;
+  FcChar8 *filename;
+  FcBool antialias, hinting, autohint;
+  int hintstyle;
+  int id;
+
+  if (G_UNLIKELY (!font))
+    return NULL;
+
+  pattern = fcfont->font_pattern;
+
+  if (!ft2font->face)
+    {
+      ft2font->load_flags = 0;
+
+      /* disable antialiasing if requested */
+      if (FcPatternGetBool (pattern,
+                           FC_ANTIALIAS, 0, &antialias) != FcResultMatch)
+       antialias = FcTrue;
+
+      if (antialias)
+       ft2font->load_flags |= FT_LOAD_NO_BITMAP;
+      else
+       ft2font->load_flags |= FT_LOAD_TARGET_MONO;
+
+      /* disable hinting if requested */
+      if (FcPatternGetBool (pattern,
+                           FC_HINTING, 0, &hinting) != FcResultMatch)
+       hinting = FcTrue;
+
+#ifdef FC_HINT_STYLE
+      if (FcPatternGetInteger (pattern, FC_HINT_STYLE, 0, &hintstyle) != FcResultMatch)
+       hintstyle = FC_HINT_FULL;
+
+      if (!hinting || hintstyle == FC_HINT_NONE)
+          ft2font->load_flags |= FT_LOAD_NO_HINTING;
+      
+      switch (hintstyle) {
+      case FC_HINT_SLIGHT:
+      case FC_HINT_MEDIUM:
+       ft2font->load_flags |= FT_LOAD_TARGET_LIGHT;
+       break;
+      default:
+       ft2font->load_flags |= FT_LOAD_TARGET_NORMAL;
+       break;
+      }
+#else
+      if (!hinting)
+          ft2font->load_flags |= FT_LOAD_NO_HINTING;
+#endif
+
+      /* force autohinting if requested */
+      if (FcPatternGetBool (pattern,
+                           FC_AUTOHINT, 0, &autohint) != FcResultMatch)
+       autohint = FcFalse;
+
+      if (autohint)
+       ft2font->load_flags |= FT_LOAD_FORCE_AUTOHINT;
+
+      if (FcPatternGetString (pattern, FC_FILE, 0, &filename) != FcResultMatch)
+             goto bail0;
+
+      if (FcPatternGetInteger (pattern, FC_INDEX, 0, &id) != FcResultMatch)
+             goto bail0;
+
+      error = FT_New_Face (_pango_ft2_font_map_get_library (fcfont->fontmap),
+                          (char *) filename, id, &ft2font->face);
+      if (error != FT_Err_Ok)
+       {
+       bail0:
+         load_fallback_face (ft2font, (char *) filename);
+       }
+
+      g_assert (ft2font->face);
+
+      set_transform (ft2font);
+
+      error = FT_Set_Char_Size (ft2font->face,
+                               PANGO_PIXELS_26_6 (ft2font->size),
+                               PANGO_PIXELS_26_6 (ft2font->size),
+                               0, 0);
+      if (error)
+       g_warning ("Error in FT_Set_Char_Size: %d", error);
+    }
+
+  return ft2font->face;
+}
+
+G_DEFINE_TYPE (PangoFT2Font, pango_ft2_font, PANGO_TYPE_FC_FONT)
+
+static void
+pango_ft2_font_init (PangoFT2Font *ft2font)
+{
+  ft2font->face = NULL;
+
+  ft2font->size = 0;
+
+  ft2font->glyph_info = g_hash_table_new (NULL, NULL);
+}
+
+static void
+pango_ft2_font_class_init (PangoFT2FontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+  PangoFcFontClass *fc_font_class = PANGO_FC_FONT_CLASS (class);
+
+  object_class->finalize = pango_ft2_font_finalize;
+
+  font_class->get_glyph_extents = pango_ft2_font_get_glyph_extents;
+
+  fc_font_class->lock_face = pango_ft2_font_real_lock_face;
+  fc_font_class->unlock_face = pango_ft2_font_real_unlock_face;
+}
+
+static PangoFT2GlyphInfo *
+pango_ft2_font_get_glyph_info (PangoFont   *font,
+                              PangoGlyph   glyph,
+                              gboolean     create)
+{
+  PangoFT2Font *ft2font = (PangoFT2Font *)font;
+  PangoFcFont *fcfont = (PangoFcFont *)font;
+  PangoFT2GlyphInfo *info;
+
+  info = g_hash_table_lookup (ft2font->glyph_info, GUINT_TO_POINTER (glyph));
+
+  if ((info == NULL) && create)
+    {
+      info = g_slice_new0 (PangoFT2GlyphInfo);
+
+      pango_fc_font_get_raw_extents (fcfont, ft2font->load_flags,
+                                    glyph,
+                                    &info->ink_rect,
+                                    &info->logical_rect);
+
+      g_hash_table_insert (ft2font->glyph_info, GUINT_TO_POINTER(glyph), info);
+    }
+
+  return info;
+}
+
+static void
+pango_ft2_font_get_glyph_extents (PangoFont      *font,
+                                 PangoGlyph      glyph,
+                                 PangoRectangle *ink_rect,
+                                 PangoRectangle *logical_rect)
+{
+  PangoFT2GlyphInfo *info;
+  gboolean empty = FALSE;
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    {
+      glyph = pango_fc_font_get_glyph ((PangoFcFont *) font, ' ');
+      empty = TRUE;
+    }
+
+  if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+    {
+      PangoFontMetrics *metrics = pango_font_get_metrics (font, NULL);
+
+      if (metrics)
+       {
+         if (ink_rect)
+           {
+             ink_rect->x = PANGO_SCALE;
+             ink_rect->width = metrics->approximate_char_width - 2 * PANGO_SCALE;
+             ink_rect->y = - (metrics->ascent - PANGO_SCALE);
+             ink_rect->height = metrics->ascent + metrics->descent - 2 * PANGO_SCALE;
+           }
+         if (logical_rect)
+           {
+             logical_rect->x = 0;
+             logical_rect->width = metrics->approximate_char_width;
+             logical_rect->y = -metrics->ascent;
+             logical_rect->height = metrics->ascent + metrics->descent;
+           }
+
+         pango_font_metrics_unref (metrics);
+       }
+      else
+       {
+         if (ink_rect)
+           ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
+         if (logical_rect)
+           logical_rect->x = logical_rect->y = logical_rect->height = logical_rect->width = 0;
+       }
+      return;
+    }
+
+  info = pango_ft2_font_get_glyph_info (font, glyph, TRUE);
+
+  if (ink_rect)
+    *ink_rect = info->ink_rect;
+  if (logical_rect)
+    *logical_rect = info->logical_rect;
+
+  if (empty)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = 0;
+      return;
+    }
+}
+
+/**
+ * pango_ft2_font_get_kerning:
+ * @font: a #PangoFont
+ * @left: the left #PangoGlyph
+ * @right: the right #PangoGlyph
+ *
+ * Retrieves kerning information for a combination of two glyphs.
+ *
+ * Use pango_fc_font_kern_glyphs() instead.
+ *
+ * Return value: The amount of kerning (in Pango units) to apply for
+ * the given combination of glyphs.
+ **/
+int
+pango_ft2_font_get_kerning (PangoFont *font,
+                           PangoGlyph left,
+                           PangoGlyph right)
+{
+  PangoFcFont *fc_font = PANGO_FC_FONT (font);
+
+  FT_Face face;
+  FT_Error error;
+  FT_Vector kerning;
+
+  face = pango_fc_font_lock_face (fc_font);
+  if (!face)
+    return 0;
+
+  if (!FT_HAS_KERNING (face))
+    {
+      pango_fc_font_unlock_face (fc_font);
+      return 0;
+    }
+
+  error = FT_Get_Kerning (face, left, right, ft_kerning_default, &kerning);
+  if (error != FT_Err_Ok)
+    {
+      pango_fc_font_unlock_face (fc_font);
+      return 0;
+    }
+
+  pango_fc_font_unlock_face (fc_font);
+  return PANGO_UNITS_26_6 (kerning.x);
+}
+
+static FT_Face
+pango_ft2_font_real_lock_face (PangoFcFont *font)
+{
+  return pango_ft2_font_get_face ((PangoFont *)font);
+}
+
+static void
+pango_ft2_font_real_unlock_face (PangoFcFont *font G_GNUC_UNUSED)
+{
+}
+
+static gboolean
+pango_ft2_free_glyph_info_callback (gpointer key G_GNUC_UNUSED,
+                                   gpointer value,
+                                   gpointer data)
+{
+  PangoFT2Font *font = PANGO_FT2_FONT (data);
+  PangoFT2GlyphInfo *info = value;
+
+  if (font->glyph_cache_destroy && info->cached_glyph)
+    (*font->glyph_cache_destroy) (info->cached_glyph);
+
+  g_slice_free (PangoFT2GlyphInfo, info);
+  return TRUE;
+}
+
+static void
+pango_ft2_font_finalize (GObject *object)
+{
+  PangoFT2Font *ft2font = (PangoFT2Font *)object;
+
+  if (ft2font->face)
+    {
+      FT_Done_Face (ft2font->face);
+      ft2font->face = NULL;
+    }
+
+  g_hash_table_foreach_remove (ft2font->glyph_info,
+                              pango_ft2_free_glyph_info_callback, object);
+  g_hash_table_destroy (ft2font->glyph_info);
+
+  G_OBJECT_CLASS (pango_ft2_font_parent_class)->finalize (object);
+}
+
+/**
+ * pango_ft2_font_get_coverage:
+ * @font: a #PangoFT2Font.
+ * @language: a language tag.
+ * @returns: a #PangoCoverage.
+ *
+ * Gets the #PangoCoverage for a #PangoFT2Font. Use
+ * pango_font_get_coverage() instead.
+ **/
+PangoCoverage *
+pango_ft2_font_get_coverage (PangoFont     *font,
+                            PangoLanguage *language)
+{
+  return pango_font_get_coverage (font, language);
+}
+
+/* Utility functions */
+
+/**
+ * pango_ft2_get_unknown_glyph:
+ * @font: a #PangoFont
+ *
+ * Return the index of a glyph suitable for drawing unknown characters with
+ * @font, or %PANGO_GLYPH_EMPTY if no suitable glyph found.
+ *
+ * If you want to draw an unknown-box for a character that is not covered
+ * by the font,
+ * use PANGO_GET_UNKNOWN_GLYPH() instead.
+ *
+ * Return value: a glyph index into @font, or %PANGO_GLYPH_EMPTY
+ **/
+PangoGlyph
+pango_ft2_get_unknown_glyph (PangoFont *font)
+{
+  FT_Face face = pango_ft2_font_get_face (font);
+  if (face && FT_IS_SFNT (face))
+    /* TrueType fonts have an 'unknown glyph' box on glyph index 0 */
+    return 0;
+  else
+    return PANGO_GLYPH_EMPTY;
+}
+
+typedef struct
+{
+  FT_Error     code;
+  const char   msg[40];
+} ft_error_description;
+
+static int
+ft_error_compare (const void *pkey,
+                 const void *pbase)
+{
+  return ((ft_error_description *) pkey)->code - ((ft_error_description *) pbase)->code;
+}
+
+G_CONST_RETURN char *
+_pango_ft2_ft_strerror (FT_Error error)
+{
+#undef __FTERRORS_H__
+#define FT_ERRORDEF( e, v, s )  { e, s },
+#define FT_ERROR_START_LIST  {
+#define FT_ERROR_END_LIST    };
+
+  static const ft_error_description ft_errors[] =
+#include FT_ERRORS_H
+
+#undef FT_ERRORDEF
+#undef FT_ERROR_START_LIST
+#undef FT_ERROR_END_LIST
+
+  ft_error_description *found =
+    bsearch (&error, ft_errors, G_N_ELEMENTS (ft_errors),
+            sizeof (ft_errors[0]), ft_error_compare);
+  if (found != NULL)
+    return found->msg;
+  else
+    {
+      static char *default_msg = NULL;
+
+      if (!default_msg)
+       default_msg = g_malloc (60);
+
+      g_sprintf (default_msg, "Unknown FreeType2 error %#x", error);
+      return default_msg;
+    }
+}
+
+void *
+_pango_ft2_font_get_cache_glyph_data (PangoFont *font,
+                                    int        glyph_index)
+{
+  PangoFT2GlyphInfo *info;
+
+  if (!PANGO_FT2_IS_FONT (font))
+    return NULL;
+
+  info = pango_ft2_font_get_glyph_info (font, glyph_index, FALSE);
+
+  if (info == NULL)
+    return NULL;
+
+  return info->cached_glyph;
+}
+
+void
+_pango_ft2_font_set_cache_glyph_data (PangoFont     *font,
+                                    int            glyph_index,
+                                    void          *cached_glyph)
+{
+  PangoFT2GlyphInfo *info;
+
+  if (!PANGO_FT2_IS_FONT (font))
+    return;
+
+  info = pango_ft2_font_get_glyph_info (font, glyph_index, TRUE);
+
+  info->cached_glyph = cached_glyph;
+
+  /* TODO: Implement limiting of the number of cached glyphs */
+}
+
+void
+_pango_ft2_font_set_glyph_cache_destroy (PangoFont      *font,
+                                        GDestroyNotify  destroy_notify)
+{
+  if (!PANGO_FT2_IS_FONT (font))
+    return;
+
+  PANGO_FT2_FONT (font)->glyph_cache_destroy = destroy_notify;
+}
diff --git a/pango/pangoft2.def b/pango/pangoft2.def
new file mode 100755 (executable)
index 0000000..5729431
--- /dev/null
@@ -0,0 +1,85 @@
+EXPORTS
+       pango_fc_decoder_get_charset
+       pango_fc_decoder_get_glyph
+       pango_fc_decoder_get_type
+       pango_fc_font_create_metrics_for_context
+       pango_fc_font_description_from_pattern
+       pango_fc_font_get_glyph
+       pango_fc_font_get_raw_extents
+       pango_fc_font_get_type
+       pango_fc_font_get_unknown_glyph
+       pango_fc_font_has_char
+       pango_fc_font_kern_glyphs
+       pango_fc_font_key_get_context_key
+       pango_fc_font_key_get_matrix
+       pango_fc_font_key_get_pattern
+       pango_fc_font_lock_face
+       pango_fc_font_map_add_decoder_find_func
+       pango_fc_font_map_cache_clear
+       pango_fc_font_map_create_context
+       pango_fc_font_map_find_decoder
+       pango_fc_font_map_get_type
+       pango_fc_font_map_shutdown
+       pango_fc_font_unlock_face
+       pango_fc_fontset_key_get_absolute_size
+       pango_fc_fontset_key_get_context_key
+       pango_fc_fontset_key_get_description
+       pango_fc_fontset_key_get_language
+       pango_fc_fontset_key_get_matrix
+       pango_fc_fontset_key_get_resolution
+       pango_ft2_font_get_coverage
+       pango_ft2_font_get_face
+       pango_ft2_font_get_kerning
+       pango_ft2_font_get_type
+       pango_ft2_font_map_create_context
+       pango_ft2_font_map_for_display
+       pango_ft2_font_map_get_type
+       pango_ft2_font_map_new
+       pango_ft2_font_map_set_default_substitute
+       pango_ft2_font_map_set_resolution
+       pango_ft2_font_map_substitute_changed
+       pango_ft2_get_context
+       pango_ft2_get_unknown_glyph
+       pango_ft2_render
+       pango_ft2_render_layout
+       pango_ft2_render_layout_line
+       pango_ft2_render_layout_line_subpixel
+       pango_ft2_render_layout_subpixel
+       pango_ft2_render_transformed
+       pango_ft2_renderer_get_type
+       pango_ft2_shutdown_display
+       pango_ot_buffer_add_glyph
+       pango_ot_buffer_clear
+       pango_ot_buffer_destroy
+       pango_ot_buffer_get_glyphs
+       pango_ot_buffer_new
+       pango_ot_buffer_output
+       pango_ot_buffer_set_rtl
+       pango_ot_buffer_set_zero_width_marks
+       pango_ot_info_find_feature
+       pango_ot_info_find_language
+       pango_ot_info_find_script
+       pango_ot_info_get
+       pango_ot_info_get_type
+       pango_ot_info_list_features
+       pango_ot_info_list_languages
+       pango_ot_info_list_scripts
+       pango_ot_ruleset_add_feature
+       pango_ot_ruleset_description_copy
+       pango_ot_ruleset_description_equal
+       pango_ot_ruleset_description_free
+       pango_ot_ruleset_description_hash
+       pango_ot_ruleset_get_feature_count
+       pango_ot_ruleset_get_for_description
+       pango_ot_ruleset_get_type
+       pango_ot_ruleset_maybe_add_feature
+       pango_ot_ruleset_maybe_add_features
+       pango_ot_ruleset_new
+       pango_ot_ruleset_new_for
+       pango_ot_ruleset_new_from_description
+       pango_ot_ruleset_position
+       pango_ot_ruleset_substitute
+       pango_ot_tag_from_language
+       pango_ot_tag_from_script
+       pango_ot_tag_to_language
+       pango_ot_tag_to_script
diff --git a/pango/pangoft2.h b/pango/pangoft2.h
new file mode 100755 (executable)
index 0000000..e43e2e4
--- /dev/null
@@ -0,0 +1,112 @@
+/* Pango
+ * pangoft2.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOFT2_H__
+#define __PANGOFT2_H__
+
+#include <fontconfig/fontconfig.h>
+
+#include <pango/pango-layout.h>
+#include <pango/pangofc-font.h>
+
+G_BEGIN_DECLS
+
+#ifndef PANGO_DISABLE_DEPRECATED
+#define PANGO_RENDER_TYPE_FT2 "PangoRenderFT2"
+#endif
+
+#define PANGO_TYPE_FT2_FONT_MAP              (pango_ft2_font_map_get_type ())
+#define PANGO_FT2_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FT2_FONT_MAP, PangoFT2FontMap))
+#define PANGO_FT2_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FT2_FONT_MAP))
+
+typedef struct _PangoFT2FontMap      PangoFT2FontMap;
+
+typedef void (*PangoFT2SubstituteFunc) (FcPattern *pattern,
+                                       gpointer   data);
+
+/* Calls for applications */
+
+void pango_ft2_render             (FT_Bitmap         *bitmap,
+                                  PangoFont         *font,
+                                  PangoGlyphString  *glyphs,
+                                  gint               x,
+                                  gint               y);
+void pango_ft2_render_transformed (FT_Bitmap         *bitmap,
+                                  const PangoMatrix *matrix,
+                                  PangoFont         *font,
+                                  PangoGlyphString  *glyphs,
+                                  int                x,
+                                  int                y);
+
+void pango_ft2_render_layout_line          (FT_Bitmap        *bitmap,
+                                           PangoLayoutLine  *line,
+                                           int               x,
+                                           int               y);
+void pango_ft2_render_layout_line_subpixel (FT_Bitmap        *bitmap,
+                                           PangoLayoutLine  *line,
+                                           int               x,
+                                           int               y);
+void pango_ft2_render_layout               (FT_Bitmap        *bitmap,
+                                           PangoLayout      *layout,
+                                           int               x,
+                                           int               y);
+void pango_ft2_render_layout_subpixel      (FT_Bitmap        *bitmap,
+                                           PangoLayout      *layout,
+                                           int               x,
+                                           int               y);
+
+GType pango_ft2_font_map_get_type (void) G_GNUC_CONST;
+
+PangoFontMap *pango_ft2_font_map_new                    (void);
+void          pango_ft2_font_map_set_resolution         (PangoFT2FontMap        *fontmap,
+                                                        double                  dpi_x,
+                                                        double                  dpi_y);
+void          pango_ft2_font_map_set_default_substitute (PangoFT2FontMap        *fontmap,
+                                                        PangoFT2SubstituteFunc  func,
+                                                        gpointer                data,
+                                                        GDestroyNotify          notify);
+void          pango_ft2_font_map_substitute_changed     (PangoFT2FontMap         *fontmap);
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoContext *pango_ft2_font_map_create_context         (PangoFT2FontMap         *fontmap);
+#endif
+
+
+/* API for rendering modules
+ */
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoContext      *pango_ft2_get_context          (double dpi_x,
+                                                  double dpi_y);
+PangoFontMap      *pango_ft2_font_map_for_display (void);
+void               pango_ft2_shutdown_display     (void);
+
+PangoGlyph     pango_ft2_get_unknown_glyph (PangoFont       *font);
+int            pango_ft2_font_get_kerning  (PangoFont       *font,
+                                           PangoGlyph       left,
+                                           PangoGlyph       right);
+FT_Face        pango_ft2_font_get_face     (PangoFont       *font);
+PangoCoverage *pango_ft2_font_get_coverage (PangoFont       *font,
+                                           PangoLanguage   *language);
+#endif /* PANGO_DISABLE_DEPRECATED */
+
+G_END_DECLS
+
+#endif /* __PANGOFT2_H__ */
diff --git a/pango/pangoft2.rc b/pango/pangoft2.rc
new file mode 100755 (executable)
index 0000000..ec8a0f5
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION 1,26,1,0
+  PRODUCTVERSION 1,26,1,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "PangoFT2"
+       VALUE "FileVersion", "1.26.1.0"
+       VALUE "InternalName", "pangoft2-1.0-0"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software. Copyright © 2000 Tor Lillqvist"
+       VALUE "OriginalFilename", "pangoft2-1.0-0.dll"
+       VALUE "ProductName", "PangoFT2"
+       VALUE "ProductVersion", "1.26.1"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangoft2.rc.in b/pango/pangoft2.rc.in
new file mode 100755 (executable)
index 0000000..c7ed164
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "PangoFT2"
+       VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+       VALUE "InternalName", "pangoft2-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software. Copyright © 2000 Tor Lillqvist"
+       VALUE "OriginalFilename", "pangoft2-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+       VALUE "ProductName", "PangoFT2"
+       VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangowin32-fontcache.c b/pango/pangowin32-fontcache.c
new file mode 100755 (executable)
index 0000000..cc389ee
--- /dev/null
@@ -0,0 +1,433 @@
+/* Pango
+ * pangowin32-fontcache.c: Cache of HFONTs by LOGFONTW
+ *
+ * Copyright (C) 2000 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdio.h>
+
+#include "pangowin32-private.h"
+
+/* Font cache
+ */
+
+/* Number of fonts to retain after they are not otherwise referenced.
+ */
+#define CACHE_SIZE 16
+
+typedef struct _CacheEntry CacheEntry;
+
+struct _PangoWin32FontCache
+{
+  GHashTable *forward;
+  GHashTable *back;
+
+  GList *mru;
+  GList *mru_tail;
+  int mru_count;
+};
+
+struct _CacheEntry
+{
+  LOGFONTW logfontw;
+  HFONT hfont;
+
+  gint ref_count;
+  GList *mru;
+};
+
+static void
+free_cache_entry (LOGFONTW            *logfont,
+                 CacheEntry          *entry,
+                 PangoWin32FontCache *cache)
+{
+  if (!DeleteObject (entry->hfont))
+    PING (("DeleteObject for hfont %p failed", entry->hfont));
+
+  g_slice_free (CacheEntry, entry);
+}
+
+/**
+ * pango_win32_font_cache_free:
+ * @cache: a #PangoWin32FontCache
+ *
+ * Frees a #PangoWin32FontCache and all associated memory. All fonts loaded
+ * through this font cache will be freed along with the cache.
+ **/
+void
+pango_win32_font_cache_free (PangoWin32FontCache *cache)
+{
+  g_return_if_fail (cache != NULL);
+
+  g_hash_table_foreach (cache->forward, (GHFunc)free_cache_entry, cache);
+
+  g_hash_table_destroy (cache->forward);
+  g_hash_table_destroy (cache->back);
+
+  g_list_free (cache->mru);
+
+  g_slice_free (PangoWin32FontCache, cache);
+}
+
+static guint
+wcs_hash (gconstpointer v)
+{
+  /* 31 bit hash function */
+  const wchar_t *p = v;
+  guint32 h = *p;
+
+  if (h)
+    for (p += 1; *p != '\0'; p++)
+      h = (h << 5) - h + *p;
+
+  return h;
+}
+
+static guint
+logfontw_hash (gconstpointer v)
+{
+  const LOGFONTW *lfp = v;
+
+  return wcs_hash (lfp->lfFaceName) +
+    (lfp->lfItalic != 0) +
+    lfp->lfWeight/10 +
+    lfp->lfOrientation +
+    abs (lfp->lfHeight) * 10;
+}
+
+static gint
+logfontw_equal (gconstpointer v1,
+               gconstpointer v2)
+{
+  const LOGFONTW *lfp1 = v1, *lfp2 = v2;
+
+  return (wcscmp (lfp1->lfFaceName, lfp2->lfFaceName) == 0
+         && lfp1->lfPitchAndFamily == lfp2->lfPitchAndFamily
+         && lfp1->lfStrikeOut == lfp2->lfStrikeOut
+         && lfp1->lfUnderline == lfp2->lfUnderline
+         && (lfp1->lfItalic != 0) == (lfp2->lfItalic != 0)
+         && lfp1->lfWeight == lfp2->lfWeight
+         && lfp1->lfOrientation == lfp2->lfOrientation
+         && lfp1->lfEscapement == lfp2->lfEscapement
+         && lfp1->lfWidth == lfp2->lfWidth
+         && lfp1->lfHeight == lfp2->lfHeight);
+}
+
+/**
+ * pango_win32_font_cache_new:
+ *
+ * Creates a font cache.
+ *
+ * Return value: The new font cache. This must be freed with
+ * pango_win32_font_cache_free().
+ **/
+PangoWin32FontCache *
+pango_win32_font_cache_new (void)
+{
+  PangoWin32FontCache *cache;
+
+  cache = g_slice_new (PangoWin32FontCache);
+
+  cache->forward = g_hash_table_new (logfontw_hash, logfontw_equal);
+  cache->back = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+  cache->mru = NULL;
+  cache->mru_tail = NULL;
+  cache->mru_count = 0;
+
+  return cache;
+}
+
+static void
+cache_entry_unref (PangoWin32FontCache *cache,
+                  CacheEntry          *entry)
+{
+  if (g_atomic_int_dec_and_test (&entry->ref_count))
+    {
+      PING (("removing cache entry %p", entry->hfont));
+
+      g_hash_table_remove (cache->forward, &entry->logfontw);
+      g_hash_table_remove (cache->back, entry->hfont);
+
+      free_cache_entry (NULL, entry, cache);
+    }
+}
+
+/**
+ * pango_win32_font_cache_load:
+ * @cache: a #PangoWin32FontCache
+ * @logfont: a pointer to a LOGFONTA structure describing the font to load.
+ *
+ * Creates a HFONT from a LOGFONTA. The
+ * result may be newly loaded, or it may have been previously
+ * stored
+ *
+ * Return value: The font structure, or %NULL if the font could
+ * not be loaded. In order to free this structure, you must call
+ * pango_win32_font_cache_unload().
+ **/
+HFONT
+pango_win32_font_cache_load (PangoWin32FontCache *cache,
+                            const LOGFONTA      *lfp)
+{
+  LOGFONTW lf;
+
+  /* We know that the lfFaceName is the last member in the structs */
+  *(LOGFONTA *)&lf = *lfp;
+  
+  if (!MultiByteToWideChar (CP_ACP, MB_ERR_INVALID_CHARS,
+                           lfp->lfFaceName, -1,
+                           lf.lfFaceName, G_N_ELEMENTS (lf.lfFaceName)))
+    return NULL;
+
+  return pango_win32_font_cache_loadw (cache, &lf);
+}
+
+/**
+ * pango_win32_font_cache_loadw:
+ * @cache: a #PangoWin32FontCache
+ * @logfont: a pointer to a LOGFONTW structure describing the font to load.
+ *
+ * Creates a HFONT from a LOGFONTW. The
+ * result may be newly loaded, or it may have been previously
+ * stored
+ *
+ * Return value: The font structure, or %NULL if the font could
+ * not be loaded. In order to free this structure, you must call
+ * pango_win32_font_cache_unload().
+ *
+ * Since: 1.16
+ **/
+HFONT
+pango_win32_font_cache_loadw (PangoWin32FontCache *cache,
+                             const LOGFONTW      *lfp)
+{
+  CacheEntry *entry;
+  LOGFONTW lf;
+  HFONT hfont;
+  int tries;
+
+  g_return_val_if_fail (cache != NULL, NULL);
+  g_return_val_if_fail (lfp != NULL, NULL);
+
+  entry = g_hash_table_lookup (cache->forward, lfp);
+
+  if (entry)
+    {
+      g_atomic_int_inc (&entry->ref_count);
+      PING (("increased refcount for cache entry %p: %d", entry->hfont, entry->ref_count));
+    }
+  else
+    {
+      BOOL font_smoothing;
+      lf = *lfp;
+      SystemParametersInfo (SPI_GETFONTSMOOTHING, 0, &font_smoothing, 0);
+      /* If on XP or better, try to use ClearType if the global system
+       * settings ask for it.
+       */
+      if (font_smoothing &&
+         (_pango_win32_os_version_info.dwMajorVersion > 5 ||
+          (_pango_win32_os_version_info.dwMajorVersion == 5 &&
+           _pango_win32_os_version_info.dwMinorVersion >= 1)))
+       {
+         UINT smoothing_type;
+
+#ifndef SPI_GETFONTSMOOTHINGTYPE
+#define SPI_GETFONTSMOOTHINGTYPE 0x200a
+#endif
+#ifndef FE_FONTSMOOTHINGCLEARTYPE
+#define FE_FONTSMOOTHINGCLEARTYPE 2
+#endif
+#ifndef CLEARTYPE_QUALITY
+#define CLEARTYPE_QUALITY 5
+#endif
+         SystemParametersInfo (SPI_GETFONTSMOOTHINGTYPE, 0, &smoothing_type, 0);
+         lf.lfQuality =
+           (font_smoothing ?
+            (smoothing_type == FE_FONTSMOOTHINGCLEARTYPE ?
+             CLEARTYPE_QUALITY : ANTIALIASED_QUALITY) :
+            DEFAULT_QUALITY);
+       }
+      else
+       lf.lfQuality = (font_smoothing ? ANTIALIASED_QUALITY : DEFAULT_QUALITY);
+      lf.lfCharSet = DEFAULT_CHARSET;
+      for (tries = 0; ; tries++)
+       {
+         PING (("... trying CreateFontIndirect "
+                "height=%ld,width=%ld,escapement=%ld,orientation=%ld,"
+                "weight=%ld,%s%s%s"
+                "charset=%d,outprecision=%d,clipprecision=%d,"
+                "quality=%d,pitchandfamily=%#.02x,facename=\"%S\")",
+                lf.lfHeight, lf.lfWidth, lf.lfEscapement, lf.lfOrientation,
+                lf.lfWeight, (lf.lfItalic ? "italic," : ""),
+                (lf.lfUnderline ? "underline," : ""),
+                (lf.lfStrikeOut ? "strikeout," : ""),
+                lf.lfCharSet, lf.lfOutPrecision, lf.lfClipPrecision,
+                lf.lfQuality, lf.lfPitchAndFamily, lf.lfFaceName));
+         hfont = CreateFontIndirectW (&lf);
+
+         if (hfont != NULL)
+           {
+             PING (("Success! hfont=%p", hfont));
+             break;
+           }
+
+         /* If we fail, try some similar fonts often found on Windows. */
+         if (tries == 0)
+           {
+             gchar *p = g_utf16_to_utf8 (lf.lfFaceName, -1, NULL, NULL, NULL);
+             if (!p)
+               ; /* Nothing */
+             else if (g_ascii_strcasecmp (p, "helvetica") == 0)
+               wcscpy (lf.lfFaceName, L"arial");
+             else if (g_ascii_strcasecmp (p, "new century schoolbook") == 0)
+               wcscpy (lf.lfFaceName, L"century schoolbook");
+             else if (g_ascii_strcasecmp (p, "courier") == 0)
+               wcscpy (lf.lfFaceName, L"courier new");
+             else if (g_ascii_strcasecmp (p, "lucida") == 0)
+               wcscpy (lf.lfFaceName, L"lucida sans unicode");
+             else if (g_ascii_strcasecmp (p, "lucidatypewriter") == 0)
+               wcscpy (lf.lfFaceName, L"lucida console");
+             else if (g_ascii_strcasecmp (p, "times") == 0)
+               wcscpy (lf.lfFaceName, L"times new roman");
+             g_free (p);
+           }
+         else if (tries == 1)
+           {
+             gchar *p = g_utf16_to_utf8 (lf.lfFaceName, -1, NULL, NULL, NULL);
+             if (!p)
+               ; /* Nothing */
+             else if (g_ascii_strcasecmp (p, "courier") == 0)
+               {
+                 wcscpy (lf.lfFaceName, L"");
+                 lf.lfPitchAndFamily |= FF_MODERN;
+               }
+             else if (g_ascii_strcasecmp (p, "times new roman") == 0)
+               {
+                 wcscpy (lf.lfFaceName, L"");
+                 lf.lfPitchAndFamily |= FF_ROMAN;
+               }
+             else if (g_ascii_strcasecmp (p, "helvetica") == 0
+                      || g_ascii_strcasecmp (p, "lucida") == 0)
+               {
+                 wcscpy (lf.lfFaceName, L"");
+                 lf.lfPitchAndFamily |= FF_SWISS;
+               }
+             else
+               {
+                 wcscpy (lf.lfFaceName, L"");
+                 lf.lfPitchAndFamily = (lf.lfPitchAndFamily & 0x0F) | FF_DONTCARE;
+               }
+             g_free (p);
+           }
+         else
+           break;
+         tries++;
+       }
+
+      if (!hfont)
+       return NULL;
+
+      entry = g_slice_new (CacheEntry);
+
+      entry->logfontw = lf;
+      entry->hfont = hfont;
+
+      entry->ref_count = 1;
+      entry->mru = NULL;
+
+      g_hash_table_insert (cache->forward, &entry->logfontw, entry);
+      g_hash_table_insert (cache->back, entry->hfont, entry);
+    }
+
+  if (entry->mru)
+    {
+      if (cache->mru_count > 1 && entry->mru->prev)
+       {
+         /* Move to the head of the mru list */
+
+         if (entry->mru == cache->mru_tail)
+           {
+             cache->mru_tail = cache->mru_tail->prev;
+             cache->mru_tail->next = NULL;
+           }
+         else
+           {
+             entry->mru->prev->next = entry->mru->next;
+             entry->mru->next->prev = entry->mru->prev;
+           }
+
+         entry->mru->next = cache->mru;
+         entry->mru->prev = NULL;
+         cache->mru->prev = entry->mru;
+         cache->mru = entry->mru;
+       }
+    }
+  else
+    {
+      g_atomic_int_inc (&entry->ref_count);
+
+      /* Insert into the mru list */
+
+      if (cache->mru_count == CACHE_SIZE)
+       {
+         CacheEntry *old_entry = cache->mru_tail->data;
+
+         cache->mru_tail = cache->mru_tail->prev;
+         cache->mru_tail->next = NULL;
+
+         g_list_free_1 (old_entry->mru);
+         old_entry->mru = NULL;
+         cache_entry_unref (cache, old_entry);
+       }
+      else
+       cache->mru_count++;
+
+      cache->mru = g_list_prepend (cache->mru, entry);
+      if (!cache->mru_tail)
+       cache->mru_tail = cache->mru;
+      entry->mru = cache->mru;
+    }
+
+  return entry->hfont;
+}
+
+/**
+ * pango_win32_font_cache_unload:
+ * @cache: a #PangoWin32FontCache
+ * @hfont: the HFONT to unload
+ *
+ * Frees a font structure previously loaded with pango_win32_font_cache_load().
+ **/
+void
+pango_win32_font_cache_unload (PangoWin32FontCache *cache,
+                              HFONT                hfont)
+{
+  CacheEntry *entry;
+
+  g_return_if_fail (cache != NULL);
+  g_return_if_fail (hfont != NULL);
+
+  entry = g_hash_table_lookup (cache->back, hfont);
+  g_return_if_fail (entry != NULL);
+
+  cache_entry_unref (cache, entry);
+}
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
new file mode 100755 (executable)
index 0000000..b92c977
--- /dev/null
@@ -0,0 +1,1411 @@
+/* Pango
+ * pangowin32-fontmap.c: Win32 font handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ * Copyright (C) 2001 Alexander Larsson
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "pango-fontmap.h"
+#include "pango-impl-utils.h"
+#include "pangowin32-private.h"
+#include "modules.h"
+
+typedef struct _PangoWin32Family       PangoWin32Family;
+
+struct _PangoWin32Family
+{
+  PangoFontFamily parent_instance;
+
+  char *family_name;
+  GSList *faces;
+
+  gboolean is_monospace;
+};
+
+#if !defined(NTM_PS_OPENTYPE)
+# define NTM_PS_OPENTYPE 0x20000
+#endif
+
+#if !defined(NTM_TYPE1)
+# define NTM_TYPE1 0x100000
+#endif
+
+#define PANGO_WIN32_TYPE_FAMILY              (pango_win32_family_get_type ())
+#define PANGO_WIN32_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_WIN32_TYPE_FAMILY, PangoWin32Family))
+#define PANGO_WIN32_IS_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_WIN32_TYPE_FAMILY))
+
+#define PANGO_WIN32_TYPE_FACE              (pango_win32_face_get_type ())
+#define PANGO_WIN32_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_WIN32_TYPE_FACE, PangoWin32Face))
+#define PANGO_WIN32_IS_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_WIN32_TYPE_FACE))
+
+static GType      pango_win32_face_get_type          (void);
+
+static GType      pango_win32_family_get_type        (void);
+
+static void       pango_win32_face_list_sizes        (PangoFontFace  *face,
+                                                     int           **sizes,
+                                                     int            *n_sizes);
+
+static void       pango_win32_font_map_finalize      (GObject                      *object);
+static PangoFont *pango_win32_font_map_load_font     (PangoFontMap                 *fontmap,
+                                                     PangoContext                 *context,
+                                                     const PangoFontDescription   *description);
+static void       pango_win32_font_map_list_families (PangoFontMap                 *fontmap,
+                                                     PangoFontFamily            ***families,
+                                                     int                          *n_families);
+
+static PangoFont *pango_win32_font_map_real_find_font (PangoWin32FontMap           *win32fontmap,
+                                                      PangoContext                *context,
+                                                      PangoWin32Face              *face,
+                                                      const PangoFontDescription  *description);
+
+static void       pango_win32_fontmap_cache_clear    (PangoWin32FontMap            *win32fontmap);
+
+static void       pango_win32_insert_font            (PangoWin32FontMap            *fontmap,
+                                                     LOGFONTW                     *lfp,
+                                                     gboolean                      is_synthetic);
+
+static PangoWin32Family *pango_win32_get_font_family (PangoWin32FontMap            *win32fontmap,
+                                                     const char                   *family_name);
+
+static const char *pango_win32_face_get_face_name    (PangoFontFace *face);
+
+static PangoWin32FontMap *default_fontmap = NULL;
+
+G_DEFINE_TYPE (PangoWin32FontMap, _pango_win32_font_map, PANGO_TYPE_FONT_MAP)
+
+#define TOLOWER(c) \
+  (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' + 'a' : (c))
+
+static guint
+case_insensitive_str_hash (const char *key)
+{
+  const char *p = key;
+  guint h = TOLOWER (*p);
+
+  if (h)
+    {
+      for (p += 1; *p != '\0'; p++)
+       h = (h << 5) - h + TOLOWER (*p);
+    }
+
+  return h;
+}
+
+static gboolean
+case_insensitive_str_equal (const char *key1,
+                           const char *key2)
+{
+  while (*key1 && *key2 && TOLOWER (*key1) == TOLOWER (*key2))
+    key1++, key2++;
+  return (!*key1 && !*key2);
+}
+
+static guint
+case_insensitive_wcs_hash (const wchar_t *key)
+{
+  const wchar_t *p = key;
+  guint h = TOLOWER (*p);
+
+  if (h)
+    {
+      for (p += 1; *p != '\0'; p++)
+       h = (h << 5) - h + TOLOWER (*p);
+    }
+
+  return h;
+}
+
+static gboolean
+case_insensitive_wcs_equal (const wchar_t *key1,
+                           const wchar_t *key2)
+{
+  while (*key1 && *key2 && TOLOWER (*key1) == TOLOWER (*key2))
+    key1++, key2++;
+  return (!*key1 && !*key2);
+}
+
+/* A hash function for LOGFONTWs that takes into consideration only
+ * those fields that indicate a specific .ttf file is in use:
+ * lfFaceName, lfItalic and lfWeight. Dunno how correct this is.
+ */
+static guint
+logfontw_nosize_hash (const LOGFONTW *lfp)
+{
+  return case_insensitive_wcs_hash (lfp->lfFaceName) + (lfp->lfItalic != 0) + lfp->lfWeight;
+}
+
+/* Ditto comparison function */
+static gboolean
+logfontw_nosize_equal (const LOGFONTW *lfp1,
+                      const LOGFONTW *lfp2)
+{
+  return (case_insensitive_wcs_equal (lfp1->lfFaceName, lfp2->lfFaceName)
+         && (lfp1->lfItalic != 0) == (lfp2->lfItalic != 0)
+         && lfp1->lfWeight == lfp2->lfWeight);
+}
+
+static int CALLBACK
+pango_win32_inner_enum_proc (LOGFONTW    *lfp,
+                            TEXTMETRICW *metrics,
+                            DWORD        fontType,
+                            LPARAM       lParam)
+{
+  PangoWin32FontMap *win32fontmap = (PangoWin32FontMap *)lParam;
+
+  /* Windows generates synthetic vertical writing versions of East
+   * Asian fonts with @ prepended to their name, ignore them.
+   */
+  if (lfp->lfFaceName[0] != '@')
+    pango_win32_insert_font (win32fontmap, lfp, FALSE);
+
+  return 1;
+}
+
+static int CALLBACK
+pango_win32_enum_proc (LOGFONTW       *lfp,
+                      NEWTEXTMETRICW *metrics,
+                      DWORD           fontType,
+                      LPARAM          lParam)
+{
+  LOGFONTW lf;
+
+  PING (("%S: %lu %lx", lfp->lfFaceName, fontType, metrics->ntmFlags));
+
+  if (fontType == TRUETYPE_FONTTYPE ||
+      (_pango_win32_os_version_info.dwMajorVersion >= 5 &&
+       ((metrics->ntmFlags & NTM_PS_OPENTYPE) || (metrics->ntmFlags & NTM_TYPE1))))
+    {
+      lf = *lfp;
+
+      EnumFontFamiliesExW (_pango_win32_hdc, &lf,
+                          (FONTENUMPROCW) pango_win32_inner_enum_proc,
+                          lParam, 0);
+    }
+
+  return 1;
+}
+
+static void
+synthesize_foreach (gpointer key,
+                   gpointer value,
+                   gpointer user_data)
+{
+  PangoWin32Family *win32family = value;
+  PangoWin32FontMap *win32fontmap = user_data;
+
+  enum { NORMAL, BOLDER, SLANTED };
+  PangoWin32Face *variant[4] = { NULL, NULL, NULL, NULL };
+
+  GSList *p;
+
+  LOGFONTW lf;
+
+  p = win32family->faces;
+  while (p)
+    {
+      PangoWin32Face *win32face = p->data;
+
+      /* Don't synthesize anything unless it's a monospace, serif, or sans font */
+      if (!((win32face->logfontw.lfPitchAndFamily & 0xF0) == FF_MODERN ||
+           (win32face->logfontw.lfPitchAndFamily & 0xF0) == FF_ROMAN ||
+           (win32face->logfontw.lfPitchAndFamily & 0xF0) == FF_SWISS))
+       return;
+
+      if (pango_font_description_get_weight (win32face->description) == PANGO_WEIGHT_NORMAL &&
+         pango_font_description_get_style (win32face->description) == PANGO_STYLE_NORMAL)
+       variant[NORMAL] = win32face;
+
+      if (pango_font_description_get_weight (win32face->description) > PANGO_WEIGHT_NORMAL &&
+         pango_font_description_get_style (win32face->description) == PANGO_STYLE_NORMAL)
+       variant[BOLDER] = win32face;
+
+      if (pango_font_description_get_weight (win32face->description) == PANGO_WEIGHT_NORMAL &&
+         pango_font_description_get_style (win32face->description) >= PANGO_STYLE_OBLIQUE)
+       variant[SLANTED] = win32face;
+
+      if (pango_font_description_get_weight (win32face->description) > PANGO_WEIGHT_NORMAL &&
+         pango_font_description_get_style (win32face->description) >= PANGO_STYLE_OBLIQUE)
+       variant[BOLDER+SLANTED] = win32face;
+
+      p = p->next;
+    }
+
+  if (variant[NORMAL] != NULL && variant[BOLDER] == NULL)
+    {
+      lf = variant[NORMAL]->logfontw;
+      lf.lfWeight = FW_BOLD;
+      
+      pango_win32_insert_font (win32fontmap, &lf, TRUE);
+    }
+
+  if (variant[NORMAL] != NULL && variant[SLANTED] == NULL)
+    {
+      lf = variant[NORMAL]->logfontw;
+      lf.lfItalic = 255;
+      
+      pango_win32_insert_font (win32fontmap, &lf, TRUE);
+    }
+
+  if (variant[NORMAL] != NULL &&
+      variant[BOLDER+SLANTED] == NULL)
+    {
+      lf = variant[NORMAL]->logfontw;
+      lf.lfWeight = FW_BOLD;
+      lf.lfItalic = 255;
+
+      pango_win32_insert_font (win32fontmap, &lf, TRUE);
+    }
+  else if (variant[BOLDER] != NULL &&
+          variant[BOLDER+SLANTED] == NULL)
+    {
+      lf = variant[BOLDER]->logfontw;
+      lf.lfItalic = 255;
+
+      pango_win32_insert_font (win32fontmap, &lf, TRUE);
+    }
+  else if (variant[SLANTED] != NULL &&
+          variant[BOLDER+SLANTED] == NULL)
+    {
+      lf = variant[SLANTED]->logfontw;
+      lf.lfWeight = FW_BOLD;
+
+      pango_win32_insert_font (win32fontmap, &lf, TRUE);
+    }
+}
+
+static void
+create_standard_family (PangoWin32FontMap *win32fontmap,
+                       const char        *standard_family_name)
+{
+  int i;
+  int n_aliases;
+  char **aliases;
+
+  pango_lookup_aliases (standard_family_name, &aliases, &n_aliases);
+  for (i = 0; i < n_aliases; i++)
+    {
+      PangoWin32Family *existing_family = g_hash_table_lookup (win32fontmap->families, aliases[i]);
+
+      if (existing_family)
+       {
+         PangoWin32Family *new_family = pango_win32_get_font_family (win32fontmap, standard_family_name);
+         GSList *p = existing_family->faces;
+
+         new_family->is_monospace = existing_family->is_monospace;
+
+         while (p)
+           {
+             const PangoWin32Face *old_face = p->data;
+             PangoWin32Face *new_face = g_object_new (PANGO_WIN32_TYPE_FACE, NULL);
+             int j;
+
+             new_face->logfontw = old_face->logfontw;
+             new_face->description = pango_font_description_copy_static (old_face->description);
+             pango_font_description_set_family_static (new_face->description, standard_family_name);
+
+             for (j = 0; j < PANGO_WIN32_N_COVERAGES; j++)
+               {
+                 if (old_face->coverages[j] != NULL)
+                   new_face->coverages[j] = pango_coverage_ref (old_face->coverages[j]);
+                 else
+                   new_face->coverages[j] = NULL;
+               }
+
+             new_face->is_synthetic = TRUE;
+
+             new_face->has_cmap = old_face->has_cmap;
+             new_face->cmap_format = old_face->cmap_format;
+             new_face->cmap = old_face->cmap;
+
+             new_face->cached_fonts = NULL;
+
+             new_family->faces = g_slist_append (new_family->faces, new_face);
+
+             p = p->next;
+           }
+         return;
+       }
+    }
+  /* XXX What to do if none of the members of aliases for standard_family_name
+   * exists on this machine?
+   */
+}
+
+static void
+_pango_win32_font_map_init (PangoWin32FontMap *win32fontmap)
+{
+  LOGFONTW logfont;
+
+  win32fontmap->families = g_hash_table_new ((GHashFunc) case_insensitive_str_hash,
+                                            (GEqualFunc) case_insensitive_str_equal);
+  win32fontmap->fonts =
+    g_hash_table_new ((GHashFunc) logfontw_nosize_hash, (GEqualFunc) logfontw_nosize_equal);
+
+  win32fontmap->font_cache = pango_win32_font_cache_new ();
+  win32fontmap->freed_fonts = g_queue_new ();
+
+  memset (&logfont, 0, sizeof (logfont));
+  logfont.lfCharSet = DEFAULT_CHARSET;
+  EnumFontFamiliesExW (_pango_win32_hdc, &logfont,
+                      (FONTENUMPROCW) pango_win32_enum_proc,
+                      (LPARAM) win32fontmap, 0);
+
+  g_hash_table_foreach (win32fontmap->families, synthesize_foreach, win32fontmap);
+
+  /* Create synthetic "Sans", "Serif" and "Monospace" families */
+  create_standard_family (win32fontmap, "Sans");
+  create_standard_family (win32fontmap, "Serif");
+  create_standard_family (win32fontmap, "Monospace");
+
+  win32fontmap->resolution = (PANGO_SCALE / (double) GetDeviceCaps (_pango_win32_hdc, LOGPIXELSY)) * 72.0;
+}
+
+static void
+_pango_win32_font_map_class_init (PangoWin32FontMapClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontMapClass *fontmap_class = PANGO_FONT_MAP_CLASS (class);
+  int i;
+
+  class->find_font = pango_win32_font_map_real_find_font;
+  object_class->finalize = pango_win32_font_map_finalize;
+  fontmap_class->load_font = pango_win32_font_map_load_font;
+  fontmap_class->list_families = pango_win32_font_map_list_families;
+  fontmap_class->shape_engine_type = PANGO_RENDER_TYPE_WIN32;
+
+  pango_win32_get_dc ();
+
+  for (i = 0; _pango_included_win32_modules[i].list; i++)
+    pango_module_register (&_pango_included_win32_modules[i]);
+}
+
+/**
+ * pango_win32_font_map_for_display:
+ *
+ * Returns a #PangoWin32FontMap. Font maps are cached and should
+ * not be freed. If the font map is no longer needed, it can
+ * be released with pango_win32_shutdown_display().
+ *
+ * Return value: a #PangoFontMap.
+ **/
+PangoFontMap *
+pango_win32_font_map_for_display (void)
+{
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+  if (default_fontmap != NULL)
+    return PANGO_FONT_MAP (default_fontmap);
+
+  default_fontmap = g_object_new (PANGO_TYPE_WIN32_FONT_MAP, NULL);
+
+  return PANGO_FONT_MAP (default_fontmap);
+}
+
+/**
+ * pango_win32_shutdown_display:
+ *
+ * Free cached resources.
+ **/
+void
+pango_win32_shutdown_display (void)
+{
+  if (default_fontmap)
+    {
+      pango_win32_fontmap_cache_clear (default_fontmap);
+      g_object_unref (default_fontmap);
+
+      default_fontmap = NULL;
+    }
+}
+
+static void
+pango_win32_font_map_finalize (GObject *object)
+{
+  PangoWin32FontMap *win32fontmap = PANGO_WIN32_FONT_MAP (object);
+
+  g_list_foreach (win32fontmap->freed_fonts->head, (GFunc)g_object_unref, NULL);
+  g_queue_free (win32fontmap->freed_fonts);
+
+  pango_win32_font_cache_free (win32fontmap->font_cache);
+
+  G_OBJECT_CLASS (_pango_win32_font_map_parent_class)->finalize (object);
+}
+
+/*
+ * PangoWin32Family
+ */
+static void
+pango_win32_family_list_faces (PangoFontFamily  *family,
+                              PangoFontFace  ***faces,
+                              int              *n_faces)
+{
+  PangoWin32Family *win32family = PANGO_WIN32_FAMILY (family);
+  GSList *p;
+  int n;
+
+  p = win32family->faces;
+  n = 0;
+  while (p)
+    {
+      n++;
+      p = p->next;
+    }
+
+  if (faces)
+    {
+      int i;
+
+      *faces = g_new (PangoFontFace *, n);
+
+      p = win32family->faces;
+      i = 0;
+      while (p)
+       {
+         (*faces)[i++] = p->data;
+         p = p->next;
+       }
+    }
+  if (n_faces)
+    *n_faces = n;
+}
+
+static const char *
+pango_win32_family_get_name (PangoFontFamily  *family)
+{
+  PangoWin32Family *win32family = PANGO_WIN32_FAMILY (family);
+
+  return win32family->family_name;
+}
+
+static gboolean
+pango_win32_family_is_monospace (PangoFontFamily *family)
+{
+  PangoWin32Family *win32family = PANGO_WIN32_FAMILY (family);
+
+  return win32family->is_monospace;
+}
+
+static void
+pango_win32_family_class_init (PangoFontFamilyClass *class)
+{
+  class->list_faces = pango_win32_family_list_faces;
+  class->get_name = pango_win32_family_get_name;
+  class->is_monospace = pango_win32_family_is_monospace;
+}
+
+static GType
+pango_win32_family_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoFontFamilyClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_win32_family_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoWin32Family),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) NULL,
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT_FAMILY,
+                                           I_("PangoWin32Family"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+static void
+list_families_foreach (gpointer key,
+                      gpointer value,
+                      gpointer user_data)
+{
+  GSList **list = user_data;
+
+  *list = g_slist_prepend (*list, value);
+}
+
+static void
+pango_win32_font_map_list_families (PangoFontMap      *fontmap,
+                                   PangoFontFamily ***families,
+                                   int               *n_families)
+{
+  GSList *family_list = NULL;
+  GSList *tmp_list;
+  PangoWin32FontMap *win32fontmap = (PangoWin32FontMap *)fontmap;
+
+  if (!n_families)
+    return;
+
+  g_hash_table_foreach (win32fontmap->families, list_families_foreach, &family_list);
+
+  *n_families = g_slist_length (family_list);
+
+  if (families)
+    {
+      int i = 0;
+
+      *families = g_new (PangoFontFamily *, *n_families);
+
+      tmp_list = family_list;
+      while (tmp_list)
+       {
+         (*families)[i] = tmp_list->data;
+         i++;
+         tmp_list = tmp_list->next;
+       }
+    }
+
+  g_slist_free (family_list);
+}
+
+static PangoWin32Family *
+pango_win32_get_font_family (PangoWin32FontMap *win32fontmap,
+                            const char        *family_name)
+{
+  PangoWin32Family *win32family = g_hash_table_lookup (win32fontmap->families, family_name);
+  if (!win32family)
+    {
+      win32family = g_object_new (PANGO_WIN32_TYPE_FAMILY, NULL);
+      win32family->family_name = g_strdup (family_name);
+      win32family->faces = NULL;
+
+      g_hash_table_insert (win32fontmap->families, win32family->family_name, win32family);
+    }
+
+  return win32family;
+}
+
+static PangoFont *
+pango_win32_font_map_load_font (PangoFontMap               *fontmap,
+                               PangoContext               *context,
+                               const PangoFontDescription *description)
+{
+  PangoWin32FontMap *win32fontmap = (PangoWin32FontMap *)fontmap;
+  PangoWin32Family *win32family;
+  PangoFont *result = NULL;
+  GSList *tmp_list;
+  const char *family;
+
+  g_return_val_if_fail (description != NULL, NULL);
+
+  family = pango_font_description_get_family (description);
+  family = family ? family : "";
+  PING (("name=%s", family));
+
+  win32family = g_hash_table_lookup (win32fontmap->families, family);
+  if (win32family)
+    {
+      PangoWin32Face *best_match = NULL;
+
+      PING (("got win32family"));
+      tmp_list = win32family->faces;
+      while (tmp_list)
+       {
+         PangoWin32Face *face = tmp_list->data;
+
+         if (pango_font_description_better_match (description,
+                                                  best_match ? best_match->description : NULL,
+                                                  face->description))
+           best_match = face;
+
+         tmp_list = tmp_list->next;
+       }
+
+      if (best_match)
+       result = PANGO_WIN32_FONT_MAP_GET_CLASS (win32fontmap)->find_font (win32fontmap, context,
+                                                                          best_match,
+                                                                          description);
+       /* TODO: Handle the case that result == NULL. */
+      else
+       PING (("no best match!"));
+    }
+
+  return result;
+}
+
+static PangoWin32Font *
+pango_win32_font_neww (PangoFontMap   *fontmap,
+                      const LOGFONTW *lfp,
+                      int            size)
+{
+  PangoWin32Font *result;
+
+  g_return_val_if_fail (fontmap != NULL, NULL);
+  g_return_val_if_fail (lfp != NULL, NULL);
+
+  result = (PangoWin32Font *)g_object_new (PANGO_TYPE_WIN32_FONT, NULL);
+
+  g_assert (result->fontmap == NULL);
+  result->fontmap = fontmap;
+  g_object_add_weak_pointer (G_OBJECT (result->fontmap), (gpointer *) (gpointer) &result->fontmap);
+
+  result->size = size;
+  _pango_win32_make_matching_logfontw (fontmap, lfp, size, &result->logfontw);
+
+  return result;
+}
+
+static PangoFont *
+pango_win32_font_map_real_find_font (PangoWin32FontMap          *win32fontmap,
+                                    PangoContext               *context,
+                                    PangoWin32Face             *face,
+                                    const PangoFontDescription *description)
+{
+  PangoFontMap *fontmap = PANGO_FONT_MAP (win32fontmap);
+  PangoWin32Font *win32font;
+  GSList *tmp_list = face->cached_fonts;
+  int size = pango_font_description_get_size (description);
+
+  if (pango_font_description_get_size_is_absolute (description))
+    size = (int) 0.5 + (size * win32fontmap->resolution) / PANGO_SCALE;
+
+  PING (("got best match:%S size=%d",face->logfontw.lfFaceName,size));
+
+  while (tmp_list)
+    {
+      win32font = tmp_list->data;
+      if (win32font->size == size)
+       {
+         PING (("size matches"));
+
+         g_object_ref (win32font);
+         if (win32font->in_cache)
+           _pango_win32_fontmap_cache_remove (fontmap, win32font);
+
+         return (PangoFont *)win32font;
+       }
+      tmp_list = tmp_list->next;
+    }
+
+  win32font = pango_win32_font_neww (fontmap, &face->logfontw, size);
+
+  if (!win32font)
+    return NULL;
+
+  win32font->win32face = face;
+  face->cached_fonts = g_slist_prepend (face->cached_fonts, win32font);
+
+  return (PangoFont *)win32font;
+}
+
+static gchar *
+get_family_nameA (const LOGFONTA *lfp)
+{
+  HFONT hfont;
+  HFONT oldhfont;
+
+  struct name_header header;
+  struct name_record record;
+
+  gint unicode_ix = -1, mac_ix = -1, microsoft_ix = -1;
+  gint name_ix;
+  gchar *codeset;
+
+  gchar *string = NULL;
+  gchar *name;
+
+  gint i, l;
+  gsize nbytes;
+
+  /* If lfFaceName is ASCII, assume it is the common (English) name
+   * for the font. Is this valid? Do some TrueType fonts have
+   * different names in French, German, etc, and does the system
+   * return these if the locale is set to use French, German, etc?
+   */
+  l = strlen (lfp->lfFaceName);
+  for (i = 0; i < l; i++)
+    if (lfp->lfFaceName[i] < ' ' || lfp->lfFaceName[i] > '~')
+      break;
+
+  if (i == l)
+    return g_strdup (lfp->lfFaceName);
+
+  if ((hfont = CreateFontIndirect (lfp)) == NULL)
+    goto fail0;
+
+  if ((oldhfont = SelectObject (_pango_win32_hdc, hfont)) == NULL)
+    goto fail1;
+
+  if (!_pango_win32_get_name_header (_pango_win32_hdc, &header))
+    goto fail2;
+
+  PING (("%d name records", header.num_records));
+
+  for (i = 0; i < header.num_records; i++)
+    {
+      if (!_pango_win32_get_name_record (_pango_win32_hdc, i, &record))
+       goto fail2;
+
+      if ((record.name_id != 1 && record.name_id != 16) || record.string_length <= 0)
+       continue;
+
+      PING (("platform:%d encoding:%d language:%04x name_id:%d",
+            record.platform_id, record.encoding_id, record.language_id, record.name_id));
+
+      if (record.platform_id == APPLE_UNICODE_PLATFORM_ID ||
+         record.platform_id == ISO_PLATFORM_ID)
+       unicode_ix = i;
+      else if (record.platform_id == MACINTOSH_PLATFORM_ID &&
+              record.encoding_id == 0 && /* Roman */
+              record.language_id == 0) /* English */
+       mac_ix = i;
+      else if (record.platform_id == MICROSOFT_PLATFORM_ID)
+       if ((microsoft_ix == -1 ||
+            PRIMARYLANGID (record.language_id) == LANG_ENGLISH) &&
+           (record.encoding_id == SYMBOL_ENCODING_ID ||
+            record.encoding_id == UNICODE_ENCODING_ID ||
+            record.encoding_id == UCS4_ENCODING_ID))
+         microsoft_ix = i;
+    }
+
+  if (microsoft_ix >= 0)
+    name_ix = microsoft_ix;
+  else if (mac_ix >= 0)
+    name_ix = mac_ix;
+  else if (unicode_ix >= 0)
+    name_ix = unicode_ix;
+  else
+    goto fail2;
+
+  if (!_pango_win32_get_name_record (_pango_win32_hdc, name_ix, &record))
+    goto fail2;
+
+  string = g_malloc (record.string_length + 1);
+  if (GetFontData (_pango_win32_hdc, NAME,
+                  header.string_storage_offset + record.string_offset,
+                  string, record.string_length) != record.string_length)
+    goto fail2;
+
+  string[record.string_length] = '\0';
+
+  if (name_ix == microsoft_ix)
+    if (record.encoding_id == SYMBOL_ENCODING_ID ||
+       record.encoding_id == UNICODE_ENCODING_ID ||
+       record.encoding_id == UCS4_ENCODING_ID)
+      codeset = "UTF-16BE";
+    else
+      codeset = "UCS-4BE";
+  else if (name_ix == mac_ix)
+    codeset = "MacRoman";
+  else /* name_ix == unicode_ix */
+    codeset = "UCS-4BE";
+
+  name = g_convert (string, record.string_length, "UTF-8", codeset, NULL, &nbytes, NULL);
+  if (name == NULL)
+    goto fail2;
+  g_free (string);
+
+  PING (("%s", name));
+
+  SelectObject (_pango_win32_hdc, oldhfont);
+  DeleteObject (hfont);
+
+  return name;
+
+ fail2:
+  g_free (string);
+  SelectObject (_pango_win32_hdc, oldhfont);
+
+ fail1:
+  DeleteObject (hfont);
+
+ fail0:
+  return g_locale_to_utf8 (lfp->lfFaceName, -1, NULL, NULL, NULL);
+}
+
+/**
+ * pango_win32_font_description_from_logfont:
+ * @lfp: a LOGFONTA
+ *
+ * Creates a #PangoFontDescription that matches the specified LOGFONTA.
+ *
+ * The face name, italicness and weight fields in the LOGFONTA are used
+ * to set up the resulting #PangoFontDescription. If the face name in
+ * the LOGFONTA contains non-ASCII characters the font is temporarily
+ * loaded (using CreateFontIndirect()) and an ASCII (usually English)
+ * name for it is looked up from the font name tables in the font
+ * data. If that doesn't work, the face name is converted from the
+ * system codepage to UTF-8 and that is used.
+ *
+ * Return value: the newly allocated #PangoFontDescription, which
+ *  should be freed using pango_font_description_free()
+ *
+ * Since: 1.12
+ */
+PangoFontDescription *
+pango_win32_font_description_from_logfont (const LOGFONT *lfp)
+{
+  PangoFontDescription *description;
+  gchar *family;
+  PangoStyle style;
+  PangoVariant variant;
+  PangoWeight weight;
+  PangoStretch stretch;
+
+  family = get_family_nameA (lfp);
+
+  if (!lfp->lfItalic)
+    style = PANGO_STYLE_NORMAL;
+  else
+    style = PANGO_STYLE_ITALIC;
+
+  variant = PANGO_VARIANT_NORMAL;
+
+  /* The PangoWeight values PANGO_WEIGHT_* map exactly do Windows FW_*
+   * values.  Is this on purpose? Quantize the weight to exact
+   * PANGO_WEIGHT_* values. Is this a good idea?
+   */
+  if (lfp->lfWeight == FW_DONTCARE)
+    weight = PANGO_WEIGHT_NORMAL;
+  else if (lfp->lfWeight <= (FW_ULTRALIGHT + FW_LIGHT) / 2)
+    weight = PANGO_WEIGHT_ULTRALIGHT;
+  else if (lfp->lfWeight <= (FW_LIGHT + FW_NORMAL) / 2)
+    weight = PANGO_WEIGHT_LIGHT;
+  else if (lfp->lfWeight <= (FW_NORMAL + FW_SEMIBOLD) / 2)
+    weight = PANGO_WEIGHT_NORMAL;
+  else if (lfp->lfWeight <= (FW_SEMIBOLD + FW_BOLD) / 2)
+    weight = PANGO_WEIGHT_SEMIBOLD;
+  else if (lfp->lfWeight <= (FW_BOLD + FW_ULTRABOLD) / 2)
+    weight = PANGO_WEIGHT_BOLD;
+  else if (lfp->lfWeight <= (FW_ULTRABOLD + FW_HEAVY) / 2)
+    weight = PANGO_WEIGHT_ULTRABOLD;
+  else
+    weight = PANGO_WEIGHT_HEAVY;
+
+  /* XXX No idea how to figure out the stretch */
+  stretch = PANGO_STRETCH_NORMAL;
+
+  description = pango_font_description_new ();
+  pango_font_description_set_family (description, family);
+  g_free(family);
+  pango_font_description_set_style (description, style);
+  pango_font_description_set_weight (description, weight);
+  pango_font_description_set_stretch (description, stretch);
+  pango_font_description_set_variant (description, variant);
+
+  return description;
+}
+
+static gchar *
+get_family_nameW (const LOGFONTW *lfp)
+{
+  HFONT hfont;
+  HFONT oldhfont;
+
+  struct name_header header;
+  struct name_record record;
+
+  gint unicode_ix = -1, mac_ix = -1, microsoft_ix = -1;
+  gint name_ix;
+  gchar *codeset;
+
+  gchar *string = NULL;
+  gchar *name;
+
+  gint i, l;
+  gsize nbytes;
+
+  /* If lfFaceName is ASCII, assume it is the common (English) name
+   * for the font. Is this valid? Do some TrueType fonts have
+   * different names in French, German, etc, and does the system
+   * return these if the locale is set to use French, German, etc?
+   */
+  l = wcslen (lfp->lfFaceName);
+  for (i = 0; i < l; i++)
+    if (lfp->lfFaceName[i] < ' ' || lfp->lfFaceName[i] > '~')
+      break;
+
+  if (i == l)
+    return g_utf16_to_utf8 (lfp->lfFaceName, -1, NULL, NULL, NULL);
+
+  if ((hfont = CreateFontIndirectW (lfp)) == NULL)
+    goto fail0;
+
+  if ((oldhfont = SelectObject (_pango_win32_hdc, hfont)) == NULL)
+    goto fail1;
+
+  if (!_pango_win32_get_name_header (_pango_win32_hdc, &header))
+    goto fail2;
+
+  PING (("%d name records", header.num_records));
+
+  for (i = 0; i < header.num_records; i++)
+    {
+      if (!_pango_win32_get_name_record (_pango_win32_hdc, i, &record))
+       goto fail2;
+
+      if ((record.name_id != 1 && record.name_id != 16) || record.string_length <= 0)
+       continue;
+
+      PING (("platform:%d encoding:%d language:%04x name_id:%d",
+            record.platform_id, record.encoding_id, record.language_id, record.name_id));
+
+      if (record.platform_id == APPLE_UNICODE_PLATFORM_ID ||
+         record.platform_id == ISO_PLATFORM_ID)
+       unicode_ix = i;
+      else if (record.platform_id == MACINTOSH_PLATFORM_ID &&
+              record.encoding_id == 0 && /* Roman */
+              record.language_id == 0) /* English */
+       mac_ix = i;
+      else if (record.platform_id == MICROSOFT_PLATFORM_ID)
+       if ((microsoft_ix == -1 ||
+            PRIMARYLANGID (record.language_id) == LANG_ENGLISH) &&
+           (record.encoding_id == SYMBOL_ENCODING_ID ||
+            record.encoding_id == UNICODE_ENCODING_ID ||
+            record.encoding_id == UCS4_ENCODING_ID))
+         microsoft_ix = i;
+    }
+
+  if (microsoft_ix >= 0)
+    name_ix = microsoft_ix;
+  else if (mac_ix >= 0)
+    name_ix = mac_ix;
+  else if (unicode_ix >= 0)
+    name_ix = unicode_ix;
+  else
+    goto fail2;
+
+  if (!_pango_win32_get_name_record (_pango_win32_hdc, name_ix, &record))
+    goto fail2;
+
+  string = g_malloc (record.string_length + 1);
+  if (GetFontData (_pango_win32_hdc, NAME,
+                  header.string_storage_offset + record.string_offset,
+                  string, record.string_length) != record.string_length)
+    goto fail2;
+
+  string[record.string_length] = '\0';
+
+  if (name_ix == microsoft_ix)
+    if (record.encoding_id == SYMBOL_ENCODING_ID ||
+       record.encoding_id == UNICODE_ENCODING_ID ||
+       record.encoding_id == UCS4_ENCODING_ID)
+      codeset = "UTF-16BE";
+    else
+      codeset = "UCS-4BE";
+  else if (name_ix == mac_ix)
+    codeset = "MacRoman";
+  else /* name_ix == unicode_ix */
+    codeset = "UCS-4BE";
+
+  name = g_convert (string, record.string_length, "UTF-8", codeset, NULL, &nbytes, NULL);
+  if (name == NULL)
+    goto fail2;
+  g_free (string);
+
+  PING (("%s", name));
+
+  SelectObject (_pango_win32_hdc, oldhfont);
+  DeleteObject (hfont);
+
+  return name;
+
+ fail2:
+  g_free (string);
+  SelectObject (_pango_win32_hdc, oldhfont);
+
+ fail1:
+  DeleteObject (hfont);
+
+ fail0:
+  return g_utf16_to_utf8 (lfp->lfFaceName, -1, NULL, NULL, NULL);
+}
+
+/**
+ * pango_win32_font_description_from_logfontw:
+ * @lfp: a LOGFONTW
+ *
+ * Creates a #PangoFontDescription that matches the specified LOGFONTW.
+ *
+ * The face name, italicness and weight fields in the LOGFONTW are used
+ * to set up the resulting #PangoFontDescription. If the face name in
+ * the LOGFONTW contains non-ASCII characters the font is temporarily
+ * loaded (using CreateFontIndirect()) and an ASCII (usually English)
+ * name for it is looked up from the font name tables in the font
+ * data. If that doesn't work, the face name is converted from UTF-16
+ * to UTF-8 and that is used.
+ *
+ * Return value: the newly allocated #PangoFontDescription, which
+ *  should be freed using pango_font_description_free()
+ *
+ * Since: 1.16
+ */
+PangoFontDescription *
+pango_win32_font_description_from_logfontw (const LOGFONTW *lfp)
+{
+  PangoFontDescription *description;
+  gchar *family;
+  PangoStyle style;
+  PangoVariant variant;
+  PangoWeight weight;
+  PangoStretch stretch;
+
+  family = get_family_nameW (lfp);
+
+  if ((lfp->lfPitchAndFamily & 0xF0) == FF_ROMAN && lfp->lfItalic)
+    style = PANGO_STYLE_ITALIC;
+  else if (lfp->lfItalic)
+    style = PANGO_STYLE_OBLIQUE;
+  else
+    style = PANGO_STYLE_NORMAL;
+
+  variant = PANGO_VARIANT_NORMAL;
+
+  /* The PangoWeight values PANGO_WEIGHT_* map exactly do Windows FW_*
+   * values.  Is this on purpose? Quantize the weight to exact
+   * PANGO_WEIGHT_* values. Is this a good idea?
+   */
+  if (lfp->lfWeight == FW_DONTCARE)
+    weight = PANGO_WEIGHT_NORMAL;
+  else if (lfp->lfWeight <= (FW_ULTRALIGHT + FW_LIGHT) / 2)
+    weight = PANGO_WEIGHT_ULTRALIGHT;
+  else if (lfp->lfWeight <= (FW_LIGHT + FW_NORMAL) / 2)
+    weight = PANGO_WEIGHT_LIGHT;
+  else if (lfp->lfWeight <= (FW_NORMAL + FW_SEMIBOLD) / 2)
+    weight = PANGO_WEIGHT_NORMAL;
+  else if (lfp->lfWeight <= (FW_SEMIBOLD + FW_BOLD) / 2)
+    weight = PANGO_WEIGHT_SEMIBOLD;
+  else if (lfp->lfWeight <= (FW_BOLD + FW_ULTRABOLD) / 2)
+    weight = PANGO_WEIGHT_BOLD;
+  else if (lfp->lfWeight <= (FW_ULTRABOLD + FW_HEAVY) / 2)
+    weight = PANGO_WEIGHT_ULTRABOLD;
+  else
+    weight = PANGO_WEIGHT_HEAVY;
+
+  /* XXX No idea how to figure out the stretch */
+  stretch = PANGO_STRETCH_NORMAL;
+
+  description = pango_font_description_new ();
+  pango_font_description_set_family (description, family);
+  g_free(family);
+  pango_font_description_set_style (description, style);
+  pango_font_description_set_weight (description, weight);
+  pango_font_description_set_stretch (description, stretch);
+  pango_font_description_set_variant (description, variant);
+
+  return description;
+}
+
+static char *
+charset_name (int charset)
+{
+  static char num[10];
+
+  switch (charset)
+    {
+#define CASE(x) case x##_CHARSET: return #x
+      CASE (ANSI);
+      CASE (DEFAULT);
+      CASE (SYMBOL);
+      CASE (SHIFTJIS);
+      CASE (HANGUL);
+      CASE (GB2312);
+      CASE (CHINESEBIG5);
+      CASE (GREEK);
+      CASE (TURKISH);
+      CASE (HEBREW);
+      CASE (ARABIC);
+      CASE (BALTIC);
+      CASE (RUSSIAN);
+      CASE (THAI);
+      CASE (EASTEUROPE);
+      CASE (OEM);
+      CASE (JOHAB);
+      CASE (VIETNAMESE);
+      CASE (MAC);
+#undef CASE
+    default:
+      sprintf (num, "%d", charset);
+      return num;
+    }
+}
+
+static char *
+ff_name (int ff)
+{
+  static char num[10];
+
+  switch (ff)
+    {
+#define CASE(x) case FF_##x: return #x
+      CASE (DECORATIVE);
+      CASE (DONTCARE);
+      CASE (MODERN);
+      CASE (ROMAN);
+      CASE (SCRIPT);
+      CASE (SWISS);
+#undef CASE
+    default:
+      sprintf (num, "%d", ff);
+      return num;
+    }
+}
+
+static void
+pango_win32_insert_font (PangoWin32FontMap *win32fontmap,
+                        LOGFONTW          *lfp,
+                        gboolean           is_synthetic)
+{
+  LOGFONTW *lfp2 = NULL;
+  PangoFontDescription *description;
+  PangoWin32Family *win32family;
+  PangoWin32Face *win32face;
+  gint i;
+
+  PING (("face=%S,charset=%s,it=%s,wt=%ld,ht=%ld,ff=%s%s",
+        lfp->lfFaceName,
+        charset_name (lfp->lfCharSet),
+        lfp->lfItalic ? "yes" : "no",
+        lfp->lfWeight,
+        lfp->lfHeight,
+        ff_name (lfp->lfPitchAndFamily & 0xF0),
+        is_synthetic ? " synthetic" : ""));
+
+  /* Ignore Symbol fonts (which don't have any Unicode mapping
+   * table). We could also be fancy and use the PostScript glyph name
+   * table for such if present, and build a Unicode map by mapping
+   * each PostScript glyph name to Unicode character. Oh well.
+   */
+  if (lfp->lfCharSet == SYMBOL_CHARSET)
+    return;
+
+  if (g_hash_table_lookup (win32fontmap->fonts, lfp))
+    {
+      PING (("already have it"));
+      return;
+    }
+
+  PING (("not found"));
+  lfp2 = g_new (LOGFONTW, 1);
+  *lfp2 = *lfp;
+  g_hash_table_insert (win32fontmap->fonts, lfp2, lfp2);
+
+  description = pango_win32_font_description_from_logfontw (lfp2);
+
+  /* In some cases, extracting a name for a font can fail; such fonts
+   * aren't usable for us
+   */
+  if (!pango_font_description_get_family (description))
+    {
+      pango_font_description_free (description);
+      return;
+    }
+
+  win32face = g_object_new (PANGO_WIN32_TYPE_FACE, NULL);
+
+  PING (("win32face created: %p for %S", win32face, lfp->lfFaceName));
+
+  win32face->logfontw = *lfp;
+  win32face->description = description;
+
+  for (i = 0; i < PANGO_WIN32_N_COVERAGES; i++)
+     win32face->coverages[i] = NULL;
+
+  win32face->is_synthetic = is_synthetic;
+
+  win32face->has_cmap = TRUE;
+  win32face->cmap_format = 0;
+  win32face->cmap = NULL;
+
+  win32face->cached_fonts = NULL;
+
+  win32family =
+    pango_win32_get_font_family (win32fontmap,
+                                pango_font_description_get_family (win32face->description));
+  if ((lfp->lfPitchAndFamily & 0xF0) == FF_MODERN)
+    win32family->is_monospace = TRUE;
+    
+  win32family->faces = g_slist_append (win32family->faces, win32face);
+
+  PING (("name=%s, length(faces)=%d",
+        win32family->family_name, g_slist_length (win32family->faces)));
+}
+
+/* Given a LOGFONTW and size, make a matching LOGFONTW corresponding to
+ * an installed font.
+ */
+void
+_pango_win32_make_matching_logfontw (PangoFontMap   *fontmap,
+                                    const LOGFONTW *lfp,
+                                    int             size,
+                                    LOGFONTW       *out)
+{
+  PangoWin32FontMap *win32fontmap;
+  LOGFONTW *match;
+
+  PING (("lfp.face=%S,wt=%ld,ht=%ld,size:%d",
+        lfp->lfFaceName, lfp->lfWeight, lfp->lfHeight, size));
+  win32fontmap = PANGO_WIN32_FONT_MAP (fontmap);
+
+  match = g_hash_table_lookup (win32fontmap->fonts, lfp);
+
+  if (!match)
+    {
+      PING (("not found"));
+      return;
+    }
+
+  /* OK, we have a match; let's modify it to fit this size */
+
+  *out = *match;
+  out->lfHeight = -(int)((double)size / win32fontmap->resolution + 0.5);
+  out->lfWidth = 0;
+}
+
+static PangoFontDescription *
+pango_win32_face_describe (PangoFontFace *face)
+{
+  PangoWin32Face *win32face = PANGO_WIN32_FACE (face);
+
+  return pango_font_description_copy (win32face->description);
+}
+
+static const char *
+pango_win32_face_get_face_name (PangoFontFace *face)
+{
+  PangoWin32Face *win32face = PANGO_WIN32_FACE (face);
+
+  if (!win32face->face_name)
+    {
+      PangoFontDescription *desc = pango_font_face_describe (face);
+
+      pango_font_description_unset_fields (desc,
+                                          PANGO_FONT_MASK_FAMILY | PANGO_FONT_MASK_SIZE);
+
+      win32face->face_name = pango_font_description_to_string (desc);
+      pango_font_description_free (desc);
+    }
+
+  return win32face->face_name;
+}
+
+static gboolean
+pango_win32_face_is_synthesized (PangoFontFace *face)
+{
+  PangoWin32Face *win32face = PANGO_WIN32_FACE (face);
+
+  return win32face->is_synthetic;
+}
+
+static void
+pango_win32_face_class_init (PangoFontFaceClass *class)
+{
+  class->describe = pango_win32_face_describe;
+  class->get_face_name = pango_win32_face_get_face_name;
+  class->list_sizes = pango_win32_face_list_sizes;
+  class->is_synthesized = pango_win32_face_is_synthesized;
+}
+
+static void
+pango_win32_face_list_sizes (PangoFontFace  *face,
+                            int           **sizes,
+                            int            *n_sizes)
+{
+  /*
+   * for scalable fonts it's simple, and currently we only have such
+   * see : pango_win32_enum_proc(), TRUETYPE_FONTTYPE
+   */
+  *sizes = NULL;
+  *n_sizes = 0;
+}
+
+static GType
+pango_win32_face_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      static const GTypeInfo object_info =
+      {
+        sizeof (PangoFontFaceClass),
+        (GBaseInitFunc) NULL,
+        (GBaseFinalizeFunc) NULL,
+        (GClassInitFunc) pango_win32_face_class_init,
+        NULL,           /* class_finalize */
+        NULL,           /* class_data */
+        sizeof (PangoWin32Face),
+        0,              /* n_preallocs */
+        (GInstanceInitFunc) NULL,
+      };
+      
+      object_type = g_type_register_static (PANGO_TYPE_FONT_FACE,
+                                            I_("PangoWin32Face"),
+                                            &object_info, 0);
+    }
+  
+  return object_type;
+}
+
+/**
+ * pango_win32_font_map_get_font_cache:
+ * @font_map: a #PangoWin32FontMap.
+ *
+ * Obtains the font cache associated with the given font map.
+ *
+ * Return value: the #PangoWin32FontCache of @font_map.
+ **/
+PangoWin32FontCache *
+pango_win32_font_map_get_font_cache (PangoFontMap *font_map)
+{
+  g_return_val_if_fail (font_map != NULL, NULL);
+  g_return_val_if_fail (PANGO_WIN32_IS_FONT_MAP (font_map), NULL);
+
+  return PANGO_WIN32_FONT_MAP (font_map)->font_cache;
+}
+
+void
+_pango_win32_fontmap_cache_remove (PangoFontMap   *fontmap,
+                                  PangoWin32Font *win32font)
+{
+  PangoWin32FontMap *win32fontmap = PANGO_WIN32_FONT_MAP (fontmap);
+  GList *link = g_queue_find (win32fontmap->freed_fonts, win32font);
+
+  if (link)
+    g_queue_delete_link (win32fontmap->freed_fonts, link);
+  win32font->in_cache = FALSE;
+
+  g_object_unref (win32font);
+}
+
+static void
+pango_win32_fontmap_cache_clear (PangoWin32FontMap *win32fontmap)
+{
+  g_list_foreach (win32fontmap->freed_fonts->head, (GFunc)g_object_unref, NULL);
+  g_queue_free (win32fontmap->freed_fonts);
+  win32fontmap->freed_fonts = g_queue_new ();
+}
diff --git a/pango/pangowin32-private.h b/pango/pangowin32-private.h
new file mode 100755 (executable)
index 0000000..9f35823
--- /dev/null
@@ -0,0 +1,282 @@
+/* Pango
+ * pangowin32-private.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000-2002 Tor Lillqvist
+ * Copyright (C) 2001 Alexander Larsson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOWIN32_PRIVATE_H__
+#define __PANGOWIN32_PRIVATE_H__
+
+/* Define if you want the possibility to get copious debugging output.
+ * (You still need to set the PANGO_WIN32_DEBUG environment variable
+ * to get it.)
+ */
+#define PANGO_WIN32_DEBUGGING 1
+
+#ifdef PANGO_WIN32_DEBUGGING
+#ifdef __GNUC__
+#define PING(printlist)                                        \
+(_pango_win32_debug ?                                  \
+ (g_print ("%s:%d ", __PRETTY_FUNCTION__, __LINE__),   \
+  g_print printlist,                                   \
+  g_print ("\n"),                                      \
+  0) :                                                 \
+ 0)
+#else
+#define PING(printlist)                                        \
+(_pango_win32_debug ?                                  \
+ (g_print ("%s:%d ", __FILE__, __LINE__),              \
+  g_print printlist,                                   \
+  g_print ("\n"),                                      \
+  0) :                                                 \
+ 0)
+#endif
+#else  /* !PANGO_WIN32_DEBUGGING */
+#define PING(printlist)
+#endif
+
+#include <pango/pango-modules.h>
+#include <pango/pangowin32.h>
+
+typedef enum
+  {
+    PANGO_WIN32_COVERAGE_UNSPEC,
+    PANGO_WIN32_COVERAGE_ZH_TW,
+    PANGO_WIN32_COVERAGE_ZH_CN,
+    PANGO_WIN32_COVERAGE_JA,
+    PANGO_WIN32_COVERAGE_KO,
+    PANGO_WIN32_COVERAGE_VI,
+    PANGO_WIN32_N_COVERAGES
+  } PangoWin32CoverageLanguageClass;
+
+#define PANGO_TYPE_WIN32_FONT_MAP             (_pango_win32_font_map_get_type ())
+#define PANGO_WIN32_FONT_MAP(object)          (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_WIN32_FONT_MAP, PangoWin32FontMap))
+#define PANGO_WIN32_IS_FONT_MAP(object)       (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_WIN32_FONT_MAP))
+#define PANGO_WIN32_FONT_MAP_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_WIN32_FONT_MAP, PangoWin32FontMapClass))
+#define PANGO_IS_WIN32_FONT_MAP_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_WIN32_FONT_MAP))
+#define PANGO_WIN32_FONT_MAP_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_WIN32_FONT_MAP, PangoWin32FontMapClass))
+
+#define PANGO_TYPE_WIN32_FONT            (_pango_win32_font_get_type ())
+#define PANGO_WIN32_FONT(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_WIN32_FONT, PangoWin32Font))
+#define PANGO_WIN32_FONT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_WIN32_FONT, PangoWin32FontClass))
+#define PANGO_WIN32_IS_FONT(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_WIN32_FONT))
+#define PANGO_WIN32_IS_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_WIN32_FONT))
+#define PANGO_WIN32_FONT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_WIN32_FONT, PangoWin32FontClass))
+
+typedef struct _PangoWin32FontMap      PangoWin32FontMap;
+typedef struct _PangoWin32FontMapClass PangoWin32FontMapClass;
+typedef struct _PangoWin32Font         PangoWin32Font;
+typedef struct _PangoWin32FontClass    PangoWin32FontClass;
+typedef struct _PangoWin32Face         PangoWin32Face;
+typedef struct _PangoWin32GlyphInfo    PangoWin32GlyphInfo;
+typedef struct _PangoWin32MetricsInfo  PangoWin32MetricsInfo;
+
+struct _PangoWin32FontMap
+{
+  PangoFontMap parent_instance;
+
+  PangoWin32FontCache *font_cache;
+  GQueue *freed_fonts;
+
+  /* Map Pango family names to PangoWin32Family structs */
+  GHashTable *families;
+
+  /* Map LOGFONTWs (taking into account only the lfFaceName, lfItalic
+   * and lfWeight fields) to LOGFONTWs corresponding to actual fonts
+   * installed.
+   */
+  GHashTable *fonts;
+
+  double resolution;           /* (points / pixel) * PANGO_SCALE */
+};
+
+struct _PangoWin32FontMapClass
+{
+  PangoFontMapClass parent_class;
+
+  PangoFont *(*find_font) (PangoWin32FontMap          *fontmap,
+                          PangoContext               *context,
+                          PangoWin32Face             *face,
+                          const PangoFontDescription *desc);
+
+};
+
+struct _PangoWin32Font
+{
+  PangoFont font;
+
+  LOGFONTW logfontw;
+  int size;
+
+  GSList *metrics_by_lang;
+
+  PangoFontMap *fontmap;
+
+  /* Written by pango_win32_get_hfont: */
+  HFONT hfont;
+  gint tm_ascent;
+  gint tm_descent;
+  gint tm_overhang;
+
+  PangoWin32Face *win32face;
+
+  /* If TRUE, font is in cache of recently unused fonts and not otherwise
+   * in use.
+   */
+  gboolean in_cache;
+  GHashTable *glyph_info;
+};
+
+struct _PangoWin32FontClass
+{
+  PangoFontClass parent_class;
+
+  gboolean (*select_font)        (PangoFont *font,
+                                 HDC        hdc);
+  void     (*done_font)          (PangoFont *font);
+  double   (*get_metrics_factor) (PangoFont *font);
+};
+
+struct _PangoWin32Face
+{
+  PangoFontFace parent_instance;
+
+  LOGFONTW logfontw;
+  PangoFontDescription *description;
+  PangoCoverage *coverages[PANGO_WIN32_N_COVERAGES];
+  char *face_name;
+  gboolean is_synthetic;
+
+  gboolean has_cmap;
+  guint16 cmap_format;
+  gpointer cmap;
+
+  GSList *cached_fonts;
+};
+
+struct _PangoWin32GlyphInfo
+{
+  PangoRectangle logical_rect;
+  PangoRectangle ink_rect;
+};
+
+struct _PangoWin32MetricsInfo
+{
+  const char *sample_str;
+  PangoFontMetrics *metrics;
+};
+
+/* TrueType defines: */
+
+#define MAKE_TT_TABLE_NAME(c1, c2, c3, c4) \
+   (((guint32)c4) << 24 | ((guint32)c3) << 16 | ((guint32)c2) << 8 | ((guint32)c1))
+
+#define CMAP (MAKE_TT_TABLE_NAME('c','m','a','p'))
+#define CMAP_HEADER_SIZE 4
+
+#define NAME (MAKE_TT_TABLE_NAME('n','a','m','e'))
+#define NAME_HEADER_SIZE 6
+
+#define ENCODING_TABLE_SIZE 8
+
+#define APPLE_UNICODE_PLATFORM_ID 0
+#define MACINTOSH_PLATFORM_ID 1
+#define ISO_PLATFORM_ID 2
+#define MICROSOFT_PLATFORM_ID 3
+
+#define SYMBOL_ENCODING_ID 0
+#define UNICODE_ENCODING_ID 1
+#define UCS4_ENCODING_ID 10
+
+/* All the below structs must be packed! */
+
+struct cmap_encoding_subtable
+{
+  guint16 platform_id;
+  guint16 encoding_id;
+  guint32 offset;
+};
+
+struct format_4_cmap
+{
+  guint16 format;
+  guint16 length;
+  guint16 language;
+  guint16 seg_count_x_2;
+  guint16 search_range;
+  guint16 entry_selector;
+  guint16 range_shift;
+
+  guint16 reserved;
+
+  guint16 arrays[1];
+};
+
+struct format_12_cmap
+{
+  guint16 format;
+  guint16 reserved;
+  guint32 length;
+  guint32 language;
+  guint32 count;
+
+  guint32 groups[1];
+};
+
+struct name_header
+{
+  guint16 format_selector;
+  guint16 num_records;
+  guint16 string_storage_offset;
+};
+
+struct name_record
+{
+  guint16 platform_id;
+  guint16 encoding_id;
+  guint16 language_id;
+  guint16 name_id;
+  guint16 string_length;
+  guint16 string_offset;
+};
+
+GType           _pango_win32_font_get_type          (void) G_GNUC_CONST;
+
+void            _pango_win32_make_matching_logfontw (PangoFontMap   *fontmap,
+                                                    const LOGFONTW *lfp,
+                                                    int             size,
+                                                    LOGFONTW       *out);
+
+GType           _pango_win32_font_map_get_type      (void) G_GNUC_CONST;
+
+void            _pango_win32_fontmap_cache_remove   (PangoFontMap   *fontmap,
+                                                    PangoWin32Font *xfont);
+
+gboolean       _pango_win32_get_name_header        (HDC                 hdc,
+                                                    struct name_header *header);
+gboolean       _pango_win32_get_name_record        (HDC                 hdc,
+                                                    gint                i,
+                                                    struct name_record *record);
+
+extern HDC _pango_win32_hdc;
+extern OSVERSIONINFO _pango_win32_os_version_info;
+extern gboolean _pango_win32_debug;
+
+#endif /* __PANGOWIN32_PRIVATE_H__ */
diff --git a/pango/pangowin32.c b/pango/pangowin32.c
new file mode 100755 (executable)
index 0000000..1f8c1d2
--- /dev/null
@@ -0,0 +1,1861 @@
+/* Pango
+ * pangowin32.c: Routines for handling Windows fonts
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ * Copyright (C) 2001 Alexander Larsson
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <glib.h>
+
+#include "pango-impl-utils.h"
+#include "pangowin32.h"
+#include "pangowin32-private.h"
+
+#define MAX_FREED_FONTS 16
+
+#define CH_IS_UNIHAN_BMP(ch) ((ch) >= 0x3400 && (ch) <= 0x9FFF)
+#define CH_IS_UNIHAN(ch) (CH_IS_UNIHAN_BMP (ch) || \
+                         ((ch) >= 0x20000 && (ch) <= 0x2A6DF) ||       \
+                         ((ch) >= 0x2F800 && (ch) <= 0x2FA1F))
+
+HDC _pango_win32_hdc;
+OSVERSIONINFO _pango_win32_os_version_info;
+gboolean _pango_win32_debug = FALSE;
+
+static void pango_win32_font_dispose    (GObject             *object);
+static void pango_win32_font_finalize   (GObject             *object);
+
+static gboolean pango_win32_font_real_select_font        (PangoFont *font,
+                                                         HDC        hdc);
+static void     pango_win32_font_real_done_font          (PangoFont *font);
+static double   pango_win32_font_real_get_metrics_factor (PangoFont *font);
+
+static PangoFontDescription *pango_win32_font_describe          (PangoFont        *font);
+static PangoFontDescription *pango_win32_font_describe_absolute (PangoFont        *font);
+static PangoCoverage        *pango_win32_font_get_coverage      (PangoFont        *font,
+                                                                PangoLanguage    *lang);
+static void                  pango_win32_font_calc_coverage     (PangoFont        *font,
+                                                                PangoCoverage    *coverage,
+                                                                PangoLanguage    *lang);
+static PangoEngineShape     *pango_win32_font_find_shaper       (PangoFont        *font,
+                                                                PangoLanguage    *lang,
+                                                                guint32           ch);
+static void                  pango_win32_font_get_glyph_extents (PangoFont        *font,
+                                                                PangoGlyph        glyph,
+                                                                PangoRectangle   *ink_rect,
+                                                                PangoRectangle   *logical_rect);
+static PangoFontMetrics *    pango_win32_font_get_metrics       (PangoFont        *font,
+                                                                PangoLanguage    *lang);
+static PangoFontMap *        pango_win32_font_get_font_map      (PangoFont        *font);
+
+static gboolean pango_win32_font_real_select_font      (PangoFont *font,
+                                                       HDC        hdc);
+static void     pango_win32_font_real_done_font        (PangoFont *font);
+static double   pango_win32_font_real_get_metrics_factor (PangoFont *font);
+
+static HFONT                 pango_win32_get_hfont              (PangoFont        *font);
+static void                  pango_win32_get_item_properties    (PangoItem        *item,
+                                                                PangoUnderline   *uline,
+                                                                PangoAttrColor   *fg_color,
+                                                                gboolean         *fg_set,
+                                                                PangoAttrColor   *bg_color,
+                                                                gboolean         *bg_set);
+
+static HFONT
+pango_win32_get_hfont (PangoFont *font)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  PangoWin32FontCache *cache;
+  TEXTMETRIC tm;
+
+  if (!win32font)
+    return NULL;
+
+  if (!win32font->hfont)
+    {
+      cache = pango_win32_font_map_get_font_cache (win32font->fontmap);
+
+      win32font->hfont = pango_win32_font_cache_loadw (cache, &win32font->logfontw);
+      if (!win32font->hfont)
+       {
+         gchar *face_utf8 = g_utf16_to_utf8 (win32font->logfontw.lfFaceName,
+                                             -1, NULL, NULL, NULL);
+         g_warning ("Cannot load font '%s\n", face_utf8);
+         g_free (face_utf8);
+         return NULL;
+       }
+
+      SelectObject (_pango_win32_hdc, win32font->hfont);
+      GetTextMetrics (_pango_win32_hdc, &tm);
+
+      win32font->tm_overhang = tm.tmOverhang;
+      win32font->tm_descent = tm.tmDescent;
+      win32font->tm_ascent = tm.tmAscent;
+    }
+
+  return win32font->hfont;
+}
+
+/**
+ * pango_win32_get_context:
+ *
+ * Retrieves a #PangoContext appropriate for rendering with Windows fonts.
+ *
+ * Return value: the new #PangoContext
+ *
+ * Deprecated: 1.22: Use pango_win32_font_map_for_display() followed by
+ * pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_win32_get_context (void)
+{
+  return pango_font_map_create_context (pango_win32_font_map_for_display ());
+}
+
+G_DEFINE_TYPE (PangoWin32Font, _pango_win32_font, PANGO_TYPE_FONT)
+
+static void
+_pango_win32_font_init (PangoWin32Font *win32font)
+{
+  win32font->size = -1;
+
+  win32font->metrics_by_lang = NULL;
+
+  win32font->glyph_info = g_hash_table_new_full (NULL, NULL, NULL, g_free);
+}
+
+/**
+ * pango_win32_get_dc:
+ *
+ * Obtains a handle to the Windows device context that is used by Pango.
+ *
+ * Return value: A handle to the Windows device context that is used by Pango.
+ **/
+HDC
+pango_win32_get_dc (void)
+{
+  if (_pango_win32_hdc == NULL)
+    {
+      _pango_win32_hdc = CreateDC ("DISPLAY", NULL, NULL, NULL);
+      memset (&_pango_win32_os_version_info, 0,
+             sizeof (_pango_win32_os_version_info));
+      _pango_win32_os_version_info.dwOSVersionInfoSize =
+       sizeof (OSVERSIONINFO);
+      GetVersionEx (&_pango_win32_os_version_info);
+
+      /* Also do some generic pangowin32 initialisations... this function
+       * is a suitable place for those as it is called from a couple
+       * of class_init functions.
+       */
+#ifdef PANGO_WIN32_DEBUGGING
+      if (getenv ("PANGO_WIN32_DEBUG") != NULL)
+       _pango_win32_debug = TRUE;
+#endif
+    }
+
+  return _pango_win32_hdc;
+}
+
+/**
+ * pango_win32_get_debug_flag:
+ *
+ * Returns whether debugging is turned on.
+ *
+ * Return value: %TRUE if debugging is turned on.
+ *
+ * Since: 1.2
+ */
+gboolean
+pango_win32_get_debug_flag (void)
+{
+  return _pango_win32_debug;
+}
+
+static void
+_pango_win32_font_class_init (PangoWin32FontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+
+  object_class->finalize = pango_win32_font_finalize;
+  object_class->dispose = pango_win32_font_dispose;
+
+  font_class->describe = pango_win32_font_describe;
+  font_class->describe_absolute = pango_win32_font_describe_absolute;
+  font_class->get_coverage = pango_win32_font_get_coverage;
+  font_class->find_shaper = pango_win32_font_find_shaper;
+  font_class->get_glyph_extents = pango_win32_font_get_glyph_extents;
+  font_class->get_metrics = pango_win32_font_get_metrics;
+  font_class->get_font_map = pango_win32_font_get_font_map;
+
+  class->select_font = pango_win32_font_real_select_font;
+  class->done_font = pango_win32_font_real_done_font;
+  class->get_metrics_factor = pango_win32_font_real_get_metrics_factor;
+
+  pango_win32_get_dc ();
+}
+
+/**
+ * pango_win32_render:
+ * @hdc:     the device context
+ * @font:    the font in which to draw the string
+ * @glyphs:  the glyph string to draw
+ * @x:       the x position of start of string (in pixels)
+ * @y:       the y position of baseline (in pixels)
+ *
+ * Render a #PangoGlyphString onto a Windows DC
+ */
+void
+pango_win32_render (HDC               hdc,
+                   PangoFont        *font,
+                   PangoGlyphString *glyphs,
+                   int               x,
+                   int               y)
+{
+  HFONT hfont, old_hfont = NULL;
+  int i, j, num_valid_glyphs;
+  guint16 *glyph_indexes;
+  gint *dX;
+  gint this_x;
+  gint start_x_offset, x_offset, next_x_offset, cur_y_offset; /* in Pango units */
+
+  g_return_if_fail (glyphs != NULL);
+
+#ifdef PANGO_WIN32_DEBUGGING
+  if (_pango_win32_debug)
+    {
+      PING (("num_glyphs:%d", glyphs->num_glyphs));
+      for (i = 0; i < glyphs->num_glyphs; i++)
+       {
+         g_print (" %d:%d", glyphs->glyphs[i].glyph, glyphs->glyphs[i].geometry.width);
+         if (glyphs->glyphs[i].geometry.x_offset != 0 ||
+             glyphs->glyphs[i].geometry.y_offset != 0)
+           g_print (":%d,%d", glyphs->glyphs[i].geometry.x_offset,
+                    glyphs->glyphs[i].geometry.y_offset);
+       }
+      g_print ("\n");
+    }
+#endif
+
+  if (glyphs->num_glyphs == 0)
+    return;
+
+  hfont = pango_win32_get_hfont (font);
+  if (!hfont)
+    return;
+
+  old_hfont = SelectObject (hdc, hfont);
+
+  glyph_indexes = g_new (guint16, glyphs->num_glyphs);
+  dX = g_new (INT, glyphs->num_glyphs);
+
+  /* Render glyphs using one ExtTextOutW() call for each run of glyphs
+   * that have the same y offset. The big majoroty of glyphs will have
+   * y offset of zero, so in general, the whole glyph string will be
+   * rendered by one call to ExtTextOutW().
+   *
+   * In order to minimize buildup of rounding errors, we keep track of
+   * where the glyphs should be rendered in Pango units, and round
+   * to pixels separately for each glyph,
+   */
+
+  i = 0;
+
+  /* Outer loop through all glyphs in string */
+  while (i < glyphs->num_glyphs)
+    {
+      cur_y_offset = glyphs->glyphs[i].geometry.y_offset;
+      num_valid_glyphs = 0;
+      x_offset = 0;
+      start_x_offset = glyphs->glyphs[i].geometry.x_offset;
+      this_x = PANGO_PIXELS (start_x_offset);
+
+      /* Inner loop through glyphs with the same y offset, or code
+       * point zero (just spacing).
+       */
+      while (i < glyphs->num_glyphs &&
+            (glyphs->glyphs[i].glyph == PANGO_GLYPH_EMPTY ||
+             cur_y_offset == glyphs->glyphs[i].geometry.y_offset))
+       {
+         if (glyphs->glyphs[i].glyph == PANGO_GLYPH_EMPTY)
+           {
+             /* PANGO_GLYPH_EMPTY glyphs should not be rendered, but their
+              * indicated width (set up by PangoLayout) should be taken
+              * into account.
+              */
+
+             /* If the string starts with spacing, must shift the
+              * starting point for the glyphs actually rendered.  For
+              * spacing in the middle of the glyph string, add to the dX
+              * of the previous glyph to be rendered.
+              */
+             if (num_valid_glyphs == 0)
+               start_x_offset += glyphs->glyphs[i].geometry.width;
+             else
+               {
+                 x_offset += glyphs->glyphs[i].geometry.width;
+                 dX[num_valid_glyphs-1] = PANGO_PIXELS (x_offset) - this_x;
+               }
+           }
+         else
+           {
+             if (glyphs->glyphs[i].glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+               {
+                 /* Glyph index is actually the char value that doesn't
+                  * have any glyph (ORed with the flag). We should really
+                  * do the same that pango_xft_real_render() does: render
+                  * a box with the char value in hex inside it in a tiny
+                  * font. Later. For now, use the TrueType invalid glyph
+                  * at 0.
+                  */
+                 glyph_indexes[num_valid_glyphs] = 0;
+               }
+             else
+               glyph_indexes[num_valid_glyphs] = glyphs->glyphs[i].glyph;
+
+             x_offset += glyphs->glyphs[i].geometry.width;
+
+             /* If the next glyph has an X offset, take that into consideration now */
+             if (i < glyphs->num_glyphs - 1)
+               next_x_offset = glyphs->glyphs[i+1].geometry.x_offset;
+             else
+               next_x_offset = 0;
+
+             dX[num_valid_glyphs] = PANGO_PIXELS (x_offset + next_x_offset) - this_x;
+
+             /* Prepare for next glyph */
+             this_x += dX[num_valid_glyphs];
+             num_valid_glyphs++;
+           }
+         i++;
+       }
+#ifdef PANGO_WIN32_DEBUGGING
+      if (_pango_win32_debug)
+       {
+         g_print ("ExtTextOutW at %d,%d deltas:",
+                  x + PANGO_PIXELS (start_x_offset),
+                  y + PANGO_PIXELS (cur_y_offset));
+         for (j = 0; j < num_valid_glyphs; j++)
+           g_print (" %d", dX[j]);
+         g_print ("\n");
+       }
+#endif
+
+      ExtTextOutW (hdc,
+                  x + PANGO_PIXELS (start_x_offset),
+                  y + PANGO_PIXELS (cur_y_offset),
+                  ETO_GLYPH_INDEX,
+                  NULL,
+                  glyph_indexes, num_valid_glyphs,
+                  dX);
+      x += this_x;
+    }
+
+
+  SelectObject (hdc, old_hfont); /* restore */
+  g_free (glyph_indexes);
+  g_free (dX);
+}
+
+/**
+ * pango_win32_render_transformed:
+ * @hdc:     a windows device context
+ * @matrix:  a #PangoMatrix, or %NULL to use an identity transformation
+ * @font:    the font in which to draw the string
+ * @glyphs:  the glyph string to draw
+ * @x:       the x position of the start of the string (in Pango
+ *           units in user space coordinates)
+ * @y:       the y position of the baseline (in Pango units
+ *           in user space coordinates)
+ *
+ * Renders a #PangoGlyphString onto a windows DC, possibly
+ * transforming the layed-out coordinates through a transformation
+ * matrix. Note that the transformation matrix for @font is not
+ * changed, so to produce correct rendering results, the @font
+ * must have been loaded using a #PangoContext with an identical
+ * transformation matrix to that passed in to this function.
+ **/
+void
+pango_win32_render_transformed (HDC                hdc,
+                               const PangoMatrix *matrix,
+                               PangoFont         *font,
+                               PangoGlyphString  *glyphs,
+                               int                x,
+                               int                y)
+{
+  XFORM xForm;
+  XFORM xFormPrev = {1.0, 0.0, 0.0, 1.0, 0.0, 0.0};
+  int   mode = GetGraphicsMode (hdc);
+
+  if (!SetGraphicsMode (hdc, GM_ADVANCED))
+    g_warning ("SetGraphicsMode() failed");
+  else if (!GetWorldTransform (hdc, &xFormPrev))
+    g_warning ("GetWorldTransform() failed");
+  else if (matrix)
+    {
+      xForm.eM11 = matrix->xx;
+      xForm.eM12 = matrix->yx;
+      xForm.eM21 = matrix->xy;
+      xForm.eM22 = matrix->yy;
+      xForm.eDx = matrix->x0;
+      xForm.eDy = matrix->y0;
+      if (!SetWorldTransform (hdc, &xForm))
+       g_warning ("GetWorldTransform() failed");
+    }
+
+  pango_win32_render (hdc, font, glyphs, x/PANGO_SCALE, y/PANGO_SCALE);
+
+  /* restore */
+  SetWorldTransform (hdc, &xFormPrev);
+  SetGraphicsMode (hdc, mode);
+}
+
+static void
+pango_win32_font_get_glyph_extents (PangoFont      *font,
+                                   PangoGlyph      glyph,
+                                   PangoRectangle *ink_rect,
+                                   PangoRectangle *logical_rect)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  guint16 glyph_index = glyph;
+  GLYPHMETRICS gm;
+  guint32 res;
+  HFONT hfont;
+  MAT2 m = {{0,1}, {0,0}, {0,0}, {0,1}};
+  PangoWin32GlyphInfo *info;
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->width = ink_rect->y = ink_rect->height = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = logical_rect->y = logical_rect->height = 0;
+      return;
+    }
+
+  if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+    glyph_index = glyph = 0;
+
+  info = g_hash_table_lookup (win32font->glyph_info, GUINT_TO_POINTER (glyph));
+
+  if (!info)
+    {
+      info = g_new0 (PangoWin32GlyphInfo, 1);
+
+      memset (&gm, 0, sizeof (gm));
+
+      hfont = pango_win32_get_hfont (font);
+      SelectObject (_pango_win32_hdc, hfont);
+      /* FIXME: (Alex) This constant reuse of _pango_win32_hdc is
+        not thread-safe */
+      res = GetGlyphOutlineA (_pango_win32_hdc,
+                             glyph_index,
+                             GGO_METRICS | GGO_GLYPH_INDEX,
+                             &gm,
+                             0, NULL,
+                             &m);
+
+      if (res == GDI_ERROR)
+       {
+         gchar *error = g_win32_error_message (GetLastError ());
+         g_warning ("GetGlyphOutline(%04X) failed: %s\n",
+                    glyph_index, error);
+         g_free (error);
+
+         /* Don't just return now, use the still zeroed out gm */
+       }
+
+      info->ink_rect.x = PANGO_SCALE * gm.gmptGlyphOrigin.x;
+      info->ink_rect.width = PANGO_SCALE * gm.gmBlackBoxX;
+      info->ink_rect.y = - PANGO_SCALE * gm.gmptGlyphOrigin.y;
+      info->ink_rect.height = PANGO_SCALE * gm.gmBlackBoxY;
+
+      info->logical_rect.x = 0;
+      info->logical_rect.width = PANGO_SCALE * gm.gmCellIncX;
+      info->logical_rect.y = - PANGO_SCALE * win32font->tm_ascent;
+      info->logical_rect.height = PANGO_SCALE * (win32font->tm_ascent + win32font->tm_descent);
+
+      g_hash_table_insert (win32font->glyph_info, GUINT_TO_POINTER(glyph), info);
+    }
+
+  if (ink_rect)
+    *ink_rect = info->ink_rect;
+
+  if (logical_rect)
+    *logical_rect = info->logical_rect;
+}
+
+static int
+max_glyph_width (PangoLayout *layout)
+{
+  int max_width = 0;
+  GSList *l, *r;
+
+  for (l = pango_layout_get_lines_readonly (layout); l; l = l->next)
+    {
+      PangoLayoutLine *line = l->data;
+
+      for (r = line->runs; r; r = r->next)
+       {
+         PangoGlyphString *glyphs = ((PangoGlyphItem *)r->data)->glyphs;
+         int i;
+
+         for (i = 0; i < glyphs->num_glyphs; i++)
+           if (glyphs->glyphs[i].geometry.width > max_width)
+             max_width = glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  return max_width;
+}
+
+static PangoFontMetrics *
+pango_win32_font_get_metrics (PangoFont     *font,
+                             PangoLanguage *language)
+{
+  PangoWin32MetricsInfo *info = NULL; /* Quiet gcc */
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  GSList *tmp_list;
+
+  const char *sample_str = pango_language_get_sample_string (language);
+
+  tmp_list = win32font->metrics_by_lang;
+  while (tmp_list)
+    {
+      info = tmp_list->data;
+
+      if (info->sample_str == sample_str)    /* We _don't_ need strcmp */
+       break;
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (!tmp_list)
+    {
+      HFONT hfont;
+      PangoFontMetrics *metrics;
+
+      info = g_new (PangoWin32MetricsInfo, 1);
+      win32font->metrics_by_lang = g_slist_prepend (win32font->metrics_by_lang, info);
+
+      info->sample_str = sample_str;
+      info->metrics = metrics = pango_font_metrics_new ();
+
+      hfont = pango_win32_get_hfont (font);
+      if (hfont != NULL)
+       {
+         PangoCoverage *coverage;
+         TEXTMETRIC tm;
+
+         SelectObject (_pango_win32_hdc, hfont);
+         GetTextMetrics (_pango_win32_hdc, &tm);
+
+         metrics->ascent = tm.tmAscent * PANGO_SCALE;
+         metrics->descent = tm.tmDescent * PANGO_SCALE;
+         metrics->approximate_char_width = tm.tmAveCharWidth * PANGO_SCALE;
+
+         coverage = pango_win32_font_get_coverage (font, language);
+         if (pango_coverage_get (coverage, '0') != PANGO_COVERAGE_NONE &&
+             pango_coverage_get (coverage, '9') != PANGO_COVERAGE_NONE)
+           {
+             PangoContext *context;
+             PangoFontDescription *font_desc;
+             PangoLayout *layout;
+
+             /*  Get the average width of the chars in "0123456789" */
+             context = pango_font_map_create_context (pango_win32_font_map_for_display ());
+             pango_context_set_language (context, language);
+             font_desc = pango_font_describe_with_absolute_size (font);
+             pango_context_set_font_description (context, font_desc);
+             layout = pango_layout_new (context);
+             pango_layout_set_text (layout, "0123456789", -1);
+
+             metrics->approximate_digit_width = max_glyph_width (layout);
+
+             pango_font_description_free (font_desc);
+             g_object_unref (layout);
+             g_object_unref (context);
+           }
+         else
+           metrics->approximate_digit_width = metrics->approximate_char_width;
+
+         pango_coverage_unref (coverage);
+
+         /* FIXME: Should get the real values from the TrueType font file */
+         metrics->underline_position = -2 * PANGO_SCALE;
+         metrics->underline_thickness = 1 * PANGO_SCALE;
+         metrics->strikethrough_thickness = metrics->underline_thickness;
+         /* Really really wild guess */
+         metrics->strikethrough_position = metrics->ascent / 3;
+       }
+    }
+
+  return pango_font_metrics_ref (info->metrics);
+}
+
+static PangoFontMap *
+pango_win32_font_get_font_map (PangoFont *font)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+
+  return win32font->fontmap;
+}
+
+static gboolean
+pango_win32_font_real_select_font (PangoFont *font,
+                                  HDC        hdc)
+{
+  HFONT hfont = pango_win32_get_hfont (font);
+
+  if (!hfont)
+    return FALSE;
+
+  if (!SelectObject (hdc, hfont))
+    {
+      g_warning ("pango_win32_font_real_select_font: Cannot select font\n");
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static void
+pango_win32_font_real_done_font (PangoFont *font)
+{
+}
+
+static double
+pango_win32_font_real_get_metrics_factor (PangoFont *font)
+{
+  return PANGO_SCALE;
+}
+
+/**
+ * pango_win32_font_logfont:
+ * @font: a #PangoFont which must be from the Win32 backend
+ *
+ * Determine the LOGFONTA struct for the specified font. Note that
+ * Pango internally uses LOGFONTW structs, so if converting the UTF-16
+ * face name in the LOGFONTW struct to system codepage fails, the
+ * returned LOGFONTA will have an emppty face name. To get the
+ * LOGFONTW of a PangoFont, use pango_win32_font_logfontw(). It
+ * is recommended to do that always even if you don't expect
+ * to come across fonts with odd names.
+ *
+ * Return value: A newly allocated LOGFONTA struct. It must be
+ * freed with g_free().
+ **/
+LOGFONTA *
+pango_win32_font_logfont (PangoFont *font)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  LOGFONTA *lfp;
+
+  g_return_val_if_fail (font != NULL, NULL);
+  g_return_val_if_fail (PANGO_WIN32_IS_FONT (font), NULL);
+
+  lfp = g_new (LOGFONTA, 1);
+
+  *lfp = *(LOGFONTA*) &win32font->logfontw;
+  if (!WideCharToMultiByte (CP_ACP, 0,
+                           win32font->logfontw.lfFaceName, -1,
+                           lfp->lfFaceName, G_N_ELEMENTS (lfp->lfFaceName),
+                           NULL, NULL))
+    lfp->lfFaceName[0] = '\0';
+
+  return lfp;
+}
+
+/**
+ * pango_win32_font_logfontw:
+ * @font: a #PangoFont which must be from the Win32 backend
+ * 
+ * Determine the LOGFONTW struct for the specified font.
+ * 
+ * Return value: A newly allocated LOGFONTW struct. It must be
+ * freed with g_free().
+ *
+ * Since: 1.16
+ **/
+LOGFONTW *
+pango_win32_font_logfontw (PangoFont *font)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  LOGFONTW *lfp;
+
+  g_return_val_if_fail (font != NULL, NULL);
+  g_return_val_if_fail (PANGO_WIN32_IS_FONT (font), NULL);
+
+  lfp = g_new (LOGFONTW, 1);
+  *lfp = win32font->logfontw;
+
+  return lfp;
+}
+
+/**
+ * pango_win32_font_select_font:
+ * @font: a #PangoFont from the Win32 backend
+ * @hdc: a windows device context
+ *
+ * Selects the font into the specified DC and changes the mapping mode
+ * and world transformation of the DC appropriately for the font.
+ * You may want to surround the use of this function with calls
+ * to SaveDC() and RestoreDC(). Call pango_win32_font_done_font() when
+ * you are done using the DC to release allocated resources.
+ *
+ * See pango_win32_font_get_metrics_factor() for information about
+ * converting from the coordinate space used by this function
+ * into Pango units.
+ *
+ * Return value: %TRUE if the operation succeeded.
+ **/
+gboolean
+pango_win32_font_select_font (PangoFont *font,
+                             HDC        hdc)
+{
+  g_return_val_if_fail (PANGO_WIN32_IS_FONT (font), FALSE);
+
+  return PANGO_WIN32_FONT_GET_CLASS (font)->select_font (font, hdc);
+}
+
+/**
+ * pango_win32_font_done_font:
+ * @font: a #PangoFont from the win32 backend
+ *
+ * Releases any resources allocated by pango_win32_font_done_font()
+ **/
+void
+pango_win32_font_done_font (PangoFont *font)
+{
+  g_return_if_fail (PANGO_WIN32_IS_FONT (font));
+
+  PANGO_WIN32_FONT_GET_CLASS (font)->done_font (font);
+}
+
+/**
+ * pango_win32_font_get_metrics_factor:
+ * @font: a #PangoFont from the win32 backend
+ *
+ * Returns the scale factor from logical units in the coordinate
+ * space used by pango_win32_font_select_font() to Pango units
+ * in user space.
+ *
+ * Return value: factor to multiply logical units by to get Pango
+ *               units.
+ **/
+double
+pango_win32_font_get_metrics_factor (PangoFont *font)
+{
+  g_return_val_if_fail (PANGO_WIN32_IS_FONT (font), 1.);
+
+  return PANGO_WIN32_FONT_GET_CLASS (font)->get_metrics_factor (font);
+}
+
+static void
+pango_win32_fontmap_cache_add (PangoFontMap   *fontmap,
+                              PangoWin32Font *win32font)
+{
+  PangoWin32FontMap *win32fontmap = PANGO_WIN32_FONT_MAP (fontmap);
+
+  if (win32fontmap->freed_fonts->length == MAX_FREED_FONTS)
+    {
+      PangoWin32Font *old_font = g_queue_pop_tail (win32fontmap->freed_fonts);
+      g_object_unref (old_font);
+    }
+
+  g_object_ref (win32font);
+  g_queue_push_head (win32fontmap->freed_fonts, win32font);
+  win32font->in_cache = TRUE;
+}
+
+static void
+pango_win32_font_dispose (GObject *object)
+{
+  PangoWin32Font *win32font = PANGO_WIN32_FONT (object);
+
+  /* If the font is not already in the freed-fonts cache, add it,
+   * if it is already there, do nothing and the font will be
+   * freed.
+   */
+  if (!win32font->in_cache && win32font->fontmap)
+    pango_win32_fontmap_cache_add (win32font->fontmap, win32font);
+
+  G_OBJECT_CLASS (_pango_win32_font_parent_class)->dispose (object);
+}
+
+static void
+free_metrics_info (PangoWin32MetricsInfo *info)
+{
+  pango_font_metrics_unref (info->metrics);
+  g_free (info);
+}
+
+static void
+pango_win32_font_entry_remove (PangoWin32Face *face,
+                              PangoFont      *font)
+{
+  face->cached_fonts = g_slist_remove (face->cached_fonts, font);
+}
+
+static void
+pango_win32_font_finalize (GObject *object)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)object;
+  PangoWin32FontCache *cache = pango_win32_font_map_get_font_cache (win32font->fontmap);
+
+  if (win32font->hfont != NULL)
+    pango_win32_font_cache_unload (cache, win32font->hfont);
+
+  g_slist_foreach (win32font->metrics_by_lang, (GFunc)free_metrics_info, NULL);
+  g_slist_free (win32font->metrics_by_lang);
+
+  if (win32font->win32face)
+    pango_win32_font_entry_remove (win32font->win32face, PANGO_FONT (win32font));
+
+  g_hash_table_destroy (win32font->glyph_info);
+
+  g_assert (win32font->fontmap != NULL);
+  g_object_remove_weak_pointer (G_OBJECT (win32font->fontmap), (gpointer *) (gpointer) &win32font->fontmap);
+  win32font->fontmap = NULL;
+
+  G_OBJECT_CLASS (_pango_win32_font_parent_class)->finalize (object);
+}
+
+static PangoFontDescription *
+pango_win32_font_describe (PangoFont *font)
+{
+  PangoFontDescription *desc;
+  PangoWin32Font *win32font = PANGO_WIN32_FONT (font);
+
+  desc = pango_font_description_copy (win32font->win32face->description);
+  pango_font_description_set_size (desc, win32font->size / (PANGO_SCALE / PANGO_WIN32_FONT_MAP (win32font->fontmap)->resolution));
+
+  return desc;
+}
+
+static PangoFontDescription *
+pango_win32_font_describe_absolute (PangoFont *font)
+{
+  PangoFontDescription *desc;
+  PangoWin32Font *win32font = PANGO_WIN32_FONT (font);
+
+  desc = pango_font_description_copy (win32font->win32face->description);
+  pango_font_description_set_absolute_size (desc, win32font->size);
+
+  return desc;
+}
+
+static PangoMap *
+pango_win32_get_shaper_map (PangoLanguage *lang)
+{
+  static guint engine_type_id = 0;
+  static guint render_type_id = 0;
+
+  if (engine_type_id == 0)
+    {
+      engine_type_id = g_quark_from_static_string (PANGO_ENGINE_TYPE_SHAPE);
+      render_type_id = g_quark_from_static_string (PANGO_RENDER_TYPE_WIN32);
+    }
+
+  return pango_find_map (lang, engine_type_id, render_type_id);
+}
+
+static gint
+pango_win32_coverage_language_classify (PangoLanguage *lang)
+{
+  if (pango_language_matches (lang, "zh-tw"))
+    return PANGO_WIN32_COVERAGE_ZH_TW;
+  else if (pango_language_matches (lang, "zh-cn"))
+    return PANGO_WIN32_COVERAGE_ZH_CN;
+  else if (pango_language_matches (lang, "ja"))
+    return PANGO_WIN32_COVERAGE_JA;
+  else if (pango_language_matches (lang, "ko"))
+    return PANGO_WIN32_COVERAGE_KO;
+  else if (pango_language_matches (lang, "vi"))
+    return PANGO_WIN32_COVERAGE_VI;
+  else
+    return PANGO_WIN32_COVERAGE_UNSPEC;
+}
+
+static PangoCoverage *
+pango_win32_font_entry_get_coverage (PangoWin32Face *face,
+                                    PangoLanguage  *lang)
+{
+  gint i = pango_win32_coverage_language_classify (lang);
+  if (face->coverages[i])
+    {
+      pango_coverage_ref (face->coverages[i]);
+      return face->coverages[i];
+    }
+
+  return NULL;
+}
+
+static void
+pango_win32_font_entry_set_coverage (PangoWin32Face *face,
+                                    PangoCoverage  *coverage,
+                                    PangoLanguage  *lang)
+{
+  face->coverages[pango_win32_coverage_language_classify (lang)] = pango_coverage_ref (coverage);
+}
+
+static PangoCoverage *
+pango_win32_font_get_coverage (PangoFont     *font,
+                              PangoLanguage *lang)
+{
+  PangoCoverage *coverage;
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+
+  coverage = pango_win32_font_entry_get_coverage (win32font->win32face, lang);
+  if (!coverage)
+    {
+      coverage = pango_coverage_new ();
+      pango_win32_font_calc_coverage (font, coverage, lang);
+
+      pango_win32_font_entry_set_coverage (win32font->win32face, coverage, lang);
+    }
+
+  return coverage;
+}
+
+static PangoEngineShape *
+pango_win32_font_find_shaper (PangoFont     *font,
+                             PangoLanguage *lang,
+                             guint32        ch)
+{
+  PangoMap *shape_map = NULL;
+  PangoScript script;
+
+  shape_map = pango_win32_get_shaper_map (lang);
+  script = pango_script_for_unichar (ch);
+  return (PangoEngineShape *)pango_map_get_engine (shape_map, script);
+}
+
+/* Utility functions */
+
+/**
+ * pango_win32_get_unknown_glyph:
+ * @font: a #PangoFont
+ * @wc: the Unicode character for which a glyph is needed.
+ *
+ * Returns the index of a glyph suitable for drawing @wc as an
+ * unknown character.
+ *
+ * Use PANGO_GET_UNKNOWN_GLYPH() instead.
+ *
+ * Return value: a glyph index into @font
+ **/
+PangoGlyph
+pango_win32_get_unknown_glyph (PangoFont *font,
+                              gunichar   wc)
+{
+  return PANGO_GET_UNKNOWN_GLYPH (wc);
+}
+
+/**
+ * pango_win32_render_layout_line:
+ * @hdc:       DC to use for uncolored drawing
+ * @line:      a #PangoLayoutLine
+ * @x:         the x position of start of string (in pixels)
+ * @y:         the y position of baseline (in pixels)
+ *
+ * Render a #PangoLayoutLine onto a device context. For underlining to
+ * work property the text alignment of the DC should have TA_BASELINE
+ * and TA_LEFT.
+ */
+void
+pango_win32_render_layout_line (HDC              hdc,
+                               PangoLayoutLine *line,
+                               int              x,
+                               int              y)
+{
+  GSList *tmp_list = line->runs;
+  PangoRectangle overall_rect;
+  PangoRectangle logical_rect;
+  PangoRectangle ink_rect;
+
+  int x_off = 0;
+
+  pango_layout_line_get_extents (line,NULL, &overall_rect);
+
+  while (tmp_list)
+    {
+      HBRUSH oldfg = NULL;
+      HBRUSH brush = NULL;
+      POINT points[2];
+      PangoUnderline uline = PANGO_UNDERLINE_NONE;
+      PangoLayoutRun *run = tmp_list->data;
+      PangoAttrColor fg_color, bg_color;
+      gboolean fg_set, bg_set;
+
+      tmp_list = tmp_list->next;
+
+      pango_win32_get_item_properties (run->item, &uline, &fg_color, &fg_set, &bg_color, &bg_set);
+
+      if (uline == PANGO_UNDERLINE_NONE)
+       pango_glyph_string_extents (run->glyphs, run->item->analysis.font,
+                                   NULL, &logical_rect);
+      else
+       pango_glyph_string_extents (run->glyphs, run->item->analysis.font,
+                                   &ink_rect, &logical_rect);
+
+      if (bg_set)
+       {
+         HBRUSH oldbrush;
+
+         brush = CreateSolidBrush (RGB ((bg_color.color.red + 128) >> 8,
+                                        (bg_color.color.green + 128) >> 8,
+                                        (bg_color.color.blue + 128) >> 8));
+         oldbrush = SelectObject (hdc, brush);
+         Rectangle (hdc, x + PANGO_PIXELS (x_off + logical_rect.x),
+                         y + PANGO_PIXELS (overall_rect.y),
+                         PANGO_PIXELS (logical_rect.width),
+                         PANGO_PIXELS (overall_rect.height));
+         SelectObject (hdc, oldbrush);
+         DeleteObject (brush);
+       }
+
+      if (fg_set)
+       {
+         brush = CreateSolidBrush (RGB ((fg_color.color.red + 128) >> 8,
+                                        (fg_color.color.green + 128) >> 8,
+                                        (fg_color.color.blue + 128) >> 8));
+         oldfg = SelectObject (hdc, brush);
+       }
+
+      pango_win32_render (hdc, run->item->analysis.font, run->glyphs,
+                         x + PANGO_PIXELS (x_off), y);
+
+      switch (uline)
+       {
+       case PANGO_UNDERLINE_NONE:
+         break;
+       case PANGO_UNDERLINE_DOUBLE:
+         points[0].x = x + PANGO_PIXELS (x_off + ink_rect.x) - 1;
+         points[0].y = points[1].y = y + 4;
+         points[1].x = x + PANGO_PIXELS (x_off + ink_rect.x + ink_rect.width);
+         Polyline (hdc, points, 2);
+         points[0].y = points[1].y = y + 2;
+         Polyline (hdc, points, 2);
+         break;
+       case PANGO_UNDERLINE_SINGLE:
+         points[0].x = x + PANGO_PIXELS (x_off + ink_rect.x) - 1;
+         points[0].y = points[1].y = y + 2;
+         points[1].x = x + PANGO_PIXELS (x_off + ink_rect.x + ink_rect.width);
+         Polyline (hdc, points, 2);
+         break;
+       case PANGO_UNDERLINE_ERROR:
+         {
+           int point_x;
+           int counter = 0;
+           int end_x = x + PANGO_PIXELS (x_off + ink_rect.x + ink_rect.width);
+
+           for (point_x = x + PANGO_PIXELS (x_off + ink_rect.x) - 1;
+                point_x <= end_x;
+                point_x += 2)
+           {
+             points[0].x = point_x;
+             points[1].x = MAX (point_x + 1, end_x);
+
+             if (counter)
+               points[0].y = points[1].y = y + 2;
+             else
+               points[0].y = points[1].y = y + 3;
+
+             Polyline (hdc, points, 2);
+             counter = (counter + 1) % 2;
+           }
+         }
+         break;
+       case PANGO_UNDERLINE_LOW:
+         points[0].x = x + PANGO_PIXELS (x_off + ink_rect.x) - 1;
+         points[0].y = points[1].y = y + PANGO_PIXELS (ink_rect.y + ink_rect.height) + 2;
+         points[1].x = x + PANGO_PIXELS (x_off + ink_rect.x + ink_rect.width);
+         Polyline (hdc, points, 2);
+         break;
+       }
+
+      if (fg_set)
+       {
+         SelectObject (hdc, oldfg);
+         DeleteObject (brush);
+       }
+
+      x_off += logical_rect.width;
+    }
+}
+
+/**
+ * pango_win32_render_layout:
+ * @hdc:       HDC to use for uncolored drawing
+ * @layout:    a #PangoLayout
+ * @x:         the X position of the left of the layout (in pixels)
+ * @y:         the Y position of the top of the layout (in pixels)
+ *
+ * Render a #PangoLayoutLine onto an X drawable
+ */
+void
+pango_win32_render_layout (HDC          hdc,
+                          PangoLayout *layout,
+                          int          x,
+                          int          y)
+{
+  PangoLayoutIter *iter;
+
+  g_return_if_fail (hdc != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  iter = pango_layout_get_iter (layout);
+
+  do
+    {
+      PangoRectangle   logical_rect;
+      PangoLayoutLine *line;
+      int              baseline;
+
+      line = pango_layout_iter_get_line_readonly (iter);
+
+      pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
+      baseline = pango_layout_iter_get_baseline (iter);
+
+      pango_win32_render_layout_line (hdc,
+                                     line,
+                                     x + PANGO_PIXELS (logical_rect.x),
+                                     y + PANGO_PIXELS (baseline));
+    }
+  while (pango_layout_iter_next_line (iter));
+
+  pango_layout_iter_free (iter);
+}
+
+/* This utility function is duplicated here and in pango-layout.c; should it be
+ * public? Trouble is - what is the appropriate set of properties?
+ */
+static void
+pango_win32_get_item_properties (PangoItem      *item,
+                                PangoUnderline *uline,
+                                PangoAttrColor *fg_color,
+                                gboolean       *fg_set,
+                                PangoAttrColor *bg_color,
+                                gboolean       *bg_set)
+{
+  GSList *tmp_list = item->analysis.extra_attrs;
+
+  if (fg_set)
+    *fg_set = FALSE;
+
+  if (bg_set)
+    *bg_set = FALSE;
+
+  while (tmp_list)
+    {
+      PangoAttribute *attr = tmp_list->data;
+
+      switch (attr->klass->type)
+       {
+       case PANGO_ATTR_UNDERLINE:
+         if (uline)
+           *uline = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_FOREGROUND:
+         if (fg_color)
+           *fg_color = *((PangoAttrColor *)attr);
+         if (fg_set)
+           *fg_set = TRUE;
+
+         break;
+
+       case PANGO_ATTR_BACKGROUND:
+         if (bg_color)
+           *bg_color = *((PangoAttrColor *)attr);
+         if (bg_set)
+           *bg_set = TRUE;
+
+         break;
+
+       default:
+         break;
+       }
+      tmp_list = tmp_list->next;
+    }
+}
+
+static guint
+get_cmap_offset (HDC     hdc,
+                guint16 encoding_id)
+{
+  guint16 n_tables;
+  struct cmap_encoding_subtable *table;
+  gint32 res;
+  int i;
+  guint32 offset;
+
+  /* Get The number of encoding tables, at offset 2 */
+  res = GetFontData (hdc, CMAP, 2, &n_tables, 2);
+  if (res != 2)
+    return 0;
+
+  n_tables = GUINT16_FROM_BE (n_tables);
+
+  table = g_malloc (ENCODING_TABLE_SIZE*n_tables);
+
+  res = GetFontData (hdc, CMAP, CMAP_HEADER_SIZE, table, ENCODING_TABLE_SIZE*n_tables);
+  if (res != ENCODING_TABLE_SIZE*n_tables)
+    return 0;
+
+  for (i = 0; i < n_tables; i++)
+    {
+      if (table[i].platform_id == GUINT16_TO_BE (MICROSOFT_PLATFORM_ID) &&
+         table[i].encoding_id == GUINT16_TO_BE (encoding_id))
+       {
+         offset = GUINT32_FROM_BE (table[i].offset);
+         g_free (table);
+         return offset;
+       }
+    }
+  g_free (table);
+  return 0;
+}
+
+static gpointer
+get_format_4_cmap (HDC hdc)
+{
+  guint32 offset;
+  guint32 res;
+  guint16 length;
+  guint16 *tbl, *tbl_end;
+  struct format_4_cmap *table;
+
+  /* FIXME: Could look here at the CRC for the font in the DC
+           and return a cached copy if the same */
+
+  offset = get_cmap_offset (hdc, UNICODE_ENCODING_ID);
+  if (offset == 0)
+    return NULL;
+
+  res = GetFontData (hdc, CMAP, offset + 2, &length, 2);
+  if (res != 2)
+    return NULL;
+  length = GUINT16_FROM_BE (length);
+
+  table = g_malloc (length);
+
+  res = GetFontData (hdc, CMAP, offset, table, length);
+  if (res != length ||
+      GUINT16_FROM_BE (table->format) != 4 ||
+      (GUINT16_FROM_BE (table->length) % 2) != 0)
+    {
+      g_free (table);
+      return NULL;
+    }
+
+  table->format = GUINT16_FROM_BE (table->format);
+  table->length = GUINT16_FROM_BE (table->length);
+  table->language = GUINT16_FROM_BE (table->language);
+  table->seg_count_x_2 = GUINT16_FROM_BE (table->seg_count_x_2);
+  table->search_range = GUINT16_FROM_BE (table->search_range);
+  table->entry_selector = GUINT16_FROM_BE (table->entry_selector);
+  table->range_shift = GUINT16_FROM_BE (table->range_shift);
+
+  tbl_end = (guint16 *)((char *)table + length);
+  tbl = &table->reserved;
+
+  while (tbl < tbl_end)
+    {
+      *tbl = GUINT16_FROM_BE (*tbl);
+      tbl++;
+    }
+
+  return table;
+}
+
+static guint16 *
+get_id_range_offset (struct format_4_cmap *table)
+{
+  gint32 seg_count = table->seg_count_x_2/2;
+  return &table->arrays[seg_count*3];
+}
+
+static guint16 *
+get_id_delta (struct format_4_cmap *table)
+{
+  gint32 seg_count = table->seg_count_x_2/2;
+  return &table->arrays[seg_count*2];
+}
+
+static guint16 *
+get_start_count (struct format_4_cmap *table)
+{
+  gint32 seg_count = table->seg_count_x_2/2;
+  return &table->arrays[seg_count*1];
+}
+
+static guint16 *
+get_end_count (struct format_4_cmap *table)
+{
+  gint32 seg_count = table->seg_count_x_2/2;
+  /* Apparently the reseved spot is not reserved for
+     the end_count array!? */
+  return (&table->arrays[seg_count*0])-1;
+}
+
+static gboolean
+find_segment (struct format_4_cmap *table,
+             guint16               wc,
+             guint16              *segment)
+{
+  guint16 start, end, i;
+  guint16 seg_count = table->seg_count_x_2/2;
+  guint16 *end_count = get_end_count (table);
+  guint16 *start_count = get_start_count (table);
+  static guint last = 0; /* Cache of one */
+
+  if (last < seg_count &&
+      wc >= start_count[last] &&
+      wc <= end_count[last])
+    {
+      *segment = last;
+      return TRUE;
+    }
+
+
+  /* Binary search for the segment */
+  start = 0; /* inclusive */
+  end = seg_count; /* not inclusive */
+  while (start < end)
+    {
+      /* Look at middle pos */
+      i = (start + end)/2;
+
+      if (i == start)
+       {
+         /* We made no progress. Look if this is the one. */
+
+         if (wc >= start_count[i] &&
+             wc <= end_count[i])
+           {
+             *segment = i;
+             last = i;
+             return TRUE;
+           }
+         else
+           return FALSE;
+       }
+      else if (wc < start_count[i])
+       {
+         end = i;
+       }
+      else if (wc > end_count[i])
+       {
+         start = i;
+       }
+      else
+       {
+         /* Found it! */
+         *segment = i;
+         last = i;
+         return TRUE;
+       }
+    }
+  return FALSE;
+}
+
+static gpointer
+get_format_12_cmap (HDC hdc)
+{
+  guint32 offset;
+  guint32 res;
+  guint32 length;
+  guint32 *tbl, *tbl_end;
+  struct format_12_cmap *table;
+
+  offset = get_cmap_offset (hdc, UCS4_ENCODING_ID);
+  if (offset == 0)
+    return NULL;
+
+  res = GetFontData (hdc, CMAP, offset + 4, &length, 4);
+  if (res != 4)
+    return NULL;
+  length = GUINT32_FROM_BE (length);
+
+  table = g_malloc (length);
+
+  res = GetFontData (hdc, CMAP, offset, table, length);
+  if (res != length)
+    {
+      g_free (table);
+      return NULL;
+    }
+
+  table->format = GUINT16_FROM_BE (table->format);
+  table->length = GUINT32_FROM_BE (table->length);
+  table->language = GUINT32_FROM_BE (table->language);
+  table->count = GUINT32_FROM_BE (table->count);
+
+  if (table->format != 12 ||
+      (table->length % 4) != 0 ||
+      table->length > length ||
+      table->length < 16 + table->count * 12)
+    {
+      g_free (table);
+      return NULL;
+    }
+
+  tbl_end = (guint32 *) ((char *) table + length);
+  tbl = table->groups;
+
+  while (tbl < tbl_end)
+    {
+      *tbl = GUINT32_FROM_BE (*tbl);
+      tbl++;
+    }
+
+  return table;
+}
+
+static gpointer
+font_get_cmap (PangoFont *font)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  gpointer cmap;
+
+  if (win32font->win32face->cmap)
+    return win32font->win32face->cmap;
+
+  pango_win32_font_select_font (font, _pango_win32_hdc);
+
+  /* Prefer the format 12 cmap */
+  if ((cmap = get_format_12_cmap (_pango_win32_hdc)) != NULL)
+    {
+      win32font->win32face->cmap_format = 12;
+      win32font->win32face->cmap = cmap;
+    }
+  else if ((cmap = get_format_4_cmap (_pango_win32_hdc)) != NULL)
+    {
+      win32font->win32face->cmap_format = 4;
+      win32font->win32face->cmap = cmap;
+    }
+
+  pango_win32_font_done_font (font);
+
+  return cmap;
+}
+
+static gint
+pango_win32_font_get_type1_glyph_index (PangoFont *font,
+                                        gunichar   wc)
+{
+  wchar_t unicode[2];
+  WORD glyph_index;
+  gint32 res;
+
+  unicode[0] = wc;
+  unicode[1] = 0;
+  pango_win32_font_select_font (font, _pango_win32_hdc);
+  res = GetGlyphIndicesW (_pango_win32_hdc, unicode, 1, &glyph_index, 0);
+  pango_win32_font_done_font (font);
+
+  if (res == 1)
+      return glyph_index;
+  else
+      return 0;
+}
+
+/**
+ * pango_win32_font_get_glyph_index:
+ * @font: a #PangoFont.
+ * @wc: a Unicode character.
+ *
+ * Obtains the index of the glyph for @wc in @font, or 0, if not
+ * covered.
+ *
+ * Return value: the glyph index for @wc.
+ **/
+gint
+pango_win32_font_get_glyph_index (PangoFont *font,
+                                 gunichar   wc)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  gpointer cmap;
+  guint16 glyph;
+
+  if (win32font->win32face->has_cmap)
+    {
+      /* Do GetFontData magic on font->hfont here. */
+      cmap = font_get_cmap (font);
+      if (cmap == NULL)
+       win32font->win32face->has_cmap = FALSE;
+    }
+
+  if (!win32font->win32face->has_cmap)
+    return pango_win32_font_get_type1_glyph_index (font, wc);
+
+  if (win32font->win32face->cmap_format == 4)
+    {
+      struct format_4_cmap *cmap4 = cmap;
+      guint16 *id_range_offset;
+      guint16 *id_delta;
+      guint16 *start_count;
+      guint16 segment;
+      guint16 id;
+      guint16 ch = wc;
+
+      if (wc > 0xFFFF)
+       return 0;
+
+      if (!find_segment (cmap4, ch, &segment))
+       return 0;
+
+      id_range_offset = get_id_range_offset (cmap4);
+      id_delta = get_id_delta (cmap4);
+      start_count = get_start_count (cmap4);
+
+      if (id_range_offset[segment] == 0)
+       glyph = (id_delta[segment] + ch) % 65536;
+      else
+       {
+         id = *(id_range_offset[segment]/2 +
+                (ch - start_count[segment]) +
+                &id_range_offset[segment]);
+         if (id)
+           glyph = (id_delta[segment] + id) %65536;
+         else
+           glyph = 0;
+       }
+    }
+  else if (win32font->win32face->cmap_format == 12)
+    {
+      struct format_12_cmap *cmap12 = cmap;
+      guint32 i;
+
+      glyph = 0;
+      for (i = 0; i < cmap12->count; i++)
+       {
+         if (cmap12->groups[i*3+0] <= wc && wc <= cmap12->groups[i*3+1])
+           {
+             glyph = cmap12->groups[i*3+2] + (wc - cmap12->groups[i*3+0]);
+             break;
+           }
+       }
+    }
+  else
+    g_assert_not_reached ();
+
+  return glyph;
+}
+
+gboolean
+_pango_win32_get_name_header (HDC                 hdc,
+                             struct name_header *header)
+{
+  if (GetFontData (hdc, NAME, 0, header, sizeof (*header)) != sizeof (*header))
+    return FALSE;
+
+  header->num_records = GUINT16_FROM_BE (header->num_records);
+  header->string_storage_offset = GUINT16_FROM_BE (header->string_storage_offset);
+
+  return TRUE;
+}
+
+gboolean
+_pango_win32_get_name_record (HDC                 hdc,
+                             gint                i,
+                             struct name_record *record)
+{
+  if (GetFontData (hdc, NAME, 6 + i * sizeof (*record),
+                  record, sizeof (*record)) != sizeof (*record))
+    return FALSE;
+
+  record->platform_id = GUINT16_FROM_BE (record->platform_id);
+  record->encoding_id = GUINT16_FROM_BE (record->encoding_id);
+  record->language_id = GUINT16_FROM_BE (record->language_id);
+  record->name_id = GUINT16_FROM_BE (record->name_id);
+  record->string_length = GUINT16_FROM_BE (record->string_length);
+  record->string_offset = GUINT16_FROM_BE (record->string_offset);
+
+  return TRUE;
+}
+
+static gboolean
+font_has_name_in (PangoFont                       *font,
+                 PangoWin32CoverageLanguageClass  cjkv)
+{
+  HFONT hfont, oldhfont;
+  struct name_header header;
+  struct name_record record;
+  gint i;
+  gboolean retval = FALSE;
+
+  if (cjkv == PANGO_WIN32_COVERAGE_UNSPEC)
+    return TRUE;
+
+  hfont = pango_win32_get_hfont (font);
+  oldhfont = SelectObject (_pango_win32_hdc, hfont);
+
+  if (!_pango_win32_get_name_header (_pango_win32_hdc, &header))
+    {
+      SelectObject (_pango_win32_hdc, oldhfont);
+      return FALSE;
+    }
+
+  for (i = 0; i < header.num_records; i++)
+    {
+      if (!_pango_win32_get_name_record (_pango_win32_hdc, i, &record))
+       {
+         SelectObject (_pango_win32_hdc, oldhfont);
+         return FALSE;
+       }
+
+      if ((record.name_id != 1 && record.name_id != 16) || record.string_length <= 0)
+       continue;
+
+      PING (("platform:%d encoding:%d language:%04x name_id:%d",
+            record.platform_id, record.encoding_id, record.language_id, record.name_id));
+
+      if (record.platform_id == MICROSOFT_PLATFORM_ID)
+       if ((cjkv == PANGO_WIN32_COVERAGE_ZH_TW &&
+            record.language_id == MAKELANGID (LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL))
+           ||
+           (cjkv == PANGO_WIN32_COVERAGE_ZH_CN &&
+            record.language_id == MAKELANGID (LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED))
+           ||
+           (cjkv == PANGO_WIN32_COVERAGE_JA &&
+            PRIMARYLANGID (record.language_id) == LANG_JAPANESE)
+           ||
+           (cjkv == PANGO_WIN32_COVERAGE_KO &&
+            PRIMARYLANGID (record.language_id) == LANG_KOREAN)
+           ||
+           (cjkv == PANGO_WIN32_COVERAGE_VI &&
+            PRIMARYLANGID (record.language_id) == LANG_VIETNAMESE))
+         {
+           PING (("yep:%d:%04x", cjkv, record.language_id));
+           retval = TRUE;
+           break;
+         }
+    }
+
+  SelectObject (_pango_win32_hdc, oldhfont);
+  return retval;
+}
+
+static void
+pango_win32_font_calc_type1_coverage (PangoFont     *font,
+                                     PangoCoverage *coverage,
+                                     PangoLanguage *lang)
+{
+  GLYPHSET *glyph_set;
+  gint32 res;
+  guint32 ch;
+  guint32 i;
+  
+  pango_win32_font_select_font (font, _pango_win32_hdc);
+  res = GetFontUnicodeRanges(_pango_win32_hdc, NULL);
+  if (res == 0)
+    goto fail1;
+
+  glyph_set = g_malloc (res);
+  res = GetFontUnicodeRanges(_pango_win32_hdc, glyph_set);
+  if (res == 0)
+    goto fail2;
+  
+  for (i = 0; i < glyph_set->cRanges; i++) 
+    {
+      guint32 end = glyph_set->ranges[i].wcLow + glyph_set->ranges[i].cGlyphs;
+
+      for (ch = glyph_set->ranges[i].wcLow; ch < end; ch++)
+         if (CH_IS_UNIHAN_BMP (ch))
+             pango_coverage_set (coverage, ch, PANGO_COVERAGE_APPROXIMATE);
+         else
+             pango_coverage_set (coverage, ch, PANGO_COVERAGE_EXACT);
+    }
+
+ fail2:
+  g_free (glyph_set);
+
+ fail1:
+  pango_win32_font_done_font (font);
+}
+
+static void
+pango_win32_font_calc_coverage (PangoFont     *font,
+                               PangoCoverage *coverage,
+                               PangoLanguage *lang)
+{
+  PangoWin32Font *win32font = (PangoWin32Font *)font;
+  gpointer cmap;
+  guint32 ch;
+  guint32 i;
+  PangoWin32CoverageLanguageClass cjkv;
+  gboolean hide_unihan = FALSE;
+  PangoFontDescription *desc;
+  gchar *name;
+
+  desc = pango_font_describe (font);
+  name = pango_font_description_to_string (desc);
+  PING (("font:%s lang:%s", name,
+        pango_language_to_string (lang)));
+  g_free (name);
+  pango_font_description_free (desc);
+
+  if (win32font->win32face->has_cmap)
+    {
+      /* Do GetFontData magic on font->hfont here. */
+      cmap = font_get_cmap (font);
+      if (cmap == NULL)
+       win32font->win32face->has_cmap = FALSE;
+    }
+
+  if (!win32font->win32face->has_cmap)
+    {
+      pango_win32_font_calc_type1_coverage (font, coverage, lang);
+      return;
+    }
+
+  cjkv = pango_win32_coverage_language_classify (lang);
+
+  if (cjkv != PANGO_WIN32_COVERAGE_UNSPEC && !font_has_name_in (font, cjkv))
+    {
+      PING (("hiding UniHan chars"));
+      hide_unihan = TRUE;
+    }
+
+  PING (("coverage:"));
+  if (win32font->win32face->cmap_format == 4)
+    {
+      struct format_4_cmap *cmap4 = cmap;
+      guint16 *id_range_offset;
+      guint16 *start_count;
+      guint16 *end_count;
+      guint16 seg_count;
+      guint16 id;
+
+      seg_count = cmap4->seg_count_x_2/2;
+      end_count = get_end_count (cmap4);
+      start_count = get_start_count (cmap4);
+      id_range_offset = get_id_range_offset (cmap4);
+
+      for (i = 0; i < seg_count; i++)
+       {
+         if (id_range_offset[i] == 0)
+           {
+#ifdef PANGO_WIN32_DEBUGGING
+             if (_pango_win32_debug)
+               {
+                 if (end_count[i] == start_count[i])
+                   g_print ("%04x ", start_count[i]);
+                 else
+                   g_print ("%04x:%04x ", start_count[i], end_count[i]);
+               }
+#endif
+             for (ch = start_count[i]; ch <= end_count[i]; ch++)
+               if (hide_unihan && CH_IS_UNIHAN_BMP (ch))
+                 pango_coverage_set (coverage, ch, PANGO_COVERAGE_APPROXIMATE);
+               else
+                 pango_coverage_set (coverage, ch, PANGO_COVERAGE_EXACT);
+           }
+         else
+           {
+#ifdef PANGO_WIN32_DEBUGGING
+             guint32 ch0 = G_MAXUINT;
+#endif
+             for (ch = start_count[i]; ch <= end_count[i]; ch++)
+               {
+                 if (ch == 0xFFFF)
+                   break;
+
+                 id = *(id_range_offset[i]/2 +
+                        (ch - start_count[i]) +
+                        &id_range_offset[i]);
+                 if (id)
+                   {
+#ifdef PANGO_WIN32_DEBUGGING
+                     if (ch0 == G_MAXUINT)
+                       ch0 = ch;
+#endif
+                     if (hide_unihan && CH_IS_UNIHAN_BMP (ch))
+                       pango_coverage_set (coverage, ch, PANGO_COVERAGE_APPROXIMATE);
+                     else
+                       pango_coverage_set (coverage, ch, PANGO_COVERAGE_EXACT);
+                   }
+#ifdef PANGO_WIN32_DEBUGGING
+                 else if (ch0 < G_MAXUINT)
+                   {
+                     if (_pango_win32_debug)
+                       {
+                         if (ch > ch0 + 2)
+                           g_print ("%04x:%04x ", ch0, ch - 1);
+                         else
+                           g_print ("%04x ", ch0);
+                       }
+                     ch0 = G_MAXUINT;
+                   }
+#endif
+               }
+#ifdef PANGO_WIN32_DEBUGGING
+             if (ch0 < G_MAXUINT)
+               {
+                 if (_pango_win32_debug)
+                   {
+                     if (ch > ch0 + 2)
+                       g_print ("%04x:%04x ", ch0, ch - 1);
+                     else
+                       g_print ("%04x ", ch0);
+                   }
+               }
+#endif
+           }
+       }
+    }
+  else if (win32font->win32face->cmap_format == 12)
+    {
+      struct format_12_cmap *cmap12 = cmap;
+
+      for (i = 0; i < cmap12->count; i++)
+       {
+#ifdef PANGO_WIN32_DEBUGGING
+         if (_pango_win32_debug)
+           {
+             if (cmap12->groups[i*3+0] == cmap12->groups[i*3+1])
+               g_print ("%04x ", cmap12->groups[i*3+0]);
+             else
+               g_print ("%04x:%04x ", cmap12->groups[i*3+0], cmap12->groups[i*3+1]);
+           }
+#endif
+         for (ch = cmap12->groups[i*3+0]; ch <= cmap12->groups[i*3+1]; ch++)
+           {
+             if (hide_unihan && CH_IS_UNIHAN (ch))
+               pango_coverage_set (coverage, ch, PANGO_COVERAGE_APPROXIMATE);
+             else
+               pango_coverage_set (coverage, ch, PANGO_COVERAGE_EXACT);
+           }
+       }
+    }
+  else
+    g_assert_not_reached ();
+#ifdef PANGO_WIN32_DEBUGGING
+  if (_pango_win32_debug)
+    g_print ("\n");
+#endif
+}
diff --git a/pango/pangowin32.def b/pango/pangowin32.def
new file mode 100755 (executable)
index 0000000..13b6e8b
--- /dev/null
@@ -0,0 +1,29 @@
+EXPORTS
+       _pango_win32_fontmap_cache_remove
+       _pango_win32_make_matching_logfontw
+       _pango_win32_font_get_type
+       _pango_win32_font_map_get_type
+       pango_win32_font_cache_free
+       pango_win32_font_cache_load
+       pango_win32_font_cache_loadw
+       pango_win32_font_cache_new
+       pango_win32_font_cache_unload
+       pango_win32_font_description_from_logfont
+       pango_win32_font_description_from_logfontw
+       pango_win32_font_get_glyph_index
+       pango_win32_font_logfont
+       pango_win32_font_logfont
+       pango_win32_font_map_for_display
+       pango_win32_font_map_get_font_cache
+       pango_win32_get_context
+       pango_win32_get_dc
+       pango_win32_get_debug_flag
+       pango_win32_get_unknown_glyph
+       pango_win32_render
+       pango_win32_render_layout
+       pango_win32_render_layout_line
+       pango_win32_render_transformed
+       pango_win32_shutdown_display
+       pango_win32_font_done_font
+       pango_win32_font_get_metrics_factor
+       pango_win32_font_select_font
diff --git a/pango/pangowin32.h b/pango/pangowin32.h
new file mode 100755 (executable)
index 0000000..6653a17
--- /dev/null
@@ -0,0 +1,120 @@
+/* Pango
+ * pangowin32.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 Tor Lillqvist
+ * Copyright (C) 2001 Alexander Larsson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOWIN32_H__
+#define __PANGOWIN32_H__
+
+#include <glib.h>
+#include <pango/pango-font.h>
+#include <pango/pango-layout.h>
+
+G_BEGIN_DECLS
+
+#define STRICT
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0501    /* To get ClearType-related macros */
+#endif
+#include <windows.h>
+#undef STRICT
+
+#define PANGO_RENDER_TYPE_WIN32 "PangoRenderWin32"
+
+/* Calls for applications
+ */
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoContext * pango_win32_get_context        (void);
+#endif
+
+void           pango_win32_render             (HDC               hdc,
+                                              PangoFont        *font,
+                                              PangoGlyphString *glyphs,
+                                              gint              x,
+                                              gint              y);
+void           pango_win32_render_layout_line (HDC               hdc,
+                                              PangoLayoutLine  *line,
+                                              int               x,
+                                              int               y);
+void           pango_win32_render_layout      (HDC               hdc,
+                                              PangoLayout      *layout,
+                                              int               x,
+                                              int               y);
+
+void           pango_win32_render_transformed (HDC         hdc,
+                                              const PangoMatrix *matrix,
+                                              PangoFont         *font,
+                                              PangoGlyphString  *glyphs,
+                                              int                x,
+                                              int                y);
+
+#ifdef PANGO_ENABLE_ENGINE
+
+/* For shape engines
+ */
+
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoGlyph     pango_win32_get_unknown_glyph  (PangoFont        *font,
+                                              gunichar          wc);
+#endif /* PANGO_DISABLE_DEPRECATED */
+gint         pango_win32_font_get_glyph_index(PangoFont        *font,
+                                              gunichar          wc);
+
+HDC            pango_win32_get_dc             (void);
+
+gboolean       pango_win32_get_debug_flag     (void);
+
+gboolean pango_win32_font_select_font        (PangoFont *font,
+                                             HDC        hdc);
+void     pango_win32_font_done_font          (PangoFont *font);
+double   pango_win32_font_get_metrics_factor (PangoFont *font);
+
+#endif
+
+/* API for libraries that want to use PangoWin32 mixed with classic
+ * Win32 fonts.
+ */
+typedef struct _PangoWin32FontCache PangoWin32FontCache;
+
+PangoWin32FontCache *pango_win32_font_cache_new          (void);
+void                 pango_win32_font_cache_free         (PangoWin32FontCache *cache);
+
+HFONT                pango_win32_font_cache_load         (PangoWin32FontCache *cache,
+                                                         const LOGFONTA      *logfont);
+HFONT                pango_win32_font_cache_loadw        (PangoWin32FontCache *cache,
+                                                         const LOGFONTW      *logfont);
+void                 pango_win32_font_cache_unload       (PangoWin32FontCache *cache,
+                                                         HFONT                hfont);
+
+PangoFontMap        *pango_win32_font_map_for_display    (void);
+void                 pango_win32_shutdown_display        (void);
+PangoWin32FontCache *pango_win32_font_map_get_font_cache (PangoFontMap       *font_map);
+
+LOGFONTA            *pango_win32_font_logfont            (PangoFont          *font);
+LOGFONTW            *pango_win32_font_logfontw           (PangoFont          *font);
+
+PangoFontDescription *pango_win32_font_description_from_logfont (const LOGFONTA *lfp);
+
+PangoFontDescription *pango_win32_font_description_from_logfontw (const LOGFONTW *lfp);
+
+G_END_DECLS
+
+#endif /* __PANGOWIN32_H__ */
diff --git a/pango/pangowin32.rc b/pango/pangowin32.rc
new file mode 100755 (executable)
index 0000000..f862bf4
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION 1,26,1,0
+  PRODUCTVERSION 1,26,1,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "PangoWin32"
+       VALUE "FileVersion", "1.26.1.0"
+       VALUE "InternalName", "pangowin32-1.0-0"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software. Copyright © 2000 Tor Lillqvist"
+       VALUE "OriginalFilename", "pangowin32-1.0-0.dll"
+       VALUE "ProductName", "PangoWin32"
+       VALUE "ProductVersion", "1.26.1"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangowin32.rc.in b/pango/pangowin32.rc.in
new file mode 100755 (executable)
index 0000000..f78465d
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "PangoWin32"
+       VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+       VALUE "InternalName", "pangowin32-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software. Copyright © 2000 Tor Lillqvist"
+       VALUE "OriginalFilename", "pangowin32-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+       VALUE "ProductName", "PangoWin32"
+       VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangox-fontcache.c b/pango/pangox-fontcache.c
new file mode 100755 (executable)
index 0000000..f60b8c9
--- /dev/null
@@ -0,0 +1,249 @@
+/* Pango
+ * pango-fontcache.c: Cache of XFontStructs by XLFD
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pangox.h"
+
+/* Font cache
+ */
+
+/* Number of fonts to retain after they are not otherwise referenced.
+ */
+#define CACHE_SIZE 16
+
+typedef struct _CacheEntry CacheEntry;
+
+struct _PangoXFontCache
+{
+  Display *display;
+
+  GHashTable *forward;
+  GHashTable *back;
+
+  GList *mru;
+  GList *mru_tail;
+  int mru_count;
+};
+
+struct _CacheEntry
+{
+  char *xlfd;
+  XFontStruct *fs;
+
+  gint ref_count;
+  GList *mru;
+};
+
+static void
+free_cache_entry (char            *xlfd G_GNUC_UNUSED,
+                 CacheEntry      *entry,
+                 PangoXFontCache *cache)
+{
+  g_free (entry->xlfd);
+  XFreeFont (cache->display, entry->fs);
+
+  g_slice_free (CacheEntry, entry);
+}
+
+/**
+ * pango_x_font_cache_free:
+ * @cache: a #PangoXFontCache
+ *
+ * Frees a #PangoXFontCache and all associated memory. All fonts loaded
+ * through this font cache will be freed along with the cache.
+ **/
+void
+pango_x_font_cache_free (PangoXFontCache *cache)
+{
+  g_return_if_fail (cache != NULL);
+
+  g_hash_table_foreach (cache->forward, (GHFunc)free_cache_entry, cache);
+
+  g_hash_table_destroy (cache->forward);
+  g_hash_table_destroy (cache->back);
+
+  g_list_free (cache->mru);
+
+  g_slice_free (PangoXFontCache, cache);
+}
+
+/**
+ * pango_x_font_cache_new:
+ * @display: an X display.
+ *
+ * Creates a font cache for the specified display.
+ *
+ * Return value: The newly allocated #PangoXFontCache, which should be
+ *               freed with pango_x_font_cache_free().
+ **/
+PangoXFontCache *
+pango_x_font_cache_new (Display *display)
+{
+  PangoXFontCache *cache;
+
+  g_return_val_if_fail (display != NULL, NULL);
+
+  cache = g_slice_new (PangoXFontCache);
+
+  cache->display = display;
+
+  cache->forward = g_hash_table_new (g_str_hash, g_str_equal);
+  cache->back = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+  cache->mru = NULL;
+  cache->mru_tail = NULL;
+  cache->mru_count = 0;
+
+  return cache;
+}
+
+static void
+cache_entry_unref (PangoXFontCache *cache, CacheEntry *entry)
+{
+  if (g_atomic_int_dec_and_test (&entry->ref_count))
+    {
+      g_hash_table_remove (cache->forward, entry->xlfd);
+      g_hash_table_remove (cache->back, entry->fs);
+
+      free_cache_entry (NULL, entry, cache);
+    }
+}
+
+/**
+ * pango_x_font_cache_load:
+ * @cache: a #PangoXFontCache
+ * @xlfd: the X Logical Font Description to load.
+ *
+ * Loads a #XFontStruct from a X Logical Font Description. The
+ * result may be newly loaded, or it may have been previously
+ * stored.
+ *
+ * Return value: The font structure, or %NULL if the font could
+ * not be loaded. In order to free this structure, you must call
+ * pango_x_font_cache_unload().
+ **/
+XFontStruct *
+pango_x_font_cache_load (PangoXFontCache *cache,
+                        const char      *xlfd)
+{
+  CacheEntry *entry;
+
+  g_return_val_if_fail (cache != NULL, NULL);
+  g_return_val_if_fail (xlfd != NULL, NULL);
+
+  entry = g_hash_table_lookup (cache->forward, xlfd);
+
+  if (entry)
+    {
+      g_atomic_int_inc (&entry->ref_count);
+    }
+  else
+    {
+      XFontStruct *fs = XLoadQueryFont (cache->display, xlfd);
+
+      if (!fs)
+       return NULL;
+
+      entry = g_slice_new (CacheEntry);
+
+      entry->xlfd = g_strdup (xlfd);
+      entry->fs = fs;
+
+      entry->ref_count = 1;
+      entry->mru = NULL;
+
+      g_hash_table_insert (cache->forward, entry->xlfd, entry);
+      g_hash_table_insert (cache->back, entry->fs, entry);
+    }
+
+  if (entry->mru)
+    {
+      if (cache->mru_count > 1 && entry->mru->prev)
+       {
+         /* Move to the head of the mru list */
+
+         if (entry->mru == cache->mru_tail)
+           {
+             cache->mru_tail = cache->mru_tail->prev;
+             cache->mru_tail->next = NULL;
+           }
+         else
+           {
+             entry->mru->prev->next = entry->mru->next;
+             entry->mru->next->prev = entry->mru->prev;
+           }
+
+         entry->mru->next = cache->mru;
+         entry->mru->prev = NULL;
+         cache->mru->prev = entry->mru;
+         cache->mru = entry->mru;
+       }
+    }
+  else
+    {
+      g_atomic_int_inc (&entry->ref_count);
+
+      /* Insert into the mru list */
+
+      if (cache->mru_count == CACHE_SIZE)
+       {
+         CacheEntry *old_entry = cache->mru_tail->data;
+
+         cache->mru_tail = cache->mru_tail->prev;
+         cache->mru_tail->next = NULL;
+
+         g_list_free_1 (old_entry->mru);
+         old_entry->mru = NULL;
+         cache_entry_unref (cache, old_entry);
+       }
+      else
+       cache->mru_count++;
+
+      cache->mru = g_list_prepend (cache->mru, entry);
+      if (!cache->mru_tail)
+       cache->mru_tail = cache->mru;
+      entry->mru = cache->mru;
+    }
+
+  return entry->fs;
+}
+
+/**
+ * pango_x_font_cache_unload:
+ * @cache: a #PangoXFontCache
+ * @fs: the font structure to unload
+ *
+ * Frees a font structure previously loaded with pango_x_font_cache_load().
+ **/
+void
+pango_x_font_cache_unload (PangoXFontCache *cache,
+                          XFontStruct     *fs)
+{
+  CacheEntry *entry;
+
+  g_return_if_fail (cache != NULL);
+  g_return_if_fail (fs != NULL);
+
+  entry = g_hash_table_lookup (cache->back, fs);
+  g_return_if_fail (entry != NULL);
+
+  cache_entry_unref (cache, entry);
+}
diff --git a/pango/pangox-fontmap.c b/pango/pangox-fontmap.c
new file mode 100755 (executable)
index 0000000..6d5e547
--- /dev/null
@@ -0,0 +1,1691 @@
+/* Pango
+ * pangox-fontmap.c: X font handling
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <glib.h>
+
+#include <X11/Xatom.h>
+
+/* For XExtSetCloseDisplay */
+#include <X11/Xlibint.h>
+
+#include "pango-engine-private.h"
+#include "pango-fontmap.h"
+#include "pango-impl-utils.h"
+#include "modules.h"
+
+#undef PANGO_DISABLE_DEPRECATED
+
+#include "pangox-private.h"
+
+typedef struct _PangoXFamily       PangoXFamily;
+typedef struct _PangoXSizeInfo     PangoXSizeInfo;
+
+/* Number of freed fonts */
+#define MAX_FREED_FONTS 16
+
+/* This is the largest field length we will accept. If a fontname has a field
+   larger than this we will skip it. */
+#define XLFD_MAX_FIELD_LEN 64
+#define MAX_FONTS 32767
+
+/* These are the field numbers in the X Logical Font Description fontnames,
+   e.g. -adobe-courier-bold-o-normal--25-180-100-100-m-150-iso8859-1 */
+typedef enum
+{
+  XLFD_FOUNDRY         = 0,
+  XLFD_FAMILY          = 1,
+  XLFD_WEIGHT          = 2,
+  XLFD_SLANT           = 3,
+  XLFD_SET_WIDTH       = 4,
+  XLFD_ADD_STYLE       = 5,
+  XLFD_PIXELS          = 6,
+  XLFD_POINTS          = 7,
+  XLFD_RESOLUTION_X    = 8,
+  XLFD_RESOLUTION_Y    = 9,
+  XLFD_SPACING         = 10,
+  XLFD_AVERAGE_WIDTH   = 11,
+  XLFD_CHARSET         = 12,
+  XLFD_NUM_FIELDS
+} FontField;
+
+struct _PangoXFamily
+{
+  PangoFontFamily parent_instance;
+
+  char *family_name;
+  GSList *font_entries;
+};
+
+struct _PangoXFace
+{
+  PangoFontFace parent_instance;
+
+  char *xlfd;
+  PangoFontDescription *description;
+  PangoCoverage *coverage;
+
+  char *face_name;
+
+  GSList *cached_fonts;
+};
+
+struct _PangoXSizeInfo
+{
+  char *identifier;
+  GSList *xlfds;
+};
+
+static const struct {
+  const gchar text[12];
+  PangoWeight value;
+} weights_map[] = {
+  { "light",     300 },
+  { "regular",   400 },
+  { "book",      400 },
+  { "medium",    500 },
+  { "semibold",  600 },
+  { "demibold",  600 },
+  { "bold",      700 },
+  { "extrabold", 800 },
+  { "ultrabold", 800 },
+  { "heavy",     900 },
+  { "black",     900 }
+};
+
+static const struct {
+  const gchar text[4];
+  PangoStyle value;
+} styles_map[] = {
+  { "r", PANGO_STYLE_NORMAL },
+  { "i", PANGO_STYLE_ITALIC },
+  { "o", PANGO_STYLE_OBLIQUE }
+};
+
+static const struct {
+  const gchar text[16];
+  PangoStretch value;
+} stretches_map[] = {
+  { "normal",        PANGO_STRETCH_NORMAL },
+  { "semicondensed", PANGO_STRETCH_SEMI_CONDENSED },
+  { "condensed",     PANGO_STRETCH_CONDENSED },
+};
+
+static void     pango_x_font_map_init       (PangoXFontMap      *fontmap);
+static void     pango_x_font_map_class_init (PangoFontMapClass *class);
+
+static void       pango_x_font_map_finalize      (GObject                      *object);
+static PangoFont *pango_x_font_map_load_font     (PangoFontMap                 *fontmap,
+                                                 PangoContext                 *context,
+                                                 const PangoFontDescription   *description);
+static void       pango_x_font_map_list_families (PangoFontMap                 *fontmap,
+                                                 PangoFontFamily            ***families,
+                                                 int                          *n_families);
+
+static void     pango_x_fontmap_cache_clear (PangoXFontMap   *xfontmap);
+static void     pango_x_font_map_read_aliases (PangoXFontMap *xfontmap);
+
+static gint     pango_x_get_size            (PangoXFontMap      *fontmap,
+                                            const char         *fontname);
+static void     pango_x_insert_font         (PangoXFontMap      *fontmap,
+                                            const char         *fontname);
+static gboolean pango_x_is_xlfd_font_name   (const char         *fontname);
+static char *   pango_x_get_xlfd_field      (const char         *fontname,
+                                            FontField           field_num,
+                                            char               *buffer);
+static char *   pango_x_get_identifier      (const char         *fontname);
+
+
+#define PANGO_X_TYPE_FAMILY              (pango_x_family_get_type ())
+#define PANGO_X_FAMILY(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_X_TYPE_FAMILY, PangoXFamily))
+#define PANGO_X_IS_FAMILY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_X_TYPE_FAMILY))
+
+GType           pango_x_family_get_type (void);
+
+
+#define PANGO_X_TYPE_FACE              (pango_x_face_get_type ())
+#define PANGO_X_FACE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_X_TYPE_FACE, PangoXFace))
+#define PANGO_X_IS_FACE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_X_TYPE_FACE))
+
+GType           pango_x_face_get_type (void);
+
+
+static PangoFontClass *font_map_parent_class;  /* Parent class structure for PangoXFontMap */
+
+GType
+pango_x_font_map_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoFontMapClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_x_font_map_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoXFontMap),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) pango_x_font_map_init,
+       NULL            /* value_table */
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT_MAP,
+                                           I_("PangoXFontMap"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+static void
+pango_x_font_map_init (PangoXFontMap *xfontmap)
+{
+  xfontmap->families = g_hash_table_new (g_str_hash, g_str_equal);
+  xfontmap->size_infos = g_hash_table_new (g_str_hash, g_str_equal);
+  xfontmap->to_atom_cache = g_hash_table_new (g_str_hash, g_str_equal);
+  xfontmap->from_atom_cache = g_hash_table_new (g_direct_hash, g_direct_equal);
+  xfontmap->n_fonts = 0;
+}
+
+static void
+pango_x_font_map_class_init (PangoFontMapClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  font_map_parent_class = g_type_class_peek_parent (class);
+
+  object_class->finalize = pango_x_font_map_finalize;
+  class->load_font = pango_x_font_map_load_font;
+  class->list_families = pango_x_font_map_list_families;
+  class->shape_engine_type = PANGO_RENDER_TYPE_X;
+}
+
+/*
+ * Hackery to set up notification when a Display is closed
+ */
+static GSList *registered_displays;
+
+static int
+close_display_cb (Display   *display,
+                 XExtCodes *extcodes G_GNUC_UNUSED)
+{
+  pango_x_shutdown_display (display);
+  registered_displays = g_slist_remove (registered_displays, display);
+
+  return 0;
+}
+
+static void
+register_display (Display *display)
+{
+  XExtCodes *extcodes;
+  GSList *tmp_list;
+
+  for (tmp_list = registered_displays; tmp_list; tmp_list = tmp_list->next)
+    {
+      if (tmp_list->data == display)
+       return;
+    }
+
+  registered_displays = g_slist_prepend (registered_displays, display);
+
+  extcodes = XAddExtension (display);
+  XESetCloseDisplay (display, extcodes->extension, close_display_cb);
+}
+
+static GList *fontmaps = NULL;
+
+/**
+ * pango_x_font_map_for_display:
+ * @display: an X #Display.
+ *
+ * Returns a #PangoXFontMap for @display. Font maps are cached and should
+ * not be freed. If the font map for a display is no longer needed, it can
+ * be released with pango_x_shutdown_display().
+ *
+ * Return value: a #PangoXFontMap for @display.
+ **/
+PangoFontMap *
+pango_x_font_map_for_display (Display *display)
+{
+  PangoXFontMap *xfontmap;
+  GList *tmp_list = fontmaps;
+  char **xfontnames;
+  int num_fonts, i;
+  int screen;
+  static gboolean registered_modules = FALSE;
+
+  g_return_val_if_fail (display != NULL, NULL);
+
+  if (!registered_modules)
+    {
+      registered_modules = TRUE;
+
+      for (i = 0; _pango_included_x_modules[i].list; i++)
+       pango_module_register (&_pango_included_x_modules[i]);
+    }
+
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+  while (tmp_list)
+    {
+      xfontmap = tmp_list->data;
+
+      if (xfontmap->display == display)
+       return PANGO_FONT_MAP (xfontmap);
+
+      tmp_list = tmp_list->next;
+    }
+
+  xfontmap = g_object_new (PANGO_TYPE_X_FONT_MAP, NULL);
+
+  xfontmap->display = display;
+  xfontmap->font_cache = pango_x_font_cache_new (display);
+  xfontmap->freed_fonts = g_queue_new ();
+
+  /* Get a maximum of MAX_FONTS fontnames from the X server.
+     Use "-*" as the pattern rather than "-*-*-*-*-*-*-*-*-*-*-*-*-*-*" since
+     the latter may result in fonts being returned which don't actually exist.
+     xlsfonts also uses "*" so I think it's OK. "-*" gets rid of aliases. */
+  xfontnames = XListFonts (xfontmap->display, "-*", MAX_FONTS, &num_fonts);
+  if (num_fonts == MAX_FONTS)
+    g_warning("MAX_FONTS exceeded. Some fonts may be missing.");
+
+  /* Insert the font families into the main table */
+  for (i = 0; i < num_fonts; i++)
+    {
+      if (pango_x_is_xlfd_font_name (xfontnames[i]))
+       pango_x_insert_font (xfontmap, xfontnames[i]);
+    }
+
+  XFreeFontNames (xfontnames);
+
+  pango_x_font_map_read_aliases (xfontmap);
+
+  fontmaps = g_list_prepend (fontmaps, xfontmap);
+
+  /* This is a little screwed up, since different screens on the same display
+   * might have different resolutions
+   */
+  screen = DefaultScreen (xfontmap->display);
+  xfontmap->resolution = (PANGO_SCALE * 72.27 / 25.4) * ((double) DisplayWidthMM (xfontmap->display, screen) /
+                                                        DisplayWidth (xfontmap->display, screen));
+
+  register_display (xfontmap->display);
+
+  return PANGO_FONT_MAP (xfontmap);
+}
+
+/**
+ * pango_x_shutdown_display:
+ * @display: an X #Display
+ *
+ * Free cached resources for the given X display structure.
+ **/
+void
+pango_x_shutdown_display (Display *display)
+{
+  GList *tmp_list;
+
+  g_return_if_fail (display != NULL);
+
+  tmp_list = fontmaps;
+  while (tmp_list)
+    {
+      PangoXFontMap *xfontmap = tmp_list->data;
+
+      if (xfontmap->display == display)
+       {
+         fontmaps = g_list_delete_link (fontmaps, tmp_list);
+         pango_x_fontmap_cache_clear (xfontmap);
+         g_object_unref (xfontmap);
+
+         return;
+       }
+
+      tmp_list = tmp_list->next;
+    }
+}
+
+static void
+pango_x_font_map_finalize (GObject *object)
+{
+  PangoXFontMap *xfontmap = PANGO_X_FONT_MAP (object);
+
+  g_list_foreach (xfontmap->freed_fonts->head, (GFunc)g_object_unref, NULL);
+  g_queue_free (xfontmap->freed_fonts);
+
+  pango_x_font_cache_free (xfontmap->font_cache);
+
+  /* FIXME: None of these hashtables free their key/values
+  g_hash_table_destroy (xfontmap->families);
+  g_hash_table_destroy (xfontmap->size_infos);
+  g_hash_table_destroy (xfontmap->to_atom_cache);
+  g_hash_table_destroy (xfontmap->from_atom_cache);
+  */
+
+  fontmaps = g_list_remove (fontmaps, xfontmap);
+
+  G_OBJECT_CLASS (font_map_parent_class)->finalize (object);
+}
+
+static void
+list_families_foreach (gpointer key G_GNUC_UNUSED,
+                      gpointer value,
+                      gpointer user_data)
+{
+  GSList **list = user_data;
+
+  *list = g_slist_prepend (*list, value);
+}
+
+static void
+pango_x_font_map_list_families (PangoFontMap           *fontmap,
+                               PangoFontFamily      ***families,
+                               int                    *n_families)
+{
+  GSList *family_list = NULL;
+  GSList *tmp_list;
+  PangoXFontMap *xfontmap = (PangoXFontMap *)fontmap;
+
+  if (!n_families)
+    return;
+
+  g_hash_table_foreach (xfontmap->families, list_families_foreach, &family_list);
+
+  *n_families = g_slist_length (family_list);
+
+  if (families)
+    {
+      int i = 0;
+
+      *families = g_new (PangoFontFamily *, *n_families);
+
+      tmp_list = family_list;
+      while (tmp_list)
+       {
+         (*families)[i] = tmp_list->data;
+         i++;
+         tmp_list = tmp_list->next;
+       }
+    }
+
+  g_slist_free (family_list);
+}
+
+static PangoXFamily *
+pango_x_get_font_family (PangoXFontMap *xfontmap,
+                        const char    *family_name)
+{
+  PangoXFamily *font_family = g_hash_table_lookup (xfontmap->families, family_name);
+  if (!font_family)
+    {
+      font_family = g_object_new (PANGO_X_TYPE_FAMILY, NULL);
+      font_family->family_name = g_strdup (family_name);
+      font_family->font_entries = NULL;
+
+      g_hash_table_insert (xfontmap->families, font_family->family_name, font_family);
+    }
+
+  return font_family;
+}
+
+static PangoFont *
+pango_x_font_map_load_font (PangoFontMap               *fontmap,
+                           PangoContext               *context G_GNUC_UNUSED,
+                           const PangoFontDescription *description)
+{
+  PangoXFontMap *xfontmap = (PangoXFontMap *)fontmap;
+  PangoXFamily *font_family;
+  PangoFont *result = NULL;
+  GSList *tmp_list;
+  const gchar *family;
+  gchar *name;
+  gint size;
+
+  g_return_val_if_fail (description != NULL, NULL);
+
+  family = pango_font_description_get_family (description);
+  name = g_ascii_strdown (family ? family : "", -1);
+  size = pango_font_description_get_size (description);
+
+  if (size < 0)
+    return NULL;
+
+  font_family = g_hash_table_lookup (xfontmap->families, name);
+  if (font_family)
+    {
+      PangoXFace *best_match = NULL;
+
+      tmp_list = font_family->font_entries;
+      while (tmp_list)
+       {
+         PangoXFace *font_entry = tmp_list->data;
+
+         if (pango_font_description_better_match (description,
+                                                  best_match ? best_match->description : NULL,
+                                                  font_entry->description))
+           best_match = font_entry;
+
+         tmp_list = tmp_list->next;
+       }
+
+      if (best_match)
+       {
+         GSList *tmp_list = best_match->cached_fonts;
+
+         while (tmp_list)
+           {
+             PangoXFont *xfont = tmp_list->data;
+             if (xfont->size == size)
+               {
+                 result = (PangoFont *)xfont;
+
+                 g_object_ref (result);
+                 if (xfont->in_cache)
+                   pango_x_fontmap_cache_remove (fontmap, xfont);
+
+                 break;
+               }
+             tmp_list = tmp_list->next;
+           }
+
+         if (!result)
+           {
+             PangoXFont *xfont = pango_x_font_new (fontmap, best_match->xlfd, size);
+
+             xfont->xface = best_match;
+             best_match->cached_fonts = g_slist_prepend (best_match->cached_fonts, xfont);
+
+             result = (PangoFont *)xfont;
+           }
+       }
+    }
+
+  g_free (name);
+  return result;
+}
+
+\f
+/************************
+ * Coverage Map Caching *
+ ************************/
+
+/* We need to be robust against errors accessing the coverage
+ * cache window, since it is not our window. So we temporarily
+ * set this error handler while accessing it. The error_occurred
+ * global allows us to tell whether an error occurred for
+ * XChangeProperty
+ */
+static gboolean error_occurred;
+
+static int
+ignore_error (Display     *d G_GNUC_UNUSED,
+             XErrorEvent *e G_GNUC_UNUSED)
+{
+  return 0;
+}
+
+/* Retrieve the coverage window for the given display.
+ * We look for a property on the root window, and then
+ * check that the window that property points to also
+ * has the same property pointing to itself. The second
+ * check allows us to make sure that a stale property
+ * isn't just pointing to some other apps window
+ */
+static Window
+pango_x_real_get_coverage_win (Display *display)
+{
+  Atom type;
+  int format;
+  gulong n_items;
+  gulong bytes_after;
+  guchar *data;
+  Window retval = None;
+  int (*old_handler) (Display *, XErrorEvent *);
+
+  Atom coverage_win_atom = XInternAtom (display,
+                                       "PANGO_COVERAGE_WIN",
+                                       False);
+
+  XGetWindowProperty (display,
+                     DefaultRootWindow (display),
+                     coverage_win_atom,
+                     0, 4,
+                     False, XA_WINDOW,
+                     &type, &format, &n_items, &bytes_after,
+                     &data);
+
+  if (type == XA_WINDOW)
+    {
+      if (format == 32 && n_items == 1 && bytes_after == 0)
+       retval = *(Atom *)data;
+
+      XFree (data);
+    }
+
+  old_handler= XSetErrorHandler (ignore_error);
+
+  if (XGetWindowProperty (display,
+                         retval,
+                         coverage_win_atom,
+                         0, 4,
+                         False, XA_WINDOW,
+                         &type, &format, &n_items, &bytes_after,
+                         &data) == Success &&
+      type == XA_WINDOW)
+    {
+      if (format != 32 || n_items != 1 || bytes_after != 0 ||
+         *(Atom *)data != retval)
+       retval = None;
+
+      XFree (data);
+    }
+  else
+    retval = None;
+
+  XSync (display, False);
+  XSetErrorHandler (old_handler);
+
+  return retval;
+}
+
+/* Find or create the persistent window for caching font coverage
+ * information.
+ *
+ * To assure atomic creation, we first look for the window, then if we
+ * don't find it, grab the server, look for it again, and then if that
+ * still didn't find it, create it and ungrab.
+ */
+static Window
+pango_x_get_coverage_win (PangoXFontMap *xfontmap)
+{
+  if (!xfontmap->coverage_win)
+    xfontmap->coverage_win = pango_x_real_get_coverage_win (xfontmap->display);
+
+  if (!xfontmap->coverage_win)
+    {
+      Display *persistant_display;
+
+      persistant_display = XOpenDisplay (DisplayString (xfontmap->display));
+      if (!persistant_display)
+       {
+         g_warning ("Cannot create or retrieve display for font coverage cache");
+         return None;
+       }
+
+      XGrabServer (persistant_display);
+
+      xfontmap->coverage_win = pango_x_real_get_coverage_win (xfontmap->display);
+      if (!xfontmap->coverage_win)
+       {
+         XSetWindowAttributes attr;
+
+         attr.override_redirect = True;
+
+         XSetCloseDownMode (persistant_display, RetainPermanent);
+
+         xfontmap->coverage_win =
+           XCreateWindow (persistant_display,
+                          DefaultRootWindow (persistant_display),
+                          -100, -100, 10, 10, 0, 0,
+                          InputOnly, (Visual *)CopyFromParent,
+                          CWOverrideRedirect, &attr);
+
+         XChangeProperty (persistant_display,
+                          DefaultRootWindow (persistant_display),
+                          XInternAtom (persistant_display,
+                                       "PANGO_COVERAGE_WIN",
+                                       FALSE),
+                          XA_WINDOW,
+                          32, PropModeReplace,
+                          (guchar *)&xfontmap->coverage_win, 1);
+
+
+         XChangeProperty (persistant_display,
+                          xfontmap->coverage_win,
+                          XInternAtom (persistant_display,
+                                       "PANGO_COVERAGE_WIN",
+                                       FALSE),
+                          XA_WINDOW,
+                          32, PropModeReplace,
+                          (guchar *)&xfontmap->coverage_win, 1);
+       }
+
+      XUngrabServer (persistant_display);
+
+      XSync (persistant_display, False);
+      XCloseDisplay (persistant_display);
+    }
+
+  return xfontmap->coverage_win;
+}
+
+/* Find the cached value for the coverage map on the
+ * coverage cache window, if it exists. *atom is set
+ * to the interned value of str for later use in storing
+ * the property if the lookup fails
+ */
+static PangoCoverage *
+pango_x_get_cached_coverage (PangoXFontMap *xfontmap,
+                            const char    *str,
+                            Atom          *atom)
+{
+  int (*old_handler) (Display *, XErrorEvent *);
+  Window coverage_win;
+  PangoCoverage *result = NULL;
+
+  Atom type;
+  int format;
+  int tries = 5;
+  gulong n_items;
+  gulong bytes_after;
+  guchar *data;
+
+  *atom = XInternAtom (xfontmap->display, str, False);
+
+  while (tries--)
+    {
+      coverage_win = pango_x_get_coverage_win (xfontmap);
+
+      if (!coverage_win)
+       return NULL;
+
+      old_handler= XSetErrorHandler (ignore_error);
+
+      if (XGetWindowProperty (xfontmap->display,
+                             coverage_win, *atom,
+                             0, G_MAXLONG,
+                             False, XA_STRING,
+                             &type, &format, &n_items, &bytes_after,
+                             &data) == Success
+         && type == XA_STRING)
+       {
+         if (format == 8 && bytes_after == 0)
+           result = pango_coverage_from_bytes (data, n_items);
+
+         XSetErrorHandler (old_handler);
+         XFree (data);
+         break;
+       }
+      else
+       {
+         /* Window disappeared out from under us */
+         XSetErrorHandler (old_handler);
+         xfontmap->coverage_win = None;
+       }
+
+    }
+
+  return result;
+}
+
+/* Store the given coverage map on the coverage cache window.
+ * atom is the intern'ed value of the string that identifies
+ * the cache entry.
+ */
+static void
+pango_x_store_cached_coverage (PangoXFontMap *xfontmap,
+                              Atom           atom,
+                              PangoCoverage *coverage)
+{
+  int (*old_handler) (Display *, XErrorEvent *);
+  guchar *bytes;
+  gint size;
+
+  int tries = 5;
+
+  pango_coverage_to_bytes (coverage, &bytes, &size);
+
+  while (tries--)
+    {
+      Window coverage_win = pango_x_get_coverage_win (xfontmap);
+
+      if (!coverage_win)
+       break;
+
+      old_handler = XSetErrorHandler (ignore_error);
+      error_occurred = False;
+
+      XChangeProperty (xfontmap->display,
+                      coverage_win,
+                      atom,
+                      XA_STRING,
+                      8, PropModeReplace,
+                      bytes, size);
+
+      XSync (xfontmap->display, False);
+      XSetErrorHandler (old_handler);
+
+      if (!error_occurred)
+       break;
+      else
+       {
+         /* Window disappeared out from under us */
+         XSetErrorHandler (old_handler);
+         xfontmap->coverage_win = None;
+       }
+    }
+
+  g_free (bytes);
+}
+\f
+
+static void
+pango_x_font_map_read_alias_file (PangoXFontMap *xfontmap,
+                                 const char   *filename)
+{
+  FILE *infile;
+  char **xlfds;
+  int lineno = 0;
+  int i;
+  PangoXFace *xface = NULL;
+
+  infile = fopen (filename, "r");
+  if (infile)
+    {
+      GString *line_buf = g_string_new (NULL);
+      GString *tmp_buf = g_string_new (NULL);
+      gint lines_read;
+
+      while ((lines_read = pango_read_line (infile, line_buf)))
+       {
+         PangoXFamily *font_family;
+         PangoStyle style;
+         PangoVariant variant;
+         PangoWeight weight;
+         PangoStretch stretch;
+
+         const char *p = line_buf->str;
+
+         lineno += lines_read;
+
+         if (!pango_skip_space (&p))
+           continue;
+
+         if (!pango_scan_string (&p, tmp_buf))
+           goto error;
+
+         xface = g_object_new (PANGO_X_TYPE_FACE, NULL);
+         xface->xlfd = NULL;
+         xface->description = pango_font_description_new ();
+
+         g_string_ascii_down (tmp_buf);
+         pango_font_description_set_family (xface->description, tmp_buf->str);
+
+         if (!pango_scan_string (&p, tmp_buf))
+           goto error;
+
+         if (!pango_parse_style (tmp_buf->str, &style, TRUE))
+           goto error;
+         pango_font_description_set_style (xface->description, style);
+
+         if (!pango_scan_string (&p, tmp_buf))
+           goto error;
+
+         if (!pango_parse_variant (tmp_buf->str, &variant, TRUE))
+           goto error;
+         pango_font_description_set_variant (xface->description, variant);
+
+         if (!pango_scan_string (&p, tmp_buf))
+           goto error;
+
+         if (!pango_parse_weight (tmp_buf->str, &weight, TRUE))
+           goto error;
+         pango_font_description_set_weight (xface->description, weight);
+
+         if (!pango_scan_string (&p, tmp_buf))
+           goto error;
+
+         if (!pango_parse_stretch (tmp_buf->str, &stretch, TRUE))
+           goto error;
+         pango_font_description_set_stretch (xface->description, stretch);
+
+         if (!pango_scan_string (&p, tmp_buf))
+           goto error;
+
+         /* Remove excess whitespace and check for complete fields */
+
+         xlfds = g_strsplit (tmp_buf->str, ",", -1);
+         for (i=0; xlfds[i]; i++)
+           {
+             char *trimmed = pango_trim_string (xlfds[i]);
+             g_free (xlfds[i]);
+             xlfds[i] = trimmed;
+
+             if (!pango_x_is_xlfd_font_name (xlfds[i]))
+               {
+                 g_warning ("XLFD '%s' must be complete (14 fields)", xlfds[i]);
+                 g_strfreev (xlfds);
+                 goto error;
+               }
+           }
+
+         xface->xlfd = g_strjoinv (",", xlfds);
+         g_strfreev (xlfds);
+
+         /* Insert the font entry into our structures */
+
+         font_family = pango_x_get_font_family (xfontmap,
+                                                pango_font_description_get_family (xface->description));
+         font_family->font_entries = g_slist_prepend (font_family->font_entries, xface);
+         xfontmap->n_fonts++;
+
+         /* Save space by consolidating duplicated string */
+         pango_font_description_set_family_static (xface->description, font_family->family_name);
+         xface->cached_fonts = NULL;
+         xface->coverage = NULL;
+       }
+
+      if (ferror (infile))
+       g_warning ("Error reading '%s': %s", filename, g_strerror(errno));
+
+      goto out;
+
+    error:
+      if (xface)
+       {
+         g_free (xface->xlfd);
+         if (xface->description)
+           pango_font_description_free (xface->description);
+         g_free (xface);
+       }
+
+      g_warning ("Error parsing line %d of alias file '%s'", lineno, filename);
+
+    out:
+      g_string_free (tmp_buf, TRUE);
+      g_string_free (line_buf, TRUE);
+
+      fclose (infile);
+    }
+
+}
+
+static void
+pango_x_font_map_read_aliases (PangoXFontMap *xfontmap)
+{
+  char **files;
+  char *files_str = pango_config_key_get ("PangoX/AliasFiles");
+  int n;
+
+  if (!files_str)
+    files_str = g_strdup ("~/.pangox_aliases:" SYSCONFDIR "/pango/pangox.aliases");
+
+  files = pango_split_file_list (files_str);
+
+  n = 0;
+  while (files[n])
+    n++;
+
+  while (n-- > 0)
+    pango_x_font_map_read_alias_file (xfontmap, files[n]);
+
+  g_strfreev (files);
+  g_free (files_str);
+}
+
+/*
+ * Returns %TRUE if the fontname is a valid XLFD.
+ * (It just checks if the number of dashes is 14, and that each
+ * field < XLFD_MAX_FIELD_LEN  characters long - that's not in the XLFD but it
+ * makes it easier for me).
+ */
+static gboolean
+pango_x_is_xlfd_font_name (const char *fontname)
+{
+  int i = 0;
+  int field_len = 0;
+
+  while (*fontname)
+    {
+      if (*fontname++ == '-')
+       {
+         if (field_len > XLFD_MAX_FIELD_LEN) return FALSE;
+         field_len = 0;
+         i++;
+       }
+      else
+       field_len++;
+    }
+
+  return (i == 14) ? TRUE : FALSE;
+}
+
+static int
+pango_x_get_size (PangoXFontMap *xfontmap, const char *fontname)
+{
+  char size_buffer[XLFD_MAX_FIELD_LEN];
+  int size;
+
+  if (!pango_x_get_xlfd_field (fontname, XLFD_PIXELS, size_buffer))
+    return -1;
+
+  size = atoi (size_buffer);
+  if (size != 0)
+    {
+      return (int)(0.5 + size * xfontmap->resolution);
+    }
+  else
+    {
+      /* We use the trick that scaled bitmaps have a non-zero RESOLUTION_X, while
+       * actual scaleable fonts have a zero RESOLUTION_X */
+      if (!pango_x_get_xlfd_field (fontname, XLFD_RESOLUTION_X, size_buffer))
+       return -1;
+
+      if (atoi (size_buffer) == 0)
+       return 0;
+      else
+       return -1;
+    }
+}
+
+static char *
+pango_x_get_identifier (const char *fontname)
+{
+  const char *p = fontname;
+  const char *start;
+  int n_dashes = 0;
+
+  while (n_dashes < 2)
+    {
+      if (*p == '-')
+       n_dashes++;
+      p++;
+    }
+
+  start = p;
+
+  while (n_dashes < 6)
+    {
+      if (*p == '-')
+       n_dashes++;
+      p++;
+    }
+
+  return g_strndup (start, (p - 1 - start));
+}
+
+/*
+ * This fills the buffer with the specified field from the X Logical Font
+ * Description name, and returns it. If fontname is %NULL or the field is
+ * longer than XFLD_MAX_FIELD_LEN it returns %NULL.
+ * Note: For the charset field, we also return the encoding, e.g. 'iso8859-1'.
+ */
+static char*
+pango_x_get_xlfd_field (const char *fontname,
+                       FontField   field_num,
+                       char       *buffer)
+{
+  const char *t1, *t2;
+  char *p;
+  int countdown, len, num_dashes;
+
+  if (!fontname)
+    return NULL;
+
+  /* we assume this is a valid fontname...that is, it has 14 fields */
+
+  countdown = field_num;
+  t1 = fontname;
+  while (*t1 && (countdown >= 0))
+    if (*t1++ == '-')
+      countdown--;
+
+  num_dashes = (field_num == XLFD_CHARSET) ? 2 : 1;
+  for (t2 = t1; *t2; t2++)
+    {
+      if (*t2 == '-' && --num_dashes == 0)
+       break;
+    }
+
+  if (t1 != t2)
+    {
+      /* Check we don't overflow the buffer */
+      len = (long) t2 - (long) t1;
+      if (len > XLFD_MAX_FIELD_LEN - 1)
+       return NULL;
+      strncpy (buffer, t1, len);
+      buffer[len] = 0;
+      /* Convert to lower case. */
+      for (p = buffer; *p; p++)
+       *p = g_ascii_tolower (*p);
+    }
+  else
+    strcpy(buffer, "(nil)");
+
+  return buffer;
+}
+
+/* This inserts the given fontname into the FontInfo table.
+   If a FontInfo already exists with the same family and foundry, then the
+   fontname is added to the FontInfos list of fontnames, else a new FontInfo
+   is created and inserted in alphabetical order in the table. */
+static void
+pango_x_insert_font (PangoXFontMap *xfontmap,
+                    const char    *fontname)
+{
+  PangoFontDescription *description;
+  char *family_name;
+  PangoStyle style;
+  PangoVariant variant;
+  PangoWeight weight;
+  PangoStretch stretch;
+  char family_buffer[XLFD_MAX_FIELD_LEN];
+  char weight_buffer[XLFD_MAX_FIELD_LEN];
+  char slant_buffer[XLFD_MAX_FIELD_LEN];
+  char set_width_buffer[XLFD_MAX_FIELD_LEN];
+  GSList *tmp_list;
+  PangoXFamily *font_family;
+  PangoXFace *xface;
+  PangoXSizeInfo *size_info;
+  char *identifier;
+  unsigned int i;
+
+  /* First insert the XLFD into the list of XLFDs for the "identifier" - which
+   * is the 2-4th fields of the XLFD
+   */
+  identifier = pango_x_get_identifier (fontname);
+  size_info = g_hash_table_lookup (xfontmap->size_infos, identifier);
+  if (!size_info)
+    {
+      size_info = g_slice_new (PangoXSizeInfo);
+      size_info->identifier = identifier;
+      size_info->xlfds = NULL;
+
+      g_hash_table_insert (xfontmap->size_infos, identifier, size_info);
+    }
+  else
+    g_free (identifier);
+
+  size_info->xlfds = g_slist_prepend (size_info->xlfds, g_strdup (fontname));
+
+  /* Convert the XLFD into a PangoFontDescription */
+
+  family_name = pango_x_get_xlfd_field (fontname, XLFD_FAMILY, family_buffer);
+  if (!family_name)
+    return;
+
+  style = PANGO_STYLE_NORMAL;
+  if (pango_x_get_xlfd_field (fontname, XLFD_SLANT, slant_buffer))
+    {
+      for (i=0; i<G_N_ELEMENTS(styles_map); i++)
+       {
+         if (!strcmp (styles_map[i].text, slant_buffer))
+           {
+             style = styles_map[i].value;
+             break;
+           }
+       }
+    }
+  else
+    strcpy (slant_buffer, "*");
+
+  variant = PANGO_VARIANT_NORMAL;
+
+  weight = PANGO_WEIGHT_NORMAL;
+  if (pango_x_get_xlfd_field (fontname, XLFD_WEIGHT, weight_buffer))
+    {
+      for (i=0; i<G_N_ELEMENTS(weights_map); i++)
+       {
+         if (!strcmp (weights_map[i].text, weight_buffer))
+           {
+             weight = weights_map[i].value;
+             break;
+           }
+       }
+    }
+  else
+    strcpy (weight_buffer, "*");
+
+  stretch = PANGO_STRETCH_NORMAL;
+  if (pango_x_get_xlfd_field (fontname, XLFD_SET_WIDTH, set_width_buffer))
+    {
+      for (i=0; i<G_N_ELEMENTS(stretches_map); i++)
+       {
+         if (!strcmp (stretches_map[i].text, set_width_buffer))
+           {
+             stretch = stretches_map[i].value;
+             break;
+           }
+       }
+    }
+  else
+    strcpy (set_width_buffer, "*");
+
+  font_family = pango_x_get_font_family (xfontmap, family_name);
+
+  tmp_list = font_family->font_entries;
+  while (tmp_list)
+    {
+      xface = tmp_list->data;
+
+      if (pango_font_description_get_style (xface->description) == style &&
+         pango_font_description_get_weight (xface->description) == weight &&
+         pango_font_description_get_stretch (xface->description) == stretch &&
+         pango_font_description_get_variant (xface->description) == variant)
+       return;
+
+      tmp_list = tmp_list->next;
+    }
+
+  description = pango_font_description_new ();
+  pango_font_description_set_family_static (description, font_family->family_name);
+  pango_font_description_set_style (description, style);
+  pango_font_description_set_weight (description, weight);
+  pango_font_description_set_stretch (description, stretch);
+  pango_font_description_set_variant (description, variant);
+
+  xface = g_object_new (PANGO_X_TYPE_FACE, NULL);
+  xface->description = description;
+  xface->cached_fonts = NULL;
+  xface->coverage = NULL;
+
+  xface->xlfd = g_strconcat ("-*-",
+                                 family_buffer,
+                                 "-",
+                                 weight_buffer,
+                                 "-",
+                                 slant_buffer,
+                                 "-",
+                                 set_width_buffer,
+                                 "--*-*-*-*-*-*-*-*",
+                                 NULL);
+
+  font_family->font_entries = g_slist_append (font_family->font_entries, xface);
+  xfontmap->n_fonts++;
+}
+
+/* Compare the tail of a to b */
+static gboolean
+match_end (const char *a, const char *b)
+{
+  size_t len_a = strlen (a);
+  size_t len_b = strlen (b);
+
+  if (len_b > len_a)
+    return FALSE;
+  else
+    return (strcmp (a + len_a - len_b, b) == 0);
+}
+
+/* Given a XLFD, charset and size, find the best matching installed X font.
+ * The XLFD must be a full XLFD (14 fields)
+ */
+char *
+pango_x_make_matching_xlfd (PangoFontMap *fontmap, char *xlfd, const char *charset, int size)
+{
+  PangoXFontMap *xfontmap;
+
+  GSList *tmp_list;
+  PangoXSizeInfo *size_info;
+  char *identifier;
+  char *closest_match = NULL;
+  gint match_distance = 0;
+  gboolean match_scaleable = FALSE;
+  char *result = NULL;
+
+  char *dash_charset;
+
+  xfontmap = PANGO_X_FONT_MAP (fontmap);
+
+  dash_charset = g_strconcat ("-", charset, NULL);
+
+  if (!match_end (xlfd, "-*-*") && !match_end (xlfd, dash_charset))
+    {
+      g_free (dash_charset);
+      return NULL;
+    }
+
+  identifier = pango_x_get_identifier (xlfd);
+  size_info = g_hash_table_lookup (xfontmap->size_infos, identifier);
+  g_free (identifier);
+
+  if (!size_info)
+    {
+      g_free (dash_charset);
+      return NULL;
+    }
+
+  tmp_list = size_info->xlfds;
+  while (tmp_list)
+    {
+      char *tmp_xlfd = tmp_list->data;
+
+      if (match_end (tmp_xlfd, dash_charset))
+       {
+         int font_size = pango_x_get_size (xfontmap, tmp_xlfd);
+
+         if (size != -1)
+           {
+             int new_distance = (font_size == 0) ? 0 : abs (font_size - size);
+
+             if (!closest_match ||
+                 new_distance < match_distance ||
+                 (new_distance < PANGO_SCALE && match_scaleable && font_size != 0))
+               {
+                 closest_match = tmp_xlfd;
+                 match_scaleable = (font_size == 0);
+                 match_distance = new_distance;
+               }
+           }
+       }
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (closest_match)
+    {
+      if (match_scaleable)
+       {
+         char *prefix_end, *p;
+         int n_dashes = 0;
+         int target_size;
+         char *prefix;
+
+         /* OK, we have a match; let's modify it to fit this size and charset */
+
+         p = closest_match;
+         while (n_dashes < 6)
+           {
+             if (*p == '-')
+               n_dashes++;
+             p++;
+           }
+
+         prefix_end = p - 1;
+
+         while (n_dashes < 9)
+           {
+             if (*p == '-')
+               n_dashes++;
+             p++;
+           }
+
+         target_size = (int)((double)size / xfontmap->resolution + 0.5);
+         prefix = g_strndup (closest_match, prefix_end - closest_match);
+         result  = g_strdup_printf ("%s--%d-*-*-*-*-*-%s", prefix, target_size, charset);
+         g_free (prefix);
+       }
+      else
+       {
+         result = g_strdup (closest_match);
+       }
+    }
+
+  g_free (dash_charset);
+
+  return result;
+}
+
+/**
+ * pango_x_font_map_get_font_cache:
+ * @font_map: a #PangoXFontMap.
+ *
+ * Obtains the font cache associated with the given font map.
+ *
+ * Return value: the #PangoXFontCache of @font_map.
+ **/
+PangoXFontCache *
+pango_x_font_map_get_font_cache (PangoFontMap *font_map)
+{
+  g_return_val_if_fail (font_map != NULL, NULL);
+  g_return_val_if_fail (PANGO_X_IS_FONT_MAP (font_map), NULL);
+
+  return PANGO_X_FONT_MAP (font_map)->font_cache;
+}
+
+Display *
+pango_x_fontmap_get_display (PangoFontMap    *fontmap)
+{
+  g_return_val_if_fail (fontmap != NULL, NULL);
+  g_return_val_if_fail (PANGO_X_IS_FONT_MAP (fontmap), NULL);
+
+  return PANGO_X_FONT_MAP (fontmap)->display;
+}
+
+void
+pango_x_fontmap_cache_add (PangoFontMap    *fontmap,
+                          PangoXFont      *xfont)
+{
+  PangoXFontMap *xfontmap = PANGO_X_FONT_MAP (fontmap);
+
+  if (xfontmap->freed_fonts->length == MAX_FREED_FONTS)
+    {
+      PangoXFont *old_font = g_queue_pop_tail (xfontmap->freed_fonts);
+      g_object_unref (old_font);
+    }
+
+  g_object_ref (xfont);
+  g_queue_push_head (xfontmap->freed_fonts, xfont);
+  xfont->in_cache = TRUE;
+}
+
+void
+pango_x_fontmap_cache_remove (PangoFontMap    *fontmap,
+                             PangoXFont      *xfont)
+{
+  PangoXFontMap *xfontmap = PANGO_X_FONT_MAP (fontmap);
+
+  GList *link = g_list_find (xfontmap->freed_fonts->head, xfont);
+  if (link == xfontmap->freed_fonts->tail)
+    {
+      xfontmap->freed_fonts->tail = xfontmap->freed_fonts->tail->prev;
+      if (xfontmap->freed_fonts->tail)
+       xfontmap->freed_fonts->tail->next = NULL;
+    }
+
+  xfontmap->freed_fonts->head = g_list_delete_link (xfontmap->freed_fonts->head, link);
+  xfontmap->freed_fonts->length--;
+  xfont->in_cache = FALSE;
+
+  g_object_unref (xfont);
+}
+
+static void
+pango_x_fontmap_cache_clear (PangoXFontMap   *xfontmap)
+{
+  g_list_foreach (xfontmap->freed_fonts->head, (GFunc)g_object_unref, NULL);
+  g_list_free (xfontmap->freed_fonts->head);
+  xfontmap->freed_fonts->head = NULL;
+  xfontmap->freed_fonts->tail = NULL;
+  xfontmap->freed_fonts->length = 0;
+}
+
+
+Atom
+pango_x_fontmap_atom_from_name (PangoFontMap *fontmap,
+                               const char   *atomname)
+{
+  PangoXFontMap *xfm = PANGO_X_FONT_MAP(fontmap);
+  gpointer found;
+  Atom atom;
+
+  found = g_hash_table_lookup (xfm->to_atom_cache, atomname);
+
+  if (found)
+    return (Atom)(GPOINTER_TO_UINT(found));
+
+  atom = XInternAtom (xfm->display, atomname, FALSE);
+  g_hash_table_insert (xfm->to_atom_cache, g_strdup (atomname),
+                      (gpointer)atom);
+
+  return atom;
+}
+
+
+G_CONST_RETURN char *
+pango_x_fontmap_name_from_atom (PangoFontMap *fontmap,
+                               Atom          atom)
+{
+  PangoXFontMap *xfm = PANGO_X_FONT_MAP(fontmap);
+  gpointer found;
+  char *name, *name2;
+
+  found = g_hash_table_lookup (xfm->from_atom_cache, GUINT_TO_POINTER(atom));
+
+  if (found)
+    return (const char *)found;
+
+  name = XGetAtomName (xfm->display, atom);
+  name2 = g_strdup (name);
+  XFree (name);
+
+  g_hash_table_insert (xfm->from_atom_cache, (gpointer)atom, name2);
+
+  return name2;
+}
+
+/*
+ * PangoXFace
+ */
+
+static PangoFontDescription *
+pango_x_face_describe (PangoFontFace *face)
+{
+  PangoXFace *xface = PANGO_X_FACE (face);
+
+  return pango_font_description_copy (xface->description);
+}
+
+static const char *
+pango_x_face_get_face_name (PangoFontFace *face)
+{
+  PangoXFace *xface = PANGO_X_FACE (face);
+
+  if (!xface->face_name)
+    {
+      PangoFontDescription *desc = pango_font_face_describe (face);
+
+      pango_font_description_unset_fields (desc,
+                                          PANGO_FONT_MASK_FAMILY | PANGO_FONT_MASK_SIZE);
+
+      xface->face_name = pango_font_description_to_string (desc);
+      pango_font_description_free (desc);
+    }
+
+  return xface->face_name;
+}
+
+static void
+pango_x_face_class_init (PangoFontFaceClass *class)
+{
+  class->describe = pango_x_face_describe;
+  class->get_face_name = pango_x_face_get_face_name;
+}
+
+GType
+pango_x_face_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoFontFaceClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_x_face_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoXFace),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) NULL,
+       NULL            /* value_table */
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT_FACE,
+                                           I_("PangoXFace"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+/* Cut and paste here to avoid an inter-module dependency */
+static PangoCoverageLevel
+engine_shape_covers (PangoEngineShape *engine,
+                    PangoFont        *font,
+                    PangoLanguage    *language,
+                    gunichar          wc)
+{
+  g_return_val_if_fail (PANGO_IS_ENGINE_SHAPE (engine), PANGO_COVERAGE_NONE);
+  g_return_val_if_fail (PANGO_IS_FONT (font), PANGO_COVERAGE_NONE);
+
+  return PANGO_ENGINE_SHAPE_GET_CLASS (engine)->covers (engine,
+                                                       font,
+                                                       language,
+                                                       wc);
+}
+
+PangoCoverage *
+pango_x_face_get_coverage (PangoXFace      *xface,
+                          PangoFont       *font,
+                          PangoLanguage   *language)
+{
+  PangoXFont *xfont;
+  PangoXFontMap *xfontmap = NULL; /* Quiet gcc */
+  PangoCoverage *result = NULL;
+  Atom atom = None;
+
+  if (xface)
+    {
+      if (xface->coverage)
+       {
+         pango_coverage_ref (xface->coverage);
+         return xface->coverage;
+       }
+
+      xfont = (PangoXFont *)font;
+
+      xfontmap = (PangoXFontMap *)pango_x_font_map_for_display (xfont->display);
+      if (xface->xlfd)
+       {
+         const char *lang_str = language ? pango_language_to_string (language) : "*";
+
+         char *str = g_strconcat (lang_str, "|", xface->xlfd, NULL);
+         result = pango_x_get_cached_coverage (xfontmap, str, &atom);
+         g_free (str);
+       }
+    }
+
+  if (!result)
+    {
+      PangoMap *shape_map;
+      PangoEngineShape *engine;
+      gunichar wc;
+
+      result = pango_coverage_new ();
+
+      shape_map = pango_x_get_shaper_map (language);
+      engine = (PangoEngineShape *)pango_map_get_engine (shape_map, PANGO_SCRIPT_COMMON);
+
+      for (wc = 0; wc < 65536; wc++)
+       {
+         PangoCoverageLevel level;
+
+         level = engine_shape_covers (engine, font, language, wc);
+         if (level != PANGO_COVERAGE_NONE)
+           pango_coverage_set (result, wc, level);
+       }
+
+      if (atom)
+       pango_x_store_cached_coverage (xfontmap, atom, result);
+    }
+
+  if (xface)
+    {
+      xface->coverage = result;
+      pango_coverage_ref (result);
+    }
+
+  return result;
+}
+
+void
+pango_x_face_remove (PangoXFace  *xface,
+                    PangoFont   *font)
+{
+  xface->cached_fonts = g_slist_remove (xface->cached_fonts, font);
+}
+
+/*
+ * PangoXFontFamily
+ */
+
+static void
+pango_x_family_list_faces (PangoFontFamily  *family,
+                          PangoFontFace  ***faces,
+                          int              *n_faces)
+{
+  PangoXFamily *xfamily = PANGO_X_FAMILY (family);
+
+  *n_faces = g_slist_length (xfamily->font_entries);
+  if (faces)
+    {
+      GSList *tmp_list;
+      int i = 0;
+
+      *faces = g_new (PangoFontFace *, *n_faces);
+
+      tmp_list = xfamily->font_entries;
+      while (tmp_list)
+       {
+         (*faces)[i++] = tmp_list->data;
+         tmp_list = tmp_list->next;
+       }
+    }
+}
+
+static G_CONST_RETURN char *
+pango_x_family_get_name (PangoFontFamily  *family)
+{
+  PangoXFamily *xfamily = PANGO_X_FAMILY (family);
+
+  return xfamily->family_name;
+}
+
+static void
+pango_x_family_class_init (PangoFontFamilyClass *class)
+{
+  class->list_faces = pango_x_family_list_faces;
+  class->get_name = pango_x_family_get_name;
+}
+
+GType
+pango_x_family_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoFontFamilyClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_x_family_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoXFamily),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) NULL,
+       NULL            /* value_table */
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT_FAMILY,
+                                           I_("PangoXFamily"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
diff --git a/pango/pangox-private.h b/pango/pangox-private.h
new file mode 100755 (executable)
index 0000000..b3a9c8f
--- /dev/null
@@ -0,0 +1,122 @@
+/* Pango
+ * pangox-private.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOX_PRIVATE_H__
+#define __PANGOX_PRIVATE_H__
+
+#include <pango/pangox.h>
+#include <pango/pango-modules.h>
+
+typedef struct _PangoXFace        PangoXFace;
+typedef struct _PangoXFont        PangoXFont;
+typedef struct _PangoXSubfontInfo PangoXSubfontInfo;
+
+struct _PangoXFont
+{
+  PangoFont font;
+  Display *display;
+
+  char **fonts;
+  int n_fonts;
+  int size;
+
+  /* hash table mapping from charset-name to array of PangoXSubfont ids,
+   * of length n_fonts
+   */
+  GHashTable *subfonts_by_charset;
+
+  PangoXSubfontInfo **subfonts;
+
+  int n_subfonts;
+  int max_subfonts;
+
+  GSList *metrics_by_lang;
+
+  PangoFontMap *fontmap;
+  /* If TRUE, font is in cache of recently unused fonts and not otherwise
+   * in use.
+   */
+  gboolean in_cache;
+
+  PangoXFace *xface;   /* Used to remove cached fonts */
+};
+
+
+#define PANGO_TYPE_X_FONT_MAP              (pango_x_font_map_get_type ())
+#define PANGO_X_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_X_FONT_MAP, PangoXFontMap))
+#define PANGO_X_FONT_MAP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_X_FONT_MAP, PangoXFontMapClass))
+#define PANGO_X_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_X_FONT_MAP))
+#define PANGO_X_IS_FONT_MAP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_X_FONT_MAP))
+#define PANGO_X_FONT_MAP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_X_FONT_MAP, PangoXFontMapClass))
+
+typedef struct _PangoXFontMap      PangoXFontMap;
+typedef struct _PangoXFontMapClass PangoXFontMapClass;
+
+struct _PangoXFontMap
+{
+  PangoFontMap parent_instance;
+
+  Display *display;
+
+  PangoXFontCache *font_cache;
+  GQueue *freed_fonts;
+
+  GHashTable *families;
+  GHashTable *size_infos;
+
+  GHashTable *to_atom_cache;
+  GHashTable *from_atom_cache;
+
+  int n_fonts;
+
+  double resolution;           /* (points / pixel) * PANGO_SCALE */
+
+  Window coverage_win;
+};
+
+GType    pango_x_font_map_get_type   (void) G_GNUC_CONST;
+
+PangoXFont *   pango_x_font_new                (PangoFontMap    *fontmap,
+                                               const char      *spec,
+                                               int              size);
+PangoMap *     pango_x_get_shaper_map          (PangoLanguage   *language);
+char *         pango_x_make_matching_xlfd      (PangoFontMap    *fontmap,
+                                               char            *xlfd,
+                                               const char      *charset,
+                                               int              size);
+PangoCoverage *pango_x_face_get_coverage       (PangoXFace      *xface,
+                                               PangoFont       *font,
+                                               PangoLanguage   *language);
+void           pango_x_face_remove             (PangoXFace      *xface,
+                                               PangoFont       *font);
+
+Display *      pango_x_fontmap_get_display     (PangoFontMap    *fontmap);
+void           pango_x_fontmap_cache_add       (PangoFontMap    *fontmap,
+                                               PangoXFont      *xfont);
+void           pango_x_fontmap_cache_remove    (PangoFontMap    *fontmap,
+                                               PangoXFont      *xfont);
+
+Atom           pango_x_fontmap_atom_from_name (PangoFontMap *fontmap,
+                                              const char   *atomname);
+const char    *pango_x_fontmap_name_from_atom  (PangoFontMap *fontmap,
+                                               Atom          atom);
+
+#endif /* __PANGOX_PRIVATE_H__ */
diff --git a/pango/pangox.aliases b/pango/pangox.aliases
new file mode 100755 (executable)
index 0000000..9b41aa7
--- /dev/null
@@ -0,0 +1,220 @@
+# File defining aliases of PangoFontDescription to X font set
+#
+# family style variant weight stretch   XLFD
+
+sans normal normal normal normal \
+  "-*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -*-gulim-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+sans italic normal normal normal \
+  "-*-helvetica-medium-o-normal--*-*-*-*-*-*-*-*,\
+   -*-gulim-medium-o-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+sans normal normal bold normal \
+  "-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*,\
+   -*-gulim-bold-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+sans italic normal bold normal \
+  "-*-helvetica-bold-o-normal--*-*-*-*-*-*-*-*,\
+   -*-gulim-bold-o-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+
+serif normal normal normal normal \
+  "-*-times-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -*-batang-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+serif italic normal normal normal \
+  "-*-times-medium-i-normal--*-*-*-*-*-*-*-*,\
+   -*-batang-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+serif normal normal bold normal \
+  "-*-times-bold-r-normal--*-*-*-*-*-*-*-*,\
+   -*-batang-bold-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+serif italic normal bold normal \
+  "-*-times-bold-i-normal--*-*-*-*-*-*-*-*,\
+   -*-batang-bold-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+monospace normal normal normal normal \
+  "-*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -*-dotum-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+monospace italic normal normal normal \
+  "-*-fixed-medium-i-normal--*-*-*-*-*-*-*-*,\
+   -*-dotum-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+monospace normal normal bold normal \
+  "-*-fixed-bold-r-normal--*-*-*-*-*-*-*-*,\
+   -*-dotum-bold-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
+
+monospace italic normal bold normal \
+  "-*-fixed-bold-i-normal--*-*-*-*-*-*-*-*,\
+   -*-dotum-bold-r-normal--*-*-*-*-*-*-ksc5601.1987-0,\
+   -*-clearlyu-medium-r-normal--*-*-*-*-*-*-iso10646-1,\
+   -*-fixed-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -kaist-iyagi-bold-r-normal--*-*-*-*-*-*-johab-1,\
+   -*-song ti-medium-r-normal--*-*-*-*-*-*-*-*,\
+   -freetype-unitamil-medium-r-normal--*-*-*-*-*-*-iso10646-tam,\
+   -*-devanagari-medium-r-normal--*-*-*-*-*-*-iso10646-dev,\
+   -*-gujarati-medium-r-normal--*-*-*-*-*-*-iso10646-guj,\
+   -*-gurmukhi-medium-r-normal--*-*-*-*-*-*-iso10646-gur,\
+   -*-bengali-medium-r-normal--*-*-*-*-*-*-iso10646-bng,\
+   -*-kannada-medium-r-normal--*-*-*-*-*-*-iso10646-kan,\
+   -*-burmese-medium-r-normal--*-*-*-*-*-*-iso10646-brm,\
+   -*-buginese-medium-r-normal--*-*-*-*-*-*-iso10646-bgn,\
+   -*-oriya-medium-r-normal--*-*-*-*-*-*-iso10646-ori,\
+   -daewoo-mincho-medium-r-normal--*-*-*-*-*-*-ksc5601.1987-0"
diff --git a/pango/pangox.c b/pango/pangox.c
new file mode 100755 (executable)
index 0000000..c49024f
--- /dev/null
@@ -0,0 +1,1823 @@
+/* pangox.c: Routines for handling X fonts
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 SuSE Linux Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <X11/Xlib.h>
+#include "pango-impl-utils.h"
+
+#undef PANGO_DISABLE_DEPRECATED
+
+#include "pangox.h"
+#include "pangox-private.h"
+
+#define PANGO_TYPE_X_FONT              (pango_x_font_get_type ())
+#define PANGO_X_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_X_FONT, PangoXFont))
+#define PANGO_X_FONT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_X_FONT, PangoXFontClass))
+#define PANGO_X_IS_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_X_FONT))
+#define PANGO_X_IS_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_X_FONT))
+#define PANGO_X_FONT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_X_FONT, PangoXFontClass))
+
+typedef struct _PangoXFontClass   PangoXFontClass;
+typedef struct _PangoXMetricsInfo PangoXMetricsInfo;
+typedef struct _PangoXContextInfo PangoXContextInfo;
+
+struct _PangoXSubfontInfo
+{
+  char *xlfd;
+  XFontStruct *font_struct;
+  gboolean     is_1byte;
+  int          range_byte1;
+  int          range_byte2;
+};
+
+struct _PangoXMetricsInfo
+{
+  const char *sample_str;
+  PangoFontMetrics *metrics;
+};
+
+struct _PangoXContextInfo
+{
+  PangoGetGCFunc  get_gc_func;
+  PangoFreeGCFunc free_gc_func;
+};
+
+struct _PangoXFontClass
+{
+  PangoFontClass parent_class;
+};
+
+static PangoFontClass *parent_class;   /* Parent class structure for PangoXFont */
+
+static void pango_x_font_class_init (PangoXFontClass *class);
+static void pango_x_font_init       (PangoXFont      *xfont);
+static void pango_x_font_dispose    (GObject         *object);
+static void pango_x_font_finalize   (GObject         *object);
+
+static PangoFontDescription *pango_x_font_describe          (PangoFont        *font);
+static PangoCoverage *       pango_x_font_get_coverage      (PangoFont        *font,
+                                                            PangoLanguage    *language);
+static PangoEngineShape *    pango_x_font_find_shaper       (PangoFont        *font,
+                                                            PangoLanguage    *language,
+                                                            guint32           ch);
+static void                  pango_x_font_get_glyph_extents (PangoFont        *font,
+                                                            PangoGlyph        glyph,
+                                                            PangoRectangle   *ink_rect,
+                                                            PangoRectangle   *logical_rect);
+static PangoFontMetrics *    pango_x_font_get_metrics       (PangoFont        *font,
+                                                            PangoLanguage    *language);
+static PangoFontMap *        pango_x_font_get_font_map      (PangoFont        *font);
+
+static PangoXSubfontInfo * pango_x_find_subfont    (PangoFont          *font,
+                                                   PangoXSubfont       subfont_index);
+static XCharStruct *       pango_x_get_per_char    (PangoFont          *font,
+                                                   PangoXSubfontInfo  *subfont,
+                                                   guint16             char_index);
+static gboolean            pango_x_find_glyph      (PangoFont          *font,
+                                                   PangoGlyph          glyph,
+                                                   PangoXSubfontInfo **subfont_return,
+                                                   XCharStruct       **charstruct_return);
+static XFontStruct *       pango_x_get_font_struct (PangoFont          *font,
+                                                   PangoXSubfontInfo  *info);
+
+static void     pango_x_get_item_properties (PangoItem      *item,
+                                            PangoUnderline *uline,
+                                            PangoAttrColor *fg_color,
+                                            gboolean       *fg_set,
+                                            PangoAttrColor *bg_color,
+                                            gboolean       *bg_set);
+
+static inline PangoXSubfontInfo *
+pango_x_find_subfont (PangoFont  *font,
+                     PangoXSubfont subfont_index)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+
+  if (subfont_index < 1 || subfont_index > xfont->n_subfonts)
+    return NULL;
+
+  return xfont->subfonts[subfont_index-1];
+}
+
+static void
+pango_x_make_font_struct (PangoFont *font, PangoXSubfontInfo *info)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+  PangoXFontCache *cache;
+
+  cache = pango_x_font_map_get_font_cache (xfont->fontmap);
+
+  info->font_struct = pango_x_font_cache_load (cache, info->xlfd);
+  if (!info->font_struct)
+    {
+      g_warning ("Cannot load font for XLFD '%s\n", info->xlfd);
+
+      /* Prevent a segfault, but probably not much more */
+      info->font_struct = pango_x_font_cache_load (cache, "fixed");
+    }
+
+  info->is_1byte = (info->font_struct->min_byte1 == 0 && info->font_struct->max_byte1 == 0);
+  info->range_byte1 = info->font_struct->max_byte1 - info->font_struct->min_byte1 + 1;
+  info->range_byte2 = info->font_struct->max_char_or_byte2 - info->font_struct->min_char_or_byte2 + 1;
+}
+
+static inline XFontStruct *
+pango_x_get_font_struct (PangoFont *font, PangoXSubfontInfo *info)
+{
+  if (!info->font_struct)
+    pango_x_make_font_struct (font, info);
+
+  return info->font_struct;
+}
+
+static void
+free_context_info (PangoXContextInfo *info)
+{
+  g_slice_free (PangoXContextInfo, info);
+}
+
+static PangoXContextInfo *
+get_context_info (PangoContext *context)
+{
+  PangoXContextInfo *info;
+  static GQuark quark = 0;
+
+  if (G_UNLIKELY (!quark))
+    quark = g_quark_from_static_string ("pango-x-info");
+
+  info =  g_object_get_qdata (G_OBJECT (context), quark);
+
+  if (G_UNLIKELY (!info))
+    {
+      info = g_slice_new (PangoXContextInfo);
+      info->get_gc_func = NULL;
+      info->free_gc_func = NULL;
+      g_object_set_qdata_full (G_OBJECT (context),
+                              quark,
+                              info, (GDestroyNotify)free_context_info);
+    }
+
+  return info;
+}
+
+/**
+ * pango_x_get_context:
+ * @display: an X display (As returned by XOpenDisplay().)
+ *
+ * Retrieves a #PangoContext appropriate for rendering with X fonts on the
+ * given display.
+ *
+ * Return value: the new #PangoContext.
+ *
+ * Deprecated: 1.22: Use pango_x_font_map_for_display() followed by
+ * pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_x_get_context (Display *display)
+{
+  return pango_font_map_create_context (pango_x_font_map_for_display (display));
+}
+
+/**
+ * pango_x_context_set_funcs:
+ * @context: a #PangoContext.
+ * @get_gc_func: function called to create a new GC for a given color.
+ * @free_gc_func: function called to free a GC created with @get_gc_func.
+ *
+ * Sets the functions that will be used to get GC's in various colors when
+ * rendering layouts with this context.
+ **/
+void
+pango_x_context_set_funcs  (PangoContext     *context,
+                           PangoGetGCFunc    get_gc_func,
+                           PangoFreeGCFunc   free_gc_func)
+{
+  PangoXContextInfo *info;
+
+  g_return_if_fail (context != NULL);
+
+  info = get_context_info (context);
+
+  info->get_gc_func = get_gc_func;
+  info->free_gc_func = free_gc_func;
+}
+
+static GType
+pango_x_font_get_type (void)
+{
+  static GType object_type = 0;
+
+  if (G_UNLIKELY (!object_type))
+    {
+      const GTypeInfo object_info =
+      {
+       sizeof (PangoXFontClass),
+       (GBaseInitFunc) NULL,
+       (GBaseFinalizeFunc) NULL,
+       (GClassInitFunc) pango_x_font_class_init,
+       NULL,           /* class_finalize */
+       NULL,           /* class_data */
+       sizeof (PangoXFont),
+       0,              /* n_preallocs */
+       (GInstanceInitFunc) pango_x_font_init,
+       NULL            /* value_table */
+      };
+
+      object_type = g_type_register_static (PANGO_TYPE_FONT,
+                                           I_("PangoXFont"),
+                                           &object_info, 0);
+    }
+
+  return object_type;
+}
+
+static void
+pango_x_font_init (PangoXFont *xfont)
+{
+  xfont->subfonts_by_charset = g_hash_table_new (g_str_hash, g_str_equal);
+
+  xfont->n_subfonts = 0;
+  xfont->max_subfonts = 1;
+
+  xfont->subfonts = g_new (PangoXSubfontInfo *, xfont->max_subfonts);
+
+  xfont->metrics_by_lang = NULL;
+
+  xfont->size = -1;
+  xfont->xface = NULL;
+}
+
+static void
+pango_x_font_class_init (PangoXFontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+
+  parent_class = g_type_class_peek_parent (class);
+
+  object_class->finalize = pango_x_font_finalize;
+  object_class->dispose = pango_x_font_dispose;
+
+  font_class->describe = pango_x_font_describe;
+  font_class->get_coverage = pango_x_font_get_coverage;
+  font_class->find_shaper = pango_x_font_find_shaper;
+  font_class->get_glyph_extents = pango_x_font_get_glyph_extents;
+  font_class->get_metrics = pango_x_font_get_metrics;
+  font_class->get_font_map = pango_x_font_get_font_map;
+}
+
+PangoXFont *
+pango_x_font_new (PangoFontMap *fontmap, const char *spec, int size)
+{
+  PangoXFont *result;
+
+  g_return_val_if_fail (fontmap != NULL, NULL);
+  g_return_val_if_fail (spec != NULL, NULL);
+
+  result = g_object_new (PANGO_TYPE_X_FONT, NULL);
+
+  g_assert (result->fontmap == NULL);
+  result->fontmap = fontmap;
+  g_object_add_weak_pointer (G_OBJECT (result->fontmap), (gpointer *) (gpointer) &result->fontmap);
+
+  result->display = pango_x_fontmap_get_display (fontmap);
+
+  result->fonts = g_strsplit(spec, ",", -1);
+  for (result->n_fonts = 0; result->fonts[result->n_fonts]; result->n_fonts++)
+    ; /* Nothing */
+
+  result->size = size;
+
+  return result;
+}
+
+/**
+ * pango_x_load_font:
+ * @display: the X display.
+ * @spec:    a comma-separated list of XLFD's.
+ *
+ * Loads up a logical font based on a "fontset" style text
+ * specification. This is not remotely useful (Pango API's generally
+ * work in terms of #PangoFontDescription) and the result may not
+ * work correctly in all circumstances. Use of this function should
+ * be avoided.
+ *
+ * Returns: a new #PangoFont.
+ */
+PangoFont *
+pango_x_load_font (Display    *display,
+                  const char *spec)
+{
+  PangoXFont *result;
+
+  g_return_val_if_fail (display != NULL, NULL);
+  g_return_val_if_fail (spec != NULL, NULL);
+
+  result = pango_x_font_new (pango_x_font_map_for_display (display), spec, -1);
+
+  return (PangoFont *)result;
+}
+
+
+#define FLUSH                                          \
+  G_STMT_START {                                       \
+    if (charcount)                                     \
+      {                                                        \
+       XDrawString16 (display, d, gc,                  \
+                      glyph_x0, glyph_y0,              \
+                      xcharbuffer, charcount);         \
+       charcount = 0;                                  \
+      }                                                        \
+  } G_STMT_END
+
+
+/**
+ * pango_x_render:
+ * @display: the X display.
+ * @d:       the drawable on which to draw string.
+ * @gc:      the graphics context.
+ * @font:    the font in which to draw the string.
+ * @glyphs:  the glyph string to draw.
+ * @x:       the x position of start of string (in pixels).
+ * @y:       the y position of baseline (in pixels).
+ *
+ * Renders a #PangoGlyphString onto an X drawable.
+ */
+void
+pango_x_render  (Display           *display,
+                Drawable           d,
+                GC                 gc,
+                PangoFont         *font,
+                PangoGlyphString  *glyphs,
+                int                x,
+                int                y)
+{
+  Font old_fid = None;
+  XFontStruct *fs;
+  int i;
+  int x_off = 0;
+
+  /*
+   * We collect the characters in this buffer as long as the font does not
+   * change.  At that time, or when the buffer runs full, or at the end,
+   * then we empty the buffer.
+   */
+  XChar2b xcharbuffer[1000];
+  int glyph_x0 = 0, expected_x = 0; /* x/y initializations are to quiet GCC */
+  int glyph_y0 = 0;
+  int charcount = 0;
+
+  g_return_if_fail (display != NULL);
+  g_return_if_fail (glyphs != NULL);
+
+  for (i=0; i<glyphs->num_glyphs; i++)
+    {
+      PangoGlyph glyph = glyphs->glyphs[i].glyph;
+      int glyph_x = x + PANGO_PIXELS (x_off + glyphs->glyphs[i].geometry.x_offset);
+      int glyph_y = y + PANGO_PIXELS (glyphs->glyphs[i].geometry.y_offset);
+
+      /* Clip glyphs into the X coordinate range; we really
+       * want to clip glyphs with an ink rect outside the
+       * [0,32767] x [0,32767] rectangle but looking up
+       * the ink rect here would be a noticeable speed hit.
+       * This is close enough.
+       */
+      if (!(glyph != PANGO_GLYPH_EMPTY &&
+           glyph_x >= -16384 && glyph_x <= 32767 &&
+           glyph_y >= -16384 && glyph_y <= 32767))
+       goto next_glyph;
+
+      if (G_LIKELY ((glyph & PANGO_GLYPH_UNKNOWN_FLAG) == 0))
+       {
+         guint16 index = PANGO_X_GLYPH_INDEX (glyph);
+         guint16 subfont_index = PANGO_X_GLYPH_SUBFONT (glyph);
+         PangoXSubfontInfo *subfont;
+
+         subfont = pango_x_find_subfont (font, subfont_index);
+         if (subfont)
+           {
+             fs = pango_x_get_font_struct (font, subfont);
+             if (!fs)
+               continue;
+
+             if (fs->fid != old_fid)
+               {
+                 FLUSH;
+                 XSetFont (display, gc, fs->fid);
+                 old_fid = fs->fid;
+               }
+
+             if (charcount == G_N_ELEMENTS (xcharbuffer) ||
+                 (charcount > 0 && (glyph_y != glyph_y0 ||
+                                    glyph_x != expected_x)))
+               FLUSH;
+
+             if (charcount == 0)
+               {
+                 glyph_x0 = glyph_x;
+                 glyph_y0 = glyph_y;
+               }
+             xcharbuffer[charcount].byte1 = index / 256;
+             xcharbuffer[charcount].byte2 = index % 256;
+
+             expected_x = glyph_x + XTextWidth16 (fs, &xcharbuffer[charcount], 1);
+
+             charcount++;
+           } else
+             goto unknown_glyph;
+       } else {
+         PangoFontMetrics *metrics;
+         int x1, y1, x2, y2; /* rectangle the character should go inside. */
+         int baseline;
+         int stroke_thick;
+         gunichar wc;
+         gboolean invalid_input;
+
+       unknown_glyph:
+         FLUSH;
+
+         if (font)
+           metrics = pango_font_get_metrics (font, NULL);
+         else
+           metrics = NULL;
+
+         if (metrics)
+           {
+             y1 = glyph_y - PANGO_PIXELS (metrics->ascent);
+             y2 = y1 + PANGO_PIXELS (metrics->ascent + metrics->descent);
+           }
+         else
+           {
+             y2 = glyph_y;
+             y1 = y2 - PANGO_UNKNOWN_GLYPH_HEIGHT;
+           }
+
+         x1 = glyph_x;
+         x2 = x1 + PANGO_PIXELS (glyphs->glyphs[i].geometry.width);
+
+         baseline = glyph_y;
+         stroke_thick = MAX ((int) (0.5 + 0.025 * (y2 - y1)), 1);
+
+         if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+           wc = glyph & ~PANGO_GLYPH_UNKNOWN_FLAG;
+         else
+           wc = 0;
+         invalid_input = glyph == PANGO_GLYPH_INVALID_INPUT || wc > 0x10FFFF;
+
+         switch (wc)
+           {
+           case '\n':
+           case '\r':
+           case 0x2028: /* Line separator */
+           case 0x2029: /* Paragraph separator */
+             {
+               /* Draw a carriage-return thingy */
+               PangoRectangle up_stroke;
+               PangoRectangle across_stroke;
+
+               int hborder = (x2 - x1) * 0.1;
+               int arrow_height = 0.25 * (y2 - y1);
+               int top_border = (y2 - y1) * 0.25;
+
+               int arrow_x, arrow_width, tmp_height;
+
+               /* Draw the arrow-head */
+
+               tmp_height = (stroke_thick % 2 == 0) ? 2 : 1; /* Starting height */
+               arrow_height = 2 * ((1 + arrow_height - tmp_height) / 2) + tmp_height; /* Force symmetry */
+               arrow_width = 2 + arrow_height - tmp_height;
+
+               for (arrow_x = x1 + hborder; arrow_x < x1 + hborder + arrow_width; arrow_x++)
+                 {
+                   XDrawLine (display, d, gc,
+                              arrow_x,
+                              baseline - stroke_thick + (stroke_thick - tmp_height) / 2,
+                              arrow_x,
+                              baseline - stroke_thick + (stroke_thick - tmp_height) / 2 + tmp_height - 1);
+
+                   if ((arrow_x - x1 - hborder) % 2 == 1)
+                     tmp_height += 2;
+                 }
+
+               across_stroke.x = arrow_x;
+               across_stroke.width = x2 - hborder - arrow_x - stroke_thick;
+               across_stroke.y = baseline - stroke_thick;
+               across_stroke.height = stroke_thick;
+
+               XFillRectangle (display, d, gc,
+                               across_stroke.x, across_stroke.y,
+                               across_stroke.width, across_stroke.height);
+
+               up_stroke.x = across_stroke.x + across_stroke.width;
+               up_stroke.width = stroke_thick;
+               up_stroke.y = y1 + top_border;
+               up_stroke.height = baseline - up_stroke.y;
+
+               XFillRectangle (display, d, gc,
+                               up_stroke.x, up_stroke.y,
+                               up_stroke.width, up_stroke.height);
+             }
+             break;
+
+           default:
+             {
+               /* Perhaps we should draw the box-with-numbers as in the
+                * other backends, though we have no guarantee of having
+                * an appropriate size of font. Right now, we just
+                * draw an empty box. (To draw the box-with-numbers.
+                * the backends would have to be changed to use
+                * pango_x_font_get_unknown_glyph() rather than
+                * pango_x_get_unknown_glyph().
+                */
+
+               int xspace = MAX ((int) (0.5 + 0.1 * (x2 - x1)), 1);
+               int yspace = MAX ((int) (0.5 + 0.1 * (y2 - y1)), 1);
+
+               x1 += xspace;
+               x2 -= xspace;
+               y1 += yspace;
+               y2 -= yspace;
+
+               XFillRectangle (display, d, gc,
+                               x1, y1,
+                               x2 - x1, stroke_thick);
+               XFillRectangle (display, d, gc,
+                               x1, y1 + stroke_thick,
+                               stroke_thick, y2 - y1 - 2 * stroke_thick);
+               XFillRectangle (display, d, gc,
+                               x2 - stroke_thick, y1 + stroke_thick,
+                               stroke_thick, y2 - y1 - 2 * stroke_thick);
+               XFillRectangle (display, d, gc,
+                               x1, y2 - stroke_thick,
+                               x2 - x1, stroke_thick);
+               if (invalid_input)
+                 {
+                   XDrawLine (display, d, gc,
+                              x1, y1,
+                              x2-1, y2-1);
+                   XDrawLine (display, d, gc,
+                              x2-1, y1,
+                              x1, y2-1);
+                 }
+
+               break;
+             }
+           }
+
+         pango_font_metrics_unref (metrics);
+       }
+
+    next_glyph:
+      x_off += glyphs->glyphs[i].geometry.width;
+    }
+  FLUSH;
+}
+
+#undef FLUSH
+
+static void
+pango_x_font_get_glyph_extents  (PangoFont      *font,
+                                PangoGlyph      glyph,
+                                PangoRectangle *ink_rect,
+                                PangoRectangle *logical_rect)
+{
+  XCharStruct *cs;
+  PangoXSubfontInfo *subfont;
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->width = ink_rect->y = ink_rect->height = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = logical_rect->y = logical_rect->height = 0;
+      return;
+    }
+  if ((glyph & PANGO_GLYPH_UNKNOWN_FLAG) == 0 && pango_x_find_glyph (font, glyph, &subfont, &cs))
+    {
+      if (ink_rect)
+       {
+         ink_rect->x = PANGO_SCALE * cs->lbearing;
+         ink_rect->width = PANGO_SCALE * (cs->rbearing - cs->lbearing);
+         ink_rect->y = PANGO_SCALE * -cs->ascent;
+         ink_rect->height = PANGO_SCALE * (cs->ascent + cs->descent);
+       }
+      if (logical_rect)
+       {
+         logical_rect->x = 0;
+         logical_rect->width = PANGO_SCALE * cs->width;
+         logical_rect->y = - PANGO_SCALE * subfont->font_struct->ascent;
+         logical_rect->height = PANGO_SCALE * (subfont->font_struct->ascent + subfont->font_struct->descent);
+       }
+    }
+  else
+    {
+      PangoFontMetrics *metrics;
+      gunichar wc;
+      gdouble width_factor;
+      int w;
+
+      if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+       wc = glyph & (~PANGO_GLYPH_UNKNOWN_FLAG);
+      else
+       wc = 0;
+
+      switch (wc)
+       {
+       case '\n':
+       case '\r':
+       case 0x2028: /* Line separator */
+       case 0x2029: /* Paragraph separator */
+         {
+#define MAGIC_FACTOR 1.2
+
+           /* carriage-return thingy */
+           width_factor = MAGIC_FACTOR;
+           break;
+         }
+       default:
+         {
+           /* Unknown glyph square */
+           width_factor = 1.0;
+         }
+       }
+
+      metrics = pango_font_get_metrics (font, NULL);
+
+      if (metrics)
+       {
+         w = metrics->approximate_char_width * width_factor;
+         w = PANGO_SCALE * PANGO_PIXELS (w);
+
+         if (ink_rect)
+           {
+             ink_rect->x = PANGO_SCALE;
+             ink_rect->width = w - 2 * PANGO_SCALE;
+             ink_rect->y = - (metrics->ascent - PANGO_SCALE);
+             ink_rect->height = metrics->ascent + metrics->descent - 2 * PANGO_SCALE;
+           }
+         if (logical_rect)
+           {
+             logical_rect->x = 0;
+             logical_rect->width = w;
+             logical_rect->y = - metrics->ascent;
+             logical_rect->height = metrics->ascent + metrics->descent;
+           }
+
+         pango_font_metrics_unref (metrics);
+       }
+      else
+       {
+         if (ink_rect)
+           ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
+         if (logical_rect)
+           logical_rect->x = logical_rect->y = logical_rect->height = logical_rect->width = 0;
+       }
+    }
+}
+
+static gboolean
+get_int_prop (Atom         atom,
+             XFontStruct *fs,
+             int         *val)
+{
+  int i;
+
+  *val = 0;
+
+  i = 0;
+  while (i < fs->n_properties)
+    {
+      if (fs->properties[i].name == atom)
+       {
+         *val = fs->properties[i].card32;
+         return TRUE;
+       }
+
+      ++i;
+    }
+
+  return FALSE;
+}
+
+/* Call @func with each glyph resulting from shaping @string with each
+ * glyph. This duplicates quite a bit of code from pango_itemize. This
+ * function should die and we should simply add the ability to specify
+ * particular fonts when itemizing.
+ */
+static void
+itemize_string_foreach (PangoFont     *font,
+                       PangoLanguage *language,
+                       const char    *str,
+                       void         (*func) (PangoFont      *font,
+                                             PangoGlyphInfo *glyph_info,
+                                             gpointer        data),
+                       gpointer       data)
+{
+  const char *start, *p;
+  PangoGlyphString *glyph_str = pango_glyph_string_new ();
+  PangoEngineShape *shaper, *last_shaper;
+  int last_level;
+  int i;
+  guint8 *embedding_levels;
+  PangoDirection base_dir = PANGO_DIRECTION_LTR;
+  gboolean finished = FALSE;
+
+  embedding_levels = pango_log2vis_get_embedding_levels (str, -1, &base_dir);
+
+  last_shaper = NULL;
+  last_level = 0;
+
+  i = 0;
+  p = start = str;
+  while (*p || !finished)
+    {
+      gunichar wc;
+
+      if (*p)
+       {
+         wc = g_utf8_get_char (p);
+         shaper = pango_font_find_shaper (font, language, wc);
+       }
+      else
+       {
+         finished = TRUE;
+         shaper = NULL;
+       }
+
+      if (p > start &&
+         (finished ||
+          (shaper != last_shaper || last_level != embedding_levels[i])))
+       {
+         PangoAnalysis analysis = { NULL };
+         int j;
+
+         analysis.shape_engine = last_shaper;
+         analysis.font = font;
+         analysis.language = language;
+         analysis.level = last_level;
+
+         pango_shape (start, p - start, &analysis, glyph_str);
+
+         for (j = 0; j < glyph_str->num_glyphs; j++)
+           (*func) (font, &glyph_str->glyphs[j], data);
+
+         start = p;
+       }
+
+      if (!finished)
+       {
+         p = g_utf8_next_char (p);
+
+         last_shaper = shaper;
+         last_level = embedding_levels[i];
+         i++;
+       }
+    }
+
+  pango_glyph_string_free (glyph_str);
+  g_free (embedding_levels);
+}
+
+/* Get composite font metrics for all subfonts in list
+ */
+static void
+get_font_metrics_from_subfonts (PangoFont        *font,
+                               GSList           *subfonts,
+                               PangoFontMetrics *metrics)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+  GSList *tmp_list = subfonts;
+  gboolean first = TRUE;
+  int total_avg_widths = 0;
+  int n_avg_widths = 0;
+  Atom avg_width_atom;
+
+  avg_width_atom = pango_x_fontmap_atom_from_name (xfont->fontmap,
+                                                  "AVERAGE_WIDTH");
+
+  metrics->ascent = 0;
+  metrics->descent = 0;
+
+  while (tmp_list)
+    {
+      PangoXSubfontInfo *subfont = pango_x_find_subfont (font, GPOINTER_TO_UINT (tmp_list->data));
+
+      if (subfont)
+       {
+         XFontStruct *fs = pango_x_get_font_struct (font, subfont);
+         gint avg_width = 0;
+
+         if (fs)
+           {
+             if (first)
+               {
+                 metrics->ascent = fs->ascent * PANGO_SCALE;
+                 metrics->descent = fs->descent * PANGO_SCALE;
+                 first = FALSE;
+               }
+             else
+               {
+                 metrics->ascent = MAX (fs->ascent * PANGO_SCALE, metrics->ascent);
+                 metrics->descent = MAX (fs->descent * PANGO_SCALE, metrics->descent);
+               }
+
+             if (get_int_prop (avg_width_atom, fs, &avg_width))
+               {
+                 /* convert decipoints --> Pango units.
+                  * Resolution is in (points * PANGO_SCALE) / pixel,
+                  * avg_width in decipoints.
+                  * We want pixels * PANGO_SCALE
+                  */
+
+                 /* Convert to points * PANGO_SCALE */
+                 avg_width *= PANGO_SCALE / (double) 10.0;
+                 /* Convert to pixels * PANGO_SCALE */
+                 avg_width *= (PANGO_SCALE / PANGO_X_FONT_MAP (PANGO_X_FONT (font)->fontmap)->resolution);
+               }
+             else
+               {
+                 avg_width = PANGO_SCALE * ((fs->min_bounds.width + fs->max_bounds.width) / 2);
+               }
+           }
+
+         if (avg_width)
+           {
+             total_avg_widths += avg_width;
+             n_avg_widths += 1;
+           }
+       }
+      else
+       g_warning ("Invalid subfont %d in get_font_metrics_from_subfonts", GPOINTER_TO_UINT (tmp_list->data));
+
+      tmp_list = tmp_list->next;
+    }
+
+  /* This is pretty darn bogus. */
+  if (n_avg_widths)
+    metrics->approximate_char_width = total_avg_widths / n_avg_widths;
+  else
+    metrics->approximate_char_width = PANGO_UNKNOWN_GLYPH_WIDTH * PANGO_SCALE;
+  if (metrics->ascent + metrics->descent == 0)
+    {
+      metrics->ascent = PANGO_UNKNOWN_GLYPH_HEIGHT * PANGO_SCALE;
+      metrics->descent = 0;
+    }
+}
+
+static void
+get_subfonts_foreach (PangoFont      *font,
+                     PangoGlyphInfo *glyph_info,
+                     gpointer        data)
+{
+  GSList **subfonts = data;
+  PangoGlyph glyph = glyph_info->glyph;
+  PangoXSubfont subfont;
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    return;
+
+  /* Use an arbitrary subfont for unknown glyphs...*/
+  if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+    {
+    if (((PangoXFont *)font)->n_subfonts > 0)
+      glyph = PANGO_X_MAKE_GLYPH (1, 0);
+    else
+      return;
+    }
+
+  subfont = PANGO_X_GLYPH_SUBFONT (glyph);
+  if (!g_slist_find (*subfonts, GUINT_TO_POINTER ((guint)subfont)))
+    *subfonts = g_slist_prepend (*subfonts, GUINT_TO_POINTER ((guint)subfont));
+}
+
+/* Get composite font metrics for all subfonts resulting from shaping
+ * string str with the given font
+ */
+static void
+get_font_metrics_from_string (PangoFont        *font,
+                             PangoLanguage    *language,
+                             const char       *str,
+                             PangoFontMetrics *metrics)
+{
+  GSList *subfonts = NULL;
+
+  itemize_string_foreach (font, language, str, get_subfonts_foreach, &subfonts);
+  get_font_metrics_from_subfonts (font, subfonts, metrics);
+  g_slist_free (subfonts);
+}
+
+static void
+average_width_foreach (PangoFont      *font G_GNUC_UNUSED,
+                      PangoGlyphInfo *glyph_info,
+                      gpointer        data)
+{
+  int *width = data;
+
+  *width += glyph_info->geometry.width;
+}
+
+/* Get composite font metrics for all subfonts resulting from shaping
+ * string str with the given font
+ */
+static gdouble
+get_total_width_for_string (PangoFont        *font,
+                           PangoLanguage    *language,
+                           const char       *str)
+{
+  int width = 0;
+
+  itemize_string_foreach (font, language, str, average_width_foreach, &width);
+
+  return width;
+}
+
+static PangoFontMetrics *
+pango_x_font_get_metrics (PangoFont        *font,
+                         PangoLanguage    *language)
+{
+  PangoXMetricsInfo *info = NULL; /* Quiet gcc */
+  PangoXFont *xfont = (PangoXFont *)font;
+  GSList *tmp_list;
+
+  const char *sample_str = pango_language_get_sample_string (language);
+
+  tmp_list = xfont->metrics_by_lang;
+  while (tmp_list)
+    {
+      info = tmp_list->data;
+
+      if (info->sample_str == sample_str)    /* We _don't_ need strcmp */
+       break;
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (!tmp_list)
+    {
+      PangoFontMetrics *metrics;
+
+      info = g_slice_new0 (PangoXMetricsInfo);
+
+      xfont->metrics_by_lang = g_slist_prepend (xfont->metrics_by_lang, info);
+
+      info->sample_str = sample_str;
+      metrics = pango_font_metrics_new ();
+
+      get_font_metrics_from_string (font, language, sample_str, metrics);
+
+      metrics->approximate_digit_width = get_total_width_for_string (font, language, "0123456789") / 10;
+
+      info->metrics = metrics;
+    }
+
+  return pango_font_metrics_ref (info->metrics);
+}
+
+static PangoFontMap *
+pango_x_font_get_font_map (PangoFont *font)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+
+  return xfont->fontmap;
+}
+
+/* Compare the tail of a to b */
+static gboolean
+match_end (const char *a, const char *b)
+{
+  size_t len_a = strlen (a);
+  size_t len_b = strlen (b);
+
+  if (len_b > len_a)
+    return FALSE;
+  else
+    return (strcmp (a + len_a - len_b, b) == 0);
+}
+
+/* Substitute in a charset into an XLFD. Return the
+ * (g_malloc'd) new name, or %NULL if the XLFD cannot
+ * match the charset
+ */
+static char *
+name_for_charset (char *xlfd, char *charset)
+{
+  char *p;
+  char *dash_charset = g_strconcat ("-", charset, NULL);
+  char *result = NULL;
+  int ndashes = 0;
+
+  for (p = xlfd; *p; p++)
+    if (*p == '-')
+      ndashes++;
+
+  if (ndashes == 14) /* Complete XLFD */
+    {
+      if (match_end (xlfd, "-*-*"))
+       {
+         result = g_malloc (strlen (xlfd) - 4 + strlen (dash_charset) + 1);
+         strncpy (result, xlfd, strlen (xlfd) - 4);
+         strcpy (result + strlen (xlfd) - 4, dash_charset);
+       }
+      if (match_end (xlfd, dash_charset))
+       result = g_strdup (xlfd);
+    }
+  else if (ndashes == 13)
+    {
+      if (match_end (xlfd, "-*"))
+       {
+         result = g_malloc (strlen (xlfd) - 2 + strlen (dash_charset) + 1);
+         strncpy (result, xlfd, strlen (xlfd) - 2);
+         strcpy (result + strlen (xlfd) - 2, dash_charset);
+       }
+      if (match_end (xlfd, dash_charset))
+       result = g_strdup (xlfd);
+    }
+  else
+    {
+      if (match_end (xlfd, "*"))
+       {
+         result = g_malloc (strlen (xlfd) + strlen (dash_charset) + 1);
+         strcpy (result, xlfd);
+         strcpy (result + strlen (xlfd), dash_charset);
+       }
+      if (match_end (xlfd, dash_charset))
+       result = g_strdup (xlfd);
+    }
+
+  g_free (dash_charset);
+  return result;
+}
+
+static PangoXSubfont
+pango_x_insert_subfont (PangoFont *font, const char *xlfd)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+  PangoXSubfontInfo *info;
+
+  info = g_slice_new (PangoXSubfontInfo);
+
+  info->xlfd = g_strdup (xlfd);
+  info->font_struct = NULL;
+
+  xfont->n_subfonts++;
+
+  if (xfont->n_subfonts > xfont->max_subfonts)
+    {
+      xfont->max_subfonts *= 2;
+      xfont->subfonts = g_renew (PangoXSubfontInfo *, xfont->subfonts, xfont->max_subfonts);
+    }
+
+  xfont->subfonts[xfont->n_subfonts - 1] = info;
+
+  return xfont->n_subfonts;
+}
+
+/**
+ * pango_x_list_subfonts:
+ * @font: a #PangoFont.
+ * @charsets: the charsets to list subfonts for.
+ * @n_charsets: the number of charsets in @charsets.
+ * @subfont_ids: location to store a pointer to an array of subfont IDs for each found subfont;
+ *               the result must be freed using g_free().
+ * @subfont_charsets: location to store a pointer to an array of subfont IDs for each found subfont;
+ *               the result must be freed using g_free().
+ *
+ * Lists the subfonts of a given font. The result is ordered first by charset,
+ * and then within each charset, by the order of fonts in the font specification.
+ *
+ * Return value: length of the arrays stored in @subfont_ids and
+ * @subfont_charsets.
+ **/
+int
+pango_x_list_subfonts (PangoFont        *font,
+                      char            **charsets,
+                      int               n_charsets,
+                      PangoXSubfont   **subfont_ids,
+                      int             **subfont_charsets)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+  PangoXSubfont **subfont_lists;
+  PangoFontMap *fontmap;
+  int i, j;
+  int n_subfonts = 0;
+
+  g_return_val_if_fail (font != NULL, 0);
+  g_return_val_if_fail (n_charsets == 0 || charsets != NULL, 0);
+
+  fontmap = pango_x_font_map_for_display (xfont->display);
+
+  subfont_lists = g_new (PangoXSubfont *, n_charsets);
+
+  for (j=0; j<n_charsets; j++)
+    {
+      subfont_lists[j] = g_hash_table_lookup (xfont->subfonts_by_charset, charsets[j]);
+      if (!subfont_lists[j])
+       {
+         subfont_lists[j] = g_new (PangoXSubfont, xfont->n_fonts);
+
+         for (i = 0; i < xfont->n_fonts; i++)
+           {
+             PangoXSubfont subfont = 0;
+             char *xlfd;
+
+             if (xfont->size == -1)
+               {
+                 xlfd = name_for_charset (xfont->fonts[i], charsets[j]);
+
+                 if (xlfd)
+                   {
+                     int count;
+                     char **names = XListFonts (xfont->display, xlfd, 1, &count);
+                     if (count > 0)
+                       subfont = pango_x_insert_subfont (font, names[0]);
+
+                     XFreeFontNames (names);
+                     g_free (xlfd);
+                   }
+               }
+             else
+               {
+                 xlfd = pango_x_make_matching_xlfd (fontmap, xfont->fonts[i], charsets[j], xfont->size);
+                 if (xlfd)
+                   {
+                     subfont = pango_x_insert_subfont (font, xlfd);
+                     g_free (xlfd);
+                   }
+               }
+
+             subfont_lists[j][i] = subfont;
+           }
+
+         g_hash_table_insert (xfont->subfonts_by_charset, g_strdup (charsets[j]), subfont_lists[j]);
+       }
+
+      for (i = 0; i < xfont->n_fonts; i++)
+       if (subfont_lists[j][i])
+         n_subfonts++;
+    }
+
+  *subfont_ids = g_new (PangoXSubfont, n_subfonts);
+  *subfont_charsets = g_new (int, n_subfonts);
+
+  n_subfonts = 0;
+
+  for (j=0; j<n_charsets; j++)
+    for (i=0; i<xfont->n_fonts; i++)
+      if (subfont_lists[j][i])
+       {
+         (*subfont_ids)[n_subfonts] = subfont_lists[j][i];
+         (*subfont_charsets)[n_subfonts] = j;
+         n_subfonts++;
+       }
+
+  g_free (subfont_lists);
+
+  return n_subfonts;
+}
+
+/**
+ * pango_x_has_glyph:
+ * @font: a #PangoFont which must be from the X backend.
+ * @glyph: the index of a glyph in the font. (Formed
+ *         using the #PANGO_X_MAKE_GLYPH macro)
+ *
+ * Checks if the given glyph is present in a X font.
+ *
+ * Return value: %TRUE if the glyph is present.
+ **/
+gboolean
+pango_x_has_glyph (PangoFont  *font,
+                  PangoGlyph  glyph)
+{
+  PangoXSubfontInfo *subfont;
+  XCharStruct *cs;
+
+  guint16 char_index = PANGO_X_GLYPH_INDEX (glyph);
+  guint16 subfont_index = PANGO_X_GLYPH_SUBFONT (glyph);
+
+  subfont = pango_x_find_subfont (font, subfont_index);
+  if (!subfont)
+    return FALSE;
+
+  cs = pango_x_get_per_char (font, subfont, char_index);
+
+  if (cs && (cs->lbearing != cs->rbearing || cs->width != 0))
+    return TRUE;
+  else
+    return FALSE;
+}
+
+/**
+ * pango_x_font_subfont_xlfd:
+ * @font: a #PangoFont which must be from the X backend.
+ * @subfont_id: the id of a subfont within the font.
+ *
+ * Determines the X Logical Font Description for the specified
+ * subfont.
+ *
+ * Return value: A newly-allocated string containing the XLFD for the
+ * subfont. This string must be freed with g_free().
+ **/
+char *
+pango_x_font_subfont_xlfd (PangoFont     *font,
+                          PangoXSubfont  subfont_id)
+{
+  PangoXSubfontInfo *subfont;
+
+  g_return_val_if_fail (font != NULL, NULL);
+  g_return_val_if_fail (PANGO_X_IS_FONT (font), NULL);
+
+  subfont = pango_x_find_subfont (font, subfont_id);
+  if (!subfont)
+    {
+      g_warning ("pango_x_font_subfont_xlfd: Invalid subfont_id specified");
+      return NULL;
+    }
+
+  return g_strdup (subfont->xlfd);
+}
+
+static void
+pango_x_font_dispose (GObject *object)
+{
+  PangoXFont *xfont = PANGO_X_FONT (object);
+
+  /* If the font is not already in the freed-fonts cache, add it,
+   * if it is already there, do nothing and the font will be
+   * freed.
+   */
+  if (!xfont->in_cache && xfont->fontmap)
+    pango_x_fontmap_cache_add (xfont->fontmap, xfont);
+
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+
+static void
+subfonts_foreach (gpointer key, gpointer value, gpointer data G_GNUC_UNUSED)
+{
+  g_free (key);
+  g_free (value);
+}
+
+static void
+free_metrics_info (PangoXMetricsInfo *info)
+{
+  pango_font_metrics_unref (info->metrics);
+  g_slice_free (PangoXMetricsInfo, info);
+}
+
+static void
+pango_x_font_finalize (GObject *object)
+{
+  PangoXFont *xfont = (PangoXFont *)object;
+  PangoXFontCache *cache = pango_x_font_map_get_font_cache (xfont->fontmap);
+
+  int i;
+
+  for (i=0; i<xfont->n_subfonts; i++)
+    {
+      PangoXSubfontInfo *info = xfont->subfonts[i];
+
+      g_free (info->xlfd);
+
+      if (info->font_struct)
+       pango_x_font_cache_unload (cache, info->font_struct);
+
+      g_slice_free (PangoXSubfontInfo, info);
+    }
+
+  g_free (xfont->subfonts);
+
+  g_hash_table_foreach (xfont->subfonts_by_charset, subfonts_foreach, NULL);
+  g_hash_table_destroy (xfont->subfonts_by_charset);
+
+  g_slist_foreach (xfont->metrics_by_lang, (GFunc)free_metrics_info, NULL);
+  g_slist_free (xfont->metrics_by_lang);
+
+  if (xfont->xface)
+    pango_x_face_remove (xfont->xface, (PangoFont *)xfont);
+
+  g_assert (xfont->fontmap != NULL);
+  g_object_remove_weak_pointer (G_OBJECT (xfont->fontmap), (gpointer *) (gpointer) &xfont->fontmap);
+  xfont->fontmap = NULL;
+
+  g_strfreev (xfont->fonts);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static PangoFontDescription *
+pango_x_font_describe (PangoFont *font)
+{
+  /* FIXME: this doesn't work for fonts from pango_x_font_load()
+   */
+  PangoXFont *xfont = (PangoXFont *)font;
+
+  if (xfont->xface)
+    {
+      PangoFontDescription *desc = pango_font_face_describe (PANGO_FONT_FACE (xfont->xface));
+      pango_font_description_set_size (desc, xfont->size);
+
+      return desc;
+    }
+  else
+    return NULL;
+}
+
+PangoMap *
+pango_x_get_shaper_map (PangoLanguage *language)
+{
+  static guint engine_type_id = 0;
+  static guint render_type_id = 0;
+
+  if (engine_type_id == 0)
+    {
+      engine_type_id = g_quark_from_static_string (PANGO_ENGINE_TYPE_SHAPE);
+      render_type_id = g_quark_from_static_string (PANGO_RENDER_TYPE_X);
+    }
+
+  return pango_find_map (language, engine_type_id, render_type_id);
+}
+
+static PangoCoverage *
+pango_x_font_get_coverage (PangoFont     *font,
+                          PangoLanguage *language)
+{
+  PangoXFont *xfont = (PangoXFont *)font;
+
+  return pango_x_face_get_coverage (xfont->xface, font, language);
+}
+
+static PangoEngineShape *
+pango_x_font_find_shaper (PangoFont     *font G_GNUC_UNUSED,
+                         PangoLanguage *language,
+                         guint32        ch)
+{
+  PangoMap *shape_map = NULL;
+  PangoScript script;
+
+  shape_map = pango_x_get_shaper_map (language);
+  script = pango_script_for_unichar (ch);
+  return (PangoEngineShape *)pango_map_get_engine (shape_map, script);
+}
+
+/* Utility functions */
+
+static XCharStruct *
+pango_x_get_per_char (PangoFont         *font,
+                     PangoXSubfontInfo *subfont,
+                     guint16            char_index)
+{
+  XFontStruct *fs;
+
+  int index;
+  int byte1;
+  int byte2;
+
+  fs = pango_x_get_font_struct (font, subfont);
+  if (!fs)
+    return NULL;
+
+  if (subfont->is_1byte)
+    {
+      index = (int)char_index - fs->min_char_or_byte2;
+      if (index < 0 || index >= subfont->range_byte2)
+       return NULL;
+    }
+  else
+    {
+      byte1 = (int)(char_index / 256) - fs->min_byte1;
+      if (byte1 < 0 || byte1 >= subfont->range_byte1)
+       return NULL;
+
+      byte2 = (int)(char_index % 256) - fs->min_char_or_byte2;
+      if (byte2 < 0 || byte2 >= subfont->range_byte2)
+       return NULL;
+
+      index = byte1 * subfont->range_byte2 + byte2;
+    }
+
+  if (fs->per_char)
+    return &fs->per_char[index];
+  else
+    return &fs->min_bounds;
+}
+
+static gboolean
+pango_x_find_glyph (PangoFont *font,
+                   PangoGlyph glyph,
+                   PangoXSubfontInfo **subfont_return,
+                   XCharStruct **charstruct_return)
+{
+  PangoXSubfontInfo *subfont;
+  XCharStruct *cs;
+
+  guint16 char_index = PANGO_X_GLYPH_INDEX (glyph);
+  guint16 subfont_index = PANGO_X_GLYPH_SUBFONT (glyph);
+
+  subfont = pango_x_find_subfont (font, subfont_index);
+  if (!subfont)
+    return FALSE;
+
+  cs = pango_x_get_per_char (font, subfont, char_index);
+
+  if (cs && (cs->lbearing != cs->rbearing || cs->width != 0))
+    {
+      if (subfont_return)
+       *subfont_return = subfont;
+
+      if (charstruct_return)
+       *charstruct_return = cs;
+
+      return TRUE;
+    }
+  else
+    return FALSE;
+}
+
+/**
+ * pango_x_get_unknown_glyph:
+ * @font: a #PangoFont.
+ *
+ * Returns the index of a glyph suitable for drawing unknown characters;
+ * you should generally use PANGO_GET_UNKNOWN_GLYPH() instead,
+ * since that may return a glyph that provides a better representation
+ * of a particular char. (E.g., by showing hex digits, or a glyph
+ * representative of a certain Unicode range.)
+ *
+ * Return value: a glyph index into @font.
+ **/
+PangoGlyph
+pango_x_get_unknown_glyph (PangoFont *font G_GNUC_UNUSED)
+{
+  return PANGO_GET_UNKNOWN_GLYPH (0);
+}
+
+/**
+ * pango_x_render_layout_line:
+ * @display:   the X display.
+ * @drawable:  the drawable on which to draw.
+ * @gc:        GC to use for uncolored drawing.
+ * @line:      a #PangoLayoutLine.
+ * @x:         the x position of start of string (in pixels).
+ * @y:         the y position of baseline (in pixels).
+ *
+ * Renders a #PangoLayoutLine onto an X drawable.
+ */
+void
+pango_x_render_layout_line (Display          *display,
+                           Drawable          drawable,
+                           GC                gc,
+                           PangoLayoutLine  *line,
+                           int               x,
+                           int               y)
+{
+  GSList *tmp_list = line->runs;
+  PangoRectangle overall_rect;
+  PangoRectangle logical_rect;
+  PangoRectangle ink_rect;
+  PangoContext *context = pango_layout_get_context (line->layout);
+  PangoXContextInfo *info = get_context_info (context);
+
+  int x_off = 0;
+
+  pango_layout_line_get_extents (line,NULL, &overall_rect);
+
+  while (tmp_list)
+    {
+      PangoUnderline uline = PANGO_UNDERLINE_NONE;
+      PangoLayoutRun *run = tmp_list->data;
+      PangoAttrColor fg_color, bg_color;
+      gboolean fg_set, bg_set;
+      GC fg_gc;
+
+      tmp_list = tmp_list->next;
+
+      pango_x_get_item_properties (run->item, &uline, &fg_color, &fg_set, &bg_color, &bg_set);
+
+      if (fg_set && info->get_gc_func)
+       fg_gc = info->get_gc_func (context, &fg_color.color, gc);
+      else
+       fg_gc = gc;
+
+      if (uline == PANGO_UNDERLINE_NONE)
+       pango_glyph_string_extents (run->glyphs, run->item->analysis.font,
+                                   NULL, &logical_rect);
+      else
+       pango_glyph_string_extents (run->glyphs, run->item->analysis.font,
+                                   &ink_rect, &logical_rect);
+
+      if (bg_set && info->get_gc_func)
+       {
+         GC bg_gc = info->get_gc_func (context, &bg_color.color, gc);
+
+         XFillRectangle (display, drawable, bg_gc,
+                         x + (x_off + logical_rect.x) / PANGO_SCALE,
+                         y + overall_rect.y / PANGO_SCALE,
+                         logical_rect.width / PANGO_SCALE,
+                         overall_rect.height / PANGO_SCALE);
+
+         if (info->free_gc_func)
+           info->free_gc_func (context, bg_gc);
+       }
+
+      pango_x_render (display, drawable, fg_gc, run->item->analysis.font, run->glyphs,
+                     x + x_off / PANGO_SCALE, y);
+
+      switch (uline)
+       {
+       case PANGO_UNDERLINE_NONE:
+         break;
+       case PANGO_UNDERLINE_DOUBLE:
+         XDrawLine (display, drawable, fg_gc,
+                    x + (x_off + ink_rect.x) / PANGO_SCALE - 1, y + 4,
+                    x + (x_off + ink_rect.x + ink_rect.width) / PANGO_SCALE, y + 4);
+         /* Fall through */
+       case PANGO_UNDERLINE_SINGLE:
+         XDrawLine (display, drawable, fg_gc,
+                    x + (x_off + ink_rect.x) / PANGO_SCALE - 1, y + 2,
+                    x + (x_off + ink_rect.x + ink_rect.width) / PANGO_SCALE, y + 2);
+         break;
+       case PANGO_UNDERLINE_ERROR:
+         {
+           int point_x;
+           int counter = 0;
+           int end_x = x + (x_off + ink_rect.x + ink_rect.width) / PANGO_SCALE;
+
+           for (point_x = x + PANGO_PIXELS (x_off + ink_rect.x) - 1;
+                point_x <= end_x;
+                point_x += 2)
+             {
+               if (counter)
+                 XDrawLine (display, drawable, gc,
+                            point_x, y + 2, MIN (point_x + 1, end_x), y + 2);
+               else
+                 XDrawLine (display, drawable, gc,
+                            point_x, y + 3, MIN (point_x + 1, end_x), y + 3);
+
+               counter = (counter + 1) % 2;
+             }
+         }
+         break;
+       case PANGO_UNDERLINE_LOW:
+         XDrawLine (display, drawable, fg_gc,
+                    x + (x_off + ink_rect.x) / PANGO_SCALE - 1, y + (ink_rect.y + ink_rect.height) / PANGO_SCALE + 2,
+                    x + (x_off + ink_rect.x + ink_rect.width) / PANGO_SCALE, y + (ink_rect.y + ink_rect.height) / PANGO_SCALE + 2);
+         break;
+       }
+
+      if (fg_set && info->get_gc_func && info->free_gc_func)
+       info->free_gc_func (context, fg_gc);
+
+      x_off += logical_rect.width;
+    }
+}
+
+/**
+ * pango_x_render_layout:
+ * @display:   the X display.
+ * @drawable:  the drawable on which to draw.
+ * @gc:        GC to use for uncolored drawing.
+ * @layout:    a #PangoLayout.
+ * @x:         the x position of the left of the layout (in pixels).
+ * @y:         the y position of the top of the layout (in pixels).
+ *
+ * Renders a #PangoLayout onto an X drawable.
+ */
+void
+pango_x_render_layout (Display         *display,
+                      Drawable         drawable,
+                      GC               gc,
+                      PangoLayout     *layout,
+                      int              x,
+                      int              y)
+{
+  PangoLayoutIter *iter;
+
+  g_return_if_fail (display != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  iter = pango_layout_get_iter (layout);
+
+  do
+    {
+      PangoRectangle   logical_rect;
+      PangoLayoutLine *line;
+      int              baseline;
+
+      line = pango_layout_iter_get_line_readonly (iter);
+
+      pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
+      baseline = pango_layout_iter_get_baseline (iter);
+
+      pango_x_render_layout_line (display, drawable, gc,
+                                 line,
+                                 x + PANGO_PIXELS (logical_rect.x),
+                                 y + PANGO_PIXELS (baseline));
+    }
+  while (pango_layout_iter_next_line (iter));
+
+  pango_layout_iter_free (iter);
+}
+
+/* This utility function is duplicated here and in pango-layout.c; should it be
+ * public? Trouble is - what is the appropriate set of properties?
+ */
+static void
+pango_x_get_item_properties (PangoItem      *item,
+                            PangoUnderline *uline,
+                            PangoAttrColor *fg_color,
+                            gboolean       *fg_set,
+                            PangoAttrColor *bg_color,
+                            gboolean       *bg_set)
+{
+  GSList *tmp_list = item->analysis.extra_attrs;
+
+  if (fg_set)
+    *fg_set = FALSE;
+
+  if (bg_set)
+    *bg_set = FALSE;
+
+  while (tmp_list)
+    {
+      PangoAttribute *attr = tmp_list->data;
+
+      switch ((int) attr->klass->type)
+       {
+       case PANGO_ATTR_UNDERLINE:
+         if (uline)
+           *uline = ((PangoAttrInt *)attr)->value;
+         break;
+
+       case PANGO_ATTR_FOREGROUND:
+         if (fg_color)
+           *fg_color = *((PangoAttrColor *)attr);
+         if (fg_set)
+           *fg_set = TRUE;
+
+         break;
+
+       case PANGO_ATTR_BACKGROUND:
+         if (bg_color)
+           *bg_color = *((PangoAttrColor *)attr);
+         if (bg_set)
+           *bg_set = TRUE;
+
+         break;
+
+       default:
+         break;
+       }
+      tmp_list = tmp_list->next;
+    }
+}
+
+/**
+ * pango_x_apply_ligatures:
+ * @font: unused
+ * @subfont: unused
+ * @glyphs: unused
+ * @n_glyphs: unused
+ * @clusters: unused
+ *
+ * Previously did subfont-specific ligation. Now a no-op.
+ *
+ * Return value: %FALSE, always.
+ */
+gboolean
+pango_x_apply_ligatures (PangoFont     *font G_GNUC_UNUSED,
+                        PangoXSubfont  subfont_id G_GNUC_UNUSED,
+                        gunichar     **glyphs G_GNUC_UNUSED,
+                        int           *n_glyphs G_GNUC_UNUSED,
+                        int           **clusters G_GNUC_UNUSED)
+{
+  return FALSE;
+}
+
+/**
+ * pango_x_find_first_subfont:
+ * @font: A #PangoFont.
+ * @rfont: A pointer to a #PangoXSubfont.
+ * @charsets: An array of charsets.
+ * @n_charsets: The number of charsets in @charsets.
+ *
+ * Looks for subfonts with the @charset charset,
+ * in @font, and puts the first one in *@rfont.
+ *
+ * Return value: %TRUE if *@rfont now contains a font.
+ */
+gboolean
+pango_x_find_first_subfont (PangoFont      *font,
+                           char          **charsets,
+                           int             n_charsets,
+                           PangoXSubfont  *rfont)
+{
+  int n_subfonts;
+  gboolean result = FALSE;
+  PangoXSubfont *subfonts;
+  int *subfont_charsets;
+
+  g_return_val_if_fail (font, 0);
+  g_return_val_if_fail (charsets, 0);
+  g_return_val_if_fail (rfont, 0);
+
+  n_subfonts = pango_x_list_subfonts (font, charsets, n_charsets,
+                                     &subfonts, &subfont_charsets);
+
+  if (n_subfonts > 0)
+    {
+      *rfont = subfonts[0];
+      result = TRUE;
+    }
+
+  g_free (subfonts);
+  g_free (subfont_charsets);
+  return result;
+}
+
+/**
+ * pango_x_fallback_shape:
+ * @font: A #PangoFont.
+ * @glyphs: A pointer to a #PangoGlyphString.
+ * @text: UTF-8 string.
+ * @n_chars: Number of UTF-8 seqs in @text.
+ *
+ * This is a simple fallback shaper, that can be used
+ * if no subfont that supports a given script is found.
+ * For every character in @text, it puts the unknown glyph.
+ */
+void
+pango_x_fallback_shape (PangoFont        *font,
+                       PangoGlyphString *glyphs,
+                       const char       *text,
+                       int               n_chars)
+{
+  PangoGlyph unknown_glyph = pango_x_get_unknown_glyph (font);
+  PangoRectangle logical_rect;
+  const char *p;
+  int i;
+
+  g_return_if_fail (font);
+  g_return_if_fail (glyphs);
+  g_return_if_fail (text);
+  g_return_if_fail (n_chars >= 0);
+
+  pango_font_get_glyph_extents (font, unknown_glyph, NULL, &logical_rect);
+  pango_glyph_string_set_size (glyphs, n_chars);
+  p = text;
+  for (i = 0; i < n_chars; i++)
+    {
+      glyphs->glyphs[i].glyph = unknown_glyph;
+
+      glyphs->glyphs[i].geometry.x_offset = 0;
+      glyphs->glyphs[i].geometry.y_offset = 0;
+      glyphs->glyphs[i].geometry.width = logical_rect.width;
+
+      glyphs->log_clusters[i] = p - text;
+
+      p = g_utf8_next_char (p);
+    }
+}
+
+/**
+ * pango_x_font_get_unknown_glyph:
+ * @font: a #PangoFont.
+ * @wc: the Unicode character for which a glyph is needed.
+ *
+ * Returns the index of a glyph suitable for drawing @wc as an
+ * unknown character.
+ *
+ * Use PANGO_GET_UNKNOWN_GLYPH() instead.
+ *
+ * Return value: a glyph index into @font.
+ */
+PangoGlyph
+pango_x_font_get_unknown_glyph (PangoFont *font G_GNUC_UNUSED,
+                               gunichar   wc)
+{
+  return PANGO_GET_UNKNOWN_GLYPH (wc);
+}
diff --git a/pango/pangox.h b/pango/pangox.h
new file mode 100755 (executable)
index 0000000..dc41b61
--- /dev/null
@@ -0,0 +1,131 @@
+/* Pango
+ * pangox.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 SuSE Linux Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOX_H__
+#define __PANGOX_H__
+
+#include <glib.h>
+#include <pango/pango-layout.h>
+
+G_BEGIN_DECLS
+
+#include <X11/Xlib.h>
+
+#ifndef PANGO_DISABLE_DEPRECATED
+
+#define PANGO_RENDER_TYPE_X "PangoRenderX"
+
+typedef GC (*PangoGetGCFunc) (PangoContext *context, PangoColor *color, GC base_gc);
+typedef void (*PangoFreeGCFunc) (PangoContext *context, GC gc);
+
+/* Calls for applications
+ */
+PangoContext * pango_x_get_context        (Display          *display);
+void           pango_x_context_set_funcs  (PangoContext     *context,
+                                          PangoGetGCFunc    get_gc_func,
+                                          PangoFreeGCFunc   free_gc_func);
+
+PangoFont *    pango_x_load_font          (Display          *display,
+                                          const gchar      *spec);
+void           pango_x_render             (Display          *display,
+                                          Drawable          d,
+                                          GC                gc,
+                                          PangoFont        *font,
+                                          PangoGlyphString *glyphs,
+                                          gint              x,
+                                          gint              y);
+void           pango_x_render_layout_line (Display          *display,
+                                          Drawable          drawable,
+                                          GC                gc,
+                                          PangoLayoutLine  *line,
+                                          int               x,
+                                          int               y);
+void           pango_x_render_layout      (Display          *display,
+                                          Drawable          drawable,
+                                          GC                gc,
+                                          PangoLayout      *layout,
+                                          int               x,
+                                          int               y);
+
+/* API for rendering modules
+ */
+typedef guint16 PangoXSubfont;
+
+#define PANGO_X_MAKE_GLYPH(subfont,index_) ((subfont)<<16 | (index_))
+#define PANGO_X_GLYPH_SUBFONT(glyph) ((glyph)>>16)
+#define PANGO_X_GLYPH_INDEX(glyph) ((glyph) & 0xffff)
+
+int        pango_x_list_subfonts     (PangoFont      *font,
+                                     char          **charsets,
+                                     int             n_charsets,
+                                     PangoXSubfont **subfont_ids,
+                                     int           **subfont_charsets);
+gboolean   pango_x_has_glyph         (PangoFont      *font,
+                                     PangoGlyph      glyph);
+PangoGlyph pango_x_get_unknown_glyph (PangoFont      *font);
+
+#ifdef PANGO_ENABLE_ENGINE
+PangoGlyph pango_x_font_get_unknown_glyph (PangoFont    *font,
+                                          gunichar      wc);
+#endif /* PANGO_ENABLE_ENGINE */
+
+/* API for libraries that want to use PangoX mixed with classic X fonts.
+ */
+typedef struct _PangoXFontCache PangoXFontCache;
+
+PangoXFontCache *pango_x_font_cache_new     (Display         *display);
+void             pango_x_font_cache_free    (PangoXFontCache *cache);
+
+XFontStruct * pango_x_font_cache_load      (PangoXFontCache *cache,
+                                           const char      *xlfd);
+void          pango_x_font_cache_unload    (PangoXFontCache *cache,
+                                           XFontStruct     *fs);
+
+PangoFontMap *   pango_x_font_map_for_display  (Display     *display);
+void             pango_x_shutdown_display      (Display     *display);
+PangoXFontCache *pango_x_font_map_get_font_cache (PangoFontMap *font_map);
+
+char *pango_x_font_subfont_xlfd (PangoFont     *font,
+                                PangoXSubfont  subfont_id);
+
+
+gboolean pango_x_find_first_subfont (PangoFont     *font,
+                                    char         **charsets,
+                                    int            n_charsets,
+                                    PangoXSubfont *rfont);
+
+void pango_x_fallback_shape (PangoFont        *font,
+                            PangoGlyphString *glyphs,
+                            const char       *text,
+                            int               n_chars);
+
+gboolean pango_x_apply_ligatures (PangoFont     *font,
+                                 PangoXSubfont  subfont,
+                                 gunichar     **glyphs,
+                                 int           *n_glyphs,
+                                 int          **clusters);
+
+#endif /* PANGO_DISABLE_DEPRECATED */
+
+G_END_DECLS
+
+#endif /* __PANGOX_H__ */
diff --git a/pango/pangox.rc b/pango/pangox.rc
new file mode 100755 (executable)
index 0000000..3e1542b
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION 1,26,1,0
+  PRODUCTVERSION 1,26,1,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "Pangox"
+       VALUE "FileVersion", "1.26.1.0"
+       VALUE "InternalName", "pangox-1.0-0"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software."
+       VALUE "OriginalFilename", "pangox-1.0-0.dll"
+       VALUE "ProductName", "Pangox"
+       VALUE "ProductVersion", "1.26.1"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangox.rc.in b/pango/pangox.rc.in
new file mode 100755 (executable)
index 0000000..c259393
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "Pangox"
+       VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+       VALUE "InternalName", "pangox-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software."
+       VALUE "OriginalFilename", "pangox-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+       VALUE "ProductName", "Pangox"
+       VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangoxft-font.c b/pango/pangoxft-font.c
new file mode 100755 (executable)
index 0000000..f4d61c8
--- /dev/null
@@ -0,0 +1,618 @@
+/* Pango
+ * pangoxft-font.c: Routines for handling X fonts
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include "pangofc-fontmap.h"
+#include "pangoxft-private.h"
+#include "pangofc-private.h"
+
+#define PANGO_XFT_FONT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_XFT_FONT, PangoXftFontClass))
+#define PANGO_XFT_IS_FONT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_XFT_FONT))
+#define PANGO_XFT_FONT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_XFT_FONT, PangoXftFontClass))
+
+typedef struct _PangoXftFontClass    PangoXftFontClass;
+
+struct _PangoXftFontClass
+{
+  PangoFcFontClass  parent_class;
+};
+
+static void pango_xft_font_finalize (GObject *object);
+
+static void                  pango_xft_font_get_glyph_extents (PangoFont        *font,
+                                                              PangoGlyph        glyph,
+                                                              PangoRectangle   *ink_rect,
+                                                              PangoRectangle   *logical_rect);
+
+static FT_Face    pango_xft_font_real_lock_face         (PangoFcFont      *font);
+static void       pango_xft_font_real_unlock_face       (PangoFcFont      *font);
+static gboolean   pango_xft_font_real_has_char          (PangoFcFont      *font,
+                                                        gunichar          wc);
+static guint      pango_xft_font_real_get_glyph         (PangoFcFont      *font,
+                                                        gunichar          wc);
+static void       pango_xft_font_real_shutdown          (PangoFcFont      *font);
+
+static XftFont *xft_font_get_font (PangoFont *font);
+
+G_DEFINE_TYPE (PangoXftFont, pango_xft_font, PANGO_TYPE_FC_FONT)
+
+static void
+pango_xft_font_class_init (PangoXftFontClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+  PangoFontClass *font_class = PANGO_FONT_CLASS (class);
+  PangoFcFontClass *fc_font_class = PANGO_FC_FONT_CLASS (class);
+
+  object_class->finalize = pango_xft_font_finalize;
+
+  font_class->get_glyph_extents = pango_xft_font_get_glyph_extents;
+
+  fc_font_class->lock_face = pango_xft_font_real_lock_face;
+  fc_font_class->unlock_face = pango_xft_font_real_unlock_face;
+  fc_font_class->has_char = pango_xft_font_real_has_char;
+  fc_font_class->get_glyph = pango_xft_font_real_get_glyph;
+  fc_font_class->shutdown = pango_xft_font_real_shutdown;
+}
+
+static void
+pango_xft_font_init (PangoXftFont *xftfont G_GNUC_UNUSED)
+{
+}
+
+PangoXftFont *
+_pango_xft_font_new (PangoXftFontMap *xftfontmap,
+                    FcPattern       *pattern)
+{
+  PangoFontMap *fontmap = PANGO_FONT_MAP (xftfontmap);
+  PangoXftFont *xfont;
+
+  g_return_val_if_fail (fontmap != NULL, NULL);
+  g_return_val_if_fail (pattern != NULL, NULL);
+
+  xfont = (PangoXftFont *)g_object_new (PANGO_TYPE_XFT_FONT,
+                                       "pattern", pattern,
+                                       "fontmap", fontmap,
+                                       NULL);
+
+  /* Hack to force hinting of vertical metrics; hinting off for
+   * a Xft font just means to not hint outlines, but we still
+   * want integer line spacing, underline positions, etc
+   */
+  PANGO_FC_FONT (xfont)->is_hinted = TRUE;
+
+  xfont->xft_font = NULL;
+
+  return xfont;
+}
+
+/**
+ * _pango_xft_font_get_mini_font:
+ * @xfont: a #PangoXftFont
+ *
+ * Gets the font used for drawing the digits in the
+ * missing-character hex squares
+ *
+ * Return value: the #PangoFont used for the digits; this
+ *  value is associated with the main font and will be freed
+ *  along with the main font.
+ **/
+PangoFont *
+_pango_xft_font_get_mini_font (PangoXftFont *xfont)
+{
+  PangoFcFont *fcfont = (PangoFcFont *)xfont;
+
+  if (!fcfont || !fcfont->fontmap)
+    return NULL;
+
+  if (!xfont->mini_font)
+    {
+      Display *display;
+      int screen;
+      PangoFontDescription *desc = pango_font_description_new ();
+      PangoContext *context;
+      int i;
+      int width = 0, height = 0;
+      XGlyphInfo extents;
+      XftFont *mini_xft;
+      int new_size;
+
+      _pango_xft_font_map_get_info (fcfont->fontmap, &display, &screen);
+
+      context = pango_font_map_create_context (pango_xft_get_font_map (display, screen));
+      pango_context_set_language (context, pango_language_from_string ("en"));
+
+      pango_font_description_set_family_static (desc, "monospace");
+
+      new_size = pango_font_description_get_size (fcfont->description) / 2;
+
+      if (pango_font_description_get_size_is_absolute (fcfont->description))
+       pango_font_description_set_absolute_size (desc, new_size);
+      else
+       pango_font_description_set_size (desc, new_size);
+
+      xfont->mini_font = pango_font_map_load_font (fcfont->fontmap, context, desc);
+      pango_font_description_free (desc);
+      g_object_unref (context);
+
+      if (!xfont->mini_font)
+       return NULL;
+
+      mini_xft = xft_font_get_font (xfont->mini_font);
+
+      for (i = 0 ; i < 16 ; i++)
+       {
+         char c = i < 10 ? '0' + i : 'A' + i - 10;
+         XftTextExtents8 (display, mini_xft, (FcChar8 *) &c, 1, &extents);
+         width = MAX (width, extents.width);
+         height = MAX (height, extents.height);
+       }
+
+      xfont->mini_width = PANGO_SCALE * width;
+      xfont->mini_height = PANGO_SCALE * height;
+      xfont->mini_pad = PANGO_SCALE * MIN (height / 2, MAX ((int)(2.2 * height + 27) / 28, 1));
+    }
+
+  return xfont->mini_font;
+}
+
+static void
+pango_xft_font_finalize (GObject *object)
+{
+  PangoXftFont *xfont = (PangoXftFont *)object;
+  PangoFcFont *fcfont = (PangoFcFont *)object;
+
+  if (xfont->mini_font)
+    g_object_unref (xfont->mini_font);
+
+  if (xfont->xft_font)
+    {
+      Display *display;
+
+      _pango_xft_font_map_get_info (fcfont->fontmap, &display, NULL);
+      XftFontClose (display, xfont->xft_font);
+    }
+
+  if (xfont->glyph_info)
+    g_hash_table_destroy (xfont->glyph_info);
+
+  G_OBJECT_CLASS (pango_xft_font_parent_class)->finalize (object);
+}
+
+static void
+get_glyph_extents_missing (PangoXftFont    *xfont,
+                          PangoGlyph       glyph,
+                          PangoRectangle  *ink_rect,
+                          PangoRectangle  *logical_rect)
+
+{
+  PangoFont *font = PANGO_FONT (xfont);
+  XftFont *xft_font = xft_font_get_font (font);
+  gunichar ch;
+  gint cols;
+  
+  ch = glyph & ~PANGO_GLYPH_UNKNOWN_FLAG;
+
+  if (G_UNLIKELY (glyph == PANGO_GLYPH_INVALID_INPUT || ch > 0x10FFFF))
+    cols = 1;
+  else
+    cols = ch > 0xffff ? 3 : 2;
+
+  _pango_xft_font_get_mini_font (xfont);
+
+  if (ink_rect)
+    {
+      ink_rect->x = 0;
+      ink_rect->y = - PANGO_SCALE * xft_font->ascent + PANGO_SCALE * (((xft_font->ascent + xft_font->descent) - (xfont->mini_height * 2 + xfont->mini_pad * 5 + PANGO_SCALE / 2) / PANGO_SCALE) / 2);
+      ink_rect->width = xfont->mini_width * cols + xfont->mini_pad * (2 * cols + 1);
+      ink_rect->height = xfont->mini_height * 2 + xfont->mini_pad * 5;
+    }
+
+  if (logical_rect)
+    {
+      logical_rect->x = 0;
+      logical_rect->y = - PANGO_SCALE * xft_font->ascent;
+      logical_rect->width = xfont->mini_width * cols + xfont->mini_pad * (2 * cols + 2);
+      logical_rect->height = (xft_font->ascent + xft_font->descent) * PANGO_SCALE;
+    }
+}
+
+static void
+get_glyph_extents_xft (PangoFcFont      *fcfont,
+                      PangoGlyph        glyph,
+                      PangoRectangle   *ink_rect,
+                      PangoRectangle   *logical_rect)
+{
+  XftFont *xft_font = xft_font_get_font ((PangoFont *)fcfont);
+  XGlyphInfo extents;
+  Display *display;
+  FT_UInt ft_glyph = glyph;
+
+  _pango_xft_font_map_get_info (fcfont->fontmap, &display, NULL);
+
+  XftGlyphExtents (display, xft_font, &ft_glyph, 1, &extents);
+
+  if (ink_rect)
+    {
+      ink_rect->x = - extents.x * PANGO_SCALE; /* Xft crack-rock sign choice */
+      ink_rect->y = - extents.y * PANGO_SCALE; /*             "              */
+      ink_rect->width = extents.width * PANGO_SCALE;
+      ink_rect->height = extents.height * PANGO_SCALE;
+    }
+
+  if (logical_rect)
+    {
+      logical_rect->x = 0;
+      logical_rect->y = - xft_font->ascent * PANGO_SCALE;
+      logical_rect->width = extents.xOff * PANGO_SCALE;
+      logical_rect->height = (xft_font->ascent + xft_font->descent) * PANGO_SCALE;
+    }
+}
+
+typedef struct
+{
+  PangoRectangle ink_rect;
+  PangoRectangle logical_rect;
+} Extents;
+
+static void
+extents_free (Extents *ext)
+{
+  g_slice_free (Extents, ext);
+}
+
+static void
+get_glyph_extents_raw (PangoXftFont     *xfont,
+                      PangoGlyph        glyph,
+                      PangoRectangle   *ink_rect,
+                      PangoRectangle   *logical_rect)
+{
+  Extents *extents;
+
+  if (!xfont->glyph_info)
+    xfont->glyph_info = g_hash_table_new_full (NULL, NULL,
+                                              NULL, (GDestroyNotify)extents_free);
+
+  extents = g_hash_table_lookup (xfont->glyph_info,
+                                GUINT_TO_POINTER (glyph));
+
+  if (!extents)
+    {
+      extents = g_slice_new (Extents);
+
+      pango_fc_font_get_raw_extents (PANGO_FC_FONT (xfont),
+                                    FT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING,
+                                    glyph,
+                                    &extents->ink_rect,
+                                    &extents->logical_rect);
+
+      g_hash_table_insert (xfont->glyph_info,
+                          GUINT_TO_POINTER (glyph),
+                          extents);
+    }
+
+  if (ink_rect)
+    *ink_rect = extents->ink_rect;
+
+  if (logical_rect)
+    *logical_rect = extents->logical_rect;
+}
+
+static void
+pango_xft_font_get_glyph_extents (PangoFont        *font,
+                                 PangoGlyph        glyph,
+                                 PangoRectangle   *ink_rect,
+                                 PangoRectangle   *logical_rect)
+{
+  PangoXftFont *xfont = (PangoXftFont *)font;
+  PangoFcFont *fcfont = PANGO_FC_FONT (font);
+  gboolean empty = FALSE;
+
+  if (G_UNLIKELY (!fcfont->fontmap))   /* Display closed */
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->width = ink_rect->y = ink_rect->height = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = logical_rect->y = logical_rect->height = 0;
+      return;
+    }
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    {
+      glyph = pango_fc_font_get_glyph (fcfont, ' ');
+      empty = TRUE;
+    }
+
+  if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+    {
+      get_glyph_extents_missing (xfont, glyph, ink_rect, logical_rect);
+    }
+  else
+    {
+      if (!fcfont->is_transformed)
+       get_glyph_extents_xft (fcfont, glyph, ink_rect, logical_rect);
+      else
+       get_glyph_extents_raw (xfont, glyph, ink_rect, logical_rect);
+    }
+
+  if (empty)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = 0;
+      return;
+    }
+}
+
+static void
+load_fallback_font (PangoXftFont *xfont)
+{
+  PangoFcFont *fcfont = PANGO_FC_FONT (xfont);
+  Display *display;
+  int screen;
+  XftFont *xft_font;
+  gboolean size_is_absolute;
+  double size;
+
+  _pango_xft_font_map_get_info (fcfont->fontmap, &display, &screen);
+
+  size_is_absolute = pango_font_description_get_size_is_absolute (fcfont->description);
+  size = pango_font_description_get_size (fcfont->description) / PANGO_SCALE;
+
+  xft_font = XftFontOpen (display,  screen,
+                         FC_FAMILY, FcTypeString, "sans",
+                         size_is_absolute ? FC_PIXEL_SIZE : FC_SIZE, FcTypeDouble, size,
+                         NULL);
+
+  xfont->xft_font = xft_font;
+}
+
+static XftFont *
+xft_font_get_font (PangoFont *font)
+{
+  PangoXftFont *xfont;
+  PangoFcFont *fcfont;
+  Display *display;
+  int screen;
+
+  xfont = (PangoXftFont *)font;
+  fcfont = (PangoFcFont *)font;
+
+  if (G_UNLIKELY (xfont->xft_font == NULL))
+    {
+      FcPattern *pattern = FcPatternDuplicate (fcfont->font_pattern);
+      FcPatternDel (pattern, FC_SPACING);
+
+      _pango_xft_font_map_get_info (fcfont->fontmap, &display, &screen);
+
+      xfont->xft_font = XftFontOpenPattern (display, pattern);
+      if (!xfont->xft_font)
+       {
+         gchar *name = pango_font_description_to_string (fcfont->description);
+         g_warning ("Cannot open font file for font %s", name);
+         g_free (name);
+
+         load_fallback_font (xfont);
+       }
+    }
+
+  return xfont->xft_font;
+}
+
+static FT_Face
+pango_xft_font_real_lock_face (PangoFcFont *font)
+{
+  XftFont *xft_font = xft_font_get_font ((PangoFont *)font);
+
+  return XftLockFace (xft_font);
+}
+
+static void
+pango_xft_font_real_unlock_face (PangoFcFont *font)
+{
+  XftFont *xft_font = xft_font_get_font ((PangoFont *)font);
+
+  XftUnlockFace (xft_font);
+}
+
+static gboolean
+pango_xft_font_real_has_char (PangoFcFont *font,
+                             gunichar     wc)
+{
+  XftFont *xft_font = xft_font_get_font ((PangoFont *)font);
+
+  return XftCharExists (NULL, xft_font, wc);
+}
+
+static guint
+pango_xft_font_real_get_glyph (PangoFcFont *font,
+                              gunichar     wc)
+{
+  XftFont *xft_font = xft_font_get_font ((PangoFont *)font);
+
+  return XftCharIndex (NULL, xft_font, wc);
+}
+
+static void
+pango_xft_font_real_shutdown (PangoFcFont *fcfont)
+{
+  PangoXftFont *xfont = PANGO_XFT_FONT (fcfont);
+
+  if (xfont->xft_font)
+    {
+      Display *display;
+
+      _pango_xft_font_map_get_info (fcfont->fontmap, &display, NULL);
+      XftFontClose (display, xfont->xft_font);
+      xfont->xft_font = NULL;
+    }
+}
+
+/**
+ * pango_xft_font_get_font:
+ * @font: a #PangoFont.
+ *
+ * Returns the XftFont of a font.
+ *
+ * Return value: the XftFont associated to @font, or %NULL if @font is %NULL.
+ **/
+XftFont *
+pango_xft_font_get_font (PangoFont *font)
+{
+  if (G_UNLIKELY (!font))
+    return NULL;
+
+  return xft_font_get_font (font);
+}
+
+/**
+ * pango_xft_font_get_display:
+ * @font: a #PangoFont.
+ *
+ * Returns the X display of the XftFont of a font.
+ *
+ * Return value: the X display of the XftFont associated to @font.
+ **/
+Display *
+pango_xft_font_get_display (PangoFont *font)
+{
+  PangoFcFont *fcfont;
+  Display *display;
+
+  g_return_val_if_fail (PANGO_XFT_IS_FONT (font), NULL);
+
+  fcfont = PANGO_FC_FONT (font);
+  _pango_xft_font_map_get_info (fcfont->fontmap, &display, NULL);
+
+  return display;
+}
+
+/**
+ * pango_xft_font_get_unknown_glyph:
+ * @font: a #PangoFont.
+ * @wc: the Unicode character for which a glyph is needed.
+ *
+ * Returns the index of a glyph suitable for drawing @wc as an
+ * unknown character.
+ *
+ * Use PANGO_GET_UNKNOWN_GLYPH() instead.
+ *
+ * Return value: a glyph index into @font.
+ **/
+PangoGlyph
+pango_xft_font_get_unknown_glyph (PangoFont *font,
+                                 gunichar   wc)
+{
+  g_return_val_if_fail (PANGO_XFT_IS_FONT (font), PANGO_GLYPH_EMPTY);
+
+  return pango_fc_font_get_unknown_glyph (PANGO_FC_FONT (font), wc);
+}
+
+/**
+ * pango_xft_font_lock_face:
+ * @font: a #PangoFont.
+ *
+ * Gets the FreeType <type>FT_Face</type> associated with a font,
+ * This face will be kept around until you call
+ * pango_xft_font_unlock_face().
+ *
+ * Use pango_fc_font_lock_face() instead.
+ *
+ * Return value: the FreeType <type>FT_Face</type> associated with @font.
+ *
+ * Since: 1.2
+ **/
+FT_Face
+pango_xft_font_lock_face (PangoFont *font)
+{
+  g_return_val_if_fail (PANGO_XFT_IS_FONT (font), NULL);
+
+  return pango_fc_font_lock_face (PANGO_FC_FONT (font));
+}
+
+/**
+ * pango_xft_font_unlock_face:
+ * @font: a #PangoFont.
+ *
+ * Releases a font previously obtained with
+ * pango_xft_font_lock_face().
+ *
+ * Use pango_fc_font_unlock_face() instead.
+ *
+ * Since: 1.2
+ **/
+void
+pango_xft_font_unlock_face (PangoFont *font)
+{
+  g_return_if_fail (PANGO_XFT_IS_FONT (font));
+
+  pango_fc_font_unlock_face (PANGO_FC_FONT (font));
+}
+
+/**
+ * pango_xft_font_get_glyph:
+ * @font: a #PangoFont for the Xft backend
+ * @wc: Unicode codepoint to look up
+ *
+ * Gets the glyph index for a given Unicode character
+ * for @font. If you only want to determine
+ * whether the font has the glyph, use pango_xft_font_has_char().
+ *
+ * Use pango_fc_font_get_glyph() instead.
+ *
+ * Return value: the glyph index, or 0, if the Unicode
+ *  character does not exist in the font.
+ *
+ * Since: 1.2
+ **/
+guint
+pango_xft_font_get_glyph (PangoFont *font,
+                         gunichar   wc)
+{
+  g_return_val_if_fail (PANGO_XFT_IS_FONT (font), 0);
+
+  return pango_fc_font_get_glyph (PANGO_FC_FONT (font), wc);
+}
+
+/**
+ * pango_xft_font_has_char:
+ * @font: a #PangoFont for the Xft backend
+ * @wc: Unicode codepoint to look up
+ *
+ * Determines whether @font has a glyph for the codepoint @wc.
+ *
+ * Use pango_fc_font_has_char() instead.
+ *
+ * Return value: %TRUE if @font has the requested codepoint.
+ *
+ * Since: 1.2
+ **/
+gboolean
+pango_xft_font_has_char (PangoFont *font,
+                        gunichar   wc)
+{
+  g_return_val_if_fail (PANGO_XFT_IS_FONT (font), 0);
+
+  return pango_fc_font_has_char (PANGO_FC_FONT (font), wc);
+}
diff --git a/pango/pangoxft-fontmap.c b/pango/pangoxft-fontmap.c
new file mode 100755 (executable)
index 0000000..2feb498
--- /dev/null
@@ -0,0 +1,377 @@
+/* Pango
+ * pangoxft-fontmap.c: Xft font handling
+ *
+ * Copyright (C) 2000-2003 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include "pangofc-fontmap.h"
+#include "pangoxft.h"
+#include "pangoxft-private.h"
+
+/* For XExtSetCloseDisplay */
+#include <X11/Xlibint.h>
+
+typedef struct _PangoXftFamily       PangoXftFamily;
+typedef struct _PangoXftFontMapClass PangoXftFontMapClass;
+
+#define PANGO_TYPE_XFT_FONT_MAP              (pango_xft_font_map_get_type ())
+#define PANGO_XFT_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT_MAP, PangoXftFontMap))
+#define PANGO_XFT_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT_MAP))
+
+struct _PangoXftFontMap
+{
+  PangoFcFontMap parent_instance;
+
+  Display *display;
+  int screen;
+
+  /* Function to call on prepared patterns to do final
+   * config tweaking.
+   */
+  PangoXftSubstituteFunc substitute_func;
+  gpointer substitute_data;
+  GDestroyNotify substitute_destroy;
+
+  PangoRenderer *renderer;
+};
+
+struct _PangoXftFontMapClass
+{
+  PangoFcFontMapClass parent_class;
+};
+
+static void          pango_xft_font_map_default_substitute (PangoFcFontMap       *fcfontmap,
+                                                           FcPattern            *pattern);
+static PangoFcFont * pango_xft_font_map_new_font           (PangoFcFontMap       *fcfontmap,
+                                                           FcPattern            *pattern);
+static void          pango_xft_font_map_finalize           (GObject              *object);
+
+static GSList *fontmaps = NULL;
+
+G_DEFINE_TYPE (PangoXftFontMap, pango_xft_font_map, PANGO_TYPE_FC_FONT_MAP)
+
+static void
+pango_xft_font_map_class_init (PangoXftFontMapClass *class)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+  PangoFcFontMapClass *fcfontmap_class = PANGO_FC_FONT_MAP_CLASS (class);
+
+  gobject_class->finalize  = pango_xft_font_map_finalize;
+  fcfontmap_class->default_substitute = pango_xft_font_map_default_substitute;
+  fcfontmap_class->new_font = pango_xft_font_map_new_font;
+}
+
+static void
+pango_xft_font_map_init (PangoXftFontMap *xftfontmap G_GNUC_UNUSED)
+{
+}
+
+static void
+pango_xft_font_map_finalize (GObject *object)
+{
+  PangoXftFontMap *xftfontmap = PANGO_XFT_FONT_MAP (object);
+
+  if (xftfontmap->renderer)
+    g_object_unref (xftfontmap->renderer);
+
+  fontmaps = g_slist_remove (fontmaps, object);
+
+  if (xftfontmap->substitute_destroy)
+    xftfontmap->substitute_destroy (xftfontmap->substitute_data);
+
+  G_OBJECT_CLASS (pango_xft_font_map_parent_class)->finalize (object);
+}
+
+
+static PangoFontMap *
+pango_xft_find_font_map (Display *display,
+                        int      screen)
+{
+  GSList *tmp_list;
+
+  tmp_list = fontmaps;
+  while (tmp_list)
+    {
+      PangoXftFontMap *xftfontmap = tmp_list->data;
+
+      if (xftfontmap->display == display &&
+         xftfontmap->screen == screen)
+       return PANGO_FONT_MAP (xftfontmap);
+
+      tmp_list = tmp_list->next;
+    }
+
+  return NULL;
+}
+
+/*
+ * Hackery to set up notification when a Display is closed
+ */
+static GSList *registered_displays;
+
+static int
+close_display_cb (Display   *display,
+                 XExtCodes *extcodes G_GNUC_UNUSED)
+{
+  GSList *tmp_list;
+
+  tmp_list = fontmaps;
+  while (tmp_list)
+    {
+      PangoXftFontMap *xftfontmap = tmp_list->data;
+      tmp_list = tmp_list->next;
+
+      if (xftfontmap->display == display)
+       pango_xft_shutdown_display (display, xftfontmap->screen);
+    }
+
+  registered_displays = g_slist_remove (registered_displays, display);
+
+  return 0;
+}
+
+static void
+register_display (Display *display)
+{
+  XExtCodes *extcodes;
+  GSList *tmp_list;
+
+  for (tmp_list = registered_displays; tmp_list; tmp_list = tmp_list->next)
+    {
+      if (tmp_list->data == display)
+       return;
+    }
+
+  registered_displays = g_slist_prepend (registered_displays, display);
+
+  extcodes = XAddExtension (display);
+  XESetCloseDisplay (display, extcodes->extension, close_display_cb);
+}
+
+/**
+ * pango_xft_get_font_map:
+ * @display: an X display
+ * @screen: the screen number of a screen within @display
+ *
+ * Returns the #PangoXftFontmap for the given display and screen.
+ * The fontmap is owned by Pango and will be valid until
+ * the display is closed.
+ *
+ * Return value: a #PangoFontMap object, owned by Pango.
+ *
+ * Since: 1.2
+ **/
+PangoFontMap *
+pango_xft_get_font_map (Display *display,
+                       int      screen)
+{
+  PangoFontMap *fontmap;
+  PangoXftFontMap *xftfontmap;
+
+  g_return_val_if_fail (display != NULL, NULL);
+
+  fontmap = pango_xft_find_font_map (display, screen);
+  if (fontmap)
+    return fontmap;
+
+  /* Make sure that the type system is initialized */
+  g_type_init ();
+
+  xftfontmap = (PangoXftFontMap *)g_object_new (PANGO_TYPE_XFT_FONT_MAP, NULL);
+
+  xftfontmap->display = display;
+  xftfontmap->screen = screen;
+
+  register_display (display);
+
+  fontmaps = g_slist_prepend (fontmaps, xftfontmap);
+
+  return PANGO_FONT_MAP (xftfontmap);
+}
+
+/**
+ * pango_xft_shutdown_display:
+ * @display: an X display
+ * @screen: the screen number of a screen within @display
+ *
+ * Release any resources that have been cached for the
+ * combination of @display and @screen. Note that when the
+ * X display is closed, resources are released automatically,
+ * without needing to call this function.
+ *
+ * Since: 1.2
+ **/
+void
+pango_xft_shutdown_display (Display *display,
+                           int      screen)
+{
+  PangoFontMap *fontmap;
+
+  fontmap = pango_xft_find_font_map (display, screen);
+  if (fontmap)
+    {
+      PangoXftFontMap *xftfontmap = PANGO_XFT_FONT_MAP (fontmap);
+
+      fontmaps = g_slist_remove (fontmaps, fontmap);
+      pango_fc_font_map_shutdown (PANGO_FC_FONT_MAP (fontmap));
+
+      xftfontmap->display = NULL;
+      g_object_unref (fontmap);
+    }
+}
+
+/**
+ * pango_xft_set_default_substitute:
+ * @display: an X Display
+ * @screen: the screen number of a screen within @display
+ * @func: function to call to to do final config tweaking
+ *        on #FcPattern objects.
+ * @data: data to pass to @func
+ * @notify: function to call when @data is no longer used.
+ *
+ * Sets a function that will be called to do final configuration
+ * substitution on a #FcPattern before it is used to load
+ * the font. This function can be used to do things like set
+ * hinting and antialiasing options.
+ *
+ * Since: 1.2
+ **/
+void
+pango_xft_set_default_substitute (Display                *display,
+                                 int                     screen,
+                                 PangoXftSubstituteFunc  func,
+                                 gpointer                data,
+                                 GDestroyNotify          notify)
+{
+  PangoXftFontMap *xftfontmap = (PangoXftFontMap *)pango_xft_get_font_map (display, screen);
+
+  if (xftfontmap->substitute_destroy)
+    xftfontmap->substitute_destroy (xftfontmap->substitute_data);
+
+  xftfontmap->substitute_func = func;
+  xftfontmap->substitute_data = data;
+  xftfontmap->substitute_destroy = notify;
+
+  pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (xftfontmap));
+}
+
+/**
+ * pango_xft_substitute_changed:
+ * @display: an X Display
+ * @screen: the screen number of a screen within @display
+ *
+ * Call this function any time the results of the
+ * default substitution function set with
+ * pango_xft_set_default_substitute() change.
+ * That is, if your substitution function will return different
+ * results for the same input pattern, you must call this function.
+ *
+ * Since: 1.2
+ **/
+void
+pango_xft_substitute_changed (Display *display,
+                             int      screen)
+{
+  PangoXftFontMap *xftfontmap = (PangoXftFontMap *)pango_xft_get_font_map (display, screen);
+
+  pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (xftfontmap));
+}
+
+void
+_pango_xft_font_map_get_info (PangoFontMap *fontmap,
+                             Display     **display,
+                             int          *screen)
+{
+  PangoXftFontMap *xftfontmap = (PangoXftFontMap *)fontmap;
+
+  if (display)
+    *display = xftfontmap->display;
+  if (screen)
+    *screen = xftfontmap->screen;
+}
+
+/**
+ * pango_xft_get_context:
+ * @display: an X display.
+ * @screen: an X screen.
+ *
+ * Retrieves a #PangoContext appropriate for rendering with
+ * Xft fonts on the given screen of the given display.
+ *
+ * Return value: the new #PangoContext.
+ *
+ * Deprecated: 1.22: Use pango_xft_get_font_map() followed by
+ * pango_font_map_create_context() instead.
+ **/
+PangoContext *
+pango_xft_get_context (Display *display,
+                      int      screen)
+{
+  g_return_val_if_fail (display != NULL, NULL);
+
+  return pango_font_map_create_context (pango_xft_get_font_map (display, screen));
+}
+
+/**
+ * _pango_xft_font_map_get_renderer:
+ * @fontmap: a #PangoXftFontmap
+ *
+ * Gets the singleton #PangoXFTRenderer for this fontmap.
+ *
+ * Return value: the renderer.
+ **/
+PangoRenderer *
+_pango_xft_font_map_get_renderer (PangoXftFontMap *xftfontmap)
+{
+  if (!xftfontmap->renderer)
+    xftfontmap->renderer = pango_xft_renderer_new (xftfontmap->display,
+                                                  xftfontmap->screen);
+
+  return xftfontmap->renderer;
+}
+
+static void
+pango_xft_font_map_default_substitute (PangoFcFontMap *fcfontmap,
+                                      FcPattern      *pattern)
+{
+  PangoXftFontMap *xftfontmap = PANGO_XFT_FONT_MAP (fcfontmap);
+  double d;
+
+  FcConfigSubstitute (NULL, pattern, FcMatchPattern);
+  if (xftfontmap->substitute_func)
+    xftfontmap->substitute_func (pattern, xftfontmap->substitute_data);
+  XftDefaultSubstitute (xftfontmap->display, xftfontmap->screen, pattern);
+  if (FcPatternGetDouble (pattern, FC_PIXEL_SIZE, 0, &d) == FcResultMatch && d == 0.0)
+    {
+      FcValue v;
+      v.type = FcTypeDouble;
+      v.u.d = 1.0;
+      FcPatternAdd (pattern, FC_PIXEL_SIZE, v, FcFalse);
+    }
+}
+
+static PangoFcFont *
+pango_xft_font_map_new_font (PangoFcFontMap  *fcfontmap,
+                            FcPattern       *pattern)
+{
+  return (PangoFcFont *)_pango_xft_font_new (PANGO_XFT_FONT_MAP (fcfontmap), pattern);
+}
diff --git a/pango/pangoxft-private.h b/pango/pangoxft-private.h
new file mode 100755 (executable)
index 0000000..fb1c244
--- /dev/null
@@ -0,0 +1,60 @@
+/* Pango
+ * pangox-private.h:
+ *
+ * Copyright (C) 2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOXFT_PRIVATE_H__
+#define __PANGOXFT_PRIVATE_H__
+
+#include <pango/pangoxft.h>
+#include <pango/pango-renderer.h>
+
+G_BEGIN_DECLS
+
+struct _PangoXftFont
+{
+  PangoFcFont parent_instance;
+
+  XftFont *xft_font;               /* created on demand */
+  PangoFont *mini_font;                    /* font used to display missing glyphs */
+
+  guint mini_width;                /* metrics for missing glyph drawing */
+  guint mini_height;
+  guint mini_pad;
+
+  GHashTable *glyph_info;          /* Used only when we can't get
+                                    * glyph extents out of Xft because
+                                    * we have a transformation in effect
+                                    */
+};
+
+PangoXftFont *_pango_xft_font_new          (PangoXftFontMap  *xftfontmap,
+                                           FcPattern        *pattern);
+
+void          _pango_xft_font_map_get_info (PangoFontMap     *fontmap,
+                                           Display         **display,
+                                           int              *screen);
+
+PangoRenderer *_pango_xft_font_map_get_renderer (PangoXftFontMap *xftfontmap);
+
+PangoFont *_pango_xft_font_get_mini_font (PangoXftFont *xfont);
+
+G_END_DECLS
+
+#endif /* __PANGOXFT_PRIVATE_H__ */
diff --git a/pango/pangoxft-render.c b/pango/pangoxft-render.c
new file mode 100755 (executable)
index 0000000..855d332
--- /dev/null
@@ -0,0 +1,966 @@
+/* Pango
+ * pangoxft-render.c: Rendering routines for the Xft library
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <math.h>
+
+#include "pangoxft-render.h"
+#include "pangoxft-private.h"
+
+enum {
+  PROP_0,
+  PROP_DISPLAY,
+  PROP_SCREEN
+};
+
+struct _PangoXftRendererPrivate
+{
+  PangoColor default_color;
+  guint16 alpha;
+
+  Picture src_picture;
+  Picture dest_picture;
+
+  XRenderPictFormat *mask_format;
+
+  GArray *trapezoids;
+  PangoRenderPart trapezoid_part;
+
+  GArray *glyphs;
+  PangoFont *glyph_font;
+};
+
+static void pango_xft_renderer_finalize     (GObject      *object);
+static void pango_xft_renderer_set_property (GObject      *object,
+                                            guint         prop_id,
+                                            const GValue *value,
+                                            GParamSpec   *pspec);
+
+static void pango_xft_renderer_real_composite_trapezoids (PangoXftRenderer *xftrenderer,
+                                                         PangoRenderPart   part,
+                                                         XTrapezoid       *trapezoids,
+                                                         int               n_trapezoids);
+static void pango_xft_renderer_real_composite_glyphs     (PangoXftRenderer *xftrenderer,
+                                                         XftFont          *xft_font,
+                                                         XftGlyphSpec     *glyphs,
+                                                         int               n_glyphs);
+
+static void pango_xft_renderer_draw_glyphs    (PangoRenderer    *renderer,
+                                              PangoFont        *font,
+                                              PangoGlyphString *glyphs,
+                                              int               x,
+                                              int               y);
+static void pango_xft_renderer_draw_trapezoid (PangoRenderer    *renderer,
+                                              PangoRenderPart   part,
+                                              double            y1,
+                                              double            x11,
+                                              double            x21,
+                                              double            y2,
+                                              double            x12,
+                                              double            x22);
+static void pango_xft_renderer_part_changed   (PangoRenderer    *renderer,
+                                              PangoRenderPart   part);
+static void pango_xft_renderer_end            (PangoRenderer    *renderer);
+
+static void flush_trapezoids (PangoXftRenderer *xftrenderer);
+static void flush_glyphs (PangoXftRenderer *xftrenderer);
+
+G_DEFINE_TYPE (PangoXftRenderer, pango_xft_renderer, PANGO_TYPE_RENDERER)
+
+static void
+pango_xft_renderer_init (PangoXftRenderer *xftrenderer)
+{
+  xftrenderer->priv = G_TYPE_INSTANCE_GET_PRIVATE (xftrenderer,
+                                                  PANGO_TYPE_XFT_RENDERER,
+                                                  PangoXftRendererPrivate);
+  xftrenderer->priv->alpha = 0xffff;
+}
+
+static void
+pango_xft_renderer_class_init (PangoXftRendererClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass);
+
+  klass->composite_glyphs = pango_xft_renderer_real_composite_glyphs;
+  klass->composite_trapezoids = pango_xft_renderer_real_composite_trapezoids;
+
+  renderer_class->draw_glyphs = pango_xft_renderer_draw_glyphs;
+  renderer_class->draw_trapezoid = pango_xft_renderer_draw_trapezoid;
+  renderer_class->part_changed = pango_xft_renderer_part_changed;
+  renderer_class->end = pango_xft_renderer_end;
+
+  object_class->finalize = pango_xft_renderer_finalize;
+  object_class->set_property = pango_xft_renderer_set_property;
+
+  g_object_class_install_property (object_class, PROP_DISPLAY,
+                                  g_param_spec_pointer ("display",
+                                                        "Display",
+                                                        "The display being rendered to",
+                                                        G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+  g_object_class_install_property (object_class, PROP_SCREEN,
+                                  g_param_spec_int ("screen",
+                                                    "Screen",
+                                                    "The screen being rendered to",
+                                                    0, G_MAXINT, 0,
+                                                    G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+
+  g_type_class_add_private (object_class, sizeof (PangoXftRendererPrivate));
+}
+
+static void
+pango_xft_renderer_finalize (GObject *object)
+{
+  PangoXftRenderer *renderer = PANGO_XFT_RENDERER (object);
+
+  if (renderer->priv->glyphs)
+    g_array_free (renderer->priv->glyphs, TRUE);
+  if (renderer->priv->trapezoids)
+    g_array_free (renderer->priv->trapezoids, TRUE);
+
+  G_OBJECT_CLASS (pango_xft_renderer_parent_class)->finalize (object);
+}
+
+static void
+pango_xft_renderer_set_property (GObject      *object,
+                                guint         prop_id,
+                                const GValue *value,
+                                GParamSpec   *pspec)
+{
+  PangoXftRenderer *xftrenderer = PANGO_XFT_RENDERER (object);
+
+  switch (prop_id)
+    {
+    case PROP_DISPLAY:
+      xftrenderer->display = g_value_get_pointer (value);
+      /* We possibly should use ARGB format when subpixel-AA is turned
+       * on for the fontmap; we could discover that using the technique
+       * for FC_DPI in pango_fc_face_list_sizes.
+       */
+      xftrenderer->priv->mask_format = XRenderFindStandardFormat (xftrenderer->display,
+                                                                 PictStandardA8);
+      break;
+    case PROP_SCREEN:
+      xftrenderer->screen = g_value_get_int (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+pango_xft_renderer_set_pictures (PangoXftRenderer *renderer,
+                                Picture           src_picture,
+                                Picture           dest_picture)
+{
+  renderer->priv->src_picture = src_picture;
+  renderer->priv->dest_picture = dest_picture;
+}
+
+static void
+flush_glyphs (PangoXftRenderer *xftrenderer)
+{
+  XftFont *xft_font;
+
+  if (!xftrenderer->priv->glyphs ||
+      xftrenderer->priv->glyphs->len == 0)
+    return;
+
+  xft_font = pango_xft_font_get_font (xftrenderer->priv->glyph_font);
+
+  PANGO_XFT_RENDERER_GET_CLASS (xftrenderer)->composite_glyphs (xftrenderer,
+                                                               xft_font,
+                                                               (XftGlyphSpec *)xftrenderer->priv->glyphs->data,
+                                                               xftrenderer->priv->glyphs->len);
+
+  g_array_set_size (xftrenderer->priv->glyphs, 0);
+  g_object_unref (xftrenderer->priv->glyph_font);
+  xftrenderer->priv->glyph_font = NULL;
+}
+
+#define MAX_GLYPHS     1024
+
+static void
+draw_glyph (PangoRenderer *renderer,
+           PangoFont     *font,
+           FT_UInt        glyph,
+           int            x,
+           int            y)
+{
+  PangoXftRenderer *xftrenderer = PANGO_XFT_RENDERER (renderer);
+  XftGlyphSpec gs;
+  int pixel_x, pixel_y;
+
+  if (renderer->matrix)
+    {
+      pixel_x = floor (0.5 + (x * renderer->matrix->xx + y * renderer->matrix->xy) / PANGO_SCALE + renderer->matrix->x0);
+      pixel_y = floor (0.5 + (x * renderer->matrix->yx + y * renderer->matrix->yy) / PANGO_SCALE + renderer->matrix->y0);
+    }
+  else
+    {
+      pixel_x = PANGO_PIXELS (x);
+      pixel_y = PANGO_PIXELS (y);
+    }
+
+  /* Clip glyphs into the X coordinate range; we really
+   * want to clip glyphs with an ink rect outside the
+   * [0,32767] x [0,32767] rectangle but looking up
+   * the ink rect here would be a noticeable speed hit.
+   * This is close enough.
+   */
+  if (pixel_x < -32768 || pixel_x > 32767 ||
+      pixel_y < -32768 || pixel_y > 32767)
+    return;
+
+  flush_trapezoids (xftrenderer);
+
+  if (!xftrenderer->priv->glyphs)
+    xftrenderer->priv->glyphs = g_array_new (FALSE, FALSE,
+                                            sizeof (XftGlyphSpec));
+
+  if (xftrenderer->priv->glyph_font != font ||
+      xftrenderer->priv->glyphs->len == MAX_GLYPHS)
+    {
+      flush_glyphs (xftrenderer);
+
+      xftrenderer->priv->glyph_font = g_object_ref (font);
+    }
+
+  gs.x = pixel_x;
+  gs.y = pixel_y;
+  gs.glyph = glyph;
+
+  g_array_append_val (xftrenderer->priv->glyphs, gs);
+}
+
+static gboolean
+point_in_bounds (PangoRenderer *renderer,
+                gint           x,
+                gint           y)
+{
+  gdouble pixel_x = (x * renderer->matrix->xx + y * renderer->matrix->xy) / PANGO_SCALE + renderer->matrix->x0;
+  gdouble pixel_y = (x * renderer->matrix->yx + y * renderer->matrix->yy) / PANGO_SCALE + renderer->matrix->y0;
+
+  return (pixel_x >= -32768. && pixel_x < 32768. &&
+         pixel_y >= -32768. && pixel_y < 32768.);
+}
+
+static gboolean
+box_in_bounds (PangoRenderer *renderer,
+              gint           x,
+              gint           y,
+              gint           width,
+              gint           height)
+{
+  if (!renderer->matrix)
+    {
+#define COORD_MIN (PANGO_SCALE * -16384 - PANGO_SCALE / 2)
+#define COORD_MAX (PANGO_SCALE * 32767 + PANGO_SCALE / 2 - 1)
+      return (x >= COORD_MIN && x + width <= COORD_MAX &&
+             y >= COORD_MIN && y + width <= COORD_MAX);
+#undef COORD_MIN
+#undef COORD_MAX
+    }
+  else
+    {
+      return (point_in_bounds (renderer, x, y) &&
+             point_in_bounds (renderer, x + width, y) &&
+             point_in_bounds (renderer, x + width, y + height) &&
+             point_in_bounds (renderer, x, y + height));
+    }
+}
+
+static void
+get_total_matrix (PangoMatrix       *total,
+                 const PangoMatrix *global,
+                 double             x,
+                 double             y,
+                 double             width,
+                 double             height)
+{
+  PangoMatrix local = PANGO_MATRIX_INIT;
+  gdouble angle = atan2 (height, width);
+
+  pango_matrix_translate (&local, x, y);
+  pango_matrix_rotate (&local, -angle * (180. / G_PI));
+
+  *total = *global;
+  pango_matrix_concat (total, &local);
+}
+
+static void
+draw_box (PangoRenderer *renderer,
+         gint           line_width,
+         gint           x,
+         gint           y,
+         gint           width,
+         gint           height,
+         gboolean       invalid)
+{
+  pango_renderer_draw_rectangle (renderer, PANGO_RENDER_PART_FOREGROUND,
+                                x, y, width, line_width);
+  pango_renderer_draw_rectangle (renderer, PANGO_RENDER_PART_FOREGROUND,
+                                x, y + line_width, line_width, height - line_width * 2);
+  pango_renderer_draw_rectangle (renderer, PANGO_RENDER_PART_FOREGROUND,
+                                x + width - line_width, y + line_width, line_width, height - line_width * 2);
+  pango_renderer_draw_rectangle (renderer, PANGO_RENDER_PART_FOREGROUND,
+                                x, y + height - line_width, width, line_width);
+
+  if (invalid)
+    {
+      int length;
+      double in_width, in_height;
+      PangoMatrix orig_matrix = PANGO_MATRIX_INIT, new_matrix;
+      const PangoMatrix *porig_matrix;
+
+      in_width  = pango_units_to_double (width  - 2 * line_width);
+      in_height = pango_units_to_double (height - 2 * line_width);
+      length = PANGO_SCALE * sqrt (in_width*in_width + in_height*in_height);
+
+      porig_matrix = pango_renderer_get_matrix (renderer);
+      if (porig_matrix)
+        {
+         orig_matrix = *porig_matrix;
+         porig_matrix = &orig_matrix;
+       }
+
+      get_total_matrix (&new_matrix, &orig_matrix,
+                       pango_units_to_double (x + line_width), pango_units_to_double (y + line_width),
+                       in_width, in_height);
+      pango_renderer_set_matrix (renderer, &new_matrix);
+      pango_renderer_draw_rectangle (renderer, PANGO_RENDER_PART_FOREGROUND,
+                                    0, -line_width / 2, length, line_width);
+
+      get_total_matrix (&new_matrix, &orig_matrix,
+                       pango_units_to_double (x + line_width), pango_units_to_double (y + height - line_width),
+                       in_width, -in_height);
+      pango_renderer_set_matrix (renderer, &new_matrix);
+      pango_renderer_draw_rectangle (renderer, PANGO_RENDER_PART_FOREGROUND,
+                                    0, -line_width / 2, length, line_width);
+
+      pango_renderer_set_matrix (renderer, porig_matrix);
+    }
+}
+
+static void
+_pango_xft_renderer_draw_box_glyph (PangoRenderer    *renderer,
+                                   PangoGlyphInfo   *gi,
+                                   int               glyph_x,
+                                   int               glyph_y,
+                                   gboolean          invalid)
+{
+  int x = glyph_x + PANGO_SCALE;
+  int y = glyph_y - PANGO_SCALE * (PANGO_UNKNOWN_GLYPH_HEIGHT - 1);
+  int width = gi->geometry.width - PANGO_SCALE * 2;
+  int height = PANGO_SCALE * (PANGO_UNKNOWN_GLYPH_HEIGHT - 2);
+
+  if (box_in_bounds (renderer, x, y, width, height))
+    draw_box (renderer, PANGO_SCALE, x, y, width, height, invalid);
+}
+
+static void
+_pango_xft_renderer_draw_unknown_glyph (PangoRenderer    *renderer,
+                                       PangoXftFont     *xfont,
+                                       XftFont          *xft_font,
+                                       PangoGlyphInfo   *gi,
+                                       int               glyph_x,
+                                       int               glyph_y)
+{
+  char buf[7];
+  int ys[3];
+  int xs[4];
+  int row, col;
+  int cols;
+  gunichar ch;
+  gboolean invalid_input;
+
+  PangoFont *mini_font;
+  XftFont *mini_xft_font;
+
+  ch = gi->glyph & ~PANGO_GLYPH_UNKNOWN_FLAG;
+  if (G_UNLIKELY (gi->glyph == PANGO_GLYPH_INVALID_INPUT || ch > 0x10FFFF))
+    {
+      invalid_input = TRUE;
+      cols = 1;
+    }
+  else
+    {
+      invalid_input = FALSE;
+      cols = ch > 0xffff ? 3 : 2;
+      g_snprintf (buf, sizeof(buf), (ch > 0xffff) ? "%06X" : "%04X", ch);
+    }
+
+  mini_font = _pango_xft_font_get_mini_font (xfont);
+  mini_xft_font = pango_xft_font_get_font (mini_font);
+  if (!mini_xft_font)
+    {
+      _pango_xft_renderer_draw_box_glyph (renderer, gi, glyph_x, glyph_y, invalid_input);
+      return;
+    }
+
+
+  ys[0] = glyph_y - PANGO_SCALE * xft_font->ascent + PANGO_SCALE * (((xft_font->ascent + xft_font->descent) - (xfont->mini_height * 2 + xfont->mini_pad * 5 + PANGO_SCALE / 2) / PANGO_SCALE) / 2);
+  ys[1] = ys[0] + 2 * xfont->mini_pad + xfont->mini_height;
+  ys[2] = ys[1] + xfont->mini_height + xfont->mini_pad;
+
+  xs[0] = glyph_x;
+  xs[1] = xs[0] + 2 * xfont->mini_pad;
+  xs[2] = xs[1] + xfont->mini_width + xfont->mini_pad;
+  xs[3] = xs[2] + xfont->mini_width + xfont->mini_pad;
+
+  if (box_in_bounds (renderer,
+                    xs[0], ys[0],
+                    xfont->mini_width * cols + xfont->mini_pad * (2 * cols + 1),
+                    xfont->mini_height * 2 + xfont->mini_pad * 5))
+    {
+      if (xfont->mini_pad)
+       draw_box (renderer, xfont->mini_pad,
+                 xs[0], ys[0],
+                 xfont->mini_width * cols + xfont->mini_pad * (2 * cols + 1),
+                 xfont->mini_height * 2 + xfont->mini_pad * 5,
+                 invalid_input);
+
+      if (invalid_input)
+        return;
+
+      for (row = 0; row < 2; row++)
+       for (col = 0; col < cols; col++)
+         {
+           draw_glyph (renderer, mini_font,
+                       XftCharIndex (NULL, mini_xft_font,
+                                     buf[row * cols + col] & 0xff),
+                       xs[col+1],
+                       ys[row+1]);
+         }
+    }
+}
+
+static void
+pango_xft_renderer_draw_glyphs (PangoRenderer    *renderer,
+                               PangoFont        *font,
+                               PangoGlyphString *glyphs,
+                               int               x,
+                               int               y)
+{
+  PangoXftFont *xfont = PANGO_XFT_FONT (font);
+  PangoFcFont *fcfont = PANGO_FC_FONT (font);
+  XftFont *xft_font = pango_xft_font_get_font (font);
+  int i;
+  int x_off = 0;
+
+  if (!fcfont)
+    {
+      for (i=0; i<glyphs->num_glyphs; i++)
+       {
+         PangoGlyphInfo *gi = &glyphs->glyphs[i];
+
+         if (gi->glyph != PANGO_GLYPH_EMPTY)
+           {
+             int glyph_x = x + x_off + gi->geometry.x_offset;
+             int glyph_y = y + gi->geometry.y_offset;
+
+             _pango_xft_renderer_draw_unknown_glyph (renderer,
+                                                     xfont,
+                                                     xft_font,
+                                                     gi,
+                                                     glyph_x,
+                                                     glyph_y);
+           }
+
+         x_off += gi->geometry.width;
+       }
+      return;
+    }
+
+  if (!fcfont->fontmap)        /* Display closed */
+    return;
+
+  for (i=0; i<glyphs->num_glyphs; i++)
+    {
+      PangoGlyphInfo *gi = &glyphs->glyphs[i];
+
+      if (gi->glyph != PANGO_GLYPH_EMPTY)
+       {
+         int glyph_x = x + x_off + gi->geometry.x_offset;
+         int glyph_y = y + gi->geometry.y_offset;
+
+         if (gi->glyph & PANGO_GLYPH_UNKNOWN_FLAG)
+           {
+             _pango_xft_renderer_draw_unknown_glyph (renderer,
+                                                     xfont,
+                                                     xft_font,
+                                                     gi,
+                                                     glyph_x,
+                                                     glyph_y);
+           }
+         else
+           {
+             draw_glyph (renderer, font, gi->glyph, glyph_x, glyph_y);
+           }
+       }
+
+      x_off += gi->geometry.width;
+    }
+}
+
+static void
+flush_trapezoids (PangoXftRenderer *xftrenderer)
+{
+  if (!xftrenderer->priv->trapezoids ||
+      xftrenderer->priv->trapezoids->len == 0)
+    return;
+
+  PANGO_XFT_RENDERER_GET_CLASS (xftrenderer)->composite_trapezoids (xftrenderer,
+                                                                   xftrenderer->priv->trapezoid_part,
+                                                                   (XTrapezoid *)xftrenderer->priv->trapezoids->data,
+                                                                   xftrenderer->priv->trapezoids->len);
+
+  g_array_set_size (xftrenderer->priv->trapezoids, 0);
+}
+
+static void
+pango_xft_renderer_draw_trapezoid (PangoRenderer   *renderer,
+                                  PangoRenderPart  part,
+                                  double           y1,
+                                  double           x11,
+                                  double           x21,
+                                  double           y2,
+                                  double           x12,
+                                  double           x22)
+{
+  PangoXftRenderer *xftrenderer = PANGO_XFT_RENDERER (renderer);
+  XTrapezoid trap;
+
+  flush_glyphs (xftrenderer);
+
+  if (!xftrenderer->priv->trapezoids)
+    xftrenderer->priv->trapezoids = g_array_new (FALSE, FALSE,
+                                                sizeof (XTrapezoid));
+
+  if (xftrenderer->draw)
+    {
+      if (xftrenderer->priv->trapezoids->len > 0 &&
+         xftrenderer->priv->trapezoid_part != part)
+       flush_trapezoids (xftrenderer);
+
+      xftrenderer->priv->trapezoid_part = part;
+    }
+
+  trap.top = XDoubleToFixed (y1);
+  trap.bottom = XDoubleToFixed (y2);
+  trap.left.p1.x = XDoubleToFixed (x11);
+  trap.left.p1.y = XDoubleToFixed (y1);
+  trap.left.p2.x = XDoubleToFixed (x12);
+  trap.left.p2.y = XDoubleToFixed (y2);
+  trap.right.p1.x = XDoubleToFixed (x21);
+  trap.right.p1.y = XDoubleToFixed (y1);
+  trap.right.p2.x = XDoubleToFixed (x22);
+  trap.right.p2.y = XDoubleToFixed (y2);
+
+  g_array_append_val (xftrenderer->priv->trapezoids, trap);
+}
+
+static void
+pango_xft_renderer_part_changed (PangoRenderer   *renderer,
+                                PangoRenderPart  part)
+{
+  PangoXftRenderer *xftrenderer = PANGO_XFT_RENDERER (renderer);
+
+  if (part == PANGO_RENDER_PART_FOREGROUND)
+    flush_glyphs (xftrenderer);
+
+  if (part == xftrenderer->priv->trapezoid_part)
+    flush_trapezoids (xftrenderer);
+}
+
+static void
+pango_xft_renderer_end (PangoRenderer *renderer)
+{
+  PangoXftRenderer *xftrenderer = PANGO_XFT_RENDERER (renderer);
+
+  flush_glyphs (xftrenderer);
+  flush_trapezoids (xftrenderer);
+}
+
+static void
+pango_xft_renderer_real_composite_trapezoids (PangoXftRenderer *xftrenderer,
+                                             PangoRenderPart   part,
+                                             XTrapezoid       *trapezoids,
+                                             int               n_trapezoids)
+{
+  Picture src_picture;
+  Picture dest_picture;
+
+  if (!XftDefaultHasRender (xftrenderer->display))
+      return;
+
+  if (xftrenderer->priv->src_picture != None)
+    {
+      src_picture = xftrenderer->priv->src_picture;
+      dest_picture = xftrenderer->priv->dest_picture;
+    }
+  else
+    {
+      XftColor xft_color;
+      PangoColor *color = pango_renderer_get_color (PANGO_RENDERER (xftrenderer),
+                                                   part);
+      if (!color)
+       color = &xftrenderer->priv->default_color;
+
+      xft_color.color.red = color->red;
+      xft_color.color.green = color->green;
+      xft_color.color.blue = color->blue;
+      xft_color.color.alpha = xftrenderer->priv->alpha;
+
+      src_picture = XftDrawSrcPicture (xftrenderer->draw, &xft_color);
+      dest_picture = XftDrawPicture (xftrenderer->draw);
+    }
+
+  XRenderCompositeTrapezoids (xftrenderer->display,
+                             PictOpOver,
+                             src_picture, dest_picture,
+                             xftrenderer->priv->mask_format,
+                             0, 0,
+                             trapezoids, n_trapezoids);
+}
+
+static void
+pango_xft_renderer_real_composite_glyphs (PangoXftRenderer *xftrenderer,
+                                         XftFont          *xft_font,
+                                         XftGlyphSpec     *glyphs,
+                                         int               n_glyphs)
+{
+  if (xftrenderer->priv->src_picture != None)
+    {
+      XftGlyphSpecRender (xftrenderer->display, PictOpOver,
+                         xftrenderer->priv->src_picture,
+                         xft_font,
+                         xftrenderer->priv->dest_picture, 0, 0,
+                         glyphs, n_glyphs);
+    }
+  else
+    {
+      XftColor xft_color;
+      PangoColor *color = pango_renderer_get_color (PANGO_RENDERER (xftrenderer),
+                                                   PANGO_RENDER_PART_FOREGROUND);
+      if (!color)
+       color = &xftrenderer->priv->default_color;
+
+      xft_color.color.red = color->red;
+      xft_color.color.green = color->green;
+      xft_color.color.blue = color->blue;
+      xft_color.color.alpha = xftrenderer->priv->alpha;
+
+      XftDrawGlyphSpec (xftrenderer->draw, &xft_color,
+                       xft_font,
+                       glyphs, n_glyphs);
+    }
+}
+
+static PangoRenderer *
+get_renderer (PangoFontMap *fontmap,
+             XftDraw      *draw,
+             XftColor     *color)
+{
+  PangoRenderer *renderer;
+  PangoXftRenderer *xftrenderer;
+  PangoColor pango_color;
+
+  renderer = _pango_xft_font_map_get_renderer (PANGO_XFT_FONT_MAP (fontmap));
+  xftrenderer = PANGO_XFT_RENDERER (renderer);
+
+  pango_xft_renderer_set_draw (xftrenderer, draw);
+
+  pango_color.red = color->color.red;
+  pango_color.green = color->color.green;
+  pango_color.blue = color->color.blue;
+  pango_xft_renderer_set_default_color (xftrenderer, &pango_color);
+  xftrenderer->priv->alpha = color->color.alpha;
+
+  return renderer;
+}
+
+static void
+release_renderer (PangoRenderer *renderer)
+{
+  PangoXftRenderer *xftrenderer = PANGO_XFT_RENDERER (renderer);
+
+  xftrenderer->priv->alpha = 0xffff;
+}
+
+/**
+ * pango_xft_render_layout:
+ * @draw:      an #XftDraw
+ * @color:     the foreground color in which to draw the layout
+ *             (may be overridden by color attributes)
+ * @layout:    a #PangoLayout
+ * @x:         the X position of the left of the layout (in Pango units)
+ * @y:         the Y position of the top of the layout (in Pango units)
+ *
+ * Render a #PangoLayout onto a #XftDraw
+ *
+ * Since: 1.8
+ */
+void
+pango_xft_render_layout (XftDraw     *draw,
+                        XftColor    *color,
+                        PangoLayout *layout,
+                        int          x,
+                        int          y)
+{
+  PangoContext *context;
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (draw != NULL);
+  g_return_if_fail (color != NULL);
+  g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+  context = pango_layout_get_context (layout);
+  fontmap = pango_context_get_font_map (context);
+  renderer = get_renderer (fontmap, draw, color);
+
+  pango_renderer_draw_layout (renderer, layout, x, y);
+
+  release_renderer (renderer);
+}
+
+/**
+ * pango_xft_render_layout_line:
+ * @draw:      an #XftDraw
+ * @color:     the foreground color in which to draw the layout line
+ *             (may be overridden by color attributes)
+ * @line:      a #PangoLayoutLine
+ * @x:         the x position of start of string (in Pango units)
+ * @y:         the y position of baseline (in Pango units)
+ *
+ * Render a #PangoLayoutLine onto a #XftDraw
+ *
+ * Since: 1.8
+ */
+void
+pango_xft_render_layout_line (XftDraw         *draw,
+                             XftColor        *color,
+                             PangoLayoutLine *line,
+                             int              x,
+                             int              y)
+{
+  PangoContext *context;
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (draw != NULL);
+  g_return_if_fail (color != NULL);
+  g_return_if_fail (line != NULL);
+
+  context = pango_layout_get_context (line->layout);
+  fontmap = pango_context_get_font_map (context);
+  renderer = get_renderer (fontmap, draw, color);
+
+  pango_renderer_draw_layout_line (renderer, line, x, y);
+
+  release_renderer (renderer);
+}
+
+/**
+ * pango_xft_render_transformed:
+ * @draw:    an #XftDraw
+ * @color:   the color in which to draw the glyphs
+ * @font:    the font in which to draw the string
+ * @matrix:  a #PangoMatrix, or %NULL to use an identity transformation
+ * @glyphs:  the glyph string to draw
+ * @x:       the x position of the start of the string (in Pango
+ *           units in user space coordinates)
+ * @y:       the y position of the baseline (in Pango units
+ *           in user space coordinates)
+ *
+ * Renders a #PangoGlyphString onto a #XftDraw, possibly
+ * transforming the layed-out coordinates through a transformation
+ * matrix. Note that the transformation matrix for @font is not
+ * changed, so to produce correct rendering results, the @font
+ * must have been loaded using a #PangoContext with an identical
+ * transformation matrix to that passed in to this function.
+ *
+ * Since: 1.8
+ **/
+void
+pango_xft_render_transformed (XftDraw          *draw,
+                             XftColor         *color,
+                             PangoMatrix      *matrix,
+                             PangoFont        *font,
+                             PangoGlyphString *glyphs,
+                             int               x,
+                             int               y)
+{
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (draw != NULL);
+  g_return_if_fail (color != NULL);
+  g_return_if_fail (PANGO_XFT_IS_FONT (font));
+  g_return_if_fail (glyphs != NULL);
+
+  fontmap = PANGO_FC_FONT (font)->fontmap;
+  renderer = get_renderer (fontmap, draw, color);
+
+  pango_renderer_set_matrix (renderer, matrix);
+
+  pango_renderer_draw_glyphs (renderer, font, glyphs, x, y);
+
+  release_renderer (renderer);
+}
+
+/**
+ * pango_xft_render:
+ * @draw:    the <type>XftDraw</type> object.
+ * @color:   the color in which to draw the string
+ * @font:    the font in which to draw the string
+ * @glyphs:  the glyph string to draw
+ * @x:       the x position of start of string (in pixels)
+ * @y:       the y position of baseline (in pixels)
+ *
+ * Renders a #PangoGlyphString onto an <type>XftDraw</type> object wrapping an X drawable.
+ */
+void
+pango_xft_render (XftDraw          *draw,
+                 XftColor         *color,
+                 PangoFont        *font,
+                 PangoGlyphString *glyphs,
+                 gint              x,
+                 gint              y)
+{
+  g_return_if_fail (draw != NULL);
+  g_return_if_fail (color != NULL);
+  g_return_if_fail (PANGO_XFT_IS_FONT (font));
+  g_return_if_fail (glyphs != NULL);
+
+  pango_xft_render_transformed (draw, color, NULL, font, glyphs,
+                               x * PANGO_SCALE, y * PANGO_SCALE);
+}
+
+/**
+ * pango_xft_picture_render:
+ * @display:      an X display
+ * @src_picture:  the source picture to draw the string with
+ * @dest_picture: the destination picture to draw the string onto
+ * @font:         the font in which to draw the string
+ * @glyphs:       the glyph string to draw
+ * @x:            the x position of start of string (in pixels)
+ * @y:            the y position of baseline (in pixels)
+ *
+ * Renders a #PangoGlyphString onto an Xrender <type>Picture</type> object.
+ */
+void
+pango_xft_picture_render (Display          *display,
+                         Picture           src_picture,
+                         Picture           dest_picture,
+                         PangoFont        *font,
+                         PangoGlyphString *glyphs,
+                         gint              x,
+                         gint              y)
+{
+  PangoFontMap *fontmap;
+  PangoRenderer *renderer;
+
+  g_return_if_fail (display != NULL);
+  g_return_if_fail (src_picture != None);
+  g_return_if_fail (dest_picture != None);
+  g_return_if_fail (PANGO_XFT_IS_FONT (font));
+  g_return_if_fail (glyphs != NULL);
+
+  fontmap = PANGO_FC_FONT (font)->fontmap;
+  renderer = _pango_xft_font_map_get_renderer (PANGO_XFT_FONT_MAP (fontmap));
+
+  pango_xft_renderer_set_pictures (PANGO_XFT_RENDERER (renderer),
+                                  src_picture, dest_picture);
+  pango_renderer_set_matrix (renderer, NULL);
+
+  pango_renderer_draw_glyphs (renderer, font, glyphs, x * PANGO_SCALE, y * PANGO_SCALE);
+
+  pango_xft_renderer_set_pictures (PANGO_XFT_RENDERER (renderer),
+                                  None, None);
+}
+
+/**
+ * pango_xft_renderer_new:
+ * @display: an X display
+ * @screen:   the index of the screen for @display to which rendering will be done
+ *
+ * Create a new #PangoXftRenderer to allow rendering Pango objects
+ * with the Xft library. You must call pango_xft_renderer_set_draw() before
+ * using the renderer.
+ *
+ * Return value: the newly created #PangoXftRenderer, which should
+ *               be freed with g_object_unref().
+ *
+ * Since: 1.8
+ **/
+PangoRenderer *
+pango_xft_renderer_new (Display *display,
+                       int      screen)
+{
+  PangoXftRenderer *xftrenderer;
+
+  xftrenderer = g_object_new (PANGO_TYPE_XFT_RENDERER,
+                             "display", display,
+                             "screen", screen,
+                             NULL);
+
+  return PANGO_RENDERER (xftrenderer);
+}
+
+/**
+ * pango_xft_renderer_set_draw:
+ * @xftrenderer: a #PangoXftRenderer
+ * @draw: a #XftDraw
+ *
+ * Sets the #XftDraw object that the renderer is drawing to.
+ * The renderer must not be currently active.
+ *
+ * Since: 1.8
+ **/
+void
+pango_xft_renderer_set_draw (PangoXftRenderer *xftrenderer,
+                            XftDraw          *draw)
+{
+  g_return_if_fail (PANGO_IS_XFT_RENDERER (xftrenderer));
+
+  xftrenderer->draw = draw;
+}
+
+/**
+ * pango_xft_renderer_set_default_color:
+ * @xftrenderer: a #XftRenderer
+ * @default_color: the default foreground color
+ *
+ * Sets the default foreground color for a #XftRenderer.
+ *
+ * Since: 1.8
+ **/
+void
+pango_xft_renderer_set_default_color (PangoXftRenderer *xftrenderer,
+                                     PangoColor       *default_color)
+{
+  g_return_if_fail (PANGO_IS_XFT_RENDERER (xftrenderer));
+
+  xftrenderer->priv->default_color = *default_color;
+}
diff --git a/pango/pangoxft-render.h b/pango/pangoxft-render.h
new file mode 100755 (executable)
index 0000000..87c26a7
--- /dev/null
@@ -0,0 +1,141 @@
+/* Pango
+ * pangoxft-render.h: Rendering routines for the Xft library
+ *
+ * Copyright (C) 2004 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOXFT_RENDER_H__
+#define __PANGOXFT_RENDER_H__
+
+#include <pango/pango-renderer.h>
+
+G_BEGIN_DECLS
+
+#define _XFT_NO_COMPAT_
+#include <X11/Xlib.h>
+#include <X11/Xft/Xft.h>
+#if defined(XftVersion) && XftVersion >= 20000
+#else
+#error "must have Xft version 2 or newer"
+#endif
+
+typedef struct _PangoXftRenderer        PangoXftRenderer;
+typedef struct _PangoXftRendererClass   PangoXftRendererClass;
+typedef struct _PangoXftRendererPrivate PangoXftRendererPrivate;
+
+#define PANGO_TYPE_XFT_RENDERER            (pango_xft_renderer_get_type())
+#define PANGO_XFT_RENDERER(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_RENDERER, PangoXftRenderer))
+#define PANGO_IS_XFT_RENDERER(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_RENDERER))
+#define PANGO_XFT_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_XFT_RENDERER, PangoXftRendererClass))
+#define PANGO_IS_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_XFT_RENDERER))
+#define PANGO_XFT_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_XFT_RENDERER, PangoXftRendererClass))
+
+/**
+ * PangoXftRenderer
+ *
+ * #PangoXftRenderer is a subclass of #PangoRenderer used for rendering
+ * with Pango's Xft backend. It can be used directly, or it can be
+ * further subclassed to modify exactly how drawing of individual
+ * elements occurs.
+ *
+ * Since: 1.8
+ */
+struct _PangoXftRenderer
+{
+  /*< private >*/
+  PangoRenderer parent_instance;
+
+  Display *display;
+  int screen;
+  XftDraw *draw;
+
+  PangoXftRendererPrivate *priv;
+};
+
+/**
+ * PangoXftRendererClass
+ * @composite_trapezoids: draw the specified trapezoids using
+ *   the current color and other attributes for @part
+ * @composite_glyphs: draw the specified glyphs using
+ *   the current foreground color and other foreground
+ *   attributes
+ *
+ * The class structure for #PangoXftRenderer
+ *
+ * Since: 1.8
+ */
+struct _PangoXftRendererClass
+{
+  /*< private >*/
+  PangoRendererClass parent_class;
+
+  /*< public >*/
+  void (*composite_trapezoids) (PangoXftRenderer *xftrenderer,
+                               PangoRenderPart   part,
+                               XTrapezoid       *trapezoids,
+                               int               n_trapezoids);
+  void (*composite_glyphs)     (PangoXftRenderer *xftrenderer,
+                               XftFont          *xft_font,
+                               XftGlyphSpec     *glyphs,
+                               int               n_glyphs);
+};
+
+GType pango_xft_renderer_get_type    (void) G_GNUC_CONST;
+
+PangoRenderer *pango_xft_renderer_new                 (Display          *display,
+                                                      int               screen);
+void           pango_xft_renderer_set_draw            (PangoXftRenderer *xftrenderer,
+                                                      XftDraw          *draw);
+void           pango_xft_renderer_set_default_color   (PangoXftRenderer *xftrenderer,
+                                                      PangoColor       *default_color);
+
+void pango_xft_render             (XftDraw          *draw,
+                                  XftColor         *color,
+                                  PangoFont        *font,
+                                  PangoGlyphString *glyphs,
+                                  gint              x,
+                                  gint              y);
+void pango_xft_picture_render     (Display          *display,
+                                  Picture           src_picture,
+                                  Picture           dest_picture,
+                                  PangoFont        *font,
+                                  PangoGlyphString *glyphs,
+                                  gint              x,
+                                  gint              y);
+void pango_xft_render_transformed (XftDraw          *draw,
+                                  XftColor         *color,
+                                  PangoMatrix      *matrix,
+                                  PangoFont        *font,
+                                  PangoGlyphString *glyphs,
+                                  int               x,
+                                  int               y);
+void pango_xft_render_layout_line (XftDraw          *draw,
+                                  XftColor         *color,
+                                  PangoLayoutLine  *line,
+                                  int               x,
+                                  int               y);
+void pango_xft_render_layout      (XftDraw          *draw,
+                                  XftColor         *color,
+                                  PangoLayout      *layout,
+                                  int               x,
+                                  int               y);
+
+G_END_DECLS
+
+#endif /* __PANGOXFT_RENDER_H__ */
+
diff --git a/pango/pangoxft.h b/pango/pangoxft.h
new file mode 100755 (executable)
index 0000000..177bf97
--- /dev/null
@@ -0,0 +1,96 @@
+/* Pango
+ * pangoxft.h:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ * Copyright (C) 2000 SuSE Linux Ltd
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PANGOXFT_H__
+#define __PANGOXFT_H__
+
+#include <pango/pango-context.h>
+#include <pango/pango-ot.h>
+#include <pango/pangofc-font.h>
+#include <pango/pango-layout.h>
+#include <pango/pangoxft-render.h>
+
+G_BEGIN_DECLS
+
+#ifndef PANGO_DISABLE_DEPRECATED
+#define PANGO_RENDER_TYPE_XFT "PangoRenderXft"
+#endif
+
+#define PANGO_TYPE_XFT_FONT_MAP              (pango_xft_font_map_get_type ())
+#define PANGO_XFT_FONT_MAP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT_MAP, PangoXftFontMap))
+#define PANGO_XFT_IS_FONT_MAP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT_MAP))
+
+typedef struct _PangoXftFontMap      PangoXftFontMap;
+
+typedef struct _PangoXftFont    PangoXftFont;
+
+typedef void (*PangoXftSubstituteFunc) (FcPattern *pattern,
+                                       gpointer   data);
+
+/* Calls for applications
+ */
+PangoFontMap *pango_xft_get_font_map     (Display *display,
+                                         int      screen);
+#ifndef PANGO_DISABLE_DEPRECATED
+PangoContext *pango_xft_get_context      (Display *display,
+                                         int      screen);
+#endif
+void          pango_xft_shutdown_display (Display *display,
+                                         int      screen);
+
+void pango_xft_set_default_substitute (Display                *display,
+                                      int                     screen,
+                                      PangoXftSubstituteFunc  func,
+                                      gpointer                data,
+                                      GDestroyNotify          notify);
+void pango_xft_substitute_changed     (Display                *display,
+                                      int                     screen);
+
+GType pango_xft_font_map_get_type (void) G_GNUC_CONST;
+
+#define PANGO_XFT_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT, PangoXftFont))
+#define PANGO_TYPE_XFT_FONT              (pango_xft_font_get_type ())
+#define PANGO_XFT_IS_FONT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT))
+
+GType      pango_xft_font_get_type (void) G_GNUC_CONST;
+
+/* For shape engines
+ */
+
+#ifdef PANGO_ENABLE_ENGINE
+XftFont *     pango_xft_font_get_font          (PangoFont *font);
+Display *     pango_xft_font_get_display       (PangoFont *font);
+#ifndef PANGO_DISABLE_DEPRECATED
+FT_Face       pango_xft_font_lock_face         (PangoFont *font);
+void         pango_xft_font_unlock_face       (PangoFont *font);
+guint        pango_xft_font_get_glyph         (PangoFont *font,
+                                               gunichar   wc);
+gboolean      pango_xft_font_has_char          (PangoFont *font,
+                                               gunichar   wc);
+PangoGlyph    pango_xft_font_get_unknown_glyph (PangoFont *font,
+                                               gunichar   wc);
+#endif /* PANGO_DISABLE_DEPRECATED */
+#endif /* PANGO_ENABLE_ENGINE */
+
+G_END_DECLS
+
+#endif /* __PANGOXFT_H__ */
diff --git a/pango/pangoxft.rc b/pango/pangoxft.rc
new file mode 100755 (executable)
index 0000000..216d89e
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION 1,26,1,0
+  PRODUCTVERSION 1,26,1,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "Pangoxft"
+       VALUE "FileVersion", "1.26.1.0"
+       VALUE "InternalName", "pangoxft-1.0-0"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software."
+       VALUE "OriginalFilename", "pangoxft-1.0-0.dll"
+       VALUE "ProductName", "Pangoxft"
+       VALUE "ProductVersion", "1.26.1"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/pangoxft.rc.in b/pango/pangoxft.rc.in
new file mode 100755 (executable)
index 0000000..1f39685
--- /dev/null
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+  FILEFLAGSMASK 0
+  FILEFLAGS 0
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE VFT2_UNKNOWN
+  BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+      BLOCK "040904B0"
+      BEGIN
+       VALUE "CompanyName", "Red Hat Software"
+       VALUE "FileDescription", "Pangoxft"
+       VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+       VALUE "InternalName", "pangoxft-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+       VALUE "LegalCopyright", "Copyright © 1999 Red Hat Software."
+       VALUE "OriginalFilename", "pangoxft-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+       VALUE "ProductName", "Pangoxft"
+       VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+      END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+      VALUE "Translation", 0x409, 1200
+    END
+  END
diff --git a/pango/querymodules.c b/pango/querymodules.c
new file mode 100755 (executable)
index 0000000..ef2d09a
--- /dev/null
@@ -0,0 +1,284 @@
+/* Pango
+ * querymodules.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include "config.h"
+
+#include <glib.h>
+#include <gmodule.h>
+#include "pango-break.h"
+#include "pango-context.h"
+#include "pango-impl-utils.h"
+#include "pango-engine.h"
+#include "pango-enum-types.h"
+
+#include <errno.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <glib/gprintf.h>
+
+#ifdef USE_LA_MODULES
+#define SOEXT ".la"
+#else
+#define SOEXT ("." G_MODULE_SUFFIX)
+#endif
+#define SOEXT_LEN ((int) strlen (SOEXT))
+
+static gboolean
+string_needs_escape (const char *str)
+{
+  while (TRUE)
+    {
+      char c = *str++;
+
+      if (!c)
+       return FALSE;
+      else if (c == '\"' || c == '\\' || g_ascii_isspace (c))
+       return TRUE;
+    }
+}
+
+static char *
+escape_string (const char *str)
+{
+  GString *result = g_string_new (NULL);
+
+  while (TRUE)
+    {
+      char c = *str++;
+
+      switch (c)
+       {
+       case '\0':
+         goto done;
+       case '\n':
+         g_string_append (result, "\\n");
+         break;
+       case '\"':
+         g_string_append (result, "\\\"");
+         break;
+       case '\\':
+         g_string_append (result, "\\\\");
+         break;
+       default:
+         g_string_append_c (result, c);
+       }
+    }
+
+ done:
+  return g_string_free (result, FALSE);
+}
+
+#define GET_SYMBOL(module,name,location)                 \
+  g_module_symbol (module, name, (gpointer *)(void *)&location)
+
+static const char *
+string_from_script (PangoScript script)
+{
+  static GEnumClass *class = NULL;
+  GEnumValue *value;
+  if (!class)
+    class = g_type_class_ref (PANGO_TYPE_SCRIPT);
+
+  value = g_enum_get_value (class, script);
+  if (!value)
+    {
+      g_warning ("Engine reported invalid script value %d\n", script);
+      return string_from_script (PANGO_SCRIPT_INVALID_CODE);
+    }
+
+  return value->value_nick;
+}
+
+static void
+query_module (const char *dir, const char *name)
+{
+  void (*list) (PangoEngineInfo **engines, gint *n_engines);
+  void (*init) (GTypeModule *module);
+  void (*exit) (void);
+  PangoEngine *(*create) (const gchar *id);
+
+  GModule *module;
+  gchar *path;
+
+  if (g_path_is_absolute (name))
+    path = g_strdup (name);
+  else
+    path = g_build_filename (dir, name, NULL);
+
+  module = g_module_open (path, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+
+  if (!module)
+    g_printerr ("Cannot load module %s: %s\n", path, g_module_error ());
+
+  if (module &&
+      GET_SYMBOL (module, "script_engine_list", list) &&
+      GET_SYMBOL (module, "script_engine_init", init) &&
+      GET_SYMBOL (module, "script_engine_exit", exit) &&
+      GET_SYMBOL (module, "script_engine_create", create))
+    {
+      gint i,j;
+      PangoEngineInfo *engines;
+      gint n_engines;
+
+      (*list) (&engines, &n_engines);
+
+      for (i=0; i<n_engines; i++)
+       {
+         const gchar *quote;
+         gchar *quoted_path;
+
+         if (string_needs_escape (path))
+           {
+             quote = "\"";
+             quoted_path = escape_string (path);
+           }
+         else
+           {
+             quote = "";
+             quoted_path = g_strdup (path);
+           }
+
+         g_printf ("%s%s%s %s %s %s", quote, quoted_path, quote,
+                   engines[i].id, engines[i].engine_type, engines[i].render_type);
+         g_free (quoted_path);
+
+         for (j=0; j < engines[i].n_scripts; j++)
+           {
+             g_printf (" %s:%s",
+                       string_from_script (engines[i].scripts[j].script),
+                       engines[i].scripts[j].langs);
+           }
+         g_printf ("\n");
+       }
+    }
+  else
+    {
+      g_printerr ("%s does not export Pango module API\n", path);
+    }
+
+  g_free (path);
+  if (module)
+    g_module_close (module);
+}
+
+static G_GNUC_NORETURN gboolean
+show_version(const char *name G_GNUC_UNUSED,
+            const char *arg G_GNUC_UNUSED,
+            gpointer    data G_GNUC_UNUSED,
+            GError    **error G_GNUC_UNUSED)
+{
+  g_printf("pango-querymodules (%s) %s\n", PACKAGE_NAME, PACKAGE_VERSION);
+  g_printf("module interface version: %s\n", MODULE_VERSION);
+  exit(0);
+}
+
+int
+main (int argc, char **argv)
+{
+  char *cwd;
+  int i;
+  char *path;
+  GOptionContext *context;
+  GError *parse_error = NULL;
+  GOptionEntry entries[] =
+    {
+      {"version",      0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &show_version,
+       "Show version numbers",                                             NULL},
+      {NULL}
+    };
+
+  context = g_option_context_new ("- [MODULE]...");
+  g_option_context_add_main_entries (context, entries, NULL);
+
+  if (!g_option_context_parse (context, &argc, &argv, &parse_error))
+    {
+      if (parse_error != NULL)
+       {
+         g_printerr("Parse option error: %s\n", parse_error->message);
+       }
+      else
+       {
+         g_printerr("Parse option error\n");
+       }
+      exit(1);
+    }
+
+  g_option_context_free(context);
+
+  g_type_init ();
+
+  g_printf ("# Pango Modules file\n"
+           "# Automatically generated file, do not edit\n"
+           "#\n");
+
+  if (argc == 1)               /* No arguments given */
+    {
+      char **dirs;
+      int i;
+
+      path = pango_config_key_get ("Pango/ModulesPath");
+      if (!path)
+       path = g_build_filename (pango_get_lib_subdirectory (),
+                                MODULE_VERSION,
+                                "modules",
+                                NULL);
+
+      g_printf ("# ModulesPath = %s\n#\n", path);
+
+      dirs = pango_split_file_list (path);
+
+      g_free (path);
+
+      for (i=0; dirs[i]; i++)
+       {
+         GDir *dir = g_dir_open (dirs[i], 0, NULL);
+         if (dir)
+           {
+             const char *dent;
+
+             while ((dent = g_dir_read_name (dir)))
+               {
+                 int len = strlen (dent);
+                 if (len > SOEXT_LEN && strcmp (dent + len - SOEXT_LEN, SOEXT) == 0)
+                   query_module (dirs[i], dent);
+               }
+
+             g_dir_close (dir);
+           }
+       }
+
+      g_strfreev (dirs);
+    }
+  else
+    {
+      cwd = g_get_current_dir ();
+
+      for (i=1; i<argc; i++)
+       query_module (cwd, argv[i]);
+
+      g_free (cwd);
+    }
+
+  return 0;
+}
diff --git a/pango/reorder-items.c b/pango/reorder-items.c
new file mode 100755 (executable)
index 0000000..2543350
--- /dev/null
@@ -0,0 +1,114 @@
+/* Pango
+ * reorder-items.c:
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include "pango-glyph.h"
+
+/*
+ * NB: The contents of the file implement the exact same algorithm
+ *     pango-layout.c:pango_layout_line_reorder().
+ */
+
+static GList *reorder_items_recurse (GList *items, int n_items);
+
+/**
+ * pango_reorder_items:
+ * @logical_items:  a #GList of #PangoItem in logical order.
+ *
+ * From a list of items in logical order and the associated
+ * directional levels, produce a list in visual order.
+ * The original list is unmodified.
+ *
+ * Returns: a #GList of #PangoItem structures in visual order.
+ *
+ * (Please open a bug if you use this function.
+ *  It is not a particularly convenient interface, and the code
+ *  is duplicated elsewhere in Pango for that reason.)
+ */
+GList *
+pango_reorder_items (GList *logical_items)
+{
+  return reorder_items_recurse (logical_items, g_list_length (logical_items));
+}
+
+static GList *
+reorder_items_recurse (GList *items, int n_items)
+{
+  GList *tmp_list, *level_start_node;
+  int i, level_start_i;
+  int min_level = G_MAXINT;
+  GList *result = NULL;
+
+  if (n_items == 0)
+    return NULL;
+
+  tmp_list = items;
+  for (i=0; i<n_items; i++)
+    {
+      PangoItem *item = tmp_list->data;
+
+      min_level = MIN (min_level, item->analysis.level);
+
+      tmp_list = tmp_list->next;
+    }
+
+  level_start_i = 0;
+  level_start_node = items;
+  tmp_list = items;
+  for (i=0; i<n_items; i++)
+    {
+      PangoItem *item = tmp_list->data;
+
+      if (item->analysis.level == min_level)
+       {
+         if (min_level % 2)
+           {
+             if (i > level_start_i)
+               result = g_list_concat (reorder_items_recurse (level_start_node, i - level_start_i), result);
+             result = g_list_prepend (result, item);
+           }
+         else
+           {
+             if (i > level_start_i)
+               result = g_list_concat (result, reorder_items_recurse (level_start_node, i - level_start_i));
+             result = g_list_append (result, item);
+           }
+
+         level_start_i = i + 1;
+         level_start_node = tmp_list->next;
+       }
+
+      tmp_list = tmp_list->next;
+    }
+
+  if (min_level % 2)
+    {
+      if (i > level_start_i)
+       result = g_list_concat (reorder_items_recurse (level_start_node, i - level_start_i), result);
+    }
+  else
+    {
+      if (i > level_start_i)
+       result = g_list_concat (result, reorder_items_recurse (level_start_node, i - level_start_i));
+    }
+
+  return result;
+}
diff --git a/pango/shape.c b/pango/shape.c
new file mode 100755 (executable)
index 0000000..1513b02
--- /dev/null
@@ -0,0 +1,172 @@
+/* Pango
+ * shape.c: Convert characters into glyphs.
+ *
+ * Copyright (C) 1999 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "pango-impl-utils.h"
+#include "pango-glyph.h"
+#include "pango-engine-private.h"
+
+#include <string.h>
+
+/**
+ * pango_shape:
+ * @text:      the text to process
+ * @length:    the length (in bytes) of @text
+ * @analysis:  #PangoAnalysis structure from pango_itemize()
+ * @glyphs:    glyph string in which to store results
+ *
+ * Given a segment of text and the corresponding
+ * #PangoAnalysis structure returned from pango_itemize(),
+ * convert the characters into glyphs. You may also pass
+ * in only a substring of the item from pango_itemize().
+ */
+void
+pango_shape (const gchar      *text,
+            gint              length,
+            const PangoAnalysis *analysis,
+            PangoGlyphString *glyphs)
+{
+  int i;
+  int last_cluster;
+
+  glyphs->num_glyphs = 0;
+
+  if (G_LIKELY (analysis->shape_engine && analysis->font))
+    {
+      _pango_engine_shape_shape (analysis->shape_engine, analysis->font,
+                                text, length, analysis, glyphs);
+
+      if (G_UNLIKELY (glyphs->num_glyphs == 0))
+       {
+         /* If a font has been correctly chosen, but no glyphs are output,
+          * there's probably something wrong with the shaper, or the font.
+          *
+          * Trying to be informative, we print out the font description,
+          * shaper name, and the text, but to not flood the terminal with
+          * zillions of the message, we set a flag to only err once per
+          * font/engine pair.
+          *
+          * To do the flag fast, we use the engine qname to qflag the font,
+          * but also the font description to flag the engine.  This is
+          * supposed to be fast to check, but also avoid writing out
+          * duplicate warnings when a new PangoFont is created.
+          */
+         GType engine_type = G_OBJECT_TYPE (analysis->shape_engine);
+         GQuark warned_quark = g_type_qname (engine_type);
+
+         if (!g_object_get_qdata (G_OBJECT (analysis->font), warned_quark))
+           {
+             PangoFontDescription *desc;
+             char *font_name;
+             const char *engine_name;
+
+             desc = pango_font_describe (analysis->font);
+             font_name = pango_font_description_to_string (desc);
+             pango_font_description_free (desc);
+
+             if (!g_object_get_data (G_OBJECT (analysis->shape_engine), font_name))
+               {
+                 engine_name = g_type_name (engine_type);
+                 if (!engine_name)
+                   engine_name = "(unknown)";
+
+                 g_warning ("shaping failure, expect ugly output. shape-engine='%s', font='%s', text='%.*s'",
+                            engine_name,
+                            font_name,
+                            length == -1 ? (gint) strlen (text) : length, text);
+
+                 g_object_set_data_full (G_OBJECT (analysis->shape_engine), font_name,
+                                         GINT_TO_POINTER (1), NULL);
+               }
+
+             g_free (font_name);
+
+             g_object_set_qdata_full (G_OBJECT (analysis->font), warned_quark,
+                                      GINT_TO_POINTER (1), NULL);
+           }
+       }
+    }
+  else
+    glyphs->num_glyphs = 0;
+
+  if (G_UNLIKELY (!glyphs->num_glyphs))
+    {
+      PangoEngineShape *fallback_engine = _pango_get_fallback_shaper ();
+
+      _pango_engine_shape_shape (fallback_engine, analysis->font,
+                                text, length, analysis, glyphs);
+      if (G_UNLIKELY (!glyphs->num_glyphs))
+        return;
+    }
+
+  /* make sure last_cluster is invalid */
+  last_cluster = glyphs->log_clusters[0] - 1;
+  for (i = 0; i < glyphs->num_glyphs; i++)
+    {
+      /* Set glyphs[i].attr.is_cluster_start based on log_clusters[] */
+      if (glyphs->log_clusters[i] != last_cluster)
+       {
+         glyphs->glyphs[i].attr.is_cluster_start = TRUE;
+         last_cluster = glyphs->log_clusters[i];
+       }
+      else
+       glyphs->glyphs[i].attr.is_cluster_start = FALSE;
+
+
+      /* Shift glyph if width is negative, and negate width.
+       * This is useful for rotated font matrices and shouldn't
+       * harm in normal cases.
+       */
+      if (glyphs->glyphs[i].geometry.width < 0)
+       {
+         glyphs->glyphs[i].geometry.width = -glyphs->glyphs[i].geometry.width;
+         glyphs->glyphs[i].geometry.x_offset += glyphs->glyphs[i].geometry.width;
+       }
+    }
+
+  /* Make sure glyphstring direction conforms to analysis->level */
+  if (G_UNLIKELY ((analysis->level & 1) &&
+                 glyphs->log_clusters[0] < glyphs->log_clusters[glyphs->num_glyphs - 1]))
+    {
+      /* Warn once per shaper */
+      static GQuark warned_quark = 0;
+
+      if (!warned_quark)
+       warned_quark = g_quark_from_static_string ("pango-shape-warned");
+
+      if (analysis->shape_engine && !g_object_get_qdata (G_OBJECT (analysis->shape_engine), warned_quark))
+       {
+         GType engine_type = G_OBJECT_TYPE (analysis->shape_engine);
+         const char *engine_name = g_type_name (engine_type);
+         if (!engine_name)
+           engine_name = "(unknown)";
+
+         g_warning ("Expected RTL run but shape-engine='%s' returned LTR. Fixing.", engine_name);
+
+         g_object_set_qdata_full (G_OBJECT (analysis->shape_engine), warned_quark,
+                                  GINT_TO_POINTER (1), NULL);
+       }
+
+      /* *Fix* it so we don't crash later */
+      pango_glyph_string_reverse_range (glyphs, 0, glyphs->num_glyphs);
+    }
+}
diff --git a/pangocairo-uninstalled.pc.in b/pangocairo-uninstalled.pc.in
new file mode 100755 (executable)
index 0000000..fa0700a
--- /dev/null
@@ -0,0 +1,6 @@
+Name: Pango Cairo Uninstalled
+Description: Cairo rendering support for Pango, Not Installed
+Version: @VERSION@
+Requires: pango cairo @PKGCONFIG_CAIRO_REQUIRES@
+Libs: ${pc_top_builddir}/${pcfiledir}/pango/libpangocairo-@PANGO_API_VERSION@.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/pangocairo.pc.in b/pangocairo.pc.in
new file mode 100755 (executable)
index 0000000..9f18def
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Pango Cairo
+Description: Cairo rendering support for Pango
+Version: @VERSION@
+Requires: pango cairo @PKGCONFIG_CAIRO_REQUIRES@
+Libs: -L${libdir} -lpangocairo-@PANGO_API_VERSION@
+Cflags: -I${includedir}/pango-1.0
diff --git a/pangoft2-uninstalled.pc.in b/pangoft2-uninstalled.pc.in
new file mode 100755 (executable)
index 0000000..7a894ac
--- /dev/null
@@ -0,0 +1,7 @@
+Name: Pango FT2 Uninstalled
+Description: Freetype 2.0 font support for Pango, Not Installed
+Version: @VERSION@
+Requires: pango freetype2
+Libs: ${pc_top_builddir}/${pcfiledir}/pango/libpangoft2-@PANGO_API_VERSION@.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
+
diff --git a/pangoft2.pc.in b/pangoft2.pc.in
new file mode 100755 (executable)
index 0000000..9b1e138
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Pango FT2 and Pango Fc
+Description: Freetype 2.0 and fontconfig font support for Pango
+Version: @VERSION@
+Requires: pango freetype2 fontconfig
+Libs: -L${libdir} -lpangoft2-@PANGO_API_VERSION@
+Cflags: -I${includedir}/pango-1.0
diff --git a/pangowin32-uninstalled.pc.in b/pangowin32-uninstalled.pc.in
new file mode 100755 (executable)
index 0000000..5541c4e
--- /dev/null
@@ -0,0 +1,6 @@
+Name: Pango Win32 Uninstalled
+Description: Win32 GDI font support for Pango, Not Installed
+Version: @VERSION@
+Requires: pango
+Libs: ${pc_top_builddir}/${pcfiledir}/pango/libpangowin32.la @WIN32_LIBS@
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/pangowin32.pc.in b/pangowin32.pc.in
new file mode 100755 (executable)
index 0000000..250d935
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Pango Win32
+Description: Win32 GDI font support for Pango
+Version: @VERSION@
+Requires: pango
+Libs: -L${libdir} -lpangowin32-@PANGO_API_VERSION@ @WIN32_LIBS@
+Cflags: -I${includedir}/pango-1.0
diff --git a/pangox-uninstalled.pc.in b/pangox-uninstalled.pc.in
new file mode 100755 (executable)
index 0000000..434cc61
--- /dev/null
@@ -0,0 +1,6 @@
+Name: Pango X Uninstalled
+Description: X Window System font support for Pango, Not Installed
+Version: @VERSION@
+Requires: pango
+Libs: ${pc_top_builddir}/${pcfiledir}/pango/libpangox-@PANGO_API_VERSION@.la @X_LIBS@
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@ @X_CFLAGS@
diff --git a/pangox.pc.in b/pangox.pc.in
new file mode 100755 (executable)
index 0000000..95f1c26
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Pango X
+Description: X Window System font support for Pango
+Version: @VERSION@
+Requires: pango
+Libs: -L${libdir} -lpangox-@PANGO_API_VERSION@ @X_LIBS@
+Cflags: -I${includedir}/pango-1.0 @X_CFLAGS@
diff --git a/pangoxft-uninstalled.pc.in b/pangoxft-uninstalled.pc.in
new file mode 100755 (executable)
index 0000000..4d7f4d4
--- /dev/null
@@ -0,0 +1,6 @@
+Name: Pango Xft Uninstalled
+Description: Xft font support for Pango, Not Installed
+Version: @VERSION@
+Requires: pango pangoft2 xft
+Libs: ${pc_top_builddir}/${pcfiledir}/pango/libpangoxft-@PANGO_API_VERSION@.la
+Cflags: -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/pangoxft.pc.in b/pangoxft.pc.in
new file mode 100755 (executable)
index 0000000..66202ec
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Pango Xft
+Description: Xft font support for Pango
+Version: @VERSION@
+Requires: pango pangoft2 xft
+Libs: -L${libdir} -lpangoxft-@PANGO_API_VERSION@
+Cflags: -I${includedir}/pango-1.0
diff --git a/sanitize-la.sh b/sanitize-la.sh
new file mode 100755 (executable)
index 0000000..9bc0ba2
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+sed "s/dependency_libs=.*/dependency_libs=''/" < $1 > $1T && mv $1T $1
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100755 (executable)
index 0000000..5e2fdef
--- /dev/null
@@ -0,0 +1,78 @@
+## Process this file with automake to create Makefile.in.
+
+EXTRA_DIST =                   \
+       all-unicode.txt         \
+       boundaries.utf8         \
+       runtests.sh
+
+CLEANFILES = pangorc
+DISTCLEANFILES = all-unicode.txt runtests.log
+
+INCLUDES =                                     \
+       -I$(top_srcdir)                         \
+       $(PANGO_DEBUG_FLAGS)                    \
+       $(GLIB_CFLAGS)                          \
+       $(XFT_CFLAGS)                           \
+       $(CAIRO_CFLAGS)                         \
+       $(FREETYPE_CFLAGS)                      \
+       $(X_CFLAGS)
+
+if HAVE_XFT
+INCLUDES += -DHAVE_X
+endif
+if HAVE_XFT
+INCLUDES += -DHAVE_XFT
+endif
+if HAVE_FREETYPE
+INCLUDES += -DHAVE_FREETYPE
+endif
+if HAVE_WIN32
+INCLUDES += -DHAVE_WIN32
+endif
+
+
+if CROSS_COMPILING
+TESTS=
+else
+TESTS=runtests.sh
+endif
+
+TESTS_ENVIRONMENT =                    \
+   srcdir=$(srcdir)                    \
+   PANGO_RC_FILE=./pangorc
+
+noinst_PROGRAMS = gen-all-unicode dump-boundaries
+
+check_PROGRAMS = testboundaries testboundaries_ucd testcolor testscript
+
+if HAVE_CAIRO
+check_PROGRAMS += testiter
+endif
+if HAVE_FREETYPE
+check_PROGRAMS += test-ot-tags
+endif
+
+gen_all_unicode_LDADD = $(GLIB_LIBS)
+testboundaries_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+testboundaries_ucd_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+testcolor_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+testiter_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la ../pango/libpangocairo-$(PANGO_API_VERSION).la
+testscript_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+test_ot_tags_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la ../pango/libpangoft2-$(PANGO_API_VERSION).la
+
+dump_boundaries_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la $(GLIB_LIBS)
+
+if HAVE_CXX
+check_PROGRAMS += cxx-test
+endif
+cxx_test_SOURCES = cxx-test.C
+
+all-unicode.txt: gen-all-unicode$(EXEEXT)
+       ./gen-all-unicode > all-unicode.txt
+
+pangorc: $(srcdir)/../modules/pangorc
+       cp $(srcdir)/../modules/pangorc $@
+
+$(noinst_PROGRAMS) $(check_PROGRAMS): pangorc
+
+-include $(top_srcdir)/git.mk
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644 (file)
index 0000000..c232d14
--- /dev/null
@@ -0,0 +1,827 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_XFT_TRUE@am__append_1 = -DHAVE_X -DHAVE_XFT
+@HAVE_FREETYPE_TRUE@am__append_2 = -DHAVE_FREETYPE
+@HAVE_WIN32_TRUE@am__append_3 = -DHAVE_WIN32
+noinst_PROGRAMS = gen-all-unicode$(EXEEXT) dump-boundaries$(EXEEXT)
+check_PROGRAMS = testboundaries$(EXEEXT) testboundaries_ucd$(EXEEXT) \
+       testcolor$(EXEEXT) testscript$(EXEEXT) $(am__EXEEXT_1) \
+       $(am__EXEEXT_2) $(am__EXEEXT_3)
+@HAVE_CAIRO_TRUE@am__append_4 = testiter
+@HAVE_FREETYPE_TRUE@am__append_5 = test-ot-tags
+@HAVE_CXX_TRUE@am__append_6 = cxx-test
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/runtests.sh.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = runtests.sh
+@HAVE_CAIRO_TRUE@am__EXEEXT_1 = testiter$(EXEEXT)
+@HAVE_FREETYPE_TRUE@am__EXEEXT_2 = test-ot-tags$(EXEEXT)
+@HAVE_CXX_TRUE@am__EXEEXT_3 = cxx-test$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am_cxx_test_OBJECTS = cxx-test.$(OBJEXT)
+cxx_test_OBJECTS = $(am_cxx_test_OBJECTS)
+cxx_test_LDADD = $(LDADD)
+dump_boundaries_SOURCES = dump-boundaries.c
+dump_boundaries_OBJECTS = dump-boundaries.$(OBJEXT)
+dump_boundaries_DEPENDENCIES =  \
+       ../pango/libpango-$(PANGO_API_VERSION).la
+gen_all_unicode_SOURCES = gen-all-unicode.c
+gen_all_unicode_OBJECTS = gen-all-unicode.$(OBJEXT)
+am__DEPENDENCIES_1 =
+gen_all_unicode_DEPENDENCIES = $(am__DEPENDENCIES_1)
+test_ot_tags_SOURCES = test-ot-tags.c
+test_ot_tags_OBJECTS = test-ot-tags.$(OBJEXT)
+test_ot_tags_DEPENDENCIES = ../pango/libpango-$(PANGO_API_VERSION).la \
+       ../pango/libpangoft2-$(PANGO_API_VERSION).la
+testboundaries_SOURCES = testboundaries.c
+testboundaries_OBJECTS = testboundaries.$(OBJEXT)
+testboundaries_DEPENDENCIES =  \
+       ../pango/libpango-$(PANGO_API_VERSION).la
+testboundaries_ucd_SOURCES = testboundaries_ucd.c
+testboundaries_ucd_OBJECTS = testboundaries_ucd.$(OBJEXT)
+testboundaries_ucd_DEPENDENCIES =  \
+       ../pango/libpango-$(PANGO_API_VERSION).la
+testcolor_SOURCES = testcolor.c
+testcolor_OBJECTS = testcolor.$(OBJEXT)
+testcolor_DEPENDENCIES = ../pango/libpango-$(PANGO_API_VERSION).la
+testiter_SOURCES = testiter.c
+testiter_OBJECTS = testiter.$(OBJEXT)
+testiter_DEPENDENCIES = ../pango/libpango-$(PANGO_API_VERSION).la \
+       ../pango/libpangocairo-$(PANGO_API_VERSION).la
+testscript_SOURCES = testscript.c
+testscript_OBJECTS = testscript.$(OBJEXT)
+testscript_DEPENDENCIES = ../pango/libpango-$(PANGO_API_VERSION).la
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+       $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(cxx_test_SOURCES) dump-boundaries.c gen-all-unicode.c \
+       test-ot-tags.c testboundaries.c testboundaries_ucd.c \
+       testcolor.c testiter.c testscript.c
+DIST_SOURCES = $(cxx_test_SOURCES) dump-boundaries.c gen-all-unicode.c \
+       test-ot-tags.c testboundaries.c testboundaries_ucd.c \
+       testcolor.c testiter.c testscript.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = \
+       all-unicode.txt         \
+       boundaries.utf8         \
+       runtests.sh
+
+CLEANFILES = pangorc
+DISTCLEANFILES = all-unicode.txt runtests.log
+INCLUDES = -I$(top_srcdir) $(PANGO_DEBUG_FLAGS) $(GLIB_CFLAGS) \
+       $(XFT_CFLAGS) $(CAIRO_CFLAGS) $(FREETYPE_CFLAGS) $(X_CFLAGS) \
+       $(am__append_1) $(am__append_2) $(am__append_3)
+@CROSS_COMPILING_FALSE@TESTS = runtests.sh
+@CROSS_COMPILING_TRUE@TESTS = 
+TESTS_ENVIRONMENT = \
+   srcdir=$(srcdir)                    \
+   PANGO_RC_FILE=./pangorc
+
+gen_all_unicode_LDADD = $(GLIB_LIBS)
+testboundaries_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+testboundaries_ucd_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+testcolor_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+testiter_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la ../pango/libpangocairo-$(PANGO_API_VERSION).la 
+testscript_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+test_ot_tags_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la ../pango/libpangoft2-$(PANGO_API_VERSION).la 
+dump_boundaries_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la
+cxx_test_SOURCES = cxx-test.C
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .C .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  tests/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+runtests.sh: $(top_builddir)/config.status $(srcdir)/runtests.sh.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+cxx-test$(EXEEXT): $(cxx_test_OBJECTS) $(cxx_test_DEPENDENCIES) 
+       @rm -f cxx-test$(EXEEXT)
+       $(CXXLINK) $(cxx_test_LDFLAGS) $(cxx_test_OBJECTS) $(cxx_test_LDADD) $(LIBS)
+dump-boundaries$(EXEEXT): $(dump_boundaries_OBJECTS) $(dump_boundaries_DEPENDENCIES) 
+       @rm -f dump-boundaries$(EXEEXT)
+       $(LINK) $(dump_boundaries_LDFLAGS) $(dump_boundaries_OBJECTS) $(dump_boundaries_LDADD) $(LIBS)
+gen-all-unicode$(EXEEXT): $(gen_all_unicode_OBJECTS) $(gen_all_unicode_DEPENDENCIES) 
+       @rm -f gen-all-unicode$(EXEEXT)
+       $(LINK) $(gen_all_unicode_LDFLAGS) $(gen_all_unicode_OBJECTS) $(gen_all_unicode_LDADD) $(LIBS)
+test-ot-tags$(EXEEXT): $(test_ot_tags_OBJECTS) $(test_ot_tags_DEPENDENCIES) 
+       @rm -f test-ot-tags$(EXEEXT)
+       $(LINK) $(test_ot_tags_LDFLAGS) $(test_ot_tags_OBJECTS) $(test_ot_tags_LDADD) $(LIBS)
+testboundaries$(EXEEXT): $(testboundaries_OBJECTS) $(testboundaries_DEPENDENCIES) 
+       @rm -f testboundaries$(EXEEXT)
+       $(LINK) $(testboundaries_LDFLAGS) $(testboundaries_OBJECTS) $(testboundaries_LDADD) $(LIBS)
+testboundaries_ucd$(EXEEXT): $(testboundaries_ucd_OBJECTS) $(testboundaries_ucd_DEPENDENCIES) 
+       @rm -f testboundaries_ucd$(EXEEXT)
+       $(LINK) $(testboundaries_ucd_LDFLAGS) $(testboundaries_ucd_OBJECTS) $(testboundaries_ucd_LDADD) $(LIBS)
+testcolor$(EXEEXT): $(testcolor_OBJECTS) $(testcolor_DEPENDENCIES) 
+       @rm -f testcolor$(EXEEXT)
+       $(LINK) $(testcolor_LDFLAGS) $(testcolor_OBJECTS) $(testcolor_LDADD) $(LIBS)
+testiter$(EXEEXT): $(testiter_OBJECTS) $(testiter_DEPENDENCIES) 
+       @rm -f testiter$(EXEEXT)
+       $(LINK) $(testiter_LDFLAGS) $(testiter_OBJECTS) $(testiter_LDADD) $(LIBS)
+testscript$(EXEEXT): $(testscript_OBJECTS) $(testscript_DEPENDENCIES) 
+       @rm -f testscript$(EXEEXT)
+       $(LINK) $(testscript_LDFLAGS) $(testscript_OBJECTS) $(testscript_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx-test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump-boundaries.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen-all-unicode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ot-tags.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testboundaries.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testboundaries_ucd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testcolor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testiter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testscript.Po@am__quote@
+
+.C.o:
+@am__fastdepCXX_TRUE@  if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.C.obj:
+@am__fastdepCXX_TRUE@  if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.C.lo:
+@am__fastdepCXX_TRUE@  if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@  then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list='$(TESTS)'; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *" $$tst "*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *" $$tst "*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="All $$all tests passed"; \
+           else \
+             banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all tests failed"; \
+           else \
+             banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           skipped="($$skip tests were not run)"; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstPROGRAMS ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-exec install-exec-am \
+       install-info install-info-am install-man install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-info-am
+
+
+all-unicode.txt: gen-all-unicode$(EXEEXT)
+       ./gen-all-unicode > all-unicode.txt
+
+pangorc: $(srcdir)/../modules/pangorc
+       cp $(srcdir)/../modules/pangorc $@
+
+$(noinst_PROGRAMS) $(check_PROGRAMS): pangorc
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/all-unicode.txt b/tests/all-unicode.txt
new file mode 100755 (executable)
index 0000000..fb6cc9b
--- /dev/null
@@ -0,0 +1,4760 @@
+\ 1\ 2\ 3\ 4\ 5\ 6\a\b       
+\v\f\r\ e\ f\10\11\12\13\14\15\16\17\18\19\1a\e\1c\1d\1e\1f !"#$%&'(
+)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP
+QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx
+yz{|}~\7f\80\81\82\83\84\85\86\87\88\89\8a\8b\8c\8d\8e\8f\90\91\92\93\94\95\96\97\98\99\9a\9b\9c\9d\9e\9f 
+¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈ
+ÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïð
+ñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘ
+ęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀ
+ŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨ
+ũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐ
+ƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸ
+ƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠ
+ǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈ
+ȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰ
+ȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏɐɑɒɓɔɕɖɗɘ
+əɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀ
+ʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨ
+ʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿˀˁ˂˃˄˅ˆˇˈˉˊˋˌˍˎˏː
+ˑ˒˓˔˕˖˗˘˙˚˛˜˝˞˟ˠˡˢˣˤ˥˦˧˨˩˪˫ˬ˭ˮ˯˰˱˲˳˴˵˶˷˸
+˹˺˻˼˽˾˿̛̖̗̘̙̜̝̞̟̠̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̕̚
+̴̵̶̷̸̡̢̧̨̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼͇͈̽̾̿̀́͂̓̈́͆ͅ
+͉͍͎͊͋͌͏͓͔͕͖͙͚͐͑͒͗͛ͣͤͥͦͧͨͩͪͫͬͭͮͯ͘͜͟͢͝͞͠͡Ͱ
+ͱͲͳʹ͵Ͷͷ͸͹ͺͻͼͽ;Ϳ΀΁΂΃΄΅Ά·ΈΉΊ΋Ό΍ΎΏΐΑΒΓΔΕΖΗΘ
+ΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπ
+ρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟϠϡϢϣϤϥϦϧϨ
+ϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏА
+БВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзи
+йклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѠ
+ѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿҀҁ҂҃҄҅҆҇҈
+҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰ
+ұҲҳҴҵҶҷҸҹҺһҼҽҾҿӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘ
+әӚӛӜӝӞӟӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿԀ
+ԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԦԧԨ
+ԩԪԫԬԭԮԯ԰ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐ
+ՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠաբգդեզէըթժիլխծկհձղճմյնշո
+չպջռսվտրցւփքօֆևֈ։֊֋֌֍֎֏֐֑֖֛֚֒֓֔֕֗֘֙֜֝֞֟֠
+ְֱֲֳִֵֶַָֹֺֻּֽ֢֣֤֥֦֧֪֭֮֡֨֩֫֬֯־ֿ׀ׁׂ׃ׅׄ׆ׇ׈
+׉׊׋׌׍׎׏אבגדהוזחטיךכלםמןנסעףפץצקרשת׫׬׭׮ׯװ
+ױײ׳״׵׶׷׸׹׺׻׼׽׾׿؀؁؂؃؄؅؆؇؈؉؊؋،؍؎؏ؘؐؑؒؓؔؕؖؗ
+ؙؚ؛؜؝؞؟ؠءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـ
+فقكلمنهوىيًٌٍَُِّْٕٖٜٟٓٔٗ٘ٙٚٛٝٞ٠١٢٣٤٥٦٧٨
+٩٪٫٬٭ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐ
+ڑڒړڔڕږڗژڙښڛڜڝڞڟڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸ
+ڹںڻڼڽھڿۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ۔ەۖۗۘۙۚۛۜ۝۞۟۠
+ۣۡۢۤۥۦۧۨ۩۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ۽۾ۿ܀܁܂܃܄܅܆܇܈
+܉܊܋܌܍܎܏ܐܑܒܓܔܕܖܗܘܙܚܛܜܝܞܟܠܡܢܣܤܥܦܧܨܩܪܫܬܭܮܯܰ
+ܱܴܷܸܹܻܼܾ݂݄݆݈ܲܳܵܶܺܽܿ݀݁݃݅݇݉݊݋݌ݍݎݏݐݑݒݓݔݕݖݗݘ
+ݙݚݛݜݝݞݟݠݡݢݣݤݥݦݧݨݩݪݫݬݭݮݯݰݱݲݳݴݵݶݷݸݹݺݻݼݽݾݿހ
+ށނރބޅކއވމފދތލގޏސޑޒޓޔޕޖޗޘޙޚޛޜޝޞޟޠޡޢޣޤޥަާި
+ީުޫެޭޮޯްޱ޲޳޴޵޶޷޸޹޺޻޼޽޾޿߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߎߏߐ
+ߑߒߓߔߕߖߗߘߙߚߛߜߝߞߟߠߡߢߣߤߥߦߧߨߩߪ߲߫߬߭߮߯߰߱߳ߴߵ߶߷߸
+߹ߺ߻߼߽߾߿ࠀࠁࠂࠃࠄࠅࠆࠇࠈࠉࠊࠋࠌࠍࠎࠏࠐࠑࠒࠓࠔࠕࠖࠗ࠘࠙ࠚࠛࠜࠝࠞࠟࠠ
+ࠡࠢࠣࠤࠥࠦࠧࠨࠩࠪࠫࠬ࠭࠮࠯࠰࠱࠲࠳࠴࠵࠶࠷࠸࠹࠺࠻࠼࠽࠾࠿ࡀࡁࡂࡃࡄࡅࡆࡇࡈ
+ࡉࡊࡋࡌࡍࡎࡏࡐࡑࡒࡓࡔࡕࡖࡗࡘ࡙࡚࡛࡜࡝࡞࡟ࡠࡡࡢࡣࡤࡥࡦࡧࡨࡩࡪ࡫࡬࡭࡮࡯ࡰ
+ࡱࡲࡳࡴࡵࡶࡷࡸࡹࡺࡻࡼࡽࡾࡿࢀࢁࢂࢃࢄࢅࢆࢇ࢈ࢉࢊࢋࢌࢍࢎ࢏࢐࢑࢒࢓࢔࢕࢖ࢗ࢘
+࢙࢚࢛࢜࢝࢞࢟ࢠࢡࢢࢣࢤࢥࢦࢧࢨࢩࢪࢫࢬࢭࢮࢯࢰࢱࢲࢳࢴࢵࢶࢷࢸࢹࢺࢻࢼࢽࢾࢿࣀ
+ࣁࣂࣃࣄࣅࣆࣇࣈࣉ࣏࣐࣑࣒࣓࣊࣋࣌࣍࣎ࣔࣕࣖࣗࣘࣙࣚࣛࣜࣝࣞࣟ࣠࣡࣢ࣣࣦࣤࣥࣧࣨ
+ࣰࣱࣲࣩ࣭࣮࣯ࣶࣹࣺ࣪࣫࣬ࣳࣴࣵࣷࣸࣻࣼࣽࣾࣿऀँंःऄअआइईउऊऋऌऍऎएऐ
+ऑऒओऔकखगघङचछजझञटठडढणतथदधनऩपफबभमयरऱलळऴवशषस
+हऺऻ़ऽािीुूृॄॅॆेैॉॊोौ्ॎॏॐ॒॑॓॔ॕॖॗक़ख़ग़ज़ड़ढ़फ़य़ॠ
+ॡॢॣ।॥०१२३४५६७८९॰ॱॲॳॴॵॶॷॸॹॺॻॼॽॾॿঀঁংঃ঄অআইঈ
+উঊঋঌ঍঎এঐ঑঒ওঔকখগঘঙচছজঝঞটঠডঢণতথদধন঩পফবভমযর
+঱ল঳঴঵শষসহ঺঻়ঽািীুূৃৄ৅৆েৈ৉৊োৌ্ৎ৏৐৑৒৓৔৕৖ৗ৘
+৙৚৛ড়ঢ়৞য়ৠৡৢৣ৤৥০১২৩৪৫৬৭৮৯ৰৱ৲৳৴৵৶৷৸৹৺৻ৼ৽৾৿਀
+ਁਂਃ਄ਅਆਇਈਉਊ਋਌਍਎ਏਐ਑਒ਓਔਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨ
+਩ਪਫਬਭਮਯਰ਱ਲਲ਼਴ਵਸ਼਷ਸਹ਺਻਼਽ਾਿੀੁੂ੃੄੅੆ੇੈ੉੊ੋੌ੍੎੏੐
+ੑ੒੓੔੕੖੗੘ਖ਼ਗ਼ਜ਼ੜ੝ਫ਼੟੠੡੢੣੤੥੦੧੨੩੪੫੬੭੮੯ੰੱੲੳੴੵ੶੷੸
+੹੺੻੼੽੾੿઀ઁંઃ઄અઆઇઈઉઊઋઌઍ઎એઐઑ઒ઓઔકખગઘઙચછજઝઞટઠ
+ડઢણતથદધન઩પફબભમયર઱લળ઴વશષસહ઺઻઼ઽાિીુૂૃૄૅ૆ેૈ
+ૉ૊ોૌ્૎૏ૐ૑૒૓૔૕૖૗૘૙૚૛૜૝૞૟ૠૡૢૣ૤૥૦૧૨૩૪૫૬૭૮૯૰
+૱૲૳૴૵૶૷૸ૹૺૻૼ૽૾૿଀ଁଂଃ଄ଅଆଇଈଉଊଋଌ଍଎ଏଐ଑଒ଓଔକଖଗଘ
+ଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନ଩ପଫବଭମଯର଱ଲଳ଴ଵଶଷସହ଺଻଼ଽାିୀ
+ୁୂୃୄ୅୆େୈ୉୊ୋୌ୍୎୏୐୑୒୓୔୕ୖୗ୘୙୚୛ଡ଼ଢ଼୞ୟୠୡୢୣ୤୥୦୧୨
+୩୪୫୬୭୮୯୰ୱ୲୳୴୵୶୷୸୹୺୻୼୽୾୿஀஁ஂஃ஄அஆஇஈஉஊ஋஌஍எஏஐ
+஑ஒஓஔக஖஗஘ஙச஛ஜ஝ஞட஠஡஢ணத஥஦஧நனப஫஬஭மயரறலளழவஶஷஸ
+ஹ஺஻஼஽ாிீுூ௃௄௅ெேை௉ொோௌ்௎௏ௐ௑௒௓௔௕௖ௗ௘௙௚௛௜௝௞௟௠
+௡௢௣௤௥௦௧௨௩௪௫௬௭௮௯௰௱௲௳௴௵௶௷௸௹௺௻௼௽௾௿ఀఁంఃఄఅఆఇఈ
+ఉఊఋఌ఍ఎఏఐ఑ఒఓఔకఖగఘఙచఛజఝఞటఠడఢణతథదధన఩పఫబభమయర
+ఱలళఴవశషసహ఺఻఼ఽాిీుూృౄ౅ెేై౉ొోౌ్౎౏౐౑౒౓౔ౕౖ౗ౘ
+ౙౚ౛౜ౝ౞౟ౠౡౢౣ౤౥౦౧౨౩౪౫౬౭౮౯౰౱౲౳౴౵౶౷౸౹౺౻౼౽౾౿ಀ
+ಁಂಃ಄ಅಆಇಈಉಊಋಌ಍ಎಏಐ಑ಒಓಔಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನ
+಩ಪಫಬಭಮಯರಱಲಳ಴ವಶಷಸಹ಺಻಼ಽಾಿೀುೂೃೄ೅ೆೇೈ೉ೊೋೌ್೎೏೐
+೑೒೓೔ೕೖ೗೘೙೚೛೜ೝೞ೟ೠೡೢೣ೤೥೦೧೨೩೪೫೬೭೮೯೰ೱೲೳ೴೵೶೷೸
+೹೺೻೼೽೾೿ഀഁംഃഄഅആഇഈഉഊഋഌ഍എഏഐ഑ഒഓഔകഖഗഘങചഛജഝഞടഠ
+ഡഢണതഥദധനഩപഫബഭമയരറലളഴവശഷസഹഺ഻഼ഽാിീുൂൃൄ൅െേൈ
+൉ൊോൌ്ൎ൏൐൑൒൓ൔൕൖൗ൘൙൚൛൜൝൞ൟൠൡൢൣ൤൥൦൧൨൩൪൫൬൭൮൯൰
+൱൲൳൴൵൶൷൸൹ൺൻർൽൾൿ඀ඁංඃ඄අආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖ඗඘
+඙කඛගඝඞඟචඡජඣඤඥඦටඨඩඪණඬතථදධන඲ඳපඵබභමඹයර඼ල඾඿ව
+ශෂසහළෆ෇෈෉්෋෌෍෎ාැෑිීු෕ූ෗ෘෙේෛොෝෞෟ෠෡෢෣෤෥෦෧෨
+෩෪෫෬෭෮෯෰෱ෲෳ෴෵෶෷෸෹෺෻෼෽෾෿฀กขฃคฅฆงจฉชซฌญฎฏฐ
+ฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืุ
+ฺู฻฼฽฾฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛๜๝๞๟๠
+๡๢๣๤๥๦๧๨๩๪๫๬๭๮๯๰๱๲๳๴๵๶๷๸๹๺๻๼๽๾๿຀ກຂ຃ຄ຅ຆງຈ
+ຉຊ຋ຌຍຎຏຐຑຒຓດຕຖທຘນບປຜຝພຟຠມຢຣ຤ລ຦ວຨຩສຫຬອຮຯະ
+ັາຳິີຶື຺ຸູົຼຽ຾຿ເແໂໃໄ໅ໆ໇່້໊໋໌ໍ໎໏໐໑໒໓໔໕໖໗໘
+໙໚໛ໜໝໞໟ໠໡໢໣໤໥໦໧໨໩໪໫໬໭໮໯໰໱໲໳໴໵໶໷໸໹໺໻໼໽໾໿ༀ
+༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟༠༡༢༣༤༥༦༧༨
+༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ཀཁགགྷངཅཆཇ཈ཉཊཋཌཌྷཎཏཐ
+དདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬ཭཮཯཰ཱཱཱིིུུྲྀཷླྀ
+ཹེཻོཽཾཿ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗ྘ྙྚྛྜྜྷྞྟྠ
+ྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྽྾྿࿀࿁࿂࿃࿄࿅࿆࿇࿈
+࿉࿊࿋࿌࿍࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚࿛࿜࿝࿞࿟࿠࿡࿢࿣࿤࿥࿦࿧࿨࿩࿪࿫࿬࿭࿮࿯࿰
+࿱࿲࿳࿴࿵࿶࿷࿸࿹࿺࿻࿼࿽࿾࿿ကခဂဃငစဆဇဈဉညဋဌဍဎဏတထဒဓနပဖဗဘ
+မယရလဝသဟဠအဢဣဤဥဦဧဨဩဪါာိီုူေဲဳဴဵံ့း္်ျြွှဿ၀
+၁၂၃၄၅၆၇၈၉၊။၌၍၎၏ၐၑၒၓၔၕၖၗၘၙၚၛၜၝၞၟၠၡၢၣၤၥၦၧၨ
+ၩၪၫၬၭၮၯၰၱၲၳၴၵၶၷၸၹၺၻၼၽၾၿႀႁႂႃႄႅႆႇႈႉႊႋႌႍႎႏ႐
+႑႒႓႔႕႖႗႘႙ႚႛႜႝ႞႟ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸ
+ႹႺႻႼႽႾႿჀჁჂჃჄჅ჆Ⴧ჈჉჊჋჌Ⴭ჎჏აბგდევზთიკლმნოპჟრ
+სტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ჻ჼჽჾჿᄀᄁᄂᄃᄄᄅᄆᄇᄈ
+ᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯᄰ
+ᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿᅀᅁᅂᅃᅄᅅᅆᅇᅈᅉᅊᅋᅌᅍᅎᅏᅐᅑᅒᅓᅔᅕᅖᅗᅘ
+ᅙᅚᅛᅜᅝᅞᅟᅠᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿᆀ
+ᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟᆠᆡᆢᆣᆤᆥᆦᆧᆨ
+ᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏᇐ
+ᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯᇰᇱᇲᇳᇴᇵᇶᇷᇸ
+ᇹᇺᇻᇼᇽᇾᇿሀሁሂሃሄህሆሇለሉሊላሌልሎሏሐሑሒሓሔሕሖሗመሙሚማሜምሞሟሠ
+ሡሢሣሤሥሦሧረሩሪራሬርሮሯሰሱሲሳሴስሶሷሸሹሺሻሼሽሾሿቀቁቂቃቄቅቆቇቈ
+቉ቊቋቌቍ቎቏ቐቑቒቓቔቕቖ቗ቘ቙ቚቛቜቝ቞቟በቡቢባቤብቦቧቨቩቪቫቬቭቮቯተ
+ቱቲታቴትቶቷቸቹቺቻቼችቾቿኀኁኂኃኄኅኆኇኈ኉ኊኋኌኍ኎኏ነኑኒናኔንኖኗኘ
+ኙኚኛኜኝኞኟአኡኢኣኤእኦኧከኩኪካኬክኮኯኰ኱ኲኳኴኵ኶኷ኸኹኺኻኼኽኾ኿ዀ
+዁ዂዃዄዅ዆዇ወዉዊዋዌውዎዏዐዑዒዓዔዕዖ዗ዘዙዚዛዜዝዞዟዠዡዢዣዤዥዦዧየ
+ዩዪያዬይዮዯደዱዲዳዴድዶዷዸዹዺዻዼዽዾዿጀጁጂጃጄጅጆጇገጉጊጋጌግጎጏጐ
+጑ጒጓጔጕ጖጗ጘጙጚጛጜጝጞጟጠጡጢጣጤጥጦጧጨጩጪጫጬጭጮጯጰጱጲጳጴጵጶጷጸ
+ጹጺጻጼጽጾጿፀፁፂፃፄፅፆፇፈፉፊፋፌፍፎፏፐፑፒፓፔፕፖፗፘፙፚ፛፜፝፞፟፠
+፡።፣፤፥፦፧፨፩፪፫፬፭፮፯፰፱፲፳፴፵፶፷፸፹፺፻፼፽፾፿ᎀᎁᎂᎃᎄᎅᎆᎇᎈ
+ᎉᎊᎋᎌᎍᎎᎏ᎐᎑᎒᎓᎔᎕᎖᎗᎘᎙᎚᎛᎜᎝᎞᎟ᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰ
+ᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘ
+ᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯᏰᏱᏲᏳᏴᏵ᏶᏷ᏸᏹᏺᏻᏼᏽ᏾᏿᐀
+ᐁᐂᐃᐄᐅᐆᐇᐈᐉᐊᐋᐌᐍᐎᐏᐐᐑᐒᐓᐔᐕᐖᐗᐘᐙᐚᐛᐜᐝᐞᐟᐠᐡᐢᐣᐤᐥᐦᐧᐨ
+ᐩᐪᐫᐬᐭᐮᐯᐰᐱᐲᐳᐴᐵᐶᐷᐸᐹᐺᐻᐼᐽᐾᐿᑀᑁᑂᑃᑄᑅᑆᑇᑈᑉᑊᑋᑌᑍᑎᑏᑐ
+ᑑᑒᑓᑔᑕᑖᑗᑘᑙᑚᑛᑜᑝᑞᑟᑠᑡᑢᑣᑤᑥᑦᑧᑨᑩᑪᑫᑬᑭᑮᑯᑰᑱᑲᑳᑴᑵᑶᑷᑸ
+ᑹᑺᑻᑼᑽᑾᑿᒀᒁᒂᒃᒄᒅᒆᒇᒈᒉᒊᒋᒌᒍᒎᒏᒐᒑᒒᒓᒔᒕᒖᒗᒘᒙᒚᒛᒜᒝᒞᒟᒠ
+ᒡᒢᒣᒤᒥᒦᒧᒨᒩᒪᒫᒬᒭᒮᒯᒰᒱᒲᒳᒴᒵᒶᒷᒸᒹᒺᒻᒼᒽᒾᒿᓀᓁᓂᓃᓄᓅᓆᓇᓈ
+ᓉᓊᓋᓌᓍᓎᓏᓐᓑᓒᓓᓔᓕᓖᓗᓘᓙᓚᓛᓜᓝᓞᓟᓠᓡᓢᓣᓤᓥᓦᓧᓨᓩᓪᓫᓬᓭᓮᓯᓰ
+ᓱᓲᓳᓴᓵᓶᓷᓸᓹᓺᓻᓼᓽᓾᓿᔀᔁᔂᔃᔄᔅᔆᔇᔈᔉᔊᔋᔌᔍᔎᔏᔐᔑᔒᔓᔔᔕᔖᔗᔘ
+ᔙᔚᔛᔜᔝᔞᔟᔠᔡᔢᔣᔤᔥᔦᔧᔨᔩᔪᔫᔬᔭᔮᔯᔰᔱᔲᔳᔴᔵᔶᔷᔸᔹᔺᔻᔼᔽᔾᔿᕀ
+ᕁᕂᕃᕄᕅᕆᕇᕈᕉᕊᕋᕌᕍᕎᕏᕐᕑᕒᕓᕔᕕᕖᕗᕘᕙᕚᕛᕜᕝᕞᕟᕠᕡᕢᕣᕤᕥᕦᕧᕨ
+ᕩᕪᕫᕬᕭᕮᕯᕰᕱᕲᕳᕴᕵᕶᕷᕸᕹᕺᕻᕼᕽᕾᕿᖀᖁᖂᖃᖄᖅᖆᖇᖈᖉᖊᖋᖌᖍᖎᖏᖐ
+ᖑᖒᖓᖔᖕᖖᖗᖘᖙᖚᖛᖜᖝᖞᖟᖠᖡᖢᖣᖤᖥᖦᖧᖨᖩᖪᖫᖬᖭᖮᖯᖰᖱᖲᖳᖴᖵᖶᖷᖸ
+ᖹᖺᖻᖼᖽᖾᖿᗀᗁᗂᗃᗄᗅᗆᗇᗈᗉᗊᗋᗌᗍᗎᗏᗐᗑᗒᗓᗔᗕᗖᗗᗘᗙᗚᗛᗜᗝᗞᗟᗠ
+ᗡᗢᗣᗤᗥᗦᗧᗨᗩᗪᗫᗬᗭᗮᗯᗰᗱᗲᗳᗴᗵᗶᗷᗸᗹᗺᗻᗼᗽᗾᗿᘀᘁᘂᘃᘄᘅᘆᘇᘈ
+ᘉᘊᘋᘌᘍᘎᘏᘐᘑᘒᘓᘔᘕᘖᘗᘘᘙᘚᘛᘜᘝᘞᘟᘠᘡᘢᘣᘤᘥᘦᘧᘨᘩᘪᘫᘬᘭᘮᘯᘰ
+ᘱᘲᘳᘴᘵᘶᘷᘸᘹᘺᘻᘼᘽᘾᘿᙀᙁᙂᙃᙄᙅᙆᙇᙈᙉᙊᙋᙌᙍᙎᙏᙐᙑᙒᙓᙔᙕᙖᙗᙘ
+ᙙᙚᙛᙜᙝᙞᙟᙠᙡᙢᙣᙤᙥᙦᙧᙨᙩᙪᙫᙬ᙭᙮ᙯᙰᙱᙲᙳᙴᙵᙶᙷᙸᙹᙺᙻᙼᙽᙾᙿ 
+ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔᚕᚖᚗᚘᚙᚚ᚛᚜᚝᚞᚟ᚠᚡᚢᚣᚤᚥᚦᚧᚨ
+ᚩᚪᚫᚬᚭᚮᚯᚰᚱᚲᚳᚴᚵᚶᚷᚸᚹᚺᚻᚼᚽᚾᚿᛀᛁᛂᛃᛄᛅᛆᛇᛈᛉᛊᛋᛌᛍᛎᛏᛐ
+ᛑᛒᛓᛔᛕᛖᛗᛘᛙᛚᛛᛜᛝᛞᛟᛠᛡᛢᛣᛤᛥᛦᛧᛨᛩᛪ᛫᛬᛭ᛮᛯᛰᛱᛲᛳᛴᛵᛶᛷᛸ
+᛹᛺᛻᛼᛽᛾᛿ᜀᜁᜂᜃᜄᜅᜆᜇᜈᜉᜊᜋᜌᜍᜎᜏᜐᜑᜒᜓ᜔᜕᜖᜗᜘᜙᜚᜛᜜᜝᜞ᜟᜠ
+ᜡᜢᜣᜤᜥᜦᜧᜨᜩᜪᜫᜬᜭᜮᜯᜰᜱᜲᜳ᜴᜵᜶᜷᜸᜹᜺᜻᜼᜽᜾᜿ᝀᝁᝂᝃᝄᝅᝆᝇᝈ
+ᝉᝊᝋᝌᝍᝎᝏᝐᝑᝒᝓ᝔᝕᝖᝗᝘᝙᝚᝛᝜᝝᝞᝟ᝠᝡᝢᝣᝤᝥᝦᝧᝨᝩᝪᝫᝬ᝭ᝮᝯᝰ
+᝱ᝲᝳ᝴᝵᝶᝷᝸᝹᝺᝻᝼᝽᝾᝿កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភម
+យរលវឝឞសហឡអឣឤឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ឴឵ាិីឹឺុូួើឿៀ
+េែៃោៅំះៈ៉៊់៌៍៎៏័៑្៓។៕៖ៗ៘៙៚៛ៜ៝៞៟០១២៣៤៥៦៧៨
+៩៪៫៬៭៮៯៰៱៲៳៴៵៶៷៸៹៺៻៼៽៾៿᠀᠁᠂᠃᠄᠅᠆᠇᠈᠉᠊᠋᠌᠍᠎᠏᠐
+᠑᠒᠓᠔᠕᠖᠗᠘᠙᠚᠛᠜᠝᠞᠟ᠠᠡᠢᠣᠤᠥᠦᠧᠨᠩᠪᠫᠬᠭᠮᠯᠰᠱᠲᠳᠴᠵᠶᠷᠸ
+ᠹᠺᠻᠼᠽᠾᠿᡀᡁᡂᡃᡄᡅᡆᡇᡈᡉᡊᡋᡌᡍᡎᡏᡐᡑᡒᡓᡔᡕᡖᡗᡘᡙᡚᡛᡜᡝᡞᡟᡠ
+ᡡᡢᡣᡤᡥᡦᡧᡨᡩᡪᡫᡬᡭᡮᡯᡰᡱᡲᡳᡴᡵᡶᡷᡸ᡹᡺᡻᡼᡽᡾᡿ᢀᢁᢂᢃᢄᢅᢆᢇᢈ
+ᢉᢊᢋᢌᢍᢎᢏᢐᢑᢒᢓᢔᢕᢖᢗᢘᢙᢚᢛᢜᢝᢞᢟᢠᢡᢢᢣᢤᢥᢦᢧᢨᢩᢪ᢫᢬᢭᢮᢯ᢰ
+ᢱᢲᢳᢴᢵᢶᢷᢸᢹᢺᢻᢼᢽᢾᢿᣀᣁᣂᣃᣄᣅᣆᣇᣈᣉᣊᣋᣌᣍᣎᣏᣐᣑᣒᣓᣔᣕᣖᣗᣘ
+ᣙᣚᣛᣜᣝᣞᣟᣠᣡᣢᣣᣤᣥᣦᣧᣨᣩᣪᣫᣬᣭᣮᣯᣰᣱᣲᣳᣴᣵ᣶᣷᣸᣹᣺᣻᣼᣽᣾᣿ᤀ
+ᤁᤂᤃᤄᤅᤆᤇᤈᤉᤊᤋᤌᤍᤎᤏᤐᤑᤒᤓᤔᤕᤖᤗᤘᤙᤚᤛᤜᤝᤞ᤟ᤠᤡᤢᤣᤤᤥᤦᤧᤨ
+ᤩᤪᤫ᤬᤭᤮᤯ᤰᤱᤲᤳᤴᤵᤶᤷᤸ᤻᤹᤺᤼᤽᤾᤿᥀᥁᥂᥃᥄᥅᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ᥐ
+ᥑᥒᥓᥔᥕᥖᥗᥘᥙᥚᥛᥜᥝᥞᥟᥠᥡᥢᥣᥤᥥᥦᥧᥨᥩᥪᥫᥬᥭ᥮᥯ᥰᥱᥲᥳᥴ᥵᥶᥷᥸
+᥹᥺᥻᥼᥽᥾᥿ᦀᦁᦂᦃᦄᦅᦆᦇᦈᦉᦊᦋᦌᦍᦎᦏᦐᦑᦒᦓᦔᦕᦖᦗᦘᦙᦚᦛᦜᦝᦞᦟᦠ
+ᦡᦢᦣᦤᦥᦦᦧᦨᦩᦪᦫ᦬᦭᦮᦯ᦰᦱᦲᦳᦴᦵᦶᦷᦸᦹᦺᦻᦼᦽᦾᦿᧀᧁᧂᧃᧄᧅᧆᧇᧈ
+ᧉ᧊᧋᧌᧍᧎᧏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᧚᧛᧜᧝᧞᧟᧠᧡᧢᧣᧤᧥᧦᧧᧨᧩᧪᧫᧬᧭᧮᧯᧰
+᧱᧲᧳᧴᧵᧶᧷᧸᧹᧺᧻᧼᧽᧾᧿ᨀᨁᨂᨃᨄᨅᨆᨇᨈᨉᨊᨋᨌᨍᨎᨏᨐᨑᨒᨓᨔᨕᨖᨘᨗ
+ᨙᨚᨛ᨜᨝᨞᨟ᨠᨡᨢᨣᨤᨥᨦᨧᨨᨩᨪᨫᨬᨭᨮᨯᨰᨱᨲᨳᨴᨵᨶᨷᨸᨹᨺᨻᨼᨽᨾᨿᩀ
+ᩁᩂᩃᩄᩅᩆᩇᩈᩉᩊᩋᩌᩍᩎᩏᩐᩑᩒᩓᩔᩕᩖᩗᩘᩙᩚᩛᩜᩝᩞ᩟᩠ᩡᩢᩣᩤᩥᩦᩧᩨ
+ᩩᩪᩫᩬᩭᩮᩯᩰᩱᩲᩳᩴ᩵᩶᩷᩸᩹᩺᩻᩼᩽᩾᩿᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉᪊᪋᪌᪍᪎᪏᪐
+᪑᪒᪓᪔᪕᪖᪗᪘᪙᪚᪛᪜᪝᪞᪟᪠᪡᪢᪣᪤᪥᪦ᪧ᪨᪩᪪᪫᪬᪭᪮᪯᪵᪶᪷᪸᪰᪱᪲᪳᪴
+᪹᪺᪽᪻᪼᪾ᪿᫀ᫃᫄᫊᫁᫂᫅᫆᫇᫈᫉᫋ᫌᫍᫎ᫏᫐᫑᫒᫓᫔᫕᫖᫗᫘᫙᫚᫛᫜᫝᫞᫟᫠
+᫡᫢᫣᫤᫥᫦᫧᫨᫩᫪᫫᫬᫭᫮᫯᫰᫱᫲᫳᫴᫵᫶᫷᫸᫹᫺᫻᫼᫽᫾᫿ᬀᬁᬂᬃᬄᬅᬆᬇᬈ
+ᬉᬊᬋᬌᬍᬎᬏᬐᬑᬒᬓᬔᬕᬖᬗᬘᬙᬚᬛᬜᬝᬞᬟᬠᬡᬢᬣᬤᬥᬦᬧᬨᬩᬪᬫᬬᬭᬮᬯᬰ
+ᬱᬲᬳ᬴ᬵᬶᬷᬸᬹᬺᬻᬼᬽᬾᬿᭀᭁᭂᭃ᭄ᭅᭆᭇᭈᭉᭊᭋᭌ᭍᭎᭏᭐᭑᭒᭓᭔᭕᭖᭗᭘
+᭙᭚᭛᭜᭝᭞᭟᭠᭡᭢᭣᭤᭥᭦᭧᭨᭩᭪᭬᭫᭭᭮᭯᭰᭱᭲᭳᭴᭵᭶᭷᭸᭹᭺᭻᭼᭽᭾᭿ᮀ
+ᮁᮂᮃᮄᮅᮆᮇᮈᮉᮊᮋᮌᮍᮎᮏᮐᮑᮒᮓᮔᮕᮖᮗᮘᮙᮚᮛᮜᮝᮞᮟᮠᮡᮢᮣᮤᮥᮦᮧᮨ
+ᮩ᮪᮫ᮬᮭᮮᮯ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ᮺᮻᮼᮽᮾᮿᯀᯁᯂᯃᯄᯅᯆᯇᯈᯉᯊᯋᯌᯍᯎᯏᯐ
+ᯑᯒᯓᯔᯕᯖᯗᯘᯙᯚᯛᯜᯝᯞᯟᯠᯡᯢᯣᯤᯥ᯦ᯧᯨᯩᯪᯫᯬᯭᯮᯯᯰᯱ᯲᯳᯴᯵᯶᯷᯸
+᯹᯺᯻᯼᯽᯾᯿ᰀᰁᰂᰃᰄᰅᰆᰇᰈᰉᰊᰋᰌᰍᰎᰏᰐᰑᰒᰓᰔᰕᰖᰗᰘᰙᰚᰛᰜᰝᰞᰟᰠ
+ᰡᰢᰣᰤᰥᰦᰧᰨᰩᰪᰫᰬᰭᰮᰯᰰᰱᰲᰳᰴᰵᰶ᰷᰸᰹᰺᰻᰼᰽᰾᰿᱀᱁᱂᱃᱄᱅᱆᱇᱈
+᱉᱊᱋᱌ᱍᱎᱏ᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙ᱚᱛᱜᱝᱞᱟᱠᱡᱢᱣᱤᱥᱦᱧᱨᱩᱪᱫᱬᱭᱮᱯᱰ
+ᱱᱲᱳᱴᱵᱶᱷᱸᱹᱺᱻᱼᱽ᱾᱿ᲀᲁᲂᲃᲄᲅᲆᲇᲈᲉᲊ᲋᲌᲍᲎᲏ᲐᲑᲒᲓᲔᲕᲖᲗᲘ
+ᲙᲚᲛᲜᲝᲞᲟᲠᲡᲢᲣᲤᲥᲦᲧᲨᲩᲪᲫᲬᲭᲮᲯᲰᲱᲲᲳᲴᲵᲶᲷᲸᲹᲺ᲻᲼ᲽᲾᲿ᳀
+᳁᳂᳃᳄᳅᳆᳇᳈᳉᳊᳋᳌᳍᳎᳏᳐᳑᳒᳓᳔᳕᳖᳗᳘᳙᳜᳝᳞᳟᳚᳛᳠᳡᳢᳣᳤᳥᳦᳧᳨
+ᳩᳪᳫᳬ᳭ᳮᳯᳰᳱᳲᳳ᳴ᳵᳶ᳷᳸᳹ᳺ᳻᳼᳽᳾᳿ᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐ
+ᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸ
+ᴹᴺᴻᴼᴽᴾᴿᵀᵁᵂᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌᵍᵎᵏᵐᵑᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜᵝᵞᵟᵠ
+ᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵸᵹᵺᵻᵼᵽᵾᵿᶀᶁᶂᶃᶄᶅᶆᶇᶈ
+ᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚᶛᶜᶝᶞᶟᶠᶡᶢᶣᶤᶥᶦᶧᶨᶩᶪᶫᶬᶭᶮᶯᶰ
+ᶱᶲᶳᶴᶵᶶᶷᶸᶹᶺᶻᶼᶽᶾᶿ᷐᷎᷂᷊᷏᷀᷁᷃᷄᷅᷆᷇᷈᷉᷋᷌᷑᷒ᷓᷔᷕᷖᷗᷘ᷍
+᷺᷹᷽᷿᷷᷸ᷙᷚᷛᷜᷝᷞᷟᷠᷡᷢᷣᷤᷥᷦᷧᷨᷩᷪᷫᷬᷭᷮᷯᷰᷱᷲᷳᷴ᷵᷻᷾᷶᷼Ḁ
+ḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨ
+ḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐ
+ṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸ
+ṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟẠ
+ạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈ
+ỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰ
+ựỲỳỴỵỶỷỸỹỺỻỼỽỾỿἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏἐἑἒἓἔἕ἖἗Ἐ
+ἙἚἛἜἝ἞἟ἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿὀ
+ὁὂὃὄὅ὆὇ὈὉὊὋὌὍ὎὏ὐὑὒὓὔὕὖὗ὘Ὑ὚Ὓ὜Ὕ὞ὟὠὡὢὣὤὥὦὧὨ
+ὩὪὫὬὭὮὯὰάὲέὴήὶίὸόὺύὼώ὾὿ᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏᾐ
+ᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾰᾱᾲᾳᾴ᾵ᾶᾷᾸ
+ᾹᾺΆᾼ᾽ι᾿῀῁ῂῃῄ῅ῆῇῈΈῊΉῌ῍῎῏ῐῑῒΐ῔῕ῖῗῘῙῚΊ῜῝῞῟ῠ
+ῡῢΰῤῥῦῧῨῩῪΎῬ῭΅`῰῱ῲῳῴ῵ῶῷῸΌῺΏῼ´῾῿         
+  ​‌‍‎‏‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧

‪‫‬‭‮ ‰
+‱′″‴‵‶‷‸‹›※‼‽‾‿⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘
+⁙⁚⁛⁜⁝⁞ ⁠⁡⁢⁣⁤⁥⁦⁧⁨⁩⁰ⁱ⁲⁳⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀
+₁₂₃₄₅₆₇₈₉₊₋₌₍₎₏ₐₑₒₓₔₕₖₗₘₙₚₛₜ₝₞₟₠₡₢₣₤₥₦₧₨
+₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₻₼₽₾₿⃀⃁⃂⃃⃄⃅⃆⃇⃈⃉⃊⃋⃌⃍⃎⃏⃐
+⃒⃓⃘⃙⃚⃑⃔⃕⃖⃗⃛⃜⃝⃞⃟⃠⃡⃢⃣⃤⃥⃦⃪⃫⃨⃬⃭⃮⃯⃧⃩⃰⃱⃲⃳⃴⃵⃶⃷⃸
+⃹⃺⃻⃼⃽⃾⃿℀℁ℂ℃℄℅℆ℇ℈℉ℊℋℌℍℎℏℐℑℒℓ℔ℕ№℗℘ℙℚℛℜℝ℞℟℠
+℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯℰℱℲℳℴℵℶℷℸℹ℺℻ℼℽℾℿ⅀⅁⅂⅃⅄ⅅⅆⅇⅈ
+ⅉ⅊⅋⅌⅍ⅎ⅏⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰ
+ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↀↁↂↃↄↅↆↇↈ↉↊↋↌↍↎↏←↑→↓↔↕↖↗↘
+↙↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀
+⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨
+⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐
+∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸
+∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠
+≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈
+⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰
+⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘
+⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌀
+⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟⌠⌡⌢⌣⌤⌥⌦⌧⌨
+〈〉⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐
+⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸
+⍹⍺⍻⍼⍽⍾⍿⎀⎁⎂⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌⎍⎎⎏⎐⎑⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜⎝⎞⎟⎠
+⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈
+⏉⏊⏋⏌⏍⏎⏏⏐⏑⏒⏓⏔⏕⏖⏗⏘⏙⏚⏛⏜⏝⏞⏟⏠⏡⏢⏣⏤⏥⏦⏧⏨⏩⏪⏫⏬⏭⏮⏯⏰
+⏱⏲⏳⏴⏵⏶⏷⏸⏹⏺⏻⏼⏽⏾⏿␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘
+␙␚␛␜␝␞␟␠␡␢␣␤␥␦␧␨␩␪␫␬␭␮␯␰␱␲␳␴␵␶␷␸␹␺␻␼␽␾␿⑀
+⑁⑂⑃⑄⑅⑆⑇⑈⑉⑊⑋⑌⑍⑎⑏⑐⑑⑒⑓⑔⑕⑖⑗⑘⑙⑚⑛⑜⑝⑞⑟①②③④⑤⑥⑦⑧⑨
+⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐
+⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⒶⒷⒸ
+ⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠ
+ⓡⓢⓣⓤⓥⓦⓧⓨⓩ⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾⓿─━│┃┄┅┆┇┈
+┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰
+┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘
+╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿▀
+▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟■□▢▣▤▥▦▧▨
+▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐
+◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸
+◹◺◻◼◽◾◿☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟☠
+☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂♃♄♅♆♇♈
+♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰
+♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘
+⚙⚚⚛⚜⚝⚞⚟⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿⛀
+⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⛢⛣⛤⛥⛦⛧⛨
+⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐
+✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸
+✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟❠
+❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈
+➉➊➋➌➍➎➏➐➑➒➓➔➕➖➗➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰
+➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿⟀⟁⟂⟃⟄⟅⟆⟇⟈⟉⟊⟋⟌⟍⟎⟏⟐⟑⟒⟓⟔⟕⟖⟗⟘
+⟙⟚⟛⟜⟝⟞⟟⟠⟡⟢⟣⟤⟥⟦⟧⟨⟩⟪⟫⟬⟭⟮⟯⟰⟱⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿⠀
+⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨
+⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐
+⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸
+⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟⢠
+⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿⣀⣁⣂⣃⣄⣅⣆⣇⣈
+⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰
+⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘
+⤙⤚⤛⤜⤝⤞⤟⤠⤡⤢⤣⤤⤥⤦⤧⤨⤩⤪⤫⤬⤭⤮⤯⤰⤱⤲⤳⤴⤵⤶⤷⤸⤹⤺⤻⤼⤽⤾⤿⥀
+⥁⥂⥃⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨
+⥩⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵⥶⥷⥸⥹⥺⥻⥼⥽⥾⥿⦀⦁⦂⦃⦄⦅⦆⦇⦈⦉⦊⦋⦌⦍⦎⦏⦐
+⦑⦒⦓⦔⦕⦖⦗⦘⦙⦚⦛⦜⦝⦞⦟⦠⦡⦢⦣⦤⦥⦦⦧⦨⦩⦪⦫⦬⦭⦮⦯⦰⦱⦲⦳⦴⦵⦶⦷⦸
+⦹⦺⦻⦼⦽⦾⦿⧀⧁⧂⧃⧄⧅⧆⧇⧈⧉⧊⧋⧌⧍⧎⧏⧐⧑⧒⧓⧔⧕⧖⧗⧘⧙⧚⧛⧜⧝⧞⧟⧠
+⧡⧢⧣⧤⧥⧦⧧⧨⧩⧪⧫⧬⧭⧮⧯⧰⧱⧲⧳⧴⧵⧶⧷⧸⧹⧺⧻⧼⧽⧾⧿⨀⨁⨂⨃⨄⨅⨆⨇⨈
+⨉⨊⨋⨌⨍⨎⨏⨐⨑⨒⨓⨔⨕⨖⨗⨘⨙⨚⨛⨜⨝⨞⨟⨠⨡⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨯⨰
+⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⨾⨿⩀⩁⩂⩃⩄⩅⩆⩇⩈⩉⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘
+⩙⩚⩛⩜⩝⩞⩟⩠⩡⩢⩣⩤⩥⩦⩧⩨⩩⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀
+⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨
+⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐
+⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚⫛⫝̸⫝⫞⫟⫠⫡⫢⫣⫤⫥⫦⫧⫨⫩⫪⫫⫬⫭⫮⫯⫰⫱⫲⫳⫴⫵⫶⫷⫸
+⫹⫺⫻⫼⫽⫾⫿⬀⬁⬂⬃⬄⬅⬆⬇⬈⬉⬊⬋⬌⬍⬎⬏⬐⬑⬒⬓⬔⬕⬖⬗⬘⬙⬚⬛⬜⬝⬞⬟⬠
+⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬⬭⬮⬯⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭅⭆⭇⭈
+⭉⭊⭋⭌⭍⭎⭏⭐⭑⭒⭓⭔⭕⭖⭗⭘⭙⭚⭛⭜⭝⭞⭟⭠⭡⭢⭣⭤⭥⭦⭧⭨⭩⭪⭫⭬⭭⭮⭯⭰
+⭱⭲⭳⭴⭵⭶⭷⭸⭹⭺⭻⭼⭽⭾⭿⮀⮁⮂⮃⮄⮅⮆⮇⮈⮉⮊⮋⮌⮍⮎⮏⮐⮑⮒⮓⮔⮕⮖⮗⮘
+⮙⮚⮛⮜⮝⮞⮟⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬⮭⮮⮯⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿⯀
+⯁⯂⯃⯄⯅⯆⯇⯈⯉⯊⯋⯌⯍⯎⯏⯐⯑⯒⯓⯔⯕⯖⯗⯘⯙⯚⯛⯜⯝⯞⯟⯠⯡⯢⯣⯤⯥⯦⯧⯨
+⯩⯪⯫⯬⯭⯮⯯⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐ
+ⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮⰯⰰⰱⰲⰳⰴⰵⰶⰷⰸ
+ⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱟⱠ
+ⱡⱢⱣⱤⱥⱦⱧⱨⱩⱪⱫⱬⱭⱮⱯⱰⱱⱲⱳⱴⱵⱶⱷⱸⱹⱺⱻⱼⱽⱾⱿⲀⲁⲂⲃⲄⲅⲆⲇⲈ
+ⲉⲊⲋⲌⲍⲎⲏⲐⲑⲒⲓⲔⲕⲖⲗⲘⲙⲚⲛⲜⲝⲞⲟⲠⲡⲢⲣⲤⲥⲦⲧⲨⲩⲪⲫⲬⲭⲮⲯⲰ
+ⲱⲲⲳⲴⲵⲶⲷⲸⲹⲺⲻⲼⲽⲾⲿⳀⳁⳂⳃⳄⳅⳆⳇⳈⳉⳊⳋⳌⳍⳎⳏⳐⳑⳒⳓⳔⳕⳖⳗⳘ
+ⳙⳚⳛⳜⳝⳞⳟⳠⳡⳢⳣⳤ⳥⳦⳧⳨⳩⳪ⳫⳬⳭⳮ⳯⳰⳱Ⳳⳳ⳴⳵⳶⳷⳸⳹⳺⳻⳼⳽⳾⳿ⴀ
+ⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟⴠⴡⴢⴣⴤⴥ⴦ⴧ⴨
+⴩⴪⴫⴬ⴭ⴮⴯ⴰⴱⴲⴳⴴⴵⴶⴷⴸⴹⴺⴻⴼⴽⴾⴿⵀⵁⵂⵃⵄⵅⵆⵇⵈⵉⵊⵋⵌⵍⵎⵏⵐ
+ⵑⵒⵓⵔⵕⵖⵗⵘⵙⵚⵛⵜⵝⵞⵟⵠⵡⵢⵣⵤⵥⵦⵧ⵨⵩⵪⵫⵬⵭⵮ⵯ⵰⵱⵲⵳⵴⵵⵶⵷⵸
+⵹⵺⵻⵼⵽⵾⵿ⶀⶁⶂⶃⶄⶅⶆⶇⶈⶉⶊⶋⶌⶍⶎⶏⶐⶑⶒⶓⶔⶕⶖ⶗⶘⶙⶚⶛⶜⶝⶞⶟ⶠ
+ⶡⶢⶣⶤⶥⶦ⶧ⶨⶩⶪⶫⶬⶭⶮ⶯ⶰⶱⶲⶳⶴⶵⶶ⶷ⶸⶹⶺⶻⶼⶽⶾ⶿ⷀⷁⷂⷃⷄⷅⷆ⷇ⷈ
+ⷉⷊⷋⷌⷍⷎ⷏ⷐⷑⷒⷓⷔⷕⷖ⷗ⷘⷙⷚⷛⷜⷝⷞ⷟ⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰ
+ⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿ⸀⸁⸂⸃⸄⸅⸆⸇⸈⸉⸊⸋⸌⸍⸎⸏⸐⸑⸒⸓⸔⸕⸖⸗⸘
+⸙⸚⸛⸜⸝⸞⸟⸠⸡⸢⸣⸤⸥⸦⸧⸨⸩⸪⸫⸬⸭⸮ⸯ⸰⸱⸲⸳⸴⸵⸶⸷⸸⸹⸺⸻⸼⸽⸾⸿⹀
+⹁⹂⹃⹄⹅⹆⹇⹈⹉⹊⹋⹌⹍⹎⹏⹐⹑⹒⹓⹔⹕⹖⹗⹘⹙⹚⹛⹜⹝⹞⹟⹠⹡⹢⹣⹤⹥⹦⹧⹨
+⹩⹪⹫⹬⹭⹮⹯⹰⹱⹲⹳⹴⹵⹶⹷⹸⹹⹺⹻⹼⹽⹾⹿⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊⺋⺌⺍⺎⺏⺐
+⺑⺒⺓⺔⺕⺖⺗⺘⺙⺚⺛⺜⺝⺞⺟⺠⺡⺢⺣⺤⺥⺦⺧⺨⺩⺪⺫⺬⺭⺮⺯⺰⺱⺲⺳⺴⺵⺶⺷⺸
+⺹⺺⺻⺼⺽⺾⺿⻀⻁⻂⻃⻄⻅⻆⻇⻈⻉⻊⻋⻌⻍⻎⻏⻐⻑⻒⻓⻔⻕⻖⻗⻘⻙⻚⻛⻜⻝⻞⻟⻠
+⻡⻢⻣⻤⻥⻦⻧⻨⻩⻪⻫⻬⻭⻮⻯⻰⻱⻲⻳⻴⻵⻶⻷⻸⻹⻺⻻⻼⻽⻾⻿⼀⼁⼂⼃⼄⼅⼆⼇⼈
+⼉⼊⼋⼌⼍⼎⼏⼐⼑⼒⼓⼔⼕⼖⼗⼘⼙⼚⼛⼜⼝⼞⼟⼠⼡⼢⼣⼤⼥⼦⼧⼨⼩⼪⼫⼬⼭⼮⼯⼰
+⼱⼲⼳⼴⼵⼶⼷⼸⼹⼺⼻⼼⼽⼾⼿⽀⽁⽂⽃⽄⽅⽆⽇⽈⽉⽊⽋⽌⽍⽎⽏⽐⽑⽒⽓⽔⽕⽖⽗⽘
+⽙⽚⽛⽜⽝⽞⽟⽠⽡⽢⽣⽤⽥⽦⽧⽨⽩⽪⽫⽬⽭⽮⽯⽰⽱⽲⽳⽴⽵⽶⽷⽸⽹⽺⽻⽼⽽⽾⽿⾀
+⾁⾂⾃⾄⾅⾆⾇⾈⾉⾊⾋⾌⾍⾎⾏⾐⾑⾒⾓⾔⾕⾖⾗⾘⾙⾚⾛⾜⾝⾞⾟⾠⾡⾢⾣⾤⾥⾦⾧⾨
+⾩⾪⾫⾬⾭⾮⾯⾰⾱⾲⾳⾴⾵⾶⾷⾸⾹⾺⾻⾼⾽⾾⾿⿀⿁⿂⿃⿄⿅⿆⿇⿈⿉⿊⿋⿌⿍⿎⿏⿐
+⿑⿒⿓⿔⿕⿖⿗⿘⿙⿚⿛⿜⿝⿞⿟⿠⿡⿢⿣⿤⿥⿦⿧⿨⿩⿪⿫⿬⿭⿮⿯⿰⿱⿲⿳⿴⿵⿶⿷⿸
+⿹⿺⿻⿼⿽⿾⿿ 、。〃〄々〆〇〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠
+〡〢〣〤〥〦〧〨〩〪〭〮〯〫〬〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾〿぀ぁあぃいぅうぇえ
+ぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはば
+ぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゗゘
+゙゚゛゜ゝゞゟ゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダ
+チヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨ
+ラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ㄀㄁㄂㄃㄄ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐ
+ㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩㄪㄫㄬㄭㄮㄯ㄰ㄱㄲㄳㄴㄵㄶㄷㄸ
+ㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠ
+ㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈ
+ㆉㆊㆋㆌㆍㆎ㆏㆐㆑㆒㆓㆔㆕㆖㆗㆘㆙㆚㆛㆜㆝㆞㆟ㆠㆡㆢㆣㆤㆥㆦㆧㆨㆩㆪㆫㆬㆭㆮㆯㆰ
+ㆱㆲㆳㆴㆵㆶㆷㆸㆹㆺㆻㆼㆽㆾㆿ㇀㇁㇂㇃㇄㇅㇆㇇㇈㇉㇊㇋㇌㇍㇎㇏㇐㇑㇒㇓㇔㇕㇖㇗㇘
+㇙㇚㇛㇜㇝㇞㇟㇠㇡㇢㇣㇤㇥㇦㇧㇨㇩㇪㇫㇬㇭㇮㇯ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ㈀
+㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㈝㈞㈟㈠㈡㈢㈣㈤㈥㈦㈧㈨
+㈩㈪㈫㈬㈭㈮㈯㈰㈱㈲㈳㈴㈵㈶㈷㈸㈹㈺㈻㈼㈽㈾㈿㉀㉁㉂㉃㉄㉅㉆㉇㉈㉉㉊㉋㉌㉍㉎㉏㉐
+㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸
+㉹㉺㉻㉼㉽㉾㉿㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗㊘㊙㊚㊛㊜㊝㊞㊟㊠
+㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿㋀㋁㋂㋃㋄㋅㋆㋇㋈
+㋉㋊㋋㋌㋍㋎㋏㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰
+㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋽㋾㋿㌀㌁㌂㌃㌄㌅㌆㌇㌈㌉㌊㌋㌌㌍㌎㌏㌐㌑㌒㌓㌔㌕㌖㌗㌘
+㌙㌚㌛㌜㌝㌞㌟㌠㌡㌢㌣㌤㌥㌦㌧㌨㌩㌪㌫㌬㌭㌮㌯㌰㌱㌲㌳㌴㌵㌶㌷㌸㌹㌺㌻㌼㌽㌾㌿㍀
+㍁㍂㍃㍄㍅㍆㍇㍈㍉㍊㍋㍌㍍㍎㍏㍐㍑㍒㍓㍔㍕㍖㍗㍘㍙㍚㍛㍜㍝㍞㍟㍠㍡㍢㍣㍤㍥㍦㍧㍨
+㍩㍪㍫㍬㍭㍮㍯㍰㍱㍲㍳㍴㍵㍶㍷㍸㍹㍺㍻㍼㍽㍾㍿㎀㎁㎂㎃㎄㎅㎆㎇㎈㎉㎊㎋㎌㎍㎎㎏㎐
+㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸
+㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏋㏌㏍㏎㏏㏐㏑㏒㏓㏔㏕㏖㏗㏘㏙㏚㏛㏜㏝㏞㏟㏠
+㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾㏿㐀㐁㐂㐃㐄㐅㐆㐇㐈
+㐉㐊㐋㐌㐍㐎㐏㐐㐑㐒㐓㐔㐕㐖㐗㐘㐙㐚㐛㐜㐝㐞㐟㐠㐡㐢㐣㐤㐥㐦㐧㐨㐩㐪㐫㐬㐭㐮㐯㐰
+㐱㐲㐳㐴㐵㐶㐷㐸㐹㐺㐻㐼㐽㐾㐿㑀㑁㑂㑃㑄㑅㑆㑇㑈㑉㑊㑋㑌㑍㑎㑏㑐㑑㑒㑓㑔㑕㑖㑗㑘
+㑙㑚㑛㑜㑝㑞㑟㑠㑡㑢㑣㑤㑥㑦㑧㑨㑩㑪㑫㑬㑭㑮㑯㑰㑱㑲㑳㑴㑵㑶㑷㑸㑹㑺㑻㑼㑽㑾㑿㒀
+㒁㒂㒃㒄㒅㒆㒇㒈㒉㒊㒋㒌㒍㒎㒏㒐㒑㒒㒓㒔㒕㒖㒗㒘㒙㒚㒛㒜㒝㒞㒟㒠㒡㒢㒣㒤㒥㒦㒧㒨
+㒩㒪㒫㒬㒭㒮㒯㒰㒱㒲㒳㒴㒵㒶㒷㒸㒹㒺㒻㒼㒽㒾㒿㓀㓁㓂㓃㓄㓅㓆㓇㓈㓉㓊㓋㓌㓍㓎㓏㓐
+㓑㓒㓓㓔㓕㓖㓗㓘㓙㓚㓛㓜㓝㓞㓟㓠㓡㓢㓣㓤㓥㓦㓧㓨㓩㓪㓫㓬㓭㓮㓯㓰㓱㓲㓳㓴㓵㓶㓷㓸
+㓹㓺㓻㓼㓽㓾㓿㔀㔁㔂㔃㔄㔅㔆㔇㔈㔉㔊㔋㔌㔍㔎㔏㔐㔑㔒㔓㔔㔕㔖㔗㔘㔙㔚㔛㔜㔝㔞㔟㔠
+㔡㔢㔣㔤㔥㔦㔧㔨㔩㔪㔫㔬㔭㔮㔯㔰㔱㔲㔳㔴㔵㔶㔷㔸㔹㔺㔻㔼㔽㔾㔿㕀㕁㕂㕃㕄㕅㕆㕇㕈
+㕉㕊㕋㕌㕍㕎㕏㕐㕑㕒㕓㕔㕕㕖㕗㕘㕙㕚㕛㕜㕝㕞㕟㕠㕡㕢㕣㕤㕥㕦㕧㕨㕩㕪㕫㕬㕭㕮㕯㕰
+㕱㕲㕳㕴㕵㕶㕷㕸㕹㕺㕻㕼㕽㕾㕿㖀㖁㖂㖃㖄㖅㖆㖇㖈㖉㖊㖋㖌㖍㖎㖏㖐㖑㖒㖓㖔㖕㖖㖗㖘
+㖙㖚㖛㖜㖝㖞㖟㖠㖡㖢㖣㖤㖥㖦㖧㖨㖩㖪㖫㖬㖭㖮㖯㖰㖱㖲㖳㖴㖵㖶㖷㖸㖹㖺㖻㖼㖽㖾㖿㗀
+㗁㗂㗃㗄㗅㗆㗇㗈㗉㗊㗋㗌㗍㗎㗏㗐㗑㗒㗓㗔㗕㗖㗗㗘㗙㗚㗛㗜㗝㗞㗟㗠㗡㗢㗣㗤㗥㗦㗧㗨
+㗩㗪㗫㗬㗭㗮㗯㗰㗱㗲㗳㗴㗵㗶㗷㗸㗹㗺㗻㗼㗽㗾㗿㘀㘁㘂㘃㘄㘅㘆㘇㘈㘉㘊㘋㘌㘍㘎㘏㘐
+㘑㘒㘓㘔㘕㘖㘗㘘㘙㘚㘛㘜㘝㘞㘟㘠㘡㘢㘣㘤㘥㘦㘧㘨㘩㘪㘫㘬㘭㘮㘯㘰㘱㘲㘳㘴㘵㘶㘷㘸
+㘹㘺㘻㘼㘽㘾㘿㙀㙁㙂㙃㙄㙅㙆㙇㙈㙉㙊㙋㙌㙍㙎㙏㙐㙑㙒㙓㙔㙕㙖㙗㙘㙙㙚㙛㙜㙝㙞㙟㙠
+㙡㙢㙣㙤㙥㙦㙧㙨㙩㙪㙫㙬㙭㙮㙯㙰㙱㙲㙳㙴㙵㙶㙷㙸㙹㙺㙻㙼㙽㙾㙿㚀㚁㚂㚃㚄㚅㚆㚇㚈
+㚉㚊㚋㚌㚍㚎㚏㚐㚑㚒㚓㚔㚕㚖㚗㚘㚙㚚㚛㚜㚝㚞㚟㚠㚡㚢㚣㚤㚥㚦㚧㚨㚩㚪㚫㚬㚭㚮㚯㚰
+㚱㚲㚳㚴㚵㚶㚷㚸㚹㚺㚻㚼㚽㚾㚿㛀㛁㛂㛃㛄㛅㛆㛇㛈㛉㛊㛋㛌㛍㛎㛏㛐㛑㛒㛓㛔㛕㛖㛗㛘
+㛙㛚㛛㛜㛝㛞㛟㛠㛡㛢㛣㛤㛥㛦㛧㛨㛩㛪㛫㛬㛭㛮㛯㛰㛱㛲㛳㛴㛵㛶㛷㛸㛹㛺㛻㛼㛽㛾㛿㜀
+㜁㜂㜃㜄㜅㜆㜇㜈㜉㜊㜋㜌㜍㜎㜏㜐㜑㜒㜓㜔㜕㜖㜗㜘㜙㜚㜛㜜㜝㜞㜟㜠㜡㜢㜣㜤㜥㜦㜧㜨
+㜩㜪㜫㜬㜭㜮㜯㜰㜱㜲㜳㜴㜵㜶㜷㜸㜹㜺㜻㜼㜽㜾㜿㝀㝁㝂㝃㝄㝅㝆㝇㝈㝉㝊㝋㝌㝍㝎㝏㝐
+㝑㝒㝓㝔㝕㝖㝗㝘㝙㝚㝛㝜㝝㝞㝟㝠㝡㝢㝣㝤㝥㝦㝧㝨㝩㝪㝫㝬㝭㝮㝯㝰㝱㝲㝳㝴㝵㝶㝷㝸
+㝹㝺㝻㝼㝽㝾㝿㞀㞁㞂㞃㞄㞅㞆㞇㞈㞉㞊㞋㞌㞍㞎㞏㞐㞑㞒㞓㞔㞕㞖㞗㞘㞙㞚㞛㞜㞝㞞㞟㞠
+㞡㞢㞣㞤㞥㞦㞧㞨㞩㞪㞫㞬㞭㞮㞯㞰㞱㞲㞳㞴㞵㞶㞷㞸㞹㞺㞻㞼㞽㞾㞿㟀㟁㟂㟃㟄㟅㟆㟇㟈
+㟉㟊㟋㟌㟍㟎㟏㟐㟑㟒㟓㟔㟕㟖㟗㟘㟙㟚㟛㟜㟝㟞㟟㟠㟡㟢㟣㟤㟥㟦㟧㟨㟩㟪㟫㟬㟭㟮㟯㟰
+㟱㟲㟳㟴㟵㟶㟷㟸㟹㟺㟻㟼㟽㟾㟿㠀㠁㠂㠃㠄㠅㠆㠇㠈㠉㠊㠋㠌㠍㠎㠏㠐㠑㠒㠓㠔㠕㠖㠗㠘
+㠙㠚㠛㠜㠝㠞㠟㠠㠡㠢㠣㠤㠥㠦㠧㠨㠩㠪㠫㠬㠭㠮㠯㠰㠱㠲㠳㠴㠵㠶㠷㠸㠹㠺㠻㠼㠽㠾㠿㡀
+㡁㡂㡃㡄㡅㡆㡇㡈㡉㡊㡋㡌㡍㡎㡏㡐㡑㡒㡓㡔㡕㡖㡗㡘㡙㡚㡛㡜㡝㡞㡟㡠㡡㡢㡣㡤㡥㡦㡧㡨
+㡩㡪㡫㡬㡭㡮㡯㡰㡱㡲㡳㡴㡵㡶㡷㡸㡹㡺㡻㡼㡽㡾㡿㢀㢁㢂㢃㢄㢅㢆㢇㢈㢉㢊㢋㢌㢍㢎㢏㢐
+㢑㢒㢓㢔㢕㢖㢗㢘㢙㢚㢛㢜㢝㢞㢟㢠㢡㢢㢣㢤㢥㢦㢧㢨㢩㢪㢫㢬㢭㢮㢯㢰㢱㢲㢳㢴㢵㢶㢷㢸
+㢹㢺㢻㢼㢽㢾㢿㣀㣁㣂㣃㣄㣅㣆㣇㣈㣉㣊㣋㣌㣍㣎㣏㣐㣑㣒㣓㣔㣕㣖㣗㣘㣙㣚㣛㣜㣝㣞㣟㣠
+㣡㣢㣣㣤㣥㣦㣧㣨㣩㣪㣫㣬㣭㣮㣯㣰㣱㣲㣳㣴㣵㣶㣷㣸㣹㣺㣻㣼㣽㣾㣿㤀㤁㤂㤃㤄㤅㤆㤇㤈
+㤉㤊㤋㤌㤍㤎㤏㤐㤑㤒㤓㤔㤕㤖㤗㤘㤙㤚㤛㤜㤝㤞㤟㤠㤡㤢㤣㤤㤥㤦㤧㤨㤩㤪㤫㤬㤭㤮㤯㤰
+㤱㤲㤳㤴㤵㤶㤷㤸㤹㤺㤻㤼㤽㤾㤿㥀㥁㥂㥃㥄㥅㥆㥇㥈㥉㥊㥋㥌㥍㥎㥏㥐㥑㥒㥓㥔㥕㥖㥗㥘
+㥙㥚㥛㥜㥝㥞㥟㥠㥡㥢㥣㥤㥥㥦㥧㥨㥩㥪㥫㥬㥭㥮㥯㥰㥱㥲㥳㥴㥵㥶㥷㥸㥹㥺㥻㥼㥽㥾㥿㦀
+㦁㦂㦃㦄㦅㦆㦇㦈㦉㦊㦋㦌㦍㦎㦏㦐㦑㦒㦓㦔㦕㦖㦗㦘㦙㦚㦛㦜㦝㦞㦟㦠㦡㦢㦣㦤㦥㦦㦧㦨
+㦩㦪㦫㦬㦭㦮㦯㦰㦱㦲㦳㦴㦵㦶㦷㦸㦹㦺㦻㦼㦽㦾㦿㧀㧁㧂㧃㧄㧅㧆㧇㧈㧉㧊㧋㧌㧍㧎㧏㧐
+㧑㧒㧓㧔㧕㧖㧗㧘㧙㧚㧛㧜㧝㧞㧟㧠㧡㧢㧣㧤㧥㧦㧧㧨㧩㧪㧫㧬㧭㧮㧯㧰㧱㧲㧳㧴㧵㧶㧷㧸
+㧹㧺㧻㧼㧽㧾㧿㨀㨁㨂㨃㨄㨅㨆㨇㨈㨉㨊㨋㨌㨍㨎㨏㨐㨑㨒㨓㨔㨕㨖㨗㨘㨙㨚㨛㨜㨝㨞㨟㨠
+㨡㨢㨣㨤㨥㨦㨧㨨㨩㨪㨫㨬㨭㨮㨯㨰㨱㨲㨳㨴㨵㨶㨷㨸㨹㨺㨻㨼㨽㨾㨿㩀㩁㩂㩃㩄㩅㩆㩇㩈
+㩉㩊㩋㩌㩍㩎㩏㩐㩑㩒㩓㩔㩕㩖㩗㩘㩙㩚㩛㩜㩝㩞㩟㩠㩡㩢㩣㩤㩥㩦㩧㩨㩩㩪㩫㩬㩭㩮㩯㩰
+㩱㩲㩳㩴㩵㩶㩷㩸㩹㩺㩻㩼㩽㩾㩿㪀㪁㪂㪃㪄㪅㪆㪇㪈㪉㪊㪋㪌㪍㪎㪏㪐㪑㪒㪓㪔㪕㪖㪗㪘
+㪙㪚㪛㪜㪝㪞㪟㪠㪡㪢㪣㪤㪥㪦㪧㪨㪩㪪㪫㪬㪭㪮㪯㪰㪱㪲㪳㪴㪵㪶㪷㪸㪹㪺㪻㪼㪽㪾㪿㫀
+㫁㫂㫃㫄㫅㫆㫇㫈㫉㫊㫋㫌㫍㫎㫏㫐㫑㫒㫓㫔㫕㫖㫗㫘㫙㫚㫛㫜㫝㫞㫟㫠㫡㫢㫣㫤㫥㫦㫧㫨
+㫩㫪㫫㫬㫭㫮㫯㫰㫱㫲㫳㫴㫵㫶㫷㫸㫹㫺㫻㫼㫽㫾㫿㬀㬁㬂㬃㬄㬅㬆㬇㬈㬉㬊㬋㬌㬍㬎㬏㬐
+㬑㬒㬓㬔㬕㬖㬗㬘㬙㬚㬛㬜㬝㬞㬟㬠㬡㬢㬣㬤㬥㬦㬧㬨㬩㬪㬫㬬㬭㬮㬯㬰㬱㬲㬳㬴㬵㬶㬷㬸
+㬹㬺㬻㬼㬽㬾㬿㭀㭁㭂㭃㭄㭅㭆㭇㭈㭉㭊㭋㭌㭍㭎㭏㭐㭑㭒㭓㭔㭕㭖㭗㭘㭙㭚㭛㭜㭝㭞㭟㭠
+㭡㭢㭣㭤㭥㭦㭧㭨㭩㭪㭫㭬㭭㭮㭯㭰㭱㭲㭳㭴㭵㭶㭷㭸㭹㭺㭻㭼㭽㭾㭿㮀㮁㮂㮃㮄㮅㮆㮇㮈
+㮉㮊㮋㮌㮍㮎㮏㮐㮑㮒㮓㮔㮕㮖㮗㮘㮙㮚㮛㮜㮝㮞㮟㮠㮡㮢㮣㮤㮥㮦㮧㮨㮩㮪㮫㮬㮭㮮㮯㮰
+㮱㮲㮳㮴㮵㮶㮷㮸㮹㮺㮻㮼㮽㮾㮿㯀㯁㯂㯃㯄㯅㯆㯇㯈㯉㯊㯋㯌㯍㯎㯏㯐㯑㯒㯓㯔㯕㯖㯗㯘
+㯙㯚㯛㯜㯝㯞㯟㯠㯡㯢㯣㯤㯥㯦㯧㯨㯩㯪㯫㯬㯭㯮㯯㯰㯱㯲㯳㯴㯵㯶㯷㯸㯹㯺㯻㯼㯽㯾㯿㰀
+㰁㰂㰃㰄㰅㰆㰇㰈㰉㰊㰋㰌㰍㰎㰏㰐㰑㰒㰓㰔㰕㰖㰗㰘㰙㰚㰛㰜㰝㰞㰟㰠㰡㰢㰣㰤㰥㰦㰧㰨
+㰩㰪㰫㰬㰭㰮㰯㰰㰱㰲㰳㰴㰵㰶㰷㰸㰹㰺㰻㰼㰽㰾㰿㱀㱁㱂㱃㱄㱅㱆㱇㱈㱉㱊㱋㱌㱍㱎㱏㱐
+㱑㱒㱓㱔㱕㱖㱗㱘㱙㱚㱛㱜㱝㱞㱟㱠㱡㱢㱣㱤㱥㱦㱧㱨㱩㱪㱫㱬㱭㱮㱯㱰㱱㱲㱳㱴㱵㱶㱷㱸
+㱹㱺㱻㱼㱽㱾㱿㲀㲁㲂㲃㲄㲅㲆㲇㲈㲉㲊㲋㲌㲍㲎㲏㲐㲑㲒㲓㲔㲕㲖㲗㲘㲙㲚㲛㲜㲝㲞㲟㲠
+㲡㲢㲣㲤㲥㲦㲧㲨㲩㲪㲫㲬㲭㲮㲯㲰㲱㲲㲳㲴㲵㲶㲷㲸㲹㲺㲻㲼㲽㲾㲿㳀㳁㳂㳃㳄㳅㳆㳇㳈
+㳉㳊㳋㳌㳍㳎㳏㳐㳑㳒㳓㳔㳕㳖㳗㳘㳙㳚㳛㳜㳝㳞㳟㳠㳡㳢㳣㳤㳥㳦㳧㳨㳩㳪㳫㳬㳭㳮㳯㳰
+㳱㳲㳳㳴㳵㳶㳷㳸㳹㳺㳻㳼㳽㳾㳿㴀㴁㴂㴃㴄㴅㴆㴇㴈㴉㴊㴋㴌㴍㴎㴏㴐㴑㴒㴓㴔㴕㴖㴗㴘
+㴙㴚㴛㴜㴝㴞㴟㴠㴡㴢㴣㴤㴥㴦㴧㴨㴩㴪㴫㴬㴭㴮㴯㴰㴱㴲㴳㴴㴵㴶㴷㴸㴹㴺㴻㴼㴽㴾㴿㵀
+㵁㵂㵃㵄㵅㵆㵇㵈㵉㵊㵋㵌㵍㵎㵏㵐㵑㵒㵓㵔㵕㵖㵗㵘㵙㵚㵛㵜㵝㵞㵟㵠㵡㵢㵣㵤㵥㵦㵧㵨
+㵩㵪㵫㵬㵭㵮㵯㵰㵱㵲㵳㵴㵵㵶㵷㵸㵹㵺㵻㵼㵽㵾㵿㶀㶁㶂㶃㶄㶅㶆㶇㶈㶉㶊㶋㶌㶍㶎㶏㶐
+㶑㶒㶓㶔㶕㶖㶗㶘㶙㶚㶛㶜㶝㶞㶟㶠㶡㶢㶣㶤㶥㶦㶧㶨㶩㶪㶫㶬㶭㶮㶯㶰㶱㶲㶳㶴㶵㶶㶷㶸
+㶹㶺㶻㶼㶽㶾㶿㷀㷁㷂㷃㷄㷅㷆㷇㷈㷉㷊㷋㷌㷍㷎㷏㷐㷑㷒㷓㷔㷕㷖㷗㷘㷙㷚㷛㷜㷝㷞㷟㷠
+㷡㷢㷣㷤㷥㷦㷧㷨㷩㷪㷫㷬㷭㷮㷯㷰㷱㷲㷳㷴㷵㷶㷷㷸㷹㷺㷻㷼㷽㷾㷿㸀㸁㸂㸃㸄㸅㸆㸇㸈
+㸉㸊㸋㸌㸍㸎㸏㸐㸑㸒㸓㸔㸕㸖㸗㸘㸙㸚㸛㸜㸝㸞㸟㸠㸡㸢㸣㸤㸥㸦㸧㸨㸩㸪㸫㸬㸭㸮㸯㸰
+㸱㸲㸳㸴㸵㸶㸷㸸㸹㸺㸻㸼㸽㸾㸿㹀㹁㹂㹃㹄㹅㹆㹇㹈㹉㹊㹋㹌㹍㹎㹏㹐㹑㹒㹓㹔㹕㹖㹗㹘
+㹙㹚㹛㹜㹝㹞㹟㹠㹡㹢㹣㹤㹥㹦㹧㹨㹩㹪㹫㹬㹭㹮㹯㹰㹱㹲㹳㹴㹵㹶㹷㹸㹹㹺㹻㹼㹽㹾㹿㺀
+㺁㺂㺃㺄㺅㺆㺇㺈㺉㺊㺋㺌㺍㺎㺏㺐㺑㺒㺓㺔㺕㺖㺗㺘㺙㺚㺛㺜㺝㺞㺟㺠㺡㺢㺣㺤㺥㺦㺧㺨
+㺩㺪㺫㺬㺭㺮㺯㺰㺱㺲㺳㺴㺵㺶㺷㺸㺹㺺㺻㺼㺽㺾㺿㻀㻁㻂㻃㻄㻅㻆㻇㻈㻉㻊㻋㻌㻍㻎㻏㻐
+㻑㻒㻓㻔㻕㻖㻗㻘㻙㻚㻛㻜㻝㻞㻟㻠㻡㻢㻣㻤㻥㻦㻧㻨㻩㻪㻫㻬㻭㻮㻯㻰㻱㻲㻳㻴㻵㻶㻷㻸
+㻹㻺㻻㻼㻽㻾㻿㼀㼁㼂㼃㼄㼅㼆㼇㼈㼉㼊㼋㼌㼍㼎㼏㼐㼑㼒㼓㼔㼕㼖㼗㼘㼙㼚㼛㼜㼝㼞㼟㼠
+㼡㼢㼣㼤㼥㼦㼧㼨㼩㼪㼫㼬㼭㼮㼯㼰㼱㼲㼳㼴㼵㼶㼷㼸㼹㼺㼻㼼㼽㼾㼿㽀㽁㽂㽃㽄㽅㽆㽇㽈
+㽉㽊㽋㽌㽍㽎㽏㽐㽑㽒㽓㽔㽕㽖㽗㽘㽙㽚㽛㽜㽝㽞㽟㽠㽡㽢㽣㽤㽥㽦㽧㽨㽩㽪㽫㽬㽭㽮㽯㽰
+㽱㽲㽳㽴㽵㽶㽷㽸㽹㽺㽻㽼㽽㽾㽿㾀㾁㾂㾃㾄㾅㾆㾇㾈㾉㾊㾋㾌㾍㾎㾏㾐㾑㾒㾓㾔㾕㾖㾗㾘
+㾙㾚㾛㾜㾝㾞㾟㾠㾡㾢㾣㾤㾥㾦㾧㾨㾩㾪㾫㾬㾭㾮㾯㾰㾱㾲㾳㾴㾵㾶㾷㾸㾹㾺㾻㾼㾽㾾㾿㿀
+㿁㿂㿃㿄㿅㿆㿇㿈㿉㿊㿋㿌㿍㿎㿏㿐㿑㿒㿓㿔㿕㿖㿗㿘㿙㿚㿛㿜㿝㿞㿟㿠㿡㿢㿣㿤㿥㿦㿧㿨
+㿩㿪㿫㿬㿭㿮㿯㿰㿱㿲㿳㿴㿵㿶㿷㿸㿹㿺㿻㿼㿽㿾㿿䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉䀊䀋䀌䀍䀎䀏䀐
+䀑䀒䀓䀔䀕䀖䀗䀘䀙䀚䀛䀜䀝䀞䀟䀠䀡䀢䀣䀤䀥䀦䀧䀨䀩䀪䀫䀬䀭䀮䀯䀰䀱䀲䀳䀴䀵䀶䀷䀸
+䀹䀺䀻䀼䀽䀾䀿䁀䁁䁂䁃䁄䁅䁆䁇䁈䁉䁊䁋䁌䁍䁎䁏䁐䁑䁒䁓䁔䁕䁖䁗䁘䁙䁚䁛䁜䁝䁞䁟䁠
+䁡䁢䁣䁤䁥䁦䁧䁨䁩䁪䁫䁬䁭䁮䁯䁰䁱䁲䁳䁴䁵䁶䁷䁸䁹䁺䁻䁼䁽䁾䁿䂀䂁䂂䂃䂄䂅䂆䂇䂈
+䂉䂊䂋䂌䂍䂎䂏䂐䂑䂒䂓䂔䂕䂖䂗䂘䂙䂚䂛䂜䂝䂞䂟䂠䂡䂢䂣䂤䂥䂦䂧䂨䂩䂪䂫䂬䂭䂮䂯䂰
+䂱䂲䂳䂴䂵䂶䂷䂸䂹䂺䂻䂼䂽䂾䂿䃀䃁䃂䃃䃄䃅䃆䃇䃈䃉䃊䃋䃌䃍䃎䃏䃐䃑䃒䃓䃔䃕䃖䃗䃘
+䃙䃚䃛䃜䃝䃞䃟䃠䃡䃢䃣䃤䃥䃦䃧䃨䃩䃪䃫䃬䃭䃮䃯䃰䃱䃲䃳䃴䃵䃶䃷䃸䃹䃺䃻䃼䃽䃾䃿䄀
+䄁䄂䄃䄄䄅䄆䄇䄈䄉䄊䄋䄌䄍䄎䄏䄐䄑䄒䄓䄔䄕䄖䄗䄘䄙䄚䄛䄜䄝䄞䄟䄠䄡䄢䄣䄤䄥䄦䄧䄨
+䄩䄪䄫䄬䄭䄮䄯䄰䄱䄲䄳䄴䄵䄶䄷䄸䄹䄺䄻䄼䄽䄾䄿䅀䅁䅂䅃䅄䅅䅆䅇䅈䅉䅊䅋䅌䅍䅎䅏䅐
+䅑䅒䅓䅔䅕䅖䅗䅘䅙䅚䅛䅜䅝䅞䅟䅠䅡䅢䅣䅤䅥䅦䅧䅨䅩䅪䅫䅬䅭䅮䅯䅰䅱䅲䅳䅴䅵䅶䅷䅸
+䅹䅺䅻䅼䅽䅾䅿䆀䆁䆂䆃䆄䆅䆆䆇䆈䆉䆊䆋䆌䆍䆎䆏䆐䆑䆒䆓䆔䆕䆖䆗䆘䆙䆚䆛䆜䆝䆞䆟䆠
+䆡䆢䆣䆤䆥䆦䆧䆨䆩䆪䆫䆬䆭䆮䆯䆰䆱䆲䆳䆴䆵䆶䆷䆸䆹䆺䆻䆼䆽䆾䆿䇀䇁䇂䇃䇄䇅䇆䇇䇈
+䇉䇊䇋䇌䇍䇎䇏䇐䇑䇒䇓䇔䇕䇖䇗䇘䇙䇚䇛䇜䇝䇞䇟䇠䇡䇢䇣䇤䇥䇦䇧䇨䇩䇪䇫䇬䇭䇮䇯䇰
+䇱䇲䇳䇴䇵䇶䇷䇸䇹䇺䇻䇼䇽䇾䇿䈀䈁䈂䈃䈄䈅䈆䈇䈈䈉䈊䈋䈌䈍䈎䈏䈐䈑䈒䈓䈔䈕䈖䈗䈘
+䈙䈚䈛䈜䈝䈞䈟䈠䈡䈢䈣䈤䈥䈦䈧䈨䈩䈪䈫䈬䈭䈮䈯䈰䈱䈲䈳䈴䈵䈶䈷䈸䈹䈺䈻䈼䈽䈾䈿䉀
+䉁䉂䉃䉄䉅䉆䉇䉈䉉䉊䉋䉌䉍䉎䉏䉐䉑䉒䉓䉔䉕䉖䉗䉘䉙䉚䉛䉜䉝䉞䉟䉠䉡䉢䉣䉤䉥䉦䉧䉨
+䉩䉪䉫䉬䉭䉮䉯䉰䉱䉲䉳䉴䉵䉶䉷䉸䉹䉺䉻䉼䉽䉾䉿䊀䊁䊂䊃䊄䊅䊆䊇䊈䊉䊊䊋䊌䊍䊎䊏䊐
+䊑䊒䊓䊔䊕䊖䊗䊘䊙䊚䊛䊜䊝䊞䊟䊠䊡䊢䊣䊤䊥䊦䊧䊨䊩䊪䊫䊬䊭䊮䊯䊰䊱䊲䊳䊴䊵䊶䊷䊸
+䊹䊺䊻䊼䊽䊾䊿䋀䋁䋂䋃䋄䋅䋆䋇䋈䋉䋊䋋䋌䋍䋎䋏䋐䋑䋒䋓䋔䋕䋖䋗䋘䋙䋚䋛䋜䋝䋞䋟䋠
+䋡䋢䋣䋤䋥䋦䋧䋨䋩䋪䋫䋬䋭䋮䋯䋰䋱䋲䋳䋴䋵䋶䋷䋸䋹䋺䋻䋼䋽䋾䋿䌀䌁䌂䌃䌄䌅䌆䌇䌈
+䌉䌊䌋䌌䌍䌎䌏䌐䌑䌒䌓䌔䌕䌖䌗䌘䌙䌚䌛䌜䌝䌞䌟䌠䌡䌢䌣䌤䌥䌦䌧䌨䌩䌪䌫䌬䌭䌮䌯䌰
+䌱䌲䌳䌴䌵䌶䌷䌸䌹䌺䌻䌼䌽䌾䌿䍀䍁䍂䍃䍄䍅䍆䍇䍈䍉䍊䍋䍌䍍䍎䍏䍐䍑䍒䍓䍔䍕䍖䍗䍘
+䍙䍚䍛䍜䍝䍞䍟䍠䍡䍢䍣䍤䍥䍦䍧䍨䍩䍪䍫䍬䍭䍮䍯䍰䍱䍲䍳䍴䍵䍶䍷䍸䍹䍺䍻䍼䍽䍾䍿䎀
+䎁䎂䎃䎄䎅䎆䎇䎈䎉䎊䎋䎌䎍䎎䎏䎐䎑䎒䎓䎔䎕䎖䎗䎘䎙䎚䎛䎜䎝䎞䎟䎠䎡䎢䎣䎤䎥䎦䎧䎨
+䎩䎪䎫䎬䎭䎮䎯䎰䎱䎲䎳䎴䎵䎶䎷䎸䎹䎺䎻䎼䎽䎾䎿䏀䏁䏂䏃䏄䏅䏆䏇䏈䏉䏊䏋䏌䏍䏎䏏䏐
+䏑䏒䏓䏔䏕䏖䏗䏘䏙䏚䏛䏜䏝䏞䏟䏠䏡䏢䏣䏤䏥䏦䏧䏨䏩䏪䏫䏬䏭䏮䏯䏰䏱䏲䏳䏴䏵䏶䏷䏸
+䏹䏺䏻䏼䏽䏾䏿䐀䐁䐂䐃䐄䐅䐆䐇䐈䐉䐊䐋䐌䐍䐎䐏䐐䐑䐒䐓䐔䐕䐖䐗䐘䐙䐚䐛䐜䐝䐞䐟䐠
+䐡䐢䐣䐤䐥䐦䐧䐨䐩䐪䐫䐬䐭䐮䐯䐰䐱䐲䐳䐴䐵䐶䐷䐸䐹䐺䐻䐼䐽䐾䐿䑀䑁䑂䑃䑄䑅䑆䑇䑈
+䑉䑊䑋䑌䑍䑎䑏䑐䑑䑒䑓䑔䑕䑖䑗䑘䑙䑚䑛䑜䑝䑞䑟䑠䑡䑢䑣䑤䑥䑦䑧䑨䑩䑪䑫䑬䑭䑮䑯䑰
+䑱䑲䑳䑴䑵䑶䑷䑸䑹䑺䑻䑼䑽䑾䑿䒀䒁䒂䒃䒄䒅䒆䒇䒈䒉䒊䒋䒌䒍䒎䒏䒐䒑䒒䒓䒔䒕䒖䒗䒘
+䒙䒚䒛䒜䒝䒞䒟䒠䒡䒢䒣䒤䒥䒦䒧䒨䒩䒪䒫䒬䒭䒮䒯䒰䒱䒲䒳䒴䒵䒶䒷䒸䒹䒺䒻䒼䒽䒾䒿䓀
+䓁䓂䓃䓄䓅䓆䓇䓈䓉䓊䓋䓌䓍䓎䓏䓐䓑䓒䓓䓔䓕䓖䓗䓘䓙䓚䓛䓜䓝䓞䓟䓠䓡䓢䓣䓤䓥䓦䓧䓨
+䓩䓪䓫䓬䓭䓮䓯䓰䓱䓲䓳䓴䓵䓶䓷䓸䓹䓺䓻䓼䓽䓾䓿䔀䔁䔂䔃䔄䔅䔆䔇䔈䔉䔊䔋䔌䔍䔎䔏䔐
+䔑䔒䔓䔔䔕䔖䔗䔘䔙䔚䔛䔜䔝䔞䔟䔠䔡䔢䔣䔤䔥䔦䔧䔨䔩䔪䔫䔬䔭䔮䔯䔰䔱䔲䔳䔴䔵䔶䔷䔸
+䔹䔺䔻䔼䔽䔾䔿䕀䕁䕂䕃䕄䕅䕆䕇䕈䕉䕊䕋䕌䕍䕎䕏䕐䕑䕒䕓䕔䕕䕖䕗䕘䕙䕚䕛䕜䕝䕞䕟䕠
+䕡䕢䕣䕤䕥䕦䕧䕨䕩䕪䕫䕬䕭䕮䕯䕰䕱䕲䕳䕴䕵䕶䕷䕸䕹䕺䕻䕼䕽䕾䕿䖀䖁䖂䖃䖄䖅䖆䖇䖈
+䖉䖊䖋䖌䖍䖎䖏䖐䖑䖒䖓䖔䖕䖖䖗䖘䖙䖚䖛䖜䖝䖞䖟䖠䖡䖢䖣䖤䖥䖦䖧䖨䖩䖪䖫䖬䖭䖮䖯䖰
+䖱䖲䖳䖴䖵䖶䖷䖸䖹䖺䖻䖼䖽䖾䖿䗀䗁䗂䗃䗄䗅䗆䗇䗈䗉䗊䗋䗌䗍䗎䗏䗐䗑䗒䗓䗔䗕䗖䗗䗘
+䗙䗚䗛䗜䗝䗞䗟䗠䗡䗢䗣䗤䗥䗦䗧䗨䗩䗪䗫䗬䗭䗮䗯䗰䗱䗲䗳䗴䗵䗶䗷䗸䗹䗺䗻䗼䗽䗾䗿䘀
+䘁䘂䘃䘄䘅䘆䘇䘈䘉䘊䘋䘌䘍䘎䘏䘐䘑䘒䘓䘔䘕䘖䘗䘘䘙䘚䘛䘜䘝䘞䘟䘠䘡䘢䘣䘤䘥䘦䘧䘨
+䘩䘪䘫䘬䘭䘮䘯䘰䘱䘲䘳䘴䘵䘶䘷䘸䘹䘺䘻䘼䘽䘾䘿䙀䙁䙂䙃䙄䙅䙆䙇䙈䙉䙊䙋䙌䙍䙎䙏䙐
+䙑䙒䙓䙔䙕䙖䙗䙘䙙䙚䙛䙜䙝䙞䙟䙠䙡䙢䙣䙤䙥䙦䙧䙨䙩䙪䙫䙬䙭䙮䙯䙰䙱䙲䙳䙴䙵䙶䙷䙸
+䙹䙺䙻䙼䙽䙾䙿䚀䚁䚂䚃䚄䚅䚆䚇䚈䚉䚊䚋䚌䚍䚎䚏䚐䚑䚒䚓䚔䚕䚖䚗䚘䚙䚚䚛䚜䚝䚞䚟䚠
+䚡䚢䚣䚤䚥䚦䚧䚨䚩䚪䚫䚬䚭䚮䚯䚰䚱䚲䚳䚴䚵䚶䚷䚸䚹䚺䚻䚼䚽䚾䚿䛀䛁䛂䛃䛄䛅䛆䛇䛈
+䛉䛊䛋䛌䛍䛎䛏䛐䛑䛒䛓䛔䛕䛖䛗䛘䛙䛚䛛䛜䛝䛞䛟䛠䛡䛢䛣䛤䛥䛦䛧䛨䛩䛪䛫䛬䛭䛮䛯䛰
+䛱䛲䛳䛴䛵䛶䛷䛸䛹䛺䛻䛼䛽䛾䛿䜀䜁䜂䜃䜄䜅䜆䜇䜈䜉䜊䜋䜌䜍䜎䜏䜐䜑䜒䜓䜔䜕䜖䜗䜘
+䜙䜚䜛䜜䜝䜞䜟䜠䜡䜢䜣䜤䜥䜦䜧䜨䜩䜪䜫䜬䜭䜮䜯䜰䜱䜲䜳䜴䜵䜶䜷䜸䜹䜺䜻䜼䜽䜾䜿䝀
+䝁䝂䝃䝄䝅䝆䝇䝈䝉䝊䝋䝌䝍䝎䝏䝐䝑䝒䝓䝔䝕䝖䝗䝘䝙䝚䝛䝜䝝䝞䝟䝠䝡䝢䝣䝤䝥䝦䝧䝨
+䝩䝪䝫䝬䝭䝮䝯䝰䝱䝲䝳䝴䝵䝶䝷䝸䝹䝺䝻䝼䝽䝾䝿䞀䞁䞂䞃䞄䞅䞆䞇䞈䞉䞊䞋䞌䞍䞎䞏䞐
+䞑䞒䞓䞔䞕䞖䞗䞘䞙䞚䞛䞜䞝䞞䞟䞠䞡䞢䞣䞤䞥䞦䞧䞨䞩䞪䞫䞬䞭䞮䞯䞰䞱䞲䞳䞴䞵䞶䞷䞸
+䞹䞺䞻䞼䞽䞾䞿䟀䟁䟂䟃䟄䟅䟆䟇䟈䟉䟊䟋䟌䟍䟎䟏䟐䟑䟒䟓䟔䟕䟖䟗䟘䟙䟚䟛䟜䟝䟞䟟䟠
+䟡䟢䟣䟤䟥䟦䟧䟨䟩䟪䟫䟬䟭䟮䟯䟰䟱䟲䟳䟴䟵䟶䟷䟸䟹䟺䟻䟼䟽䟾䟿䠀䠁䠂䠃䠄䠅䠆䠇䠈
+䠉䠊䠋䠌䠍䠎䠏䠐䠑䠒䠓䠔䠕䠖䠗䠘䠙䠚䠛䠜䠝䠞䠟䠠䠡䠢䠣䠤䠥䠦䠧䠨䠩䠪䠫䠬䠭䠮䠯䠰
+䠱䠲䠳䠴䠵䠶䠷䠸䠹䠺䠻䠼䠽䠾䠿䡀䡁䡂䡃䡄䡅䡆䡇䡈䡉䡊䡋䡌䡍䡎䡏䡐䡑䡒䡓䡔䡕䡖䡗䡘
+䡙䡚䡛䡜䡝䡞䡟䡠䡡䡢䡣䡤䡥䡦䡧䡨䡩䡪䡫䡬䡭䡮䡯䡰䡱䡲䡳䡴䡵䡶䡷䡸䡹䡺䡻䡼䡽䡾䡿䢀
+䢁䢂䢃䢄䢅䢆䢇䢈䢉䢊䢋䢌䢍䢎䢏䢐䢑䢒䢓䢔䢕䢖䢗䢘䢙䢚䢛䢜䢝䢞䢟䢠䢡䢢䢣䢤䢥䢦䢧䢨
+䢩䢪䢫䢬䢭䢮䢯䢰䢱䢲䢳䢴䢵䢶䢷䢸䢹䢺䢻䢼䢽䢾䢿䣀䣁䣂䣃䣄䣅䣆䣇䣈䣉䣊䣋䣌䣍䣎䣏䣐
+䣑䣒䣓䣔䣕䣖䣗䣘䣙䣚䣛䣜䣝䣞䣟䣠䣡䣢䣣䣤䣥䣦䣧䣨䣩䣪䣫䣬䣭䣮䣯䣰䣱䣲䣳䣴䣵䣶䣷䣸
+䣹䣺䣻䣼䣽䣾䣿䤀䤁䤂䤃䤄䤅䤆䤇䤈䤉䤊䤋䤌䤍䤎䤏䤐䤑䤒䤓䤔䤕䤖䤗䤘䤙䤚䤛䤜䤝䤞䤟䤠
+䤡䤢䤣䤤䤥䤦䤧䤨䤩䤪䤫䤬䤭䤮䤯䤰䤱䤲䤳䤴䤵䤶䤷䤸䤹䤺䤻䤼䤽䤾䤿䥀䥁䥂䥃䥄䥅䥆䥇䥈
+䥉䥊䥋䥌䥍䥎䥏䥐䥑䥒䥓䥔䥕䥖䥗䥘䥙䥚䥛䥜䥝䥞䥟䥠䥡䥢䥣䥤䥥䥦䥧䥨䥩䥪䥫䥬䥭䥮䥯䥰
+䥱䥲䥳䥴䥵䥶䥷䥸䥹䥺䥻䥼䥽䥾䥿䦀䦁䦂䦃䦄䦅䦆䦇䦈䦉䦊䦋䦌䦍䦎䦏䦐䦑䦒䦓䦔䦕䦖䦗䦘
+䦙䦚䦛䦜䦝䦞䦟䦠䦡䦢䦣䦤䦥䦦䦧䦨䦩䦪䦫䦬䦭䦮䦯䦰䦱䦲䦳䦴䦵䦶䦷䦸䦹䦺䦻䦼䦽䦾䦿䧀
+䧁䧂䧃䧄䧅䧆䧇䧈䧉䧊䧋䧌䧍䧎䧏䧐䧑䧒䧓䧔䧕䧖䧗䧘䧙䧚䧛䧜䧝䧞䧟䧠䧡䧢䧣䧤䧥䧦䧧䧨
+䧩䧪䧫䧬䧭䧮䧯䧰䧱䧲䧳䧴䧵䧶䧷䧸䧹䧺䧻䧼䧽䧾䧿䨀䨁䨂䨃䨄䨅䨆䨇䨈䨉䨊䨋䨌䨍䨎䨏䨐
+䨑䨒䨓䨔䨕䨖䨗䨘䨙䨚䨛䨜䨝䨞䨟䨠䨡䨢䨣䨤䨥䨦䨧䨨䨩䨪䨫䨬䨭䨮䨯䨰䨱䨲䨳䨴䨵䨶䨷䨸
+䨹䨺䨻䨼䨽䨾䨿䩀䩁䩂䩃䩄䩅䩆䩇䩈䩉䩊䩋䩌䩍䩎䩏䩐䩑䩒䩓䩔䩕䩖䩗䩘䩙䩚䩛䩜䩝䩞䩟䩠
+䩡䩢䩣䩤䩥䩦䩧䩨䩩䩪䩫䩬䩭䩮䩯䩰䩱䩲䩳䩴䩵䩶䩷䩸䩹䩺䩻䩼䩽䩾䩿䪀䪁䪂䪃䪄䪅䪆䪇䪈
+䪉䪊䪋䪌䪍䪎䪏䪐䪑䪒䪓䪔䪕䪖䪗䪘䪙䪚䪛䪜䪝䪞䪟䪠䪡䪢䪣䪤䪥䪦䪧䪨䪩䪪䪫䪬䪭䪮䪯䪰
+䪱䪲䪳䪴䪵䪶䪷䪸䪹䪺䪻䪼䪽䪾䪿䫀䫁䫂䫃䫄䫅䫆䫇䫈䫉䫊䫋䫌䫍䫎䫏䫐䫑䫒䫓䫔䫕䫖䫗䫘
+䫙䫚䫛䫜䫝䫞䫟䫠䫡䫢䫣䫤䫥䫦䫧䫨䫩䫪䫫䫬䫭䫮䫯䫰䫱䫲䫳䫴䫵䫶䫷䫸䫹䫺䫻䫼䫽䫾䫿䬀
+䬁䬂䬃䬄䬅䬆䬇䬈䬉䬊䬋䬌䬍䬎䬏䬐䬑䬒䬓䬔䬕䬖䬗䬘䬙䬚䬛䬜䬝䬞䬟䬠䬡䬢䬣䬤䬥䬦䬧䬨
+䬩䬪䬫䬬䬭䬮䬯䬰䬱䬲䬳䬴䬵䬶䬷䬸䬹䬺䬻䬼䬽䬾䬿䭀䭁䭂䭃䭄䭅䭆䭇䭈䭉䭊䭋䭌䭍䭎䭏䭐
+䭑䭒䭓䭔䭕䭖䭗䭘䭙䭚䭛䭜䭝䭞䭟䭠䭡䭢䭣䭤䭥䭦䭧䭨䭩䭪䭫䭬䭭䭮䭯䭰䭱䭲䭳䭴䭵䭶䭷䭸
+䭹䭺䭻䭼䭽䭾䭿䮀䮁䮂䮃䮄䮅䮆䮇䮈䮉䮊䮋䮌䮍䮎䮏䮐䮑䮒䮓䮔䮕䮖䮗䮘䮙䮚䮛䮜䮝䮞䮟䮠
+䮡䮢䮣䮤䮥䮦䮧䮨䮩䮪䮫䮬䮭䮮䮯䮰䮱䮲䮳䮴䮵䮶䮷䮸䮹䮺䮻䮼䮽䮾䮿䯀䯁䯂䯃䯄䯅䯆䯇䯈
+䯉䯊䯋䯌䯍䯎䯏䯐䯑䯒䯓䯔䯕䯖䯗䯘䯙䯚䯛䯜䯝䯞䯟䯠䯡䯢䯣䯤䯥䯦䯧䯨䯩䯪䯫䯬䯭䯮䯯䯰
+䯱䯲䯳䯴䯵䯶䯷䯸䯹䯺䯻䯼䯽䯾䯿䰀䰁䰂䰃䰄䰅䰆䰇䰈䰉䰊䰋䰌䰍䰎䰏䰐䰑䰒䰓䰔䰕䰖䰗䰘
+䰙䰚䰛䰜䰝䰞䰟䰠䰡䰢䰣䰤䰥䰦䰧䰨䰩䰪䰫䰬䰭䰮䰯䰰䰱䰲䰳䰴䰵䰶䰷䰸䰹䰺䰻䰼䰽䰾䰿䱀
+䱁䱂䱃䱄䱅䱆䱇䱈䱉䱊䱋䱌䱍䱎䱏䱐䱑䱒䱓䱔䱕䱖䱗䱘䱙䱚䱛䱜䱝䱞䱟䱠䱡䱢䱣䱤䱥䱦䱧䱨
+䱩䱪䱫䱬䱭䱮䱯䱰䱱䱲䱳䱴䱵䱶䱷䱸䱹䱺䱻䱼䱽䱾䱿䲀䲁䲂䲃䲄䲅䲆䲇䲈䲉䲊䲋䲌䲍䲎䲏䲐
+䲑䲒䲓䲔䲕䲖䲗䲘䲙䲚䲛䲜䲝䲞䲟䲠䲡䲢䲣䲤䲥䲦䲧䲨䲩䲪䲫䲬䲭䲮䲯䲰䲱䲲䲳䲴䲵䲶䲷䲸
+䲹䲺䲻䲼䲽䲾䲿䳀䳁䳂䳃䳄䳅䳆䳇䳈䳉䳊䳋䳌䳍䳎䳏䳐䳑䳒䳓䳔䳕䳖䳗䳘䳙䳚䳛䳜䳝䳞䳟䳠
+䳡䳢䳣䳤䳥䳦䳧䳨䳩䳪䳫䳬䳭䳮䳯䳰䳱䳲䳳䳴䳵䳶䳷䳸䳹䳺䳻䳼䳽䳾䳿䴀䴁䴂䴃䴄䴅䴆䴇䴈
+䴉䴊䴋䴌䴍䴎䴏䴐䴑䴒䴓䴔䴕䴖䴗䴘䴙䴚䴛䴜䴝䴞䴟䴠䴡䴢䴣䴤䴥䴦䴧䴨䴩䴪䴫䴬䴭䴮䴯䴰
+䴱䴲䴳䴴䴵䴶䴷䴸䴹䴺䴻䴼䴽䴾䴿䵀䵁䵂䵃䵄䵅䵆䵇䵈䵉䵊䵋䵌䵍䵎䵏䵐䵑䵒䵓䵔䵕䵖䵗䵘
+䵙䵚䵛䵜䵝䵞䵟䵠䵡䵢䵣䵤䵥䵦䵧䵨䵩䵪䵫䵬䵭䵮䵯䵰䵱䵲䵳䵴䵵䵶䵷䵸䵹䵺䵻䵼䵽䵾䵿䶀
+䶁䶂䶃䶄䶅䶆䶇䶈䶉䶊䶋䶌䶍䶎䶏䶐䶑䶒䶓䶔䶕䶖䶗䶘䶙䶚䶛䶜䶝䶞䶟䶠䶡䶢䶣䶤䶥䶦䶧䶨
+䶩䶪䶫䶬䶭䶮䶯䶰䶱䶲䶳䶴䶵䶶䶷䶸䶹䶺䶻䶼䶽䶾䶿䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏䷐
+䷑䷒䷓䷔䷕䷖䷗䷘䷙䷚䷛䷜䷝䷞䷟䷠䷡䷢䷣䷤䷥䷦䷧䷨䷩䷪䷫䷬䷭䷮䷯䷰䷱䷲䷳䷴䷵䷶䷷䷸
+䷹䷺䷻䷼䷽䷾䷿一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟丠
+両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿乀乁乂乃乄久乆乇么
+义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯买
+乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘
+亙亚些亜亝亞亟亠亡亢亣交亥亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿什
+仁仂仃仄仅仆仇仈仉今介仌仍从仏仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟仠仡仢代令以仦仧仨
+仩仪仫们仭仮仯仰仱仲仳仴仵件价仸仹仺任仼份仾仿伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐
+休伒伓伔伕伖众优伙会伛伜伝伞伟传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯估伱伲伳伴伵伶伷伸
+伹伺伻似伽伾伿佀佁佂佃佄佅但佇佈佉佊佋佌位低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟你
+佡佢佣佤佥佦佧佨佩佪佫佬佭佮佯佰佱佲佳佴併佶佷佸佹佺佻佼佽佾使侀侁侂侃侄侅來侇侈
+侉侊例侌侍侎侏侐侑侒侓侔侕侖侗侘侙侚供侜依侞侟侠価侢侣侤侥侦侧侨侩侪侫侬侭侮侯侰
+侱侲侳侴侵侶侷侸侹侺侻侼侽侾便俀俁係促俄俅俆俇俈俉俊俋俌俍俎俏俐俑俒俓俔俕俖俗俘
+俙俚俛俜保俞俟俠信俢俣俤俥俦俧俨俩俪俫俬俭修俯俰俱俲俳俴俵俶俷俸俹俺俻俼俽俾俿倀
+倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借倠倡倢倣値倥倦倧倨
+倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿偀偁偂偃偄偅偆假偈偉偊偋偌偍偎偏偐
+偑偒偓偔偕偖偗偘偙做偛停偝偞偟偠偡偢偣偤健偦偧偨偩偪偫偬偭偮偯偰偱偲偳側偵偶偷偸
+偹偺偻偼偽偾偿傀傁傂傃傄傅傆傇傈傉傊傋傌傍傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠
+傡傢傣傤傥傦傧储傩傪傫催傭傮傯傰傱傲傳傴債傶傷傸傹傺傻傼傽傾傿僀僁僂僃僄僅僆僇僈
+僉僊僋僌働僎像僐僑僒僓僔僕僖僗僘僙僚僛僜僝僞僟僠僡僢僣僤僥僦僧僨僩僪僫僬僭僮僯僰
+僱僲僳僴僵僶僷僸價僺僻僼僽僾僿儀儁儂儃億儅儆儇儈儉儊儋儌儍儎儏儐儑儒儓儔儕儖儗儘
+儙儚儛儜儝儞償儠儡儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾儿兀
+允兂元兄充兆兇先光兊克兌免兎兏児兑兒兓兔兕兖兗兘兙党兛兜兝兞兟兠兡兢兣兤入兦內全
+兩兪八公六兮兯兰共兲关兴兵其具典兹兺养兼兽兾兿冀冁冂冃冄内円冇冈冉冊冋册再冎冏冐
+冑冒冓冔冕冖冗冘写冚军农冝冞冟冠冡冢冣冤冥冦冧冨冩冪冫冬冭冮冯冰冱冲决冴况冶冷冸
+冹冺冻冼冽冾冿净凁凂凃凄凅准凇凈凉凊凋凌凍凎减凐凑凒凓凔凕凖凗凘凙凚凛凜凝凞凟几
+凡凢凣凤凥処凧凨凩凪凫凬凭凮凯凰凱凲凳凴凵凶凷凸凹出击凼函凾凿刀刁刂刃刄刅分切刈
+刉刊刋刌刍刎刏刐刑划刓刔刕刖列刘则刚创刜初刞刟删刡刢刣判別刦刧刨利刪别刬刭刮刯到
+刱刲刳刴刵制刷券刹刺刻刼刽刾刿剀剁剂剃剄剅剆則剈剉削剋剌前剎剏剐剑剒剓剔剕剖剗剘
+剙剚剛剜剝剞剟剠剡剢剣剤剥剦剧剨剩剪剫剬剭剮副剰剱割剳剴創剶剷剸剹剺剻剼剽剾剿劀
+劁劂劃劄劅劆劇劈劉劊劋劌劍劎劏劐劑劒劓劔劕劖劗劘劙劚力劜劝办功加务劢劣劤劥劦劧动
+助努劫劬劭劮劯劰励劲劳労劵劶劷劸効劺劻劼劽劾势勀勁勂勃勄勅勆勇勈勉勊勋勌勍勎勏勐
+勑勒勓勔動勖勗勘務勚勛勜勝勞募勠勡勢勣勤勥勦勧勨勩勪勫勬勭勮勯勰勱勲勳勴勵勶勷勸
+勹勺勻勼勽勾勿匀匁匂匃匄包匆匇匈匉匊匋匌匍匎匏匐匑匒匓匔匕化北匘匙匚匛匜匝匞匟匠
+匡匢匣匤匥匦匧匨匩匪匫匬匭匮匯匰匱匲匳匴匵匶匷匸匹区医匼匽匾匿區十卂千卄卅卆升午
+卉半卋卌卍华协卐卑卒卓協单卖南単卙博卛卜卝卞卟占卡卢卣卤卥卦卧卨卩卪卫卬卭卮卯印
+危卲即却卵卶卷卸卹卺卻卼卽卾卿厀厁厂厃厄厅历厇厈厉厊压厌厍厎厏厐厑厒厓厔厕厖厗厘
+厙厚厛厜厝厞原厠厡厢厣厤厥厦厧厨厩厪厫厬厭厮厯厰厱厲厳厴厵厶厷厸厹厺去厼厽厾县叀
+叁参參叄叅叆叇又叉及友双反収叏叐发叒叓叔叕取受变叙叚叛叜叝叞叟叠叡叢口古句另叧叨
+叩只叫召叭叮可台叱史右叴叵叶号司叹叺叻叼叽叾叿吀吁吂吃各吅吆吇合吉吊吋同名后吏吐
+向吒吓吔吕吖吗吘吙吚君吜吝吞吟吠吡吢吣吤吥否吧吨吩吪含听吭吮启吰吱吲吳吴吵吶吷吸
+吹吺吻吼吽吾吿呀呁呂呃呄呅呆呇呈呉告呋呌呍呎呏呐呑呒呓呔呕呖呗员呙呚呛呜呝呞呟呠
+呡呢呣呤呥呦呧周呩呪呫呬呭呮呯呰呱呲味呴呵呶呷呸呹呺呻呼命呾呿咀咁咂咃咄咅咆咇咈
+咉咊咋和咍咎咏咐咑咒咓咔咕咖咗咘咙咚咛咜咝咞咟咠咡咢咣咤咥咦咧咨咩咪咫咬咭咮咯咰
+咱咲咳咴咵咶咷咸咹咺咻咼咽咾咿哀品哂哃哄哅哆哇哈哉哊哋哌响哎哏哐哑哒哓哔哕哖哗哘
+哙哚哛哜哝哞哟哠員哢哣哤哥哦哧哨哩哪哫哬哭哮哯哰哱哲哳哴哵哶哷哸哹哺哻哼哽哾哿唀
+唁唂唃唄唅唆唇唈唉唊唋唌唍唎唏唐唑唒唓唔唕唖唗唘唙唚唛唜唝唞唟唠唡唢唣唤唥唦唧唨
+唩唪唫唬唭售唯唰唱唲唳唴唵唶唷唸唹唺唻唼唽唾唿啀啁啂啃啄啅商啇啈啉啊啋啌啍啎問啐
+啑啒啓啔啕啖啗啘啙啚啛啜啝啞啟啠啡啢啣啤啥啦啧啨啩啪啫啬啭啮啯啰啱啲啳啴啵啶啷啸
+啹啺啻啼啽啾啿喀喁喂喃善喅喆喇喈喉喊喋喌喍喎喏喐喑喒喓喔喕喖喗喘喙喚喛喜喝喞喟喠
+喡喢喣喤喥喦喧喨喩喪喫喬喭單喯喰喱喲喳喴喵営喷喸喹喺喻喼喽喾喿嗀嗁嗂嗃嗄嗅嗆嗇嗈
+嗉嗊嗋嗌嗍嗎嗏嗐嗑嗒嗓嗔嗕嗖嗗嗘嗙嗚嗛嗜嗝嗞嗟嗠嗡嗢嗣嗤嗥嗦嗧嗨嗩嗪嗫嗬嗭嗮嗯嗰
+嗱嗲嗳嗴嗵嗶嗷嗸嗹嗺嗻嗼嗽嗾嗿嘀嘁嘂嘃嘄嘅嘆嘇嘈嘉嘊嘋嘌嘍嘎嘏嘐嘑嘒嘓嘔嘕嘖嘗嘘
+嘙嘚嘛嘜嘝嘞嘟嘠嘡嘢嘣嘤嘥嘦嘧嘨嘩嘪嘫嘬嘭嘮嘯嘰嘱嘲嘳嘴嘵嘶嘷嘸嘹嘺嘻嘼嘽嘾嘿噀
+噁噂噃噄噅噆噇噈噉噊噋噌噍噎噏噐噑噒噓噔噕噖噗噘噙噚噛噜噝噞噟噠噡噢噣噤噥噦噧器
+噩噪噫噬噭噮噯噰噱噲噳噴噵噶噷噸噹噺噻噼噽噾噿嚀嚁嚂嚃嚄嚅嚆嚇嚈嚉嚊嚋嚌嚍嚎嚏嚐
+嚑嚒嚓嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚣嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚯嚰嚱嚲嚳嚴嚵嚶嚷嚸
+嚹嚺嚻嚼嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囊囋囌囍囎囏囐囑囒囓囔囕囖囗囘囙囚四囜囝回囟因
+囡团団囤囥囦囧囨囩囪囫囬园囮囯困囱囲図围囵囶囷囸囹固囻囼国图囿圀圁圂圃圄圅圆圇圈
+圉圊國圌圍圎圏圐圑園圓圔圕圖圗團圙圚圛圜圝圞土圠圡圢圣圤圥圦圧在圩圪圫圬圭圮圯地
+圱圲圳圴圵圶圷圸圹场圻圼圽圾圿址坁坂坃坄坅坆均坈坉坊坋坌坍坎坏坐坑坒坓坔坕坖块坘
+坙坚坛坜坝坞坟坠坡坢坣坤坥坦坧坨坩坪坫坬坭坮坯坰坱坲坳坴坵坶坷坸坹坺坻坼坽坾坿垀
+垁垂垃垄垅垆垇垈垉垊型垌垍垎垏垐垑垒垓垔垕垖垗垘垙垚垛垜垝垞垟垠垡垢垣垤垥垦垧垨
+垩垪垫垬垭垮垯垰垱垲垳垴垵垶垷垸垹垺垻垼垽垾垿埀埁埂埃埄埅埆埇埈埉埊埋埌埍城埏埐
+埑埒埓埔埕埖埗埘埙埚埛埜埝埞域埠埡埢埣埤埥埦埧埨埩埪埫埬埭埮埯埰埱埲埳埴埵埶執埸
+培基埻埼埽埾埿堀堁堂堃堄堅堆堇堈堉堊堋堌堍堎堏堐堑堒堓堔堕堖堗堘堙堚堛堜堝堞堟堠
+堡堢堣堤堥堦堧堨堩堪堫堬堭堮堯堰報堲堳場堵堶堷堸堹堺堻堼堽堾堿塀塁塂塃塄塅塆塇塈
+塉塊塋塌塍塎塏塐塑塒塓塔塕塖塗塘塙塚塛塜塝塞塟塠塡塢塣塤塥塦塧塨塩塪填塬塭塮塯塰
+塱塲塳塴塵塶塷塸塹塺塻塼塽塾塿墀墁墂境墄墅墆墇墈墉墊墋墌墍墎墏墐墑墒墓墔墕墖増墘
+墙墚墛墜墝增墟墠墡墢墣墤墥墦墧墨墩墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墼墽墾墿壀
+壁壂壃壄壅壆壇壈壉壊壋壌壍壎壏壐壑壒壓壔壕壖壗壘壙壚壛壜壝壞壟壠壡壢壣壤壥壦壧壨
+壩壪士壬壭壮壯声壱売壳壴壵壶壷壸壹壺壻壼壽壾壿夀夁夂夃处夅夆备夈変夊夋夌复夎夏夐
+夑夒夓夔夕外夗夘夙多夛夜夝夞够夠夡夢夣夤夥夦大夨天太夫夬夭央夯夰失夲夳头夵夶夷夸
+夹夺夻夼夽夾夿奀奁奂奃奄奅奆奇奈奉奊奋奌奍奎奏奐契奒奓奔奕奖套奘奙奚奛奜奝奞奟奠
+奡奢奣奤奥奦奧奨奩奪奫奬奭奮奯奰奱奲女奴奵奶奷奸她奺奻奼好奾奿妀妁如妃妄妅妆妇妈
+妉妊妋妌妍妎妏妐妑妒妓妔妕妖妗妘妙妚妛妜妝妞妟妠妡妢妣妤妥妦妧妨妩妪妫妬妭妮妯妰
+妱妲妳妴妵妶妷妸妹妺妻妼妽妾妿姀姁姂姃姄姅姆姇姈姉姊始姌姍姎姏姐姑姒姓委姕姖姗姘
+姙姚姛姜姝姞姟姠姡姢姣姤姥姦姧姨姩姪姫姬姭姮姯姰姱姲姳姴姵姶姷姸姹姺姻姼姽姾姿娀
+威娂娃娄娅娆娇娈娉娊娋娌娍娎娏娐娑娒娓娔娕娖娗娘娙娚娛娜娝娞娟娠娡娢娣娤娥娦娧娨
+娩娪娫娬娭娮娯娰娱娲娳娴娵娶娷娸娹娺娻娼娽娾娿婀婁婂婃婄婅婆婇婈婉婊婋婌婍婎婏婐
+婑婒婓婔婕婖婗婘婙婚婛婜婝婞婟婠婡婢婣婤婥婦婧婨婩婪婫婬婭婮婯婰婱婲婳婴婵婶婷婸
+婹婺婻婼婽婾婿媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媒媓媔媕媖媗媘媙媚媛媜媝媞媟媠
+媡媢媣媤媥媦媧媨媩媪媫媬媭媮媯媰媱媲媳媴媵媶媷媸媹媺媻媼媽媾媿嫀嫁嫂嫃嫄嫅嫆嫇嫈
+嫉嫊嫋嫌嫍嫎嫏嫐嫑嫒嫓嫔嫕嫖嫗嫘嫙嫚嫛嫜嫝嫞嫟嫠嫡嫢嫣嫤嫥嫦嫧嫨嫩嫪嫫嫬嫭嫮嫯嫰
+嫱嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬉嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬖嬗嬘
+嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬲嬳嬴嬵嬶嬷嬸嬹嬺嬻嬼嬽嬾嬿孀
+孁孂孃孄孅孆孇孈孉孊孋孌孍孎孏子孑孒孓孔孕孖字存孙孚孛孜孝孞孟孠孡孢季孤孥学孧孨
+孩孪孫孬孭孮孯孰孱孲孳孴孵孶孷學孹孺孻孼孽孾孿宀宁宂它宄宅宆宇守安宊宋完宍宎宏宐
+宑宒宓宔宕宖宗官宙定宛宜宝实実宠审客宣室宥宦宧宨宩宪宫宬宭宮宯宰宱宲害宴宵家宷宸
+容宺宻宼宽宾宿寀寁寂寃寄寅密寇寈寉寊寋富寍寎寏寐寑寒寓寔寕寖寗寘寙寚寛寜寝寞察寠
+寡寢寣寤寥實寧寨審寪寫寬寭寮寯寰寱寲寳寴寵寶寷寸对寺寻导寽対寿尀封専尃射尅将將專
+尉尊尋尌對導小尐少尒尓尔尕尖尗尘尙尚尛尜尝尞尟尠尡尢尣尤尥尦尧尨尩尪尫尬尭尮尯尰
+就尲尳尴尵尶尷尸尹尺尻尼尽尾尿局屁层屃屄居屆屇屈屉届屋屌屍屎屏屐屑屒屓屔展屖屗屘
+屙屚屛屜屝属屟屠屡屢屣層履屦屧屨屩屪屫屬屭屮屯屰山屲屳屴屵屶屷屸屹屺屻屼屽屾屿岀
+岁岂岃岄岅岆岇岈岉岊岋岌岍岎岏岐岑岒岓岔岕岖岗岘岙岚岛岜岝岞岟岠岡岢岣岤岥岦岧岨
+岩岪岫岬岭岮岯岰岱岲岳岴岵岶岷岸岹岺岻岼岽岾岿峀峁峂峃峄峅峆峇峈峉峊峋峌峍峎峏峐
+峑峒峓峔峕峖峗峘峙峚峛峜峝峞峟峠峡峢峣峤峥峦峧峨峩峪峫峬峭峮峯峰峱峲峳峴峵島峷峸
+峹峺峻峼峽峾峿崀崁崂崃崄崅崆崇崈崉崊崋崌崍崎崏崐崑崒崓崔崕崖崗崘崙崚崛崜崝崞崟崠
+崡崢崣崤崥崦崧崨崩崪崫崬崭崮崯崰崱崲崳崴崵崶崷崸崹崺崻崼崽崾崿嵀嵁嵂嵃嵄嵅嵆嵇嵈
+嵉嵊嵋嵌嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵘嵙嵚嵛嵜嵝嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵩嵪嵫嵬嵭嵮嵯嵰
+嵱嵲嵳嵴嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶂嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘
+嶙嶚嶛嶜嶝嶞嶟嶠嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶷嶸嶹嶺嶻嶼嶽嶾嶿巀
+巁巂巃巄巅巆巇巈巉巊巋巌巍巎巏巐巑巒巓巔巕巖巗巘巙巚巛巜川州巟巠巡巢巣巤工左巧巨
+巩巪巫巬巭差巯巰己已巳巴巵巶巷巸巹巺巻巼巽巾巿帀币市布帄帅帆帇师帉帊帋希帍帎帏帐
+帑帒帓帔帕帖帗帘帙帚帛帜帝帞帟帠帡帢帣帤帥带帧帨帩帪師帬席帮帯帰帱帲帳帴帵帶帷常
+帹帺帻帼帽帾帿幀幁幂幃幄幅幆幇幈幉幊幋幌幍幎幏幐幑幒幓幔幕幖幗幘幙幚幛幜幝幞幟幠
+幡幢幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱干平年幵并幷幸幹幺幻幼幽幾广庀庁庂広庄庅庆庇庈
+庉床庋庌庍庎序庐庑庒库应底庖店庘庙庚庛府庝庞废庠庡庢庣庤庥度座庨庩庪庫庬庭庮庯庰
+庱庲庳庴庵庶康庸庹庺庻庼庽庾庿廀廁廂廃廄廅廆廇廈廉廊廋廌廍廎廏廐廑廒廓廔廕廖廗廘
+廙廚廛廜廝廞廟廠廡廢廣廤廥廦廧廨廩廪廫廬廭廮廯廰廱廲廳廴廵延廷廸廹建廻廼廽廾廿开
+弁异弃弄弅弆弇弈弉弊弋弌弍弎式弐弑弒弓弔引弖弗弘弙弚弛弜弝弞弟张弡弢弣弤弥弦弧弨
+弩弪弫弬弭弮弯弰弱弲弳弴張弶強弸弹强弻弼弽弾弿彀彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彐
+彑归当彔录彖彗彘彙彚彛彜彝彞彟彠彡形彣彤彥彦彧彨彩彪彫彬彭彮彯彰影彲彳彴彵彶彷彸
+役彺彻彼彽彾彿往征徂徃径待徆徇很徉徊律後徍徎徏徐徑徒従徔徕徖得徘徙徚徛徜徝從徟徠
+御徢徣徤徥徦徧徨復循徫徬徭微徯徰徱徲徳徴徵徶德徸徹徺徻徼徽徾徿忀忁忂心忄必忆忇忈
+忉忊忋忌忍忎忏忐忑忒忓忔忕忖志忘忙忚忛応忝忞忟忠忡忢忣忤忥忦忧忨忩忪快忬忭忮忯忰
+忱忲忳忴念忶忷忸忹忺忻忼忽忾忿怀态怂怃怄怅怆怇怈怉怊怋怌怍怎怏怐怑怒怓怔怕怖怗怘
+怙怚怛怜思怞怟怠怡怢怣怤急怦性怨怩怪怫怬怭怮怯怰怱怲怳怴怵怶怷怸怹怺总怼怽怾怿恀
+恁恂恃恄恅恆恇恈恉恊恋恌恍恎恏恐恑恒恓恔恕恖恗恘恙恚恛恜恝恞恟恠恡恢恣恤恥恦恧恨
+恩恪恫恬恭恮息恰恱恲恳恴恵恶恷恸恹恺恻恼恽恾恿悀悁悂悃悄悅悆悇悈悉悊悋悌悍悎悏悐
+悑悒悓悔悕悖悗悘悙悚悛悜悝悞悟悠悡悢患悤悥悦悧您悩悪悫悬悭悮悯悰悱悲悳悴悵悶悷悸
+悹悺悻悼悽悾悿惀惁惂惃惄情惆惇惈惉惊惋惌惍惎惏惐惑惒惓惔惕惖惗惘惙惚惛惜惝惞惟惠
+惡惢惣惤惥惦惧惨惩惪惫惬惭惮惯惰惱惲想惴惵惶惷惸惹惺惻惼惽惾惿愀愁愂愃愄愅愆愇愈
+愉愊愋愌愍愎意愐愑愒愓愔愕愖愗愘愙愚愛愜愝愞感愠愡愢愣愤愥愦愧愨愩愪愫愬愭愮愯愰
+愱愲愳愴愵愶愷愸愹愺愻愼愽愾愿慀慁慂慃慄慅慆慇慈慉慊態慌慍慎慏慐慑慒慓慔慕慖慗慘
+慙慚慛慜慝慞慟慠慡慢慣慤慥慦慧慨慩慪慫慬慭慮慯慰慱慲慳慴慵慶慷慸慹慺慻慼慽慾慿憀
+憁憂憃憄憅憆憇憈憉憊憋憌憍憎憏憐憑憒憓憔憕憖憗憘憙憚憛憜憝憞憟憠憡憢憣憤憥憦憧憨
+憩憪憫憬憭憮憯憰憱憲憳憴憵憶憷憸憹憺憻憼憽憾憿懀懁懂懃懄懅懆懇懈應懊懋懌懍懎懏懐
+懑懒懓懔懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懦懧懨懩懪懫懬懭懮懯懰懱懲懳懴懵懶懷懸
+懹懺懻懼懽懾懿戀戁戂戃戄戅戆戇戈戉戊戋戌戍戎戏成我戒戓戔戕或戗战戙戚戛戜戝戞戟戠
+戡戢戣戤戥戦戧戨戩截戫戬戭戮戯戰戱戲戳戴戵戶户戸戹戺戻戼戽戾房所扁扂扃扄扅扆扇扈
+扉扊手扌才扎扏扐扑扒打扔払扖扗托扙扚扛扜扝扞扟扠扡扢扣扤扥扦执扨扩扪扫扬扭扮扯扰
+扱扲扳扴扵扶扷扸批扺扻扼扽找承技抁抂抃抄抅抆抇抈抉把抋抌抍抎抏抐抑抒抓抔投抖抗折
+抙抚抛抜抝択抟抠抡抢抣护报抦抧抨抩抪披抬抭抮抯抰抱抲抳抴抵抶抷抸抹抺抻押抽抾抿拀
+拁拂拃拄担拆拇拈拉拊拋拌拍拎拏拐拑拒拓拔拕拖拗拘拙拚招拜拝拞拟拠拡拢拣拤拥拦拧拨
+择拪拫括拭拮拯拰拱拲拳拴拵拶拷拸拹拺拻拼拽拾拿挀持挂挃挄挅挆指挈按挊挋挌挍挎挏挐
+挑挒挓挔挕挖挗挘挙挚挛挜挝挞挟挠挡挢挣挤挥挦挧挨挩挪挫挬挭挮振挰挱挲挳挴挵挶挷挸
+挹挺挻挼挽挾挿捀捁捂捃捄捅捆捇捈捉捊捋捌捍捎捏捐捑捒捓捔捕捖捗捘捙捚捛捜捝捞损捠
+捡换捣捤捥捦捧捨捩捪捫捬捭据捯捰捱捲捳捴捵捶捷捸捹捺捻捼捽捾捿掀掁掂掃掄掅掆掇授
+掉掊掋掌掍掎掏掐掑排掓掔掕掖掗掘掙掚掛掜掝掞掟掠採探掣掤接掦控推掩措掫掬掭掮掯掰
+掱掲掳掴掵掶掷掸掹掺掻掼掽掾掿揀揁揂揃揄揅揆揇揈揉揊揋揌揍揎描提揑插揓揔揕揖揗揘
+揙揚換揜揝揞揟揠握揢揣揤揥揦揧揨揩揪揫揬揭揮揯揰揱揲揳援揵揶揷揸揹揺揻揼揽揾揿搀
+搁搂搃搄搅搆搇搈搉搊搋搌損搎搏搐搑搒搓搔搕搖搗搘搙搚搛搜搝搞搟搠搡搢搣搤搥搦搧搨
+搩搪搫搬搭搮搯搰搱搲搳搴搵搶搷搸搹携搻搼搽搾搿摀摁摂摃摄摅摆摇摈摉摊摋摌摍摎摏摐
+摑摒摓摔摕摖摗摘摙摚摛摜摝摞摟摠摡摢摣摤摥摦摧摨摩摪摫摬摭摮摯摰摱摲摳摴摵摶摷摸
+摹摺摻摼摽摾摿撀撁撂撃撄撅撆撇撈撉撊撋撌撍撎撏撐撑撒撓撔撕撖撗撘撙撚撛撜撝撞撟撠
+撡撢撣撤撥撦撧撨撩撪撫撬播撮撯撰撱撲撳撴撵撶撷撸撹撺撻撼撽撾撿擀擁擂擃擄擅擆擇擈
+擉擊擋擌操擎擏擐擑擒擓擔擕擖擗擘擙據擛擜擝擞擟擠擡擢擣擤擥擦擧擨擩擪擫擬擭擮擯擰
+擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攀攁攂攃攄攅攆攇攈攉攊攋攌攍攎攏攐攑攒攓攔攕攖攗攘
+攙攚攛攜攝攞攟攠攡攢攣攤攥攦攧攨攩攪攫攬攭攮支攰攱攲攳攴攵收攷攸改攺攻攼攽放政敀
+敁敂敃敄故敆敇效敉敊敋敌敍敎敏敐救敒敓敔敕敖敗敘教敚敛敜敝敞敟敠敡敢散敤敥敦敧敨
+敩敪敫敬敭敮敯数敱敲敳整敵敶敷數敹敺敻敼敽敾敿斀斁斂斃斄斅斆文斈斉斊斋斌斍斎斏斐
+斑斒斓斔斕斖斗斘料斚斛斜斝斞斟斠斡斢斣斤斥斦斧斨斩斪斫斬断斮斯新斱斲斳斴斵斶斷斸
+方斺斻於施斾斿旀旁旂旃旄旅旆旇旈旉旊旋旌旍旎族旐旑旒旓旔旕旖旗旘旙旚旛旜旝旞旟无
+旡既旣旤日旦旧旨早旪旫旬旭旮旯旰旱旲旳旴旵时旷旸旹旺旻旼旽旾旿昀昁昂昃昄昅昆昇昈
+昉昊昋昌昍明昏昐昑昒易昔昕昖昗昘昙昚昛昜昝昞星映昡昢昣昤春昦昧昨昩昪昫昬昭昮是昰
+昱昲昳昴昵昶昷昸昹昺昻昼昽显昿晀晁時晃晄晅晆晇晈晉晊晋晌晍晎晏晐晑晒晓晔晕晖晗晘
+晙晚晛晜晝晞晟晠晡晢晣晤晥晦晧晨晩晪晫晬晭普景晰晱晲晳晴晵晶晷晸晹智晻晼晽晾晿暀
+暁暂暃暄暅暆暇暈暉暊暋暌暍暎暏暐暑暒暓暔暕暖暗暘暙暚暛暜暝暞暟暠暡暢暣暤暥暦暧暨
+暩暪暫暬暭暮暯暰暱暲暳暴暵暶暷暸暹暺暻暼暽暾暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐
+曑曒曓曔曕曖曗曘曙曚曛曜曝曞曟曠曡曢曣曤曥曦曧曨曩曪曫曬曭曮曯曰曱曲曳更曵曶曷書
+曹曺曻曼曽曾替最朁朂會朄朅朆朇月有朊朋朌服朎朏朐朑朒朓朔朕朖朗朘朙朚望朜朝朞期朠
+朡朢朣朤朥朦朧木朩未末本札朮术朰朱朲朳朴朵朶朷朸朹机朻朼朽朾朿杀杁杂权杄杅杆杇杈
+杉杊杋杌杍李杏材村杒杓杔杕杖杗杘杙杚杛杜杝杞束杠条杢杣杤来杦杧杨杩杪杫杬杭杮杯杰
+東杲杳杴杵杶杷杸杹杺杻杼杽松板枀极枂枃构枅枆枇枈枉枊枋枌枍枎枏析枑枒枓枔枕枖林枘
+枙枚枛果枝枞枟枠枡枢枣枤枥枦枧枨枩枪枫枬枭枮枯枰枱枲枳枴枵架枷枸枹枺枻枼枽枾枿柀
+柁柂柃柄柅柆柇柈柉柊柋柌柍柎柏某柑柒染柔柕柖柗柘柙柚柛柜柝柞柟柠柡柢柣柤查柦柧柨
+柩柪柫柬柭柮柯柰柱柲柳柴柵柶柷柸柹柺査柼柽柾柿栀栁栂栃栄栅栆标栈栉栊栋栌栍栎栏栐
+树栒栓栔栕栖栗栘栙栚栛栜栝栞栟栠校栢栣栤栥栦栧栨栩株栫栬栭栮栯栰栱栲栳栴栵栶样核
+根栺栻格栽栾栿桀桁桂桃桄桅框桇案桉桊桋桌桍桎桏桐桑桒桓桔桕桖桗桘桙桚桛桜桝桞桟桠
+桡桢档桤桥桦桧桨桩桪桫桬桭桮桯桰桱桲桳桴桵桶桷桸桹桺桻桼桽桾桿梀梁梂梃梄梅梆梇梈
+梉梊梋梌梍梎梏梐梑梒梓梔梕梖梗梘梙梚梛梜條梞梟梠梡梢梣梤梥梦梧梨梩梪梫梬梭梮梯械
+梱梲梳梴梵梶梷梸梹梺梻梼梽梾梿检棁棂棃棄棅棆棇棈棉棊棋棌棍棎棏棐棑棒棓棔棕棖棗棘
+棙棚棛棜棝棞棟棠棡棢棣棤棥棦棧棨棩棪棫棬棭森棯棰棱棲棳棴棵棶棷棸棹棺棻棼棽棾棿椀
+椁椂椃椄椅椆椇椈椉椊椋椌植椎椏椐椑椒椓椔椕椖椗椘椙椚椛検椝椞椟椠椡椢椣椤椥椦椧椨
+椩椪椫椬椭椮椯椰椱椲椳椴椵椶椷椸椹椺椻椼椽椾椿楀楁楂楃楄楅楆楇楈楉楊楋楌楍楎楏楐
+楑楒楓楔楕楖楗楘楙楚楛楜楝楞楟楠楡楢楣楤楥楦楧楨楩楪楫楬業楮楯楰楱楲楳楴極楶楷楸
+楹楺楻楼楽楾楿榀榁概榃榄榅榆榇榈榉榊榋榌榍榎榏榐榑榒榓榔榕榖榗榘榙榚榛榜榝榞榟榠
+榡榢榣榤榥榦榧榨榩榪榫榬榭榮榯榰榱榲榳榴榵榶榷榸榹榺榻榼榽榾榿槀槁槂槃槄槅槆槇槈
+槉槊構槌槍槎槏槐槑槒槓槔槕槖槗様槙槚槛槜槝槞槟槠槡槢槣槤槥槦槧槨槩槪槫槬槭槮槯槰
+槱槲槳槴槵槶槷槸槹槺槻槼槽槾槿樀樁樂樃樄樅樆樇樈樉樊樋樌樍樎樏樐樑樒樓樔樕樖樗樘
+標樚樛樜樝樞樟樠模樢樣樤樥樦樧樨権横樫樬樭樮樯樰樱樲樳樴樵樶樷樸樹樺樻樼樽樾樿橀
+橁橂橃橄橅橆橇橈橉橊橋橌橍橎橏橐橑橒橓橔橕橖橗橘橙橚橛橜橝橞機橠橡橢橣橤橥橦橧橨
+橩橪橫橬橭橮橯橰橱橲橳橴橵橶橷橸橹橺橻橼橽橾橿檀檁檂檃檄檅檆檇檈檉檊檋檌檍檎檏檐
+檑檒檓檔檕檖檗檘檙檚檛檜檝檞檟檠檡檢檣檤檥檦檧檨檩檪檫檬檭檮檯檰檱檲檳檴檵檶檷檸
+檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠
+櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈
+欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欠次欢欣欤欥欦欧欨欩欪欫欬欭欮欯欰
+欱欲欳欴欵欶欷欸欹欺欻欼欽款欿歀歁歂歃歄歅歆歇歈歉歊歋歌歍歎歏歐歑歒歓歔歕歖歗歘
+歙歚歛歜歝歞歟歠歡止正此步武歧歨歩歪歫歬歭歮歯歰歱歲歳歴歵歶歷歸歹歺死歼歽歾歿殀
+殁殂殃殄殅殆殇殈殉殊残殌殍殎殏殐殑殒殓殔殕殖殗殘殙殚殛殜殝殞殟殠殡殢殣殤殥殦殧殨
+殩殪殫殬殭殮殯殰殱殲殳殴段殶殷殸殹殺殻殼殽殾殿毀毁毂毃毄毅毆毇毈毉毊毋毌母毎每毐
+毑毒毓比毕毖毗毘毙毚毛毜毝毞毟毠毡毢毣毤毥毦毧毨毩毪毫毬毭毮毯毰毱毲毳毴毵毶毷毸
+毹毺毻毼毽毾毿氀氁氂氃氄氅氆氇氈氉氊氋氌氍氎氏氐民氒氓气氕氖気氘氙氚氛氜氝氞氟氠
+氡氢氣氤氥氦氧氨氩氪氫氬氭氮氯氰氱氲氳水氵氶氷永氹氺氻氼氽氾氿汀汁求汃汄汅汆汇汈
+汉汊汋汌汍汎汏汐汑汒汓汔汕汖汗汘汙汚汛汜汝汞江池污汢汣汤汥汦汧汨汩汪汫汬汭汮汯汰
+汱汲汳汴汵汶汷汸汹決汻汼汽汾汿沀沁沂沃沄沅沆沇沈沉沊沋沌沍沎沏沐沑沒沓沔沕沖沗沘
+沙沚沛沜沝沞沟沠没沢沣沤沥沦沧沨沩沪沫沬沭沮沯沰沱沲河沴沵沶沷沸油沺治沼沽沾沿泀
+況泂泃泄泅泆泇泈泉泊泋泌泍泎泏泐泑泒泓泔法泖泗泘泙泚泛泜泝泞泟泠泡波泣泤泥泦泧注
+泩泪泫泬泭泮泯泰泱泲泳泴泵泶泷泸泹泺泻泼泽泾泿洀洁洂洃洄洅洆洇洈洉洊洋洌洍洎洏洐
+洑洒洓洔洕洖洗洘洙洚洛洜洝洞洟洠洡洢洣洤津洦洧洨洩洪洫洬洭洮洯洰洱洲洳洴洵洶洷洸
+洹洺活洼洽派洿浀流浂浃浄浅浆浇浈浉浊测浌浍济浏浐浑浒浓浔浕浖浗浘浙浚浛浜浝浞浟浠
+浡浢浣浤浥浦浧浨浩浪浫浬浭浮浯浰浱浲浳浴浵浶海浸浹浺浻浼浽浾浿涀涁涂涃涄涅涆涇消
+涉涊涋涌涍涎涏涐涑涒涓涔涕涖涗涘涙涚涛涜涝涞涟涠涡涢涣涤涥润涧涨涩涪涫涬涭涮涯涰
+涱液涳涴涵涶涷涸涹涺涻涼涽涾涿淀淁淂淃淄淅淆淇淈淉淊淋淌淍淎淏淐淑淒淓淔淕淖淗淘
+淙淚淛淜淝淞淟淠淡淢淣淤淥淦淧淨淩淪淫淬淭淮淯淰深淲淳淴淵淶混淸淹淺添淼淽淾淿渀
+渁渂渃渄清渆渇済渉渊渋渌渍渎渏渐渑渒渓渔渕渖渗渘渙渚減渜渝渞渟渠渡渢渣渤渥渦渧渨
+温渪渫測渭渮港渰渱渲渳渴渵渶渷游渹渺渻渼渽渾渿湀湁湂湃湄湅湆湇湈湉湊湋湌湍湎湏湐
+湑湒湓湔湕湖湗湘湙湚湛湜湝湞湟湠湡湢湣湤湥湦湧湨湩湪湫湬湭湮湯湰湱湲湳湴湵湶湷湸
+湹湺湻湼湽湾湿満溁溂溃溄溅溆溇溈溉溊溋溌溍溎溏源溑溒溓溔溕準溗溘溙溚溛溜溝溞溟溠
+溡溢溣溤溥溦溧溨溩溪溫溬溭溮溯溰溱溲溳溴溵溶溷溸溹溺溻溼溽溾溿滀滁滂滃滄滅滆滇滈
+滉滊滋滌滍滎滏滐滑滒滓滔滕滖滗滘滙滚滛滜滝滞滟滠满滢滣滤滥滦滧滨滩滪滫滬滭滮滯滰
+滱滲滳滴滵滶滷滸滹滺滻滼滽滾滿漀漁漂漃漄漅漆漇漈漉漊漋漌漍漎漏漐漑漒漓演漕漖漗漘
+漙漚漛漜漝漞漟漠漡漢漣漤漥漦漧漨漩漪漫漬漭漮漯漰漱漲漳漴漵漶漷漸漹漺漻漼漽漾漿潀
+潁潂潃潄潅潆潇潈潉潊潋潌潍潎潏潐潑潒潓潔潕潖潗潘潙潚潛潜潝潞潟潠潡潢潣潤潥潦潧潨
+潩潪潫潬潭潮潯潰潱潲潳潴潵潶潷潸潹潺潻潼潽潾潿澀澁澂澃澄澅澆澇澈澉澊澋澌澍澎澏澐
+澑澒澓澔澕澖澗澘澙澚澛澜澝澞澟澠澡澢澣澤澥澦澧澨澩澪澫澬澭澮澯澰澱澲澳澴澵澶澷澸
+澹澺澻澼澽澾澿激濁濂濃濄濅濆濇濈濉濊濋濌濍濎濏濐濑濒濓濔濕濖濗濘濙濚濛濜濝濞濟濠
+濡濢濣濤濥濦濧濨濩濪濫濬濭濮濯濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈
+瀉瀊瀋瀌瀍瀎瀏瀐瀑瀒瀓瀔瀕瀖瀗瀘瀙瀚瀛瀜瀝瀞瀟瀠瀡瀢瀣瀤瀥瀦瀧瀨瀩瀪瀫瀬瀭瀮瀯瀰
+瀱瀲瀳瀴瀵瀶瀷瀸瀹瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灌灍灎灏灐灑灒灓灔灕灖灗灘
+灙灚灛灜灝灞灟灠灡灢灣灤灥灦灧灨灩灪火灬灭灮灯灰灱灲灳灴灵灶灷灸灹灺灻灼災灾灿炀
+炁炂炃炄炅炆炇炈炉炊炋炌炍炎炏炐炑炒炓炔炕炖炗炘炙炚炛炜炝炞炟炠炡炢炣炤炥炦炧炨
+炩炪炫炬炭炮炯炰炱炲炳炴炵炶炷炸点為炻炼炽炾炿烀烁烂烃烄烅烆烇烈烉烊烋烌烍烎烏烐
+烑烒烓烔烕烖烗烘烙烚烛烜烝烞烟烠烡烢烣烤烥烦烧烨烩烪烫烬热烮烯烰烱烲烳烴烵烶烷烸
+烹烺烻烼烽烾烿焀焁焂焃焄焅焆焇焈焉焊焋焌焍焎焏焐焑焒焓焔焕焖焗焘焙焚焛焜焝焞焟焠
+無焢焣焤焥焦焧焨焩焪焫焬焭焮焯焰焱焲焳焴焵然焷焸焹焺焻焼焽焾焿煀煁煂煃煄煅煆煇煈
+煉煊煋煌煍煎煏煐煑煒煓煔煕煖煗煘煙煚煛煜煝煞煟煠煡煢煣煤煥煦照煨煩煪煫煬煭煮煯煰
+煱煲煳煴煵煶煷煸煹煺煻煼煽煾煿熀熁熂熃熄熅熆熇熈熉熊熋熌熍熎熏熐熑熒熓熔熕熖熗熘
+熙熚熛熜熝熞熟熠熡熢熣熤熥熦熧熨熩熪熫熬熭熮熯熰熱熲熳熴熵熶熷熸熹熺熻熼熽熾熿燀
+燁燂燃燄燅燆燇燈燉燊燋燌燍燎燏燐燑燒燓燔燕燖燗燘燙燚燛燜燝燞營燠燡燢燣燤燥燦燧燨
+燩燪燫燬燭燮燯燰燱燲燳燴燵燶燷燸燹燺燻燼燽燾燿爀爁爂爃爄爅爆爇爈爉爊爋爌爍爎爏爐
+爑爒爓爔爕爖爗爘爙爚爛爜爝爞爟爠爡爢爣爤爥爦爧爨爩爪爫爬爭爮爯爰爱爲爳爴爵父爷爸
+爹爺爻爼爽爾爿牀牁牂牃牄牅牆片版牉牊牋牌牍牎牏牐牑牒牓牔牕牖牗牘牙牚牛牜牝牞牟牠
+牡牢牣牤牥牦牧牨物牪牫牬牭牮牯牰牱牲牳牴牵牶牷牸特牺牻牼牽牾牿犀犁犂犃犄犅犆犇犈
+犉犊犋犌犍犎犏犐犑犒犓犔犕犖犗犘犙犚犛犜犝犞犟犠犡犢犣犤犥犦犧犨犩犪犫犬犭犮犯犰
+犱犲犳犴犵状犷犸犹犺犻犼犽犾犿狀狁狂狃狄狅狆狇狈狉狊狋狌狍狎狏狐狑狒狓狔狕狖狗狘
+狙狚狛狜狝狞狟狠狡狢狣狤狥狦狧狨狩狪狫独狭狮狯狰狱狲狳狴狵狶狷狸狹狺狻狼狽狾狿猀
+猁猂猃猄猅猆猇猈猉猊猋猌猍猎猏猐猑猒猓猔猕猖猗猘猙猚猛猜猝猞猟猠猡猢猣猤猥猦猧猨
+猩猪猫猬猭献猯猰猱猲猳猴猵猶猷猸猹猺猻猼猽猾猿獀獁獂獃獄獅獆獇獈獉獊獋獌獍獎獏獐
+獑獒獓獔獕獖獗獘獙獚獛獜獝獞獟獠獡獢獣獤獥獦獧獨獩獪獫獬獭獮獯獰獱獲獳獴獵獶獷獸
+獹獺獻獼獽獾獿玀玁玂玃玄玅玆率玈玉玊王玌玍玎玏玐玑玒玓玔玕玖玗玘玙玚玛玜玝玞玟玠
+玡玢玣玤玥玦玧玨玩玪玫玬玭玮环现玱玲玳玴玵玶玷玸玹玺玻玼玽玾玿珀珁珂珃珄珅珆珇珈
+珉珊珋珌珍珎珏珐珑珒珓珔珕珖珗珘珙珚珛珜珝珞珟珠珡珢珣珤珥珦珧珨珩珪珫珬班珮珯珰
+珱珲珳珴珵珶珷珸珹珺珻珼珽現珿琀琁琂球琄琅理琇琈琉琊琋琌琍琎琏琐琑琒琓琔琕琖琗琘
+琙琚琛琜琝琞琟琠琡琢琣琤琥琦琧琨琩琪琫琬琭琮琯琰琱琲琳琴琵琶琷琸琹琺琻琼琽琾琿瑀
+瑁瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍瑎瑏瑐瑑瑒瑓瑔瑕瑖瑗瑘瑙瑚瑛瑜瑝瑞瑟瑠瑡瑢瑣瑤瑥瑦瑧瑨
+瑩瑪瑫瑬瑭瑮瑯瑰瑱瑲瑳瑴瑵瑶瑷瑸瑹瑺瑻瑼瑽瑾瑿璀璁璂璃璄璅璆璇璈璉璊璋璌璍璎璏璐
+璑璒璓璔璕璖璗璘璙璚璛璜璝璞璟璠璡璢璣璤璥璦璧璨璩璪璫璬璭璮璯環璱璲璳璴璵璶璷璸
+璹璺璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓒瓓瓔瓕瓖瓗瓘瓙瓚瓛瓜瓝瓞瓟瓠
+瓡瓢瓣瓤瓥瓦瓧瓨瓩瓪瓫瓬瓭瓮瓯瓰瓱瓲瓳瓴瓵瓶瓷瓸瓹瓺瓻瓼瓽瓾瓿甀甁甂甃甄甅甆甇甈
+甉甊甋甌甍甎甏甐甑甒甓甔甕甖甗甘甙甚甛甜甝甞生甠甡產産甤甥甦甧用甩甪甫甬甭甮甯田
+由甲申甴电甶男甸甹町画甼甽甾甿畀畁畂畃畄畅畆畇畈畉畊畋界畍畎畏畐畑畒畓畔畕畖畗畘
+留畚畛畜畝畞畟畠畡畢畣畤略畦畧畨畩番畫畬畭畮畯異畱畲畳畴畵當畷畸畹畺畻畼畽畾畿疀
+疁疂疃疄疅疆疇疈疉疊疋疌疍疎疏疐疑疒疓疔疕疖疗疘疙疚疛疜疝疞疟疠疡疢疣疤疥疦疧疨
+疩疪疫疬疭疮疯疰疱疲疳疴疵疶疷疸疹疺疻疼疽疾疿痀痁痂痃痄病痆症痈痉痊痋痌痍痎痏痐
+痑痒痓痔痕痖痗痘痙痚痛痜痝痞痟痠痡痢痣痤痥痦痧痨痩痪痫痬痭痮痯痰痱痲痳痴痵痶痷痸
+痹痺痻痼痽痾痿瘀瘁瘂瘃瘄瘅瘆瘇瘈瘉瘊瘋瘌瘍瘎瘏瘐瘑瘒瘓瘔瘕瘖瘗瘘瘙瘚瘛瘜瘝瘞瘟瘠
+瘡瘢瘣瘤瘥瘦瘧瘨瘩瘪瘫瘬瘭瘮瘯瘰瘱瘲瘳瘴瘵瘶瘷瘸瘹瘺瘻瘼瘽瘾瘿癀癁療癃癄癅癆癇癈
+癉癊癋癌癍癎癏癐癑癒癓癔癕癖癗癘癙癚癛癜癝癞癟癠癡癢癣癤癥癦癧癨癩癪癫癬癭癮癯癰
+癱癲癳癴癵癶癷癸癹発登發白百癿皀皁皂皃的皅皆皇皈皉皊皋皌皍皎皏皐皑皒皓皔皕皖皗皘
+皙皚皛皜皝皞皟皠皡皢皣皤皥皦皧皨皩皪皫皬皭皮皯皰皱皲皳皴皵皶皷皸皹皺皻皼皽皾皿盀
+盁盂盃盄盅盆盇盈盉益盋盌盍盎盏盐监盒盓盔盕盖盗盘盙盚盛盜盝盞盟盠盡盢監盤盥盦盧盨
+盩盪盫盬盭目盯盰盱盲盳直盵盶盷相盹盺盻盼盽盾盿眀省眂眃眄眅眆眇眈眉眊看県眍眎眏眐
+眑眒眓眔眕眖眗眘眙眚眛眜眝眞真眠眡眢眣眤眥眦眧眨眩眪眫眬眭眮眯眰眱眲眳眴眵眶眷眸
+眹眺眻眼眽眾眿着睁睂睃睄睅睆睇睈睉睊睋睌睍睎睏睐睑睒睓睔睕睖睗睘睙睚睛睜睝睞睟睠
+睡睢督睤睥睦睧睨睩睪睫睬睭睮睯睰睱睲睳睴睵睶睷睸睹睺睻睼睽睾睿瞀瞁瞂瞃瞄瞅瞆瞇瞈
+瞉瞊瞋瞌瞍瞎瞏瞐瞑瞒瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞟瞠瞡瞢瞣瞤瞥瞦瞧瞨瞩瞪瞫瞬瞭瞮瞯瞰
+瞱瞲瞳瞴瞵瞶瞷瞸瞹瞺瞻瞼瞽瞾瞿矀矁矂矃矄矅矆矇矈矉矊矋矌矍矎矏矐矑矒矓矔矕矖矗矘
+矙矚矛矜矝矞矟矠矡矢矣矤知矦矧矨矩矪矫矬短矮矯矰矱矲石矴矵矶矷矸矹矺矻矼矽矾矿砀
+码砂砃砄砅砆砇砈砉砊砋砌砍砎砏砐砑砒砓研砕砖砗砘砙砚砛砜砝砞砟砠砡砢砣砤砥砦砧砨
+砩砪砫砬砭砮砯砰砱砲砳破砵砶砷砸砹砺砻砼砽砾砿础硁硂硃硄硅硆硇硈硉硊硋硌硍硎硏硐
+硑硒硓硔硕硖硗硘硙硚硛硜硝硞硟硠硡硢硣硤硥硦硧硨硩硪硫硬硭确硯硰硱硲硳硴硵硶硷硸
+硹硺硻硼硽硾硿碀碁碂碃碄碅碆碇碈碉碊碋碌碍碎碏碐碑碒碓碔碕碖碗碘碙碚碛碜碝碞碟碠
+碡碢碣碤碥碦碧碨碩碪碫碬碭碮碯碰碱碲碳碴碵碶碷碸碹確碻碼碽碾碿磀磁磂磃磄磅磆磇磈
+磉磊磋磌磍磎磏磐磑磒磓磔磕磖磗磘磙磚磛磜磝磞磟磠磡磢磣磤磥磦磧磨磩磪磫磬磭磮磯磰
+磱磲磳磴磵磶磷磸磹磺磻磼磽磾磿礀礁礂礃礄礅礆礇礈礉礊礋礌礍礎礏礐礑礒礓礔礕礖礗礘
+礙礚礛礜礝礞礟礠礡礢礣礤礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礴礵礶礷礸礹示礻礼礽社礿祀
+祁祂祃祄祅祆祇祈祉祊祋祌祍祎祏祐祑祒祓祔祕祖祗祘祙祚祛祜祝神祟祠祡祢祣祤祥祦祧票
+祩祪祫祬祭祮祯祰祱祲祳祴祵祶祷祸祹祺祻祼祽祾祿禀禁禂禃禄禅禆禇禈禉禊禋禌禍禎福禐
+禑禒禓禔禕禖禗禘禙禚禛禜禝禞禟禠禡禢禣禤禥禦禧禨禩禪禫禬禭禮禯禰禱禲禳禴禵禶禷禸
+禹禺离禼禽禾禿秀私秂秃秄秅秆秇秈秉秊秋秌种秎秏秐科秒秓秔秕秖秗秘秙秚秛秜秝秞租秠
+秡秢秣秤秥秦秧秨秩秪秫秬秭秮积称秱秲秳秴秵秶秷秸秹秺移秼秽秾秿稀稁稂稃稄稅稆稇稈
+稉稊程稌稍税稏稐稑稒稓稔稕稖稗稘稙稚稛稜稝稞稟稠稡稢稣稤稥稦稧稨稩稪稫稬稭種稯稰
+稱稲稳稴稵稶稷稸稹稺稻稼稽稾稿穀穁穂穃穄穅穆穇穈穉穊穋穌積穎穏穐穑穒穓穔穕穖穗穘
+穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨穩穪穫穬穭穮穯穰穱穲穳穴穵究穷穸穹空穻穼穽穾穿窀
+突窂窃窄窅窆窇窈窉窊窋窌窍窎窏窐窑窒窓窔窕窖窗窘窙窚窛窜窝窞窟窠窡窢窣窤窥窦窧窨
+窩窪窫窬窭窮窯窰窱窲窳窴窵窶窷窸窹窺窻窼窽窾窿竀竁竂竃竄竅竆竇竈竉竊立竌竍竎竏竐
+竑竒竓竔竕竖竗竘站竚竛竜竝竞竟章竡竢竣竤童竦竧竨竩竪竫竬竭竮端竰竱竲竳竴竵競竷竸
+竹竺竻竼竽竾竿笀笁笂笃笄笅笆笇笈笉笊笋笌笍笎笏笐笑笒笓笔笕笖笗笘笙笚笛笜笝笞笟笠
+笡笢笣笤笥符笧笨笩笪笫第笭笮笯笰笱笲笳笴笵笶笷笸笹笺笻笼笽笾笿筀筁筂筃筄筅筆筇筈
+等筊筋筌筍筎筏筐筑筒筓答筕策筗筘筙筚筛筜筝筞筟筠筡筢筣筤筥筦筧筨筩筪筫筬筭筮筯筰
+筱筲筳筴筵筶筷筸筹筺筻筼筽签筿简箁箂箃箄箅箆箇箈箉箊箋箌箍箎箏箐箑箒箓箔箕箖算箘
+箙箚箛箜箝箞箟箠管箢箣箤箥箦箧箨箩箪箫箬箭箮箯箰箱箲箳箴箵箶箷箸箹箺箻箼箽箾箿節
+篁篂篃範篅篆篇篈築篊篋篌篍篎篏篐篑篒篓篔篕篖篗篘篙篚篛篜篝篞篟篠篡篢篣篤篥篦篧篨
+篩篪篫篬篭篮篯篰篱篲篳篴篵篶篷篸篹篺篻篼篽篾篿簀簁簂簃簄簅簆簇簈簉簊簋簌簍簎簏簐
+簑簒簓簔簕簖簗簘簙簚簛簜簝簞簟簠簡簢簣簤簥簦簧簨簩簪簫簬簭簮簯簰簱簲簳簴簵簶簷簸
+簹簺簻簼簽簾簿籀籁籂籃籄籅籆籇籈籉籊籋籌籍籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠
+籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲米籴籵籶籷籸籹籺类籼籽籾籿粀粁粂粃粄粅粆粇粈
+粉粊粋粌粍粎粏粐粑粒粓粔粕粖粗粘粙粚粛粜粝粞粟粠粡粢粣粤粥粦粧粨粩粪粫粬粭粮粯粰
+粱粲粳粴粵粶粷粸粹粺粻粼粽精粿糀糁糂糃糄糅糆糇糈糉糊糋糌糍糎糏糐糑糒糓糔糕糖糗糘
+糙糚糛糜糝糞糟糠糡糢糣糤糥糦糧糨糩糪糫糬糭糮糯糰糱糲糳糴糵糶糷糸糹糺系糼糽糾糿紀
+紁紂紃約紅紆紇紈紉紊紋紌納紎紏紐紑紒紓純紕紖紗紘紙級紛紜紝紞紟素紡索紣紤紥紦紧紨
+紩紪紫紬紭紮累細紱紲紳紴紵紶紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結
+絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絮絯絰統絲絳絴絵絶絷絸
+絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘継続綛綜綝綞綟綠
+綡綢綣綤綥綦綧綨綩綪綫綬維綮綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈
+緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰
+緱緲緳練緵緶緷緸緹緺緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘
+縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹縺縻縼總績縿繀
+繁繂繃繄繅繆繇繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝繞繟繠繡繢繣繤繥繦繧繨
+繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纂纃纄纅纆纇纈纉纊纋續纍纎纏纐
+纑纒纓纔纕纖纗纘纙纚纛纜纝纞纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸
+纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠
+绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈
+缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰
+缱缲缳缴缵缶缷缸缹缺缻缼缽缾缿罀罁罂罃罄罅罆罇罈罉罊罋罌罍罎罏罐网罒罓罔罕罖罗罘
+罙罚罛罜罝罞罟罠罡罢罣罤罥罦罧罨罩罪罫罬罭置罯罰罱署罳罴罵罶罷罸罹罺罻罼罽罾罿羀
+羁羂羃羄羅羆羇羈羉羊羋羌羍美羏羐羑羒羓羔羕羖羗羘羙羚羛羜羝羞羟羠羡羢羣群羥羦羧羨
+義羪羫羬羭羮羯羰羱羲羳羴羵羶羷羸羹羺羻羼羽羾羿翀翁翂翃翄翅翆翇翈翉翊翋翌翍翎翏翐
+翑習翓翔翕翖翗翘翙翚翛翜翝翞翟翠翡翢翣翤翥翦翧翨翩翪翫翬翭翮翯翰翱翲翳翴翵翶翷翸
+翹翺翻翼翽翾翿耀老耂考耄者耆耇耈耉耊耋而耍耎耏耐耑耒耓耔耕耖耗耘耙耚耛耜耝耞耟耠
+耡耢耣耤耥耦耧耨耩耪耫耬耭耮耯耰耱耲耳耴耵耶耷耸耹耺耻耼耽耾耿聀聁聂聃聄聅聆聇聈
+聉聊聋职聍聎聏聐聑聒聓联聕聖聗聘聙聚聛聜聝聞聟聠聡聢聣聤聥聦聧聨聩聪聫聬聭聮聯聰
+聱聲聳聴聵聶職聸聹聺聻聼聽聾聿肀肁肂肃肄肅肆肇肈肉肊肋肌肍肎肏肐肑肒肓肔肕肖肗肘
+肙肚肛肜肝肞肟肠股肢肣肤肥肦肧肨肩肪肫肬肭肮肯肰肱育肳肴肵肶肷肸肹肺肻肼肽肾肿胀
+胁胂胃胄胅胆胇胈胉胊胋背胍胎胏胐胑胒胓胔胕胖胗胘胙胚胛胜胝胞胟胠胡胢胣胤胥胦胧胨
+胩胪胫胬胭胮胯胰胱胲胳胴胵胶胷胸胹胺胻胼能胾胿脀脁脂脃脄脅脆脇脈脉脊脋脌脍脎脏脐
+脑脒脓脔脕脖脗脘脙脚脛脜脝脞脟脠脡脢脣脤脥脦脧脨脩脪脫脬脭脮脯脰脱脲脳脴脵脶脷脸
+脹脺脻脼脽脾脿腀腁腂腃腄腅腆腇腈腉腊腋腌腍腎腏腐腑腒腓腔腕腖腗腘腙腚腛腜腝腞腟腠
+腡腢腣腤腥腦腧腨腩腪腫腬腭腮腯腰腱腲腳腴腵腶腷腸腹腺腻腼腽腾腿膀膁膂膃膄膅膆膇膈
+膉膊膋膌膍膎膏膐膑膒膓膔膕膖膗膘膙膚膛膜膝膞膟膠膡膢膣膤膥膦膧膨膩膪膫膬膭膮膯膰
+膱膲膳膴膵膶膷膸膹膺膻膼膽膾膿臀臁臂臃臄臅臆臇臈臉臊臋臌臍臎臏臐臑臒臓臔臕臖臗臘
+臙臚臛臜臝臞臟臠臡臢臣臤臥臦臧臨臩自臫臬臭臮臯臰臱臲至致臵臶臷臸臹臺臻臼臽臾臿舀
+舁舂舃舄舅舆與興舉舊舋舌舍舎舏舐舑舒舓舔舕舖舗舘舙舚舛舜舝舞舟舠舡舢舣舤舥舦舧舨
+舩航舫般舭舮舯舰舱舲舳舴舵舶舷舸船舺舻舼舽舾舿艀艁艂艃艄艅艆艇艈艉艊艋艌艍艎艏艐
+艑艒艓艔艕艖艗艘艙艚艛艜艝艞艟艠艡艢艣艤艥艦艧艨艩艪艫艬艭艮良艰艱色艳艴艵艶艷艸
+艹艺艻艼艽艾艿芀芁节芃芄芅芆芇芈芉芊芋芌芍芎芏芐芑芒芓芔芕芖芗芘芙芚芛芜芝芞芟芠
+芡芢芣芤芥芦芧芨芩芪芫芬芭芮芯芰花芲芳芴芵芶芷芸芹芺芻芼芽芾芿苀苁苂苃苄苅苆苇苈
+苉苊苋苌苍苎苏苐苑苒苓苔苕苖苗苘苙苚苛苜苝苞苟苠苡苢苣苤若苦苧苨苩苪苫苬苭苮苯苰
+英苲苳苴苵苶苷苸苹苺苻苼苽苾苿茀茁茂范茄茅茆茇茈茉茊茋茌茍茎茏茐茑茒茓茔茕茖茗茘
+茙茚茛茜茝茞茟茠茡茢茣茤茥茦茧茨茩茪茫茬茭茮茯茰茱茲茳茴茵茶茷茸茹茺茻茼茽茾茿荀
+荁荂荃荄荅荆荇荈草荊荋荌荍荎荏荐荑荒荓荔荕荖荗荘荙荚荛荜荝荞荟荠荡荢荣荤荥荦荧荨
+荩荪荫荬荭荮药荰荱荲荳荴荵荶荷荸荹荺荻荼荽荾荿莀莁莂莃莄莅莆莇莈莉莊莋莌莍莎莏莐
+莑莒莓莔莕莖莗莘莙莚莛莜莝莞莟莠莡莢莣莤莥莦莧莨莩莪莫莬莭莮莯莰莱莲莳莴莵莶获莸
+莹莺莻莼莽莾莿菀菁菂菃菄菅菆菇菈菉菊菋菌菍菎菏菐菑菒菓菔菕菖菗菘菙菚菛菜菝菞菟菠
+菡菢菣菤菥菦菧菨菩菪菫菬菭菮華菰菱菲菳菴菵菶菷菸菹菺菻菼菽菾菿萀萁萂萃萄萅萆萇萈
+萉萊萋萌萍萎萏萐萑萒萓萔萕萖萗萘萙萚萛萜萝萞萟萠萡萢萣萤营萦萧萨萩萪萫萬萭萮萯萰
+萱萲萳萴萵萶萷萸萹萺萻萼落萾萿葀葁葂葃葄葅葆葇葈葉葊葋葌葍葎葏葐葑葒葓葔葕葖著葘
+葙葚葛葜葝葞葟葠葡葢董葤葥葦葧葨葩葪葫葬葭葮葯葰葱葲葳葴葵葶葷葸葹葺葻葼葽葾葿蒀
+蒁蒂蒃蒄蒅蒆蒇蒈蒉蒊蒋蒌蒍蒎蒏蒐蒑蒒蒓蒔蒕蒖蒗蒘蒙蒚蒛蒜蒝蒞蒟蒠蒡蒢蒣蒤蒥蒦蒧蒨
+蒩蒪蒫蒬蒭蒮蒯蒰蒱蒲蒳蒴蒵蒶蒷蒸蒹蒺蒻蒼蒽蒾蒿蓀蓁蓂蓃蓄蓅蓆蓇蓈蓉蓊蓋蓌蓍蓎蓏蓐
+蓑蓒蓓蓔蓕蓖蓗蓘蓙蓚蓛蓜蓝蓞蓟蓠蓡蓢蓣蓤蓥蓦蓧蓨蓩蓪蓫蓬蓭蓮蓯蓰蓱蓲蓳蓴蓵蓶蓷蓸
+蓹蓺蓻蓼蓽蓾蓿蔀蔁蔂蔃蔄蔅蔆蔇蔈蔉蔊蔋蔌蔍蔎蔏蔐蔑蔒蔓蔔蔕蔖蔗蔘蔙蔚蔛蔜蔝蔞蔟蔠
+蔡蔢蔣蔤蔥蔦蔧蔨蔩蔪蔫蔬蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔷蔸蔹蔺蔻蔼蔽蔾蔿蕀蕁蕂蕃蕄蕅蕆蕇蕈
+蕉蕊蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕蕖蕗蕘蕙蕚蕛蕜蕝蕞蕟蕠蕡蕢蕣蕤蕥蕦蕧蕨蕩蕪蕫蕬蕭蕮蕯蕰
+蕱蕲蕳蕴蕵蕶蕷蕸蕹蕺蕻蕼蕽蕾蕿薀薁薂薃薄薅薆薇薈薉薊薋薌薍薎薏薐薑薒薓薔薕薖薗薘
+薙薚薛薜薝薞薟薠薡薢薣薤薥薦薧薨薩薪薫薬薭薮薯薰薱薲薳薴薵薶薷薸薹薺薻薼薽薾薿藀
+藁藂藃藄藅藆藇藈藉藊藋藌藍藎藏藐藑藒藓藔藕藖藗藘藙藚藛藜藝藞藟藠藡藢藣藤藥藦藧藨
+藩藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸藹藺藻藼藽藾藿蘀蘁蘂蘃蘄蘅蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐
+蘑蘒蘓蘔蘕蘖蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘧蘨蘩蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘸
+蘹蘺蘻蘼蘽蘾蘿虀虁虂虃虄虅虆虇虈虉虊虋虌虍虎虏虐虑虒虓虔處虖虗虘虙虚虛虜虝虞號虠
+虡虢虣虤虥虦虧虨虩虪虫虬虭虮虯虰虱虲虳虴虵虶虷虸虹虺虻虼虽虾虿蚀蚁蚂蚃蚄蚅蚆蚇蚈
+蚉蚊蚋蚌蚍蚎蚏蚐蚑蚒蚓蚔蚕蚖蚗蚘蚙蚚蚛蚜蚝蚞蚟蚠蚡蚢蚣蚤蚥蚦蚧蚨蚩蚪蚫蚬蚭蚮蚯蚰
+蚱蚲蚳蚴蚵蚶蚷蚸蚹蚺蚻蚼蚽蚾蚿蛀蛁蛂蛃蛄蛅蛆蛇蛈蛉蛊蛋蛌蛍蛎蛏蛐蛑蛒蛓蛔蛕蛖蛗蛘
+蛙蛚蛛蛜蛝蛞蛟蛠蛡蛢蛣蛤蛥蛦蛧蛨蛩蛪蛫蛬蛭蛮蛯蛰蛱蛲蛳蛴蛵蛶蛷蛸蛹蛺蛻蛼蛽蛾蛿蜀
+蜁蜂蜃蜄蜅蜆蜇蜈蜉蜊蜋蜌蜍蜎蜏蜐蜑蜒蜓蜔蜕蜖蜗蜘蜙蜚蜛蜜蜝蜞蜟蜠蜡蜢蜣蜤蜥蜦蜧蜨
+蜩蜪蜫蜬蜭蜮蜯蜰蜱蜲蜳蜴蜵蜶蜷蜸蜹蜺蜻蜼蜽蜾蜿蝀蝁蝂蝃蝄蝅蝆蝇蝈蝉蝊蝋蝌蝍蝎蝏蝐
+蝑蝒蝓蝔蝕蝖蝗蝘蝙蝚蝛蝜蝝蝞蝟蝠蝡蝢蝣蝤蝥蝦蝧蝨蝩蝪蝫蝬蝭蝮蝯蝰蝱蝲蝳蝴蝵蝶蝷蝸
+蝹蝺蝻蝼蝽蝾蝿螀螁螂螃螄螅螆螇螈螉螊螋螌融螎螏螐螑螒螓螔螕螖螗螘螙螚螛螜螝螞螟螠
+螡螢螣螤螥螦螧螨螩螪螫螬螭螮螯螰螱螲螳螴螵螶螷螸螹螺螻螼螽螾螿蟀蟁蟂蟃蟄蟅蟆蟇蟈
+蟉蟊蟋蟌蟍蟎蟏蟐蟑蟒蟓蟔蟕蟖蟗蟘蟙蟚蟛蟜蟝蟞蟟蟠蟡蟢蟣蟤蟥蟦蟧蟨蟩蟪蟫蟬蟭蟮蟯蟰
+蟱蟲蟳蟴蟵蟶蟷蟸蟹蟺蟻蟼蟽蟾蟿蠀蠁蠂蠃蠄蠅蠆蠇蠈蠉蠊蠋蠌蠍蠎蠏蠐蠑蠒蠓蠔蠕蠖蠗蠘
+蠙蠚蠛蠜蠝蠞蠟蠠蠡蠢蠣蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠲蠳蠴蠵蠶蠷蠸蠹蠺蠻蠼蠽蠾蠿血
+衁衂衃衄衅衆衇衈衉衊衋行衍衎衏衐衑衒術衔衕衖街衘衙衚衛衜衝衞衟衠衡衢衣衤补衦衧表
+衩衪衫衬衭衮衯衰衱衲衳衴衵衶衷衸衹衺衻衼衽衾衿袀袁袂袃袄袅袆袇袈袉袊袋袌袍袎袏袐
+袑袒袓袔袕袖袗袘袙袚袛袜袝袞袟袠袡袢袣袤袥袦袧袨袩袪被袬袭袮袯袰袱袲袳袴袵袶袷袸
+袹袺袻袼袽袾袿裀裁裂裃裄装裆裇裈裉裊裋裌裍裎裏裐裑裒裓裔裕裖裗裘裙裚裛補裝裞裟裠
+裡裢裣裤裥裦裧裨裩裪裫裬裭裮裯裰裱裲裳裴裵裶裷裸裹裺裻裼製裾裿褀褁褂褃褄褅褆複褈
+褉褊褋褌褍褎褏褐褑褒褓褔褕褖褗褘褙褚褛褜褝褞褟褠褡褢褣褤褥褦褧褨褩褪褫褬褭褮褯褰
+褱褲褳褴褵褶褷褸褹褺褻褼褽褾褿襀襁襂襃襄襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘
+襙襚襛襜襝襞襟襠襡襢襣襤襥襦襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襻襼襽襾西覀
+要覂覃覄覅覆覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡覢覣覤覥覦覧覨
+覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀见观觃规觅视觇览觉觊觋觌觍觎觏觐
+觑角觓觔觕觖觗觘觙觚觛觜觝觞觟觠觡觢解觤觥触觧觨觩觪觫觬觭觮觯觰觱觲觳觴觵觶觷觸
+觹觺觻觼觽觾觿言訁訂訃訄訅訆訇計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝訞訟訠
+訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訾訿詀詁詂詃詄詅詆詇詈
+詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰
+話該詳詴詵詶詷詸詹詺詻詼詽詾詿誀誁誂誃誄誅誆誇誈誉誊誋誌認誎誏誐誑誒誓誔誕誖誗誘
+誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀
+諁諂諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣諤諥諦諧諨
+諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謇謈謉謊謋謌謍謎謏謐
+謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣謤謥謦謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸
+謹謺謻謼謽謾謿譀譁譂譃譄譅譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠
+譡譢譣譤譥警譧譨譩譪譫譬譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆讇讈
+讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讠计订讣认讥讦讧讨让讪讫讬训议讯记
+讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘
+诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀
+谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨
+谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷谸谹谺谻谼谽谾谿豀豁豂豃豄豅豆豇豈豉豊豋豌豍豎豏豐
+豑豒豓豔豕豖豗豘豙豚豛豜豝豞豟豠象豢豣豤豥豦豧豨豩豪豫豬豭豮豯豰豱豲豳豴豵豶豷豸
+豹豺豻豼豽豾豿貀貁貂貃貄貅貆貇貈貉貊貋貌貍貎貏貐貑貒貓貔貕貖貗貘貙貚貛貜貝貞貟負
+財貢貣貤貥貦貧貨販貪貫責貭貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈
+賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬賭賮賯賰
+賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍贎贏贐贑贒贓贔贕贖贗贘
+贙贚贛贜贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀
+赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赤赥赦赧赨
+赩赪赫赬赭赮赯走赱赲赳赴赵赶起赸赹赺赻赼赽赾赿趀趁趂趃趄超趆趇趈趉越趋趌趍趎趏趐
+趑趒趓趔趕趖趗趘趙趚趛趜趝趞趟趠趡趢趣趤趥趦趧趨趩趪趫趬趭趮趯趰趱趲足趴趵趶趷趸
+趹趺趻趼趽趾趿跀跁跂跃跄跅跆跇跈跉跊跋跌跍跎跏跐跑跒跓跔跕跖跗跘跙跚跛跜距跞跟跠
+跡跢跣跤跥跦跧跨跩跪跫跬跭跮路跰跱跲跳跴践跶跷跸跹跺跻跼跽跾跿踀踁踂踃踄踅踆踇踈
+踉踊踋踌踍踎踏踐踑踒踓踔踕踖踗踘踙踚踛踜踝踞踟踠踡踢踣踤踥踦踧踨踩踪踫踬踭踮踯踰
+踱踲踳踴踵踶踷踸踹踺踻踼踽踾踿蹀蹁蹂蹃蹄蹅蹆蹇蹈蹉蹊蹋蹌蹍蹎蹏蹐蹑蹒蹓蹔蹕蹖蹗蹘
+蹙蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹦蹧蹨蹩蹪蹫蹬蹭蹮蹯蹰蹱蹲蹳蹴蹵蹶蹷蹸蹹蹺蹻蹼蹽蹾蹿躀
+躁躂躃躄躅躆躇躈躉躊躋躌躍躎躏躐躑躒躓躔躕躖躗躘躙躚躛躜躝躞躟躠躡躢躣躤躥躦躧躨
+躩躪身躬躭躮躯躰躱躲躳躴躵躶躷躸躹躺躻躼躽躾躿軀軁軂軃軄軅軆軇軈軉車軋軌軍軎軏軐
+軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸
+軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠
+輡輢輣輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄轅轆轇轈
+轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥车轧轨轩轪轫转轭轮软轰
+轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘
+辙辚辛辜辝辞辟辠辡辢辣辤辥辦辧辨辩辪辫辬辭辮辯辰辱農辳辴辵辶辷辸边辺辻込辽达辿迀
+迁迂迃迄迅迆过迈迉迊迋迌迍迎迏运近迒迓返迕迖迗还这迚进远违连迟迠迡迢迣迤迥迦迧迨
+迩迪迫迬迭迮迯述迱迲迳迴迵迶迷迸迹迺迻迼追迾迿退送适逃逄逅逆逇逈选逊逋逌逍逎透逐
+逑递逓途逕逖逗逘這通逛逜逝逞速造逡逢連逤逥逦逧逨逩逪逫逬逭逮逯逰週進逳逴逵逶逷逸
+逹逺逻逼逽逾逿遀遁遂遃遄遅遆遇遈遉遊運遌遍過遏遐遑遒道達違遖遗遘遙遚遛遜遝遞遟遠
+遡遢遣遤遥遦遧遨適遪遫遬遭遮遯遰遱遲遳遴遵遶遷選遹遺遻遼遽遾避邀邁邂邃還邅邆邇邈
+邉邊邋邌邍邎邏邐邑邒邓邔邕邖邗邘邙邚邛邜邝邞邟邠邡邢那邤邥邦邧邨邩邪邫邬邭邮邯邰
+邱邲邳邴邵邶邷邸邹邺邻邼邽邾邿郀郁郂郃郄郅郆郇郈郉郊郋郌郍郎郏郐郑郒郓郔郕郖郗郘
+郙郚郛郜郝郞郟郠郡郢郣郤郥郦郧部郩郪郫郬郭郮郯郰郱郲郳郴郵郶郷郸郹郺郻郼都郾郿鄀
+鄁鄂鄃鄄鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄙鄚鄛鄜鄝鄞鄟鄠鄡鄢鄣鄤鄥鄦鄧鄨
+鄩鄪鄫鄬鄭鄮鄯鄰鄱鄲鄳鄴鄵鄶鄷鄸鄹鄺鄻鄼鄽鄾鄿酀酁酂酃酄酅酆酇酈酉酊酋酌配酎酏酐
+酑酒酓酔酕酖酗酘酙酚酛酜酝酞酟酠酡酢酣酤酥酦酧酨酩酪酫酬酭酮酯酰酱酲酳酴酵酶酷酸
+酹酺酻酼酽酾酿醀醁醂醃醄醅醆醇醈醉醊醋醌醍醎醏醐醑醒醓醔醕醖醗醘醙醚醛醜醝醞醟醠
+醡醢醣醤醥醦醧醨醩醪醫醬醭醮醯醰醱醲醳醴醵醶醷醸醹醺醻醼醽醾醿釀釁釂釃釄釅釆采釈
+釉释釋里重野量釐金釒釓釔釕釖釗釘釙釚釛釜針釞釟釠釡釢釣釤釥釦釧釨釩釪釫釬釭釮釯釰
+釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘
+鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀
+鉁鉂鉃鉄鉅鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨
+鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉴鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅銆銇銈銉銊銋銌銍銎銏銐
+銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧銨銩銪銫銬銭銮銯銰銱銲銳銴銵銶銷銸
+銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋈鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠
+鋡鋢鋣鋤鋥鋦鋧鋨鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈
+錉錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰
+錱録錳錴錵錶錷錸錹錺錻錼錽錾錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘
+鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍪鍫鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀
+鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎏鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨
+鎩鎪鎫鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏊鏋鏌鏍鏎鏏鏐
+鏑鏒鏓鏔鏕鏖鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸
+鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠
+鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐾鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈
+鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑫鑬鑭鑮鑯鑰
+鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘
+钙钚钛钜钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀
+铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨
+铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐
+锑锒锓锔锕锖锗锘错锚锛锜锝锞锟锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸
+锹锺锻锼锽锾锿镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟镠
+镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶長镸镹镺镻镼镽镾长門閁閂閃閄閅閆閇閈
+閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪閫閬閭閮閯閰
+閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋闌闍闎闏闐闑闒闓闔闕闖闗闘
+闙闚闛關闝闞闟闠闡闢闣闤闥闦闧门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀
+阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛阜阝阞队阠阡阢阣阤阥阦阧阨
+阩阪阫阬阭阮阯阰阱防阳阴阵阶阷阸阹阺阻阼阽阾阿陀陁陂陃附际陆陇陈陉陊陋陌降陎陏限
+陑陒陓陔陕陖陗陘陙陚陛陜陝陞陟陠陡院陣除陥陦陧陨险陪陫陬陭陮陯陰陱陲陳陴陵陶陷陸
+陹険陻陼陽陾陿隀隁隂隃隄隅隆隇隈隉隊隋隌隍階随隐隑隒隓隔隕隖隗隘隙隚際障隝隞隟隠
+隡隢隣隤隥隦隧隨隩險隫隬隭隮隯隰隱隲隳隴隵隶隷隸隹隺隻隼隽难隿雀雁雂雃雄雅集雇雈
+雉雊雋雌雍雎雏雐雑雒雓雔雕雖雗雘雙雚雛雜雝雞雟雠雡離難雤雥雦雧雨雩雪雫雬雭雮雯雰
+雱雲雳雴雵零雷雸雹雺電雼雽雾雿需霁霂霃霄霅霆震霈霉霊霋霌霍霎霏霐霑霒霓霔霕霖霗霘
+霙霚霛霜霝霞霟霠霡霢霣霤霥霦霧霨霩霪霫霬霭霮霯霰霱露霳霴霵霶霷霸霹霺霻霼霽霾霿靀
+靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑青靓靔靕靖靗靘静靚靛靜靝非靟靠靡面靣靤靥靦靧靨
+革靪靫靬靭靮靯靰靱靲靳靴靵靶靷靸靹靺靻靼靽靾靿鞀鞁鞂鞃鞄鞅鞆鞇鞈鞉鞊鞋鞌鞍鞎鞏鞐
+鞑鞒鞓鞔鞕鞖鞗鞘鞙鞚鞛鞜鞝鞞鞟鞠鞡鞢鞣鞤鞥鞦鞧鞨鞩鞪鞫鞬鞭鞮鞯鞰鞱鞲鞳鞴鞵鞶鞷鞸
+鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠
+韡韢韣韤韥韦韧韨韩韪韫韬韭韮韯韰韱韲音韴韵韶韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須
+頉頊頋頌頍頎頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰
+頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額顎顏顐顑顒顓顔顕顖顗願
+顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮顯顰顱顲顳顴页顶顷顸项顺须顼顽顾顿颀
+颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧風
+颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍风飏飐
+飑飒飓飔飕飖飗飘飙飚飛飜飝飞食飠飡飢飣飤飥飦飧飨飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸
+飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇餈餉養餋餌餍餎餏餐餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠
+餡餢餣餤餥餦餧館餩餪餫餬餭餮餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈
+饉饊饋饌饍饎饏饐饑饒饓饔饕饖饗饘饙饚饛饜饝饞饟饠饡饢饣饤饥饦饧饨饩饪饫饬饭饮饯饰
+饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕首馗馘
+香馚馛馜馝馞馟馠馡馢馣馤馥馦馧馨馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀
+駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨
+駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐
+騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸
+騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙驚驛驜驝驞驟驠
+驡驢驣驤驥驦驧驨驩驪驫马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈
+骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧骨骩骪骫骬骭骮骯骰
+骱骲骳骴骵骶骷骸骹骺骻骼骽骾骿髀髁髂髃髄髅髆髇髈髉髊髋髌髍髎髏髐髑髒髓體髕髖髗高
+髙髚髛髜髝髞髟髠髡髢髣髤髥髦髧髨髩髪髫髬髭髮髯髰髱髲髳髴髵髶髷髸髹髺髻髼髽髾髿鬀
+鬁鬂鬃鬄鬅鬆鬇鬈鬉鬊鬋鬌鬍鬎鬏鬐鬑鬒鬓鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬟鬠鬡鬢鬣鬤鬥鬦鬧鬨
+鬩鬪鬫鬬鬭鬮鬯鬰鬱鬲鬳鬴鬵鬶鬷鬸鬹鬺鬻鬼鬽鬾鬿魀魁魂魃魄魅魆魇魈魉魊魋魌魍魎魏魐
+魑魒魓魔魕魖魗魘魙魚魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸
+魹魺魻魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠
+鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈
+鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰
+鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘
+鰙鰚鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻鰼鰽鰾鰿鱀
+鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨
+鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺鱻鱼鱽鱾鱿鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐
+鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸
+鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳚鳛鳜鳝鳞鳟鳠
+鳡鳢鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈
+鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰
+鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘
+鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀
+鶁鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢鶣鶤鶥鶦鶧鶨
+鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐
+鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸
+鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸟鸠
+鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈
+鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰
+鹱鹲鹳鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽鹾鹿麀麁麂麃麄麅麆麇麈麉麊麋麌麍麎麏麐麑麒麓麔麕麖麗麘
+麙麚麛麜麝麞麟麠麡麢麣麤麥麦麧麨麩麪麫麬麭麮麯麰麱麲麳麴麵麶麷麸麹麺麻麼麽麾麿黀
+黁黂黃黄黅黆黇黈黉黊黋黌黍黎黏黐黑黒黓黔黕黖黗默黙黚黛黜黝點黟黠黡黢黣黤黥黦黧黨
+黩黪黫黬黭黮黯黰黱黲黳黴黵黶黷黸黹黺黻黼黽黾黿鼀鼁鼂鼃鼄鼅鼆鼇鼈鼉鼊鼋鼌鼍鼎鼏鼐
+鼑鼒鼓鼔鼕鼖鼗鼘鼙鼚鼛鼜鼝鼞鼟鼠鼡鼢鼣鼤鼥鼦鼧鼨鼩鼪鼫鼬鼭鼮鼯鼰鼱鼲鼳鼴鼵鼶鼷鼸
+鼹鼺鼻鼼鼽鼾鼿齀齁齂齃齄齅齆齇齈齉齊齋齌齍齎齏齐齑齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠
+齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸齹齺齻齼齽齾齿龀龁龂龃龄龅龆龇龈
+龉龊龋龌龍龎龏龐龑龒龓龔龕龖龗龘龙龚龛龜龝龞龟龠龡龢龣龤龥龦龧龨龩龪龫龬龭龮龯龰
+龱龲龳龴龵龶龷龸龹龺龻龼龽龾龿鿀鿁鿂鿃鿄鿅鿆鿇鿈鿉鿊鿋鿌鿍鿎鿏鿐鿑鿒鿓鿔鿕鿖鿗鿘
+鿙鿚鿛鿜鿝鿞鿟鿠鿡鿢鿣鿤鿥鿦鿧鿨鿩鿪鿫鿬鿭鿮鿯鿰鿱鿲鿳鿴鿵鿶鿷鿸鿹鿺鿻鿼鿽鿾鿿ꀀ
+ꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟꀠꀡꀢꀣꀤꀥꀦꀧꀨ
+ꀩꀪꀫꀬꀭꀮꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐ
+ꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝꁞꁟꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸ
+ꁹꁺꁻꁼꁽꁾꁿꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟꂠ
+ꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻꂼꂽꂾꂿꃀꃁꃂꃃꃄꃅꃆꃇꃈ
+ꃉꃊꃋꃌꃍꃎꃏꃐꃑꃒꃓꃔꃕꃖꃗꃘꃙꃚꃛꃜꃝꃞꃟꃠꃡꃢꃣꃤꃥꃦꃧꃨꃩꃪꃫꃬꃭꃮꃯꃰ
+ꃱꃲꃳꃴꃵꃶꃷꃸꃹꃺꃻꃼꃽꃾꃿꄀꄁꄂꄃꄄꄅꄆꄇꄈꄉꄊꄋꄌꄍꄎꄏꄐꄑꄒꄓꄔꄕꄖꄗꄘ
+ꄙꄚꄛꄜꄝꄞꄟꄠꄡꄢꄣꄤꄥꄦꄧꄨꄩꄪꄫꄬꄭꄮꄯꄰꄱꄲꄳꄴꄵꄶꄷꄸꄹꄺꄻꄼꄽꄾꄿꅀ
+ꅁꅂꅃꅄꅅꅆꅇꅈꅉꅊꅋꅌꅍꅎꅏꅐꅑꅒꅓꅔꅕꅖꅗꅘꅙꅚꅛꅜꅝꅞꅟꅠꅡꅢꅣꅤꅥꅦꅧꅨ
+ꅩꅪꅫꅬꅭꅮꅯꅰꅱꅲꅳꅴꅵꅶꅷꅸꅹꅺꅻꅼꅽꅾꅿꆀꆁꆂꆃꆄꆅꆆꆇꆈꆉꆊꆋꆌꆍꆎꆏꆐ
+ꆑꆒꆓꆔꆕꆖꆗꆘꆙꆚꆛꆜꆝꆞꆟꆠꆡꆢꆣꆤꆥꆦꆧꆨꆩꆪꆫꆬꆭꆮꆯꆰꆱꆲꆳꆴꆵꆶꆷꆸ
+ꆹꆺꆻꆼꆽꆾꆿꇀꇁꇂꇃꇄꇅꇆꇇꇈꇉꇊꇋꇌꇍꇎꇏꇐꇑꇒꇓꇔꇕꇖꇗꇘꇙꇚꇛꇜꇝꇞꇟꇠ
+ꇡꇢꇣꇤꇥꇦꇧꇨꇩꇪꇫꇬꇭꇮꇯꇰꇱꇲꇳꇴꇵꇶꇷꇸꇹꇺꇻꇼꇽꇾꇿꈀꈁꈂꈃꈄꈅꈆꈇꈈ
+ꈉꈊꈋꈌꈍꈎꈏꈐꈑꈒꈓꈔꈕꈖꈗꈘꈙꈚꈛꈜꈝꈞꈟꈠꈡꈢꈣꈤꈥꈦꈧꈨꈩꈪꈫꈬꈭꈮꈯꈰ
+ꈱꈲꈳꈴꈵꈶꈷꈸꈹꈺꈻꈼꈽꈾꈿꉀꉁꉂꉃꉄꉅꉆꉇꉈꉉꉊꉋꉌꉍꉎꉏꉐꉑꉒꉓꉔꉕꉖꉗꉘ
+ꉙꉚꉛꉜꉝꉞꉟꉠꉡꉢꉣꉤꉥꉦꉧꉨꉩꉪꉫꉬꉭꉮꉯꉰꉱꉲꉳꉴꉵꉶꉷꉸꉹꉺꉻꉼꉽꉾꉿꊀ
+ꊁꊂꊃꊄꊅꊆꊇꊈꊉꊊꊋꊌꊍꊎꊏꊐꊑꊒꊓꊔꊕꊖꊗꊘꊙꊚꊛꊜꊝꊞꊟꊠꊡꊢꊣꊤꊥꊦꊧꊨ
+ꊩꊪꊫꊬꊭꊮꊯꊰꊱꊲꊳꊴꊵꊶꊷꊸꊹꊺꊻꊼꊽꊾꊿꋀꋁꋂꋃꋄꋅꋆꋇꋈꋉꋊꋋꋌꋍꋎꋏꋐ
+ꋑꋒꋓꋔꋕꋖꋗꋘꋙꋚꋛꋜꋝꋞꋟꋠꋡꋢꋣꋤꋥꋦꋧꋨꋩꋪꋫꋬꋭꋮꋯꋰꋱꋲꋳꋴꋵꋶꋷꋸ
+ꋹꋺꋻꋼꋽꋾꋿꌀꌁꌂꌃꌄꌅꌆꌇꌈꌉꌊꌋꌌꌍꌎꌏꌐꌑꌒꌓꌔꌕꌖꌗꌘꌙꌚꌛꌜꌝꌞꌟꌠ
+ꌡꌢꌣꌤꌥꌦꌧꌨꌩꌪꌫꌬꌭꌮꌯꌰꌱꌲꌳꌴꌵꌶꌷꌸꌹꌺꌻꌼꌽꌾꌿꍀꍁꍂꍃꍄꍅꍆꍇꍈ
+ꍉꍊꍋꍌꍍꍎꍏꍐꍑꍒꍓꍔꍕꍖꍗꍘꍙꍚꍛꍜꍝꍞꍟꍠꍡꍢꍣꍤꍥꍦꍧꍨꍩꍪꍫꍬꍭꍮꍯꍰ
+ꍱꍲꍳꍴꍵꍶꍷꍸꍹꍺꍻꍼꍽꍾꍿꎀꎁꎂꎃꎄꎅꎆꎇꎈꎉꎊꎋꎌꎍꎎꎏꎐꎑꎒꎓꎔꎕꎖꎗꎘ
+ꎙꎚꎛꎜꎝꎞꎟꎠꎡꎢꎣꎤꎥꎦꎧꎨꎩꎪꎫꎬꎭꎮꎯꎰꎱꎲꎳꎴꎵꎶꎷꎸꎹꎺꎻꎼꎽꎾꎿꏀ
+ꏁꏂꏃꏄꏅꏆꏇꏈꏉꏊꏋꏌꏍꏎꏏꏐꏑꏒꏓꏔꏕꏖꏗꏘꏙꏚꏛꏜꏝꏞꏟꏠꏡꏢꏣꏤꏥꏦꏧꏨ
+ꏩꏪꏫꏬꏭꏮꏯꏰꏱꏲꏳꏴꏵꏶꏷꏸꏹꏺꏻꏼꏽꏾꏿꐀꐁꐂꐃꐄꐅꐆꐇꐈꐉꐊꐋꐌꐍꐎꐏꐐ
+ꐑꐒꐓꐔꐕꐖꐗꐘꐙꐚꐛꐜꐝꐞꐟꐠꐡꐢꐣꐤꐥꐦꐧꐨꐩꐪꐫꐬꐭꐮꐯꐰꐱꐲꐳꐴꐵꐶꐷꐸ
+ꐹꐺꐻꐼꐽꐾꐿꑀꑁꑂꑃꑄꑅꑆꑇꑈꑉꑊꑋꑌꑍꑎꑏꑐꑑꑒꑓꑔꑕꑖꑗꑘꑙꑚꑛꑜꑝꑞꑟꑠ
+ꑡꑢꑣꑤꑥꑦꑧꑨꑩꑪꑫꑬꑭꑮꑯꑰꑱꑲꑳꑴꑵꑶꑷꑸꑹꑺꑻꑼꑽꑾꑿꒀꒁꒂꒃꒄꒅꒆꒇꒈ
+ꒉꒊꒋꒌ꒍꒎꒏꒐꒑꒒꒓꒔꒕꒖꒗꒘꒙꒚꒛꒜꒝꒞꒟꒠꒡꒢꒣꒤꒥꒦꒧꒨꒩꒪꒫꒬꒭꒮꒯꒰
+꒱꒲꒳꒴꒵꒶꒷꒸꒹꒺꒻꒼꒽꒾꒿꓀꓁꓂꓃꓄꓅꓆꓇꓈꓉꓊꓋꓌꓍꓎꓏ꓐꓑꓒꓓꓔꓕꓖꓗꓘ
+ꓙꓚꓛꓜꓝꓞꓟꓠꓡꓢꓣꓤꓥꓦꓧꓨꓩꓪꓫꓬꓭꓮꓯꓰꓱꓲꓳꓴꓵꓶꓷꓸꓹꓺꓻꓼꓽ꓾꓿ꔀ
+ꔁꔂꔃꔄꔅꔆꔇꔈꔉꔊꔋꔌꔍꔎꔏꔐꔑꔒꔓꔔꔕꔖꔗꔘꔙꔚꔛꔜꔝꔞꔟꔠꔡꔢꔣꔤꔥꔦꔧꔨ
+ꔩꔪꔫꔬꔭꔮꔯꔰꔱꔲꔳꔴꔵꔶꔷꔸꔹꔺꔻꔼꔽꔾꔿꕀꕁꕂꕃꕄꕅꕆꕇꕈꕉꕊꕋꕌꕍꕎꕏꕐ
+ꕑꕒꕓꕔꕕꕖꕗꕘꕙꕚꕛꕜꕝꕞꕟꕠꕡꕢꕣꕤꕥꕦꕧꕨꕩꕪꕫꕬꕭꕮꕯꕰꕱꕲꕳꕴꕵꕶꕷꕸ
+ꕹꕺꕻꕼꕽꕾꕿꖀꖁꖂꖃꖄꖅꖆꖇꖈꖉꖊꖋꖌꖍꖎꖏꖐꖑꖒꖓꖔꖕꖖꖗꖘꖙꖚꖛꖜꖝꖞꖟꖠ
+ꖡꖢꖣꖤꖥꖦꖧꖨꖩꖪꖫꖬꖭꖮꖯꖰꖱꖲꖳꖴꖵꖶꖷꖸꖹꖺꖻꖼꖽꖾꖿꗀꗁꗂꗃꗄꗅꗆꗇꗈ
+ꗉꗊꗋꗌꗍꗎꗏꗐꗑꗒꗓꗔꗕꗖꗗꗘꗙꗚꗛꗜꗝꗞꗟꗠꗡꗢꗣꗤꗥꗦꗧꗨꗩꗪꗫꗬꗭꗮꗯꗰ
+ꗱꗲꗳꗴꗵꗶꗷꗸꗹꗺꗻꗼꗽꗾꗿꘀꘁꘂꘃꘄꘅꘆꘇꘈꘉꘊꘋꘌ꘍꘎꘏ꘐꘑꘒꘓꘔꘕꘖꘗꘘ
+ꘙꘚꘛꘜꘝꘞꘟ꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩ꘪꘫ꘬꘭꘮꘯꘰꘱꘲꘳꘴꘵꘶꘷꘸꘹꘺꘻꘼꘽꘾꘿Ꙁ
+ꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙠꙡꙢꙣꙤꙥꙦꙧꙨ
+ꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐ
+ꚑꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚞꚟꚠꚡꚢꚣꚤꚥꚦꚧꚨꚩꚪꚫꚬꚭꚮꚯꚰꚱꚲꚳꚴꚵꚶꚷꚸ
+ꚹꚺꚻꚼꚽꚾꚿꛀꛁꛂꛃꛄꛅꛆꛇꛈꛉꛊꛋꛌꛍꛎꛏꛐꛑꛒꛓꛔꛕꛖꛗꛘꛙꛚꛛꛜꛝꛞꛟꛠ
+ꛡꛢꛣꛤꛥꛦꛧꛨꛩꛪꛫꛬꛭꛮꛯ꛰꛱꛲꛳꛴꛵꛶꛷꛸꛹꛺꛻꛼꛽꛾꛿꜀꜁꜂꜃꜄꜅꜆꜇꜈
+꜉꜊꜋꜌꜍꜎꜏꜐꜑꜒꜓꜔꜕꜖ꜗꜘꜙꜚꜛꜜꜝꜞꜟ꜠꜡ꜢꜣꜤꜥꜦꜧꜨꜩꜪꜫꜬꜭꜮꜯꜰ
+ꜱꜲꜳꜴꜵꜶꜷꜸꜹꜺꜻꜼꜽꜾꜿꝀꝁꝂꝃꝄꝅꝆꝇꝈꝉꝊꝋꝌꝍꝎꝏꝐꝑꝒꝓꝔꝕꝖꝗꝘ
+ꝙꝚꝛꝜꝝꝞꝟꝠꝡꝢꝣꝤꝥꝦꝧꝨꝩꝪꝫꝬꝭꝮꝯꝰꝱꝲꝳꝴꝵꝶꝷꝸꝹꝺꝻꝼꝽꝾꝿꞀ
+ꞁꞂꞃꞄꞅꞆꞇꞈ꞉꞊ꞋꞌꞍꞎꞏꞐꞑꞒꞓꞔꞕꞖꞗꞘꞙꞚꞛꞜꞝꞞꞟꞠꞡꞢꞣꞤꞥꞦꞧꞨ
+ꞩꞪꞫꞬꞭꞮꞯꞰꞱꞲꞳꞴꞵꞶꞷꞸꞹꞺꞻꞼꞽꞾꞿꟀꟁꟂꟃꟄꟅꟆꟇꟈꟉꟊꟋꟌꟍ꟎꟏Ꟑ
+ꟑ꟒ꟓ꟔ꟕꟖꟗꟘꟙꟚꟛꟜ꟝꟞꟟꟠꟡꟢꟣꟤꟥꟦꟧꟨꟩꟪꟫꟬꟭꟮꟯꟰꟱ꟲꟳꟴꟵꟶꟷꟸ
+ꟹꟺꟻꟼꟽꟾꟿꠀꠁꠂꠃꠄꠅ꠆ꠇꠈꠉꠊꠋꠌꠍꠎꠏꠐꠑꠒꠓꠔꠕꠖꠗꠘꠙꠚꠛꠜꠝꠞꠟꠠ
+ꠡꠢꠣꠤꠥꠦꠧ꠨꠩꠪꠫꠬꠭꠮꠯꠰꠱꠲꠳꠴꠵꠶꠷꠸꠹꠺꠻꠼꠽꠾꠿ꡀꡁꡂꡃꡄꡅꡆꡇꡈ
+ꡉꡊꡋꡌꡍꡎꡏꡐꡑꡒꡓꡔꡕꡖꡗꡘꡙꡚꡛꡜꡝꡞꡟꡠꡡꡢꡣꡤꡥꡦꡧꡨꡩꡪꡫꡬꡭꡮꡯꡰ
+ꡱꡲꡳ꡴꡵꡶꡷꡸꡹꡺꡻꡼꡽꡾꡿ꢀꢁꢂꢃꢄꢅꢆꢇꢈꢉꢊꢋꢌꢍꢎꢏꢐꢑꢒꢓꢔꢕꢖꢗꢘ
+ꢙꢚꢛꢜꢝꢞꢟꢠꢡꢢꢣꢤꢥꢦꢧꢨꢩꢪꢫꢬꢭꢮꢯꢰꢱꢲꢳꢴꢵꢶꢷꢸꢹꢺꢻꢼꢽꢾꢿꣀ
+ꣁꣂꣃ꣄ꣅ꣆꣇꣈꣉꣊꣋꣌꣍꣎꣏꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꣚꣛꣜꣝꣞꣟꣠꣡꣢꣣꣤꣥꣦꣧꣨
+꣩꣪꣫꣬꣭꣮꣯꣰꣱ꣲꣳꣴꣵꣶꣷ꣸꣹꣺ꣻ꣼ꣽꣾꣿ꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉ꤊꤋꤌꤍꤎꤏꤐ
+ꤑꤒꤓꤔꤕꤖꤗꤘꤙꤚꤛꤜꤝꤞꤟꤠꤡꤢꤣꤤꤥꤦꤧꤨꤩꤪ꤫꤬꤭꤮꤯ꤰꤱꤲꤳꤴꤵꤶꤷꤸ
+ꤹꤺꤻꤼꤽꤾꤿꥀꥁꥂꥃꥄꥅꥆꥇꥈꥉꥊꥋꥌꥍꥎꥏꥐꥑꥒ꥓꥔꥕꥖꥗꥘꥙꥚꥛꥜꥝꥞꥟ꥠ
+ꥡꥢꥣꥤꥥꥦꥧꥨꥩꥪꥫꥬꥭꥮꥯꥰꥱꥲꥳꥴꥵꥶꥷꥸꥹꥺꥻꥼ꥽꥾꥿ꦀꦁꦂꦃꦄꦅꦆꦇꦈ
+ꦉꦊꦋꦌꦍꦎꦏꦐꦑꦒꦓꦔꦕꦖꦗꦘꦙꦚꦛꦜꦝꦞꦟꦠꦡꦢꦣꦤꦥꦦꦧꦨꦩꦪꦫꦬꦭꦮꦯꦰ
+ꦱꦲ꦳ꦴꦵꦶꦷꦸꦹꦺꦻꦼꦽꦾꦿ꧀꧁꧂꧃꧄꧅꧆꧇꧈꧉꧊꧋꧌꧍꧎ꧏ꧐꧑꧒꧓꧔꧕꧖꧗꧘
+꧙꧚꧛꧜꧝꧞꧟ꧠꧡꧢꧣꧤꧥꧦꧧꧨꧩꧪꧫꧬꧭꧮꧯ꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹ꧺꧻꧼꧽꧾ꧿ꨀ
+ꨁꨂꨃꨄꨅꨆꨇꨈꨉꨊꨋꨌꨍꨎꨏꨐꨑꨒꨓꨔꨕꨖꨗꨘꨙꨚꨛꨜꨝꨞꨟꨠꨡꨢꨣꨤꨥꨦꨧꨨ
+ꨩꨪꨫꨬꨭꨮꨯꨰꨱꨲꨳꨴꨵꨶ꨷꨸꨹꨺꨻꨼꨽꨾꨿ꩀꩁꩂꩃꩄꩅꩆꩇꩈꩉꩊꩋꩌꩍ꩎꩏꩐
+꩑꩒꩓꩔꩕꩖꩗꩘꩙꩚꩛꩜꩝꩞꩟ꩠꩡꩢꩣꩤꩥꩦꩧꩨꩩꩪꩫꩬꩭꩮꩯꩰꩱꩲꩳꩴꩵꩶ꩷꩸
+꩹ꩺꩻꩼꩽꩾꩿꪀꪁꪂꪃꪄꪅꪆꪇꪈꪉꪊꪋꪌꪍꪎꪏꪐꪑꪒꪓꪔꪕꪖꪗꪘꪙꪚꪛꪜꪝꪞꪟꪠ
+ꪡꪢꪣꪤꪥꪦꪧꪨꪩꪪꪫꪬꪭꪮꪯꪰꪱꪴꪲꪳꪵꪶꪷꪸꪹꪺꪻꪼꪽꪾ꪿ꫀ꫁ꫂ꫃꫄꫅꫆꫇꫈
+꫉꫊꫋꫌꫍꫎꫏꫐꫑꫒꫓꫔꫕꫖꫗꫘꫙꫚ꫛꫜꫝ꫞꫟ꫠꫡꫢꫣꫤꫥꫦꫧꫨꫩꫪꫫꫬꫭꫮꫯ꫰
+꫱ꫲꫳꫴꫵ꫶꫷꫸꫹꫺꫻꫼꫽꫾꫿꬀ꬁꬂꬃꬄꬅꬆ꬇꬈ꬉꬊꬋꬌꬍꬎ꬏꬐ꬑꬒꬓꬔꬕꬖ꬗꬘
+꬙꬚꬛꬜꬝꬞꬟ꬠꬡꬢꬣꬤꬥꬦ꬧ꬨꬩꬪꬫꬬꬭꬮ꬯ꬰꬱꬲꬳꬴꬵꬶꬷꬸꬹꬺꬻꬼꬽꬾꬿꭀ
+ꭁꭂꭃꭄꭅꭆꭇꭈꭉꭊꭋꭌꭍꭎꭏꭐꭑꭒꭓꭔꭕꭖꭗꭘꭙꭚ꭛ꭜꭝꭞꭟꭠꭡꭢꭣꭤꭥꭦꭧꭨ
+ꭩ꭪꭫꭬꭭꭮꭯ꭰꭱꭲꭳꭴꭵꭶꭷꭸꭹꭺꭻꭼꭽꭾꭿꮀꮁꮂꮃꮄꮅꮆꮇꮈꮉꮊꮋꮌꮍꮎꮏꮐ
+ꮑꮒꮓꮔꮕꮖꮗꮘꮙꮚꮛꮜꮝꮞꮟꮠꮡꮢꮣꮤꮥꮦꮧꮨꮩꮪꮫꮬꮭꮮꮯꮰꮱꮲꮳꮴꮵꮶꮷꮸ
+ꮹꮺꮻꮼꮽꮾꮿꯀꯁꯂꯃꯄꯅꯆꯇꯈꯉꯊꯋꯌꯍꯎꯏꯐꯑꯒꯓꯔꯕꯖꯗꯘꯙꯚꯛꯜꯝꯞꯟꯠ
+ꯡꯢꯣꯤꯥꯦꯧꯨꯩꯪ꯫꯬꯭꯮꯯꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹꯺꯻꯼꯽꯾꯿가각갂갃간갅갆갇갈
+갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰
+갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘
+걙걚걛걜걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯거걱걲걳건걵걶걷걸걹걺걻걼걽걾걿검
+겁겂것겄겅겆겇겈겉겊겋게겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟겠겡겢겣겤겥겦겧겨
+격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿곀곁곂곃계곅곆곇곈곉곊곋곌곍곎곏곐
+곑곒곓곔곕곖곗곘곙곚곛곜곝곞곟고곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸
+곹곺곻과곽곾곿관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔괕괖괗괘괙괚괛괜괝괞괟괠
+괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰괱괲괳괴괵괶괷괸괹괺괻괼괽괾괿굀굁굂굃굄굅굆굇굈
+굉굊굋굌굍굎굏교굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟굠굡굢굣굤굥굦굧굨굩굪굫구국굮굯군
+굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿궀궁궂궃궄궅궆궇궈궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘
+궙궚궛궜궝궞궟궠궡궢궣궤궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼궽궾궿귀
+귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘귙귚귛규귝귞귟균귡귢귣귤귥귦귧귨
+귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷그극귺귻근귽귾귿글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐
+긑긒긓긔긕긖긗긘긙긚긛긜긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯기긱긲긳긴긵긶긷길
+긹긺긻긼긽긾긿김깁깂깃깄깅깆깇깈깉깊깋까깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟깠
+깡깢깣깤깥깦깧깨깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿꺀꺁꺂꺃꺄꺅꺆꺇꺈
+꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰
+꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺼꺽꺾꺿껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔껕껖껗께
+껙껚껛껜껝껞껟껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰껱껲껳껴껵껶껷껸껹껺껻껼껽껾껿꼀
+꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌꼍꼎꼏꼐꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣꼤꼥꼦꼧꼨
+꼩꼪꼫꼬꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿꽀꽁꽂꽃꽄꽅꽆꽇꽈꽉꽊꽋꽌꽍꽎꽏꽐
+꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟꽠꽡꽢꽣꽤꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸
+꽹꽺꽻꽼꽽꽾꽿꾀꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘꾙꾚꾛꾜꾝꾞꾟꾠
+꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾸꾹꾺꾻꾼꾽꾾꾿꿀꿁꿂꿃꿄꿅꿆꿇꿈
+꿉꿊꿋꿌꿍꿎꿏꿐꿑꿒꿓꿔꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬꿭꿮꿯꿰
+꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿뀀뀁뀂뀃뀄뀅뀆뀇뀈뀉뀊뀋뀌뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘
+뀙뀚뀛뀜뀝뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀨뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀
+끁끂끃끄끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜끝끞끟끠끡끢끣끤끥끦끧끨
+끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끼끽끾끿낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐
+낑낒낓낔낕낖낗나낙낚낛난낝낞낟날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰낱낲낳내낵낶낷낸
+낹낺낻낼낽낾낿냀냁냂냃냄냅냆냇냈냉냊냋냌냍냎냏냐냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟냠
+냡냢냣냤냥냦냧냨냩냪냫냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇너
+넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟넠넡넢넣네넥넦넧넨넩넪넫넬넭넮넯넰
+넱넲넳넴넵넶넷넸넹넺넻넼넽넾넿녀녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘
+녙녚녛녜녝녞녟녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷노녹녺녻논녽녾녿놀
+놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐놑높놓놔놕놖놗놘놙놚놛놜놝놞놟놠놡놢놣놤놥놦놧놨
+놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇌뇍뇎뇏뇐
+뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟뇠뇡뇢뇣뇤뇥뇦뇧뇨뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸
+뇹뇺뇻뇼뇽뇾뇿눀눁눂눃누눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜눝눞눟눠
+눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸눹눺눻눼눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈
+뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉘뉙뉚뉛뉜뉝뉞뉟뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰
+뉱뉲뉳뉴뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿늀늁늂늃늄늅늆늇늈늉늊늋늌늍늎늏느늑늒늓는늕늖늗늘
+늙늚늛늜늝늞늟늠늡늢늣늤능늦늧늨늩늪늫늬늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿닀
+닁닂닃닄닅닆닇니닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟닠닡닢닣다닥닦닧단
+닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼닽닾닿대댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐
+댑댒댓댔댕댖댗댘댙댚댛댜댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸
+댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓더덕덖덗던덙덚덛덜덝덞덟덠
+덡덢덣덤덥덦덧덨덩덪덫덬덭덮덯데덱덲덳덴덵덶덷델덹덺덻덼덽덾덿뎀뎁뎂뎃뎄뎅뎆뎇뎈
+뎉뎊뎋뎌뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎠뎡뎢뎣뎤뎥뎦뎧뎨뎩뎪뎫뎬뎭뎮뎯뎰
+뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃도독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘
+동돚돛돜돝돞돟돠돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돼돽돾돿됀
+됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔됕됖됗되됙됚됛된됝됞됟될됡됢됣됤됥됦됧됨
+됩됪됫됬됭됮됯됰됱됲됳됴됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄둅둆둇둈둉둊둋둌둍둎둏두
+둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟둠둡둢둣둤둥둦둧둨둩둪둫둬둭둮둯둰둱둲둳둴둵둶둷둸
+둹둺둻둼둽둾둿뒀뒁뒂뒃뒄뒅뒆뒇뒈뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟뒠
+뒡뒢뒣뒤뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼뒽뒾뒿듀듁듂듃듄듅듆듇듈
+듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘듙듚듛드득듞듟든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰
+등듲듳듴듵듶듷듸듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓디딕딖딗딘
+딙딚딛딜딝딞딟딠딡딢딣딤딥딦딧딨딩딪딫딬딭딮딯따딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿땀
+땁땂땃땄땅땆땇땈땉땊땋때땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟땠땡땢땣땤땥땦땧땨
+땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐
+떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떠떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸
+떹떺떻떼떽떾떿뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔뗕뗖뗗뗘뗙뗚뗛뗜뗝뗞뗟뗠
+뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿똀똁똂똃똄똅똆똇똈
+똉똊똋똌똍똎똏또똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟똠똡똢똣똤똥똦똧똨똩똪똫똬똭똮똯똰
+똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙈뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘
+뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙤뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀
+뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚜뚝뚞뚟뚠뚡뚢뚣뚤뚥뚦뚧뚨
+뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐
+뛑뛒뛓뛔뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛰뛱뛲뛳뛴뛵뛶뛷뛸
+뛹뛺뛻뛼뛽뛾뛿뜀뜁뜂뜃뜄뜅뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠
+뜡뜢뜣뜤뜥뜦뜧뜨뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿띀띁띂띃띄띅띆띇띈
+띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜띝띞띟띠띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰
+띱띲띳띴띵띶띷띸띹띺띻라락띾띿란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔랕랖랗래
+랙랚랛랜랝랞랟랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰랱랲랳랴략랶랷랸랹랺랻랼랽랾랿럀
+럁럂럃럄럅럆럇럈량럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟럠럡럢럣럤럥럦럧럨
+럩럪럫러럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿렀렁렂렃렄렅렆렇레렉렊렋렌렍렎렏렐
+렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟렠렡렢렣려력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸
+령렺렻렼렽렾렿례롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘롙롚롛로록롞롟론
+롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴롵롶롷롸롹롺롻롼롽롾롿뢀뢁뢂뢃뢄뢅뢆뢇뢈
+뢉뢊뢋뢌뢍뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬뢭뢮뢯뢰
+뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿룀룁룂룃룄룅룆룇룈룉룊룋료룍룎룏룐룑룒룓룔룕룖룗룘
+룙룚룛룜룝룞룟룠룡룢룣룤룥룦룧루룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿뤀
+뤁뤂뤃뤄뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜뤝뤞뤟뤠뤡뤢뤣뤤뤥뤦뤧뤨
+뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤼뤽뤾뤿륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐
+륑륒륓륔륕륖륗류륙륚륛륜륝륞륟률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰륱륲륳르륵륶륷른
+륹륺륻를륽륾륿릀릁릂릃름릅릆릇릈릉릊릋릌릍릎릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟릠
+릡릢릣릤릥릦릧릨릩릪릫리릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿맀링맂맃맄맅맆맇마
+막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟맠맡맢맣매맥맦맧맨맩맪맫맬맭맮맯맰
+맱맲맳맴맵맶맷맸맹맺맻맼맽맾맿먀먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘
+먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷머먹먺먻먼먽먾먿멀
+멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐멑멒멓메멕멖멗멘멙멚멛멜멝멞멟멠멡멢멣멤멥멦멧멨
+멩멪멫멬멭멮멯며멱멲멳면멵멶멷멸멹멺멻멼멽멾멿몀몁몂몃몄명몆몇몈몉몊몋몌몍몎몏몐
+몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧모목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸
+몹몺못몼몽몾몿뫀뫁뫂뫃뫄뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜뫝뫞뫟뫠
+뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫼뫽뫾뫿묀묁묂묃묄묅묆묇묈
+묉묊묋묌묍묎묏묐묑묒묓묔묕묖묗묘묙묚묛묜묝묞묟묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰
+묱묲묳무묵묶묷문묹묺묻물묽묾묿뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌뭍뭎뭏뭐뭑뭒뭓뭔뭕뭖뭗뭘
+뭙뭚뭛뭜뭝뭞뭟뭠뭡뭢뭣뭤뭥뭦뭧뭨뭩뭪뭫뭬뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀
+뮁뮂뮃뮄뮅뮆뮇뮈뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮤뮥뮦뮧뮨
+뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼뮽뮾뮿므믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐
+믑믒믓믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷미
+믹믺믻민믽믾믿밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐밑밒밓바박밖밗반밙밚받발밝밞밟밠
+밡밢밣밤밥밦밧밨방밪밫밬밭밮밯배백밲밳밴밵밶밷밸밹밺밻밼밽밾밿뱀뱁뱂뱃뱄뱅뱆뱇뱈
+뱉뱊뱋뱌뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰
+뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃버벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘
+벙벚벛벜벝벞벟베벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸벹벺벻벼벽벾벿변
+볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔볕볖볗볘볙볚볛볜볝볞볟볠볡볢볣볤볥볦볧볨
+볩볪볫볬볭볮볯볰볱볲볳보복볶볷본볹볺볻볼볽볾볿봀봁봂봃봄봅봆봇봈봉봊봋봌봍봎봏봐
+봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟봠봡봢봣봤봥봦봧봨봩봪봫봬봭봮봯봰봱봲봳봴봵봶봷봸
+봹봺봻봼봽봾봿뵀뵁뵂뵃뵄뵅뵆뵇뵈뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟뵠
+뵡뵢뵣뵤뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿부북붂붃분붅붆붇불
+붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘붙붚붛붜붝붞붟붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰
+붱붲붳붴붵붶붷붸붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑뷒뷓뷔뷕뷖뷗뷘
+뷙뷚뷛뷜뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬뷭뷮뷯뷰뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿븀
+븁븂븃븄븅븆븇븈븉븊븋브븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟븠븡븢븣븤븥븦븧븨
+븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃비빅빆빇빈빉빊빋빌빍빎빏빐
+빑빒빓빔빕빖빗빘빙빚빛빜빝빞빟빠빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸
+빹빺빻빼빽빾빿뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔뺕뺖뺗뺘뺙뺚뺛뺜뺝뺞뺟뺠
+뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈
+뻉뻊뻋뻌뻍뻎뻏뻐뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟뻠뻡뻢뻣뻤뻥뻦뻧뻨뻩뻪뻫뻬뻭뻮뻯뻰
+뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼁뼂뼃뼄뼅뼆뼇뼈뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘
+뼙뼚뼛뼜뼝뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽀
+뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨
+뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐
+뾑뾒뾓뾔뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾰뾱뾲뾳뾴뾵뾶뾷뾸
+뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿅뿆뿇뿈뿉뿊뿋뿌뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟뿠
+뿡뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈
+쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰
+쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀼쀽쀾쀿쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔쁕쁖쁗쁘
+쁙쁚쁛쁜쁝쁞쁟쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿삀
+삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삐삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟삠삡삢삣삤삥삦삧삨
+삩삪삫사삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿샀상샂샃샄샅샆샇새색샊샋샌샍샎샏샐
+샑샒샓샔샕샖샗샘샙샚샛샜생샞샟샠샡샢샣샤샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸
+샹샺샻샼샽샾샿섀섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘섙섚섛서석섞섟선
+섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴섵섶섷세섹섺섻센섽섾섿셀셁셂셃셄셅셆셇셈
+셉셊셋셌셍셎셏셐셑셒셓셔셕셖셗션셙셚셛셜셝셞셟셠셡셢셣셤셥셦셧셨셩셪셫셬셭셮셯셰
+셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿솀솁솂솃솄솅솆솇솈솉솊솋소속솎솏손솑솒솓솔솕솖솗솘
+솙솚솛솜솝솞솟솠송솢솣솤솥솦솧솨솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿쇀
+쇁쇂쇃쇄쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜쇝쇞쇟쇠쇡쇢쇣쇤쇥쇦쇧쇨
+쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸쇹쇺쇻쇼쇽쇾쇿숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐
+숑숒숓숔숕숖숗수숙숚숛순숝숞숟술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰숱숲숳숴숵숶숷숸
+숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌쉍쉎쉏쉐쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟쉠
+쉡쉢쉣쉤쉥쉦쉧쉨쉩쉪쉫쉬쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿슀슁슂슃슄슅슆슇슈
+슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟슠슡슢슣스슥슦슧슨슩슪슫슬슭슮슯슰
+슱슲슳슴습슶슷슸승슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘
+싙싚싛시식싞싟신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴싵싶싷싸싹싺싻싼싽싾싿쌀
+쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐쌑쌒쌓쌔쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟쌠쌡쌢쌣쌤쌥쌦쌧쌨
+쌩쌪쌫쌬쌭쌮쌯쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썅썆썇썈썉썊썋썌썍썎썏썐
+썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧써썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸
+썹썺썻썼썽썾썿쎀쎁쎂쎃쎄쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠
+쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏀쏁쏂쏃쏄쏅쏆쏇쏈
+쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏘쏙쏚쏛쏜쏝쏞쏟쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰
+쏱쏲쏳쏴쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌쐍쐎쐏쐐쐑쐒쐓쐔쐕쐖쐗쐘
+쐙쐚쐛쐜쐝쐞쐟쐠쐡쐢쐣쐤쐥쐦쐧쐨쐩쐪쐫쐬쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿쑀
+쑁쑂쑃쑄쑅쑆쑇쑈쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑤쑥쑦쑧쑨
+쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼쑽쑾쑿쒀쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐
+쒑쒒쒓쒔쒕쒖쒗쒘쒙쒚쒛쒜쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒸
+쒹쒺쒻쒼쒽쒾쒿쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟쓠
+쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬쓭쓮쓯쓰쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿씀씁씂씃씄씅씆씇씈
+씉씊씋씌씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟씠씡씢씣씤씥씦씧씨씩씪씫씬씭씮씯씰
+씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿앀앁앂앃아악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았
+앙앚앛앜앝앞앟애액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸앹앺앻야약앾앿얀
+얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔얕얖얗얘얙얚얛얜얝얞얟얠얡얢얣얤얥얦얧얨
+얩얪얫얬얭얮얯얰얱얲얳어억얶얷언얹얺얻얼얽얾얿엀엁엂엃엄업없엇었엉엊엋엌엍엎엏에
+엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟엠엡엢엣엤엥엦엧엨엩엪엫여역엮엯연엱엲엳열엵엶엷엸
+엹엺엻염엽엾엿였영옂옃옄옅옆옇예옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟옠
+옡옢옣오옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼옽옾옿와왁왂왃완왅왆왇왈
+왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘왙왚왛왜왝왞왟왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰
+왱왲왳왴왵왶왷외왹왺왻왼왽왾왿욀욁욂욃욄욅욆욇욈욉욊욋욌욍욎욏욐욑욒욓요욕욖욗욘
+욙욚욛욜욝욞욟욠욡욢욣욤욥욦욧욨용욪욫욬욭욮욯우욱욲욳운욵욶욷울욹욺욻욼욽욾욿움
+웁웂웃웄웅웆웇웈웉웊웋워웍웎웏원웑웒웓월웕웖웗웘웙웚웛웜웝웞웟웠웡웢웣웤웥웦웧웨
+웩웪웫웬웭웮웯웰웱웲웳웴웵웶웷웸웹웺웻웼웽웾웿윀윁윂윃위윅윆윇윈윉윊윋윌윍윎윏윐
+윑윒윓윔윕윖윗윘윙윚윛윜윝윞윟유육윢윣윤윥윦윧율윩윪윫윬윭윮윯윰윱윲윳윴융윶윷윸
+윹윺윻으윽윾윿은읁읂읃을읅읆읇읈읉읊읋음읍읎읏읐응읒읓읔읕읖읗의읙읚읛읜읝읞읟읠
+읡읢읣읤읥읦읧읨읩읪읫읬읭읮읯읰읱읲읳이익읶읷인읹읺읻일읽읾읿잀잁잂잃임입잆잇있
+잉잊잋잌잍잎잏자작잒잓잔잕잖잗잘잙잚잛잜잝잞잟잠잡잢잣잤장잦잧잨잩잪잫재잭잮잯잰
+잱잲잳잴잵잶잷잸잹잺잻잼잽잾잿쟀쟁쟂쟃쟄쟅쟆쟇쟈쟉쟊쟋쟌쟍쟎쟏쟐쟑쟒쟓쟔쟕쟖쟗쟘
+쟙쟚쟛쟜쟝쟞쟟쟠쟡쟢쟣쟤쟥쟦쟧쟨쟩쟪쟫쟬쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼쟽쟾쟿저
+적젂젃전젅젆젇절젉젊젋젌젍젎젏점접젒젓젔정젖젗젘젙젚젛제젝젞젟젠젡젢젣젤젥젦젧젨
+젩젪젫젬젭젮젯젰젱젲젳젴젵젶젷져젹젺젻젼젽젾젿졀졁졂졃졄졅졆졇졈졉졊졋졌졍졎졏졐
+졑졒졓졔졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯조족졲졳존졵졶졷졸
+졹졺졻졼졽졾졿좀좁좂좃좄종좆좇좈좉좊좋좌좍좎좏좐좑좒좓좔좕좖좗좘좙좚좛좜좝좞좟좠
+좡좢좣좤좥좦좧좨좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좼좽좾좿죀죁죂죃죄죅죆죇죈
+죉죊죋죌죍죎죏죐죑죒죓죔죕죖죗죘죙죚죛죜죝죞죟죠죡죢죣죤죥죦죧죨죩죪죫죬죭죮죯죰
+죱죲죳죴죵죶죷죸죹죺죻주죽죾죿준줁줂줃줄줅줆줇줈줉줊줋줌줍줎줏줐중줒줓줔줕줖줗줘
+줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫줬줭줮줯줰줱줲줳줴줵줶줷줸줹줺줻줼줽줾줿쥀
+쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌쥍쥎쥏쥐쥑쥒쥓쥔쥕쥖쥗쥘쥙쥚쥛쥜쥝쥞쥟쥠쥡쥢쥣쥤쥥쥦쥧쥨
+쥩쥪쥫쥬쥭쥮쥯쥰쥱쥲쥳쥴쥵쥶쥷쥸쥹쥺쥻쥼쥽쥾쥿즀즁즂즃즄즅즆즇즈즉즊즋즌즍즎즏즐
+즑즒즓즔즕즖즗즘즙즚즛즜증즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸
+즹즺즻즼즽즾즿지직짂짃진짅짆짇질짉짊짋짌짍짎짏짐집짒짓짔징짖짗짘짙짚짛짜짝짞짟짠
+짡짢짣짤짥짦짧짨짩짪짫짬짭짮짯짰짱짲짳짴짵짶짷째짹짺짻짼짽짾짿쨀쨁쨂쨃쨄쨅쨆쨇쨈
+쨉쨊쨋쨌쨍쨎쨏쨐쨑쨒쨓쨔쨕쨖쨗쨘쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥쨦쨧쨨쨩쨪쨫쨬쨭쨮쨯쨰
+쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆쩇쩈쩉쩊쩋쩌쩍쩎쩏쩐쩑쩒쩓쩔쩕쩖쩗쩘
+쩙쩚쩛쩜쩝쩞쩟쩠쩡쩢쩣쩤쩥쩦쩧쩨쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩽쩾쩿쪀
+쪁쪂쪃쪄쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪘쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧쪨
+쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪼쪽쪾쪿쫀쫁쫂쫃쫄쫅쫆쫇쫈쫉쫊쫋쫌쫍쫎쫏쫐
+쫑쫒쫓쫔쫕쫖쫗쫘쫙쫚쫛쫜쫝쫞쫟쫠쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫬쫭쫮쫯쫰쫱쫲쫳쫴쫵쫶쫷쫸
+쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬈쬉쬊쬋쬌쬍쬎쬏쬐쬑쬒쬓쬔쬕쬖쬗쬘쬙쬚쬛쬜쬝쬞쬟쬠
+쬡쬢쬣쬤쬥쬦쬧쬨쬩쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭁쭂쭃쭄쭅쭆쭇쭈
+쭉쭊쭋쭌쭍쭎쭏쭐쭑쭒쭓쭔쭕쭖쭗쭘쭙쭚쭛쭜쭝쭞쭟쭠쭡쭢쭣쭤쭥쭦쭧쭨쭩쭪쭫쭬쭭쭮쭯쭰
+쭱쭲쭳쭴쭵쭶쭷쭸쭹쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘
+쮙쮚쮛쮜쮝쮞쮟쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮸쮹쮺쮻쮼쮽쮾쮿쯀
+쯁쯂쯃쯄쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯔쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟쯠쯡쯢쯣쯤쯥쯦쯧쯨
+쯩쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찌찍찎찏찐
+찑찒찓찔찕찖찗찘찙찚찛찜찝찞찟찠찡찢찣찤찥찦찧차착찪찫찬찭찮찯찰찱찲찳찴찵찶찷참
+찹찺찻찼창찾찿챀챁챂챃채책챆챇챈챉챊챋챌챍챎챏챐챑챒챓챔챕챖챗챘챙챚챛챜챝챞챟챠
+챡챢챣챤챥챦챧챨챩챪챫챬챭챮챯챰챱챲챳챴챵챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈
+첉첊첋첌첍첎첏첐첑첒첓첔첕첖첗처척첚첛천첝첞첟철첡첢첣첤첥첦첧첨첩첪첫첬청첮첯첰
+첱첲첳체첵첶첷첸첹첺첻첼첽첾첿쳀쳁쳂쳃쳄쳅쳆쳇쳈쳉쳊쳋쳌쳍쳎쳏쳐쳑쳒쳓쳔쳕쳖쳗쳘
+쳙쳚쳛쳜쳝쳞쳟쳠쳡쳢쳣쳤쳥쳦쳧쳨쳩쳪쳫쳬쳭쳮쳯쳰쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽쳾쳿촀
+촁촂촃촄촅촆촇초촉촊촋촌촍촎촏촐촑촒촓촔촕촖촗촘촙촚촛촜총촞촟촠촡촢촣촤촥촦촧촨
+촩촪촫촬촭촮촯촰촱촲촳촴촵촶촷촸촹촺촻촼촽촾촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐
+쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛최쵝쵞쵟쵠쵡쵢쵣쵤쵥쵦쵧쵨쵩쵪쵫쵬쵭쵮쵯쵰쵱쵲쵳쵴쵵쵶쵷쵸
+쵹쵺쵻쵼쵽쵾쵿춀춁춂춃춄춅춆춇춈춉춊춋춌춍춎춏춐춑춒춓추축춖춗춘춙춚춛출춝춞춟춠
+춡춢춣춤춥춦춧춨충춪춫춬춭춮춯춰춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췄췅췆췇췈
+췉췊췋췌췍췎췏췐췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡췢췣췤췥췦췧취췩췪췫췬췭췮췯췰
+췱췲췳췴췵췶췷췸췹췺췻췼췽췾췿츀츁츂츃츄츅츆츇츈츉츊츋츌츍츎츏츐츑츒츓츔츕츖츗츘
+츙츚츛츜츝츞츟츠측츢츣츤츥츦츧츨츩츪츫츬츭츮츯츰츱츲츳츴층츶츷츸츹츺츻츼츽츾츿칀
+칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔칕칖칗치칙칚칛친칝칞칟칠칡칢칣칤칥칦칧침
+칩칪칫칬칭칮칯칰칱칲칳카칵칶칷칸칹칺칻칼칽칾칿캀캁캂캃캄캅캆캇캈캉캊캋캌캍캎캏캐
+캑캒캓캔캕캖캗캘캙캚캛캜캝캞캟캠캡캢캣캤캥캦캧캨캩캪캫캬캭캮캯캰캱캲캳캴캵캶캷캸
+캹캺캻캼캽캾캿컀컁컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟컠
+컡컢컣커컥컦컧컨컩컪컫컬컭컮컯컰컱컲컳컴컵컶컷컸컹컺컻컼컽컾컿케켁켂켃켄켅켆켇켈
+켉켊켋켌켍켎켏켐켑켒켓켔켕켖켗켘켙켚켛켜켝켞켟켠켡켢켣켤켥켦켧켨켩켪켫켬켭켮켯켰
+켱켲켳켴켵켶켷켸켹켺켻켼켽켾켿콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓코콕콖콗콘
+콙콚콛콜콝콞콟콠콡콢콣콤콥콦콧콨콩콪콫콬콭콮콯콰콱콲콳콴콵콶콷콸콹콺콻콼콽콾콿쾀
+쾁쾂쾃쾄쾅쾆쾇쾈쾉쾊쾋쾌쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾡쾢쾣쾤쾥쾦쾧쾨
+쾩쾪쾫쾬쾭쾮쾯쾰쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿄쿅쿆쿇쿈쿉쿊쿋쿌쿍쿎쿏쿐
+쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿠쿡쿢쿣쿤쿥쿦쿧쿨쿩쿪쿫쿬쿭쿮쿯쿰쿱쿲쿳쿴쿵쿶쿷쿸
+쿹쿺쿻쿼쿽쿾쿿퀀퀁퀂퀃퀄퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀑퀒퀓퀔퀕퀖퀗퀘퀙퀚퀛퀜퀝퀞퀟퀠
+퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬퀭퀮퀯퀰퀱퀲퀳퀴퀵퀶퀷퀸퀹퀺퀻퀼퀽퀾퀿큀큁큂큃큄큅큆큇큈
+큉큊큋큌큍큎큏큐큑큒큓큔큕큖큗큘큙큚큛큜큝큞큟큠큡큢큣큤큥큦큧큨큩큪큫크큭큮큯큰
+큱큲큳클큵큶큷큸큹큺큻큼큽큾큿킀킁킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔킕킖킗킘
+킙킚킛킜킝킞킟킠킡킢킣키킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼킽킾킿타
+탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏탐탑탒탓탔탕탖탗탘탙탚탛태택탞탟탠탡탢탣탤탥탦탧탨
+탩탪탫탬탭탮탯탰탱탲탳탴탵탶탷탸탹탺탻탼탽탾탿턀턁턂턃턄턅턆턇턈턉턊턋턌턍턎턏턐
+턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯터턱턲턳턴턵턶턷털
+턹턺턻턼턽턾턿텀텁텂텃텄텅텆텇텈텉텊텋테텍텎텏텐텑텒텓텔텕텖텗텘텙텚텛템텝텞텟텠
+텡텢텣텤텥텦텧텨텩텪텫텬텭텮텯텰텱텲텳텴텵텶텷텸텹텺텻텼텽텾텿톀톁톂톃톄톅톆톇톈
+톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟토톡톢톣톤톥톦톧톨톩톪톫톬톭톮톯톰
+톱톲톳톴통톶톷톸톹톺톻톼톽톾톿퇀퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏퇐퇑퇒퇓퇔퇕퇖퇗퇘
+퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰퇱퇲퇳퇴퇵퇶퇷퇸퇹퇺퇻퇼퇽퇾퇿툀
+툁툂툃툄툅툆툇툈툉툊툋툌툍툎툏툐툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨
+툩툪툫투툭툮툯툰툱툲툳툴툵툶툷툸툹툺툻툼툽툾툿퉀퉁퉂퉃퉄퉅퉆퉇퉈퉉퉊퉋퉌퉍퉎퉏퉐
+퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉜퉝퉞퉟퉠퉡퉢퉣퉤퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸
+퉹퉺퉻퉼퉽퉾퉿튀튁튂튃튄튅튆튇튈튉튊튋튌튍튎튏튐튑튒튓튔튕튖튗튘튙튚튛튜튝튞튟튠
+튡튢튣튤튥튦튧튨튩튪튫튬튭튮튯튰튱튲튳튴튵튶튷트특튺튻튼튽튾튿틀틁틂틃틄틅틆틇틈
+틉틊틋틌틍틎틏틐틑틒틓틔틕틖틗틘틙틚틛틜틝틞틟틠틡틢틣틤틥틦틧틨틩틪틫틬틭틮틯티
+틱틲틳틴틵틶틷틸틹틺틻틼틽틾틿팀팁팂팃팄팅팆팇팈팉팊팋파팍팎팏판팑팒팓팔팕팖팗팘
+팙팚팛팜팝팞팟팠팡팢팣팤팥팦팧패팩팪팫팬팭팮팯팰팱팲팳팴팵팶팷팸팹팺팻팼팽팾팿퍀
+퍁퍂퍃퍄퍅퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨
+퍩퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍼퍽퍾퍿펀펁펂펃펄펅펆펇펈펉펊펋펌펍펎펏펐
+펑펒펓펔펕펖펗페펙펚펛펜펝펞펟펠펡펢펣펤펥펦펧펨펩펪펫펬펭펮펯펰펱펲펳펴펵펶펷편
+펹펺펻펼펽펾펿폀폁폂폃폄폅폆폇폈평폊폋폌폍폎폏폐폑폒폓폔폕폖폗폘폙폚폛폜폝폞폟폠
+폡폢폣폤폥폦폧폨폩폪폫포폭폮폯폰폱폲폳폴폵폶폷폸폹폺폻폼폽폾폿퐀퐁퐂퐃퐄퐅퐆퐇퐈
+퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐝퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰
+퐱퐲퐳퐴퐵퐶퐷퐸퐹퐺퐻퐼퐽퐾퐿푀푁푂푃푄푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘
+푙푚푛표푝푞푟푠푡푢푣푤푥푦푧푨푩푪푫푬푭푮푯푰푱푲푳푴푵푶푷푸푹푺푻푼푽푾푿풀
+풁풂풃풄풅풆풇품풉풊풋풌풍풎풏풐풑풒풓풔풕풖풗풘풙풚풛풜풝풞풟풠풡풢풣풤풥풦풧풨
+풩풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓌퓍퓎퓏퓐
+퓑퓒퓓퓔퓕퓖퓗퓘퓙퓚퓛퓜퓝퓞퓟퓠퓡퓢퓣퓤퓥퓦퓧퓨퓩퓪퓫퓬퓭퓮퓯퓰퓱퓲퓳퓴퓵퓶퓷퓸
+퓹퓺퓻퓼퓽퓾퓿픀픁픂픃프픅픆픇픈픉픊픋플픍픎픏픐픑픒픓픔픕픖픗픘픙픚픛픜픝픞픟픠
+픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸픹픺픻피픽픾픿핀핁핂핃필핅핆핇핈
+핉핊핋핌핍핎핏핐핑핒핓핔핕핖핗하학핚핛한핝핞핟할핡핢핣핤핥핦핧함합핪핫핬항핮핯핰
+핱핲핳해핵핶핷핸핹핺핻핼핽핾핿햀햁햂햃햄햅햆햇했행햊햋햌햍햎햏햐햑햒햓햔햕햖햗햘
+햙햚햛햜햝햞햟햠햡햢햣햤향햦햧햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀
+헁헂헃헄헅헆헇허헉헊헋헌헍헎헏헐헑헒헓헔헕헖헗험헙헚헛헜헝헞헟헠헡헢헣헤헥헦헧헨
+헩헪헫헬헭헮헯헰헱헲헳헴헵헶헷헸헹헺헻헼헽헾헿혀혁혂혃현혅혆혇혈혉혊혋혌혍혎혏혐
+협혒혓혔형혖혗혘혙혚혛혜혝혞혟혠혡혢혣혤혥혦혧혨혩혪혫혬혭혮혯혰혱혲혳혴혵혶혷호
+혹혺혻혼혽혾혿홀홁홂홃홄홅홆홇홈홉홊홋홌홍홎홏홐홑홒홓화확홖홗환홙홚홛활홝홞홟홠
+홡홢홣홤홥홦홧홨황홪홫홬홭홮홯홰홱홲홳홴홵홶홷홸홹홺홻홼홽홾홿횀횁횂횃횄횅횆횇횈
+횉횊횋회획횎횏횐횑횒횓횔횕횖횗횘횙횚횛횜횝횞횟횠횡횢횣횤횥횦횧효횩횪횫횬횭횮횯횰
+횱횲횳횴횵횶횷횸횹횺횻횼횽횾횿훀훁훂훃후훅훆훇훈훉훊훋훌훍훎훏훐훑훒훓훔훕훖훗훘
+훙훚훛훜훝훞훟훠훡훢훣훤훥훦훧훨훩훪훫훬훭훮훯훰훱훲훳훴훵훶훷훸훹훺훻훼훽훾훿휀
+휁휂휃휄휅휆휇휈휉휊휋휌휍휎휏휐휑휒휓휔휕휖휗휘휙휚휛휜휝휞휟휠휡휢휣휤휥휦휧휨
+휩휪휫휬휭휮휯휰휱휲휳휴휵휶휷휸휹휺휻휼휽휾휿흀흁흂흃흄흅흆흇흈흉흊흋흌흍흎흏흐
+흑흒흓흔흕흖흗흘흙흚흛흜흝흞흟흠흡흢흣흤흥흦흧흨흩흪흫희흭흮흯흰흱흲흳흴흵흶흷흸
+흹흺흻흼흽흾흿힀힁힂힃힄힅힆힇히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟힠
+힡힢힣힤힥힦힧힨힩힪힫힬힭힮힯ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿퟀퟁퟂퟃퟄퟅퟆ퟇퟈
+퟉퟊ퟋퟌퟍퟎퟏퟐퟑퟒퟓퟔퟕퟖퟗퟘퟙퟚퟛퟜퟝퟞퟟퟠퟡퟢퟣퟤퟥퟦퟧퟨퟩퟪퟫퟬퟭퟮퟯퟰ
+ퟱퟲퟳퟴퟵퟶퟷퟸퟹퟺퟻ퟼퟽퟾퟿
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+豈更車賈滑串句龜龜契金喇奈懶癩羅蘿
+螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧老蘆虜路露
+魯鷺碌祿綠菉錄鹿論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏樂諾丹寧怒
+率異北磻便復不泌數索參塞省葉說殺辰沈拾若掠略亮兩凉梁糧良諒量勵呂女廬旅濾礪閭驪麗
+黎力曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈裂說廉念捻殮簾獵令囹寧嶺怜玲瑩羚聆
+鈴零靈領例禮醴隸惡了僚寮尿料樂燎療蓼遼龍暈阮劉杻柳流溜琉留硫紐類六戮陸倫崙淪輪律
+慄栗率隆利吏履易李梨泥理痢罹裏裡里離匿溺吝燐璘藺隣鱗麟林淋臨立笠粒狀炙識什茶刺切
+度拓糖宅洞暴輻行降見廓兀嗀﨎﨏塚﨑晴﨓﨔凞猪益礼神祥福靖精羽﨟蘒﨡諸﨣﨤逸都﨧﨨
+﨩飯飼館鶴郞隷侮僧免勉勤卑喝嘆器塀墨層屮悔慨憎懲敏既暑梅海渚漢煮爫琢碑社祉祈祐祖
+祝禍禎穀突節練縉繁署者臭艹艹著褐視謁謹賓贈辶逸難響頻恵𤋮舘﩮﩯並况全侀充冀勇勺喝
+啕喙嗢塚墳奄奔婢嬨廒廙彩徭惘慎愈憎慠懲戴揄搜摒敖晴朗望杖歹殺流滛滋漢瀞煮瞧爵犯猪
+瑱甆画瘝瘟益盛直睊着磌窱節类絛練缾者荒華蝹襁覆視調諸請謁諾諭謹變贈輸遲醙鉶陼難靖
+韛響頋頻鬒龜𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎﫚﫛﫜﫝﫞﫟﫠﫡﫢﫣﫤﫥﫦﫧﫨﫩﫪﫫﫬﫭﫮﫯﫰
+﫱﫲﫳﫴﫵﫶﫷﫸﫹﫺﫻﫼﫽﫾﫿fffiflffifflſtst﬇﬈﬉﬊﬋﬌﬍﬎﬏﬐﬑﬒ﬓﬔﬕﬖﬗ﬘
+﬙﬚﬛﬜יִﬞײַﬠﬡﬢﬣﬤﬥﬦﬧﬨ﬩שׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּ﬷טּיּךּכּלּ﬽מּ﬿נּ
+סּ﭂ףּפּ﭅צּקּרּשּתּוֹבֿכֿפֿﭏﭐﭑﭒﭓﭔﭕﭖﭗﭘﭙﭚﭛﭜﭝﭞﭟﭠﭡﭢﭣﭤﭥﭦﭧﭨ
+ﭩﭪﭫﭬﭭﭮﭯﭰﭱﭲﭳﭴﭵﭶﭷﭸﭹﭺﭻﭼﭽﭾﭿﮀﮁﮂﮃﮄﮅﮆﮇﮈﮉﮊﮋﮌﮍﮎﮏﮐ
+ﮑﮒﮓﮔﮕﮖﮗﮘﮙﮚﮛﮜﮝﮞﮟﮠﮡﮢﮣﮤﮥﮦﮧﮨﮩﮪﮫﮬﮭﮮﮯﮰﮱ﮲﮳﮴﮵﮶﮷﮸
+﮹﮺﮻﮼﮽﮾﮿﯀﯁﯂﯃﯄﯅﯆﯇﯈﯉﯊﯋﯌﯍﯎﯏﯐﯑﯒ﯓﯔﯕﯖﯗﯘﯙﯚﯛﯜﯝﯞﯟﯠ
+ﯡﯢﯣﯤﯥﯦﯧﯨﯩﯪﯫﯬﯭﯮﯯﯰﯱﯲﯳﯴﯵﯶﯷﯸﯹﯺﯻﯼﯽﯾﯿﰀﰁﰂﰃﰄﰅﰆﰇﰈ
+ﰉﰊﰋﰌﰍﰎﰏﰐﰑﰒﰓﰔﰕﰖﰗﰘﰙﰚﰛﰜﰝﰞﰟﰠﰡﰢﰣﰤﰥﰦﰧﰨﰩﰪﰫﰬﰭﰮﰯﰰ
+ﰱﰲﰳﰴﰵﰶﰷﰸﰹﰺﰻﰼﰽﰾﰿﱀﱁﱂﱃﱄﱅﱆﱇﱈﱉﱊﱋﱌﱍﱎﱏﱐﱑﱒﱓﱔﱕﱖﱗﱘ
+ﱙﱚﱛﱜﱝﱞﱟﱠﱡﱢﱣﱤﱥﱦﱧﱨﱩﱪﱫﱬﱭﱮﱯﱰﱱﱲﱳﱴﱵﱶﱷﱸﱹﱺﱻﱼﱽﱾﱿﲀ
+ﲁﲂﲃﲄﲅﲆﲇﲈﲉﲊﲋﲌﲍﲎﲏﲐﲑﲒﲓﲔﲕﲖﲗﲘﲙﲚﲛﲜﲝﲞﲟﲠﲡﲢﲣﲤﲥﲦﲧﲨ
+ﲩﲪﲫﲬﲭﲮﲯﲰﲱﲲﲳﲴﲵﲶﲷﲸﲹﲺﲻﲼﲽﲾﲿﳀﳁﳂﳃﳄﳅﳆﳇﳈﳉﳊﳋﳌﳍﳎﳏﳐ
+ﳑﳒﳓﳔﳕﳖﳗﳘﳙﳚﳛﳜﳝﳞﳟﳠﳡﳢﳣﳤﳥﳦﳧﳨﳩﳪﳫﳬﳭﳮﳯﳰﳱﳲﳳﳴﳵﳶﳷﳸ
+ﳹﳺﳻﳼﳽﳾﳿﴀﴁﴂﴃﴄﴅﴆﴇﴈﴉﴊﴋﴌﴍﴎﴏﴐﴑﴒﴓﴔﴕﴖﴗﴘﴙﴚﴛﴜﴝﴞﴟﴠ
+ﴡﴢﴣﴤﴥﴦﴧﴨﴩﴪﴫﴬﴭﴮﴯﴰﴱﴲﴳﴴﴵﴶﴷﴸﴹﴺﴻﴼﴽ﴾﴿﵀﵁﵂﵃﵄﵅﵆﵇﵈
+﵉﵊﵋﵌﵍﵎﵏ﵐﵑﵒﵓﵔﵕﵖﵗﵘﵙﵚﵛﵜﵝﵞﵟﵠﵡﵢﵣﵤﵥﵦﵧﵨﵩﵪﵫﵬﵭﵮﵯﵰ
+ﵱﵲﵳﵴﵵﵶﵷﵸﵹﵺﵻﵼﵽﵾﵿﶀﶁﶂﶃﶄﶅﶆﶇﶈﶉﶊﶋﶌﶍﶎﶏ﶐﶑ﶒﶓﶔﶕﶖﶗﶘ
+ﶙﶚﶛﶜﶝﶞﶟﶠﶡﶢﶣﶤﶥﶦﶧﶨﶩﶪﶫﶬﶭﶮﶯﶰﶱﶲﶳﶴﶵﶶﶷﶸﶹﶺﶻﶼﶽﶾﶿﷀ
+ﷁﷂﷃﷄﷅﷆﷇ﷈﷉﷊﷋﷌﷍﷎﷏ﷰﷱﷲﷳﷴﷵﷶﷷﷸﷹﷺﷻ﷼﷽﷾﷿︀︁︂︃︄︅︆︇︈︉︊︋︌︍︎️︐
+︑︒︓︔︕︖︗︘︙︚︛︜︝︞︟︧︨︩︪︫︬︭︠︡︢︣︤︥︦︮︯︰︱︲︳︴︵︶︷︸
+︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹅﹆﹇﹈﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹓﹔﹕﹖﹗﹘﹙﹚﹛﹜﹝﹞﹟﹠
+﹡﹢﹣﹤﹥﹦﹧﹨﹩﹪﹫﹬﹭﹮﹯ﹰﹱﹲﹳﹴ﹵ﹶﹷﹸﹹﹺﹻﹼﹽﹾﹿﺀﺁﺂﺃﺄﺅﺆﺇﺈ
+ﺉﺊﺋﺌﺍﺎﺏﺐﺑﺒﺓﺔﺕﺖﺗﺘﺙﺚﺛﺜﺝﺞﺟﺠﺡﺢﺣﺤﺥﺦﺧﺨﺩﺪﺫﺬﺭﺮﺯﺰ
+ﺱﺲﺳﺴﺵﺶﺷﺸﺹﺺﺻﺼﺽﺾﺿﻀﻁﻂﻃﻄﻅﻆﻇﻈﻉﻊﻋﻌﻍﻎﻏﻐﻑﻒﻓﻔﻕﻖﻗﻘ
+ﻙﻚﻛﻜﻝﻞﻟﻠﻡﻢﻣﻤﻥﻦﻧﻨﻩﻪﻫﻬﻭﻮﻯﻰﻱﻲﻳﻴﻵﻶﻷﻸﻹﻺﻻﻼ﻽﻾＀
+!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH
+IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop
+qrstuvwxyz{|}~⦅⦆。「」、・ヲァィゥェォャュョッーアイウエオカキク
+ケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ᅠ
+ᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ﾿￀￁ᅡᅢᅣᅤᅥᅦ￈
+￉ᅧᅨᅩᅪᅫᅬ￐￑ᅭᅮᅯᅰᅱᅲ￘￙ᅳᅴᅵ￝￞￟¢£¬ ̄¦¥₩￧│←↑→↓■○￯￰
+￱￲￳￴￵￶￷￸�  \ 1 \ 2 \ 3 \ 4 \ 5 \ 6 \a \b        
\v \f \r \ e \ f \10 \11 \12 \13 \14
\15 \16 \17 \18 \19 \1a \e \1c \1d \1e \1f   ! " # $ % & ' (
+ ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; <
+ = > ? @ A B C D E F G H I J K L M N O P
+ Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d
+ e f g h i j k l m n o p q r s t u v w x
+ y z { | } ~ \7f \80 \81 \82 \83 \84 \85 \86 \87 \88 \89 \8a \8b \8c
\8d \8e \8f \90 \91 \92 \93 \94 \95 \96 \97 \98 \99 \9a \9b \9c \9d \9e \9f  
+ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´
+ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È
+ É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü
+ Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð
+ ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Ā ā Ă ă Ą
+ ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę
+ ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ
+ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ
+ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ
+ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ
+ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż
+ Ž ž ſ ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə Ɛ
+ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ơ ơ Ƣ ƣ Ƥ
+ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ
+ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj
+ Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ Ǡ
+ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ
+ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ Ȁ ȁ Ȃ ȃ Ȅ ȅ Ȇ ȇ Ȉ
+ ȉ Ȋ ȋ Ȍ ȍ Ȏ ȏ Ȑ ȑ Ȓ ȓ Ȕ ȕ Ȗ ȗ Ș ș Ț ț Ȝ
+ ȝ Ȟ ȟ Ƞ ȡ Ȣ ȣ Ȥ ȥ Ȧ ȧ Ȩ ȩ Ȫ ȫ Ȭ ȭ Ȯ ȯ Ȱ
+ ȱ Ȳ ȳ ȴ ȵ ȶ ȷ ȸ ȹ Ⱥ Ȼ ȼ Ƚ Ⱦ ȿ ɀ Ɂ ɂ Ƀ Ʉ
+ Ʌ Ɇ ɇ Ɉ ɉ Ɋ ɋ Ɍ ɍ Ɏ ɏ ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ
+ ə ɚ ɛ ɜ ɝ ɞ ɟ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ
+ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ ʀ
+ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ ʐ ʑ ʒ ʓ ʔ
+ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ
+ ʩ ʪ ʫ ʬ ʭ ʮ ʯ ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ ʺ ʻ ʼ
+ ʽ ʾ ʿ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˌ ˍ ˎ ˏ ː
+ ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˚ ˛ ˜ ˝ ˞ ˟ ˠ ˡ ˢ ˣ ˤ
+ ˥ ˦ ˧ ˨ ˩ ˪ ˫ ˬ ˭ ˮ ˯ ˰ ˱ ˲ ˳ ˴ ˵ ˶ ˷ ˸
+ ˹ ˺ ˻ ˼ ˽ ˾ ˿ ̀ ́ ̂ ̃ ̄ ̅ ̆ ̇ ̈ ̉ ̊ ̋ ̌
+ ̍ ̎ ̏ ̐ ̑ ̒ ̓ ̔ ̕ ̖ ̗ ̘ ̙ ̚ ̛ ̜ ̝ ̞ ̟ ̠
+ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴
+ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿ ̀ ́ ͂ ̓ ̈́ ͅ ͆ ͇ ͈
+ ͉ ͊ ͋ ͌ ͍ ͎ ͏ ͐ ͑ ͒ ͓ ͔ ͕ ͖ ͗ ͘ ͙ ͚ ͛ ͜
+ ͝ ͞ ͟ ͠ ͡ ͢ ͣ ͤ ͥ ͦ ͧ ͨ ͩ ͪ ͫ ͬ ͭ ͮ ͯ Ͱ
+ ͱ Ͳ ͳ ʹ ͵ Ͷ ͷ ͸ ͹ ͺ ͻ ͼ ͽ ; Ϳ ΀ ΁ ΂ ΃ ΄
+ ΅ Ά · Έ Ή Ί ΋ Ό ΍ Ύ Ώ ΐ Α Β Γ Δ Ε Ζ Η Θ
+ Ι Κ Λ Μ Ν Ξ Ο Π Ρ ΢ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά
+ έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π
+ ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ Ϗ ϐ ϑ ϒ ϓ ϔ
+ ϕ ϖ ϗ Ϙ ϙ Ϛ ϛ Ϝ ϝ Ϟ ϟ Ϡ ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ
+ ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ ϴ ϵ ϶ Ϸ ϸ Ϲ Ϻ ϻ ϼ
+ Ͻ Ͼ Ͽ Ѐ Ё Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ѝ Ў Џ А
+ Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф
+ Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и
+ й к л м н о п р с т у ф х ц ч ш щ ъ ы ь
+ э ю я ѐ ё ђ ѓ є ѕ і ї ј љ њ ћ ќ ѝ ў џ Ѡ
+ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ ѳ Ѵ
+ ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ Ҁ ҁ ҂ ҃ ҄ ҅ ҆ ҇ ҈
+ ҉ Ҋ ҋ Ҍ ҍ Ҏ ҏ Ґ ґ Ғ ғ Ҕ ҕ Җ җ Ҙ ҙ Қ қ Ҝ
+ ҝ Ҟ ҟ Ҡ ҡ Ң ң Ҥ ҥ Ҧ ҧ Ҩ ҩ Ҫ ҫ Ҭ ҭ Ү ү Ұ
+ ұ Ҳ ҳ Ҵ ҵ Ҷ ҷ Ҹ ҹ Һ һ Ҽ ҽ Ҿ ҿ Ӏ Ӂ ӂ Ӄ ӄ
+ Ӆ ӆ Ӈ ӈ Ӊ ӊ Ӌ ӌ Ӎ ӎ ӏ Ӑ ӑ Ӓ ӓ Ӕ ӕ Ӗ ӗ Ә
+ ә Ӛ ӛ Ӝ ӝ Ӟ ӟ Ӡ ӡ Ӣ ӣ Ӥ ӥ Ӧ ӧ Ө ө Ӫ ӫ Ӭ
+ ӭ Ӯ ӯ Ӱ ӱ Ӳ ӳ Ӵ ӵ Ӷ ӷ Ӹ ӹ Ӻ ӻ Ӽ ӽ Ӿ ӿ Ԁ
+ ԁ Ԃ ԃ Ԅ ԅ Ԇ ԇ Ԉ ԉ Ԋ ԋ Ԍ ԍ Ԏ ԏ Ԑ ԑ Ԓ ԓ Ԕ
+ ԕ Ԗ ԗ Ԙ ԙ Ԛ ԛ Ԝ ԝ Ԟ ԟ Ԡ ԡ Ԣ ԣ Ԥ ԥ Ԧ ԧ Ԩ
+ ԩ Ԫ ԫ Ԭ ԭ Ԯ ԯ ԰ Ա Բ Գ Դ Ե Զ Է Ը Թ Ժ Ի Լ
+ Խ Ծ Կ Հ Ձ Ղ Ճ Մ Յ Ն Շ Ո Չ Պ Ջ Ռ Ս Վ Տ Ր
+ Ց Ւ Փ Ք Օ Ֆ ՗ ՘ ՙ ՚ ՛ ՜ ՝ ՞ ՟ ՠ ա բ գ դ
+ ե զ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո
+ չ պ ջ ռ ս վ տ ր ց ւ փ ք օ ֆ և ֈ ։ ֊ ֋ ֌
+ ֍ ֎ ֏ ֐ ֑ ֒ ֓ ֔ ֕ ֖ ֗ ֘ ֙ ֚ ֛ ֜ ֝ ֞ ֟ ֠
+ ֡ ֢ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭ ֮ ֯ ְ ֱ ֲ ֳ ִ
+ ֵ ֶ ַ ָ ֹ ֺ ֻ ּ ֽ ־ ֿ ׀ ׁ ׂ ׃ ׄ ׅ ׆ ׇ ׈
+ ׉ ׊ ׋ ׌ ׍ ׎ ׏ א ב ג ד ה ו ז ח ט י ך כ ל
+ ם מ ן נ ס ע ף פ ץ צ ק ר ש ת ׫ ׬ ׭ ׮ ׯ װ
+ ױ ײ ׳ ״ ׵ ׶ ׷ ׸ ׹ ׺ ׻ ׼ ׽ ׾ ׿ ؀ ؁ ؂ ؃ ؄
+ ؅ ؆ ؇ ؈ ؉ ؊ ؋ ، ؍ ؎ ؏ ؐ ؑ ؒ ؓ ؔ ؕ ؖ ؗ ؘ
+ ؙ ؚ ؛ ؜ ؝ ؞ ؟ ؠ ء آ أ ؤ إ ئ ا ب ة ت ث ج
+ ح خ د ذ ر ز س ش ص ض ط ظ ع غ ػ ؼ ؽ ؾ ؿ ـ
+ ف ق ك ل م ن ه و ى ي ً ٌ ٍ َ ُ ِ ّ ْ ٓ ٔ
+ ٕ ٖ ٗ ٘ ٙ ٚ ٛ ٜ ٝ ٞ ٟ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨
+ ٩ ٪ ٫ ٬ ٭ ٮ ٯ ٰ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ
+ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ
+ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ
+ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ڲ ڳ ڴ ڵ ڶ ڷ ڸ
+ ڹ ں ڻ ڼ ڽ ھ ڿ ۀ ہ ۂ ۃ ۄ ۅ ۆ ۇ ۈ ۉ ۊ ۋ ی
+ ۍ ێ ۏ ې ۑ ے ۓ ۔ ە ۖ ۗ ۘ ۙ ۚ ۛ ۜ ۝ ۞ ۟ ۠
+ ۡ ۢ ۣ ۤ ۥ ۦ ۧ ۨ ۩ ۪ ۫ ۬ ۭ ۮ ۯ ۰ ۱ ۲ ۳ ۴
+ ۵ ۶ ۷ ۸ ۹ ۺ ۻ ۼ ۽ ۾ ۿ ܀ ܁ ܂ ܃ ܄ ܅ ܆ ܇ ܈
+ ܉ ܊ ܋ ܌ ܍ ܎ ܏ ܐ ܑ ܒ ܓ ܔ ܕ ܖ ܗ ܘ ܙ ܚ ܛ ܜ
+ ܝ ܞ ܟ ܠ ܡ ܢ ܣ ܤ ܥ ܦ ܧ ܨ ܩ ܪ ܫ ܬ ܭ ܮ ܯ ܰ
+ ܱ ܲ ܳ ܴ ܵ ܶ ܷ ܸ ܹ ܺ ܻ ܼ ܽ ܾ ܿ ݀ ݁ ݂ ݃ ݄
+ ݅ ݆ ݇ ݈ ݉ ݊ ݋ ݌ ݍ ݎ ݏ ݐ ݑ ݒ ݓ ݔ ݕ ݖ ݗ ݘ
+ ݙ ݚ ݛ ݜ ݝ ݞ ݟ ݠ ݡ ݢ ݣ ݤ ݥ ݦ ݧ ݨ ݩ ݪ ݫ ݬ
+ ݭ ݮ ݯ ݰ ݱ ݲ ݳ ݴ ݵ ݶ ݷ ݸ ݹ ݺ ݻ ݼ ݽ ݾ ݿ ހ
+ ށ ނ ރ ބ ޅ ކ އ ވ މ ފ ދ ތ ލ ގ ޏ ސ ޑ ޒ ޓ ޔ
+ ޕ ޖ ޗ ޘ ޙ ޚ ޛ ޜ ޝ ޞ ޟ ޠ ޡ ޢ ޣ ޤ ޥ ަ ާ ި
+ ީ ު ޫ ެ ޭ ޮ ޯ ް ޱ ޲ ޳ ޴ ޵ ޶ ޷ ޸ ޹ ޺ ޻ ޼
+ ޽ ޾ ޿ ߀ ߁ ߂ ߃ ߄ ߅ ߆ ߇ ߈ ߉ ߊ ߋ ߌ ߍ ߎ ߏ ߐ
+ ߑ ߒ ߓ ߔ ߕ ߖ ߗ ߘ ߙ ߚ ߛ ߜ ߝ ߞ ߟ ߠ ߡ ߢ ߣ ߤ
+ ߥ ߦ ߧ ߨ ߩ ߪ ߫ ߬ ߭ ߮ ߯ ߰ ߱ ߲ ߳ ߴ ߵ ߶ ߷ ߸
+ ߹ ߺ ߻ ߼ ߽ ߾ ߿ ࠀ ࠁ ࠂ ࠃ ࠄ ࠅ ࠆ ࠇ ࠈ ࠉ ࠊ ࠋ ࠌ
+ ࠍ ࠎ ࠏ ࠐ ࠑ ࠒ ࠓ ࠔ ࠕ ࠖ ࠗ ࠘ ࠙ ࠚ ࠛ ࠜ ࠝ ࠞ ࠟ ࠠ
+ ࠡ ࠢ ࠣ ࠤ ࠥ ࠦ ࠧ ࠨ ࠩ ࠪ ࠫ ࠬ ࠭ ࠮ ࠯ ࠰ ࠱ ࠲ ࠳ ࠴
+ ࠵ ࠶ ࠷ ࠸ ࠹ ࠺ ࠻ ࠼ ࠽ ࠾ ࠿ ࡀ ࡁ ࡂ ࡃ ࡄ ࡅ ࡆ ࡇ ࡈ
+ ࡉ ࡊ ࡋ ࡌ ࡍ ࡎ ࡏ ࡐ ࡑ ࡒ ࡓ ࡔ ࡕ ࡖ ࡗ ࡘ ࡙ ࡚ ࡛ ࡜
+ ࡝ ࡞ ࡟ ࡠ ࡡ ࡢ ࡣ ࡤ ࡥ ࡦ ࡧ ࡨ ࡩ ࡪ ࡫ ࡬ ࡭ ࡮ ࡯ ࡰ
+ ࡱ ࡲ ࡳ ࡴ ࡵ ࡶ ࡷ ࡸ ࡹ ࡺ ࡻ ࡼ ࡽ ࡾ ࡿ ࢀ ࢁ ࢂ ࢃ ࢄ
+ ࢅ ࢆ ࢇ ࢈ ࢉ ࢊ ࢋ ࢌ ࢍ ࢎ ࢏ ࢐ ࢑ ࢒ ࢓ ࢔ ࢕ ࢖ ࢗ ࢘
+ ࢙ ࢚ ࢛ ࢜ ࢝ ࢞ ࢟ ࢠ ࢡ ࢢ ࢣ ࢤ ࢥ ࢦ ࢧ ࢨ ࢩ ࢪ ࢫ ࢬ
+ ࢭ ࢮ ࢯ ࢰ ࢱ ࢲ ࢳ ࢴ ࢵ ࢶ ࢷ ࢸ ࢹ ࢺ ࢻ ࢼ ࢽ ࢾ ࢿ ࣀ
+ ࣁ ࣂ ࣃ ࣄ ࣅ ࣆ ࣇ ࣈ ࣉ ࣊ ࣋ ࣌ ࣍ ࣎ ࣏ ࣐ ࣑ ࣒ ࣓ ࣔ
+ ࣕ ࣖ ࣗ ࣘ ࣙ ࣚ ࣛ ࣜ ࣝ ࣞ ࣟ ࣠ ࣡ ࣢ ࣣ ࣤ ࣥ ࣦ ࣧ ࣨ
+ ࣩ ࣪ ࣫ ࣬ ࣭ ࣮ ࣯ ࣰ ࣱ ࣲ ࣳ ࣴ ࣵ ࣶ ࣷ ࣸ ࣹ ࣺ ࣻ ࣼ
+ ࣽ ࣾ ࣿ ऀ ँ ं ः ऄ अ आ इ ई उ ऊ ऋ ऌ ऍ ऎ ए ऐ
+ ऑ ऒ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त
+ थ द ध न ऩ प फ ब भ म य र ऱ ल ळ ऴ व श ष स
+ ह ऺ ऻ ़ ऽ ा ि ी ु ू ृ ॄ ॅ ॆ े ै ॉ ॊ ो ौ
+ ् ॎ ॏ ॐ ॑ ॒ ॓ ॔ ॕ ॖ ॗ क़ ख़ ग़ ज़ ड़ ढ़ फ़ य़ ॠ
+ ॡ ॢ ॣ । ॥ ० १ २ ३ ४ ५ ६ ७ ८ ९ ॰ ॱ ॲ ॳ ॴ
+ ॵ ॶ ॷ ॸ ॹ ॺ ॻ ॼ ॽ ॾ ॿ ঀ ঁ ং ঃ ঄ অ আ ই ঈ
+ উ ঊ ঋ ঌ ঍ ঎ এ ঐ ঑ ঒ ও ঔ ক খ গ ঘ ঙ চ ছ জ
+ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন ঩ প ফ ব ভ ম য র
+ ঱ ল ঳ ঴ ঵ শ ষ স হ ঺ ঻ ় ঽ া ি ী ু ূ ৃ ৄ
+ ৅ ৆ ে ৈ ৉ ৊ ো ৌ ্ ৎ ৏ ৐ ৑ ৒ ৓ ৔ ৕ ৖ ৗ ৘
+ ৙ ৚ ৛ ড় ঢ় ৞ য় ৠ ৡ ৢ ৣ ৤ ৥ ০ ১ ২ ৩ ৪ ৫ ৬
+ ৭ ৮ ৯ ৰ ৱ ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৺ ৻ ৼ ৽ ৾ ৿ ਀
+ ਁ ਂ ਃ ਄ ਅ ਆ ਇ ਈ ਉ ਊ ਋ ਌ ਍ ਎ ਏ ਐ ਑ ਒ ਓ ਔ
+ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ
+ ਩ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਱ ਲ ਲ਼ ਴ ਵ ਸ਼ ਷ ਸ ਹ ਺ ਻ ਼
+ ਽ ਾ ਿ ੀ ੁ ੂ ੃ ੄ ੅ ੆ ੇ ੈ ੉ ੊ ੋ ੌ ੍ ੎ ੏ ੐
+ ੑ ੒ ੓ ੔ ੕ ੖ ੗ ੘ ਖ਼ ਗ਼ ਜ਼ ੜ ੝ ਫ਼ ੟ ੠ ੡ ੢ ੣ ੤
+ ੥ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੰ ੱ ੲ ੳ ੴ ੵ ੶ ੷ ੸
+ ੹ ੺ ੻ ੼ ੽ ੾ ੿ ઀ ઁ ં ઃ ઄ અ આ ઇ ઈ ઉ ઊ ઋ ઌ
+ ઍ ઎ એ ઐ ઑ ઒ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ
+ ડ ઢ ણ ત થ દ ધ ન ઩ પ ફ બ ભ મ ય ર ઱ લ ળ ઴
+ વ શ ષ સ હ ઺ ઻ ઼ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ૆ ે ૈ
+ ૉ ૊ ો ૌ ્ ૎ ૏ ૐ ૑ ૒ ૓ ૔ ૕ ૖ ૗ ૘ ૙ ૚ ૛ ૜
+ ૝ ૞ ૟ ૠ ૡ ૢ ૣ ૤ ૥ ૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ ૰
+ ૱ ૲ ૳ ૴ ૵ ૶ ૷ ૸ ૹ ૺ ૻ ૼ ૽ ૾ ૿ ଀ ଁ ଂ ଃ ଄
+ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଌ ଍ ଎ ଏ ଐ ଑ ଒ ଓ ଔ କ ଖ ଗ ଘ
+ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ଩ ପ ଫ ବ
+ ଭ ମ ଯ ର ଱ ଲ ଳ ଴ ଵ ଶ ଷ ସ ହ ଺ ଻ ଼ ଽ ା ି ୀ
+ ୁ ୂ ୃ ୄ ୅ ୆ େ ୈ ୉ ୊ ୋ ୌ ୍ ୎ ୏ ୐ ୑ ୒ ୓ ୔
+ ୕ ୖ ୗ ୘ ୙ ୚ ୛ ଡ଼ ଢ଼ ୞ ୟ ୠ ୡ ୢ ୣ ୤ ୥ ୦ ୧ ୨
+ ୩ ୪ ୫ ୬ ୭ ୮ ୯ ୰ ୱ ୲ ୳ ୴ ୵ ୶ ୷ ୸ ୹ ୺ ୻ ୼
+ ୽ ୾ ୿ ஀ ஁ ஂ ஃ ஄ அ ஆ இ ஈ உ ஊ ஋ ஌ ஍ எ ஏ ஐ
+ ஑ ஒ ஓ ஔ க ஖ ஗ ஘ ங ச ஛ ஜ ஝ ஞ ட ஠ ஡ ஢ ண த
+ ஥ ஦ ஧ ந ன ப ஫ ஬ ஭ ம ய ர ற ல ள ழ வ ஶ ஷ ஸ
+ ஹ ஺ ஻ ஼ ஽ ா ி ீ ு ூ ௃ ௄ ௅ ெ ே ை ௉ ொ ோ ௌ
+ ் ௎ ௏ ௐ ௑ ௒ ௓ ௔ ௕ ௖ ௗ ௘ ௙ ௚ ௛ ௜ ௝ ௞ ௟ ௠
+ ௡ ௢ ௣ ௤ ௥ ௦ ௧ ௨ ௩ ௪ ௫ ௬ ௭ ௮ ௯ ௰ ௱ ௲ ௳ ௴
+ ௵ ௶ ௷ ௸ ௹ ௺ ௻ ௼ ௽ ௾ ௿ ఀ ఁ ం ః ఄ అ ఆ ఇ ఈ
+ ఉ ఊ ఋ ఌ ఍ ఎ ఏ ఐ ఑ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ
+ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ఩ ప ఫ బ భ మ య ర
+ ఱ ల ళ ఴ వ శ ష స హ ఺ ఻ ఼ ఽ ా ి ీ ు ూ ృ ౄ
+ ౅ ె ే ై ౉ ొ ో ౌ ్ ౎ ౏ ౐ ౑ ౒ ౓ ౔ ౕ ౖ ౗ ౘ
+ ౙ ౚ ౛ ౜ ౝ ౞ ౟ ౠ ౡ ౢ ౣ ౤ ౥ ౦ ౧ ౨ ౩ ౪ ౫ ౬
+ ౭ ౮ ౯ ౰ ౱ ౲ ౳ ౴ ౵ ౶ ౷ ౸ ౹ ౺ ౻ ౼ ౽ ౾ ౿ ಀ
+ ಁ ಂ ಃ ಄ ಅ ಆ ಇ ಈ ಉ ಊ ಋ ಌ ಍ ಎ ಏ ಐ ಑ ಒ ಓ ಔ
+ ಕ ಖ ಗ ಘ ಙ ಚ ಛ ಜ ಝ ಞ ಟ ಠ ಡ ಢ ಣ ತ ಥ ದ ಧ ನ
+ ಩ ಪ ಫ ಬ ಭ ಮ ಯ ರ ಱ ಲ ಳ ಴ ವ ಶ ಷ ಸ ಹ ಺ ಻ ಼
+ ಽ ಾ ಿ ೀ ು ೂ ೃ ೄ ೅ ೆ ೇ ೈ ೉ ೊ ೋ ೌ ್ ೎ ೏ ೐
+ ೑ ೒ ೓ ೔ ೕ ೖ ೗ ೘ ೙ ೚ ೛ ೜ ೝ ೞ ೟ ೠ ೡ ೢ ೣ ೤
+ ೥ ೦ ೧ ೨ ೩ ೪ ೫ ೬ ೭ ೮ ೯ ೰ ೱ ೲ ೳ ೴ ೵ ೶ ೷ ೸
+ ೹ ೺ ೻ ೼ ೽ ೾ ೿ ഀ ഁ ം ഃ ഄ അ ആ ഇ ഈ ഉ ഊ ഋ ഌ
+ ഍ എ ഏ ഐ ഑ ഒ ഓ ഔ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ
+ ഡ ഢ ണ ത ഥ ദ ധ ന ഩ പ ഫ ബ ഭ മ യ ര റ ല ള ഴ
+ വ ശ ഷ സ ഹ ഺ ഻ ഼ ഽ ാ ി ീ ു ൂ ൃ ൄ ൅ െ േ ൈ
+ ൉ ൊ ോ ൌ ് ൎ ൏ ൐ ൑ ൒ ൓ ൔ ൕ ൖ ൗ ൘ ൙ ൚ ൛ ൜
+ ൝ ൞ ൟ ൠ ൡ ൢ ൣ ൤ ൥ ൦ ൧ ൨ ൩ ൪ ൫ ൬ ൭ ൮ ൯ ൰
+ ൱ ൲ ൳ ൴ ൵ ൶ ൷ ൸ ൹ ൺ ൻ ർ ൽ ൾ ൿ ඀ ඁ ං ඃ ඄
+ අ ආ ඇ ඈ ඉ ඊ උ ඌ ඍ ඎ ඏ ඐ එ ඒ ඓ ඔ ඕ ඖ ඗ ඘
+ ඙ ක ඛ ග ඝ ඞ ඟ ච ඡ ජ ඣ ඤ ඥ ඦ ට ඨ ඩ ඪ ණ ඬ
+ ත ථ ද ධ න ඲ ඳ ප ඵ බ භ ම ඹ ය ර ඼ ල ඾ ඿ ව
+ ශ ෂ ස හ ළ ෆ ෇ ෈ ෉ ් ෋ ෌ ෍ ෎ ා ැ ෑ ි ී ු
+ ෕ ූ ෗ ෘ ෙ ේ ෛ ො ෝ ෞ ෟ ෠ ෡ ෢ ෣ ෤ ෥ ෦ ෧ ෨
+ ෩ ෪ ෫ ෬ ෭ ෮ ෯ ෰ ෱ ෲ ෳ ෴ ෵ ෶ ෷ ෸ ෹ ෺ ෻ ෼
+ ෽ ෾ ෿ ฀ ก ข ฃ ค ฅ ฆ ง จ ฉ ช ซ ฌ ญ ฎ ฏ ฐ
+ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟ ภ ม ย ร ฤ
+ ล ฦ ว ศ ษ ส ห ฬ อ ฮ ฯ ะ ั า ำ ิ ี ึ ื ุ
+ ู ฺ ฻ ฼ ฽ ฾ ฿ เ แ โ ใ ไ ๅ ๆ ็ ่ ้ ๊ ๋ ์
+ ํ ๎ ๏ ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙ ๚ ๛ ๜ ๝ ๞ ๟ ๠
+ ๡ ๢ ๣ ๤ ๥ ๦ ๧ ๨ ๩ ๪ ๫ ๬ ๭ ๮ ๯ ๰ ๱ ๲ ๳ ๴
+ ๵ ๶ ๷ ๸ ๹ ๺ ๻ ๼ ๽ ๾ ๿ ຀ ກ ຂ ຃ ຄ ຅ ຆ ງ ຈ
+ ຉ ຊ ຋ ຌ ຍ ຎ ຏ ຐ ຑ ຒ ຓ ດ ຕ ຖ ທ ຘ ນ ບ ປ ຜ
+ ຝ ພ ຟ ຠ ມ ຢ ຣ ຤ ລ ຦ ວ ຨ ຩ ສ ຫ ຬ ອ ຮ ຯ ະ
+ ັ າ ຳ ິ ີ ຶ ື ຸ ູ ຺ ົ ຼ ຽ ຾ ຿ ເ ແ ໂ ໃ ໄ
+ ໅ ໆ ໇ ່ ້ ໊ ໋ ໌ ໍ ໎ ໏ ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘
+ ໙ ໚ ໛ ໜ ໝ ໞ ໟ ໠ ໡ ໢ ໣ ໤ ໥ ໦ ໧ ໨ ໩ ໪ ໫ ໬
+ ໭ ໮ ໯ ໰ ໱ ໲ ໳ ໴ ໵ ໶ ໷ ໸ ໹ ໺ ໻ ໼ ໽ ໾ ໿ ༀ
+ ༁ ༂ ༃ ༄ ༅ ༆ ༇ ༈ ༉ ༊ ་ ༌ ། ༎ ༏ ༐ ༑ ༒ ༓ ༔
+ ༕ ༖ ༗ ༘ ༙ ༚ ༛ ༜ ༝ ༞ ༟ ༠ ༡ ༢ ༣ ༤ ༥ ༦ ༧ ༨
+ ༩ ༪ ༫ ༬ ༭ ༮ ༯ ༰ ༱ ༲ ༳ ༴ ༵ ༶ ༷ ༸ ༹ ༺ ༻ ༼
+ ༽ ༾ ༿ ཀ ཁ ག གྷ ང ཅ ཆ ཇ ཈ ཉ ཊ ཋ ཌ ཌྷ ཎ ཏ ཐ
+ ད དྷ ན པ ཕ བ བྷ མ ཙ ཚ ཛ ཛྷ ཝ ཞ ཟ འ ཡ ར ལ ཤ
+ ཥ ས ཧ ཨ ཀྵ ཪ ཫ ཬ ཭ ཮ ཯ ཰ ཱ ི ཱི ུ ཱུ ྲྀ ཷ ླྀ
+ ཹ ེ ཻ ོ ཽ ཾ ཿ ྀ ཱྀ ྂ ྃ ྄ ྅ ྆ ྇ ྈ ྉ ྊ ྋ ྌ
+ ྍ ྎ ྏ ྐ ྑ ྒ ྒྷ ྔ ྕ ྖ ྗ ྘ ྙ ྚ ྛ ྜ ྜྷ ྞ ྟ ྠ
+ ྡ ྡྷ ྣ ྤ ྥ ྦ ྦྷ ྨ ྩ ྪ ྫ ྫྷ ྭ ྮ ྯ ྰ ྱ ྲ ླ ྴ
+ ྵ ྶ ྷ ྸ ྐྵ ྺ ྻ ྼ ྽ ྾ ྿ ࿀ ࿁ ࿂ ࿃ ࿄ ࿅ ࿆ ࿇ ࿈
+ ࿉ ࿊ ࿋ ࿌ ࿍ ࿎ ࿏ ࿐ ࿑ ࿒ ࿓ ࿔ ࿕ ࿖ ࿗ ࿘ ࿙ ࿚ ࿛ ࿜
+ ࿝ ࿞ ࿟ ࿠ ࿡ ࿢ ࿣ ࿤ ࿥ ࿦ ࿧ ࿨ ࿩ ࿪ ࿫ ࿬ ࿭ ࿮ ࿯ ࿰
+ ࿱ ࿲ ࿳ ࿴ ࿵ ࿶ ࿷ ࿸ ࿹ ࿺ ࿻ ࿼ ࿽ ࿾ ࿿ က ခ ဂ ဃ င
+ စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ
+ မ ယ ရ လ ဝ သ ဟ ဠ အ ဢ ဣ ဤ ဥ ဦ ဧ ဨ ဩ ဪ ါ ာ
+ ိ ီ ု ူ ေ ဲ ဳ ဴ ဵ ံ ့ း ္ ် ျ ြ ွ ှ ဿ ၀
+ ၁ ၂ ၃ ၄ ၅ ၆ ၇ ၈ ၉ ၊ ။ ၌ ၍ ၎ ၏ ၐ ၑ ၒ ၓ ၔ
+ ၕ ၖ ၗ ၘ ၙ ၚ ၛ ၜ ၝ ၞ ၟ ၠ ၡ ၢ ၣ ၤ ၥ ၦ ၧ ၨ
+ ၩ ၪ ၫ ၬ ၭ ၮ ၯ ၰ ၱ ၲ ၳ ၴ ၵ ၶ ၷ ၸ ၹ ၺ ၻ ၼ
+ ၽ ၾ ၿ ႀ ႁ ႂ ႃ ႄ ႅ ႆ ႇ ႈ ႉ ႊ ႋ ႌ ႍ ႎ ႏ ႐
+ ႑ ႒ ႓ ႔ ႕ ႖ ႗ ႘ ႙ ႚ ႛ ႜ ႝ ႞ ႟ Ⴀ Ⴁ Ⴂ Ⴃ Ⴄ
+ Ⴅ Ⴆ Ⴇ Ⴈ Ⴉ Ⴊ Ⴋ Ⴌ Ⴍ Ⴎ Ⴏ Ⴐ Ⴑ Ⴒ Ⴓ Ⴔ Ⴕ Ⴖ Ⴗ Ⴘ
+ Ⴙ Ⴚ Ⴛ Ⴜ Ⴝ Ⴞ Ⴟ Ⴠ Ⴡ Ⴢ Ⴣ Ⴤ Ⴥ ჆ Ⴧ ჈ ჉ ჊ ჋ ჌
+ Ⴭ ჎ ჏ ა ბ გ დ ე ვ ზ თ ი კ ლ მ ნ ო პ ჟ რ
+ ს ტ უ ფ ქ ღ ყ შ ჩ ც ძ წ ჭ ხ ჯ ჰ ჱ ჲ ჳ ჴ
+ ჵ ჶ ჷ ჸ ჹ ჺ ჻ ჼ ჽ ჾ ჿ ᄀ ᄁ ᄂ ᄃ ᄄ ᄅ ᄆ ᄇ ᄈ
+ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ᄓ ᄔ ᄕ ᄖ ᄗ ᄘ ᄙ ᄚ ᄛ ᄜ
+ ᄝ ᄞ ᄟ ᄠ ᄡ ᄢ ᄣ ᄤ ᄥ ᄦ ᄧ ᄨ ᄩ ᄪ ᄫ ᄬ ᄭ ᄮ ᄯ ᄰ
+ ᄱ ᄲ ᄳ ᄴ ᄵ ᄶ ᄷ ᄸ ᄹ ᄺ ᄻ ᄼ ᄽ ᄾ ᄿ ᅀ ᅁ ᅂ ᅃ ᅄ
+ ᅅ ᅆ ᅇ ᅈ ᅉ ᅊ ᅋ ᅌ ᅍ ᅎ ᅏ ᅐ ᅑ ᅒ ᅓ ᅔ ᅕ ᅖ ᅗ ᅘ
+ ᅙ ᅚ ᅛ ᅜ ᅝ ᅞ ᅟ ᅠ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ
+ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ᅳ ᅴ ᅵ ᅶ ᅷ ᅸ ᅹ ᅺ ᅻ ᅼ ᅽ ᅾ ᅿ ᆀ
+ ᆁ ᆂ ᆃ ᆄ ᆅ ᆆ ᆇ ᆈ ᆉ ᆊ ᆋ ᆌ ᆍ ᆎ ᆏ ᆐ ᆑ ᆒ ᆓ ᆔ
+ ᆕ ᆖ ᆗ ᆘ ᆙ ᆚ ᆛ ᆜ ᆝ ᆞ ᆟ ᆠ ᆡ ᆢ ᆣ ᆤ ᆥ ᆦ ᆧ ᆨ
+ ᆩ ᆪ ᆫ ᆬ ᆭ ᆮ ᆯ ᆰ ᆱ ᆲ ᆳ ᆴ ᆵ ᆶ ᆷ ᆸ ᆹ ᆺ ᆻ ᆼ
+ ᆽ ᆾ ᆿ ᇀ ᇁ ᇂ ᇃ ᇄ ᇅ ᇆ ᇇ ᇈ ᇉ ᇊ ᇋ ᇌ ᇍ ᇎ ᇏ ᇐ
+ ᇑ ᇒ ᇓ ᇔ ᇕ ᇖ ᇗ ᇘ ᇙ ᇚ ᇛ ᇜ ᇝ ᇞ ᇟ ᇠ ᇡ ᇢ ᇣ ᇤ
+ ᇥ ᇦ ᇧ ᇨ ᇩ ᇪ ᇫ ᇬ ᇭ ᇮ ᇯ ᇰ ᇱ ᇲ ᇳ ᇴ ᇵ ᇶ ᇷ ᇸ
+ ᇹ ᇺ ᇻ ᇼ ᇽ ᇾ ᇿ ሀ ሁ ሂ ሃ ሄ ህ ሆ ሇ ለ ሉ ሊ ላ ሌ
+ ል ሎ ሏ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ሠ
+ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ሰ ሱ ሲ ሳ ሴ
+ ስ ሶ ሷ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቇ ቈ
+ ቉ ቊ ቋ ቌ ቍ ቎ ቏ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቗ ቘ ቙ ቚ ቛ ቜ
+ ቝ ቞ ቟ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ
+ ቱ ቲ ታ ቴ ት ቶ ቷ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ኀ ኁ ኂ ኃ ኄ
+ ኅ ኆ ኇ ኈ ኉ ኊ ኋ ኌ ኍ ኎ ኏ ነ ኑ ኒ ና ኔ ን ኖ ኗ ኘ
+ ኙ ኚ ኛ ኜ ኝ ኞ ኟ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ከ ኩ ኪ ካ ኬ
+ ክ ኮ ኯ ኰ ኱ ኲ ኳ ኴ ኵ ኶ ኷ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ኿ ዀ
+ ዁ ዂ ዃ ዄ ዅ ዆ ዇ ወ ዉ ዊ ዋ ዌ ው ዎ ዏ ዐ ዑ ዒ ዓ ዔ
+ ዕ ዖ ዗ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ
+ ዩ ዪ ያ ዬ ይ ዮ ዯ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ዸ ዹ ዺ ዻ ዼ
+ ዽ ዾ ዿ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ገ ጉ ጊ ጋ ጌ ግ ጎ ጏ ጐ
+ ጑ ጒ ጓ ጔ ጕ ጖ ጗ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ጠ ጡ ጢ ጣ ጤ
+ ጥ ጦ ጧ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ጰ ጱ ጲ ጳ ጴ ጵ ጶ ጷ ጸ
+ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ፈ ፉ ፊ ፋ ፌ
+ ፍ ፎ ፏ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ ፘ ፙ ፚ ፛ ፜ ፝ ፞ ፟ ፠
+ ፡ ። ፣ ፤ ፥ ፦ ፧ ፨ ፩ ፪ ፫ ፬ ፭ ፮ ፯ ፰ ፱ ፲ ፳ ፴
+ ፵ ፶ ፷ ፸ ፹ ፺ ፻ ፼ ፽ ፾ ፿ ᎀ ᎁ ᎂ ᎃ ᎄ ᎅ ᎆ ᎇ ᎈ
+ ᎉ ᎊ ᎋ ᎌ ᎍ ᎎ ᎏ ᎐ ᎑ ᎒ ᎓ ᎔ ᎕ ᎖ ᎗ ᎘ ᎙ ᎚ ᎛ ᎜
+ ᎝ ᎞ ᎟ Ꭰ Ꭱ Ꭲ Ꭳ Ꭴ Ꭵ Ꭶ Ꭷ Ꭸ Ꭹ Ꭺ Ꭻ Ꭼ Ꭽ Ꭾ Ꭿ Ꮀ
+ Ꮁ Ꮂ Ꮃ Ꮄ Ꮅ Ꮆ Ꮇ Ꮈ Ꮉ Ꮊ Ꮋ Ꮌ Ꮍ Ꮎ Ꮏ Ꮐ Ꮑ Ꮒ Ꮓ Ꮔ
+ Ꮕ Ꮖ Ꮗ Ꮘ Ꮙ Ꮚ Ꮛ Ꮜ Ꮝ Ꮞ Ꮟ Ꮠ Ꮡ Ꮢ Ꮣ Ꮤ Ꮥ Ꮦ Ꮧ Ꮨ
+ Ꮩ Ꮪ Ꮫ Ꮬ Ꮭ Ꮮ Ꮯ Ꮰ Ꮱ Ꮲ Ꮳ Ꮴ Ꮵ Ꮶ Ꮷ Ꮸ Ꮹ Ꮺ Ꮻ Ꮼ
+ Ꮽ Ꮾ Ꮿ Ᏸ Ᏹ Ᏺ Ᏻ Ᏼ Ᏽ ᏶ ᏷ ᏸ ᏹ ᏺ ᏻ ᏼ ᏽ ᏾ ᏿ ᐀
+ ᐁ ᐂ ᐃ ᐄ ᐅ ᐆ ᐇ ᐈ ᐉ ᐊ ᐋ ᐌ ᐍ ᐎ ᐏ ᐐ ᐑ ᐒ ᐓ ᐔ
+ ᐕ ᐖ ᐗ ᐘ ᐙ ᐚ ᐛ ᐜ ᐝ ᐞ ᐟ ᐠ ᐡ ᐢ ᐣ ᐤ ᐥ ᐦ ᐧ ᐨ
+ ᐩ ᐪ ᐫ ᐬ ᐭ ᐮ ᐯ ᐰ ᐱ ᐲ ᐳ ᐴ ᐵ ᐶ ᐷ ᐸ ᐹ ᐺ ᐻ ᐼ
+ ᐽ ᐾ ᐿ ᑀ ᑁ ᑂ ᑃ ᑄ ᑅ ᑆ ᑇ ᑈ ᑉ ᑊ ᑋ ᑌ ᑍ ᑎ ᑏ ᑐ
+ ᑑ ᑒ ᑓ ᑔ ᑕ ᑖ ᑗ ᑘ ᑙ ᑚ ᑛ ᑜ ᑝ ᑞ ᑟ ᑠ ᑡ ᑢ ᑣ ᑤ
+ ᑥ ᑦ ᑧ ᑨ ᑩ ᑪ ᑫ ᑬ ᑭ ᑮ ᑯ ᑰ ᑱ ᑲ ᑳ ᑴ ᑵ ᑶ ᑷ ᑸ
+ ᑹ ᑺ ᑻ ᑼ ᑽ ᑾ ᑿ ᒀ ᒁ ᒂ ᒃ ᒄ ᒅ ᒆ ᒇ ᒈ ᒉ ᒊ ᒋ ᒌ
+ ᒍ ᒎ ᒏ ᒐ ᒑ ᒒ ᒓ ᒔ ᒕ ᒖ ᒗ ᒘ ᒙ ᒚ ᒛ ᒜ ᒝ ᒞ ᒟ ᒠ
+ ᒡ ᒢ ᒣ ᒤ ᒥ ᒦ ᒧ ᒨ ᒩ ᒪ ᒫ ᒬ ᒭ ᒮ ᒯ ᒰ ᒱ ᒲ ᒳ ᒴ
+ ᒵ ᒶ ᒷ ᒸ ᒹ ᒺ ᒻ ᒼ ᒽ ᒾ ᒿ ᓀ ᓁ ᓂ ᓃ ᓄ ᓅ ᓆ ᓇ ᓈ
+ ᓉ ᓊ ᓋ ᓌ ᓍ ᓎ ᓏ ᓐ ᓑ ᓒ ᓓ ᓔ ᓕ ᓖ ᓗ ᓘ ᓙ ᓚ ᓛ ᓜ
+ ᓝ ᓞ ᓟ ᓠ ᓡ ᓢ ᓣ ᓤ ᓥ ᓦ ᓧ ᓨ ᓩ ᓪ ᓫ ᓬ ᓭ ᓮ ᓯ ᓰ
+ ᓱ ᓲ ᓳ ᓴ ᓵ ᓶ ᓷ ᓸ ᓹ ᓺ ᓻ ᓼ ᓽ ᓾ ᓿ ᔀ ᔁ ᔂ ᔃ ᔄ
+ ᔅ ᔆ ᔇ ᔈ ᔉ ᔊ ᔋ ᔌ ᔍ ᔎ ᔏ ᔐ ᔑ ᔒ ᔓ ᔔ ᔕ ᔖ ᔗ ᔘ
+ ᔙ ᔚ ᔛ ᔜ ᔝ ᔞ ᔟ ᔠ ᔡ ᔢ ᔣ ᔤ ᔥ ᔦ ᔧ ᔨ ᔩ ᔪ ᔫ ᔬ
+ ᔭ ᔮ ᔯ ᔰ ᔱ ᔲ ᔳ ᔴ ᔵ ᔶ ᔷ ᔸ ᔹ ᔺ ᔻ ᔼ ᔽ ᔾ ᔿ ᕀ
+ ᕁ ᕂ ᕃ ᕄ ᕅ ᕆ ᕇ ᕈ ᕉ ᕊ ᕋ ᕌ ᕍ ᕎ ᕏ ᕐ ᕑ ᕒ ᕓ ᕔ
+ ᕕ ᕖ ᕗ ᕘ ᕙ ᕚ ᕛ ᕜ ᕝ ᕞ ᕟ ᕠ ᕡ ᕢ ᕣ ᕤ ᕥ ᕦ ᕧ ᕨ
+ ᕩ ᕪ ᕫ ᕬ ᕭ ᕮ ᕯ ᕰ ᕱ ᕲ ᕳ ᕴ ᕵ ᕶ ᕷ ᕸ ᕹ ᕺ ᕻ ᕼ
+ ᕽ ᕾ ᕿ ᖀ ᖁ ᖂ ᖃ ᖄ ᖅ ᖆ ᖇ ᖈ ᖉ ᖊ ᖋ ᖌ ᖍ ᖎ ᖏ ᖐ
+ ᖑ ᖒ ᖓ ᖔ ᖕ ᖖ ᖗ ᖘ ᖙ ᖚ ᖛ ᖜ ᖝ ᖞ ᖟ ᖠ ᖡ ᖢ ᖣ ᖤ
+ ᖥ ᖦ ᖧ ᖨ ᖩ ᖪ ᖫ ᖬ ᖭ ᖮ ᖯ ᖰ ᖱ ᖲ ᖳ ᖴ ᖵ ᖶ ᖷ ᖸ
+ ᖹ ᖺ ᖻ ᖼ ᖽ ᖾ ᖿ ᗀ ᗁ ᗂ ᗃ ᗄ ᗅ ᗆ ᗇ ᗈ ᗉ ᗊ ᗋ ᗌ
+ ᗍ ᗎ ᗏ ᗐ ᗑ ᗒ ᗓ ᗔ ᗕ ᗖ ᗗ ᗘ ᗙ ᗚ ᗛ ᗜ ᗝ ᗞ ᗟ ᗠ
+ ᗡ ᗢ ᗣ ᗤ ᗥ ᗦ ᗧ ᗨ ᗩ ᗪ ᗫ ᗬ ᗭ ᗮ ᗯ ᗰ ᗱ ᗲ ᗳ ᗴ
+ ᗵ ᗶ ᗷ ᗸ ᗹ ᗺ ᗻ ᗼ ᗽ ᗾ ᗿ ᘀ ᘁ ᘂ ᘃ ᘄ ᘅ ᘆ ᘇ ᘈ
+ ᘉ ᘊ ᘋ ᘌ ᘍ ᘎ ᘏ ᘐ ᘑ ᘒ ᘓ ᘔ ᘕ ᘖ ᘗ ᘘ ᘙ ᘚ ᘛ ᘜ
+ ᘝ ᘞ ᘟ ᘠ ᘡ ᘢ ᘣ ᘤ ᘥ ᘦ ᘧ ᘨ ᘩ ᘪ ᘫ ᘬ ᘭ ᘮ ᘯ ᘰ
+ ᘱ ᘲ ᘳ ᘴ ᘵ ᘶ ᘷ ᘸ ᘹ ᘺ ᘻ ᘼ ᘽ ᘾ ᘿ ᙀ ᙁ ᙂ ᙃ ᙄ
+ ᙅ ᙆ ᙇ ᙈ ᙉ ᙊ ᙋ ᙌ ᙍ ᙎ ᙏ ᙐ ᙑ ᙒ ᙓ ᙔ ᙕ ᙖ ᙗ ᙘ
+ ᙙ ᙚ ᙛ ᙜ ᙝ ᙞ ᙟ ᙠ ᙡ ᙢ ᙣ ᙤ ᙥ ᙦ ᙧ ᙨ ᙩ ᙪ ᙫ ᙬ
+ ᙭ ᙮ ᙯ ᙰ ᙱ ᙲ ᙳ ᙴ ᙵ ᙶ ᙷ ᙸ ᙹ ᙺ ᙻ ᙼ ᙽ ᙾ ᙿ  
+ ᚁ ᚂ ᚃ ᚄ ᚅ ᚆ ᚇ ᚈ ᚉ ᚊ ᚋ ᚌ ᚍ ᚎ ᚏ ᚐ ᚑ ᚒ ᚓ ᚔ
+ ᚕ ᚖ ᚗ ᚘ ᚙ ᚚ ᚛ ᚜ ᚝ ᚞ ᚟ ᚠ ᚡ ᚢ ᚣ ᚤ ᚥ ᚦ ᚧ ᚨ
+ ᚩ ᚪ ᚫ ᚬ ᚭ ᚮ ᚯ ᚰ ᚱ ᚲ ᚳ ᚴ ᚵ ᚶ ᚷ ᚸ ᚹ ᚺ ᚻ ᚼ
+ ᚽ ᚾ ᚿ ᛀ ᛁ ᛂ ᛃ ᛄ ᛅ ᛆ ᛇ ᛈ ᛉ ᛊ ᛋ ᛌ ᛍ ᛎ ᛏ ᛐ
+ ᛑ ᛒ ᛓ ᛔ ᛕ ᛖ ᛗ ᛘ ᛙ ᛚ ᛛ ᛜ ᛝ ᛞ ᛟ ᛠ ᛡ ᛢ ᛣ ᛤ
+ ᛥ ᛦ ᛧ ᛨ ᛩ ᛪ ᛫ ᛬ ᛭ ᛮ ᛯ ᛰ ᛱ ᛲ ᛳ ᛴ ᛵ ᛶ ᛷ ᛸ
+ ᛹ ᛺ ᛻ ᛼ ᛽ ᛾ ᛿ ᜀ ᜁ ᜂ ᜃ ᜄ ᜅ ᜆ ᜇ ᜈ ᜉ ᜊ ᜋ ᜌ
+ ᜍ ᜎ ᜏ ᜐ ᜑ ᜒ ᜓ ᜔ ᜕ ᜖ ᜗ ᜘ ᜙ ᜚ ᜛ ᜜ ᜝ ᜞ ᜟ ᜠ
+ ᜡ ᜢ ᜣ ᜤ ᜥ ᜦ ᜧ ᜨ ᜩ ᜪ ᜫ ᜬ ᜭ ᜮ ᜯ ᜰ ᜱ ᜲ ᜳ ᜴
+ ᜵ ᜶ ᜷ ᜸ ᜹ ᜺ ᜻ ᜼ ᜽ ᜾ ᜿ ᝀ ᝁ ᝂ ᝃ ᝄ ᝅ ᝆ ᝇ ᝈ
+ ᝉ ᝊ ᝋ ᝌ ᝍ ᝎ ᝏ ᝐ ᝑ ᝒ ᝓ ᝔ ᝕ ᝖ ᝗ ᝘ ᝙ ᝚ ᝛ ᝜
+ ᝝ ᝞ ᝟ ᝠ ᝡ ᝢ ᝣ ᝤ ᝥ ᝦ ᝧ ᝨ ᝩ ᝪ ᝫ ᝬ ᝭ ᝮ ᝯ ᝰ
+ ᝱ ᝲ ᝳ ᝴ ᝵ ᝶ ᝷ ᝸ ᝹ ᝺ ᝻ ᝼ ᝽ ᝾ ᝿ ក ខ គ ឃ ង
+ ច ឆ ជ ឈ ញ ដ ឋ ឌ ឍ ណ ត ថ ទ ធ ន ប ផ ព ភ ម
+ យ រ ល វ ឝ ឞ ស ហ ឡ អ ឣ ឤ ឥ ឦ ឧ ឨ ឩ ឪ ឫ ឬ
+ ឭ ឮ ឯ ឰ ឱ ឲ ឳ ឴ ឵ ា ិ ី ឹ ឺ ុ ូ ួ ើ ឿ ៀ
+ េ ែ ៃ ោ ៅ ំ ះ ៈ ៉ ៊ ់ ៌ ៍ ៎ ៏ ័ ៑ ្ ៓ ។
+ ៕ ៖ ៗ ៘ ៙ ៚ ៛ ៜ ៝ ៞ ៟ ០ ១ ២ ៣ ៤ ៥ ៦ ៧ ៨
+ ៩ ៪ ៫ ៬ ៭ ៮ ៯ ៰ ៱ ៲ ៳ ៴ ៵ ៶ ៷ ៸ ៹ ៺ ៻ ៼
+ ៽ ៾ ៿ ᠀ ᠁ ᠂ ᠃ ᠄ ᠅ ᠆ ᠇ ᠈ ᠉ ᠊ ᠋ ᠌ ᠍ ᠎ ᠏ ᠐
+ ᠑ ᠒ ᠓ ᠔ ᠕ ᠖ ᠗ ᠘ ᠙ ᠚ ᠛ ᠜ ᠝ ᠞ ᠟ ᠠ ᠡ ᠢ ᠣ ᠤ
+ ᠥ ᠦ ᠧ ᠨ ᠩ ᠪ ᠫ ᠬ ᠭ ᠮ ᠯ ᠰ ᠱ ᠲ ᠳ ᠴ ᠵ ᠶ ᠷ ᠸ
+ ᠹ ᠺ ᠻ ᠼ ᠽ ᠾ ᠿ ᡀ ᡁ ᡂ ᡃ ᡄ ᡅ ᡆ ᡇ ᡈ ᡉ ᡊ ᡋ ᡌ
+ ᡍ ᡎ ᡏ ᡐ ᡑ ᡒ ᡓ ᡔ ᡕ ᡖ ᡗ ᡘ ᡙ ᡚ ᡛ ᡜ ᡝ ᡞ ᡟ ᡠ
+ ᡡ ᡢ ᡣ ᡤ ᡥ ᡦ ᡧ ᡨ ᡩ ᡪ ᡫ ᡬ ᡭ ᡮ ᡯ ᡰ ᡱ ᡲ ᡳ ᡴ
+ ᡵ ᡶ ᡷ ᡸ ᡹ ᡺ ᡻ ᡼ ᡽ ᡾ ᡿ ᢀ ᢁ ᢂ ᢃ ᢄ ᢅ ᢆ ᢇ ᢈ
+ ᢉ ᢊ ᢋ ᢌ ᢍ ᢎ ᢏ ᢐ ᢑ ᢒ ᢓ ᢔ ᢕ ᢖ ᢗ ᢘ ᢙ ᢚ ᢛ ᢜ
+ ᢝ ᢞ ᢟ ᢠ ᢡ ᢢ ᢣ ᢤ ᢥ ᢦ ᢧ ᢨ ᢩ ᢪ ᢫ ᢬ ᢭ ᢮ ᢯ ᢰ
+ ᢱ ᢲ ᢳ ᢴ ᢵ ᢶ ᢷ ᢸ ᢹ ᢺ ᢻ ᢼ ᢽ ᢾ ᢿ ᣀ ᣁ ᣂ ᣃ ᣄ
+ ᣅ ᣆ ᣇ ᣈ ᣉ ᣊ ᣋ ᣌ ᣍ ᣎ ᣏ ᣐ ᣑ ᣒ ᣓ ᣔ ᣕ ᣖ ᣗ ᣘ
+ ᣙ ᣚ ᣛ ᣜ ᣝ ᣞ ᣟ ᣠ ᣡ ᣢ ᣣ ᣤ ᣥ ᣦ ᣧ ᣨ ᣩ ᣪ ᣫ ᣬ
+ ᣭ ᣮ ᣯ ᣰ ᣱ ᣲ ᣳ ᣴ ᣵ ᣶ ᣷ ᣸ ᣹ ᣺ ᣻ ᣼ ᣽ ᣾ ᣿ ᤀ
+ ᤁ ᤂ ᤃ ᤄ ᤅ ᤆ ᤇ ᤈ ᤉ ᤊ ᤋ ᤌ ᤍ ᤎ ᤏ ᤐ ᤑ ᤒ ᤓ ᤔ
+ ᤕ ᤖ ᤗ ᤘ ᤙ ᤚ ᤛ ᤜ ᤝ ᤞ ᤟ ᤠ ᤡ ᤢ ᤣ ᤤ ᤥ ᤦ ᤧ ᤨ
+ ᤩ ᤪ ᤫ ᤬ ᤭ ᤮ ᤯ ᤰ ᤱ ᤲ ᤳ ᤴ ᤵ ᤶ ᤷ ᤸ ᤹ ᤺ ᤻ ᤼
+ ᤽ ᤾ ᤿ ᥀ ᥁ ᥂ ᥃ ᥄ ᥅ ᥆ ᥇ ᥈ ᥉ ᥊ ᥋ ᥌ ᥍ ᥎ ᥏ ᥐ
+ ᥑ ᥒ ᥓ ᥔ ᥕ ᥖ ᥗ ᥘ ᥙ ᥚ ᥛ ᥜ ᥝ ᥞ ᥟ ᥠ ᥡ ᥢ ᥣ ᥤ
+ ᥥ ᥦ ᥧ ᥨ ᥩ ᥪ ᥫ ᥬ ᥭ ᥮ ᥯ ᥰ ᥱ ᥲ ᥳ ᥴ ᥵ ᥶ ᥷ ᥸
+ ᥹ ᥺ ᥻ ᥼ ᥽ ᥾ ᥿ ᦀ ᦁ ᦂ ᦃ ᦄ ᦅ ᦆ ᦇ ᦈ ᦉ ᦊ ᦋ ᦌ
+ ᦍ ᦎ ᦏ ᦐ ᦑ ᦒ ᦓ ᦔ ᦕ ᦖ ᦗ ᦘ ᦙ ᦚ ᦛ ᦜ ᦝ ᦞ ᦟ ᦠ
+ ᦡ ᦢ ᦣ ᦤ ᦥ ᦦ ᦧ ᦨ ᦩ ᦪ ᦫ ᦬ ᦭ ᦮ ᦯ ᦰ ᦱ ᦲ ᦳ ᦴ
+ ᦵ ᦶ ᦷ ᦸ ᦹ ᦺ ᦻ ᦼ ᦽ ᦾ ᦿ ᧀ ᧁ ᧂ ᧃ ᧄ ᧅ ᧆ ᧇ ᧈ
+ ᧉ ᧊ ᧋ ᧌ ᧍ ᧎ ᧏ ᧐ ᧑ ᧒ ᧓ ᧔ ᧕ ᧖ ᧗ ᧘ ᧙ ᧚ ᧛ ᧜
+ ᧝ ᧞ ᧟ ᧠ ᧡ ᧢ ᧣ ᧤ ᧥ ᧦ ᧧ ᧨ ᧩ ᧪ ᧫ ᧬ ᧭ ᧮ ᧯ ᧰
+ ᧱ ᧲ ᧳ ᧴ ᧵ ᧶ ᧷ ᧸ ᧹ ᧺ ᧻ ᧼ ᧽ ᧾ ᧿ ᨀ ᨁ ᨂ ᨃ ᨄ
+ ᨅ ᨆ ᨇ ᨈ ᨉ ᨊ ᨋ ᨌ ᨍ ᨎ ᨏ ᨐ ᨑ ᨒ ᨓ ᨔ ᨕ ᨖ ᨗ ᨘ
+ ᨙ ᨚ ᨛ ᨜ ᨝ ᨞ ᨟ ᨠ ᨡ ᨢ ᨣ ᨤ ᨥ ᨦ ᨧ ᨨ ᨩ ᨪ ᨫ ᨬ
+ ᨭ ᨮ ᨯ ᨰ ᨱ ᨲ ᨳ ᨴ ᨵ ᨶ ᨷ ᨸ ᨹ ᨺ ᨻ ᨼ ᨽ ᨾ ᨿ ᩀ
+ ᩁ ᩂ ᩃ ᩄ ᩅ ᩆ ᩇ ᩈ ᩉ ᩊ ᩋ ᩌ ᩍ ᩎ ᩏ ᩐ ᩑ ᩒ ᩓ ᩔ
+ ᩕ ᩖ ᩗ ᩘ ᩙ ᩚ ᩛ ᩜ ᩝ ᩞ ᩟ ᩠ ᩡ ᩢ ᩣ ᩤ ᩥ ᩦ ᩧ ᩨ
+ ᩩ ᩪ ᩫ ᩬ ᩭ ᩮ ᩯ ᩰ ᩱ ᩲ ᩳ ᩴ ᩵ ᩶ ᩷ ᩸ ᩹ ᩺ ᩻ ᩼
+ ᩽ ᩾ ᩿ ᪀ ᪁ ᪂ ᪃ ᪄ ᪅ ᪆ ᪇ ᪈ ᪉ ᪊ ᪋ ᪌ ᪍ ᪎ ᪏ ᪐
+ ᪑ ᪒ ᪓ ᪔ ᪕ ᪖ ᪗ ᪘ ᪙ ᪚ ᪛ ᪜ ᪝ ᪞ ᪟ ᪠ ᪡ ᪢ ᪣ ᪤
+ ᪥ ᪦ ᪧ ᪨ ᪩ ᪪ ᪫ ᪬ ᪭ ᪮ ᪯ ᪰ ᪱ ᪲ ᪳ ᪴ ᪵ ᪶ ᪷ ᪸
+ ᪹ ᪺ ᪻ ᪼ ᪽ ᪾ ᪿ ᫀ ᫁ ᫂ ᫃ ᫄ ᫅ ᫆ ᫇ ᫈ ᫉ ᫊ ᫋ ᫌ
+ ᫍ ᫎ ᫏ ᫐ ᫑ ᫒ ᫓ ᫔ ᫕ ᫖ ᫗ ᫘ ᫙ ᫚ ᫛ ᫜ ᫝ ᫞ ᫟ ᫠
+ ᫡ ᫢ ᫣ ᫤ ᫥ ᫦ ᫧ ᫨ ᫩ ᫪ ᫫ ᫬ ᫭ ᫮ ᫯ ᫰ ᫱ ᫲ ᫳ ᫴
+ ᫵ ᫶ ᫷ ᫸ ᫹ ᫺ ᫻ ᫼ ᫽ ᫾ ᫿ ᬀ ᬁ ᬂ ᬃ ᬄ ᬅ ᬆ ᬇ ᬈ
+ ᬉ ᬊ ᬋ ᬌ ᬍ ᬎ ᬏ ᬐ ᬑ ᬒ ᬓ ᬔ ᬕ ᬖ ᬗ ᬘ ᬙ ᬚ ᬛ ᬜ
+ ᬝ ᬞ ᬟ ᬠ ᬡ ᬢ ᬣ ᬤ ᬥ ᬦ ᬧ ᬨ ᬩ ᬪ ᬫ ᬬ ᬭ ᬮ ᬯ ᬰ
+ ᬱ ᬲ ᬳ ᬴ ᬵ ᬶ ᬷ ᬸ ᬹ ᬺ ᬻ ᬼ ᬽ ᬾ ᬿ ᭀ ᭁ ᭂ ᭃ ᭄
+ ᭅ ᭆ ᭇ ᭈ ᭉ ᭊ ᭋ ᭌ ᭍ ᭎ ᭏ ᭐ ᭑ ᭒ ᭓ ᭔ ᭕ ᭖ ᭗ ᭘
+ ᭙ ᭚ ᭛ ᭜ ᭝ ᭞ ᭟ ᭠ ᭡ ᭢ ᭣ ᭤ ᭥ ᭦ ᭧ ᭨ ᭩ ᭪ ᭫ ᭬
+ ᭭ ᭮ ᭯ ᭰ ᭱ ᭲ ᭳ ᭴ ᭵ ᭶ ᭷ ᭸ ᭹ ᭺ ᭻ ᭼ ᭽ ᭾ ᭿ ᮀ
+ ᮁ ᮂ ᮃ ᮄ ᮅ ᮆ ᮇ ᮈ ᮉ ᮊ ᮋ ᮌ ᮍ ᮎ ᮏ ᮐ ᮑ ᮒ ᮓ ᮔ
+ ᮕ ᮖ ᮗ ᮘ ᮙ ᮚ ᮛ ᮜ ᮝ ᮞ ᮟ ᮠ ᮡ ᮢ ᮣ ᮤ ᮥ ᮦ ᮧ ᮨ
+ ᮩ ᮪ ᮫ ᮬ ᮭ ᮮ ᮯ ᮰ ᮱ ᮲ ᮳ ᮴ ᮵ ᮶ ᮷ ᮸ ᮹ ᮺ ᮻ ᮼ
+ ᮽ ᮾ ᮿ ᯀ ᯁ ᯂ ᯃ ᯄ ᯅ ᯆ ᯇ ᯈ ᯉ ᯊ ᯋ ᯌ ᯍ ᯎ ᯏ ᯐ
+ ᯑ ᯒ ᯓ ᯔ ᯕ ᯖ ᯗ ᯘ ᯙ ᯚ ᯛ ᯜ ᯝ ᯞ ᯟ ᯠ ᯡ ᯢ ᯣ ᯤ
+ ᯥ ᯦ ᯧ ᯨ ᯩ ᯪ ᯫ ᯬ ᯭ ᯮ ᯯ ᯰ ᯱ ᯲ ᯳ ᯴ ᯵ ᯶ ᯷ ᯸
+ ᯹ ᯺ ᯻ ᯼ ᯽ ᯾ ᯿ ᰀ ᰁ ᰂ ᰃ ᰄ ᰅ ᰆ ᰇ ᰈ ᰉ ᰊ ᰋ ᰌ
+ ᰍ ᰎ ᰏ ᰐ ᰑ ᰒ ᰓ ᰔ ᰕ ᰖ ᰗ ᰘ ᰙ ᰚ ᰛ ᰜ ᰝ ᰞ ᰟ ᰠ
+ ᰡ ᰢ ᰣ ᰤ ᰥ ᰦ ᰧ ᰨ ᰩ ᰪ ᰫ ᰬ ᰭ ᰮ ᰯ ᰰ ᰱ ᰲ ᰳ ᰴ
+ ᰵ ᰶ ᰷ ᰸ ᰹ ᰺ ᰻ ᰼ ᰽ ᰾ ᰿ ᱀ ᱁ ᱂ ᱃ ᱄ ᱅ ᱆ ᱇ ᱈
+ ᱉ ᱊ ᱋ ᱌ ᱍ ᱎ ᱏ ᱐ ᱑ ᱒ ᱓ ᱔ ᱕ ᱖ ᱗ ᱘ ᱙ ᱚ ᱛ ᱜ
+ ᱝ ᱞ ᱟ ᱠ ᱡ ᱢ ᱣ ᱤ ᱥ ᱦ ᱧ ᱨ ᱩ ᱪ ᱫ ᱬ ᱭ ᱮ ᱯ ᱰ
+ ᱱ ᱲ ᱳ ᱴ ᱵ ᱶ ᱷ ᱸ ᱹ ᱺ ᱻ ᱼ ᱽ ᱾ ᱿ ᲀ ᲁ ᲂ ᲃ ᲄ
+ ᲅ ᲆ ᲇ ᲈ Ᲊ ᲊ ᲋ ᲌ ᲍ ᲎ ᲏ Ა Ბ Გ Დ Ე Ვ Ზ Თ Ი
+ Კ Ლ Მ Ნ Ო Პ Ჟ Რ Ს Ტ Უ Ფ Ქ Ღ Ყ Შ Ჩ Ც Ძ Წ
+ Ჭ Ხ Ჯ Ჰ Ჱ Ჲ Ჳ Ჴ Ჵ Ჶ Ჷ Ჸ Ჹ Ჺ ᲻ ᲼ Ჽ Ჾ Ჿ ᳀
+ ᳁ ᳂ ᳃ ᳄ ᳅ ᳆ ᳇ ᳈ ᳉ ᳊ ᳋ ᳌ ᳍ ᳎ ᳏ ᳐ ᳑ ᳒ ᳓ ᳔
+ ᳕ ᳖ ᳗ ᳘ ᳙ ᳚ ᳛ ᳜ ᳝ ᳞ ᳟ ᳠ ᳡ ᳢ ᳣ ᳤ ᳥ ᳦ ᳧ ᳨
+ ᳩ ᳪ ᳫ ᳬ ᳭ ᳮ ᳯ ᳰ ᳱ ᳲ ᳳ ᳴ ᳵ ᳶ ᳷ ᳸ ᳹ ᳺ ᳻ ᳼
+ ᳽ ᳾ ᳿ ᴀ ᴁ ᴂ ᴃ ᴄ ᴅ ᴆ ᴇ ᴈ ᴉ ᴊ ᴋ ᴌ ᴍ ᴎ ᴏ ᴐ
+ ᴑ ᴒ ᴓ ᴔ ᴕ ᴖ ᴗ ᴘ ᴙ ᴚ ᴛ ᴜ ᴝ ᴞ ᴟ ᴠ ᴡ ᴢ ᴣ ᴤ
+ ᴥ ᴦ ᴧ ᴨ ᴩ ᴪ ᴫ ᴬ ᴭ ᴮ ᴯ ᴰ ᴱ ᴲ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ
+ ᴹ ᴺ ᴻ ᴼ ᴽ ᴾ ᴿ ᵀ ᵁ ᵂ ᵃ ᵄ ᵅ ᵆ ᵇ ᵈ ᵉ ᵊ ᵋ ᵌ
+ ᵍ ᵎ ᵏ ᵐ ᵑ ᵒ ᵓ ᵔ ᵕ ᵖ ᵗ ᵘ ᵙ ᵚ ᵛ ᵜ ᵝ ᵞ ᵟ ᵠ
+ ᵡ ᵢ ᵣ ᵤ ᵥ ᵦ ᵧ ᵨ ᵩ ᵪ ᵫ ᵬ ᵭ ᵮ ᵯ ᵰ ᵱ ᵲ ᵳ ᵴ
+ ᵵ ᵶ ᵷ ᵸ ᵹ ᵺ ᵻ ᵼ ᵽ ᵾ ᵿ ᶀ ᶁ ᶂ ᶃ ᶄ ᶅ ᶆ ᶇ ᶈ
+ ᶉ ᶊ ᶋ ᶌ ᶍ ᶎ ᶏ ᶐ ᶑ ᶒ ᶓ ᶔ ᶕ ᶖ ᶗ ᶘ ᶙ ᶚ ᶛ ᶜ
+ ᶝ ᶞ ᶟ ᶠ ᶡ ᶢ ᶣ ᶤ ᶥ ᶦ ᶧ ᶨ ᶩ ᶪ ᶫ ᶬ ᶭ ᶮ ᶯ ᶰ
+ ᶱ ᶲ ᶳ ᶴ ᶵ ᶶ ᶷ ᶸ ᶹ ᶺ ᶻ ᶼ ᶽ ᶾ ᶿ ᷀ ᷁ ᷂ ᷃ ᷄
+ ᷅ ᷆ ᷇ ᷈ ᷉ ᷊ ᷋ ᷌ ᷍ ᷎ ᷏ ᷐ ᷑ ᷒ ᷓ ᷔ ᷕ ᷖ ᷗ ᷘ
+ ᷙ ᷚ ᷛ ᷜ ᷝ ᷞ ᷟ ᷠ ᷡ ᷢ ᷣ ᷤ ᷥ ᷦ ᷧ ᷨ ᷩ ᷪ ᷫ ᷬ
+ ᷭ ᷮ ᷯ ᷰ ᷱ ᷲ ᷳ ᷴ ᷵ ᷶ ᷷ ᷸ ᷹ ᷺ ᷻ ᷼ ᷽ ᷾ ᷿ Ḁ
+ ḁ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ḉ ḉ Ḋ ḋ Ḍ ḍ Ḏ ḏ Ḑ ḑ Ḓ ḓ Ḕ
+ ḕ Ḗ ḗ Ḙ ḙ Ḛ ḛ Ḝ ḝ Ḟ ḟ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ
+ ḩ Ḫ ḫ Ḭ ḭ Ḯ ḯ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḹ ḹ Ḻ ḻ Ḽ
+ ḽ Ḿ ḿ Ṁ ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṋ ṋ Ṍ ṍ Ṏ ṏ Ṑ
+ ṑ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṝ ṝ Ṟ ṟ Ṡ ṡ Ṣ ṣ Ṥ
+ ṥ Ṧ ṧ Ṩ ṩ Ṫ ṫ Ṭ ṭ Ṯ ṯ Ṱ ṱ Ṳ ṳ Ṵ ṵ Ṷ ṷ Ṹ
+ ṹ Ṻ ṻ Ṽ ṽ Ṿ ṿ Ẁ ẁ Ẃ ẃ Ẅ ẅ Ẇ ẇ Ẉ ẉ Ẋ ẋ Ẍ
+ ẍ Ẏ ẏ Ẑ ẑ Ẓ ẓ Ẕ ẕ ẖ ẗ ẘ ẙ ẚ ẛ ẜ ẝ ẞ ẟ Ạ
+ ạ Ả ả Ấ ấ Ầ ầ Ẩ ẩ Ẫ ẫ Ậ ậ Ắ ắ Ằ ằ Ẳ ẳ Ẵ
+ ẵ Ặ ặ Ẹ ẹ Ẻ ẻ Ẽ ẽ Ế ế Ề ề Ể ể Ễ ễ Ệ ệ Ỉ
+ ỉ Ị ị Ọ ọ Ỏ ỏ Ố ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ớ ớ Ờ
+ ờ Ở ở Ỡ ỡ Ợ ợ Ụ ụ Ủ ủ Ứ ứ Ừ ừ Ử ử Ữ ữ Ự
+ ự Ỳ ỳ Ỵ ỵ Ỷ ỷ Ỹ ỹ Ỻ ỻ Ỽ ỽ Ỿ ỿ ἀ ἁ ἂ ἃ ἄ
+ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ ἐ ἑ ἒ ἓ ἔ ἕ ἖ ἗ Ἐ
+ Ἑ Ἒ Ἓ Ἔ Ἕ ἞ ἟ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ
+ Ἥ Ἦ Ἧ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ ὀ
+ ὁ ὂ ὃ ὄ ὅ ὆ ὇ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ ὎ ὏ ὐ ὑ ὒ ὓ ὔ
+ ὕ ὖ ὗ ὘ Ὑ ὚ Ὓ ὜ Ὕ ὞ Ὗ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ
+ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ
+ ώ ὾ ὿ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ᾎ ᾏ ᾐ
+ ᾑ ᾒ ᾓ ᾔ ᾕ ᾖ ᾗ ᾘ ᾙ ᾚ ᾛ ᾜ ᾝ ᾞ ᾟ ᾠ ᾡ ᾢ ᾣ ᾤ
+ ᾥ ᾦ ᾧ ᾨ ᾩ ᾪ ᾫ ᾬ ᾭ ᾮ ᾯ ᾰ ᾱ ᾲ ᾳ ᾴ ᾵ ᾶ ᾷ Ᾰ
+ Ᾱ Ὰ Ά ᾼ ᾽ ι ᾿ ῀ ῁ ῂ ῃ ῄ ῅ ῆ ῇ Ὲ Έ Ὴ Ή ῌ
+ ῍ ῎ ῏ ῐ ῑ ῒ ΐ ῔ ῕ ῖ ῗ Ῐ Ῑ Ὶ Ί ῜ ῝ ῞ ῟ ῠ
+ ῡ ῢ ΰ ῤ ῥ ῦ ῧ Ῠ Ῡ Ὺ Ύ Ῥ ῭ ΅ ` ῰ ῱ ῲ ῳ ῴ
+ ῵ ῶ ῷ Ὸ Ό Ὼ Ώ ῼ ´ ῾ ῿                  
+     ​ ‌ ‍ ‎ ‏ ‐ ‑ ‒ – — ― ‖ ‗ ‘ ’ ‚ ‛ “
+ ” „ ‟ † ‡ • ‣ ․ ‥ … ‧ 
 
 ‪ ‫ ‬ ‭ ‮   ‰
+ ‱ ′ ″ ‴ ‵ ‶ ‷ ‸ ‹ › ※ ‼ ‽ ‾ ‿ ⁀ ⁁ ⁂ ⁃ ⁄
+ ⁅ ⁆ ⁇ ⁈ ⁉ ⁊ ⁋ ⁌ ⁍ ⁎ ⁏ ⁐ ⁑ ⁒ ⁓ ⁔ ⁕ ⁖ ⁗ ⁘
+ ⁙ ⁚ ⁛ ⁜ ⁝ ⁞   ⁠ ⁡ ⁢ ⁣ ⁤ ⁥ ⁦ ⁧ ⁨ ⁩   
+    ⁰ ⁱ ⁲ ⁳ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ₀
+ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ ₏ ₐ ₑ ₒ ₓ ₔ
+ ₕ ₖ ₗ ₘ ₙ ₚ ₛ ₜ ₝ ₞ ₟ ₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ ₨
+ ₩ ₪ ₫ € ₭ ₮ ₯ ₰ ₱ ₲ ₳ ₴ ₵ ₶ ₷ ₸ ₹ ₺ ₻ ₼
+ ₽ ₾ ₿ ⃀ ⃁ ⃂ ⃃ ⃄ ⃅ ⃆ ⃇ ⃈ ⃉ ⃊ ⃋ ⃌ ⃍ ⃎ ⃏ ⃐
+ ⃑ ⃒ ⃓ ⃔ ⃕ ⃖ ⃗ ⃘ ⃙ ⃚ ⃛ ⃜ ⃝ ⃞ ⃟ ⃠ ⃡ ⃢ ⃣ ⃤
+ ⃥ ⃦ ⃧ ⃨ ⃩ ⃪ ⃫ ⃬ ⃭ ⃮ ⃯ ⃰ ⃱ ⃲ ⃳ ⃴ ⃵ ⃶ ⃷ ⃸
+ ⃹ ⃺ ⃻ ⃼ ⃽ ⃾ ⃿ ℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ
+ ℍ ℎ ℏ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟ ℠
+ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ ℰ ℱ Ⅎ ℳ ℴ
+ ℵ ℶ ℷ ℸ ℹ ℺ ℻ ℼ ℽ ℾ ℿ ⅀ ⅁ ⅂ ⅃ ⅄ ⅅ ⅆ ⅇ ⅈ
+ ⅉ ⅊ ⅋ ⅌ ⅍ ⅎ ⅏ ⅐ ⅑ ⅒ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜
+ ⅝ ⅞ ⅟ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ ⅰ
+ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ ↀ ↁ ↂ Ↄ ↄ
+ ↅ ↆ ↇ ↈ ↉ ↊ ↋ ↌ ↍ ↎ ↏ ← ↑ → ↓ ↔ ↕ ↖ ↗ ↘
+ ↙ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬
+ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿ ⇀
+ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔
+ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨
+ ⇩ ⇪ ⇫ ⇬ ⇭ ⇮ ⇯ ⇰ ⇱ ⇲ ⇳ ⇴ ⇵ ⇶ ⇷ ⇸ ⇹ ⇺ ⇻ ⇼
+ ⇽ ⇾ ⇿ ∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ ∐
+ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ ∠ ∡ ∢ ∣ ∤
+ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸
+ ∹ ∺ ∻ ∼ ∽ ∾ ∿ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌
+ ≍ ≎ ≏ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≠
+ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴
+ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈
+ ⊉ ⊊ ⊋ ⊌ ⊍ ⊎ ⊏ ⊐ ⊑ ⊒ ⊓ ⊔ ⊕ ⊖ ⊗ ⊘ ⊙ ⊚ ⊛ ⊜
+ ⊝ ⊞ ⊟ ⊠ ⊡ ⊢ ⊣ ⊤ ⊥ ⊦ ⊧ ⊨ ⊩ ⊪ ⊫ ⊬ ⊭ ⊮ ⊯ ⊰
+ ⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⊸ ⊹ ⊺ ⊻ ⊼ ⊽ ⊾ ⊿ ⋀ ⋁ ⋂ ⋃ ⋄
+ ⋅ ⋆ ⋇ ⋈ ⋉ ⋊ ⋋ ⋌ ⋍ ⋎ ⋏ ⋐ ⋑ ⋒ ⋓ ⋔ ⋕ ⋖ ⋗ ⋘
+ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟ ⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬
+ ⋭ ⋮ ⋯ ⋰ ⋱ ⋲ ⋳ ⋴ ⋵ ⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿ ⌀
+ ⌁ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏ ⌐ ⌑ ⌒ ⌓ ⌔
+ ⌕ ⌖ ⌗ ⌘ ⌙ ⌚ ⌛ ⌜ ⌝ ⌞ ⌟ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⌨
+ 〈 〉 ⌫ ⌬ ⌭ ⌮ ⌯ ⌰ ⌱ ⌲ ⌳ ⌴ ⌵ ⌶ ⌷ ⌸ ⌹ ⌺ ⌻ ⌼
+ ⌽ ⌾ ⌿ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇ ⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏ ⍐
+ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗ ⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟ ⍠ ⍡ ⍢ ⍣ ⍤
+ ⍥ ⍦ ⍧ ⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯ ⍰ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸
+ ⍹ ⍺ ⍻ ⍼ ⍽ ⍾ ⍿ ⎀ ⎁ ⎂ ⎃ ⎄ ⎅ ⎆ ⎇ ⎈ ⎉ ⎊ ⎋ ⎌
+ ⎍ ⎎ ⎏ ⎐ ⎑ ⎒ ⎓ ⎔ ⎕ ⎖ ⎗ ⎘ ⎙ ⎚ ⎛ ⎜ ⎝ ⎞ ⎟ ⎠
+ ⎡ ⎢ ⎣ ⎤ ⎥ ⎦ ⎧ ⎨ ⎩ ⎪ ⎫ ⎬ ⎭ ⎮ ⎯ ⎰ ⎱ ⎲ ⎳ ⎴
+ ⎵ ⎶ ⎷ ⎸ ⎹ ⎺ ⎻ ⎼ ⎽ ⎾ ⎿ ⏀ ⏁ ⏂ ⏃ ⏄ ⏅ ⏆ ⏇ ⏈
+ ⏉ ⏊ ⏋ ⏌ ⏍ ⏎ ⏏ ⏐ ⏑ ⏒ ⏓ ⏔ ⏕ ⏖ ⏗ ⏘ ⏙ ⏚ ⏛ ⏜
+ ⏝ ⏞ ⏟ ⏠ ⏡ ⏢ ⏣ ⏤ ⏥ ⏦ ⏧ ⏨ ⏩ ⏪ ⏫ ⏬ ⏭ ⏮ ⏯ ⏰
+ ⏱ ⏲ ⏳ ⏴ ⏵ ⏶ ⏷ ⏸ ⏹ ⏺ ⏻ ⏼ ⏽ ⏾ ⏿ ␀ ␁ ␂ ␃ ␄
+ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘
+ ␙ ␚ ␛ ␜ ␝ ␞ ␟ ␠ ␡ ␢ ␣ ␤ ␥ ␦ ␧ ␨ ␩ ␪ ␫ ␬
+ ␭ ␮ ␯ ␰ ␱ ␲ ␳ ␴ ␵ ␶ ␷ ␸ ␹ ␺ ␻ ␼ ␽ ␾ ␿ ⑀
+ ⑁ ⑂ ⑃ ⑄ ⑅ ⑆ ⑇ ⑈ ⑉ ⑊ ⑋ ⑌ ⑍ ⑎ ⑏ ⑐ ⑑ ⑒ ⑓ ⑔
+ ⑕ ⑖ ⑗ ⑘ ⑙ ⑚ ⑛ ⑜ ⑝ ⑞ ⑟ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨
+ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼
+ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐
+ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤
+ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ
+ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ
+ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ
+ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
+ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿ ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈
+ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├
+ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰
+ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄
+ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘
+ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬
+ ╭ ╮ ╯ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿ ▀
+ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏ ▐ ░ ▒ ▓ ▔
+ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟ ■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨
+ ▩ ▪ ▫ ▬ ▭ ▮ ▯ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼
+ ▽ ▾ ▿ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ● ◐
+ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ◢ ◣ ◤
+ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯ ◰ ◱ ◲ ◳ ◴ ◵ ◶ ◷ ◸
+ ◹ ◺ ◻ ◼ ◽ ◾ ◿ ☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌
+ ☍ ☎ ☏ ☐ ☑ ☒ ☓ ☔ ☕ ☖ ☗ ☘ ☙ ☚ ☛ ☜ ☝ ☞ ☟ ☠
+ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☫ ☬ ☭ ☮ ☯ ☰ ☱ ☲ ☳ ☴
+ ☵ ☶ ☷ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈
+ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜
+ ♝ ♞ ♟ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♨ ♩ ♪ ♫ ♬ ♭ ♮ ♯ ♰
+ ♱ ♲ ♳ ♴ ♵ ♶ ♷ ♸ ♹ ♺ ♻ ♼ ♽ ♾ ♿ ⚀ ⚁ ⚂ ⚃ ⚄
+ ⚅ ⚆ ⚇ ⚈ ⚉ ⚊ ⚋ ⚌ ⚍ ⚎ ⚏ ⚐ ⚑ ⚒ ⚓ ⚔ ⚕ ⚖ ⚗ ⚘
+ ⚙ ⚚ ⚛ ⚜ ⚝ ⚞ ⚟ ⚠ ⚡ ⚢ ⚣ ⚤ ⚥ ⚦ ⚧ ⚨ ⚩ ⚪ ⚫ ⚬
+ ⚭ ⚮ ⚯ ⚰ ⚱ ⚲ ⚳ ⚴ ⚵ ⚶ ⚷ ⚸ ⚹ ⚺ ⚻ ⚼ ⚽ ⚾ ⚿ ⛀
+ ⛁ ⛂ ⛃ ⛄ ⛅ ⛆ ⛇ ⛈ ⛉ ⛊ ⛋ ⛌ ⛍ ⛎ ⛏ ⛐ ⛑ ⛒ ⛓ ⛔
+ ⛕ ⛖ ⛗ ⛘ ⛙ ⛚ ⛛ ⛜ ⛝ ⛞ ⛟ ⛠ ⛡ ⛢ ⛣ ⛤ ⛥ ⛦ ⛧ ⛨
+ ⛩ ⛪ ⛫ ⛬ ⛭ ⛮ ⛯ ⛰ ⛱ ⛲ ⛳ ⛴ ⛵ ⛶ ⛷ ⛸ ⛹ ⛺ ⛻ ⛼
+ ⛽ ⛾ ⛿ ✀ ✁ ✂ ✃ ✄ ✅ ✆ ✇ ✈ ✉ ✊ ✋ ✌ ✍ ✎ ✏ ✐
+ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ ✠ ✡ ✢ ✣ ✤
+ ✥ ✦ ✧ ✨ ✩ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸
+ ✹ ✺ ✻ ✼ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❌
+ ❍ ❎ ❏ ❐ ❑ ❒ ❓ ❔ ❕ ❖ ❗ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ❟ ❠
+ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❨ ❩ ❪ ❫ ❬ ❭ ❮ ❯ ❰ ❱ ❲ ❳ ❴
+ ❵ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈
+ ➉ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➕ ➖ ➗ ➘ ➙ ➚ ➛ ➜
+ ➝ ➞ ➟ ➠ ➡ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ➩ ➪ ➫ ➬ ➭ ➮ ➯ ➰
+ ➱ ➲ ➳ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ➾ ➿ ⟀ ⟁ ⟂ ⟃ ⟄
+ ⟅ ⟆ ⟇ ⟈ ⟉ ⟊ ⟋ ⟌ ⟍ ⟎ ⟏ ⟐ ⟑ ⟒ ⟓ ⟔ ⟕ ⟖ ⟗ ⟘
+ ⟙ ⟚ ⟛ ⟜ ⟝ ⟞ ⟟ ⟠ ⟡ ⟢ ⟣ ⟤ ⟥ ⟦ ⟧ ⟨ ⟩ ⟪ ⟫ ⟬
+ ⟭ ⟮ ⟯ ⟰ ⟱ ⟲ ⟳ ⟴ ⟵ ⟶ ⟷ ⟸ ⟹ ⟺ ⟻ ⟼ ⟽ ⟾ ⟿ ⠀
+ ⠁ ⠂ ⠃ ⠄ ⠅ ⠆ ⠇ ⠈ ⠉ ⠊ ⠋ ⠌ ⠍ ⠎ ⠏ ⠐ ⠑ ⠒ ⠓ ⠔
+ ⠕ ⠖ ⠗ ⠘ ⠙ ⠚ ⠛ ⠜ ⠝ ⠞ ⠟ ⠠ ⠡ ⠢ ⠣ ⠤ ⠥ ⠦ ⠧ ⠨
+ ⠩ ⠪ ⠫ ⠬ ⠭ ⠮ ⠯ ⠰ ⠱ ⠲ ⠳ ⠴ ⠵ ⠶ ⠷ ⠸ ⠹ ⠺ ⠻ ⠼
+ ⠽ ⠾ ⠿ ⡀ ⡁ ⡂ ⡃ ⡄ ⡅ ⡆ ⡇ ⡈ ⡉ ⡊ ⡋ ⡌ ⡍ ⡎ ⡏ ⡐
+ ⡑ ⡒ ⡓ ⡔ ⡕ ⡖ ⡗ ⡘ ⡙ ⡚ ⡛ ⡜ ⡝ ⡞ ⡟ ⡠ ⡡ ⡢ ⡣ ⡤
+ ⡥ ⡦ ⡧ ⡨ ⡩ ⡪ ⡫ ⡬ ⡭ ⡮ ⡯ ⡰ ⡱ ⡲ ⡳ ⡴ ⡵ ⡶ ⡷ ⡸
+ ⡹ ⡺ ⡻ ⡼ ⡽ ⡾ ⡿ ⢀ ⢁ ⢂ ⢃ ⢄ ⢅ ⢆ ⢇ ⢈ ⢉ ⢊ ⢋ ⢌
+ ⢍ ⢎ ⢏ ⢐ ⢑ ⢒ ⢓ ⢔ ⢕ ⢖ ⢗ ⢘ ⢙ ⢚ ⢛ ⢜ ⢝ ⢞ ⢟ ⢠
+ ⢡ ⢢ ⢣ ⢤ ⢥ ⢦ ⢧ ⢨ ⢩ ⢪ ⢫ ⢬ ⢭ ⢮ ⢯ ⢰ ⢱ ⢲ ⢳ ⢴
+ ⢵ ⢶ ⢷ ⢸ ⢹ ⢺ ⢻ ⢼ ⢽ ⢾ ⢿ ⣀ ⣁ ⣂ ⣃ ⣄ ⣅ ⣆ ⣇ ⣈
+ ⣉ ⣊ ⣋ ⣌ ⣍ ⣎ ⣏ ⣐ ⣑ ⣒ ⣓ ⣔ ⣕ ⣖ ⣗ ⣘ ⣙ ⣚ ⣛ ⣜
+ ⣝ ⣞ ⣟ ⣠ ⣡ ⣢ ⣣ ⣤ ⣥ ⣦ ⣧ ⣨ ⣩ ⣪ ⣫ ⣬ ⣭ ⣮ ⣯ ⣰
+ ⣱ ⣲ ⣳ ⣴ ⣵ ⣶ ⣷ ⣸ ⣹ ⣺ ⣻ ⣼ ⣽ ⣾ ⣿ ⤀ ⤁ ⤂ ⤃ ⤄
+ ⤅ ⤆ ⤇ ⤈ ⤉ ⤊ ⤋ ⤌ ⤍ ⤎ ⤏ ⤐ ⤑ ⤒ ⤓ ⤔ ⤕ ⤖ ⤗ ⤘
+ ⤙ ⤚ ⤛ ⤜ ⤝ ⤞ ⤟ ⤠ ⤡ ⤢ ⤣ ⤤ ⤥ ⤦ ⤧ ⤨ ⤩ ⤪ ⤫ ⤬
+ ⤭ ⤮ ⤯ ⤰ ⤱ ⤲ ⤳ ⤴ ⤵ ⤶ ⤷ ⤸ ⤹ ⤺ ⤻ ⤼ ⤽ ⤾ ⤿ ⥀
+ ⥁ ⥂ ⥃ ⥄ ⥅ ⥆ ⥇ ⥈ ⥉ ⥊ ⥋ ⥌ ⥍ ⥎ ⥏ ⥐ ⥑ ⥒ ⥓ ⥔
+ ⥕ ⥖ ⥗ ⥘ ⥙ ⥚ ⥛ ⥜ ⥝ ⥞ ⥟ ⥠ ⥡ ⥢ ⥣ ⥤ ⥥ ⥦ ⥧ ⥨
+ ⥩ ⥪ ⥫ ⥬ ⥭ ⥮ ⥯ ⥰ ⥱ ⥲ ⥳ ⥴ ⥵ ⥶ ⥷ ⥸ ⥹ ⥺ ⥻ ⥼
+ ⥽ ⥾ ⥿ ⦀ ⦁ ⦂ ⦃ ⦄ ⦅ ⦆ ⦇ ⦈ ⦉ ⦊ ⦋ ⦌ ⦍ ⦎ ⦏ ⦐
+ ⦑ ⦒ ⦓ ⦔ ⦕ ⦖ ⦗ ⦘ ⦙ ⦚ ⦛ ⦜ ⦝ ⦞ ⦟ ⦠ ⦡ ⦢ ⦣ ⦤
+ ⦥ ⦦ ⦧ ⦨ ⦩ ⦪ ⦫ ⦬ ⦭ ⦮ ⦯ ⦰ ⦱ ⦲ ⦳ ⦴ ⦵ ⦶ ⦷ ⦸
+ ⦹ ⦺ ⦻ ⦼ ⦽ ⦾ ⦿ ⧀ ⧁ ⧂ ⧃ ⧄ ⧅ ⧆ ⧇ ⧈ ⧉ ⧊ ⧋ ⧌
+ ⧍ ⧎ ⧏ ⧐ ⧑ ⧒ ⧓ ⧔ ⧕ ⧖ ⧗ ⧘ ⧙ ⧚ ⧛ ⧜ ⧝ ⧞ ⧟ ⧠
+ ⧡ ⧢ ⧣ ⧤ ⧥ ⧦ ⧧ ⧨ ⧩ ⧪ ⧫ ⧬ ⧭ ⧮ ⧯ ⧰ ⧱ ⧲ ⧳ ⧴
+ ⧵ ⧶ ⧷ ⧸ ⧹ ⧺ ⧻ ⧼ ⧽ ⧾ ⧿ ⨀ ⨁ ⨂ ⨃ ⨄ ⨅ ⨆ ⨇ ⨈
+ ⨉ ⨊ ⨋ ⨌ ⨍ ⨎ ⨏ ⨐ ⨑ ⨒ ⨓ ⨔ ⨕ ⨖ ⨗ ⨘ ⨙ ⨚ ⨛ ⨜
+ ⨝ ⨞ ⨟ ⨠ ⨡ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨯ ⨰
+ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨹ ⨺ ⨻ ⨼ ⨽ ⨾ ⨿ ⩀ ⩁ ⩂ ⩃ ⩄
+ ⩅ ⩆ ⩇ ⩈ ⩉ ⩊ ⩋ ⩌ ⩍ ⩎ ⩏ ⩐ ⩑ ⩒ ⩓ ⩔ ⩕ ⩖ ⩗ ⩘
+ ⩙ ⩚ ⩛ ⩜ ⩝ ⩞ ⩟ ⩠ ⩡ ⩢ ⩣ ⩤ ⩥ ⩦ ⩧ ⩨ ⩩ ⩪ ⩫ ⩬
+ ⩭ ⩮ ⩯ ⩰ ⩱ ⩲ ⩳ ⩴ ⩵ ⩶ ⩷ ⩸ ⩹ ⩺ ⩻ ⩼ ⩽ ⩾ ⩿ ⪀
+ ⪁ ⪂ ⪃ ⪄ ⪅ ⪆ ⪇ ⪈ ⪉ ⪊ ⪋ ⪌ ⪍ ⪎ ⪏ ⪐ ⪑ ⪒ ⪓ ⪔
+ ⪕ ⪖ ⪗ ⪘ ⪙ ⪚ ⪛ ⪜ ⪝ ⪞ ⪟ ⪠ ⪡ ⪢ ⪣ ⪤ ⪥ ⪦ ⪧ ⪨
+ ⪩ ⪪ ⪫ ⪬ ⪭ ⪮ ⪯ ⪰ ⪱ ⪲ ⪳ ⪴ ⪵ ⪶ ⪷ ⪸ ⪹ ⪺ ⪻ ⪼
+ ⪽ ⪾ ⪿ ⫀ ⫁ ⫂ ⫃ ⫄ ⫅ ⫆ ⫇ ⫈ ⫉ ⫊ ⫋ ⫌ ⫍ ⫎ ⫏ ⫐
+ ⫑ ⫒ ⫓ ⫔ ⫕ ⫖ ⫗ ⫘ ⫙ ⫚ ⫛ ⫝̸ ⫝ ⫞ ⫟ ⫠ ⫡ ⫢ ⫣ ⫤
+ ⫥ ⫦ ⫧ ⫨ ⫩ ⫪ ⫫ ⫬ ⫭ ⫮ ⫯ ⫰ ⫱ ⫲ ⫳ ⫴ ⫵ ⫶ ⫷ ⫸
+ ⫹ ⫺ ⫻ ⫼ ⫽ ⫾ ⫿ ⬀ ⬁ ⬂ ⬃ ⬄ ⬅ ⬆ ⬇ ⬈ ⬉ ⬊ ⬋ ⬌
+ ⬍ ⬎ ⬏ ⬐ ⬑ ⬒ ⬓ ⬔ ⬕ ⬖ ⬗ ⬘ ⬙ ⬚ ⬛ ⬜ ⬝ ⬞ ⬟ ⬠
+ ⬡ ⬢ ⬣ ⬤ ⬥ ⬦ ⬧ ⬨ ⬩ ⬪ ⬫ ⬬ ⬭ ⬮ ⬯ ⬰ ⬱ ⬲ ⬳ ⬴
+ ⬵ ⬶ ⬷ ⬸ ⬹ ⬺ ⬻ ⬼ ⬽ ⬾ ⬿ ⭀ ⭁ ⭂ ⭃ ⭄ ⭅ ⭆ ⭇ ⭈
+ ⭉ ⭊ ⭋ ⭌ ⭍ ⭎ ⭏ ⭐ ⭑ ⭒ ⭓ ⭔ ⭕ ⭖ ⭗ ⭘ ⭙ ⭚ ⭛ ⭜
+ ⭝ ⭞ ⭟ ⭠ ⭡ ⭢ ⭣ ⭤ ⭥ ⭦ ⭧ ⭨ ⭩ ⭪ ⭫ ⭬ ⭭ ⭮ ⭯ ⭰
+ ⭱ ⭲ ⭳ ⭴ ⭵ ⭶ ⭷ ⭸ ⭹ ⭺ ⭻ ⭼ ⭽ ⭾ ⭿ ⮀ ⮁ ⮂ ⮃ ⮄
+ ⮅ ⮆ ⮇ ⮈ ⮉ ⮊ ⮋ ⮌ ⮍ ⮎ ⮏ ⮐ ⮑ ⮒ ⮓ ⮔ ⮕ ⮖ ⮗ ⮘
+ ⮙ ⮚ ⮛ ⮜ ⮝ ⮞ ⮟ ⮠ ⮡ ⮢ ⮣ ⮤ ⮥ ⮦ ⮧ ⮨ ⮩ ⮪ ⮫ ⮬
+ ⮭ ⮮ ⮯ ⮰ ⮱ ⮲ ⮳ ⮴ ⮵ ⮶ ⮷ ⮸ ⮹ ⮺ ⮻ ⮼ ⮽ ⮾ ⮿ ⯀
+ ⯁ ⯂ ⯃ ⯄ ⯅ ⯆ ⯇ ⯈ ⯉ ⯊ ⯋ ⯌ ⯍ ⯎ ⯏ ⯐ ⯑ ⯒ ⯓ ⯔
+ ⯕ ⯖ ⯗ ⯘ ⯙ ⯚ ⯛ ⯜ ⯝ ⯞ ⯟ ⯠ ⯡ ⯢ ⯣ ⯤ ⯥ ⯦ ⯧ ⯨
+ ⯩ ⯪ ⯫ ⯬ ⯭ ⯮ ⯯ ⯰ ⯱ ⯲ ⯳ ⯴ ⯵ ⯶ ⯷ ⯸ ⯹ ⯺ ⯻ ⯼
+ ⯽ ⯾ ⯿ Ⰰ Ⰱ Ⰲ Ⰳ Ⰴ Ⰵ Ⰶ Ⰷ Ⰸ Ⰹ Ⰺ Ⰻ Ⰼ Ⰽ Ⰾ Ⰿ Ⱀ
+ Ⱁ Ⱂ Ⱃ Ⱄ Ⱅ Ⱆ Ⱇ Ⱈ Ⱉ Ⱊ Ⱋ Ⱌ Ⱍ Ⱎ Ⱏ Ⱐ Ⱑ Ⱒ Ⱓ Ⱔ
+ Ⱕ Ⱖ Ⱗ Ⱘ Ⱙ Ⱚ Ⱛ Ⱜ Ⱝ Ⱞ Ⱟ ⰰ ⰱ ⰲ ⰳ ⰴ ⰵ ⰶ ⰷ ⰸ
+ ⰹ ⰺ ⰻ ⰼ ⰽ ⰾ ⰿ ⱀ ⱁ ⱂ ⱃ ⱄ ⱅ ⱆ ⱇ ⱈ ⱉ ⱊ ⱋ ⱌ
+ ⱍ ⱎ ⱏ ⱐ ⱑ ⱒ ⱓ ⱔ ⱕ ⱖ ⱗ ⱘ ⱙ ⱚ ⱛ ⱜ ⱝ ⱞ ⱟ Ⱡ
+ ⱡ Ɫ Ᵽ Ɽ ⱥ ⱦ Ⱨ ⱨ Ⱪ ⱪ Ⱬ ⱬ Ɑ Ɱ Ɐ Ɒ ⱱ Ⱳ ⱳ ⱴ
+ Ⱶ ⱶ ⱷ ⱸ ⱹ ⱺ ⱻ ⱼ ⱽ Ȿ Ɀ Ⲁ ⲁ Ⲃ ⲃ Ⲅ ⲅ Ⲇ ⲇ Ⲉ
+ ⲉ Ⲋ ⲋ Ⲍ ⲍ Ⲏ ⲏ Ⲑ ⲑ Ⲓ ⲓ Ⲕ ⲕ Ⲗ ⲗ Ⲙ ⲙ Ⲛ ⲛ Ⲝ
+ ⲝ Ⲟ ⲟ Ⲡ ⲡ Ⲣ ⲣ Ⲥ ⲥ Ⲧ ⲧ Ⲩ ⲩ Ⲫ ⲫ Ⲭ ⲭ Ⲯ ⲯ Ⲱ
+ ⲱ Ⲳ ⲳ Ⲵ ⲵ Ⲷ ⲷ Ⲹ ⲹ Ⲻ ⲻ Ⲽ ⲽ Ⲿ ⲿ Ⳁ ⳁ Ⳃ ⳃ Ⳅ
+ ⳅ Ⳇ ⳇ Ⳉ ⳉ Ⳋ ⳋ Ⳍ ⳍ Ⳏ ⳏ Ⳑ ⳑ Ⳓ ⳓ Ⳕ ⳕ Ⳗ ⳗ Ⳙ
+ ⳙ Ⳛ ⳛ Ⳝ ⳝ Ⳟ ⳟ Ⳡ ⳡ Ⳣ ⳣ ⳤ ⳥ ⳦ ⳧ ⳨ ⳩ ⳪ Ⳬ ⳬ
+ Ⳮ ⳮ ⳯ ⳰ ⳱ Ⳳ ⳳ ⳴ ⳵ ⳶ ⳷ ⳸ ⳹ ⳺ ⳻ ⳼ ⳽ ⳾ ⳿ ⴀ
+ ⴁ ⴂ ⴃ ⴄ ⴅ ⴆ ⴇ ⴈ ⴉ ⴊ ⴋ ⴌ ⴍ ⴎ ⴏ ⴐ ⴑ ⴒ ⴓ ⴔ
+ ⴕ ⴖ ⴗ ⴘ ⴙ ⴚ ⴛ ⴜ ⴝ ⴞ ⴟ ⴠ ⴡ ⴢ ⴣ ⴤ ⴥ ⴦ ⴧ ⴨
+ ⴩ ⴪ ⴫ ⴬ ⴭ ⴮ ⴯ ⴰ ⴱ ⴲ ⴳ ⴴ ⴵ ⴶ ⴷ ⴸ ⴹ ⴺ ⴻ ⴼ
+ ⴽ ⴾ ⴿ ⵀ ⵁ ⵂ ⵃ ⵄ ⵅ ⵆ ⵇ ⵈ ⵉ ⵊ ⵋ ⵌ ⵍ ⵎ ⵏ ⵐ
+ ⵑ ⵒ ⵓ ⵔ ⵕ ⵖ ⵗ ⵘ ⵙ ⵚ ⵛ ⵜ ⵝ ⵞ ⵟ ⵠ ⵡ ⵢ ⵣ ⵤ
+ ⵥ ⵦ ⵧ ⵨ ⵩ ⵪ ⵫ ⵬ ⵭ ⵮ ⵯ ⵰ ⵱ ⵲ ⵳ ⵴ ⵵ ⵶ ⵷ ⵸
+ ⵹ ⵺ ⵻ ⵼ ⵽ ⵾ ⵿ ⶀ ⶁ ⶂ ⶃ ⶄ ⶅ ⶆ ⶇ ⶈ ⶉ ⶊ ⶋ ⶌ
+ ⶍ ⶎ ⶏ ⶐ ⶑ ⶒ ⶓ ⶔ ⶕ ⶖ ⶗ ⶘ ⶙ ⶚ ⶛ ⶜ ⶝ ⶞ ⶟ ⶠ
+ ⶡ ⶢ ⶣ ⶤ ⶥ ⶦ ⶧ ⶨ ⶩ ⶪ ⶫ ⶬ ⶭ ⶮ ⶯ ⶰ ⶱ ⶲ ⶳ ⶴ
+ ⶵ ⶶ ⶷ ⶸ ⶹ ⶺ ⶻ ⶼ ⶽ ⶾ ⶿ ⷀ ⷁ ⷂ ⷃ ⷄ ⷅ ⷆ ⷇ ⷈ
+ ⷉ ⷊ ⷋ ⷌ ⷍ ⷎ ⷏ ⷐ ⷑ ⷒ ⷓ ⷔ ⷕ ⷖ ⷗ ⷘ ⷙ ⷚ ⷛ ⷜ
+ ⷝ ⷞ ⷟ ⷠ ⷡ ⷢ ⷣ ⷤ ⷥ ⷦ ⷧ ⷨ ⷩ ⷪ ⷫ ⷬ ⷭ ⷮ ⷯ ⷰ
+ ⷱ ⷲ ⷳ ⷴ ⷵ ⷶ ⷷ ⷸ ⷹ ⷺ ⷻ ⷼ ⷽ ⷾ ⷿ ⸀ ⸁ ⸂ ⸃ ⸄
+ ⸅ ⸆ ⸇ ⸈ ⸉ ⸊ ⸋ ⸌ ⸍ ⸎ ⸏ ⸐ ⸑ ⸒ ⸓ ⸔ ⸕ ⸖ ⸗ ⸘
+ ⸙ ⸚ ⸛ ⸜ ⸝ ⸞ ⸟ ⸠ ⸡ ⸢ ⸣ ⸤ ⸥ ⸦ ⸧ ⸨ ⸩ ⸪ ⸫ ⸬
+ ⸭ ⸮ ⸯ ⸰ ⸱ ⸲ ⸳ ⸴ ⸵ ⸶ ⸷ ⸸ ⸹ ⸺ ⸻ ⸼ ⸽ ⸾ ⸿ ⹀
+ ⹁ ⹂ ⹃ ⹄ ⹅ ⹆ ⹇ ⹈ ⹉ ⹊ ⹋ ⹌ ⹍ ⹎ ⹏ ⹐ ⹑ ⹒ ⹓ ⹔
+ ⹕ ⹖ ⹗ ⹘ ⹙ ⹚ ⹛ ⹜ ⹝ ⹞ ⹟ ⹠ ⹡ ⹢ ⹣ ⹤ ⹥ ⹦ ⹧ ⹨
+ ⹩ ⹪ ⹫ ⹬ ⹭ ⹮ ⹯ ⹰ ⹱ ⹲ ⹳ ⹴ ⹵ ⹶ ⹷ ⹸ ⹹ ⹺ ⹻ ⹼
+ ⹽ ⹾ ⹿ ⺀ ⺁ ⺂ ⺃ ⺄ ⺅ ⺆ ⺇ ⺈ ⺉ ⺊ ⺋ ⺌ ⺍ ⺎ ⺏ ⺐
+ ⺑ ⺒ ⺓ ⺔ ⺕ ⺖ ⺗ ⺘ ⺙ ⺚ ⺛ ⺜ ⺝ ⺞ ⺟ ⺠ ⺡ ⺢ ⺣ ⺤
+ ⺥ ⺦ ⺧ ⺨ ⺩ ⺪ ⺫ ⺬ ⺭ ⺮ ⺯ ⺰ ⺱ ⺲ ⺳ ⺴ ⺵ ⺶ ⺷ ⺸
+ ⺹ ⺺ ⺻ ⺼ ⺽ ⺾ ⺿ ⻀ ⻁ ⻂ ⻃ ⻄ ⻅ ⻆ ⻇ ⻈ ⻉ ⻊ ⻋ ⻌
+ ⻍ ⻎ ⻏ ⻐ ⻑ ⻒ ⻓ ⻔ ⻕ ⻖ ⻗ ⻘ ⻙ ⻚ ⻛ ⻜ ⻝ ⻞ ⻟ ⻠
+ ⻡ ⻢ ⻣ ⻤ ⻥ ⻦ ⻧ ⻨ ⻩ ⻪ ⻫ ⻬ ⻭ ⻮ ⻯ ⻰ ⻱ ⻲ ⻳ ⻴
+ ⻵ ⻶ ⻷ ⻸ ⻹ ⻺ ⻻ ⻼ ⻽ ⻾ ⻿ ⼀ ⼁ ⼂ ⼃ ⼄ ⼅ ⼆ ⼇ ⼈
+ ⼉ ⼊ ⼋ ⼌ ⼍ ⼎ ⼏ ⼐ ⼑ ⼒ ⼓ ⼔ ⼕ ⼖ ⼗ ⼘ ⼙ ⼚ ⼛ ⼜
+ ⼝ ⼞ ⼟ ⼠ ⼡ ⼢ ⼣ ⼤ ⼥ ⼦ ⼧ ⼨ ⼩ ⼪ ⼫ ⼬ ⼭ ⼮ ⼯ ⼰
+ ⼱ ⼲ ⼳ ⼴ ⼵ ⼶ ⼷ ⼸ ⼹ ⼺ ⼻ ⼼ ⼽ ⼾ ⼿ ⽀ ⽁ ⽂ ⽃ ⽄
+ ⽅ ⽆ ⽇ ⽈ ⽉ ⽊ ⽋ ⽌ ⽍ ⽎ ⽏ ⽐ ⽑ ⽒ ⽓ ⽔ ⽕ ⽖ ⽗ ⽘
+ ⽙ ⽚ ⽛ ⽜ ⽝ ⽞ ⽟ ⽠ ⽡ ⽢ ⽣ ⽤ ⽥ ⽦ ⽧ ⽨ ⽩ ⽪ ⽫ ⽬
+ ⽭ ⽮ ⽯ ⽰ ⽱ ⽲ ⽳ ⽴ ⽵ ⽶ ⽷ ⽸ ⽹ ⽺ ⽻ ⽼ ⽽ ⽾ ⽿ ⾀
+ ⾁ ⾂ ⾃ ⾄ ⾅ ⾆ ⾇ ⾈ ⾉ ⾊ ⾋ ⾌ ⾍ ⾎ ⾏ ⾐ ⾑ ⾒ ⾓ ⾔
+ ⾕ ⾖ ⾗ ⾘ ⾙ ⾚ ⾛ ⾜ ⾝ ⾞ ⾟ ⾠ ⾡ ⾢ ⾣ ⾤ ⾥ ⾦ ⾧ ⾨
+ ⾩ ⾪ ⾫ ⾬ ⾭ ⾮ ⾯ ⾰ ⾱ ⾲ ⾳ ⾴ ⾵ ⾶ ⾷ ⾸ ⾹ ⾺ ⾻ ⾼
+ ⾽ ⾾ ⾿ ⿀ ⿁ ⿂ ⿃ ⿄ ⿅ ⿆ ⿇ ⿈ ⿉ ⿊ ⿋ ⿌ ⿍ ⿎ ⿏ ⿐
+ ⿑ ⿒ ⿓ ⿔ ⿕ ⿖ ⿗ ⿘ ⿙ ⿚ ⿛ ⿜ ⿝ ⿞ ⿟ ⿠ ⿡ ⿢ ⿣ ⿤
+ ⿥ ⿦ ⿧ ⿨ ⿩ ⿪ ⿫ ⿬ ⿭ ⿮ ⿯ ⿰ ⿱ ⿲ ⿳ ⿴ ⿵ ⿶ ⿷ ⿸
+ ⿹ ⿺ ⿻ ⿼ ⿽ ⿾ ⿿   、 。 〃 〄 々 〆 〇 〈 〉 《 》 「
+ 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〘 〙 〚 〛 〜 〝 〞 〟 〠
+ 〡 〢 〣 〤 〥 〦 〧 〨 〩 〪 〫 〬 〭 〮 〯 〰 〱 〲 〳 〴
+ 〵 〶 〷 〸 〹 〺 〻 〼 〽 〾 〿 ぀ ぁ あ ぃ い ぅ う ぇ え
+ ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ
+ そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ ね の は ば
+ ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ ぽ ま み む め も ゃ や
+ ゅ ゆ ょ よ ら り る れ ろ ゎ わ ゐ ゑ を ん ゔ ゕ ゖ ゗ ゘
+ ゙ ゚ ゛ ゜ ゝ ゞ ゟ ゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ カ ガ
+ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ
+ チ ヂ ッ ツ ヅ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ
+ フ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ
+ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ ヷ ヸ ヹ ヺ ・ ー
+ ヽ ヾ ヿ ㄀ ㄁ ㄂ ㄃ ㄄ ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ
+ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ
+ ㄥ ㄦ ㄧ ㄨ ㄩ ㄪ ㄫ ㄬ ㄭ ㄮ ㄯ ㄰ ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ
+ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ
+ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ
+ ㅡ ㅢ ㅣ ㅤ ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ
+ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ ㆇ ㆈ
+ ㆉ ㆊ ㆋ ㆌ ㆍ ㆎ ㆏ ㆐ ㆑ ㆒ ㆓ ㆔ ㆕ ㆖ ㆗ ㆘ ㆙ ㆚ ㆛ ㆜
+ ㆝ ㆞ ㆟ ㆠ ㆡ ㆢ ㆣ ㆤ ㆥ ㆦ ㆧ ㆨ ㆩ ㆪ ㆫ ㆬ ㆭ ㆮ ㆯ ㆰ
+ ㆱ ㆲ ㆳ ㆴ ㆵ ㆶ ㆷ ㆸ ㆹ ㆺ ㆻ ㆼ ㆽ ㆾ ㆿ ㇀ ㇁ ㇂ ㇃ ㇄
+ ㇅ ㇆ ㇇ ㇈ ㇉ ㇊ ㇋ ㇌ ㇍ ㇎ ㇏ ㇐ ㇑ ㇒ ㇓ ㇔ ㇕ ㇖ ㇗ ㇘
+ ㇙ ㇚ ㇛ ㇜ ㇝ ㇞ ㇟ ㇠ ㇡ ㇢ ㇣ ㇤ ㇥ ㇦ ㇧ ㇨ ㇩ ㇪ ㇫ ㇬
+ ㇭ ㇮ ㇯ ㇰ ㇱ ㇲ ㇳ ㇴ ㇵ ㇶ ㇷ ㇸ ㇹ ㇺ ㇻ ㇼ ㇽ ㇾ ㇿ ㈀
+ ㈁ ㈂ ㈃ ㈄ ㈅ ㈆ ㈇ ㈈ ㈉ ㈊ ㈋ ㈌ ㈍ ㈎ ㈏ ㈐ ㈑ ㈒ ㈓ ㈔
+ ㈕ ㈖ ㈗ ㈘ ㈙ ㈚ ㈛ ㈜ ㈝ ㈞ ㈟ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨
+ ㈩ ㈪ ㈫ ㈬ ㈭ ㈮ ㈯ ㈰ ㈱ ㈲ ㈳ ㈴ ㈵ ㈶ ㈷ ㈸ ㈹ ㈺ ㈻ ㈼
+ ㈽ ㈾ ㈿ ㉀ ㉁ ㉂ ㉃ ㉄ ㉅ ㉆ ㉇ ㉈ ㉉ ㉊ ㉋ ㉌ ㉍ ㉎ ㉏ ㉐
+ ㉑ ㉒ ㉓ ㉔ ㉕ ㉖ ㉗ ㉘ ㉙ ㉚ ㉛ ㉜ ㉝ ㉞ ㉟ ㉠ ㉡ ㉢ ㉣ ㉤
+ ㉥ ㉦ ㉧ ㉨ ㉩ ㉪ ㉫ ㉬ ㉭ ㉮ ㉯ ㉰ ㉱ ㉲ ㉳ ㉴ ㉵ ㉶ ㉷ ㉸
+ ㉹ ㉺ ㉻ ㉼ ㉽ ㉾ ㉿ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㊊ ㊋ ㊌
+ ㊍ ㊎ ㊏ ㊐ ㊑ ㊒ ㊓ ㊔ ㊕ ㊖ ㊗ ㊘ ㊙ ㊚ ㊛ ㊜ ㊝ ㊞ ㊟ ㊠
+ ㊡ ㊢ ㊣ ㊤ ㊥ ㊦ ㊧ ㊨ ㊩ ㊪ ㊫ ㊬ ㊭ ㊮ ㊯ ㊰ ㊱ ㊲ ㊳ ㊴
+ ㊵ ㊶ ㊷ ㊸ ㊹ ㊺ ㊻ ㊼ ㊽ ㊾ ㊿ ㋀ ㋁ ㋂ ㋃ ㋄ ㋅ ㋆ ㋇ ㋈
+ ㋉ ㋊ ㋋ ㋌ ㋍ ㋎ ㋏ ㋐ ㋑ ㋒ ㋓ ㋔ ㋕ ㋖ ㋗ ㋘ ㋙ ㋚ ㋛ ㋜
+ ㋝ ㋞ ㋟ ㋠ ㋡ ㋢ ㋣ ㋤ ㋥ ㋦ ㋧ ㋨ ㋩ ㋪ ㋫ ㋬ ㋭ ㋮ ㋯ ㋰
+ ㋱ ㋲ ㋳ ㋴ ㋵ ㋶ ㋷ ㋸ ㋹ ㋺ ㋻ ㋼ ㋽ ㋾ ㋿ ㌀ ㌁ ㌂ ㌃ ㌄
+ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏ ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘
+ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟ ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬
+ ㌭ ㌮ ㌯ ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿ ㍀
+ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏ ㍐ ㍑ ㍒ ㍓ ㍔
+ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟ ㍠ ㍡ ㍢ ㍣ ㍤ ㍥ ㍦ ㍧ ㍨
+ ㍩ ㍪ ㍫ ㍬ ㍭ ㍮ ㍯ ㍰ ㍱ ㍲ ㍳ ㍴ ㍵ ㍶ ㍷ ㍸ ㍹ ㍺ ㍻ ㍼
+ ㍽ ㍾ ㍿ ㎀ ㎁ ㎂ ㎃ ㎄ ㎅ ㎆ ㎇ ㎈ ㎉ ㎊ ㎋ ㎌ ㎍ ㎎ ㎏ ㎐
+ ㎑ ㎒ ㎓ ㎔ ㎕ ㎖ ㎗ ㎘ ㎙ ㎚ ㎛ ㎜ ㎝ ㎞ ㎟ ㎠ ㎡ ㎢ ㎣ ㎤
+ ㎥ ㎦ ㎧ ㎨ ㎩ ㎪ ㎫ ㎬ ㎭ ㎮ ㎯ ㎰ ㎱ ㎲ ㎳ ㎴ ㎵ ㎶ ㎷ ㎸
+ ㎹ ㎺ ㎻ ㎼ ㎽ ㎾ ㎿ ㏀ ㏁ ㏂ ㏃ ㏄ ㏅ ㏆ ㏇ ㏈ ㏉ ㏊ ㏋ ㏌
+ ㏍ ㏎ ㏏ ㏐ ㏑ ㏒ ㏓ ㏔ ㏕ ㏖ ㏗ ㏘ ㏙ ㏚ ㏛ ㏜ ㏝ ㏞ ㏟ ㏠
+ ㏡ ㏢ ㏣ ㏤ ㏥ ㏦ ㏧ ㏨ ㏩ ㏪ ㏫ ㏬ ㏭ ㏮ ㏯ ㏰ ㏱ ㏲ ㏳ ㏴
+ ㏵ ㏶ ㏷ ㏸ ㏹ ㏺ ㏻ ㏼ ㏽ ㏾ ㏿ 㐀 㐁 㐂 㐃 㐄 㐅 㐆 㐇 㐈
+ 㐉 㐊 㐋 㐌 㐍 㐎 㐏 㐐 㐑 㐒 㐓 㐔 㐕 㐖 㐗 㐘 㐙 㐚 㐛 㐜
+ 㐝 㐞 㐟 㐠 㐡 㐢 㐣 㐤 㐥 㐦 㐧 㐨 㐩 㐪 㐫 㐬 㐭 㐮 㐯 㐰
+ 㐱 㐲 㐳 㐴 㐵 㐶 㐷 㐸 㐹 㐺 㐻 㐼 㐽 㐾 㐿 㑀 㑁 㑂 㑃 㑄
+ 㑅 㑆 㑇 㑈 㑉 㑊 㑋 㑌 㑍 㑎 㑏 㑐 㑑 㑒 㑓 㑔 㑕 㑖 㑗 㑘
+ 㑙 㑚 㑛 㑜 㑝 㑞 㑟 㑠 㑡 㑢 㑣 㑤 㑥 㑦 㑧 㑨 㑩 㑪 㑫 㑬
+ 㑭 㑮 㑯 㑰 㑱 㑲 㑳 㑴 㑵 㑶 㑷 㑸 㑹 㑺 㑻 㑼 㑽 㑾 㑿 㒀
+ 㒁 㒂 㒃 㒄 㒅 㒆 㒇 㒈 㒉 㒊 㒋 㒌 㒍 㒎 㒏 㒐 㒑 㒒 㒓 㒔
+ 㒕 㒖 㒗 㒘 㒙 㒚 㒛 㒜 㒝 㒞 㒟 㒠 㒡 㒢 㒣 㒤 㒥 㒦 㒧 㒨
+ 㒩 㒪 㒫 㒬 㒭 㒮 㒯 㒰 㒱 㒲 㒳 㒴 㒵 㒶 㒷 㒸 㒹 㒺 㒻 㒼
+ 㒽 㒾 㒿 㓀 㓁 㓂 㓃 㓄 㓅 㓆 㓇 㓈 㓉 㓊 㓋 㓌 㓍 㓎 㓏 㓐
+ 㓑 㓒 㓓 㓔 㓕 㓖 㓗 㓘 㓙 㓚 㓛 㓜 㓝 㓞 㓟 㓠 㓡 㓢 㓣 㓤
+ 㓥 㓦 㓧 㓨 㓩 㓪 㓫 㓬 㓭 㓮 㓯 㓰 㓱 㓲 㓳 㓴 㓵 㓶 㓷 㓸
+ 㓹 㓺 㓻 㓼 㓽 㓾 㓿 㔀 㔁 㔂 㔃 㔄 㔅 㔆 㔇 㔈 㔉 㔊 㔋 㔌
+ 㔍 㔎 㔏 㔐 㔑 㔒 㔓 㔔 㔕 㔖 㔗 㔘 㔙 㔚 㔛 㔜 㔝 㔞 㔟 㔠
+ 㔡 㔢 㔣 㔤 㔥 㔦 㔧 㔨 㔩 㔪 㔫 㔬 㔭 㔮 㔯 㔰 㔱 㔲 㔳 㔴
+ 㔵 㔶 㔷 㔸 㔹 㔺 㔻 㔼 㔽 㔾 㔿 㕀 㕁 㕂 㕃 㕄 㕅 㕆 㕇 㕈
+ 㕉 㕊 㕋 㕌 㕍 㕎 㕏 㕐 㕑 㕒 㕓 㕔 㕕 㕖 㕗 㕘 㕙 㕚 㕛 㕜
+ 㕝 㕞 㕟 㕠 㕡 㕢 㕣 㕤 㕥 㕦 㕧 㕨 㕩 㕪 㕫 㕬 㕭 㕮 㕯 㕰
+ 㕱 㕲 㕳 㕴 㕵 㕶 㕷 㕸 㕹 㕺 㕻 㕼 㕽 㕾 㕿 㖀 㖁 㖂 㖃 㖄
+ 㖅 㖆 㖇 㖈 㖉 㖊 㖋 㖌 㖍 㖎 㖏 㖐 㖑 㖒 㖓 㖔 㖕 㖖 㖗 㖘
+ 㖙 㖚 㖛 㖜 㖝 㖞 㖟 㖠 㖡 㖢 㖣 㖤 㖥 㖦 㖧 㖨 㖩 㖪 㖫 㖬
+ 㖭 㖮 㖯 㖰 㖱 㖲 㖳 㖴 㖵 㖶 㖷 㖸 㖹 㖺 㖻 㖼 㖽 㖾 㖿 㗀
+ 㗁 㗂 㗃 㗄 㗅 㗆 㗇 㗈 㗉 㗊 㗋 㗌 㗍 㗎 㗏 㗐 㗑 㗒 㗓 㗔
+ 㗕 㗖 㗗 㗘 㗙 㗚 㗛 㗜 㗝 㗞 㗟 㗠 㗡 㗢 㗣 㗤 㗥 㗦 㗧 㗨
+ 㗩 㗪 㗫 㗬 㗭 㗮 㗯 㗰 㗱 㗲 㗳 㗴 㗵 㗶 㗷 㗸 㗹 㗺 㗻 㗼
+ 㗽 㗾 㗿 㘀 㘁 㘂 㘃 㘄 㘅 㘆 㘇 㘈 㘉 㘊 㘋 㘌 㘍 㘎 㘏 㘐
+ 㘑 㘒 㘓 㘔 㘕 㘖 㘗 㘘 㘙 㘚 㘛 㘜 㘝 㘞 㘟 㘠 㘡 㘢 㘣 㘤
+ 㘥 㘦 㘧 㘨 㘩 㘪 㘫 㘬 㘭 㘮 㘯 㘰 㘱 㘲 㘳 㘴 㘵 㘶 㘷 㘸
+ 㘹 㘺 㘻 㘼 㘽 㘾 㘿 㙀 㙁 㙂 㙃 㙄 㙅 㙆 㙇 㙈 㙉 㙊 㙋 㙌
+ 㙍 㙎 㙏 㙐 㙑 㙒 㙓 㙔 㙕 㙖 㙗 㙘 㙙 㙚 㙛 㙜 㙝 㙞 㙟 㙠
+ 㙡 㙢 㙣 㙤 㙥 㙦 㙧 㙨 㙩 㙪 㙫 㙬 㙭 㙮 㙯 㙰 㙱 㙲 㙳 㙴
+ 㙵 㙶 㙷 㙸 㙹 㙺 㙻 㙼 㙽 㙾 㙿 㚀 㚁 㚂 㚃 㚄 㚅 㚆 㚇 㚈
+ 㚉 㚊 㚋 㚌 㚍 㚎 㚏 㚐 㚑 㚒 㚓 㚔 㚕 㚖 㚗 㚘 㚙 㚚 㚛 㚜
+ 㚝 㚞 㚟 㚠 㚡 㚢 㚣 㚤 㚥 㚦 㚧 㚨 㚩 㚪 㚫 㚬 㚭 㚮 㚯 㚰
+ 㚱 㚲 㚳 㚴 㚵 㚶 㚷 㚸 㚹 㚺 㚻 㚼 㚽 㚾 㚿 㛀 㛁 㛂 㛃 㛄
+ 㛅 㛆 㛇 㛈 㛉 㛊 㛋 㛌 㛍 㛎 㛏 㛐 㛑 㛒 㛓 㛔 㛕 㛖 㛗 㛘
+ 㛙 㛚 㛛 㛜 㛝 㛞 㛟 㛠 㛡 㛢 㛣 㛤 㛥 㛦 㛧 㛨 㛩 㛪 㛫 㛬
+ 㛭 㛮 㛯 㛰 㛱 㛲 㛳 㛴 㛵 㛶 㛷 㛸 㛹 㛺 㛻 㛼 㛽 㛾 㛿 㜀
+ 㜁 㜂 㜃 㜄 㜅 㜆 㜇 㜈 㜉 㜊 㜋 㜌 㜍 㜎 㜏 㜐 㜑 㜒 㜓 㜔
+ 㜕 㜖 㜗 㜘 㜙 㜚 㜛 㜜 㜝 㜞 㜟 㜠 㜡 㜢 㜣 㜤 㜥 㜦 㜧 㜨
+ 㜩 㜪 㜫 㜬 㜭 㜮 㜯 㜰 㜱 㜲 㜳 㜴 㜵 㜶 㜷 㜸 㜹 㜺 㜻 㜼
+ 㜽 㜾 㜿 㝀 㝁 㝂 㝃 㝄 㝅 㝆 㝇 㝈 㝉 㝊 㝋 㝌 㝍 㝎 㝏 㝐
+ 㝑 㝒 㝓 㝔 㝕 㝖 㝗 㝘 㝙 㝚 㝛 㝜 㝝 㝞 㝟 㝠 㝡 㝢 㝣 㝤
+ 㝥 㝦 㝧 㝨 㝩 㝪 㝫 㝬 㝭 㝮 㝯 㝰 㝱 㝲 㝳 㝴 㝵 㝶 㝷 㝸
+ 㝹 㝺 㝻 㝼 㝽 㝾 㝿 㞀 㞁 㞂 㞃 㞄 㞅 㞆 㞇 㞈 㞉 㞊 㞋 㞌
+ 㞍 㞎 㞏 㞐 㞑 㞒 㞓 㞔 㞕 㞖 㞗 㞘 㞙 㞚 㞛 㞜 㞝 㞞 㞟 㞠
+ 㞡 㞢 㞣 㞤 㞥 㞦 㞧 㞨 㞩 㞪 㞫 㞬 㞭 㞮 㞯 㞰 㞱 㞲 㞳 㞴
+ 㞵 㞶 㞷 㞸 㞹 㞺 㞻 㞼 㞽 㞾 㞿 㟀 㟁 㟂 㟃 㟄 㟅 㟆 㟇 㟈
+ 㟉 㟊 㟋 㟌 㟍 㟎 㟏 㟐 㟑 㟒 㟓 㟔 㟕 㟖 㟗 㟘 㟙 㟚 㟛 㟜
+ 㟝 㟞 㟟 㟠 㟡 㟢 㟣 㟤 㟥 㟦 㟧 㟨 㟩 㟪 㟫 㟬 㟭 㟮 㟯 㟰
+ 㟱 㟲 㟳 㟴 㟵 㟶 㟷 㟸 㟹 㟺 㟻 㟼 㟽 㟾 㟿 㠀 㠁 㠂 㠃 㠄
+ 㠅 㠆 㠇 㠈 㠉 㠊 㠋 㠌 㠍 㠎 㠏 㠐 㠑 㠒 㠓 㠔 㠕 㠖 㠗 㠘
+ 㠙 㠚 㠛 㠜 㠝 㠞 㠟 㠠 㠡 㠢 㠣 㠤 㠥 㠦 㠧 㠨 㠩 㠪 㠫 㠬
+ 㠭 㠮 㠯 㠰 㠱 㠲 㠳 㠴 㠵 㠶 㠷 㠸 㠹 㠺 㠻 㠼 㠽 㠾 㠿 㡀
+ 㡁 㡂 㡃 㡄 㡅 㡆 㡇 㡈 㡉 㡊 㡋 㡌 㡍 㡎 㡏 㡐 㡑 㡒 㡓 㡔
+ 㡕 㡖 㡗 㡘 㡙 㡚 㡛 㡜 㡝 㡞 㡟 㡠 㡡 㡢 㡣 㡤 㡥 㡦 㡧 㡨
+ 㡩 㡪 㡫 㡬 㡭 㡮 㡯 㡰 㡱 㡲 㡳 㡴 㡵 㡶 㡷 㡸 㡹 㡺 㡻 㡼
+ 㡽 㡾 㡿 㢀 㢁 㢂 㢃 㢄 㢅 㢆 㢇 㢈 㢉 㢊 㢋 㢌 㢍 㢎 㢏 㢐
+ 㢑 㢒 㢓 㢔 㢕 㢖 㢗 㢘 㢙 㢚 㢛 㢜 㢝 㢞 㢟 㢠 㢡 㢢 㢣 㢤
+ 㢥 㢦 㢧 㢨 㢩 㢪 㢫 㢬 㢭 㢮 㢯 㢰 㢱 㢲 㢳 㢴 㢵 㢶 㢷 㢸
+ 㢹 㢺 㢻 㢼 㢽 㢾 㢿 㣀 㣁 㣂 㣃 㣄 㣅 㣆 㣇 㣈 㣉 㣊 㣋 㣌
+ 㣍 㣎 㣏 㣐 㣑 㣒 㣓 㣔 㣕 㣖 㣗 㣘 㣙 㣚 㣛 㣜 㣝 㣞 㣟 㣠
+ 㣡 㣢 㣣 㣤 㣥 㣦 㣧 㣨 㣩 㣪 㣫 㣬 㣭 㣮 㣯 㣰 㣱 㣲 㣳 㣴
+ 㣵 㣶 㣷 㣸 㣹 㣺 㣻 㣼 㣽 㣾 㣿 㤀 㤁 㤂 㤃 㤄 㤅 㤆 㤇 㤈
+ 㤉 㤊 㤋 㤌 㤍 㤎 㤏 㤐 㤑 㤒 㤓 㤔 㤕 㤖 㤗 㤘 㤙 㤚 㤛 㤜
+ 㤝 㤞 㤟 㤠 㤡 㤢 㤣 㤤 㤥 㤦 㤧 㤨 㤩 㤪 㤫 㤬 㤭 㤮 㤯 㤰
+ 㤱 㤲 㤳 㤴 㤵 㤶 㤷 㤸 㤹 㤺 㤻 㤼 㤽 㤾 㤿 㥀 㥁 㥂 㥃 㥄
+ 㥅 㥆 㥇 㥈 㥉 㥊 㥋 㥌 㥍 㥎 㥏 㥐 㥑 㥒 㥓 㥔 㥕 㥖 㥗 㥘
+ 㥙 㥚 㥛 㥜 㥝 㥞 㥟 㥠 㥡 㥢 㥣 㥤 㥥 㥦 㥧 㥨 㥩 㥪 㥫 㥬
+ 㥭 㥮 㥯 㥰 㥱 㥲 㥳 㥴 㥵 㥶 㥷 㥸 㥹 㥺 㥻 㥼 㥽 㥾 㥿 㦀
+ 㦁 㦂 㦃 㦄 㦅 㦆 㦇 㦈 㦉 㦊 㦋 㦌 㦍 㦎 㦏 㦐 㦑 㦒 㦓 㦔
+ 㦕 㦖 㦗 㦘 㦙 㦚 㦛 㦜 㦝 㦞 㦟 㦠 㦡 㦢 㦣 㦤 㦥 㦦 㦧 㦨
+ 㦩 㦪 㦫 㦬 㦭 㦮 㦯 㦰 㦱 㦲 㦳 㦴 㦵 㦶 㦷 㦸 㦹 㦺 㦻 㦼
+ 㦽 㦾 㦿 㧀 㧁 㧂 㧃 㧄 㧅 㧆 㧇 㧈 㧉 㧊 㧋 㧌 㧍 㧎 㧏 㧐
+ 㧑 㧒 㧓 㧔 㧕 㧖 㧗 㧘 㧙 㧚 㧛 㧜 㧝 㧞 㧟 㧠 㧡 㧢 㧣 㧤
+ 㧥 㧦 㧧 㧨 㧩 㧪 㧫 㧬 㧭 㧮 㧯 㧰 㧱 㧲 㧳 㧴 㧵 㧶 㧷 㧸
+ 㧹 㧺 㧻 㧼 㧽 㧾 㧿 㨀 㨁 㨂 㨃 㨄 㨅 㨆 㨇 㨈 㨉 㨊 㨋 㨌
+ 㨍 㨎 㨏 㨐 㨑 㨒 㨓 㨔 㨕 㨖 㨗 㨘 㨙 㨚 㨛 㨜 㨝 㨞 㨟 㨠
+ 㨡 㨢 㨣 㨤 㨥 㨦 㨧 㨨 㨩 㨪 㨫 㨬 㨭 㨮 㨯 㨰 㨱 㨲 㨳 㨴
+ 㨵 㨶 㨷 㨸 㨹 㨺 㨻 㨼 㨽 㨾 㨿 㩀 㩁 㩂 㩃 㩄 㩅 㩆 㩇 㩈
+ 㩉 㩊 㩋 㩌 㩍 㩎 㩏 㩐 㩑 㩒 㩓 㩔 㩕 㩖 㩗 㩘 㩙 㩚 㩛 㩜
+ 㩝 㩞 㩟 㩠 㩡 㩢 㩣 㩤 㩥 㩦 㩧 㩨 㩩 㩪 㩫 㩬 㩭 㩮 㩯 㩰
+ 㩱 㩲 㩳 㩴 㩵 㩶 㩷 㩸 㩹 㩺 㩻 㩼 㩽 㩾 㩿 㪀 㪁 㪂 㪃 㪄
+ 㪅 㪆 㪇 㪈 㪉 㪊 㪋 㪌 㪍 㪎 㪏 㪐 㪑 㪒 㪓 㪔 㪕 㪖 㪗 㪘
+ 㪙 㪚 㪛 㪜 㪝 㪞 㪟 㪠 㪡 㪢 㪣 㪤 㪥 㪦 㪧 㪨 㪩 㪪 㪫 㪬
+ 㪭 㪮 㪯 㪰 㪱 㪲 㪳 㪴 㪵 㪶 㪷 㪸 㪹 㪺 㪻 㪼 㪽 㪾 㪿 㫀
+ 㫁 㫂 㫃 㫄 㫅 㫆 㫇 㫈 㫉 㫊 㫋 㫌 㫍 㫎 㫏 㫐 㫑 㫒 㫓 㫔
+ 㫕 㫖 㫗 㫘 㫙 㫚 㫛 㫜 㫝 㫞 㫟 㫠 㫡 㫢 㫣 㫤 㫥 㫦 㫧 㫨
+ 㫩 㫪 㫫 㫬 㫭 㫮 㫯 㫰 㫱 㫲 㫳 㫴 㫵 㫶 㫷 㫸 㫹 㫺 㫻 㫼
+ 㫽 㫾 㫿 㬀 㬁 㬂 㬃 㬄 㬅 㬆 㬇 㬈 㬉 㬊 㬋 㬌 㬍 㬎 㬏 㬐
+ 㬑 㬒 㬓 㬔 㬕 㬖 㬗 㬘 㬙 㬚 㬛 㬜 㬝 㬞 㬟 㬠 㬡 㬢 㬣 㬤
+ 㬥 㬦 㬧 㬨 㬩 㬪 㬫 㬬 㬭 㬮 㬯 㬰 㬱 㬲 㬳 㬴 㬵 㬶 㬷 㬸
+ 㬹 㬺 㬻 㬼 㬽 㬾 㬿 㭀 㭁 㭂 㭃 㭄 㭅 㭆 㭇 㭈 㭉 㭊 㭋 㭌
+ 㭍 㭎 㭏 㭐 㭑 㭒 㭓 㭔 㭕 㭖 㭗 㭘 㭙 㭚 㭛 㭜 㭝 㭞 㭟 㭠
+ 㭡 㭢 㭣 㭤 㭥 㭦 㭧 㭨 㭩 㭪 㭫 㭬 㭭 㭮 㭯 㭰 㭱 㭲 㭳 㭴
+ 㭵 㭶 㭷 㭸 㭹 㭺 㭻 㭼 㭽 㭾 㭿 㮀 㮁 㮂 㮃 㮄 㮅 㮆 㮇 㮈
+ 㮉 㮊 㮋 㮌 㮍 㮎 㮏 㮐 㮑 㮒 㮓 㮔 㮕 㮖 㮗 㮘 㮙 㮚 㮛 㮜
+ 㮝 㮞 㮟 㮠 㮡 㮢 㮣 㮤 㮥 㮦 㮧 㮨 㮩 㮪 㮫 㮬 㮭 㮮 㮯 㮰
+ 㮱 㮲 㮳 㮴 㮵 㮶 㮷 㮸 㮹 㮺 㮻 㮼 㮽 㮾 㮿 㯀 㯁 㯂 㯃 㯄
+ 㯅 㯆 㯇 㯈 㯉 㯊 㯋 㯌 㯍 㯎 㯏 㯐 㯑 㯒 㯓 㯔 㯕 㯖 㯗 㯘
+ 㯙 㯚 㯛 㯜 㯝 㯞 㯟 㯠 㯡 㯢 㯣 㯤 㯥 㯦 㯧 㯨 㯩 㯪 㯫 㯬
+ 㯭 㯮 㯯 㯰 㯱 㯲 㯳 㯴 㯵 㯶 㯷 㯸 㯹 㯺 㯻 㯼 㯽 㯾 㯿 㰀
+ 㰁 㰂 㰃 㰄 㰅 㰆 㰇 㰈 㰉 㰊 㰋 㰌 㰍 㰎 㰏 㰐 㰑 㰒 㰓 㰔
+ 㰕 㰖 㰗 㰘 㰙 㰚 㰛 㰜 㰝 㰞 㰟 㰠 㰡 㰢 㰣 㰤 㰥 㰦 㰧 㰨
+ 㰩 㰪 㰫 㰬 㰭 㰮 㰯 㰰 㰱 㰲 㰳 㰴 㰵 㰶 㰷 㰸 㰹 㰺 㰻 㰼
+ 㰽 㰾 㰿 㱀 㱁 㱂 㱃 㱄 㱅 㱆 㱇 㱈 㱉 㱊 㱋 㱌 㱍 㱎 㱏 㱐
+ 㱑 㱒 㱓 㱔 㱕 㱖 㱗 㱘 㱙 㱚 㱛 㱜 㱝 㱞 㱟 㱠 㱡 㱢 㱣 㱤
+ 㱥 㱦 㱧 㱨 㱩 㱪 㱫 㱬 㱭 㱮 㱯 㱰 㱱 㱲 㱳 㱴 㱵 㱶 㱷 㱸
+ 㱹 㱺 㱻 㱼 㱽 㱾 㱿 㲀 㲁 㲂 㲃 㲄 㲅 㲆 㲇 㲈 㲉 㲊 㲋 㲌
+ 㲍 㲎 㲏 㲐 㲑 㲒 㲓 㲔 㲕 㲖 㲗 㲘 㲙 㲚 㲛 㲜 㲝 㲞 㲟 㲠
+ 㲡 㲢 㲣 㲤 㲥 㲦 㲧 㲨 㲩 㲪 㲫 㲬 㲭 㲮 㲯 㲰 㲱 㲲 㲳 㲴
+ 㲵 㲶 㲷 㲸 㲹 㲺 㲻 㲼 㲽 㲾 㲿 㳀 㳁 㳂 㳃 㳄 㳅 㳆 㳇 㳈
+ 㳉 㳊 㳋 㳌 㳍 㳎 㳏 㳐 㳑 㳒 㳓 㳔 㳕 㳖 㳗 㳘 㳙 㳚 㳛 㳜
+ 㳝 㳞 㳟 㳠 㳡 㳢 㳣 㳤 㳥 㳦 㳧 㳨 㳩 㳪 㳫 㳬 㳭 㳮 㳯 㳰
+ 㳱 㳲 㳳 㳴 㳵 㳶 㳷 㳸 㳹 㳺 㳻 㳼 㳽 㳾 㳿 㴀 㴁 㴂 㴃 㴄
+ 㴅 㴆 㴇 㴈 㴉 㴊 㴋 㴌 㴍 㴎 㴏 㴐 㴑 㴒 㴓 㴔 㴕 㴖 㴗 㴘
+ 㴙 㴚 㴛 㴜 㴝 㴞 㴟 㴠 㴡 㴢 㴣 㴤 㴥 㴦 㴧 㴨 㴩 㴪 㴫 㴬
+ 㴭 㴮 㴯 㴰 㴱 㴲 㴳 㴴 㴵 㴶 㴷 㴸 㴹 㴺 㴻 㴼 㴽 㴾 㴿 㵀
+ 㵁 㵂 㵃 㵄 㵅 㵆 㵇 㵈 㵉 㵊 㵋 㵌 㵍 㵎 㵏 㵐 㵑 㵒 㵓 㵔
+ 㵕 㵖 㵗 㵘 㵙 㵚 㵛 㵜 㵝 㵞 㵟 㵠 㵡 㵢 㵣 㵤 㵥 㵦 㵧 㵨
+ 㵩 㵪 㵫 㵬 㵭 㵮 㵯 㵰 㵱 㵲 㵳 㵴 㵵 㵶 㵷 㵸 㵹 㵺 㵻 㵼
+ 㵽 㵾 㵿 㶀 㶁 㶂 㶃 㶄 㶅 㶆 㶇 㶈 㶉 㶊 㶋 㶌 㶍 㶎 㶏 㶐
+ 㶑 㶒 㶓 㶔 㶕 㶖 㶗 㶘 㶙 㶚 㶛 㶜 㶝 㶞 㶟 㶠 㶡 㶢 㶣 㶤
+ 㶥 㶦 㶧 㶨 㶩 㶪 㶫 㶬 㶭 㶮 㶯 㶰 㶱 㶲 㶳 㶴 㶵 㶶 㶷 㶸
+ 㶹 㶺 㶻 㶼 㶽 㶾 㶿 㷀 㷁 㷂 㷃 㷄 㷅 㷆 㷇 㷈 㷉 㷊 㷋 㷌
+ 㷍 㷎 㷏 㷐 㷑 㷒 㷓 㷔 㷕 㷖 㷗 㷘 㷙 㷚 㷛 㷜 㷝 㷞 㷟 㷠
+ 㷡 㷢 㷣 㷤 㷥 㷦 㷧 㷨 㷩 㷪 㷫 㷬 㷭 㷮 㷯 㷰 㷱 㷲 㷳 㷴
+ 㷵 㷶 㷷 㷸 㷹 㷺 㷻 㷼 㷽 㷾 㷿 㸀 㸁 㸂 㸃 㸄 㸅 㸆 㸇 㸈
+ 㸉 㸊 㸋 㸌 㸍 㸎 㸏 㸐 㸑 㸒 㸓 㸔 㸕 㸖 㸗 㸘 㸙 㸚 㸛 㸜
+ 㸝 㸞 㸟 㸠 㸡 㸢 㸣 㸤 㸥 㸦 㸧 㸨 㸩 㸪 㸫 㸬 㸭 㸮 㸯 㸰
+ 㸱 㸲 㸳 㸴 㸵 㸶 㸷 㸸 㸹 㸺 㸻 㸼 㸽 㸾 㸿 㹀 㹁 㹂 㹃 㹄
+ 㹅 㹆 㹇 㹈 㹉 㹊 㹋 㹌 㹍 㹎 㹏 㹐 㹑 㹒 㹓 㹔 㹕 㹖 㹗 㹘
+ 㹙 㹚 㹛 㹜 㹝 㹞 㹟 㹠 㹡 㹢 㹣 㹤 㹥 㹦 㹧 㹨 㹩 㹪 㹫 㹬
+ 㹭 㹮 㹯 㹰 㹱 㹲 㹳 㹴 㹵 㹶 㹷 㹸 㹹 㹺 㹻 㹼 㹽 㹾 㹿 㺀
+ 㺁 㺂 㺃 㺄 㺅 㺆 㺇 㺈 㺉 㺊 㺋 㺌 㺍 㺎 㺏 㺐 㺑 㺒 㺓 㺔
+ 㺕 㺖 㺗 㺘 㺙 㺚 㺛 㺜 㺝 㺞 㺟 㺠 㺡 㺢 㺣 㺤 㺥 㺦 㺧 㺨
+ 㺩 㺪 㺫 㺬 㺭 㺮 㺯 㺰 㺱 㺲 㺳 㺴 㺵 㺶 㺷 㺸 㺹 㺺 㺻 㺼
+ 㺽 㺾 㺿 㻀 㻁 㻂 㻃 㻄 㻅 㻆 㻇 㻈 㻉 㻊 㻋 㻌 㻍 㻎 㻏 㻐
+ 㻑 㻒 㻓 㻔 㻕 㻖 㻗 㻘 㻙 㻚 㻛 㻜 㻝 㻞 㻟 㻠 㻡 㻢 㻣 㻤
+ 㻥 㻦 㻧 㻨 㻩 㻪 㻫 㻬 㻭 㻮 㻯 㻰 㻱 㻲 㻳 㻴 㻵 㻶 㻷 㻸
+ 㻹 㻺 㻻 㻼 㻽 㻾 㻿 㼀 㼁 㼂 㼃 㼄 㼅 㼆 㼇 㼈 㼉 㼊 㼋 㼌
+ 㼍 㼎 㼏 㼐 㼑 㼒 㼓 㼔 㼕 㼖 㼗 㼘 㼙 㼚 㼛 㼜 㼝 㼞 㼟 㼠
+ 㼡 㼢 㼣 㼤 㼥 㼦 㼧 㼨 㼩 㼪 㼫 㼬 㼭 㼮 㼯 㼰 㼱 㼲 㼳 㼴
+ 㼵 㼶 㼷 㼸 㼹 㼺 㼻 㼼 㼽 㼾 㼿 㽀 㽁 㽂 㽃 㽄 㽅 㽆 㽇 㽈
+ 㽉 㽊 㽋 㽌 㽍 㽎 㽏 㽐 㽑 㽒 㽓 㽔 㽕 㽖 㽗 㽘 㽙 㽚 㽛 㽜
+ 㽝 㽞 㽟 㽠 㽡 㽢 㽣 㽤 㽥 㽦 㽧 㽨 㽩 㽪 㽫 㽬 㽭 㽮 㽯 㽰
+ 㽱 㽲 㽳 㽴 㽵 㽶 㽷 㽸 㽹 㽺 㽻 㽼 㽽 㽾 㽿 㾀 㾁 㾂 㾃 㾄
+ 㾅 㾆 㾇 㾈 㾉 㾊 㾋 㾌 㾍 㾎 㾏 㾐 㾑 㾒 㾓 㾔 㾕 㾖 㾗 㾘
+ 㾙 㾚 㾛 㾜 㾝 㾞 㾟 㾠 㾡 㾢 㾣 㾤 㾥 㾦 㾧 㾨 㾩 㾪 㾫 㾬
+ 㾭 㾮 㾯 㾰 㾱 㾲 㾳 㾴 㾵 㾶 㾷 㾸 㾹 㾺 㾻 㾼 㾽 㾾 㾿 㿀
+ 㿁 㿂 㿃 㿄 㿅 㿆 㿇 㿈 㿉 㿊 㿋 㿌 㿍 㿎 㿏 㿐 㿑 㿒 㿓 㿔
+ 㿕 㿖 㿗 㿘 㿙 㿚 㿛 㿜 㿝 㿞 㿟 㿠 㿡 㿢 㿣 㿤 㿥 㿦 㿧 㿨
+ 㿩 㿪 㿫 㿬 㿭 㿮 㿯 㿰 㿱 㿲 㿳 㿴 㿵 㿶 㿷 㿸 㿹 㿺 㿻 㿼
+ 㿽 㿾 㿿 䀀 䀁 䀂 䀃 䀄 䀅 䀆 䀇 䀈 䀉 䀊 䀋 䀌 䀍 䀎 䀏 䀐
+ 䀑 䀒 䀓 䀔 䀕 䀖 䀗 䀘 䀙 䀚 䀛 䀜 䀝 䀞 䀟 䀠 䀡 䀢 䀣 䀤
+ 䀥 䀦 䀧 䀨 䀩 䀪 䀫 䀬 䀭 䀮 䀯 䀰 䀱 䀲 䀳 䀴 䀵 䀶 䀷 䀸
+ 䀹 䀺 䀻 䀼 䀽 䀾 䀿 䁀 䁁 䁂 䁃 䁄 䁅 䁆 䁇 䁈 䁉 䁊 䁋 䁌
+ 䁍 䁎 䁏 䁐 䁑 䁒 䁓 䁔 䁕 䁖 䁗 䁘 䁙 䁚 䁛 䁜 䁝 䁞 䁟 䁠
+ 䁡 䁢 䁣 䁤 䁥 䁦 䁧 䁨 䁩 䁪 䁫 䁬 䁭 䁮 䁯 䁰 䁱 䁲 䁳 䁴
+ 䁵 䁶 䁷 䁸 䁹 䁺 䁻 䁼 䁽 䁾 䁿 䂀 䂁 䂂 䂃 䂄 䂅 䂆 䂇 䂈
+ 䂉 䂊 䂋 䂌 䂍 䂎 䂏 䂐 䂑 䂒 䂓 䂔 䂕 䂖 䂗 䂘 䂙 䂚 䂛 䂜
+ 䂝 䂞 䂟 䂠 䂡 䂢 䂣 䂤 䂥 䂦 䂧 䂨 䂩 䂪 䂫 䂬 䂭 䂮 䂯 䂰
+ 䂱 䂲 䂳 䂴 䂵 䂶 䂷 䂸 䂹 䂺 䂻 䂼 䂽 䂾 䂿 䃀 䃁 䃂 䃃 䃄
+ 䃅 䃆 䃇 䃈 䃉 䃊 䃋 䃌 䃍 䃎 䃏 䃐 䃑 䃒 䃓 䃔 䃕 䃖 䃗 䃘
+ 䃙 䃚 䃛 䃜 䃝 䃞 䃟 䃠 䃡 䃢 䃣 䃤 䃥 䃦 䃧 䃨 䃩 䃪 䃫 䃬
+ 䃭 䃮 䃯 䃰 䃱 䃲 䃳 䃴 䃵 䃶 䃷 䃸 䃹 䃺 䃻 䃼 䃽 䃾 䃿 䄀
+ 䄁 䄂 䄃 䄄 䄅 䄆 䄇 䄈 䄉 䄊 䄋 䄌 䄍 䄎 䄏 䄐 䄑 䄒 䄓 䄔
+ 䄕 䄖 䄗 䄘 䄙 䄚 䄛 䄜 䄝 䄞 䄟 䄠 䄡 䄢 䄣 䄤 䄥 䄦 䄧 䄨
+ 䄩 䄪 䄫 䄬 䄭 䄮 䄯 䄰 䄱 䄲 䄳 䄴 䄵 䄶 䄷 䄸 䄹 䄺 䄻 䄼
+ 䄽 䄾 䄿 䅀 䅁 䅂 䅃 䅄 䅅 䅆 䅇 䅈 䅉 䅊 䅋 䅌 䅍 䅎 䅏 䅐
+ 䅑 䅒 䅓 䅔 䅕 䅖 䅗 䅘 䅙 䅚 䅛 䅜 䅝 䅞 䅟 䅠 䅡 䅢 䅣 䅤
+ 䅥 䅦 䅧 䅨 䅩 䅪 䅫 䅬 䅭 䅮 䅯 䅰 䅱 䅲 䅳 䅴 䅵 䅶 䅷 䅸
+ 䅹 䅺 䅻 䅼 䅽 䅾 䅿 䆀 䆁 䆂 䆃 䆄 䆅 䆆 䆇 䆈 䆉 䆊 䆋 䆌
+ 䆍 䆎 䆏 䆐 䆑 䆒 䆓 䆔 䆕 䆖 䆗 䆘 䆙 䆚 䆛 䆜 䆝 䆞 䆟 䆠
+ 䆡 䆢 䆣 䆤 䆥 䆦 䆧 䆨 䆩 䆪 䆫 䆬 䆭 䆮 䆯 䆰 䆱 䆲 䆳 䆴
+ 䆵 䆶 䆷 䆸 䆹 䆺 䆻 䆼 䆽 䆾 䆿 䇀 䇁 䇂 䇃 䇄 䇅 䇆 䇇 䇈
+ 䇉 䇊 䇋 䇌 䇍 䇎 䇏 䇐 䇑 䇒 䇓 䇔 䇕 䇖 䇗 䇘 䇙 䇚 䇛 䇜
+ 䇝 䇞 䇟 䇠 䇡 䇢 䇣 䇤 䇥 䇦 䇧 䇨 䇩 䇪 䇫 䇬 䇭 䇮 䇯 䇰
+ 䇱 䇲 䇳 䇴 䇵 䇶 䇷 䇸 䇹 䇺 䇻 䇼 䇽 䇾 䇿 䈀 䈁 䈂 䈃 䈄
+ 䈅 䈆 䈇 䈈 䈉 䈊 䈋 䈌 䈍 䈎 䈏 䈐 䈑 䈒 䈓 䈔 䈕 䈖 䈗 䈘
+ 䈙 䈚 䈛 䈜 䈝 䈞 䈟 䈠 䈡 䈢 䈣 䈤 䈥 䈦 䈧 䈨 䈩 䈪 䈫 䈬
+ 䈭 䈮 䈯 䈰 䈱 䈲 䈳 䈴 䈵 䈶 䈷 䈸 䈹 䈺 䈻 䈼 䈽 䈾 䈿 䉀
+ 䉁 䉂 䉃 䉄 䉅 䉆 䉇 䉈 䉉 䉊 䉋 䉌 䉍 䉎 䉏 䉐 䉑 䉒 䉓 䉔
+ 䉕 䉖 䉗 䉘 䉙 䉚 䉛 䉜 䉝 䉞 䉟 䉠 䉡 䉢 䉣 䉤 䉥 䉦 䉧 䉨
+ 䉩 䉪 䉫 䉬 䉭 䉮 䉯 䉰 䉱 䉲 䉳 䉴 䉵 䉶 䉷 䉸 䉹 䉺 䉻 䉼
+ 䉽 䉾 䉿 䊀 䊁 䊂 䊃 䊄 䊅 䊆 䊇 䊈 䊉 䊊 䊋 䊌 䊍 䊎 䊏 䊐
+ 䊑 䊒 䊓 䊔 䊕 䊖 䊗 䊘 䊙 䊚 䊛 䊜 䊝 䊞 䊟 䊠 䊡 䊢 䊣 䊤
+ 䊥 䊦 䊧 䊨 䊩 䊪 䊫 䊬 䊭 䊮 䊯 䊰 䊱 䊲 䊳 䊴 䊵 䊶 䊷 䊸
+ 䊹 䊺 䊻 䊼 䊽 䊾 䊿 䋀 䋁 䋂 䋃 䋄 䋅 䋆 䋇 䋈 䋉 䋊 䋋 䋌
+ 䋍 䋎 䋏 䋐 䋑 䋒 䋓 䋔 䋕 䋖 䋗 䋘 䋙 䋚 䋛 䋜 䋝 䋞 䋟 䋠
+ 䋡 䋢 䋣 䋤 䋥 䋦 䋧 䋨 䋩 䋪 䋫 䋬 䋭 䋮 䋯 䋰 䋱 䋲 䋳 䋴
+ 䋵 䋶 䋷 䋸 䋹 䋺 䋻 䋼 䋽 䋾 䋿 䌀 䌁 䌂 䌃 䌄 䌅 䌆 䌇 䌈
+ 䌉 䌊 䌋 䌌 䌍 䌎 䌏 䌐 䌑 䌒 䌓 䌔 䌕 䌖 䌗 䌘 䌙 䌚 䌛 䌜
+ 䌝 䌞 䌟 䌠 䌡 䌢 䌣 䌤 䌥 䌦 䌧 䌨 䌩 䌪 䌫 䌬 䌭 䌮 䌯 䌰
+ 䌱 䌲 䌳 䌴 䌵 䌶 䌷 䌸 䌹 䌺 䌻 䌼 䌽 䌾 䌿 䍀 䍁 䍂 䍃 䍄
+ 䍅 䍆 䍇 䍈 䍉 䍊 䍋 䍌 䍍 䍎 䍏 䍐 䍑 䍒 䍓 䍔 䍕 䍖 䍗 䍘
+ 䍙 䍚 䍛 䍜 䍝 䍞 䍟 䍠 䍡 䍢 䍣 䍤 䍥 䍦 䍧 䍨 䍩 䍪 䍫 䍬
+ 䍭 䍮 䍯 䍰 䍱 䍲 䍳 䍴 䍵 䍶 䍷 䍸 䍹 䍺 䍻 䍼 䍽 䍾 䍿 䎀
+ 䎁 䎂 䎃 䎄 䎅 䎆 䎇 䎈 䎉 䎊 䎋 䎌 䎍 䎎 䎏 䎐 䎑 䎒 䎓 䎔
+ 䎕 䎖 䎗 䎘 䎙 䎚 䎛 䎜 䎝 䎞 䎟 䎠 䎡 䎢 䎣 䎤 䎥 䎦 䎧 䎨
+ 䎩 䎪 䎫 䎬 䎭 䎮 䎯 䎰 䎱 䎲 䎳 䎴 䎵 䎶 䎷 䎸 䎹 䎺 䎻 䎼
+ 䎽 䎾 䎿 䏀 䏁 䏂 䏃 䏄 䏅 䏆 䏇 䏈 䏉 䏊 䏋 䏌 䏍 䏎 䏏 䏐
+ 䏑 䏒 䏓 䏔 䏕 䏖 䏗 䏘 䏙 䏚 䏛 䏜 䏝 䏞 䏟 䏠 䏡 䏢 䏣 䏤
+ 䏥 䏦 䏧 䏨 䏩 䏪 䏫 䏬 䏭 䏮 䏯 䏰 䏱 䏲 䏳 䏴 䏵 䏶 䏷 䏸
+ 䏹 䏺 䏻 䏼 䏽 䏾 䏿 䐀 䐁 䐂 䐃 䐄 䐅 䐆 䐇 䐈 䐉 䐊 䐋 䐌
+ 䐍 䐎 䐏 䐐 䐑 䐒 䐓 䐔 䐕 䐖 䐗 䐘 䐙 䐚 䐛 䐜 䐝 䐞 䐟 䐠
+ 䐡 䐢 䐣 䐤 䐥 䐦 䐧 䐨 䐩 䐪 䐫 䐬 䐭 䐮 䐯 䐰 䐱 䐲 䐳 䐴
+ 䐵 䐶 䐷 䐸 䐹 䐺 䐻 䐼 䐽 䐾 䐿 䑀 䑁 䑂 䑃 䑄 䑅 䑆 䑇 䑈
+ 䑉 䑊 䑋 䑌 䑍 䑎 䑏 䑐 䑑 䑒 䑓 䑔 䑕 䑖 䑗 䑘 䑙 䑚 䑛 䑜
+ 䑝 䑞 䑟 䑠 䑡 䑢 䑣 䑤 䑥 䑦 䑧 䑨 䑩 䑪 䑫 䑬 䑭 䑮 䑯 䑰
+ 䑱 䑲 䑳 䑴 䑵 䑶 䑷 䑸 䑹 䑺 䑻 䑼 䑽 䑾 䑿 䒀 䒁 䒂 䒃 䒄
+ 䒅 䒆 䒇 䒈 䒉 䒊 䒋 䒌 䒍 䒎 䒏 䒐 䒑 䒒 䒓 䒔 䒕 䒖 䒗 䒘
+ 䒙 䒚 䒛 䒜 䒝 䒞 䒟 䒠 䒡 䒢 䒣 䒤 䒥 䒦 䒧 䒨 䒩 䒪 䒫 䒬
+ 䒭 䒮 䒯 䒰 䒱 䒲 䒳 䒴 䒵 䒶 䒷 䒸 䒹 䒺 䒻 䒼 䒽 䒾 䒿 䓀
+ 䓁 䓂 䓃 䓄 䓅 䓆 䓇 䓈 䓉 䓊 䓋 䓌 䓍 䓎 䓏 䓐 䓑 䓒 䓓 䓔
+ 䓕 䓖 䓗 䓘 䓙 䓚 䓛 䓜 䓝 䓞 䓟 䓠 䓡 䓢 䓣 䓤 䓥 䓦 䓧 䓨
+ 䓩 䓪 䓫 䓬 䓭 䓮 䓯 䓰 䓱 䓲 䓳 䓴 䓵 䓶 䓷 䓸 䓹 䓺 䓻 䓼
+ 䓽 䓾 䓿 䔀 䔁 䔂 䔃 䔄 䔅 䔆 䔇 䔈 䔉 䔊 䔋 䔌 䔍 䔎 䔏 䔐
+ 䔑 䔒 䔓 䔔 䔕 䔖 䔗 䔘 䔙 䔚 䔛 䔜 䔝 䔞 䔟 䔠 䔡 䔢 䔣 䔤
+ 䔥 䔦 䔧 䔨 䔩 䔪 䔫 䔬 䔭 䔮 䔯 䔰 䔱 䔲 䔳 䔴 䔵 䔶 䔷 䔸
+ 䔹 䔺 䔻 䔼 䔽 䔾 䔿 䕀 䕁 䕂 䕃 䕄 䕅 䕆 䕇 䕈 䕉 䕊 䕋 䕌
+ 䕍 䕎 䕏 䕐 䕑 䕒 䕓 䕔 䕕 䕖 䕗 䕘 䕙 䕚 䕛 䕜 䕝 䕞 䕟 䕠
+ 䕡 䕢 䕣 䕤 䕥 䕦 䕧 䕨 䕩 䕪 䕫 䕬 䕭 䕮 䕯 䕰 䕱 䕲 䕳 䕴
+ 䕵 䕶 䕷 䕸 䕹 䕺 䕻 䕼 䕽 䕾 䕿 䖀 䖁 䖂 䖃 䖄 䖅 䖆 䖇 䖈
+ 䖉 䖊 䖋 䖌 䖍 䖎 䖏 䖐 䖑 䖒 䖓 䖔 䖕 䖖 䖗 䖘 䖙 䖚 䖛 䖜
+ 䖝 䖞 䖟 䖠 䖡 䖢 䖣 䖤 䖥 䖦 䖧 䖨 䖩 䖪 䖫 䖬 䖭 䖮 䖯 䖰
+ 䖱 䖲 䖳 䖴 䖵 䖶 䖷 䖸 䖹 䖺 䖻 䖼 䖽 䖾 䖿 䗀 䗁 䗂 䗃 䗄
+ 䗅 䗆 䗇 䗈 䗉 䗊 䗋 䗌 䗍 䗎 䗏 䗐 䗑 䗒 䗓 䗔 䗕 䗖 䗗 䗘
+ 䗙 䗚 䗛 䗜 䗝 䗞 䗟 䗠 䗡 䗢 䗣 䗤 䗥 䗦 䗧 䗨 䗩 䗪 䗫 䗬
+ 䗭 䗮 䗯 䗰 䗱 䗲 䗳 䗴 䗵 䗶 䗷 䗸 䗹 䗺 䗻 䗼 䗽 䗾 䗿 䘀
+ 䘁 䘂 䘃 䘄 䘅 䘆 䘇 䘈 䘉 䘊 䘋 䘌 䘍 䘎 䘏 䘐 䘑 䘒 䘓 䘔
+ 䘕 䘖 䘗 䘘 䘙 䘚 䘛 䘜 䘝 䘞 䘟 䘠 䘡 䘢 䘣 䘤 䘥 䘦 䘧 䘨
+ 䘩 䘪 䘫 䘬 䘭 䘮 䘯 䘰 䘱 䘲 䘳 䘴 䘵 䘶 䘷 䘸 䘹 䘺 䘻 䘼
+ 䘽 䘾 䘿 䙀 䙁 䙂 䙃 䙄 䙅 䙆 䙇 䙈 䙉 䙊 䙋 䙌 䙍 䙎 䙏 䙐
+ 䙑 䙒 䙓 䙔 䙕 䙖 䙗 䙘 䙙 䙚 䙛 䙜 䙝 䙞 䙟 䙠 䙡 䙢 䙣 䙤
+ 䙥 䙦 䙧 䙨 䙩 䙪 䙫 䙬 䙭 䙮 䙯 䙰 䙱 䙲 䙳 䙴 䙵 䙶 䙷 䙸
+ 䙹 䙺 䙻 䙼 䙽 䙾 䙿 䚀 䚁 䚂 䚃 䚄 䚅 䚆 䚇 䚈 䚉 䚊 䚋 䚌
+ 䚍 䚎 䚏 䚐 䚑 䚒 䚓 䚔 䚕 䚖 䚗 䚘 䚙 䚚 䚛 䚜 䚝 䚞 䚟 䚠
+ 䚡 䚢 䚣 䚤 䚥 䚦 䚧 䚨 䚩 䚪 䚫 䚬 䚭 䚮 䚯 䚰 䚱 䚲 䚳 䚴
+ 䚵 䚶 䚷 䚸 䚹 䚺 䚻 䚼 䚽 䚾 䚿 䛀 䛁 䛂 䛃 䛄 䛅 䛆 䛇 䛈
+ 䛉 䛊 䛋 䛌 䛍 䛎 䛏 䛐 䛑 䛒 䛓 䛔 䛕 䛖 䛗 䛘 䛙 䛚 䛛 䛜
+ 䛝 䛞 䛟 䛠 䛡 䛢 䛣 䛤 䛥 䛦 䛧 䛨 䛩 䛪 䛫 䛬 䛭 䛮 䛯 䛰
+ 䛱 䛲 䛳 䛴 䛵 䛶 䛷 䛸 䛹 䛺 䛻 䛼 䛽 䛾 䛿 䜀 䜁 䜂 䜃 䜄
+ 䜅 䜆 䜇 䜈 䜉 䜊 䜋 䜌 䜍 䜎 䜏 䜐 䜑 䜒 䜓 䜔 䜕 䜖 䜗 䜘
+ 䜙 䜚 䜛 䜜 䜝 䜞 䜟 䜠 䜡 䜢 䜣 䜤 䜥 䜦 䜧 䜨 䜩 䜪 䜫 䜬
+ 䜭 䜮 䜯 䜰 䜱 䜲 䜳 䜴 䜵 䜶 䜷 䜸 䜹 䜺 䜻 䜼 䜽 䜾 䜿 䝀
+ 䝁 䝂 䝃 䝄 䝅 䝆 䝇 䝈 䝉 䝊 䝋 䝌 䝍 䝎 䝏 䝐 䝑 䝒 䝓 䝔
+ 䝕 䝖 䝗 䝘 䝙 䝚 䝛 䝜 䝝 䝞 䝟 䝠 䝡 䝢 䝣 䝤 䝥 䝦 䝧 䝨
+ 䝩 䝪 䝫 䝬 䝭 䝮 䝯 䝰 䝱 䝲 䝳 䝴 䝵 䝶 䝷 䝸 䝹 䝺 䝻 䝼
+ 䝽 䝾 䝿 䞀 䞁 䞂 䞃 䞄 䞅 䞆 䞇 䞈 䞉 䞊 䞋 䞌 䞍 䞎 䞏 䞐
+ 䞑 䞒 䞓 䞔 䞕 䞖 䞗 䞘 䞙 䞚 䞛 䞜 䞝 䞞 䞟 䞠 䞡 䞢 䞣 䞤
+ 䞥 䞦 䞧 䞨 䞩 䞪 䞫 䞬 䞭 䞮 䞯 䞰 䞱 䞲 䞳 䞴 䞵 䞶 䞷 䞸
+ 䞹 䞺 䞻 䞼 䞽 䞾 䞿 䟀 䟁 䟂 䟃 䟄 䟅 䟆 䟇 䟈 䟉 䟊 䟋 䟌
+ 䟍 䟎 䟏 䟐 䟑 䟒 䟓 䟔 䟕 䟖 䟗 䟘 䟙 䟚 䟛 䟜 䟝 䟞 䟟 䟠
+ 䟡 䟢 䟣 䟤 䟥 䟦 䟧 䟨 䟩 䟪 䟫 䟬 䟭 䟮 䟯 䟰 䟱 䟲 䟳 䟴
+ 䟵 䟶 䟷 䟸 䟹 䟺 䟻 䟼 䟽 䟾 䟿 䠀 䠁 䠂 䠃 䠄 䠅 䠆 䠇 䠈
+ 䠉 䠊 䠋 䠌 䠍 䠎 䠏 䠐 䠑 䠒 䠓 䠔 䠕 䠖 䠗 䠘 䠙 䠚 䠛 䠜
+ 䠝 䠞 䠟 䠠 䠡 䠢 䠣 䠤 䠥 䠦 䠧 䠨 䠩 䠪 䠫 䠬 䠭 䠮 䠯 䠰
+ 䠱 䠲 䠳 䠴 䠵 䠶 䠷 䠸 䠹 䠺 䠻 䠼 䠽 䠾 䠿 䡀 䡁 䡂 䡃 䡄
+ 䡅 䡆 䡇 䡈 䡉 䡊 䡋 䡌 䡍 䡎 䡏 䡐 䡑 䡒 䡓 䡔 䡕 䡖 䡗 䡘
+ 䡙 䡚 䡛 䡜 䡝 䡞 䡟 䡠 䡡 䡢 䡣 䡤 䡥 䡦 䡧 䡨 䡩 䡪 䡫 䡬
+ 䡭 䡮 䡯 䡰 䡱 䡲 䡳 䡴 䡵 䡶 䡷 䡸 䡹 䡺 䡻 䡼 䡽 䡾 䡿 䢀
+ 䢁 䢂 䢃 䢄 䢅 䢆 䢇 䢈 䢉 䢊 䢋 䢌 䢍 䢎 䢏 䢐 䢑 䢒 䢓 䢔
+ 䢕 䢖 䢗 䢘 䢙 䢚 䢛 䢜 䢝 䢞 䢟 䢠 䢡 䢢 䢣 䢤 䢥 䢦 䢧 䢨
+ 䢩 䢪 䢫 䢬 䢭 䢮 䢯 䢰 䢱 䢲 䢳 䢴 䢵 䢶 䢷 䢸 䢹 䢺 䢻 䢼
+ 䢽 䢾 䢿 䣀 䣁 䣂 䣃 䣄 䣅 䣆 䣇 䣈 䣉 䣊 䣋 䣌 䣍 䣎 䣏 䣐
+ 䣑 䣒 䣓 䣔 䣕 䣖 䣗 䣘 䣙 䣚 䣛 䣜 䣝 䣞 䣟 䣠 䣡 䣢 䣣 䣤
+ 䣥 䣦 䣧 䣨 䣩 䣪 䣫 䣬 䣭 䣮 䣯 䣰 䣱 䣲 䣳 䣴 䣵 䣶 䣷 䣸
+ 䣹 䣺 䣻 䣼 䣽 䣾 䣿 䤀 䤁 䤂 䤃 䤄 䤅 䤆 䤇 䤈 䤉 䤊 䤋 䤌
+ 䤍 䤎 䤏 䤐 䤑 䤒 䤓 䤔 䤕 䤖 䤗 䤘 䤙 䤚 䤛 䤜 䤝 䤞 䤟 䤠
+ 䤡 䤢 䤣 䤤 䤥 䤦 䤧 䤨 䤩 䤪 䤫 䤬 䤭 䤮 䤯 䤰 䤱 䤲 䤳 䤴
+ 䤵 䤶 䤷 䤸 䤹 䤺 䤻 䤼 䤽 䤾 䤿 䥀 䥁 䥂 䥃 䥄 䥅 䥆 䥇 䥈
+ 䥉 䥊 䥋 䥌 䥍 䥎 䥏 䥐 䥑 䥒 䥓 䥔 䥕 䥖 䥗 䥘 䥙 䥚 䥛 䥜
+ 䥝 䥞 䥟 䥠 䥡 䥢 䥣 䥤 䥥 䥦 䥧 䥨 䥩 䥪 䥫 䥬 䥭 䥮 䥯 䥰
+ 䥱 䥲 䥳 䥴 䥵 䥶 䥷 䥸 䥹 䥺 䥻 䥼 䥽 䥾 䥿 䦀 䦁 䦂 䦃 䦄
+ 䦅 䦆 䦇 䦈 䦉 䦊 䦋 䦌 䦍 䦎 䦏 䦐 䦑 䦒 䦓 䦔 䦕 䦖 䦗 䦘
+ 䦙 䦚 䦛 䦜 䦝 䦞 䦟 䦠 䦡 䦢 䦣 䦤 䦥 䦦 䦧 䦨 䦩 䦪 䦫 䦬
+ 䦭 䦮 䦯 䦰 䦱 䦲 䦳 䦴 䦵 䦶 䦷 䦸 䦹 䦺 䦻 䦼 䦽 䦾 䦿 䧀
+ 䧁 䧂 䧃 䧄 䧅 䧆 䧇 䧈 䧉 䧊 䧋 䧌 䧍 䧎 䧏 䧐 䧑 䧒 䧓 䧔
+ 䧕 䧖 䧗 䧘 䧙 䧚 䧛 䧜 䧝 䧞 䧟 䧠 䧡 䧢 䧣 䧤 䧥 䧦 䧧 䧨
+ 䧩 䧪 䧫 䧬 䧭 䧮 䧯 䧰 䧱 䧲 䧳 䧴 䧵 䧶 䧷 䧸 䧹 䧺 䧻 䧼
+ 䧽 䧾 䧿 䨀 䨁 䨂 䨃 䨄 䨅 䨆 䨇 䨈 䨉 䨊 䨋 䨌 䨍 䨎 䨏 䨐
+ 䨑 䨒 䨓 䨔 䨕 䨖 䨗 䨘 䨙 䨚 䨛 䨜 䨝 䨞 䨟 䨠 䨡 䨢 䨣 䨤
+ 䨥 䨦 䨧 䨨 䨩 䨪 䨫 䨬 䨭 䨮 䨯 䨰 䨱 䨲 䨳 䨴 䨵 䨶 䨷 䨸
+ 䨹 䨺 䨻 䨼 䨽 䨾 䨿 䩀 䩁 䩂 䩃 䩄 䩅 䩆 䩇 䩈 䩉 䩊 䩋 䩌
+ 䩍 䩎 䩏 䩐 䩑 䩒 䩓 䩔 䩕 䩖 䩗 䩘 䩙 䩚 䩛 䩜 䩝 䩞 䩟 䩠
+ 䩡 䩢 䩣 䩤 䩥 䩦 䩧 䩨 䩩 䩪 䩫 䩬 䩭 䩮 䩯 䩰 䩱 䩲 䩳 䩴
+ 䩵 䩶 䩷 䩸 䩹 䩺 䩻 䩼 䩽 䩾 䩿 䪀 䪁 䪂 䪃 䪄 䪅 䪆 䪇 䪈
+ 䪉 䪊 䪋 䪌 䪍 䪎 䪏 䪐 䪑 䪒 䪓 䪔 䪕 䪖 䪗 䪘 䪙 䪚 䪛 䪜
+ 䪝 䪞 䪟 䪠 䪡 䪢 䪣 䪤 䪥 䪦 䪧 䪨 䪩 䪪 䪫 䪬 䪭 䪮 䪯 䪰
+ 䪱 䪲 䪳 䪴 䪵 䪶 䪷 䪸 䪹 䪺 䪻 䪼 䪽 䪾 䪿 䫀 䫁 䫂 䫃 䫄
+ 䫅 䫆 䫇 䫈 䫉 䫊 䫋 䫌 䫍 䫎 䫏 䫐 䫑 䫒 䫓 䫔 䫕 䫖 䫗 䫘
+ 䫙 䫚 䫛 䫜 䫝 䫞 䫟 䫠 䫡 䫢 䫣 䫤 䫥 䫦 䫧 䫨 䫩 䫪 䫫 䫬
+ 䫭 䫮 䫯 䫰 䫱 䫲 䫳 䫴 䫵 䫶 䫷 䫸 䫹 䫺 䫻 䫼 䫽 䫾 䫿 䬀
+ 䬁 䬂 䬃 䬄 䬅 䬆 䬇 䬈 䬉 䬊 䬋 䬌 䬍 䬎 䬏 䬐 䬑 䬒 䬓 䬔
+ 䬕 䬖 䬗 䬘 䬙 䬚 䬛 䬜 䬝 䬞 䬟 䬠 䬡 䬢 䬣 䬤 䬥 䬦 䬧 䬨
+ 䬩 䬪 䬫 䬬 䬭 䬮 䬯 䬰 䬱 䬲 䬳 䬴 䬵 䬶 䬷 䬸 䬹 䬺 䬻 䬼
+ 䬽 䬾 䬿 䭀 䭁 䭂 䭃 䭄 䭅 䭆 䭇 䭈 䭉 䭊 䭋 䭌 䭍 䭎 䭏 䭐
+ 䭑 䭒 䭓 䭔 䭕 䭖 䭗 䭘 䭙 䭚 䭛 䭜 䭝 䭞 䭟 䭠 䭡 䭢 䭣 䭤
+ 䭥 䭦 䭧 䭨 䭩 䭪 䭫 䭬 䭭 䭮 䭯 䭰 䭱 䭲 䭳 䭴 䭵 䭶 䭷 䭸
+ 䭹 䭺 䭻 䭼 䭽 䭾 䭿 䮀 䮁 䮂 䮃 䮄 䮅 䮆 䮇 䮈 䮉 䮊 䮋 䮌
+ 䮍 䮎 䮏 䮐 䮑 䮒 䮓 䮔 䮕 䮖 䮗 䮘 䮙 䮚 䮛 䮜 䮝 䮞 䮟 䮠
+ 䮡 䮢 䮣 䮤 䮥 䮦 䮧 䮨 䮩 䮪 䮫 䮬 䮭 䮮 䮯 䮰 䮱 䮲 䮳 䮴
+ 䮵 䮶 䮷 䮸 䮹 䮺 䮻 䮼 䮽 䮾 䮿 䯀 䯁 䯂 䯃 䯄 䯅 䯆 䯇 䯈
+ 䯉 䯊 䯋 䯌 䯍 䯎 䯏 䯐 䯑 䯒 䯓 䯔 䯕 䯖 䯗 䯘 䯙 䯚 䯛 䯜
+ 䯝 䯞 䯟 䯠 䯡 䯢 䯣 䯤 䯥 䯦 䯧 䯨 䯩 䯪 䯫 䯬 䯭 䯮 䯯 䯰
+ 䯱 䯲 䯳 䯴 䯵 䯶 䯷 䯸 䯹 䯺 䯻 䯼 䯽 䯾 䯿 䰀 䰁 䰂 䰃 䰄
+ 䰅 䰆 䰇 䰈 䰉 䰊 䰋 䰌 䰍 䰎 䰏 䰐 䰑 䰒 䰓 䰔 䰕 䰖 䰗 䰘
+ 䰙 䰚 䰛 䰜 䰝 䰞 䰟 䰠 䰡 䰢 䰣 䰤 䰥 䰦 䰧 䰨 䰩 䰪 䰫 䰬
+ 䰭 䰮 䰯 䰰 䰱 䰲 䰳 䰴 䰵 䰶 䰷 䰸 䰹 䰺 䰻 䰼 䰽 䰾 䰿 䱀
+ 䱁 䱂 䱃 䱄 䱅 䱆 䱇 䱈 䱉 䱊 䱋 䱌 䱍 䱎 䱏 䱐 䱑 䱒 䱓 䱔
+ 䱕 䱖 䱗 䱘 䱙 䱚 䱛 䱜 䱝 䱞 䱟 䱠 䱡 䱢 䱣 䱤 䱥 䱦 䱧 䱨
+ 䱩 䱪 䱫 䱬 䱭 䱮 䱯 䱰 䱱 䱲 䱳 䱴 䱵 䱶 䱷 䱸 䱹 䱺 䱻 䱼
+ 䱽 䱾 䱿 䲀 䲁 䲂 䲃 䲄 䲅 䲆 䲇 䲈 䲉 䲊 䲋 䲌 䲍 䲎 䲏 䲐
+ 䲑 䲒 䲓 䲔 䲕 䲖 䲗 䲘 䲙 䲚 䲛 䲜 䲝 䲞 䲟 䲠 䲡 䲢 䲣 䲤
+ 䲥 䲦 䲧 䲨 䲩 䲪 䲫 䲬 䲭 䲮 䲯 䲰 䲱 䲲 䲳 䲴 䲵 䲶 䲷 䲸
+ 䲹 䲺 䲻 䲼 䲽 䲾 䲿 䳀 䳁 䳂 䳃 䳄 䳅 䳆 䳇 䳈 䳉 䳊 䳋 䳌
+ 䳍 䳎 䳏 䳐 䳑 䳒 䳓 䳔 䳕 䳖 䳗 䳘 䳙 䳚 䳛 䳜 䳝 䳞 䳟 䳠
+ 䳡 䳢 䳣 䳤 䳥 䳦 䳧 䳨 䳩 䳪 䳫 䳬 䳭 䳮 䳯 䳰 䳱 䳲 䳳 䳴
+ 䳵 䳶 䳷 䳸 䳹 䳺 䳻 䳼 䳽 䳾 䳿 䴀 䴁 䴂 䴃 䴄 䴅 䴆 䴇 䴈
+ 䴉 䴊 䴋 䴌 䴍 䴎 䴏 䴐 䴑 䴒 䴓 䴔 䴕 䴖 䴗 䴘 䴙 䴚 䴛 䴜
+ 䴝 䴞 䴟 䴠 䴡 䴢 䴣 䴤 䴥 䴦 䴧 䴨 䴩 䴪 䴫 䴬 䴭 䴮 䴯 䴰
+ 䴱 䴲 䴳 䴴 䴵 䴶 䴷 䴸 䴹 䴺 䴻 䴼 䴽 䴾 䴿 䵀 䵁 䵂 䵃 䵄
+ 䵅 䵆 䵇 䵈 䵉 䵊 䵋 䵌 䵍 䵎 䵏 䵐 䵑 䵒 䵓 䵔 䵕 䵖 䵗 䵘
+ 䵙 䵚 䵛 䵜 䵝 䵞 䵟 䵠 䵡 䵢 䵣 䵤 䵥 䵦 䵧 䵨 䵩 䵪 䵫 䵬
+ 䵭 䵮 䵯 䵰 䵱 䵲 䵳 䵴 䵵 䵶 䵷 䵸 䵹 䵺 䵻 䵼 䵽 䵾 䵿 䶀
+ 䶁 䶂 䶃 䶄 䶅 䶆 䶇 䶈 䶉 䶊 䶋 䶌 䶍 䶎 䶏 䶐 䶑 䶒 䶓 䶔
+ 䶕 䶖 䶗 䶘 䶙 䶚 䶛 䶜 䶝 䶞 䶟 䶠 䶡 䶢 䶣 䶤 䶥 䶦 䶧 䶨
+ 䶩 䶪 䶫 䶬 䶭 䶮 䶯 䶰 䶱 䶲 䶳 䶴 䶵 䶶 䶷 䶸 䶹 䶺 䶻 䶼
+ 䶽 䶾 䶿 ䷀ ䷁ ䷂ ䷃ ䷄ ䷅ ䷆ ䷇ ䷈ ䷉ ䷊ ䷋ ䷌ ䷍ ䷎ ䷏ ䷐
+ ䷑ ䷒ ䷓ ䷔ ䷕ ䷖ ䷗ ䷘ ䷙ ䷚ ䷛ ䷜ ䷝ ䷞ ䷟ ䷠ ䷡ ䷢ ䷣ ䷤
+ ䷥ ䷦ ䷧ ䷨ ䷩ ䷪ ䷫ ䷬ ䷭ ䷮ ䷯ ䷰ ䷱ ䷲ ䷳ ䷴ ䷵ ䷶ ䷷ ䷸
+ ䷹ ䷺ ䷻ ䷼ ䷽ ䷾ ䷿ 一 丁 丂 七 丄 丅 丆 万 丈 三 上 下 丌
+ 不 与 丏 丐 丑 丒 专 且 丕 世 丗 丘 丙 业 丛 东 丝 丞 丟 丠
+ 両 丢 丣 两 严 並 丧 丨 丩 个 丫 丬 中 丮 丯 丰 丱 串 丳 临
+ 丵 丶 丷 丸 丹 为 主 丼 丽 举 丿 乀 乁 乂 乃 乄 久 乆 乇 么
+ 义 乊 之 乌 乍 乎 乏 乐 乑 乒 乓 乔 乕 乖 乗 乘 乙 乚 乛 乜
+ 九 乞 也 习 乡 乢 乣 乤 乥 书 乧 乨 乩 乪 乫 乬 乭 乮 乯 买
+ 乱 乲 乳 乴 乵 乶 乷 乸 乹 乺 乻 乼 乽 乾 乿 亀 亁 亂 亃 亄
+ 亅 了 亇 予 争 亊 事 二 亍 于 亏 亐 云 互 亓 五 井 亖 亗 亘
+ 亙 亚 些 亜 亝 亞 亟 亠 亡 亢 亣 交 亥 亦 产 亨 亩 亪 享 京
+ 亭 亮 亯 亰 亱 亲 亳 亴 亵 亶 亷 亸 亹 人 亻 亼 亽 亾 亿 什
+ 仁 仂 仃 仄 仅 仆 仇 仈 仉 今 介 仌 仍 从 仏 仐 仑 仒 仓 仔
+ 仕 他 仗 付 仙 仚 仛 仜 仝 仞 仟 仠 仡 仢 代 令 以 仦 仧 仨
+ 仩 仪 仫 们 仭 仮 仯 仰 仱 仲 仳 仴 仵 件 价 仸 仹 仺 任 仼
+ 份 仾 仿 伀 企 伂 伃 伄 伅 伆 伇 伈 伉 伊 伋 伌 伍 伎 伏 伐
+ 休 伒 伓 伔 伕 伖 众 优 伙 会 伛 伜 伝 伞 伟 传 伡 伢 伣 伤
+ 伥 伦 伧 伨 伩 伪 伫 伬 伭 伮 伯 估 伱 伲 伳 伴 伵 伶 伷 伸
+ 伹 伺 伻 似 伽 伾 伿 佀 佁 佂 佃 佄 佅 但 佇 佈 佉 佊 佋 佌
+ 位 低 住 佐 佑 佒 体 佔 何 佖 佗 佘 余 佚 佛 作 佝 佞 佟 你
+ 佡 佢 佣 佤 佥 佦 佧 佨 佩 佪 佫 佬 佭 佮 佯 佰 佱 佲 佳 佴
+ 併 佶 佷 佸 佹 佺 佻 佼 佽 佾 使 侀 侁 侂 侃 侄 侅 來 侇 侈
+ 侉 侊 例 侌 侍 侎 侏 侐 侑 侒 侓 侔 侕 侖 侗 侘 侙 侚 供 侜
+ 依 侞 侟 侠 価 侢 侣 侤 侥 侦 侧 侨 侩 侪 侫 侬 侭 侮 侯 侰
+ 侱 侲 侳 侴 侵 侶 侷 侸 侹 侺 侻 侼 侽 侾 便 俀 俁 係 促 俄
+ 俅 俆 俇 俈 俉 俊 俋 俌 俍 俎 俏 俐 俑 俒 俓 俔 俕 俖 俗 俘
+ 俙 俚 俛 俜 保 俞 俟 俠 信 俢 俣 俤 俥 俦 俧 俨 俩 俪 俫 俬
+ 俭 修 俯 俰 俱 俲 俳 俴 俵 俶 俷 俸 俹 俺 俻 俼 俽 俾 俿 倀
+ 倁 倂 倃 倄 倅 倆 倇 倈 倉 倊 個 倌 倍 倎 倏 倐 們 倒 倓 倔
+ 倕 倖 倗 倘 候 倚 倛 倜 倝 倞 借 倠 倡 倢 倣 値 倥 倦 倧 倨
+ 倩 倪 倫 倬 倭 倮 倯 倰 倱 倲 倳 倴 倵 倶 倷 倸 倹 债 倻 值
+ 倽 倾 倿 偀 偁 偂 偃 偄 偅 偆 假 偈 偉 偊 偋 偌 偍 偎 偏 偐
+ 偑 偒 偓 偔 偕 偖 偗 偘 偙 做 偛 停 偝 偞 偟 偠 偡 偢 偣 偤
+ 健 偦 偧 偨 偩 偪 偫 偬 偭 偮 偯 偰 偱 偲 偳 側 偵 偶 偷 偸
+ 偹 偺 偻 偼 偽 偾 偿 傀 傁 傂 傃 傄 傅 傆 傇 傈 傉 傊 傋 傌
+ 傍 傎 傏 傐 傑 傒 傓 傔 傕 傖 傗 傘 備 傚 傛 傜 傝 傞 傟 傠
+ 傡 傢 傣 傤 傥 傦 傧 储 傩 傪 傫 催 傭 傮 傯 傰 傱 傲 傳 傴
+ 債 傶 傷 傸 傹 傺 傻 傼 傽 傾 傿 僀 僁 僂 僃 僄 僅 僆 僇 僈
+ 僉 僊 僋 僌 働 僎 像 僐 僑 僒 僓 僔 僕 僖 僗 僘 僙 僚 僛 僜
+ 僝 僞 僟 僠 僡 僢 僣 僤 僥 僦 僧 僨 僩 僪 僫 僬 僭 僮 僯 僰
+ 僱 僲 僳 僴 僵 僶 僷 僸 價 僺 僻 僼 僽 僾 僿 儀 儁 儂 儃 億
+ 儅 儆 儇 儈 儉 儊 儋 儌 儍 儎 儏 儐 儑 儒 儓 儔 儕 儖 儗 儘
+ 儙 儚 儛 儜 儝 儞 償 儠 儡 儢 儣 儤 儥 儦 儧 儨 儩 優 儫 儬
+ 儭 儮 儯 儰 儱 儲 儳 儴 儵 儶 儷 儸 儹 儺 儻 儼 儽 儾 儿 兀
+ 允 兂 元 兄 充 兆 兇 先 光 兊 克 兌 免 兎 兏 児 兑 兒 兓 兔
+ 兕 兖 兗 兘 兙 党 兛 兜 兝 兞 兟 兠 兡 兢 兣 兤 入 兦 內 全
+ 兩 兪 八 公 六 兮 兯 兰 共 兲 关 兴 兵 其 具 典 兹 兺 养 兼
+ 兽 兾 兿 冀 冁 冂 冃 冄 内 円 冇 冈 冉 冊 冋 册 再 冎 冏 冐
+ 冑 冒 冓 冔 冕 冖 冗 冘 写 冚 军 农 冝 冞 冟 冠 冡 冢 冣 冤
+ 冥 冦 冧 冨 冩 冪 冫 冬 冭 冮 冯 冰 冱 冲 决 冴 况 冶 冷 冸
+ 冹 冺 冻 冼 冽 冾 冿 净 凁 凂 凃 凄 凅 准 凇 凈 凉 凊 凋 凌
+ 凍 凎 减 凐 凑 凒 凓 凔 凕 凖 凗 凘 凙 凚 凛 凜 凝 凞 凟 几
+ 凡 凢 凣 凤 凥 処 凧 凨 凩 凪 凫 凬 凭 凮 凯 凰 凱 凲 凳 凴
+ 凵 凶 凷 凸 凹 出 击 凼 函 凾 凿 刀 刁 刂 刃 刄 刅 分 切 刈
+ 刉 刊 刋 刌 刍 刎 刏 刐 刑 划 刓 刔 刕 刖 列 刘 则 刚 创 刜
+ 初 刞 刟 删 刡 刢 刣 判 別 刦 刧 刨 利 刪 别 刬 刭 刮 刯 到
+ 刱 刲 刳 刴 刵 制 刷 券 刹 刺 刻 刼 刽 刾 刿 剀 剁 剂 剃 剄
+ 剅 剆 則 剈 剉 削 剋 剌 前 剎 剏 剐 剑 剒 剓 剔 剕 剖 剗 剘
+ 剙 剚 剛 剜 剝 剞 剟 剠 剡 剢 剣 剤 剥 剦 剧 剨 剩 剪 剫 剬
+ 剭 剮 副 剰 剱 割 剳 剴 創 剶 剷 剸 剹 剺 剻 剼 剽 剾 剿 劀
+ 劁 劂 劃 劄 劅 劆 劇 劈 劉 劊 劋 劌 劍 劎 劏 劐 劑 劒 劓 劔
+ 劕 劖 劗 劘 劙 劚 力 劜 劝 办 功 加 务 劢 劣 劤 劥 劦 劧 动
+ 助 努 劫 劬 劭 劮 劯 劰 励 劲 劳 労 劵 劶 劷 劸 効 劺 劻 劼
+ 劽 劾 势 勀 勁 勂 勃 勄 勅 勆 勇 勈 勉 勊 勋 勌 勍 勎 勏 勐
+ 勑 勒 勓 勔 動 勖 勗 勘 務 勚 勛 勜 勝 勞 募 勠 勡 勢 勣 勤
+ 勥 勦 勧 勨 勩 勪 勫 勬 勭 勮 勯 勰 勱 勲 勳 勴 勵 勶 勷 勸
+ 勹 勺 勻 勼 勽 勾 勿 匀 匁 匂 匃 匄 包 匆 匇 匈 匉 匊 匋 匌
+ 匍 匎 匏 匐 匑 匒 匓 匔 匕 化 北 匘 匙 匚 匛 匜 匝 匞 匟 匠
+ 匡 匢 匣 匤 匥 匦 匧 匨 匩 匪 匫 匬 匭 匮 匯 匰 匱 匲 匳 匴
+ 匵 匶 匷 匸 匹 区 医 匼 匽 匾 匿 區 十 卂 千 卄 卅 卆 升 午
+ 卉 半 卋 卌 卍 华 协 卐 卑 卒 卓 協 单 卖 南 単 卙 博 卛 卜
+ 卝 卞 卟 占 卡 卢 卣 卤 卥 卦 卧 卨 卩 卪 卫 卬 卭 卮 卯 印
+ 危 卲 即 却 卵 卶 卷 卸 卹 卺 卻 卼 卽 卾 卿 厀 厁 厂 厃 厄
+ 厅 历 厇 厈 厉 厊 压 厌 厍 厎 厏 厐 厑 厒 厓 厔 厕 厖 厗 厘
+ 厙 厚 厛 厜 厝 厞 原 厠 厡 厢 厣 厤 厥 厦 厧 厨 厩 厪 厫 厬
+ 厭 厮 厯 厰 厱 厲 厳 厴 厵 厶 厷 厸 厹 厺 去 厼 厽 厾 县 叀
+ 叁 参 參 叄 叅 叆 叇 又 叉 及 友 双 反 収 叏 叐 发 叒 叓 叔
+ 叕 取 受 变 叙 叚 叛 叜 叝 叞 叟 叠 叡 叢 口 古 句 另 叧 叨
+ 叩 只 叫 召 叭 叮 可 台 叱 史 右 叴 叵 叶 号 司 叹 叺 叻 叼
+ 叽 叾 叿 吀 吁 吂 吃 各 吅 吆 吇 合 吉 吊 吋 同 名 后 吏 吐
+ 向 吒 吓 吔 吕 吖 吗 吘 吙 吚 君 吜 吝 吞 吟 吠 吡 吢 吣 吤
+ 吥 否 吧 吨 吩 吪 含 听 吭 吮 启 吰 吱 吲 吳 吴 吵 吶 吷 吸
+ 吹 吺 吻 吼 吽 吾 吿 呀 呁 呂 呃 呄 呅 呆 呇 呈 呉 告 呋 呌
+ 呍 呎 呏 呐 呑 呒 呓 呔 呕 呖 呗 员 呙 呚 呛 呜 呝 呞 呟 呠
+ 呡 呢 呣 呤 呥 呦 呧 周 呩 呪 呫 呬 呭 呮 呯 呰 呱 呲 味 呴
+ 呵 呶 呷 呸 呹 呺 呻 呼 命 呾 呿 咀 咁 咂 咃 咄 咅 咆 咇 咈
+ 咉 咊 咋 和 咍 咎 咏 咐 咑 咒 咓 咔 咕 咖 咗 咘 咙 咚 咛 咜
+ 咝 咞 咟 咠 咡 咢 咣 咤 咥 咦 咧 咨 咩 咪 咫 咬 咭 咮 咯 咰
+ 咱 咲 咳 咴 咵 咶 咷 咸 咹 咺 咻 咼 咽 咾 咿 哀 品 哂 哃 哄
+ 哅 哆 哇 哈 哉 哊 哋 哌 响 哎 哏 哐 哑 哒 哓 哔 哕 哖 哗 哘
+ 哙 哚 哛 哜 哝 哞 哟 哠 員 哢 哣 哤 哥 哦 哧 哨 哩 哪 哫 哬
+ 哭 哮 哯 哰 哱 哲 哳 哴 哵 哶 哷 哸 哹 哺 哻 哼 哽 哾 哿 唀
+ 唁 唂 唃 唄 唅 唆 唇 唈 唉 唊 唋 唌 唍 唎 唏 唐 唑 唒 唓 唔
+ 唕 唖 唗 唘 唙 唚 唛 唜 唝 唞 唟 唠 唡 唢 唣 唤 唥 唦 唧 唨
+ 唩 唪 唫 唬 唭 售 唯 唰 唱 唲 唳 唴 唵 唶 唷 唸 唹 唺 唻 唼
+ 唽 唾 唿 啀 啁 啂 啃 啄 啅 商 啇 啈 啉 啊 啋 啌 啍 啎 問 啐
+ 啑 啒 啓 啔 啕 啖 啗 啘 啙 啚 啛 啜 啝 啞 啟 啠 啡 啢 啣 啤
+ 啥 啦 啧 啨 啩 啪 啫 啬 啭 啮 啯 啰 啱 啲 啳 啴 啵 啶 啷 啸
+ 啹 啺 啻 啼 啽 啾 啿 喀 喁 喂 喃 善 喅 喆 喇 喈 喉 喊 喋 喌
+ 喍 喎 喏 喐 喑 喒 喓 喔 喕 喖 喗 喘 喙 喚 喛 喜 喝 喞 喟 喠
+ 喡 喢 喣 喤 喥 喦 喧 喨 喩 喪 喫 喬 喭 單 喯 喰 喱 喲 喳 喴
+ 喵 営 喷 喸 喹 喺 喻 喼 喽 喾 喿 嗀 嗁 嗂 嗃 嗄 嗅 嗆 嗇 嗈
+ 嗉 嗊 嗋 嗌 嗍 嗎 嗏 嗐 嗑 嗒 嗓 嗔 嗕 嗖 嗗 嗘 嗙 嗚 嗛 嗜
+ 嗝 嗞 嗟 嗠 嗡 嗢 嗣 嗤 嗥 嗦 嗧 嗨 嗩 嗪 嗫 嗬 嗭 嗮 嗯 嗰
+ 嗱 嗲 嗳 嗴 嗵 嗶 嗷 嗸 嗹 嗺 嗻 嗼 嗽 嗾 嗿 嘀 嘁 嘂 嘃 嘄
+ 嘅 嘆 嘇 嘈 嘉 嘊 嘋 嘌 嘍 嘎 嘏 嘐 嘑 嘒 嘓 嘔 嘕 嘖 嘗 嘘
+ 嘙 嘚 嘛 嘜 嘝 嘞 嘟 嘠 嘡 嘢 嘣 嘤 嘥 嘦 嘧 嘨 嘩 嘪 嘫 嘬
+ 嘭 嘮 嘯 嘰 嘱 嘲 嘳 嘴 嘵 嘶 嘷 嘸 嘹 嘺 嘻 嘼 嘽 嘾 嘿 噀
+ 噁 噂 噃 噄 噅 噆 噇 噈 噉 噊 噋 噌 噍 噎 噏 噐 噑 噒 噓 噔
+ 噕 噖 噗 噘 噙 噚 噛 噜 噝 噞 噟 噠 噡 噢 噣 噤 噥 噦 噧 器
+ 噩 噪 噫 噬 噭 噮 噯 噰 噱 噲 噳 噴 噵 噶 噷 噸 噹 噺 噻 噼
+ 噽 噾 噿 嚀 嚁 嚂 嚃 嚄 嚅 嚆 嚇 嚈 嚉 嚊 嚋 嚌 嚍 嚎 嚏 嚐
+ 嚑 嚒 嚓 嚔 嚕 嚖 嚗 嚘 嚙 嚚 嚛 嚜 嚝 嚞 嚟 嚠 嚡 嚢 嚣 嚤
+ 嚥 嚦 嚧 嚨 嚩 嚪 嚫 嚬 嚭 嚮 嚯 嚰 嚱 嚲 嚳 嚴 嚵 嚶 嚷 嚸
+ 嚹 嚺 嚻 嚼 嚽 嚾 嚿 囀 囁 囂 囃 囄 囅 囆 囇 囈 囉 囊 囋 囌
+ 囍 囎 囏 囐 囑 囒 囓 囔 囕 囖 囗 囘 囙 囚 四 囜 囝 回 囟 因
+ 囡 团 団 囤 囥 囦 囧 囨 囩 囪 囫 囬 园 囮 囯 困 囱 囲 図 围
+ 囵 囶 囷 囸 囹 固 囻 囼 国 图 囿 圀 圁 圂 圃 圄 圅 圆 圇 圈
+ 圉 圊 國 圌 圍 圎 圏 圐 圑 園 圓 圔 圕 圖 圗 團 圙 圚 圛 圜
+ 圝 圞 土 圠 圡 圢 圣 圤 圥 圦 圧 在 圩 圪 圫 圬 圭 圮 圯 地
+ 圱 圲 圳 圴 圵 圶 圷 圸 圹 场 圻 圼 圽 圾 圿 址 坁 坂 坃 坄
+ 坅 坆 均 坈 坉 坊 坋 坌 坍 坎 坏 坐 坑 坒 坓 坔 坕 坖 块 坘
+ 坙 坚 坛 坜 坝 坞 坟 坠 坡 坢 坣 坤 坥 坦 坧 坨 坩 坪 坫 坬
+ 坭 坮 坯 坰 坱 坲 坳 坴 坵 坶 坷 坸 坹 坺 坻 坼 坽 坾 坿 垀
+ 垁 垂 垃 垄 垅 垆 垇 垈 垉 垊 型 垌 垍 垎 垏 垐 垑 垒 垓 垔
+ 垕 垖 垗 垘 垙 垚 垛 垜 垝 垞 垟 垠 垡 垢 垣 垤 垥 垦 垧 垨
+ 垩 垪 垫 垬 垭 垮 垯 垰 垱 垲 垳 垴 垵 垶 垷 垸 垹 垺 垻 垼
+ 垽 垾 垿 埀 埁 埂 埃 埄 埅 埆 埇 埈 埉 埊 埋 埌 埍 城 埏 埐
+ 埑 埒 埓 埔 埕 埖 埗 埘 埙 埚 埛 埜 埝 埞 域 埠 埡 埢 埣 埤
+ 埥 埦 埧 埨 埩 埪 埫 埬 埭 埮 埯 埰 埱 埲 埳 埴 埵 埶 執 埸
+ 培 基 埻 埼 埽 埾 埿 堀 堁 堂 堃 堄 堅 堆 堇 堈 堉 堊 堋 堌
+ 堍 堎 堏 堐 堑 堒 堓 堔 堕 堖 堗 堘 堙 堚 堛 堜 堝 堞 堟 堠
+ 堡 堢 堣 堤 堥 堦 堧 堨 堩 堪 堫 堬 堭 堮 堯 堰 報 堲 堳 場
+ 堵 堶 堷 堸 堹 堺 堻 堼 堽 堾 堿 塀 塁 塂 塃 塄 塅 塆 塇 塈
+ 塉 塊 塋 塌 塍 塎 塏 塐 塑 塒 塓 塔 塕 塖 塗 塘 塙 塚 塛 塜
+ 塝 塞 塟 塠 塡 塢 塣 塤 塥 塦 塧 塨 塩 塪 填 塬 塭 塮 塯 塰
+ 塱 塲 塳 塴 塵 塶 塷 塸 塹 塺 塻 塼 塽 塾 塿 墀 墁 墂 境 墄
+ 墅 墆 墇 墈 墉 墊 墋 墌 墍 墎 墏 墐 墑 墒 墓 墔 墕 墖 増 墘
+ 墙 墚 墛 墜 墝 增 墟 墠 墡 墢 墣 墤 墥 墦 墧 墨 墩 墪 墫 墬
+ 墭 墮 墯 墰 墱 墲 墳 墴 墵 墶 墷 墸 墹 墺 墻 墼 墽 墾 墿 壀
+ 壁 壂 壃 壄 壅 壆 壇 壈 壉 壊 壋 壌 壍 壎 壏 壐 壑 壒 壓 壔
+ 壕 壖 壗 壘 壙 壚 壛 壜 壝 壞 壟 壠 壡 壢 壣 壤 壥 壦 壧 壨
+ 壩 壪 士 壬 壭 壮 壯 声 壱 売 壳 壴 壵 壶 壷 壸 壹 壺 壻 壼
+ 壽 壾 壿 夀 夁 夂 夃 处 夅 夆 备 夈 変 夊 夋 夌 复 夎 夏 夐
+ 夑 夒 夓 夔 夕 外 夗 夘 夙 多 夛 夜 夝 夞 够 夠 夡 夢 夣 夤
+ 夥 夦 大 夨 天 太 夫 夬 夭 央 夯 夰 失 夲 夳 头 夵 夶 夷 夸
+ 夹 夺 夻 夼 夽 夾 夿 奀 奁 奂 奃 奄 奅 奆 奇 奈 奉 奊 奋 奌
+ 奍 奎 奏 奐 契 奒 奓 奔 奕 奖 套 奘 奙 奚 奛 奜 奝 奞 奟 奠
+ 奡 奢 奣 奤 奥 奦 奧 奨 奩 奪 奫 奬 奭 奮 奯 奰 奱 奲 女 奴
+ 奵 奶 奷 奸 她 奺 奻 奼 好 奾 奿 妀 妁 如 妃 妄 妅 妆 妇 妈
+ 妉 妊 妋 妌 妍 妎 妏 妐 妑 妒 妓 妔 妕 妖 妗 妘 妙 妚 妛 妜
+ 妝 妞 妟 妠 妡 妢 妣 妤 妥 妦 妧 妨 妩 妪 妫 妬 妭 妮 妯 妰
+ 妱 妲 妳 妴 妵 妶 妷 妸 妹 妺 妻 妼 妽 妾 妿 姀 姁 姂 姃 姄
+ 姅 姆 姇 姈 姉 姊 始 姌 姍 姎 姏 姐 姑 姒 姓 委 姕 姖 姗 姘
+ 姙 姚 姛 姜 姝 姞 姟 姠 姡 姢 姣 姤 姥 姦 姧 姨 姩 姪 姫 姬
+ 姭 姮 姯 姰 姱 姲 姳 姴 姵 姶 姷 姸 姹 姺 姻 姼 姽 姾 姿 娀
+ 威 娂 娃 娄 娅 娆 娇 娈 娉 娊 娋 娌 娍 娎 娏 娐 娑 娒 娓 娔
+ 娕 娖 娗 娘 娙 娚 娛 娜 娝 娞 娟 娠 娡 娢 娣 娤 娥 娦 娧 娨
+ 娩 娪 娫 娬 娭 娮 娯 娰 娱 娲 娳 娴 娵 娶 娷 娸 娹 娺 娻 娼
+ 娽 娾 娿 婀 婁 婂 婃 婄 婅 婆 婇 婈 婉 婊 婋 婌 婍 婎 婏 婐
+ 婑 婒 婓 婔 婕 婖 婗 婘 婙 婚 婛 婜 婝 婞 婟 婠 婡 婢 婣 婤
+ 婥 婦 婧 婨 婩 婪 婫 婬 婭 婮 婯 婰 婱 婲 婳 婴 婵 婶 婷 婸
+ 婹 婺 婻 婼 婽 婾 婿 媀 媁 媂 媃 媄 媅 媆 媇 媈 媉 媊 媋 媌
+ 媍 媎 媏 媐 媑 媒 媓 媔 媕 媖 媗 媘 媙 媚 媛 媜 媝 媞 媟 媠
+ 媡 媢 媣 媤 媥 媦 媧 媨 媩 媪 媫 媬 媭 媮 媯 媰 媱 媲 媳 媴
+ 媵 媶 媷 媸 媹 媺 媻 媼 媽 媾 媿 嫀 嫁 嫂 嫃 嫄 嫅 嫆 嫇 嫈
+ 嫉 嫊 嫋 嫌 嫍 嫎 嫏 嫐 嫑 嫒 嫓 嫔 嫕 嫖 嫗 嫘 嫙 嫚 嫛 嫜
+ 嫝 嫞 嫟 嫠 嫡 嫢 嫣 嫤 嫥 嫦 嫧 嫨 嫩 嫪 嫫 嫬 嫭 嫮 嫯 嫰
+ 嫱 嫲 嫳 嫴 嫵 嫶 嫷 嫸 嫹 嫺 嫻 嫼 嫽 嫾 嫿 嬀 嬁 嬂 嬃 嬄
+ 嬅 嬆 嬇 嬈 嬉 嬊 嬋 嬌 嬍 嬎 嬏 嬐 嬑 嬒 嬓 嬔 嬕 嬖 嬗 嬘
+ 嬙 嬚 嬛 嬜 嬝 嬞 嬟 嬠 嬡 嬢 嬣 嬤 嬥 嬦 嬧 嬨 嬩 嬪 嬫 嬬
+ 嬭 嬮 嬯 嬰 嬱 嬲 嬳 嬴 嬵 嬶 嬷 嬸 嬹 嬺 嬻 嬼 嬽 嬾 嬿 孀
+ 孁 孂 孃 孄 孅 孆 孇 孈 孉 孊 孋 孌 孍 孎 孏 子 孑 孒 孓 孔
+ 孕 孖 字 存 孙 孚 孛 孜 孝 孞 孟 孠 孡 孢 季 孤 孥 学 孧 孨
+ 孩 孪 孫 孬 孭 孮 孯 孰 孱 孲 孳 孴 孵 孶 孷 學 孹 孺 孻 孼
+ 孽 孾 孿 宀 宁 宂 它 宄 宅 宆 宇 守 安 宊 宋 完 宍 宎 宏 宐
+ 宑 宒 宓 宔 宕 宖 宗 官 宙 定 宛 宜 宝 实 実 宠 审 客 宣 室
+ 宥 宦 宧 宨 宩 宪 宫 宬 宭 宮 宯 宰 宱 宲 害 宴 宵 家 宷 宸
+ 容 宺 宻 宼 宽 宾 宿 寀 寁 寂 寃 寄 寅 密 寇 寈 寉 寊 寋 富
+ 寍 寎 寏 寐 寑 寒 寓 寔 寕 寖 寗 寘 寙 寚 寛 寜 寝 寞 察 寠
+ 寡 寢 寣 寤 寥 實 寧 寨 審 寪 寫 寬 寭 寮 寯 寰 寱 寲 寳 寴
+ 寵 寶 寷 寸 对 寺 寻 导 寽 対 寿 尀 封 専 尃 射 尅 将 將 專
+ 尉 尊 尋 尌 對 導 小 尐 少 尒 尓 尔 尕 尖 尗 尘 尙 尚 尛 尜
+ 尝 尞 尟 尠 尡 尢 尣 尤 尥 尦 尧 尨 尩 尪 尫 尬 尭 尮 尯 尰
+ 就 尲 尳 尴 尵 尶 尷 尸 尹 尺 尻 尼 尽 尾 尿 局 屁 层 屃 屄
+ 居 屆 屇 屈 屉 届 屋 屌 屍 屎 屏 屐 屑 屒 屓 屔 展 屖 屗 屘
+ 屙 屚 屛 屜 屝 属 屟 屠 屡 屢 屣 層 履 屦 屧 屨 屩 屪 屫 屬
+ 屭 屮 屯 屰 山 屲 屳 屴 屵 屶 屷 屸 屹 屺 屻 屼 屽 屾 屿 岀
+ 岁 岂 岃 岄 岅 岆 岇 岈 岉 岊 岋 岌 岍 岎 岏 岐 岑 岒 岓 岔
+ 岕 岖 岗 岘 岙 岚 岛 岜 岝 岞 岟 岠 岡 岢 岣 岤 岥 岦 岧 岨
+ 岩 岪 岫 岬 岭 岮 岯 岰 岱 岲 岳 岴 岵 岶 岷 岸 岹 岺 岻 岼
+ 岽 岾 岿 峀 峁 峂 峃 峄 峅 峆 峇 峈 峉 峊 峋 峌 峍 峎 峏 峐
+ 峑 峒 峓 峔 峕 峖 峗 峘 峙 峚 峛 峜 峝 峞 峟 峠 峡 峢 峣 峤
+ 峥 峦 峧 峨 峩 峪 峫 峬 峭 峮 峯 峰 峱 峲 峳 峴 峵 島 峷 峸
+ 峹 峺 峻 峼 峽 峾 峿 崀 崁 崂 崃 崄 崅 崆 崇 崈 崉 崊 崋 崌
+ 崍 崎 崏 崐 崑 崒 崓 崔 崕 崖 崗 崘 崙 崚 崛 崜 崝 崞 崟 崠
+ 崡 崢 崣 崤 崥 崦 崧 崨 崩 崪 崫 崬 崭 崮 崯 崰 崱 崲 崳 崴
+ 崵 崶 崷 崸 崹 崺 崻 崼 崽 崾 崿 嵀 嵁 嵂 嵃 嵄 嵅 嵆 嵇 嵈
+ 嵉 嵊 嵋 嵌 嵍 嵎 嵏 嵐 嵑 嵒 嵓 嵔 嵕 嵖 嵗 嵘 嵙 嵚 嵛 嵜
+ 嵝 嵞 嵟 嵠 嵡 嵢 嵣 嵤 嵥 嵦 嵧 嵨 嵩 嵪 嵫 嵬 嵭 嵮 嵯 嵰
+ 嵱 嵲 嵳 嵴 嵵 嵶 嵷 嵸 嵹 嵺 嵻 嵼 嵽 嵾 嵿 嶀 嶁 嶂 嶃 嶄
+ 嶅 嶆 嶇 嶈 嶉 嶊 嶋 嶌 嶍 嶎 嶏 嶐 嶑 嶒 嶓 嶔 嶕 嶖 嶗 嶘
+ 嶙 嶚 嶛 嶜 嶝 嶞 嶟 嶠 嶡 嶢 嶣 嶤 嶥 嶦 嶧 嶨 嶩 嶪 嶫 嶬
+ 嶭 嶮 嶯 嶰 嶱 嶲 嶳 嶴 嶵 嶶 嶷 嶸 嶹 嶺 嶻 嶼 嶽 嶾 嶿 巀
+ 巁 巂 巃 巄 巅 巆 巇 巈 巉 巊 巋 巌 巍 巎 巏 巐 巑 巒 巓 巔
+ 巕 巖 巗 巘 巙 巚 巛 巜 川 州 巟 巠 巡 巢 巣 巤 工 左 巧 巨
+ 巩 巪 巫 巬 巭 差 巯 巰 己 已 巳 巴 巵 巶 巷 巸 巹 巺 巻 巼
+ 巽 巾 巿 帀 币 市 布 帄 帅 帆 帇 师 帉 帊 帋 希 帍 帎 帏 帐
+ 帑 帒 帓 帔 帕 帖 帗 帘 帙 帚 帛 帜 帝 帞 帟 帠 帡 帢 帣 帤
+ 帥 带 帧 帨 帩 帪 師 帬 席 帮 帯 帰 帱 帲 帳 帴 帵 帶 帷 常
+ 帹 帺 帻 帼 帽 帾 帿 幀 幁 幂 幃 幄 幅 幆 幇 幈 幉 幊 幋 幌
+ 幍 幎 幏 幐 幑 幒 幓 幔 幕 幖 幗 幘 幙 幚 幛 幜 幝 幞 幟 幠
+ 幡 幢 幣 幤 幥 幦 幧 幨 幩 幪 幫 幬 幭 幮 幯 幰 幱 干 平 年
+ 幵 并 幷 幸 幹 幺 幻 幼 幽 幾 广 庀 庁 庂 広 庄 庅 庆 庇 庈
+ 庉 床 庋 庌 庍 庎 序 庐 庑 庒 库 应 底 庖 店 庘 庙 庚 庛 府
+ 庝 庞 废 庠 庡 庢 庣 庤 庥 度 座 庨 庩 庪 庫 庬 庭 庮 庯 庰
+ 庱 庲 庳 庴 庵 庶 康 庸 庹 庺 庻 庼 庽 庾 庿 廀 廁 廂 廃 廄
+ 廅 廆 廇 廈 廉 廊 廋 廌 廍 廎 廏 廐 廑 廒 廓 廔 廕 廖 廗 廘
+ 廙 廚 廛 廜 廝 廞 廟 廠 廡 廢 廣 廤 廥 廦 廧 廨 廩 廪 廫 廬
+ 廭 廮 廯 廰 廱 廲 廳 廴 廵 延 廷 廸 廹 建 廻 廼 廽 廾 廿 开
+ 弁 异 弃 弄 弅 弆 弇 弈 弉 弊 弋 弌 弍 弎 式 弐 弑 弒 弓 弔
+ 引 弖 弗 弘 弙 弚 弛 弜 弝 弞 弟 张 弡 弢 弣 弤 弥 弦 弧 弨
+ 弩 弪 弫 弬 弭 弮 弯 弰 弱 弲 弳 弴 張 弶 強 弸 弹 强 弻 弼
+ 弽 弾 弿 彀 彁 彂 彃 彄 彅 彆 彇 彈 彉 彊 彋 彌 彍 彎 彏 彐
+ 彑 归 当 彔 录 彖 彗 彘 彙 彚 彛 彜 彝 彞 彟 彠 彡 形 彣 彤
+ 彥 彦 彧 彨 彩 彪 彫 彬 彭 彮 彯 彰 影 彲 彳 彴 彵 彶 彷 彸
+ 役 彺 彻 彼 彽 彾 彿 往 征 徂 徃 径 待 徆 徇 很 徉 徊 律 後
+ 徍 徎 徏 徐 徑 徒 従 徔 徕 徖 得 徘 徙 徚 徛 徜 徝 從 徟 徠
+ 御 徢 徣 徤 徥 徦 徧 徨 復 循 徫 徬 徭 微 徯 徰 徱 徲 徳 徴
+ 徵 徶 德 徸 徹 徺 徻 徼 徽 徾 徿 忀 忁 忂 心 忄 必 忆 忇 忈
+ 忉 忊 忋 忌 忍 忎 忏 忐 忑 忒 忓 忔 忕 忖 志 忘 忙 忚 忛 応
+ 忝 忞 忟 忠 忡 忢 忣 忤 忥 忦 忧 忨 忩 忪 快 忬 忭 忮 忯 忰
+ 忱 忲 忳 忴 念 忶 忷 忸 忹 忺 忻 忼 忽 忾 忿 怀 态 怂 怃 怄
+ 怅 怆 怇 怈 怉 怊 怋 怌 怍 怎 怏 怐 怑 怒 怓 怔 怕 怖 怗 怘
+ 怙 怚 怛 怜 思 怞 怟 怠 怡 怢 怣 怤 急 怦 性 怨 怩 怪 怫 怬
+ 怭 怮 怯 怰 怱 怲 怳 怴 怵 怶 怷 怸 怹 怺 总 怼 怽 怾 怿 恀
+ 恁 恂 恃 恄 恅 恆 恇 恈 恉 恊 恋 恌 恍 恎 恏 恐 恑 恒 恓 恔
+ 恕 恖 恗 恘 恙 恚 恛 恜 恝 恞 恟 恠 恡 恢 恣 恤 恥 恦 恧 恨
+ 恩 恪 恫 恬 恭 恮 息 恰 恱 恲 恳 恴 恵 恶 恷 恸 恹 恺 恻 恼
+ 恽 恾 恿 悀 悁 悂 悃 悄 悅 悆 悇 悈 悉 悊 悋 悌 悍 悎 悏 悐
+ 悑 悒 悓 悔 悕 悖 悗 悘 悙 悚 悛 悜 悝 悞 悟 悠 悡 悢 患 悤
+ 悥 悦 悧 您 悩 悪 悫 悬 悭 悮 悯 悰 悱 悲 悳 悴 悵 悶 悷 悸
+ 悹 悺 悻 悼 悽 悾 悿 惀 惁 惂 惃 惄 情 惆 惇 惈 惉 惊 惋 惌
+ 惍 惎 惏 惐 惑 惒 惓 惔 惕 惖 惗 惘 惙 惚 惛 惜 惝 惞 惟 惠
+ 惡 惢 惣 惤 惥 惦 惧 惨 惩 惪 惫 惬 惭 惮 惯 惰 惱 惲 想 惴
+ 惵 惶 惷 惸 惹 惺 惻 惼 惽 惾 惿 愀 愁 愂 愃 愄 愅 愆 愇 愈
+ 愉 愊 愋 愌 愍 愎 意 愐 愑 愒 愓 愔 愕 愖 愗 愘 愙 愚 愛 愜
+ 愝 愞 感 愠 愡 愢 愣 愤 愥 愦 愧 愨 愩 愪 愫 愬 愭 愮 愯 愰
+ 愱 愲 愳 愴 愵 愶 愷 愸 愹 愺 愻 愼 愽 愾 愿 慀 慁 慂 慃 慄
+ 慅 慆 慇 慈 慉 慊 態 慌 慍 慎 慏 慐 慑 慒 慓 慔 慕 慖 慗 慘
+ 慙 慚 慛 慜 慝 慞 慟 慠 慡 慢 慣 慤 慥 慦 慧 慨 慩 慪 慫 慬
+ 慭 慮 慯 慰 慱 慲 慳 慴 慵 慶 慷 慸 慹 慺 慻 慼 慽 慾 慿 憀
+ 憁 憂 憃 憄 憅 憆 憇 憈 憉 憊 憋 憌 憍 憎 憏 憐 憑 憒 憓 憔
+ 憕 憖 憗 憘 憙 憚 憛 憜 憝 憞 憟 憠 憡 憢 憣 憤 憥 憦 憧 憨
+ 憩 憪 憫 憬 憭 憮 憯 憰 憱 憲 憳 憴 憵 憶 憷 憸 憹 憺 憻 憼
+ 憽 憾 憿 懀 懁 懂 懃 懄 懅 懆 懇 懈 應 懊 懋 懌 懍 懎 懏 懐
+ 懑 懒 懓 懔 懕 懖 懗 懘 懙 懚 懛 懜 懝 懞 懟 懠 懡 懢 懣 懤
+ 懥 懦 懧 懨 懩 懪 懫 懬 懭 懮 懯 懰 懱 懲 懳 懴 懵 懶 懷 懸
+ 懹 懺 懻 懼 懽 懾 懿 戀 戁 戂 戃 戄 戅 戆 戇 戈 戉 戊 戋 戌
+ 戍 戎 戏 成 我 戒 戓 戔 戕 或 戗 战 戙 戚 戛 戜 戝 戞 戟 戠
+ 戡 戢 戣 戤 戥 戦 戧 戨 戩 截 戫 戬 戭 戮 戯 戰 戱 戲 戳 戴
+ 戵 戶 户 戸 戹 戺 戻 戼 戽 戾 房 所 扁 扂 扃 扄 扅 扆 扇 扈
+ 扉 扊 手 扌 才 扎 扏 扐 扑 扒 打 扔 払 扖 扗 托 扙 扚 扛 扜
+ 扝 扞 扟 扠 扡 扢 扣 扤 扥 扦 执 扨 扩 扪 扫 扬 扭 扮 扯 扰
+ 扱 扲 扳 扴 扵 扶 扷 扸 批 扺 扻 扼 扽 找 承 技 抁 抂 抃 抄
+ 抅 抆 抇 抈 抉 把 抋 抌 抍 抎 抏 抐 抑 抒 抓 抔 投 抖 抗 折
+ 抙 抚 抛 抜 抝 択 抟 抠 抡 抢 抣 护 报 抦 抧 抨 抩 抪 披 抬
+ 抭 抮 抯 抰 抱 抲 抳 抴 抵 抶 抷 抸 抹 抺 抻 押 抽 抾 抿 拀
+ 拁 拂 拃 拄 担 拆 拇 拈 拉 拊 拋 拌 拍 拎 拏 拐 拑 拒 拓 拔
+ 拕 拖 拗 拘 拙 拚 招 拜 拝 拞 拟 拠 拡 拢 拣 拤 拥 拦 拧 拨
+ 择 拪 拫 括 拭 拮 拯 拰 拱 拲 拳 拴 拵 拶 拷 拸 拹 拺 拻 拼
+ 拽 拾 拿 挀 持 挂 挃 挄 挅 挆 指 挈 按 挊 挋 挌 挍 挎 挏 挐
+ 挑 挒 挓 挔 挕 挖 挗 挘 挙 挚 挛 挜 挝 挞 挟 挠 挡 挢 挣 挤
+ 挥 挦 挧 挨 挩 挪 挫 挬 挭 挮 振 挰 挱 挲 挳 挴 挵 挶 挷 挸
+ 挹 挺 挻 挼 挽 挾 挿 捀 捁 捂 捃 捄 捅 捆 捇 捈 捉 捊 捋 捌
+ 捍 捎 捏 捐 捑 捒 捓 捔 捕 捖 捗 捘 捙 捚 捛 捜 捝 捞 损 捠
+ 捡 换 捣 捤 捥 捦 捧 捨 捩 捪 捫 捬 捭 据 捯 捰 捱 捲 捳 捴
+ 捵 捶 捷 捸 捹 捺 捻 捼 捽 捾 捿 掀 掁 掂 掃 掄 掅 掆 掇 授
+ 掉 掊 掋 掌 掍 掎 掏 掐 掑 排 掓 掔 掕 掖 掗 掘 掙 掚 掛 掜
+ 掝 掞 掟 掠 採 探 掣 掤 接 掦 控 推 掩 措 掫 掬 掭 掮 掯 掰
+ 掱 掲 掳 掴 掵 掶 掷 掸 掹 掺 掻 掼 掽 掾 掿 揀 揁 揂 揃 揄
+ 揅 揆 揇 揈 揉 揊 揋 揌 揍 揎 描 提 揑 插 揓 揔 揕 揖 揗 揘
+ 揙 揚 換 揜 揝 揞 揟 揠 握 揢 揣 揤 揥 揦 揧 揨 揩 揪 揫 揬
+ 揭 揮 揯 揰 揱 揲 揳 援 揵 揶 揷 揸 揹 揺 揻 揼 揽 揾 揿 搀
+ 搁 搂 搃 搄 搅 搆 搇 搈 搉 搊 搋 搌 損 搎 搏 搐 搑 搒 搓 搔
+ 搕 搖 搗 搘 搙 搚 搛 搜 搝 搞 搟 搠 搡 搢 搣 搤 搥 搦 搧 搨
+ 搩 搪 搫 搬 搭 搮 搯 搰 搱 搲 搳 搴 搵 搶 搷 搸 搹 携 搻 搼
+ 搽 搾 搿 摀 摁 摂 摃 摄 摅 摆 摇 摈 摉 摊 摋 摌 摍 摎 摏 摐
+ 摑 摒 摓 摔 摕 摖 摗 摘 摙 摚 摛 摜 摝 摞 摟 摠 摡 摢 摣 摤
+ 摥 摦 摧 摨 摩 摪 摫 摬 摭 摮 摯 摰 摱 摲 摳 摴 摵 摶 摷 摸
+ 摹 摺 摻 摼 摽 摾 摿 撀 撁 撂 撃 撄 撅 撆 撇 撈 撉 撊 撋 撌
+ 撍 撎 撏 撐 撑 撒 撓 撔 撕 撖 撗 撘 撙 撚 撛 撜 撝 撞 撟 撠
+ 撡 撢 撣 撤 撥 撦 撧 撨 撩 撪 撫 撬 播 撮 撯 撰 撱 撲 撳 撴
+ 撵 撶 撷 撸 撹 撺 撻 撼 撽 撾 撿 擀 擁 擂 擃 擄 擅 擆 擇 擈
+ 擉 擊 擋 擌 操 擎 擏 擐 擑 擒 擓 擔 擕 擖 擗 擘 擙 據 擛 擜
+ 擝 擞 擟 擠 擡 擢 擣 擤 擥 擦 擧 擨 擩 擪 擫 擬 擭 擮 擯 擰
+ 擱 擲 擳 擴 擵 擶 擷 擸 擹 擺 擻 擼 擽 擾 擿 攀 攁 攂 攃 攄
+ 攅 攆 攇 攈 攉 攊 攋 攌 攍 攎 攏 攐 攑 攒 攓 攔 攕 攖 攗 攘
+ 攙 攚 攛 攜 攝 攞 攟 攠 攡 攢 攣 攤 攥 攦 攧 攨 攩 攪 攫 攬
+ 攭 攮 支 攰 攱 攲 攳 攴 攵 收 攷 攸 改 攺 攻 攼 攽 放 政 敀
+ 敁 敂 敃 敄 故 敆 敇 效 敉 敊 敋 敌 敍 敎 敏 敐 救 敒 敓 敔
+ 敕 敖 敗 敘 教 敚 敛 敜 敝 敞 敟 敠 敡 敢 散 敤 敥 敦 敧 敨
+ 敩 敪 敫 敬 敭 敮 敯 数 敱 敲 敳 整 敵 敶 敷 數 敹 敺 敻 敼
+ 敽 敾 敿 斀 斁 斂 斃 斄 斅 斆 文 斈 斉 斊 斋 斌 斍 斎 斏 斐
+ 斑 斒 斓 斔 斕 斖 斗 斘 料 斚 斛 斜 斝 斞 斟 斠 斡 斢 斣 斤
+ 斥 斦 斧 斨 斩 斪 斫 斬 断 斮 斯 新 斱 斲 斳 斴 斵 斶 斷 斸
+ 方 斺 斻 於 施 斾 斿 旀 旁 旂 旃 旄 旅 旆 旇 旈 旉 旊 旋 旌
+ 旍 旎 族 旐 旑 旒 旓 旔 旕 旖 旗 旘 旙 旚 旛 旜 旝 旞 旟 无
+ 旡 既 旣 旤 日 旦 旧 旨 早 旪 旫 旬 旭 旮 旯 旰 旱 旲 旳 旴
+ 旵 时 旷 旸 旹 旺 旻 旼 旽 旾 旿 昀 昁 昂 昃 昄 昅 昆 昇 昈
+ 昉 昊 昋 昌 昍 明 昏 昐 昑 昒 易 昔 昕 昖 昗 昘 昙 昚 昛 昜
+ 昝 昞 星 映 昡 昢 昣 昤 春 昦 昧 昨 昩 昪 昫 昬 昭 昮 是 昰
+ 昱 昲 昳 昴 昵 昶 昷 昸 昹 昺 昻 昼 昽 显 昿 晀 晁 時 晃 晄
+ 晅 晆 晇 晈 晉 晊 晋 晌 晍 晎 晏 晐 晑 晒 晓 晔 晕 晖 晗 晘
+ 晙 晚 晛 晜 晝 晞 晟 晠 晡 晢 晣 晤 晥 晦 晧 晨 晩 晪 晫 晬
+ 晭 普 景 晰 晱 晲 晳 晴 晵 晶 晷 晸 晹 智 晻 晼 晽 晾 晿 暀
+ 暁 暂 暃 暄 暅 暆 暇 暈 暉 暊 暋 暌 暍 暎 暏 暐 暑 暒 暓 暔
+ 暕 暖 暗 暘 暙 暚 暛 暜 暝 暞 暟 暠 暡 暢 暣 暤 暥 暦 暧 暨
+ 暩 暪 暫 暬 暭 暮 暯 暰 暱 暲 暳 暴 暵 暶 暷 暸 暹 暺 暻 暼
+ 暽 暾 暿 曀 曁 曂 曃 曄 曅 曆 曇 曈 曉 曊 曋 曌 曍 曎 曏 曐
+ 曑 曒 曓 曔 曕 曖 曗 曘 曙 曚 曛 曜 曝 曞 曟 曠 曡 曢 曣 曤
+ 曥 曦 曧 曨 曩 曪 曫 曬 曭 曮 曯 曰 曱 曲 曳 更 曵 曶 曷 書
+ 曹 曺 曻 曼 曽 曾 替 最 朁 朂 會 朄 朅 朆 朇 月 有 朊 朋 朌
+ 服 朎 朏 朐 朑 朒 朓 朔 朕 朖 朗 朘 朙 朚 望 朜 朝 朞 期 朠
+ 朡 朢 朣 朤 朥 朦 朧 木 朩 未 末 本 札 朮 术 朰 朱 朲 朳 朴
+ 朵 朶 朷 朸 朹 机 朻 朼 朽 朾 朿 杀 杁 杂 权 杄 杅 杆 杇 杈
+ 杉 杊 杋 杌 杍 李 杏 材 村 杒 杓 杔 杕 杖 杗 杘 杙 杚 杛 杜
+ 杝 杞 束 杠 条 杢 杣 杤 来 杦 杧 杨 杩 杪 杫 杬 杭 杮 杯 杰
+ 東 杲 杳 杴 杵 杶 杷 杸 杹 杺 杻 杼 杽 松 板 枀 极 枂 枃 构
+ 枅 枆 枇 枈 枉 枊 枋 枌 枍 枎 枏 析 枑 枒 枓 枔 枕 枖 林 枘
+ 枙 枚 枛 果 枝 枞 枟 枠 枡 枢 枣 枤 枥 枦 枧 枨 枩 枪 枫 枬
+ 枭 枮 枯 枰 枱 枲 枳 枴 枵 架 枷 枸 枹 枺 枻 枼 枽 枾 枿 柀
+ 柁 柂 柃 柄 柅 柆 柇 柈 柉 柊 柋 柌 柍 柎 柏 某 柑 柒 染 柔
+ 柕 柖 柗 柘 柙 柚 柛 柜 柝 柞 柟 柠 柡 柢 柣 柤 查 柦 柧 柨
+ 柩 柪 柫 柬 柭 柮 柯 柰 柱 柲 柳 柴 柵 柶 柷 柸 柹 柺 査 柼
+ 柽 柾 柿 栀 栁 栂 栃 栄 栅 栆 标 栈 栉 栊 栋 栌 栍 栎 栏 栐
+ 树 栒 栓 栔 栕 栖 栗 栘 栙 栚 栛 栜 栝 栞 栟 栠 校 栢 栣 栤
+ 栥 栦 栧 栨 栩 株 栫 栬 栭 栮 栯 栰 栱 栲 栳 栴 栵 栶 样 核
+ 根 栺 栻 格 栽 栾 栿 桀 桁 桂 桃 桄 桅 框 桇 案 桉 桊 桋 桌
+ 桍 桎 桏 桐 桑 桒 桓 桔 桕 桖 桗 桘 桙 桚 桛 桜 桝 桞 桟 桠
+ 桡 桢 档 桤 桥 桦 桧 桨 桩 桪 桫 桬 桭 桮 桯 桰 桱 桲 桳 桴
+ 桵 桶 桷 桸 桹 桺 桻 桼 桽 桾 桿 梀 梁 梂 梃 梄 梅 梆 梇 梈
+ 梉 梊 梋 梌 梍 梎 梏 梐 梑 梒 梓 梔 梕 梖 梗 梘 梙 梚 梛 梜
+ 條 梞 梟 梠 梡 梢 梣 梤 梥 梦 梧 梨 梩 梪 梫 梬 梭 梮 梯 械
+ 梱 梲 梳 梴 梵 梶 梷 梸 梹 梺 梻 梼 梽 梾 梿 检 棁 棂 棃 棄
+ 棅 棆 棇 棈 棉 棊 棋 棌 棍 棎 棏 棐 棑 棒 棓 棔 棕 棖 棗 棘
+ 棙 棚 棛 棜 棝 棞 棟 棠 棡 棢 棣 棤 棥 棦 棧 棨 棩 棪 棫 棬
+ 棭 森 棯 棰 棱 棲 棳 棴 棵 棶 棷 棸 棹 棺 棻 棼 棽 棾 棿 椀
+ 椁 椂 椃 椄 椅 椆 椇 椈 椉 椊 椋 椌 植 椎 椏 椐 椑 椒 椓 椔
+ 椕 椖 椗 椘 椙 椚 椛 検 椝 椞 椟 椠 椡 椢 椣 椤 椥 椦 椧 椨
+ 椩 椪 椫 椬 椭 椮 椯 椰 椱 椲 椳 椴 椵 椶 椷 椸 椹 椺 椻 椼
+ 椽 椾 椿 楀 楁 楂 楃 楄 楅 楆 楇 楈 楉 楊 楋 楌 楍 楎 楏 楐
+ 楑 楒 楓 楔 楕 楖 楗 楘 楙 楚 楛 楜 楝 楞 楟 楠 楡 楢 楣 楤
+ 楥 楦 楧 楨 楩 楪 楫 楬 業 楮 楯 楰 楱 楲 楳 楴 極 楶 楷 楸
+ 楹 楺 楻 楼 楽 楾 楿 榀 榁 概 榃 榄 榅 榆 榇 榈 榉 榊 榋 榌
+ 榍 榎 榏 榐 榑 榒 榓 榔 榕 榖 榗 榘 榙 榚 榛 榜 榝 榞 榟 榠
+ 榡 榢 榣 榤 榥 榦 榧 榨 榩 榪 榫 榬 榭 榮 榯 榰 榱 榲 榳 榴
+ 榵 榶 榷 榸 榹 榺 榻 榼 榽 榾 榿 槀 槁 槂 槃 槄 槅 槆 槇 槈
+ 槉 槊 構 槌 槍 槎 槏 槐 槑 槒 槓 槔 槕 槖 槗 様 槙 槚 槛 槜
+ 槝 槞 槟 槠 槡 槢 槣 槤 槥 槦 槧 槨 槩 槪 槫 槬 槭 槮 槯 槰
+ 槱 槲 槳 槴 槵 槶 槷 槸 槹 槺 槻 槼 槽 槾 槿 樀 樁 樂 樃 樄
+ 樅 樆 樇 樈 樉 樊 樋 樌 樍 樎 樏 樐 樑 樒 樓 樔 樕 樖 樗 樘
+ 標 樚 樛 樜 樝 樞 樟 樠 模 樢 樣 樤 樥 樦 樧 樨 権 横 樫 樬
+ 樭 樮 樯 樰 樱 樲 樳 樴 樵 樶 樷 樸 樹 樺 樻 樼 樽 樾 樿 橀
+ 橁 橂 橃 橄 橅 橆 橇 橈 橉 橊 橋 橌 橍 橎 橏 橐 橑 橒 橓 橔
+ 橕 橖 橗 橘 橙 橚 橛 橜 橝 橞 機 橠 橡 橢 橣 橤 橥 橦 橧 橨
+ 橩 橪 橫 橬 橭 橮 橯 橰 橱 橲 橳 橴 橵 橶 橷 橸 橹 橺 橻 橼
+ 橽 橾 橿 檀 檁 檂 檃 檄 檅 檆 檇 檈 檉 檊 檋 檌 檍 檎 檏 檐
+ 檑 檒 檓 檔 檕 檖 檗 檘 檙 檚 檛 檜 檝 檞 檟 檠 檡 檢 檣 檤
+ 檥 檦 檧 檨 檩 檪 檫 檬 檭 檮 檯 檰 檱 檲 檳 檴 檵 檶 檷 檸
+ 檹 檺 檻 檼 檽 檾 檿 櫀 櫁 櫂 櫃 櫄 櫅 櫆 櫇 櫈 櫉 櫊 櫋 櫌
+ 櫍 櫎 櫏 櫐 櫑 櫒 櫓 櫔 櫕 櫖 櫗 櫘 櫙 櫚 櫛 櫜 櫝 櫞 櫟 櫠
+ 櫡 櫢 櫣 櫤 櫥 櫦 櫧 櫨 櫩 櫪 櫫 櫬 櫭 櫮 櫯 櫰 櫱 櫲 櫳 櫴
+ 櫵 櫶 櫷 櫸 櫹 櫺 櫻 櫼 櫽 櫾 櫿 欀 欁 欂 欃 欄 欅 欆 欇 欈
+ 欉 權 欋 欌 欍 欎 欏 欐 欑 欒 欓 欔 欕 欖 欗 欘 欙 欚 欛 欜
+ 欝 欞 欟 欠 次 欢 欣 欤 欥 欦 欧 欨 欩 欪 欫 欬 欭 欮 欯 欰
+ 欱 欲 欳 欴 欵 欶 欷 欸 欹 欺 欻 欼 欽 款 欿 歀 歁 歂 歃 歄
+ 歅 歆 歇 歈 歉 歊 歋 歌 歍 歎 歏 歐 歑 歒 歓 歔 歕 歖 歗 歘
+ 歙 歚 歛 歜 歝 歞 歟 歠 歡 止 正 此 步 武 歧 歨 歩 歪 歫 歬
+ 歭 歮 歯 歰 歱 歲 歳 歴 歵 歶 歷 歸 歹 歺 死 歼 歽 歾 歿 殀
+ 殁 殂 殃 殄 殅 殆 殇 殈 殉 殊 残 殌 殍 殎 殏 殐 殑 殒 殓 殔
+ 殕 殖 殗 殘 殙 殚 殛 殜 殝 殞 殟 殠 殡 殢 殣 殤 殥 殦 殧 殨
+ 殩 殪 殫 殬 殭 殮 殯 殰 殱 殲 殳 殴 段 殶 殷 殸 殹 殺 殻 殼
+ 殽 殾 殿 毀 毁 毂 毃 毄 毅 毆 毇 毈 毉 毊 毋 毌 母 毎 每 毐
+ 毑 毒 毓 比 毕 毖 毗 毘 毙 毚 毛 毜 毝 毞 毟 毠 毡 毢 毣 毤
+ 毥 毦 毧 毨 毩 毪 毫 毬 毭 毮 毯 毰 毱 毲 毳 毴 毵 毶 毷 毸
+ 毹 毺 毻 毼 毽 毾 毿 氀 氁 氂 氃 氄 氅 氆 氇 氈 氉 氊 氋 氌
+ 氍 氎 氏 氐 民 氒 氓 气 氕 氖 気 氘 氙 氚 氛 氜 氝 氞 氟 氠
+ 氡 氢 氣 氤 氥 氦 氧 氨 氩 氪 氫 氬 氭 氮 氯 氰 氱 氲 氳 水
+ 氵 氶 氷 永 氹 氺 氻 氼 氽 氾 氿 汀 汁 求 汃 汄 汅 汆 汇 汈
+ 汉 汊 汋 汌 汍 汎 汏 汐 汑 汒 汓 汔 汕 汖 汗 汘 汙 汚 汛 汜
+ 汝 汞 江 池 污 汢 汣 汤 汥 汦 汧 汨 汩 汪 汫 汬 汭 汮 汯 汰
+ 汱 汲 汳 汴 汵 汶 汷 汸 汹 決 汻 汼 汽 汾 汿 沀 沁 沂 沃 沄
+ 沅 沆 沇 沈 沉 沊 沋 沌 沍 沎 沏 沐 沑 沒 沓 沔 沕 沖 沗 沘
+ 沙 沚 沛 沜 沝 沞 沟 沠 没 沢 沣 沤 沥 沦 沧 沨 沩 沪 沫 沬
+ 沭 沮 沯 沰 沱 沲 河 沴 沵 沶 沷 沸 油 沺 治 沼 沽 沾 沿 泀
+ 況 泂 泃 泄 泅 泆 泇 泈 泉 泊 泋 泌 泍 泎 泏 泐 泑 泒 泓 泔
+ 法 泖 泗 泘 泙 泚 泛 泜 泝 泞 泟 泠 泡 波 泣 泤 泥 泦 泧 注
+ 泩 泪 泫 泬 泭 泮 泯 泰 泱 泲 泳 泴 泵 泶 泷 泸 泹 泺 泻 泼
+ 泽 泾 泿 洀 洁 洂 洃 洄 洅 洆 洇 洈 洉 洊 洋 洌 洍 洎 洏 洐
+ 洑 洒 洓 洔 洕 洖 洗 洘 洙 洚 洛 洜 洝 洞 洟 洠 洡 洢 洣 洤
+ 津 洦 洧 洨 洩 洪 洫 洬 洭 洮 洯 洰 洱 洲 洳 洴 洵 洶 洷 洸
+ 洹 洺 活 洼 洽 派 洿 浀 流 浂 浃 浄 浅 浆 浇 浈 浉 浊 测 浌
+ 浍 济 浏 浐 浑 浒 浓 浔 浕 浖 浗 浘 浙 浚 浛 浜 浝 浞 浟 浠
+ 浡 浢 浣 浤 浥 浦 浧 浨 浩 浪 浫 浬 浭 浮 浯 浰 浱 浲 浳 浴
+ 浵 浶 海 浸 浹 浺 浻 浼 浽 浾 浿 涀 涁 涂 涃 涄 涅 涆 涇 消
+ 涉 涊 涋 涌 涍 涎 涏 涐 涑 涒 涓 涔 涕 涖 涗 涘 涙 涚 涛 涜
+ 涝 涞 涟 涠 涡 涢 涣 涤 涥 润 涧 涨 涩 涪 涫 涬 涭 涮 涯 涰
+ 涱 液 涳 涴 涵 涶 涷 涸 涹 涺 涻 涼 涽 涾 涿 淀 淁 淂 淃 淄
+ 淅 淆 淇 淈 淉 淊 淋 淌 淍 淎 淏 淐 淑 淒 淓 淔 淕 淖 淗 淘
+ 淙 淚 淛 淜 淝 淞 淟 淠 淡 淢 淣 淤 淥 淦 淧 淨 淩 淪 淫 淬
+ 淭 淮 淯 淰 深 淲 淳 淴 淵 淶 混 淸 淹 淺 添 淼 淽 淾 淿 渀
+ 渁 渂 渃 渄 清 渆 渇 済 渉 渊 渋 渌 渍 渎 渏 渐 渑 渒 渓 渔
+ 渕 渖 渗 渘 渙 渚 減 渜 渝 渞 渟 渠 渡 渢 渣 渤 渥 渦 渧 渨
+ 温 渪 渫 測 渭 渮 港 渰 渱 渲 渳 渴 渵 渶 渷 游 渹 渺 渻 渼
+ 渽 渾 渿 湀 湁 湂 湃 湄 湅 湆 湇 湈 湉 湊 湋 湌 湍 湎 湏 湐
+ 湑 湒 湓 湔 湕 湖 湗 湘 湙 湚 湛 湜 湝 湞 湟 湠 湡 湢 湣 湤
+ 湥 湦 湧 湨 湩 湪 湫 湬 湭 湮 湯 湰 湱 湲 湳 湴 湵 湶 湷 湸
+ 湹 湺 湻 湼 湽 湾 湿 満 溁 溂 溃 溄 溅 溆 溇 溈 溉 溊 溋 溌
+ 溍 溎 溏 源 溑 溒 溓 溔 溕 準 溗 溘 溙 溚 溛 溜 溝 溞 溟 溠
+ 溡 溢 溣 溤 溥 溦 溧 溨 溩 溪 溫 溬 溭 溮 溯 溰 溱 溲 溳 溴
+ 溵 溶 溷 溸 溹 溺 溻 溼 溽 溾 溿 滀 滁 滂 滃 滄 滅 滆 滇 滈
+ 滉 滊 滋 滌 滍 滎 滏 滐 滑 滒 滓 滔 滕 滖 滗 滘 滙 滚 滛 滜
+ 滝 滞 滟 滠 满 滢 滣 滤 滥 滦 滧 滨 滩 滪 滫 滬 滭 滮 滯 滰
+ 滱 滲 滳 滴 滵 滶 滷 滸 滹 滺 滻 滼 滽 滾 滿 漀 漁 漂 漃 漄
+ 漅 漆 漇 漈 漉 漊 漋 漌 漍 漎 漏 漐 漑 漒 漓 演 漕 漖 漗 漘
+ 漙 漚 漛 漜 漝 漞 漟 漠 漡 漢 漣 漤 漥 漦 漧 漨 漩 漪 漫 漬
+ 漭 漮 漯 漰 漱 漲 漳 漴 漵 漶 漷 漸 漹 漺 漻 漼 漽 漾 漿 潀
+ 潁 潂 潃 潄 潅 潆 潇 潈 潉 潊 潋 潌 潍 潎 潏 潐 潑 潒 潓 潔
+ 潕 潖 潗 潘 潙 潚 潛 潜 潝 潞 潟 潠 潡 潢 潣 潤 潥 潦 潧 潨
+ 潩 潪 潫 潬 潭 潮 潯 潰 潱 潲 潳 潴 潵 潶 潷 潸 潹 潺 潻 潼
+ 潽 潾 潿 澀 澁 澂 澃 澄 澅 澆 澇 澈 澉 澊 澋 澌 澍 澎 澏 澐
+ 澑 澒 澓 澔 澕 澖 澗 澘 澙 澚 澛 澜 澝 澞 澟 澠 澡 澢 澣 澤
+ 澥 澦 澧 澨 澩 澪 澫 澬 澭 澮 澯 澰 澱 澲 澳 澴 澵 澶 澷 澸
+ 澹 澺 澻 澼 澽 澾 澿 激 濁 濂 濃 濄 濅 濆 濇 濈 濉 濊 濋 濌
+ 濍 濎 濏 濐 濑 濒 濓 濔 濕 濖 濗 濘 濙 濚 濛 濜 濝 濞 濟 濠
+ 濡 濢 濣 濤 濥 濦 濧 濨 濩 濪 濫 濬 濭 濮 濯 濰 濱 濲 濳 濴
+ 濵 濶 濷 濸 濹 濺 濻 濼 濽 濾 濿 瀀 瀁 瀂 瀃 瀄 瀅 瀆 瀇 瀈
+ 瀉 瀊 瀋 瀌 瀍 瀎 瀏 瀐 瀑 瀒 瀓 瀔 瀕 瀖 瀗 瀘 瀙 瀚 瀛 瀜
+ 瀝 瀞 瀟 瀠 瀡 瀢 瀣 瀤 瀥 瀦 瀧 瀨 瀩 瀪 瀫 瀬 瀭 瀮 瀯 瀰
+ 瀱 瀲 瀳 瀴 瀵 瀶 瀷 瀸 瀹 瀺 瀻 瀼 瀽 瀾 瀿 灀 灁 灂 灃 灄
+ 灅 灆 灇 灈 灉 灊 灋 灌 灍 灎 灏 灐 灑 灒 灓 灔 灕 灖 灗 灘
+ 灙 灚 灛 灜 灝 灞 灟 灠 灡 灢 灣 灤 灥 灦 灧 灨 灩 灪 火 灬
+ 灭 灮 灯 灰 灱 灲 灳 灴 灵 灶 灷 灸 灹 灺 灻 灼 災 灾 灿 炀
+ 炁 炂 炃 炄 炅 炆 炇 炈 炉 炊 炋 炌 炍 炎 炏 炐 炑 炒 炓 炔
+ 炕 炖 炗 炘 炙 炚 炛 炜 炝 炞 炟 炠 炡 炢 炣 炤 炥 炦 炧 炨
+ 炩 炪 炫 炬 炭 炮 炯 炰 炱 炲 炳 炴 炵 炶 炷 炸 点 為 炻 炼
+ 炽 炾 炿 烀 烁 烂 烃 烄 烅 烆 烇 烈 烉 烊 烋 烌 烍 烎 烏 烐
+ 烑 烒 烓 烔 烕 烖 烗 烘 烙 烚 烛 烜 烝 烞 烟 烠 烡 烢 烣 烤
+ 烥 烦 烧 烨 烩 烪 烫 烬 热 烮 烯 烰 烱 烲 烳 烴 烵 烶 烷 烸
+ 烹 烺 烻 烼 烽 烾 烿 焀 焁 焂 焃 焄 焅 焆 焇 焈 焉 焊 焋 焌
+ 焍 焎 焏 焐 焑 焒 焓 焔 焕 焖 焗 焘 焙 焚 焛 焜 焝 焞 焟 焠
+ 無 焢 焣 焤 焥 焦 焧 焨 焩 焪 焫 焬 焭 焮 焯 焰 焱 焲 焳 焴
+ 焵 然 焷 焸 焹 焺 焻 焼 焽 焾 焿 煀 煁 煂 煃 煄 煅 煆 煇 煈
+ 煉 煊 煋 煌 煍 煎 煏 煐 煑 煒 煓 煔 煕 煖 煗 煘 煙 煚 煛 煜
+ 煝 煞 煟 煠 煡 煢 煣 煤 煥 煦 照 煨 煩 煪 煫 煬 煭 煮 煯 煰
+ 煱 煲 煳 煴 煵 煶 煷 煸 煹 煺 煻 煼 煽 煾 煿 熀 熁 熂 熃 熄
+ 熅 熆 熇 熈 熉 熊 熋 熌 熍 熎 熏 熐 熑 熒 熓 熔 熕 熖 熗 熘
+ 熙 熚 熛 熜 熝 熞 熟 熠 熡 熢 熣 熤 熥 熦 熧 熨 熩 熪 熫 熬
+ 熭 熮 熯 熰 熱 熲 熳 熴 熵 熶 熷 熸 熹 熺 熻 熼 熽 熾 熿 燀
+ 燁 燂 燃 燄 燅 燆 燇 燈 燉 燊 燋 燌 燍 燎 燏 燐 燑 燒 燓 燔
+ 燕 燖 燗 燘 燙 燚 燛 燜 燝 燞 營 燠 燡 燢 燣 燤 燥 燦 燧 燨
+ 燩 燪 燫 燬 燭 燮 燯 燰 燱 燲 燳 燴 燵 燶 燷 燸 燹 燺 燻 燼
+ 燽 燾 燿 爀 爁 爂 爃 爄 爅 爆 爇 爈 爉 爊 爋 爌 爍 爎 爏 爐
+ 爑 爒 爓 爔 爕 爖 爗 爘 爙 爚 爛 爜 爝 爞 爟 爠 爡 爢 爣 爤
+ 爥 爦 爧 爨 爩 爪 爫 爬 爭 爮 爯 爰 爱 爲 爳 爴 爵 父 爷 爸
+ 爹 爺 爻 爼 爽 爾 爿 牀 牁 牂 牃 牄 牅 牆 片 版 牉 牊 牋 牌
+ 牍 牎 牏 牐 牑 牒 牓 牔 牕 牖 牗 牘 牙 牚 牛 牜 牝 牞 牟 牠
+ 牡 牢 牣 牤 牥 牦 牧 牨 物 牪 牫 牬 牭 牮 牯 牰 牱 牲 牳 牴
+ 牵 牶 牷 牸 特 牺 牻 牼 牽 牾 牿 犀 犁 犂 犃 犄 犅 犆 犇 犈
+ 犉 犊 犋 犌 犍 犎 犏 犐 犑 犒 犓 犔 犕 犖 犗 犘 犙 犚 犛 犜
+ 犝 犞 犟 犠 犡 犢 犣 犤 犥 犦 犧 犨 犩 犪 犫 犬 犭 犮 犯 犰
+ 犱 犲 犳 犴 犵 状 犷 犸 犹 犺 犻 犼 犽 犾 犿 狀 狁 狂 狃 狄
+ 狅 狆 狇 狈 狉 狊 狋 狌 狍 狎 狏 狐 狑 狒 狓 狔 狕 狖 狗 狘
+ 狙 狚 狛 狜 狝 狞 狟 狠 狡 狢 狣 狤 狥 狦 狧 狨 狩 狪 狫 独
+ 狭 狮 狯 狰 狱 狲 狳 狴 狵 狶 狷 狸 狹 狺 狻 狼 狽 狾 狿 猀
+ 猁 猂 猃 猄 猅 猆 猇 猈 猉 猊 猋 猌 猍 猎 猏 猐 猑 猒 猓 猔
+ 猕 猖 猗 猘 猙 猚 猛 猜 猝 猞 猟 猠 猡 猢 猣 猤 猥 猦 猧 猨
+ 猩 猪 猫 猬 猭 献 猯 猰 猱 猲 猳 猴 猵 猶 猷 猸 猹 猺 猻 猼
+ 猽 猾 猿 獀 獁 獂 獃 獄 獅 獆 獇 獈 獉 獊 獋 獌 獍 獎 獏 獐
+ 獑 獒 獓 獔 獕 獖 獗 獘 獙 獚 獛 獜 獝 獞 獟 獠 獡 獢 獣 獤
+ 獥 獦 獧 獨 獩 獪 獫 獬 獭 獮 獯 獰 獱 獲 獳 獴 獵 獶 獷 獸
+ 獹 獺 獻 獼 獽 獾 獿 玀 玁 玂 玃 玄 玅 玆 率 玈 玉 玊 王 玌
+ 玍 玎 玏 玐 玑 玒 玓 玔 玕 玖 玗 玘 玙 玚 玛 玜 玝 玞 玟 玠
+ 玡 玢 玣 玤 玥 玦 玧 玨 玩 玪 玫 玬 玭 玮 环 现 玱 玲 玳 玴
+ 玵 玶 玷 玸 玹 玺 玻 玼 玽 玾 玿 珀 珁 珂 珃 珄 珅 珆 珇 珈
+ 珉 珊 珋 珌 珍 珎 珏 珐 珑 珒 珓 珔 珕 珖 珗 珘 珙 珚 珛 珜
+ 珝 珞 珟 珠 珡 珢 珣 珤 珥 珦 珧 珨 珩 珪 珫 珬 班 珮 珯 珰
+ 珱 珲 珳 珴 珵 珶 珷 珸 珹 珺 珻 珼 珽 現 珿 琀 琁 琂 球 琄
+ 琅 理 琇 琈 琉 琊 琋 琌 琍 琎 琏 琐 琑 琒 琓 琔 琕 琖 琗 琘
+ 琙 琚 琛 琜 琝 琞 琟 琠 琡 琢 琣 琤 琥 琦 琧 琨 琩 琪 琫 琬
+ 琭 琮 琯 琰 琱 琲 琳 琴 琵 琶 琷 琸 琹 琺 琻 琼 琽 琾 琿 瑀
+ 瑁 瑂 瑃 瑄 瑅 瑆 瑇 瑈 瑉 瑊 瑋 瑌 瑍 瑎 瑏 瑐 瑑 瑒 瑓 瑔
+ 瑕 瑖 瑗 瑘 瑙 瑚 瑛 瑜 瑝 瑞 瑟 瑠 瑡 瑢 瑣 瑤 瑥 瑦 瑧 瑨
+ 瑩 瑪 瑫 瑬 瑭 瑮 瑯 瑰 瑱 瑲 瑳 瑴 瑵 瑶 瑷 瑸 瑹 瑺 瑻 瑼
+ 瑽 瑾 瑿 璀 璁 璂 璃 璄 璅 璆 璇 璈 璉 璊 璋 璌 璍 璎 璏 璐
+ 璑 璒 璓 璔 璕 璖 璗 璘 璙 璚 璛 璜 璝 璞 璟 璠 璡 璢 璣 璤
+ 璥 璦 璧 璨 璩 璪 璫 璬 璭 璮 璯 環 璱 璲 璳 璴 璵 璶 璷 璸
+ 璹 璺 璻 璼 璽 璾 璿 瓀 瓁 瓂 瓃 瓄 瓅 瓆 瓇 瓈 瓉 瓊 瓋 瓌
+ 瓍 瓎 瓏 瓐 瓑 瓒 瓓 瓔 瓕 瓖 瓗 瓘 瓙 瓚 瓛 瓜 瓝 瓞 瓟 瓠
+ 瓡 瓢 瓣 瓤 瓥 瓦 瓧 瓨 瓩 瓪 瓫 瓬 瓭 瓮 瓯 瓰 瓱 瓲 瓳 瓴
+ 瓵 瓶 瓷 瓸 瓹 瓺 瓻 瓼 瓽 瓾 瓿 甀 甁 甂 甃 甄 甅 甆 甇 甈
+ 甉 甊 甋 甌 甍 甎 甏 甐 甑 甒 甓 甔 甕 甖 甗 甘 甙 甚 甛 甜
+ 甝 甞 生 甠 甡 產 産 甤 甥 甦 甧 用 甩 甪 甫 甬 甭 甮 甯 田
+ 由 甲 申 甴 电 甶 男 甸 甹 町 画 甼 甽 甾 甿 畀 畁 畂 畃 畄
+ 畅 畆 畇 畈 畉 畊 畋 界 畍 畎 畏 畐 畑 畒 畓 畔 畕 畖 畗 畘
+ 留 畚 畛 畜 畝 畞 畟 畠 畡 畢 畣 畤 略 畦 畧 畨 畩 番 畫 畬
+ 畭 畮 畯 異 畱 畲 畳 畴 畵 當 畷 畸 畹 畺 畻 畼 畽 畾 畿 疀
+ 疁 疂 疃 疄 疅 疆 疇 疈 疉 疊 疋 疌 疍 疎 疏 疐 疑 疒 疓 疔
+ 疕 疖 疗 疘 疙 疚 疛 疜 疝 疞 疟 疠 疡 疢 疣 疤 疥 疦 疧 疨
+ 疩 疪 疫 疬 疭 疮 疯 疰 疱 疲 疳 疴 疵 疶 疷 疸 疹 疺 疻 疼
+ 疽 疾 疿 痀 痁 痂 痃 痄 病 痆 症 痈 痉 痊 痋 痌 痍 痎 痏 痐
+ 痑 痒 痓 痔 痕 痖 痗 痘 痙 痚 痛 痜 痝 痞 痟 痠 痡 痢 痣 痤
+ 痥 痦 痧 痨 痩 痪 痫 痬 痭 痮 痯 痰 痱 痲 痳 痴 痵 痶 痷 痸
+ 痹 痺 痻 痼 痽 痾 痿 瘀 瘁 瘂 瘃 瘄 瘅 瘆 瘇 瘈 瘉 瘊 瘋 瘌
+ 瘍 瘎 瘏 瘐 瘑 瘒 瘓 瘔 瘕 瘖 瘗 瘘 瘙 瘚 瘛 瘜 瘝 瘞 瘟 瘠
+ 瘡 瘢 瘣 瘤 瘥 瘦 瘧 瘨 瘩 瘪 瘫 瘬 瘭 瘮 瘯 瘰 瘱 瘲 瘳 瘴
+ 瘵 瘶 瘷 瘸 瘹 瘺 瘻 瘼 瘽 瘾 瘿 癀 癁 療 癃 癄 癅 癆 癇 癈
+ 癉 癊 癋 癌 癍 癎 癏 癐 癑 癒 癓 癔 癕 癖 癗 癘 癙 癚 癛 癜
+ 癝 癞 癟 癠 癡 癢 癣 癤 癥 癦 癧 癨 癩 癪 癫 癬 癭 癮 癯 癰
+ 癱 癲 癳 癴 癵 癶 癷 癸 癹 発 登 發 白 百 癿 皀 皁 皂 皃 的
+ 皅 皆 皇 皈 皉 皊 皋 皌 皍 皎 皏 皐 皑 皒 皓 皔 皕 皖 皗 皘
+ 皙 皚 皛 皜 皝 皞 皟 皠 皡 皢 皣 皤 皥 皦 皧 皨 皩 皪 皫 皬
+ 皭 皮 皯 皰 皱 皲 皳 皴 皵 皶 皷 皸 皹 皺 皻 皼 皽 皾 皿 盀
+ 盁 盂 盃 盄 盅 盆 盇 盈 盉 益 盋 盌 盍 盎 盏 盐 监 盒 盓 盔
+ 盕 盖 盗 盘 盙 盚 盛 盜 盝 盞 盟 盠 盡 盢 監 盤 盥 盦 盧 盨
+ 盩 盪 盫 盬 盭 目 盯 盰 盱 盲 盳 直 盵 盶 盷 相 盹 盺 盻 盼
+ 盽 盾 盿 眀 省 眂 眃 眄 眅 眆 眇 眈 眉 眊 看 県 眍 眎 眏 眐
+ 眑 眒 眓 眔 眕 眖 眗 眘 眙 眚 眛 眜 眝 眞 真 眠 眡 眢 眣 眤
+ 眥 眦 眧 眨 眩 眪 眫 眬 眭 眮 眯 眰 眱 眲 眳 眴 眵 眶 眷 眸
+ 眹 眺 眻 眼 眽 眾 眿 着 睁 睂 睃 睄 睅 睆 睇 睈 睉 睊 睋 睌
+ 睍 睎 睏 睐 睑 睒 睓 睔 睕 睖 睗 睘 睙 睚 睛 睜 睝 睞 睟 睠
+ 睡 睢 督 睤 睥 睦 睧 睨 睩 睪 睫 睬 睭 睮 睯 睰 睱 睲 睳 睴
+ 睵 睶 睷 睸 睹 睺 睻 睼 睽 睾 睿 瞀 瞁 瞂 瞃 瞄 瞅 瞆 瞇 瞈
+ 瞉 瞊 瞋 瞌 瞍 瞎 瞏 瞐 瞑 瞒 瞓 瞔 瞕 瞖 瞗 瞘 瞙 瞚 瞛 瞜
+ 瞝 瞞 瞟 瞠 瞡 瞢 瞣 瞤 瞥 瞦 瞧 瞨 瞩 瞪 瞫 瞬 瞭 瞮 瞯 瞰
+ 瞱 瞲 瞳 瞴 瞵 瞶 瞷 瞸 瞹 瞺 瞻 瞼 瞽 瞾 瞿 矀 矁 矂 矃 矄
+ 矅 矆 矇 矈 矉 矊 矋 矌 矍 矎 矏 矐 矑 矒 矓 矔 矕 矖 矗 矘
+ 矙 矚 矛 矜 矝 矞 矟 矠 矡 矢 矣 矤 知 矦 矧 矨 矩 矪 矫 矬
+ 短 矮 矯 矰 矱 矲 石 矴 矵 矶 矷 矸 矹 矺 矻 矼 矽 矾 矿 砀
+ 码 砂 砃 砄 砅 砆 砇 砈 砉 砊 砋 砌 砍 砎 砏 砐 砑 砒 砓 研
+ 砕 砖 砗 砘 砙 砚 砛 砜 砝 砞 砟 砠 砡 砢 砣 砤 砥 砦 砧 砨
+ 砩 砪 砫 砬 砭 砮 砯 砰 砱 砲 砳 破 砵 砶 砷 砸 砹 砺 砻 砼
+ 砽 砾 砿 础 硁 硂 硃 硄 硅 硆 硇 硈 硉 硊 硋 硌 硍 硎 硏 硐
+ 硑 硒 硓 硔 硕 硖 硗 硘 硙 硚 硛 硜 硝 硞 硟 硠 硡 硢 硣 硤
+ 硥 硦 硧 硨 硩 硪 硫 硬 硭 确 硯 硰 硱 硲 硳 硴 硵 硶 硷 硸
+ 硹 硺 硻 硼 硽 硾 硿 碀 碁 碂 碃 碄 碅 碆 碇 碈 碉 碊 碋 碌
+ 碍 碎 碏 碐 碑 碒 碓 碔 碕 碖 碗 碘 碙 碚 碛 碜 碝 碞 碟 碠
+ 碡 碢 碣 碤 碥 碦 碧 碨 碩 碪 碫 碬 碭 碮 碯 碰 碱 碲 碳 碴
+ 碵 碶 碷 碸 碹 確 碻 碼 碽 碾 碿 磀 磁 磂 磃 磄 磅 磆 磇 磈
+ 磉 磊 磋 磌 磍 磎 磏 磐 磑 磒 磓 磔 磕 磖 磗 磘 磙 磚 磛 磜
+ 磝 磞 磟 磠 磡 磢 磣 磤 磥 磦 磧 磨 磩 磪 磫 磬 磭 磮 磯 磰
+ 磱 磲 磳 磴 磵 磶 磷 磸 磹 磺 磻 磼 磽 磾 磿 礀 礁 礂 礃 礄
+ 礅 礆 礇 礈 礉 礊 礋 礌 礍 礎 礏 礐 礑 礒 礓 礔 礕 礖 礗 礘
+ 礙 礚 礛 礜 礝 礞 礟 礠 礡 礢 礣 礤 礥 礦 礧 礨 礩 礪 礫 礬
+ 礭 礮 礯 礰 礱 礲 礳 礴 礵 礶 礷 礸 礹 示 礻 礼 礽 社 礿 祀
+ 祁 祂 祃 祄 祅 祆 祇 祈 祉 祊 祋 祌 祍 祎 祏 祐 祑 祒 祓 祔
+ 祕 祖 祗 祘 祙 祚 祛 祜 祝 神 祟 祠 祡 祢 祣 祤 祥 祦 祧 票
+ 祩 祪 祫 祬 祭 祮 祯 祰 祱 祲 祳 祴 祵 祶 祷 祸 祹 祺 祻 祼
+ 祽 祾 祿 禀 禁 禂 禃 禄 禅 禆 禇 禈 禉 禊 禋 禌 禍 禎 福 禐
+ 禑 禒 禓 禔 禕 禖 禗 禘 禙 禚 禛 禜 禝 禞 禟 禠 禡 禢 禣 禤
+ 禥 禦 禧 禨 禩 禪 禫 禬 禭 禮 禯 禰 禱 禲 禳 禴 禵 禶 禷 禸
+ 禹 禺 离 禼 禽 禾 禿 秀 私 秂 秃 秄 秅 秆 秇 秈 秉 秊 秋 秌
+ 种 秎 秏 秐 科 秒 秓 秔 秕 秖 秗 秘 秙 秚 秛 秜 秝 秞 租 秠
+ 秡 秢 秣 秤 秥 秦 秧 秨 秩 秪 秫 秬 秭 秮 积 称 秱 秲 秳 秴
+ 秵 秶 秷 秸 秹 秺 移 秼 秽 秾 秿 稀 稁 稂 稃 稄 稅 稆 稇 稈
+ 稉 稊 程 稌 稍 税 稏 稐 稑 稒 稓 稔 稕 稖 稗 稘 稙 稚 稛 稜
+ 稝 稞 稟 稠 稡 稢 稣 稤 稥 稦 稧 稨 稩 稪 稫 稬 稭 種 稯 稰
+ 稱 稲 稳 稴 稵 稶 稷 稸 稹 稺 稻 稼 稽 稾 稿 穀 穁 穂 穃 穄
+ 穅 穆 穇 穈 穉 穊 穋 穌 積 穎 穏 穐 穑 穒 穓 穔 穕 穖 穗 穘
+ 穙 穚 穛 穜 穝 穞 穟 穠 穡 穢 穣 穤 穥 穦 穧 穨 穩 穪 穫 穬
+ 穭 穮 穯 穰 穱 穲 穳 穴 穵 究 穷 穸 穹 空 穻 穼 穽 穾 穿 窀
+ 突 窂 窃 窄 窅 窆 窇 窈 窉 窊 窋 窌 窍 窎 窏 窐 窑 窒 窓 窔
+ 窕 窖 窗 窘 窙 窚 窛 窜 窝 窞 窟 窠 窡 窢 窣 窤 窥 窦 窧 窨
+ 窩 窪 窫 窬 窭 窮 窯 窰 窱 窲 窳 窴 窵 窶 窷 窸 窹 窺 窻 窼
+ 窽 窾 窿 竀 竁 竂 竃 竄 竅 竆 竇 竈 竉 竊 立 竌 竍 竎 竏 竐
+ 竑 竒 竓 竔 竕 竖 竗 竘 站 竚 竛 竜 竝 竞 竟 章 竡 竢 竣 竤
+ 童 竦 竧 竨 竩 竪 竫 竬 竭 竮 端 竰 竱 竲 竳 竴 竵 競 竷 竸
+ 竹 竺 竻 竼 竽 竾 竿 笀 笁 笂 笃 笄 笅 笆 笇 笈 笉 笊 笋 笌
+ 笍 笎 笏 笐 笑 笒 笓 笔 笕 笖 笗 笘 笙 笚 笛 笜 笝 笞 笟 笠
+ 笡 笢 笣 笤 笥 符 笧 笨 笩 笪 笫 第 笭 笮 笯 笰 笱 笲 笳 笴
+ 笵 笶 笷 笸 笹 笺 笻 笼 笽 笾 笿 筀 筁 筂 筃 筄 筅 筆 筇 筈
+ 等 筊 筋 筌 筍 筎 筏 筐 筑 筒 筓 答 筕 策 筗 筘 筙 筚 筛 筜
+ 筝 筞 筟 筠 筡 筢 筣 筤 筥 筦 筧 筨 筩 筪 筫 筬 筭 筮 筯 筰
+ 筱 筲 筳 筴 筵 筶 筷 筸 筹 筺 筻 筼 筽 签 筿 简 箁 箂 箃 箄
+ 箅 箆 箇 箈 箉 箊 箋 箌 箍 箎 箏 箐 箑 箒 箓 箔 箕 箖 算 箘
+ 箙 箚 箛 箜 箝 箞 箟 箠 管 箢 箣 箤 箥 箦 箧 箨 箩 箪 箫 箬
+ 箭 箮 箯 箰 箱 箲 箳 箴 箵 箶 箷 箸 箹 箺 箻 箼 箽 箾 箿 節
+ 篁 篂 篃 範 篅 篆 篇 篈 築 篊 篋 篌 篍 篎 篏 篐 篑 篒 篓 篔
+ 篕 篖 篗 篘 篙 篚 篛 篜 篝 篞 篟 篠 篡 篢 篣 篤 篥 篦 篧 篨
+ 篩 篪 篫 篬 篭 篮 篯 篰 篱 篲 篳 篴 篵 篶 篷 篸 篹 篺 篻 篼
+ 篽 篾 篿 簀 簁 簂 簃 簄 簅 簆 簇 簈 簉 簊 簋 簌 簍 簎 簏 簐
+ 簑 簒 簓 簔 簕 簖 簗 簘 簙 簚 簛 簜 簝 簞 簟 簠 簡 簢 簣 簤
+ 簥 簦 簧 簨 簩 簪 簫 簬 簭 簮 簯 簰 簱 簲 簳 簴 簵 簶 簷 簸
+ 簹 簺 簻 簼 簽 簾 簿 籀 籁 籂 籃 籄 籅 籆 籇 籈 籉 籊 籋 籌
+ 籍 籎 籏 籐 籑 籒 籓 籔 籕 籖 籗 籘 籙 籚 籛 籜 籝 籞 籟 籠
+ 籡 籢 籣 籤 籥 籦 籧 籨 籩 籪 籫 籬 籭 籮 籯 籰 籱 籲 米 籴
+ 籵 籶 籷 籸 籹 籺 类 籼 籽 籾 籿 粀 粁 粂 粃 粄 粅 粆 粇 粈
+ 粉 粊 粋 粌 粍 粎 粏 粐 粑 粒 粓 粔 粕 粖 粗 粘 粙 粚 粛 粜
+ 粝 粞 粟 粠 粡 粢 粣 粤 粥 粦 粧 粨 粩 粪 粫 粬 粭 粮 粯 粰
+ 粱 粲 粳 粴 粵 粶 粷 粸 粹 粺 粻 粼 粽 精 粿 糀 糁 糂 糃 糄
+ 糅 糆 糇 糈 糉 糊 糋 糌 糍 糎 糏 糐 糑 糒 糓 糔 糕 糖 糗 糘
+ 糙 糚 糛 糜 糝 糞 糟 糠 糡 糢 糣 糤 糥 糦 糧 糨 糩 糪 糫 糬
+ 糭 糮 糯 糰 糱 糲 糳 糴 糵 糶 糷 糸 糹 糺 系 糼 糽 糾 糿 紀
+ 紁 紂 紃 約 紅 紆 紇 紈 紉 紊 紋 紌 納 紎 紏 紐 紑 紒 紓 純
+ 紕 紖 紗 紘 紙 級 紛 紜 紝 紞 紟 素 紡 索 紣 紤 紥 紦 紧 紨
+ 紩 紪 紫 紬 紭 紮 累 細 紱 紲 紳 紴 紵 紶 紷 紸 紹 紺 紻 紼
+ 紽 紾 紿 絀 絁 終 絃 組 絅 絆 絇 絈 絉 絊 絋 経 絍 絎 絏 結
+ 絑 絒 絓 絔 絕 絖 絗 絘 絙 絚 絛 絜 絝 絞 絟 絠 絡 絢 絣 絤
+ 絥 給 絧 絨 絩 絪 絫 絬 絭 絮 絯 絰 統 絲 絳 絴 絵 絶 絷 絸
+ 絹 絺 絻 絼 絽 絾 絿 綀 綁 綂 綃 綄 綅 綆 綇 綈 綉 綊 綋 綌
+ 綍 綎 綏 綐 綑 綒 經 綔 綕 綖 綗 綘 継 続 綛 綜 綝 綞 綟 綠
+ 綡 綢 綣 綤 綥 綦 綧 綨 綩 綪 綫 綬 維 綮 綯 綰 綱 網 綳 綴
+ 綵 綶 綷 綸 綹 綺 綻 綼 綽 綾 綿 緀 緁 緂 緃 緄 緅 緆 緇 緈
+ 緉 緊 緋 緌 緍 緎 総 緐 緑 緒 緓 緔 緕 緖 緗 緘 緙 線 緛 緜
+ 緝 緞 緟 締 緡 緢 緣 緤 緥 緦 緧 編 緩 緪 緫 緬 緭 緮 緯 緰
+ 緱 緲 緳 練 緵 緶 緷 緸 緹 緺 緻 緼 緽 緾 緿 縀 縁 縂 縃 縄
+ 縅 縆 縇 縈 縉 縊 縋 縌 縍 縎 縏 縐 縑 縒 縓 縔 縕 縖 縗 縘
+ 縙 縚 縛 縜 縝 縞 縟 縠 縡 縢 縣 縤 縥 縦 縧 縨 縩 縪 縫 縬
+ 縭 縮 縯 縰 縱 縲 縳 縴 縵 縶 縷 縸 縹 縺 縻 縼 總 績 縿 繀
+ 繁 繂 繃 繄 繅 繆 繇 繈 繉 繊 繋 繌 繍 繎 繏 繐 繑 繒 繓 織
+ 繕 繖 繗 繘 繙 繚 繛 繜 繝 繞 繟 繠 繡 繢 繣 繤 繥 繦 繧 繨
+ 繩 繪 繫 繬 繭 繮 繯 繰 繱 繲 繳 繴 繵 繶 繷 繸 繹 繺 繻 繼
+ 繽 繾 繿 纀 纁 纂 纃 纄 纅 纆 纇 纈 纉 纊 纋 續 纍 纎 纏 纐
+ 纑 纒 纓 纔 纕 纖 纗 纘 纙 纚 纛 纜 纝 纞 纟 纠 纡 红 纣 纤
+ 纥 约 级 纨 纩 纪 纫 纬 纭 纮 纯 纰 纱 纲 纳 纴 纵 纶 纷 纸
+ 纹 纺 纻 纼 纽 纾 线 绀 绁 绂 练 组 绅 细 织 终 绉 绊 绋 绌
+ 绍 绎 经 绐 绑 绒 结 绔 绕 绖 绗 绘 给 绚 绛 络 绝 绞 统 绠
+ 绡 绢 绣 绤 绥 绦 继 绨 绩 绪 绫 绬 续 绮 绯 绰 绱 绲 绳 维
+ 绵 绶 绷 绸 绹 绺 绻 综 绽 绾 绿 缀 缁 缂 缃 缄 缅 缆 缇 缈
+ 缉 缊 缋 缌 缍 缎 缏 缐 缑 缒 缓 缔 缕 编 缗 缘 缙 缚 缛 缜
+ 缝 缞 缟 缠 缡 缢 缣 缤 缥 缦 缧 缨 缩 缪 缫 缬 缭 缮 缯 缰
+ 缱 缲 缳 缴 缵 缶 缷 缸 缹 缺 缻 缼 缽 缾 缿 罀 罁 罂 罃 罄
+ 罅 罆 罇 罈 罉 罊 罋 罌 罍 罎 罏 罐 网 罒 罓 罔 罕 罖 罗 罘
+ 罙 罚 罛 罜 罝 罞 罟 罠 罡 罢 罣 罤 罥 罦 罧 罨 罩 罪 罫 罬
+ 罭 置 罯 罰 罱 署 罳 罴 罵 罶 罷 罸 罹 罺 罻 罼 罽 罾 罿 羀
+ 羁 羂 羃 羄 羅 羆 羇 羈 羉 羊 羋 羌 羍 美 羏 羐 羑 羒 羓 羔
+ 羕 羖 羗 羘 羙 羚 羛 羜 羝 羞 羟 羠 羡 羢 羣 群 羥 羦 羧 羨
+ 義 羪 羫 羬 羭 羮 羯 羰 羱 羲 羳 羴 羵 羶 羷 羸 羹 羺 羻 羼
+ 羽 羾 羿 翀 翁 翂 翃 翄 翅 翆 翇 翈 翉 翊 翋 翌 翍 翎 翏 翐
+ 翑 習 翓 翔 翕 翖 翗 翘 翙 翚 翛 翜 翝 翞 翟 翠 翡 翢 翣 翤
+ 翥 翦 翧 翨 翩 翪 翫 翬 翭 翮 翯 翰 翱 翲 翳 翴 翵 翶 翷 翸
+ 翹 翺 翻 翼 翽 翾 翿 耀 老 耂 考 耄 者 耆 耇 耈 耉 耊 耋 而
+ 耍 耎 耏 耐 耑 耒 耓 耔 耕 耖 耗 耘 耙 耚 耛 耜 耝 耞 耟 耠
+ 耡 耢 耣 耤 耥 耦 耧 耨 耩 耪 耫 耬 耭 耮 耯 耰 耱 耲 耳 耴
+ 耵 耶 耷 耸 耹 耺 耻 耼 耽 耾 耿 聀 聁 聂 聃 聄 聅 聆 聇 聈
+ 聉 聊 聋 职 聍 聎 聏 聐 聑 聒 聓 联 聕 聖 聗 聘 聙 聚 聛 聜
+ 聝 聞 聟 聠 聡 聢 聣 聤 聥 聦 聧 聨 聩 聪 聫 聬 聭 聮 聯 聰
+ 聱 聲 聳 聴 聵 聶 職 聸 聹 聺 聻 聼 聽 聾 聿 肀 肁 肂 肃 肄
+ 肅 肆 肇 肈 肉 肊 肋 肌 肍 肎 肏 肐 肑 肒 肓 肔 肕 肖 肗 肘
+ 肙 肚 肛 肜 肝 肞 肟 肠 股 肢 肣 肤 肥 肦 肧 肨 肩 肪 肫 肬
+ 肭 肮 肯 肰 肱 育 肳 肴 肵 肶 肷 肸 肹 肺 肻 肼 肽 肾 肿 胀
+ 胁 胂 胃 胄 胅 胆 胇 胈 胉 胊 胋 背 胍 胎 胏 胐 胑 胒 胓 胔
+ 胕 胖 胗 胘 胙 胚 胛 胜 胝 胞 胟 胠 胡 胢 胣 胤 胥 胦 胧 胨
+ 胩 胪 胫 胬 胭 胮 胯 胰 胱 胲 胳 胴 胵 胶 胷 胸 胹 胺 胻 胼
+ 能 胾 胿 脀 脁 脂 脃 脄 脅 脆 脇 脈 脉 脊 脋 脌 脍 脎 脏 脐
+ 脑 脒 脓 脔 脕 脖 脗 脘 脙 脚 脛 脜 脝 脞 脟 脠 脡 脢 脣 脤
+ 脥 脦 脧 脨 脩 脪 脫 脬 脭 脮 脯 脰 脱 脲 脳 脴 脵 脶 脷 脸
+ 脹 脺 脻 脼 脽 脾 脿 腀 腁 腂 腃 腄 腅 腆 腇 腈 腉 腊 腋 腌
+ 腍 腎 腏 腐 腑 腒 腓 腔 腕 腖 腗 腘 腙 腚 腛 腜 腝 腞 腟 腠
+ 腡 腢 腣 腤 腥 腦 腧 腨 腩 腪 腫 腬 腭 腮 腯 腰 腱 腲 腳 腴
+ 腵 腶 腷 腸 腹 腺 腻 腼 腽 腾 腿 膀 膁 膂 膃 膄 膅 膆 膇 膈
+ 膉 膊 膋 膌 膍 膎 膏 膐 膑 膒 膓 膔 膕 膖 膗 膘 膙 膚 膛 膜
+ 膝 膞 膟 膠 膡 膢 膣 膤 膥 膦 膧 膨 膩 膪 膫 膬 膭 膮 膯 膰
+ 膱 膲 膳 膴 膵 膶 膷 膸 膹 膺 膻 膼 膽 膾 膿 臀 臁 臂 臃 臄
+ 臅 臆 臇 臈 臉 臊 臋 臌 臍 臎 臏 臐 臑 臒 臓 臔 臕 臖 臗 臘
+ 臙 臚 臛 臜 臝 臞 臟 臠 臡 臢 臣 臤 臥 臦 臧 臨 臩 自 臫 臬
+ 臭 臮 臯 臰 臱 臲 至 致 臵 臶 臷 臸 臹 臺 臻 臼 臽 臾 臿 舀
+ 舁 舂 舃 舄 舅 舆 與 興 舉 舊 舋 舌 舍 舎 舏 舐 舑 舒 舓 舔
+ 舕 舖 舗 舘 舙 舚 舛 舜 舝 舞 舟 舠 舡 舢 舣 舤 舥 舦 舧 舨
+ 舩 航 舫 般 舭 舮 舯 舰 舱 舲 舳 舴 舵 舶 舷 舸 船 舺 舻 舼
+ 舽 舾 舿 艀 艁 艂 艃 艄 艅 艆 艇 艈 艉 艊 艋 艌 艍 艎 艏 艐
+ 艑 艒 艓 艔 艕 艖 艗 艘 艙 艚 艛 艜 艝 艞 艟 艠 艡 艢 艣 艤
+ 艥 艦 艧 艨 艩 艪 艫 艬 艭 艮 良 艰 艱 色 艳 艴 艵 艶 艷 艸
+ 艹 艺 艻 艼 艽 艾 艿 芀 芁 节 芃 芄 芅 芆 芇 芈 芉 芊 芋 芌
+ 芍 芎 芏 芐 芑 芒 芓 芔 芕 芖 芗 芘 芙 芚 芛 芜 芝 芞 芟 芠
+ 芡 芢 芣 芤 芥 芦 芧 芨 芩 芪 芫 芬 芭 芮 芯 芰 花 芲 芳 芴
+ 芵 芶 芷 芸 芹 芺 芻 芼 芽 芾 芿 苀 苁 苂 苃 苄 苅 苆 苇 苈
+ 苉 苊 苋 苌 苍 苎 苏 苐 苑 苒 苓 苔 苕 苖 苗 苘 苙 苚 苛 苜
+ 苝 苞 苟 苠 苡 苢 苣 苤 若 苦 苧 苨 苩 苪 苫 苬 苭 苮 苯 苰
+ 英 苲 苳 苴 苵 苶 苷 苸 苹 苺 苻 苼 苽 苾 苿 茀 茁 茂 范 茄
+ 茅 茆 茇 茈 茉 茊 茋 茌 茍 茎 茏 茐 茑 茒 茓 茔 茕 茖 茗 茘
+ 茙 茚 茛 茜 茝 茞 茟 茠 茡 茢 茣 茤 茥 茦 茧 茨 茩 茪 茫 茬
+ 茭 茮 茯 茰 茱 茲 茳 茴 茵 茶 茷 茸 茹 茺 茻 茼 茽 茾 茿 荀
+ 荁 荂 荃 荄 荅 荆 荇 荈 草 荊 荋 荌 荍 荎 荏 荐 荑 荒 荓 荔
+ 荕 荖 荗 荘 荙 荚 荛 荜 荝 荞 荟 荠 荡 荢 荣 荤 荥 荦 荧 荨
+ 荩 荪 荫 荬 荭 荮 药 荰 荱 荲 荳 荴 荵 荶 荷 荸 荹 荺 荻 荼
+ 荽 荾 荿 莀 莁 莂 莃 莄 莅 莆 莇 莈 莉 莊 莋 莌 莍 莎 莏 莐
+ 莑 莒 莓 莔 莕 莖 莗 莘 莙 莚 莛 莜 莝 莞 莟 莠 莡 莢 莣 莤
+ 莥 莦 莧 莨 莩 莪 莫 莬 莭 莮 莯 莰 莱 莲 莳 莴 莵 莶 获 莸
+ 莹 莺 莻 莼 莽 莾 莿 菀 菁 菂 菃 菄 菅 菆 菇 菈 菉 菊 菋 菌
+ 菍 菎 菏 菐 菑 菒 菓 菔 菕 菖 菗 菘 菙 菚 菛 菜 菝 菞 菟 菠
+ 菡 菢 菣 菤 菥 菦 菧 菨 菩 菪 菫 菬 菭 菮 華 菰 菱 菲 菳 菴
+ 菵 菶 菷 菸 菹 菺 菻 菼 菽 菾 菿 萀 萁 萂 萃 萄 萅 萆 萇 萈
+ 萉 萊 萋 萌 萍 萎 萏 萐 萑 萒 萓 萔 萕 萖 萗 萘 萙 萚 萛 萜
+ 萝 萞 萟 萠 萡 萢 萣 萤 营 萦 萧 萨 萩 萪 萫 萬 萭 萮 萯 萰
+ 萱 萲 萳 萴 萵 萶 萷 萸 萹 萺 萻 萼 落 萾 萿 葀 葁 葂 葃 葄
+ 葅 葆 葇 葈 葉 葊 葋 葌 葍 葎 葏 葐 葑 葒 葓 葔 葕 葖 著 葘
+ 葙 葚 葛 葜 葝 葞 葟 葠 葡 葢 董 葤 葥 葦 葧 葨 葩 葪 葫 葬
+ 葭 葮 葯 葰 葱 葲 葳 葴 葵 葶 葷 葸 葹 葺 葻 葼 葽 葾 葿 蒀
+ 蒁 蒂 蒃 蒄 蒅 蒆 蒇 蒈 蒉 蒊 蒋 蒌 蒍 蒎 蒏 蒐 蒑 蒒 蒓 蒔
+ 蒕 蒖 蒗 蒘 蒙 蒚 蒛 蒜 蒝 蒞 蒟 蒠 蒡 蒢 蒣 蒤 蒥 蒦 蒧 蒨
+ 蒩 蒪 蒫 蒬 蒭 蒮 蒯 蒰 蒱 蒲 蒳 蒴 蒵 蒶 蒷 蒸 蒹 蒺 蒻 蒼
+ 蒽 蒾 蒿 蓀 蓁 蓂 蓃 蓄 蓅 蓆 蓇 蓈 蓉 蓊 蓋 蓌 蓍 蓎 蓏 蓐
+ 蓑 蓒 蓓 蓔 蓕 蓖 蓗 蓘 蓙 蓚 蓛 蓜 蓝 蓞 蓟 蓠 蓡 蓢 蓣 蓤
+ 蓥 蓦 蓧 蓨 蓩 蓪 蓫 蓬 蓭 蓮 蓯 蓰 蓱 蓲 蓳 蓴 蓵 蓶 蓷 蓸
+ 蓹 蓺 蓻 蓼 蓽 蓾 蓿 蔀 蔁 蔂 蔃 蔄 蔅 蔆 蔇 蔈 蔉 蔊 蔋 蔌
+ 蔍 蔎 蔏 蔐 蔑 蔒 蔓 蔔 蔕 蔖 蔗 蔘 蔙 蔚 蔛 蔜 蔝 蔞 蔟 蔠
+ 蔡 蔢 蔣 蔤 蔥 蔦 蔧 蔨 蔩 蔪 蔫 蔬 蔭 蔮 蔯 蔰 蔱 蔲 蔳 蔴
+ 蔵 蔶 蔷 蔸 蔹 蔺 蔻 蔼 蔽 蔾 蔿 蕀 蕁 蕂 蕃 蕄 蕅 蕆 蕇 蕈
+ 蕉 蕊 蕋 蕌 蕍 蕎 蕏 蕐 蕑 蕒 蕓 蕔 蕕 蕖 蕗 蕘 蕙 蕚 蕛 蕜
+ 蕝 蕞 蕟 蕠 蕡 蕢 蕣 蕤 蕥 蕦 蕧 蕨 蕩 蕪 蕫 蕬 蕭 蕮 蕯 蕰
+ 蕱 蕲 蕳 蕴 蕵 蕶 蕷 蕸 蕹 蕺 蕻 蕼 蕽 蕾 蕿 薀 薁 薂 薃 薄
+ 薅 薆 薇 薈 薉 薊 薋 薌 薍 薎 薏 薐 薑 薒 薓 薔 薕 薖 薗 薘
+ 薙 薚 薛 薜 薝 薞 薟 薠 薡 薢 薣 薤 薥 薦 薧 薨 薩 薪 薫 薬
+ 薭 薮 薯 薰 薱 薲 薳 薴 薵 薶 薷 薸 薹 薺 薻 薼 薽 薾 薿 藀
+ 藁 藂 藃 藄 藅 藆 藇 藈 藉 藊 藋 藌 藍 藎 藏 藐 藑 藒 藓 藔
+ 藕 藖 藗 藘 藙 藚 藛 藜 藝 藞 藟 藠 藡 藢 藣 藤 藥 藦 藧 藨
+ 藩 藪 藫 藬 藭 藮 藯 藰 藱 藲 藳 藴 藵 藶 藷 藸 藹 藺 藻 藼
+ 藽 藾 藿 蘀 蘁 蘂 蘃 蘄 蘅 蘆 蘇 蘈 蘉 蘊 蘋 蘌 蘍 蘎 蘏 蘐
+ 蘑 蘒 蘓 蘔 蘕 蘖 蘗 蘘 蘙 蘚 蘛 蘜 蘝 蘞 蘟 蘠 蘡 蘢 蘣 蘤
+ 蘥 蘦 蘧 蘨 蘩 蘪 蘫 蘬 蘭 蘮 蘯 蘰 蘱 蘲 蘳 蘴 蘵 蘶 蘷 蘸
+ 蘹 蘺 蘻 蘼 蘽 蘾 蘿 虀 虁 虂 虃 虄 虅 虆 虇 虈 虉 虊 虋 虌
+ 虍 虎 虏 虐 虑 虒 虓 虔 處 虖 虗 虘 虙 虚 虛 虜 虝 虞 號 虠
+ 虡 虢 虣 虤 虥 虦 虧 虨 虩 虪 虫 虬 虭 虮 虯 虰 虱 虲 虳 虴
+ 虵 虶 虷 虸 虹 虺 虻 虼 虽 虾 虿 蚀 蚁 蚂 蚃 蚄 蚅 蚆 蚇 蚈
+ 蚉 蚊 蚋 蚌 蚍 蚎 蚏 蚐 蚑 蚒 蚓 蚔 蚕 蚖 蚗 蚘 蚙 蚚 蚛 蚜
+ 蚝 蚞 蚟 蚠 蚡 蚢 蚣 蚤 蚥 蚦 蚧 蚨 蚩 蚪 蚫 蚬 蚭 蚮 蚯 蚰
+ 蚱 蚲 蚳 蚴 蚵 蚶 蚷 蚸 蚹 蚺 蚻 蚼 蚽 蚾 蚿 蛀 蛁 蛂 蛃 蛄
+ 蛅 蛆 蛇 蛈 蛉 蛊 蛋 蛌 蛍 蛎 蛏 蛐 蛑 蛒 蛓 蛔 蛕 蛖 蛗 蛘
+ 蛙 蛚 蛛 蛜 蛝 蛞 蛟 蛠 蛡 蛢 蛣 蛤 蛥 蛦 蛧 蛨 蛩 蛪 蛫 蛬
+ 蛭 蛮 蛯 蛰 蛱 蛲 蛳 蛴 蛵 蛶 蛷 蛸 蛹 蛺 蛻 蛼 蛽 蛾 蛿 蜀
+ 蜁 蜂 蜃 蜄 蜅 蜆 蜇 蜈 蜉 蜊 蜋 蜌 蜍 蜎 蜏 蜐 蜑 蜒 蜓 蜔
+ 蜕 蜖 蜗 蜘 蜙 蜚 蜛 蜜 蜝 蜞 蜟 蜠 蜡 蜢 蜣 蜤 蜥 蜦 蜧 蜨
+ 蜩 蜪 蜫 蜬 蜭 蜮 蜯 蜰 蜱 蜲 蜳 蜴 蜵 蜶 蜷 蜸 蜹 蜺 蜻 蜼
+ 蜽 蜾 蜿 蝀 蝁 蝂 蝃 蝄 蝅 蝆 蝇 蝈 蝉 蝊 蝋 蝌 蝍 蝎 蝏 蝐
+ 蝑 蝒 蝓 蝔 蝕 蝖 蝗 蝘 蝙 蝚 蝛 蝜 蝝 蝞 蝟 蝠 蝡 蝢 蝣 蝤
+ 蝥 蝦 蝧 蝨 蝩 蝪 蝫 蝬 蝭 蝮 蝯 蝰 蝱 蝲 蝳 蝴 蝵 蝶 蝷 蝸
+ 蝹 蝺 蝻 蝼 蝽 蝾 蝿 螀 螁 螂 螃 螄 螅 螆 螇 螈 螉 螊 螋 螌
+ 融 螎 螏 螐 螑 螒 螓 螔 螕 螖 螗 螘 螙 螚 螛 螜 螝 螞 螟 螠
+ 螡 螢 螣 螤 螥 螦 螧 螨 螩 螪 螫 螬 螭 螮 螯 螰 螱 螲 螳 螴
+ 螵 螶 螷 螸 螹 螺 螻 螼 螽 螾 螿 蟀 蟁 蟂 蟃 蟄 蟅 蟆 蟇 蟈
+ 蟉 蟊 蟋 蟌 蟍 蟎 蟏 蟐 蟑 蟒 蟓 蟔 蟕 蟖 蟗 蟘 蟙 蟚 蟛 蟜
+ 蟝 蟞 蟟 蟠 蟡 蟢 蟣 蟤 蟥 蟦 蟧 蟨 蟩 蟪 蟫 蟬 蟭 蟮 蟯 蟰
+ 蟱 蟲 蟳 蟴 蟵 蟶 蟷 蟸 蟹 蟺 蟻 蟼 蟽 蟾 蟿 蠀 蠁 蠂 蠃 蠄
+ 蠅 蠆 蠇 蠈 蠉 蠊 蠋 蠌 蠍 蠎 蠏 蠐 蠑 蠒 蠓 蠔 蠕 蠖 蠗 蠘
+ 蠙 蠚 蠛 蠜 蠝 蠞 蠟 蠠 蠡 蠢 蠣 蠤 蠥 蠦 蠧 蠨 蠩 蠪 蠫 蠬
+ 蠭 蠮 蠯 蠰 蠱 蠲 蠳 蠴 蠵 蠶 蠷 蠸 蠹 蠺 蠻 蠼 蠽 蠾 蠿 血
+ 衁 衂 衃 衄 衅 衆 衇 衈 衉 衊 衋 行 衍 衎 衏 衐 衑 衒 術 衔
+ 衕 衖 街 衘 衙 衚 衛 衜 衝 衞 衟 衠 衡 衢 衣 衤 补 衦 衧 表
+ 衩 衪 衫 衬 衭 衮 衯 衰 衱 衲 衳 衴 衵 衶 衷 衸 衹 衺 衻 衼
+ 衽 衾 衿 袀 袁 袂 袃 袄 袅 袆 袇 袈 袉 袊 袋 袌 袍 袎 袏 袐
+ 袑 袒 袓 袔 袕 袖 袗 袘 袙 袚 袛 袜 袝 袞 袟 袠 袡 袢 袣 袤
+ 袥 袦 袧 袨 袩 袪 被 袬 袭 袮 袯 袰 袱 袲 袳 袴 袵 袶 袷 袸
+ 袹 袺 袻 袼 袽 袾 袿 裀 裁 裂 裃 裄 装 裆 裇 裈 裉 裊 裋 裌
+ 裍 裎 裏 裐 裑 裒 裓 裔 裕 裖 裗 裘 裙 裚 裛 補 裝 裞 裟 裠
+ 裡 裢 裣 裤 裥 裦 裧 裨 裩 裪 裫 裬 裭 裮 裯 裰 裱 裲 裳 裴
+ 裵 裶 裷 裸 裹 裺 裻 裼 製 裾 裿 褀 褁 褂 褃 褄 褅 褆 複 褈
+ 褉 褊 褋 褌 褍 褎 褏 褐 褑 褒 褓 褔 褕 褖 褗 褘 褙 褚 褛 褜
+ 褝 褞 褟 褠 褡 褢 褣 褤 褥 褦 褧 褨 褩 褪 褫 褬 褭 褮 褯 褰
+ 褱 褲 褳 褴 褵 褶 褷 褸 褹 褺 褻 褼 褽 褾 褿 襀 襁 襂 襃 襄
+ 襅 襆 襇 襈 襉 襊 襋 襌 襍 襎 襏 襐 襑 襒 襓 襔 襕 襖 襗 襘
+ 襙 襚 襛 襜 襝 襞 襟 襠 襡 襢 襣 襤 襥 襦 襧 襨 襩 襪 襫 襬
+ 襭 襮 襯 襰 襱 襲 襳 襴 襵 襶 襷 襸 襹 襺 襻 襼 襽 襾 西 覀
+ 要 覂 覃 覄 覅 覆 覇 覈 覉 覊 見 覌 覍 覎 規 覐 覑 覒 覓 覔
+ 覕 視 覗 覘 覙 覚 覛 覜 覝 覞 覟 覠 覡 覢 覣 覤 覥 覦 覧 覨
+ 覩 親 覫 覬 覭 覮 覯 覰 覱 覲 観 覴 覵 覶 覷 覸 覹 覺 覻 覼
+ 覽 覾 覿 觀 见 观 觃 规 觅 视 觇 览 觉 觊 觋 觌 觍 觎 觏 觐
+ 觑 角 觓 觔 觕 觖 觗 觘 觙 觚 觛 觜 觝 觞 觟 觠 觡 觢 解 觤
+ 觥 触 觧 觨 觩 觪 觫 觬 觭 觮 觯 觰 觱 觲 觳 觴 觵 觶 觷 觸
+ 觹 觺 觻 觼 觽 觾 觿 言 訁 訂 訃 訄 訅 訆 訇 計 訉 訊 訋 訌
+ 訍 討 訏 訐 訑 訒 訓 訔 訕 訖 託 記 訙 訚 訛 訜 訝 訞 訟 訠
+ 訡 訢 訣 訤 訥 訦 訧 訨 訩 訪 訫 訬 設 訮 訯 訰 許 訲 訳 訴
+ 訵 訶 訷 訸 訹 診 註 証 訽 訾 訿 詀 詁 詂 詃 詄 詅 詆 詇 詈
+ 詉 詊 詋 詌 詍 詎 詏 詐 詑 詒 詓 詔 評 詖 詗 詘 詙 詚 詛 詜
+ 詝 詞 詟 詠 詡 詢 詣 詤 詥 試 詧 詨 詩 詪 詫 詬 詭 詮 詯 詰
+ 話 該 詳 詴 詵 詶 詷 詸 詹 詺 詻 詼 詽 詾 詿 誀 誁 誂 誃 誄
+ 誅 誆 誇 誈 誉 誊 誋 誌 認 誎 誏 誐 誑 誒 誓 誔 誕 誖 誗 誘
+ 誙 誚 誛 誜 誝 語 誟 誠 誡 誢 誣 誤 誥 誦 誧 誨 誩 說 誫 説
+ 読 誮 誯 誰 誱 課 誳 誴 誵 誶 誷 誸 誹 誺 誻 誼 誽 誾 調 諀
+ 諁 諂 諃 諄 諅 諆 談 諈 諉 諊 請 諌 諍 諎 諏 諐 諑 諒 諓 諔
+ 諕 論 諗 諘 諙 諚 諛 諜 諝 諞 諟 諠 諡 諢 諣 諤 諥 諦 諧 諨
+ 諩 諪 諫 諬 諭 諮 諯 諰 諱 諲 諳 諴 諵 諶 諷 諸 諹 諺 諻 諼
+ 諽 諾 諿 謀 謁 謂 謃 謄 謅 謆 謇 謈 謉 謊 謋 謌 謍 謎 謏 謐
+ 謑 謒 謓 謔 謕 謖 謗 謘 謙 謚 講 謜 謝 謞 謟 謠 謡 謢 謣 謤
+ 謥 謦 謧 謨 謩 謪 謫 謬 謭 謮 謯 謰 謱 謲 謳 謴 謵 謶 謷 謸
+ 謹 謺 謻 謼 謽 謾 謿 譀 譁 譂 譃 譄 譅 譆 譇 譈 證 譊 譋 譌
+ 譍 譎 譏 譐 譑 譒 譓 譔 譕 譖 譗 識 譙 譚 譛 譜 譝 譞 譟 譠
+ 譡 譢 譣 譤 譥 警 譧 譨 譩 譪 譫 譬 譭 譮 譯 議 譱 譲 譳 譴
+ 譵 譶 護 譸 譹 譺 譻 譼 譽 譾 譿 讀 讁 讂 讃 讄 讅 讆 讇 讈
+ 讉 變 讋 讌 讍 讎 讏 讐 讑 讒 讓 讔 讕 讖 讗 讘 讙 讚 讛 讜
+ 讝 讞 讟 讠 计 订 讣 认 讥 讦 讧 讨 让 讪 讫 讬 训 议 讯 记
+ 讱 讲 讳 讴 讵 讶 讷 许 讹 论 讻 讼 讽 设 访 诀 证 诂 诃 评
+ 诅 识 诇 诈 诉 诊 诋 诌 词 诎 诏 诐 译 诒 诓 诔 试 诖 诗 诘
+ 诙 诚 诛 诜 话 诞 诟 诠 诡 询 诣 诤 该 详 诧 诨 诩 诪 诫 诬
+ 语 诮 误 诰 诱 诲 诳 说 诵 诶 请 诸 诹 诺 读 诼 诽 课 诿 谀
+ 谁 谂 调 谄 谅 谆 谇 谈 谉 谊 谋 谌 谍 谎 谏 谐 谑 谒 谓 谔
+ 谕 谖 谗 谘 谙 谚 谛 谜 谝 谞 谟 谠 谡 谢 谣 谤 谥 谦 谧 谨
+ 谩 谪 谫 谬 谭 谮 谯 谰 谱 谲 谳 谴 谵 谶 谷 谸 谹 谺 谻 谼
+ 谽 谾 谿 豀 豁 豂 豃 豄 豅 豆 豇 豈 豉 豊 豋 豌 豍 豎 豏 豐
+ 豑 豒 豓 豔 豕 豖 豗 豘 豙 豚 豛 豜 豝 豞 豟 豠 象 豢 豣 豤
+ 豥 豦 豧 豨 豩 豪 豫 豬 豭 豮 豯 豰 豱 豲 豳 豴 豵 豶 豷 豸
+ 豹 豺 豻 豼 豽 豾 豿 貀 貁 貂 貃 貄 貅 貆 貇 貈 貉 貊 貋 貌
+ 貍 貎 貏 貐 貑 貒 貓 貔 貕 貖 貗 貘 貙 貚 貛 貜 貝 貞 貟 負
+ 財 貢 貣 貤 貥 貦 貧 貨 販 貪 貫 責 貭 貮 貯 貰 貱 貲 貳 貴
+ 貵 貶 買 貸 貹 貺 費 貼 貽 貾 貿 賀 賁 賂 賃 賄 賅 賆 資 賈
+ 賉 賊 賋 賌 賍 賎 賏 賐 賑 賒 賓 賔 賕 賖 賗 賘 賙 賚 賛 賜
+ 賝 賞 賟 賠 賡 賢 賣 賤 賥 賦 賧 賨 賩 質 賫 賬 賭 賮 賯 賰
+ 賱 賲 賳 賴 賵 賶 賷 賸 賹 賺 賻 購 賽 賾 賿 贀 贁 贂 贃 贄
+ 贅 贆 贇 贈 贉 贊 贋 贌 贍 贎 贏 贐 贑 贒 贓 贔 贕 贖 贗 贘
+ 贙 贚 贛 贜 贝 贞 负 贠 贡 财 责 贤 败 账 货 质 贩 贪 贫 贬
+ 购 贮 贯 贰 贱 贲 贳 贴 贵 贶 贷 贸 费 贺 贻 贼 贽 贾 贿 赀
+ 赁 赂 赃 资 赅 赆 赇 赈 赉 赊 赋 赌 赍 赎 赏 赐 赑 赒 赓 赔
+ 赕 赖 赗 赘 赙 赚 赛 赜 赝 赞 赟 赠 赡 赢 赣 赤 赥 赦 赧 赨
+ 赩 赪 赫 赬 赭 赮 赯 走 赱 赲 赳 赴 赵 赶 起 赸 赹 赺 赻 赼
+ 赽 赾 赿 趀 趁 趂 趃 趄 超 趆 趇 趈 趉 越 趋 趌 趍 趎 趏 趐
+ 趑 趒 趓 趔 趕 趖 趗 趘 趙 趚 趛 趜 趝 趞 趟 趠 趡 趢 趣 趤
+ 趥 趦 趧 趨 趩 趪 趫 趬 趭 趮 趯 趰 趱 趲 足 趴 趵 趶 趷 趸
+ 趹 趺 趻 趼 趽 趾 趿 跀 跁 跂 跃 跄 跅 跆 跇 跈 跉 跊 跋 跌
+ 跍 跎 跏 跐 跑 跒 跓 跔 跕 跖 跗 跘 跙 跚 跛 跜 距 跞 跟 跠
+ 跡 跢 跣 跤 跥 跦 跧 跨 跩 跪 跫 跬 跭 跮 路 跰 跱 跲 跳 跴
+ 践 跶 跷 跸 跹 跺 跻 跼 跽 跾 跿 踀 踁 踂 踃 踄 踅 踆 踇 踈
+ 踉 踊 踋 踌 踍 踎 踏 踐 踑 踒 踓 踔 踕 踖 踗 踘 踙 踚 踛 踜
+ 踝 踞 踟 踠 踡 踢 踣 踤 踥 踦 踧 踨 踩 踪 踫 踬 踭 踮 踯 踰
+ 踱 踲 踳 踴 踵 踶 踷 踸 踹 踺 踻 踼 踽 踾 踿 蹀 蹁 蹂 蹃 蹄
+ 蹅 蹆 蹇 蹈 蹉 蹊 蹋 蹌 蹍 蹎 蹏 蹐 蹑 蹒 蹓 蹔 蹕 蹖 蹗 蹘
+ 蹙 蹚 蹛 蹜 蹝 蹞 蹟 蹠 蹡 蹢 蹣 蹤 蹥 蹦 蹧 蹨 蹩 蹪 蹫 蹬
+ 蹭 蹮 蹯 蹰 蹱 蹲 蹳 蹴 蹵 蹶 蹷 蹸 蹹 蹺 蹻 蹼 蹽 蹾 蹿 躀
+ 躁 躂 躃 躄 躅 躆 躇 躈 躉 躊 躋 躌 躍 躎 躏 躐 躑 躒 躓 躔
+ 躕 躖 躗 躘 躙 躚 躛 躜 躝 躞 躟 躠 躡 躢 躣 躤 躥 躦 躧 躨
+ 躩 躪 身 躬 躭 躮 躯 躰 躱 躲 躳 躴 躵 躶 躷 躸 躹 躺 躻 躼
+ 躽 躾 躿 軀 軁 軂 軃 軄 軅 軆 軇 軈 軉 車 軋 軌 軍 軎 軏 軐
+ 軑 軒 軓 軔 軕 軖 軗 軘 軙 軚 軛 軜 軝 軞 軟 軠 軡 転 軣 軤
+ 軥 軦 軧 軨 軩 軪 軫 軬 軭 軮 軯 軰 軱 軲 軳 軴 軵 軶 軷 軸
+ 軹 軺 軻 軼 軽 軾 軿 輀 輁 輂 較 輄 輅 輆 輇 輈 載 輊 輋 輌
+ 輍 輎 輏 輐 輑 輒 輓 輔 輕 輖 輗 輘 輙 輚 輛 輜 輝 輞 輟 輠
+ 輡 輢 輣 輤 輥 輦 輧 輨 輩 輪 輫 輬 輭 輮 輯 輰 輱 輲 輳 輴
+ 輵 輶 輷 輸 輹 輺 輻 輼 輽 輾 輿 轀 轁 轂 轃 轄 轅 轆 轇 轈
+ 轉 轊 轋 轌 轍 轎 轏 轐 轑 轒 轓 轔 轕 轖 轗 轘 轙 轚 轛 轜
+ 轝 轞 轟 轠 轡 轢 轣 轤 轥 车 轧 轨 轩 轪 轫 转 轭 轮 软 轰
+ 轱 轲 轳 轴 轵 轶 轷 轸 轹 轺 轻 轼 载 轾 轿 辀 辁 辂 较 辄
+ 辅 辆 辇 辈 辉 辊 辋 辌 辍 辎 辏 辐 辑 辒 输 辔 辕 辖 辗 辘
+ 辙 辚 辛 辜 辝 辞 辟 辠 辡 辢 辣 辤 辥 辦 辧 辨 辩 辪 辫 辬
+ 辭 辮 辯 辰 辱 農 辳 辴 辵 辶 辷 辸 边 辺 辻 込 辽 达 辿 迀
+ 迁 迂 迃 迄 迅 迆 过 迈 迉 迊 迋 迌 迍 迎 迏 运 近 迒 迓 返
+ 迕 迖 迗 还 这 迚 进 远 违 连 迟 迠 迡 迢 迣 迤 迥 迦 迧 迨
+ 迩 迪 迫 迬 迭 迮 迯 述 迱 迲 迳 迴 迵 迶 迷 迸 迹 迺 迻 迼
+ 追 迾 迿 退 送 适 逃 逄 逅 逆 逇 逈 选 逊 逋 逌 逍 逎 透 逐
+ 逑 递 逓 途 逕 逖 逗 逘 這 通 逛 逜 逝 逞 速 造 逡 逢 連 逤
+ 逥 逦 逧 逨 逩 逪 逫 逬 逭 逮 逯 逰 週 進 逳 逴 逵 逶 逷 逸
+ 逹 逺 逻 逼 逽 逾 逿 遀 遁 遂 遃 遄 遅 遆 遇 遈 遉 遊 運 遌
+ 遍 過 遏 遐 遑 遒 道 達 違 遖 遗 遘 遙 遚 遛 遜 遝 遞 遟 遠
+ 遡 遢 遣 遤 遥 遦 遧 遨 適 遪 遫 遬 遭 遮 遯 遰 遱 遲 遳 遴
+ 遵 遶 遷 選 遹 遺 遻 遼 遽 遾 避 邀 邁 邂 邃 還 邅 邆 邇 邈
+ 邉 邊 邋 邌 邍 邎 邏 邐 邑 邒 邓 邔 邕 邖 邗 邘 邙 邚 邛 邜
+ 邝 邞 邟 邠 邡 邢 那 邤 邥 邦 邧 邨 邩 邪 邫 邬 邭 邮 邯 邰
+ 邱 邲 邳 邴 邵 邶 邷 邸 邹 邺 邻 邼 邽 邾 邿 郀 郁 郂 郃 郄
+ 郅 郆 郇 郈 郉 郊 郋 郌 郍 郎 郏 郐 郑 郒 郓 郔 郕 郖 郗 郘
+ 郙 郚 郛 郜 郝 郞 郟 郠 郡 郢 郣 郤 郥 郦 郧 部 郩 郪 郫 郬
+ 郭 郮 郯 郰 郱 郲 郳 郴 郵 郶 郷 郸 郹 郺 郻 郼 都 郾 郿 鄀
+ 鄁 鄂 鄃 鄄 鄅 鄆 鄇 鄈 鄉 鄊 鄋 鄌 鄍 鄎 鄏 鄐 鄑 鄒 鄓 鄔
+ 鄕 鄖 鄗 鄘 鄙 鄚 鄛 鄜 鄝 鄞 鄟 鄠 鄡 鄢 鄣 鄤 鄥 鄦 鄧 鄨
+ 鄩 鄪 鄫 鄬 鄭 鄮 鄯 鄰 鄱 鄲 鄳 鄴 鄵 鄶 鄷 鄸 鄹 鄺 鄻 鄼
+ 鄽 鄾 鄿 酀 酁 酂 酃 酄 酅 酆 酇 酈 酉 酊 酋 酌 配 酎 酏 酐
+ 酑 酒 酓 酔 酕 酖 酗 酘 酙 酚 酛 酜 酝 酞 酟 酠 酡 酢 酣 酤
+ 酥 酦 酧 酨 酩 酪 酫 酬 酭 酮 酯 酰 酱 酲 酳 酴 酵 酶 酷 酸
+ 酹 酺 酻 酼 酽 酾 酿 醀 醁 醂 醃 醄 醅 醆 醇 醈 醉 醊 醋 醌
+ 醍 醎 醏 醐 醑 醒 醓 醔 醕 醖 醗 醘 醙 醚 醛 醜 醝 醞 醟 醠
+ 醡 醢 醣 醤 醥 醦 醧 醨 醩 醪 醫 醬 醭 醮 醯 醰 醱 醲 醳 醴
+ 醵 醶 醷 醸 醹 醺 醻 醼 醽 醾 醿 釀 釁 釂 釃 釄 釅 釆 采 釈
+ 釉 释 釋 里 重 野 量 釐 金 釒 釓 釔 釕 釖 釗 釘 釙 釚 釛 釜
+ 針 釞 釟 釠 釡 釢 釣 釤 釥 釦 釧 釨 釩 釪 釫 釬 釭 釮 釯 釰
+ 釱 釲 釳 釴 釵 釶 釷 釸 釹 釺 釻 釼 釽 釾 釿 鈀 鈁 鈂 鈃 鈄
+ 鈅 鈆 鈇 鈈 鈉 鈊 鈋 鈌 鈍 鈎 鈏 鈐 鈑 鈒 鈓 鈔 鈕 鈖 鈗 鈘
+ 鈙 鈚 鈛 鈜 鈝 鈞 鈟 鈠 鈡 鈢 鈣 鈤 鈥 鈦 鈧 鈨 鈩 鈪 鈫 鈬
+ 鈭 鈮 鈯 鈰 鈱 鈲 鈳 鈴 鈵 鈶 鈷 鈸 鈹 鈺 鈻 鈼 鈽 鈾 鈿 鉀
+ 鉁 鉂 鉃 鉄 鉅 鉆 鉇 鉈 鉉 鉊 鉋 鉌 鉍 鉎 鉏 鉐 鉑 鉒 鉓 鉔
+ 鉕 鉖 鉗 鉘 鉙 鉚 鉛 鉜 鉝 鉞 鉟 鉠 鉡 鉢 鉣 鉤 鉥 鉦 鉧 鉨
+ 鉩 鉪 鉫 鉬 鉭 鉮 鉯 鉰 鉱 鉲 鉳 鉴 鉵 鉶 鉷 鉸 鉹 鉺 鉻 鉼
+ 鉽 鉾 鉿 銀 銁 銂 銃 銄 銅 銆 銇 銈 銉 銊 銋 銌 銍 銎 銏 銐
+ 銑 銒 銓 銔 銕 銖 銗 銘 銙 銚 銛 銜 銝 銞 銟 銠 銡 銢 銣 銤
+ 銥 銦 銧 銨 銩 銪 銫 銬 銭 銮 銯 銰 銱 銲 銳 銴 銵 銶 銷 銸
+ 銹 銺 銻 銼 銽 銾 銿 鋀 鋁 鋂 鋃 鋄 鋅 鋆 鋇 鋈 鋉 鋊 鋋 鋌
+ 鋍 鋎 鋏 鋐 鋑 鋒 鋓 鋔 鋕 鋖 鋗 鋘 鋙 鋚 鋛 鋜 鋝 鋞 鋟 鋠
+ 鋡 鋢 鋣 鋤 鋥 鋦 鋧 鋨 鋩 鋪 鋫 鋬 鋭 鋮 鋯 鋰 鋱 鋲 鋳 鋴
+ 鋵 鋶 鋷 鋸 鋹 鋺 鋻 鋼 鋽 鋾 鋿 錀 錁 錂 錃 錄 錅 錆 錇 錈
+ 錉 錊 錋 錌 錍 錎 錏 錐 錑 錒 錓 錔 錕 錖 錗 錘 錙 錚 錛 錜
+ 錝 錞 錟 錠 錡 錢 錣 錤 錥 錦 錧 錨 錩 錪 錫 錬 錭 錮 錯 錰
+ 錱 録 錳 錴 錵 錶 錷 錸 錹 錺 錻 錼 錽 錾 錿 鍀 鍁 鍂 鍃 鍄
+ 鍅 鍆 鍇 鍈 鍉 鍊 鍋 鍌 鍍 鍎 鍏 鍐 鍑 鍒 鍓 鍔 鍕 鍖 鍗 鍘
+ 鍙 鍚 鍛 鍜 鍝 鍞 鍟 鍠 鍡 鍢 鍣 鍤 鍥 鍦 鍧 鍨 鍩 鍪 鍫 鍬
+ 鍭 鍮 鍯 鍰 鍱 鍲 鍳 鍴 鍵 鍶 鍷 鍸 鍹 鍺 鍻 鍼 鍽 鍾 鍿 鎀
+ 鎁 鎂 鎃 鎄 鎅 鎆 鎇 鎈 鎉 鎊 鎋 鎌 鎍 鎎 鎏 鎐 鎑 鎒 鎓 鎔
+ 鎕 鎖 鎗 鎘 鎙 鎚 鎛 鎜 鎝 鎞 鎟 鎠 鎡 鎢 鎣 鎤 鎥 鎦 鎧 鎨
+ 鎩 鎪 鎫 鎬 鎭 鎮 鎯 鎰 鎱 鎲 鎳 鎴 鎵 鎶 鎷 鎸 鎹 鎺 鎻 鎼
+ 鎽 鎾 鎿 鏀 鏁 鏂 鏃 鏄 鏅 鏆 鏇 鏈 鏉 鏊 鏋 鏌 鏍 鏎 鏏 鏐
+ 鏑 鏒 鏓 鏔 鏕 鏖 鏗 鏘 鏙 鏚 鏛 鏜 鏝 鏞 鏟 鏠 鏡 鏢 鏣 鏤
+ 鏥 鏦 鏧 鏨 鏩 鏪 鏫 鏬 鏭 鏮 鏯 鏰 鏱 鏲 鏳 鏴 鏵 鏶 鏷 鏸
+ 鏹 鏺 鏻 鏼 鏽 鏾 鏿 鐀 鐁 鐂 鐃 鐄 鐅 鐆 鐇 鐈 鐉 鐊 鐋 鐌
+ 鐍 鐎 鐏 鐐 鐑 鐒 鐓 鐔 鐕 鐖 鐗 鐘 鐙 鐚 鐛 鐜 鐝 鐞 鐟 鐠
+ 鐡 鐢 鐣 鐤 鐥 鐦 鐧 鐨 鐩 鐪 鐫 鐬 鐭 鐮 鐯 鐰 鐱 鐲 鐳 鐴
+ 鐵 鐶 鐷 鐸 鐹 鐺 鐻 鐼 鐽 鐾 鐿 鑀 鑁 鑂 鑃 鑄 鑅 鑆 鑇 鑈
+ 鑉 鑊 鑋 鑌 鑍 鑎 鑏 鑐 鑑 鑒 鑓 鑔 鑕 鑖 鑗 鑘 鑙 鑚 鑛 鑜
+ 鑝 鑞 鑟 鑠 鑡 鑢 鑣 鑤 鑥 鑦 鑧 鑨 鑩 鑪 鑫 鑬 鑭 鑮 鑯 鑰
+ 鑱 鑲 鑳 鑴 鑵 鑶 鑷 鑸 鑹 鑺 鑻 鑼 鑽 鑾 鑿 钀 钁 钂 钃 钄
+ 钅 钆 钇 针 钉 钊 钋 钌 钍 钎 钏 钐 钑 钒 钓 钔 钕 钖 钗 钘
+ 钙 钚 钛 钜 钝 钞 钟 钠 钡 钢 钣 钤 钥 钦 钧 钨 钩 钪 钫 钬
+ 钭 钮 钯 钰 钱 钲 钳 钴 钵 钶 钷 钸 钹 钺 钻 钼 钽 钾 钿 铀
+ 铁 铂 铃 铄 铅 铆 铇 铈 铉 铊 铋 铌 铍 铎 铏 铐 铑 铒 铓 铔
+ 铕 铖 铗 铘 铙 铚 铛 铜 铝 铞 铟 铠 铡 铢 铣 铤 铥 铦 铧 铨
+ 铩 铪 铫 铬 铭 铮 铯 铰 铱 铲 铳 铴 铵 银 铷 铸 铹 铺 铻 铼
+ 铽 链 铿 销 锁 锂 锃 锄 锅 锆 锇 锈 锉 锊 锋 锌 锍 锎 锏 锐
+ 锑 锒 锓 锔 锕 锖 锗 锘 错 锚 锛 锜 锝 锞 锟 锠 锡 锢 锣 锤
+ 锥 锦 锧 锨 锩 锪 锫 锬 锭 键 锯 锰 锱 锲 锳 锴 锵 锶 锷 锸
+ 锹 锺 锻 锼 锽 锾 锿 镀 镁 镂 镃 镄 镅 镆 镇 镈 镉 镊 镋 镌
+ 镍 镎 镏 镐 镑 镒 镓 镔 镕 镖 镗 镘 镙 镚 镛 镜 镝 镞 镟 镠
+ 镡 镢 镣 镤 镥 镦 镧 镨 镩 镪 镫 镬 镭 镮 镯 镰 镱 镲 镳 镴
+ 镵 镶 長 镸 镹 镺 镻 镼 镽 镾 长 門 閁 閂 閃 閄 閅 閆 閇 閈
+ 閉 閊 開 閌 閍 閎 閏 閐 閑 閒 間 閔 閕 閖 閗 閘 閙 閚 閛 閜
+ 閝 閞 閟 閠 閡 関 閣 閤 閥 閦 閧 閨 閩 閪 閫 閬 閭 閮 閯 閰
+ 閱 閲 閳 閴 閵 閶 閷 閸 閹 閺 閻 閼 閽 閾 閿 闀 闁 闂 闃 闄
+ 闅 闆 闇 闈 闉 闊 闋 闌 闍 闎 闏 闐 闑 闒 闓 闔 闕 闖 闗 闘
+ 闙 闚 闛 關 闝 闞 闟 闠 闡 闢 闣 闤 闥 闦 闧 门 闩 闪 闫 闬
+ 闭 问 闯 闰 闱 闲 闳 间 闵 闶 闷 闸 闹 闺 闻 闼 闽 闾 闿 阀
+ 阁 阂 阃 阄 阅 阆 阇 阈 阉 阊 阋 阌 阍 阎 阏 阐 阑 阒 阓 阔
+ 阕 阖 阗 阘 阙 阚 阛 阜 阝 阞 队 阠 阡 阢 阣 阤 阥 阦 阧 阨
+ 阩 阪 阫 阬 阭 阮 阯 阰 阱 防 阳 阴 阵 阶 阷 阸 阹 阺 阻 阼
+ 阽 阾 阿 陀 陁 陂 陃 附 际 陆 陇 陈 陉 陊 陋 陌 降 陎 陏 限
+ 陑 陒 陓 陔 陕 陖 陗 陘 陙 陚 陛 陜 陝 陞 陟 陠 陡 院 陣 除
+ 陥 陦 陧 陨 险 陪 陫 陬 陭 陮 陯 陰 陱 陲 陳 陴 陵 陶 陷 陸
+ 陹 険 陻 陼 陽 陾 陿 隀 隁 隂 隃 隄 隅 隆 隇 隈 隉 隊 隋 隌
+ 隍 階 随 隐 隑 隒 隓 隔 隕 隖 隗 隘 隙 隚 際 障 隝 隞 隟 隠
+ 隡 隢 隣 隤 隥 隦 隧 隨 隩 險 隫 隬 隭 隮 隯 隰 隱 隲 隳 隴
+ 隵 隶 隷 隸 隹 隺 隻 隼 隽 难 隿 雀 雁 雂 雃 雄 雅 集 雇 雈
+ 雉 雊 雋 雌 雍 雎 雏 雐 雑 雒 雓 雔 雕 雖 雗 雘 雙 雚 雛 雜
+ 雝 雞 雟 雠 雡 離 難 雤 雥 雦 雧 雨 雩 雪 雫 雬 雭 雮 雯 雰
+ 雱 雲 雳 雴 雵 零 雷 雸 雹 雺 電 雼 雽 雾 雿 需 霁 霂 霃 霄
+ 霅 霆 震 霈 霉 霊 霋 霌 霍 霎 霏 霐 霑 霒 霓 霔 霕 霖 霗 霘
+ 霙 霚 霛 霜 霝 霞 霟 霠 霡 霢 霣 霤 霥 霦 霧 霨 霩 霪 霫 霬
+ 霭 霮 霯 霰 霱 露 霳 霴 霵 霶 霷 霸 霹 霺 霻 霼 霽 霾 霿 靀
+ 靁 靂 靃 靄 靅 靆 靇 靈 靉 靊 靋 靌 靍 靎 靏 靐 靑 青 靓 靔
+ 靕 靖 靗 靘 静 靚 靛 靜 靝 非 靟 靠 靡 面 靣 靤 靥 靦 靧 靨
+ 革 靪 靫 靬 靭 靮 靯 靰 靱 靲 靳 靴 靵 靶 靷 靸 靹 靺 靻 靼
+ 靽 靾 靿 鞀 鞁 鞂 鞃 鞄 鞅 鞆 鞇 鞈 鞉 鞊 鞋 鞌 鞍 鞎 鞏 鞐
+ 鞑 鞒 鞓 鞔 鞕 鞖 鞗 鞘 鞙 鞚 鞛 鞜 鞝 鞞 鞟 鞠 鞡 鞢 鞣 鞤
+ 鞥 鞦 鞧 鞨 鞩 鞪 鞫 鞬 鞭 鞮 鞯 鞰 鞱 鞲 鞳 鞴 鞵 鞶 鞷 鞸
+ 鞹 鞺 鞻 鞼 鞽 鞾 鞿 韀 韁 韂 韃 韄 韅 韆 韇 韈 韉 韊 韋 韌
+ 韍 韎 韏 韐 韑 韒 韓 韔 韕 韖 韗 韘 韙 韚 韛 韜 韝 韞 韟 韠
+ 韡 韢 韣 韤 韥 韦 韧 韨 韩 韪 韫 韬 韭 韮 韯 韰 韱 韲 音 韴
+ 韵 韶 韷 韸 韹 韺 韻 韼 韽 韾 響 頀 頁 頂 頃 頄 項 順 頇 須
+ 頉 頊 頋 頌 頍 頎 頏 預 頑 頒 頓 頔 頕 頖 頗 領 頙 頚 頛 頜
+ 頝 頞 頟 頠 頡 頢 頣 頤 頥 頦 頧 頨 頩 頪 頫 頬 頭 頮 頯 頰
+ 頱 頲 頳 頴 頵 頶 頷 頸 頹 頺 頻 頼 頽 頾 頿 顀 顁 顂 顃 顄
+ 顅 顆 顇 顈 顉 顊 顋 題 額 顎 顏 顐 顑 顒 顓 顔 顕 顖 顗 願
+ 顙 顚 顛 顜 顝 類 顟 顠 顡 顢 顣 顤 顥 顦 顧 顨 顩 顪 顫 顬
+ 顭 顮 顯 顰 顱 顲 顳 顴 页 顶 顷 顸 项 顺 须 顼 顽 顾 顿 颀
+ 颁 颂 颃 预 颅 领 颇 颈 颉 颊 颋 颌 颍 颎 颏 颐 频 颒 颓 颔
+ 颕 颖 颗 题 颙 颚 颛 颜 额 颞 颟 颠 颡 颢 颣 颤 颥 颦 颧 風
+ 颩 颪 颫 颬 颭 颮 颯 颰 颱 颲 颳 颴 颵 颶 颷 颸 颹 颺 颻 颼
+ 颽 颾 颿 飀 飁 飂 飃 飄 飅 飆 飇 飈 飉 飊 飋 飌 飍 风 飏 飐
+ 飑 飒 飓 飔 飕 飖 飗 飘 飙 飚 飛 飜 飝 飞 食 飠 飡 飢 飣 飤
+ 飥 飦 飧 飨 飩 飪 飫 飬 飭 飮 飯 飰 飱 飲 飳 飴 飵 飶 飷 飸
+ 飹 飺 飻 飼 飽 飾 飿 餀 餁 餂 餃 餄 餅 餆 餇 餈 餉 養 餋 餌
+ 餍 餎 餏 餐 餑 餒 餓 餔 餕 餖 餗 餘 餙 餚 餛 餜 餝 餞 餟 餠
+ 餡 餢 餣 餤 餥 餦 餧 館 餩 餪 餫 餬 餭 餮 餯 餰 餱 餲 餳 餴
+ 餵 餶 餷 餸 餹 餺 餻 餼 餽 餾 餿 饀 饁 饂 饃 饄 饅 饆 饇 饈
+ 饉 饊 饋 饌 饍 饎 饏 饐 饑 饒 饓 饔 饕 饖 饗 饘 饙 饚 饛 饜
+ 饝 饞 饟 饠 饡 饢 饣 饤 饥 饦 饧 饨 饩 饪 饫 饬 饭 饮 饯 饰
+ 饱 饲 饳 饴 饵 饶 饷 饸 饹 饺 饻 饼 饽 饾 饿 馀 馁 馂 馃 馄
+ 馅 馆 馇 馈 馉 馊 馋 馌 馍 馎 馏 馐 馑 馒 馓 馔 馕 首 馗 馘
+ 香 馚 馛 馜 馝 馞 馟 馠 馡 馢 馣 馤 馥 馦 馧 馨 馩 馪 馫 馬
+ 馭 馮 馯 馰 馱 馲 馳 馴 馵 馶 馷 馸 馹 馺 馻 馼 馽 馾 馿 駀
+ 駁 駂 駃 駄 駅 駆 駇 駈 駉 駊 駋 駌 駍 駎 駏 駐 駑 駒 駓 駔
+ 駕 駖 駗 駘 駙 駚 駛 駜 駝 駞 駟 駠 駡 駢 駣 駤 駥 駦 駧 駨
+ 駩 駪 駫 駬 駭 駮 駯 駰 駱 駲 駳 駴 駵 駶 駷 駸 駹 駺 駻 駼
+ 駽 駾 駿 騀 騁 騂 騃 騄 騅 騆 騇 騈 騉 騊 騋 騌 騍 騎 騏 騐
+ 騑 騒 験 騔 騕 騖 騗 騘 騙 騚 騛 騜 騝 騞 騟 騠 騡 騢 騣 騤
+ 騥 騦 騧 騨 騩 騪 騫 騬 騭 騮 騯 騰 騱 騲 騳 騴 騵 騶 騷 騸
+ 騹 騺 騻 騼 騽 騾 騿 驀 驁 驂 驃 驄 驅 驆 驇 驈 驉 驊 驋 驌
+ 驍 驎 驏 驐 驑 驒 驓 驔 驕 驖 驗 驘 驙 驚 驛 驜 驝 驞 驟 驠
+ 驡 驢 驣 驤 驥 驦 驧 驨 驩 驪 驫 马 驭 驮 驯 驰 驱 驲 驳 驴
+ 驵 驶 驷 驸 驹 驺 驻 驼 驽 驾 驿 骀 骁 骂 骃 骄 骅 骆 骇 骈
+ 骉 骊 骋 验 骍 骎 骏 骐 骑 骒 骓 骔 骕 骖 骗 骘 骙 骚 骛 骜
+ 骝 骞 骟 骠 骡 骢 骣 骤 骥 骦 骧 骨 骩 骪 骫 骬 骭 骮 骯 骰
+ 骱 骲 骳 骴 骵 骶 骷 骸 骹 骺 骻 骼 骽 骾 骿 髀 髁 髂 髃 髄
+ 髅 髆 髇 髈 髉 髊 髋 髌 髍 髎 髏 髐 髑 髒 髓 體 髕 髖 髗 高
+ 髙 髚 髛 髜 髝 髞 髟 髠 髡 髢 髣 髤 髥 髦 髧 髨 髩 髪 髫 髬
+ 髭 髮 髯 髰 髱 髲 髳 髴 髵 髶 髷 髸 髹 髺 髻 髼 髽 髾 髿 鬀
+ 鬁 鬂 鬃 鬄 鬅 鬆 鬇 鬈 鬉 鬊 鬋 鬌 鬍 鬎 鬏 鬐 鬑 鬒 鬓 鬔
+ 鬕 鬖 鬗 鬘 鬙 鬚 鬛 鬜 鬝 鬞 鬟 鬠 鬡 鬢 鬣 鬤 鬥 鬦 鬧 鬨
+ 鬩 鬪 鬫 鬬 鬭 鬮 鬯 鬰 鬱 鬲 鬳 鬴 鬵 鬶 鬷 鬸 鬹 鬺 鬻 鬼
+ 鬽 鬾 鬿 魀 魁 魂 魃 魄 魅 魆 魇 魈 魉 魊 魋 魌 魍 魎 魏 魐
+ 魑 魒 魓 魔 魕 魖 魗 魘 魙 魚 魛 魜 魝 魞 魟 魠 魡 魢 魣 魤
+ 魥 魦 魧 魨 魩 魪 魫 魬 魭 魮 魯 魰 魱 魲 魳 魴 魵 魶 魷 魸
+ 魹 魺 魻 魼 魽 魾 魿 鮀 鮁 鮂 鮃 鮄 鮅 鮆 鮇 鮈 鮉 鮊 鮋 鮌
+ 鮍 鮎 鮏 鮐 鮑 鮒 鮓 鮔 鮕 鮖 鮗 鮘 鮙 鮚 鮛 鮜 鮝 鮞 鮟 鮠
+ 鮡 鮢 鮣 鮤 鮥 鮦 鮧 鮨 鮩 鮪 鮫 鮬 鮭 鮮 鮯 鮰 鮱 鮲 鮳 鮴
+ 鮵 鮶 鮷 鮸 鮹 鮺 鮻 鮼 鮽 鮾 鮿 鯀 鯁 鯂 鯃 鯄 鯅 鯆 鯇 鯈
+ 鯉 鯊 鯋 鯌 鯍 鯎 鯏 鯐 鯑 鯒 鯓 鯔 鯕 鯖 鯗 鯘 鯙 鯚 鯛 鯜
+ 鯝 鯞 鯟 鯠 鯡 鯢 鯣 鯤 鯥 鯦 鯧 鯨 鯩 鯪 鯫 鯬 鯭 鯮 鯯 鯰
+ 鯱 鯲 鯳 鯴 鯵 鯶 鯷 鯸 鯹 鯺 鯻 鯼 鯽 鯾 鯿 鰀 鰁 鰂 鰃 鰄
+ 鰅 鰆 鰇 鰈 鰉 鰊 鰋 鰌 鰍 鰎 鰏 鰐 鰑 鰒 鰓 鰔 鰕 鰖 鰗 鰘
+ 鰙 鰚 鰛 鰜 鰝 鰞 鰟 鰠 鰡 鰢 鰣 鰤 鰥 鰦 鰧 鰨 鰩 鰪 鰫 鰬
+ 鰭 鰮 鰯 鰰 鰱 鰲 鰳 鰴 鰵 鰶 鰷 鰸 鰹 鰺 鰻 鰼 鰽 鰾 鰿 鱀
+ 鱁 鱂 鱃 鱄 鱅 鱆 鱇 鱈 鱉 鱊 鱋 鱌 鱍 鱎 鱏 鱐 鱑 鱒 鱓 鱔
+ 鱕 鱖 鱗 鱘 鱙 鱚 鱛 鱜 鱝 鱞 鱟 鱠 鱡 鱢 鱣 鱤 鱥 鱦 鱧 鱨
+ 鱩 鱪 鱫 鱬 鱭 鱮 鱯 鱰 鱱 鱲 鱳 鱴 鱵 鱶 鱷 鱸 鱹 鱺 鱻 鱼
+ 鱽 鱾 鱿 鲀 鲁 鲂 鲃 鲄 鲅 鲆 鲇 鲈 鲉 鲊 鲋 鲌 鲍 鲎 鲏 鲐
+ 鲑 鲒 鲓 鲔 鲕 鲖 鲗 鲘 鲙 鲚 鲛 鲜 鲝 鲞 鲟 鲠 鲡 鲢 鲣 鲤
+ 鲥 鲦 鲧 鲨 鲩 鲪 鲫 鲬 鲭 鲮 鲯 鲰 鲱 鲲 鲳 鲴 鲵 鲶 鲷 鲸
+ 鲹 鲺 鲻 鲼 鲽 鲾 鲿 鳀 鳁 鳂 鳃 鳄 鳅 鳆 鳇 鳈 鳉 鳊 鳋 鳌
+ 鳍 鳎 鳏 鳐 鳑 鳒 鳓 鳔 鳕 鳖 鳗 鳘 鳙 鳚 鳛 鳜 鳝 鳞 鳟 鳠
+ 鳡 鳢 鳣 鳤 鳥 鳦 鳧 鳨 鳩 鳪 鳫 鳬 鳭 鳮 鳯 鳰 鳱 鳲 鳳 鳴
+ 鳵 鳶 鳷 鳸 鳹 鳺 鳻 鳼 鳽 鳾 鳿 鴀 鴁 鴂 鴃 鴄 鴅 鴆 鴇 鴈
+ 鴉 鴊 鴋 鴌 鴍 鴎 鴏 鴐 鴑 鴒 鴓 鴔 鴕 鴖 鴗 鴘 鴙 鴚 鴛 鴜
+ 鴝 鴞 鴟 鴠 鴡 鴢 鴣 鴤 鴥 鴦 鴧 鴨 鴩 鴪 鴫 鴬 鴭 鴮 鴯 鴰
+ 鴱 鴲 鴳 鴴 鴵 鴶 鴷 鴸 鴹 鴺 鴻 鴼 鴽 鴾 鴿 鵀 鵁 鵂 鵃 鵄
+ 鵅 鵆 鵇 鵈 鵉 鵊 鵋 鵌 鵍 鵎 鵏 鵐 鵑 鵒 鵓 鵔 鵕 鵖 鵗 鵘
+ 鵙 鵚 鵛 鵜 鵝 鵞 鵟 鵠 鵡 鵢 鵣 鵤 鵥 鵦 鵧 鵨 鵩 鵪 鵫 鵬
+ 鵭 鵮 鵯 鵰 鵱 鵲 鵳 鵴 鵵 鵶 鵷 鵸 鵹 鵺 鵻 鵼 鵽 鵾 鵿 鶀
+ 鶁 鶂 鶃 鶄 鶅 鶆 鶇 鶈 鶉 鶊 鶋 鶌 鶍 鶎 鶏 鶐 鶑 鶒 鶓 鶔
+ 鶕 鶖 鶗 鶘 鶙 鶚 鶛 鶜 鶝 鶞 鶟 鶠 鶡 鶢 鶣 鶤 鶥 鶦 鶧 鶨
+ 鶩 鶪 鶫 鶬 鶭 鶮 鶯 鶰 鶱 鶲 鶳 鶴 鶵 鶶 鶷 鶸 鶹 鶺 鶻 鶼
+ 鶽 鶾 鶿 鷀 鷁 鷂 鷃 鷄 鷅 鷆 鷇 鷈 鷉 鷊 鷋 鷌 鷍 鷎 鷏 鷐
+ 鷑 鷒 鷓 鷔 鷕 鷖 鷗 鷘 鷙 鷚 鷛 鷜 鷝 鷞 鷟 鷠 鷡 鷢 鷣 鷤
+ 鷥 鷦 鷧 鷨 鷩 鷪 鷫 鷬 鷭 鷮 鷯 鷰 鷱 鷲 鷳 鷴 鷵 鷶 鷷 鷸
+ 鷹 鷺 鷻 鷼 鷽 鷾 鷿 鸀 鸁 鸂 鸃 鸄 鸅 鸆 鸇 鸈 鸉 鸊 鸋 鸌
+ 鸍 鸎 鸏 鸐 鸑 鸒 鸓 鸔 鸕 鸖 鸗 鸘 鸙 鸚 鸛 鸜 鸝 鸞 鸟 鸠
+ 鸡 鸢 鸣 鸤 鸥 鸦 鸧 鸨 鸩 鸪 鸫 鸬 鸭 鸮 鸯 鸰 鸱 鸲 鸳 鸴
+ 鸵 鸶 鸷 鸸 鸹 鸺 鸻 鸼 鸽 鸾 鸿 鹀 鹁 鹂 鹃 鹄 鹅 鹆 鹇 鹈
+ 鹉 鹊 鹋 鹌 鹍 鹎 鹏 鹐 鹑 鹒 鹓 鹔 鹕 鹖 鹗 鹘 鹙 鹚 鹛 鹜
+ 鹝 鹞 鹟 鹠 鹡 鹢 鹣 鹤 鹥 鹦 鹧 鹨 鹩 鹪 鹫 鹬 鹭 鹮 鹯 鹰
+ 鹱 鹲 鹳 鹴 鹵 鹶 鹷 鹸 鹹 鹺 鹻 鹼 鹽 鹾 鹿 麀 麁 麂 麃 麄
+ 麅 麆 麇 麈 麉 麊 麋 麌 麍 麎 麏 麐 麑 麒 麓 麔 麕 麖 麗 麘
+ 麙 麚 麛 麜 麝 麞 麟 麠 麡 麢 麣 麤 麥 麦 麧 麨 麩 麪 麫 麬
+ 麭 麮 麯 麰 麱 麲 麳 麴 麵 麶 麷 麸 麹 麺 麻 麼 麽 麾 麿 黀
+ 黁 黂 黃 黄 黅 黆 黇 黈 黉 黊 黋 黌 黍 黎 黏 黐 黑 黒 黓 黔
+ 黕 黖 黗 默 黙 黚 黛 黜 黝 點 黟 黠 黡 黢 黣 黤 黥 黦 黧 黨
+ 黩 黪 黫 黬 黭 黮 黯 黰 黱 黲 黳 黴 黵 黶 黷 黸 黹 黺 黻 黼
+ 黽 黾 黿 鼀 鼁 鼂 鼃 鼄 鼅 鼆 鼇 鼈 鼉 鼊 鼋 鼌 鼍 鼎 鼏 鼐
+ 鼑 鼒 鼓 鼔 鼕 鼖 鼗 鼘 鼙 鼚 鼛 鼜 鼝 鼞 鼟 鼠 鼡 鼢 鼣 鼤
+ 鼥 鼦 鼧 鼨 鼩 鼪 鼫 鼬 鼭 鼮 鼯 鼰 鼱 鼲 鼳 鼴 鼵 鼶 鼷 鼸
+ 鼹 鼺 鼻 鼼 鼽 鼾 鼿 齀 齁 齂 齃 齄 齅 齆 齇 齈 齉 齊 齋 齌
+ 齍 齎 齏 齐 齑 齒 齓 齔 齕 齖 齗 齘 齙 齚 齛 齜 齝 齞 齟 齠
+ 齡 齢 齣 齤 齥 齦 齧 齨 齩 齪 齫 齬 齭 齮 齯 齰 齱 齲 齳 齴
+ 齵 齶 齷 齸 齹 齺 齻 齼 齽 齾 齿 龀 龁 龂 龃 龄 龅 龆 龇 龈
+ 龉 龊 龋 龌 龍 龎 龏 龐 龑 龒 龓 龔 龕 龖 龗 龘 龙 龚 龛 龜
+ 龝 龞 龟 龠 龡 龢 龣 龤 龥 龦 龧 龨 龩 龪 龫 龬 龭 龮 龯 龰
+ 龱 龲 龳 龴 龵 龶 龷 龸 龹 龺 龻 龼 龽 龾 龿 鿀 鿁 鿂 鿃 鿄
+ 鿅 鿆 鿇 鿈 鿉 鿊 鿋 鿌 鿍 鿎 鿏 鿐 鿑 鿒 鿓 鿔 鿕 鿖 鿗 鿘
+ 鿙 鿚 鿛 鿜 鿝 鿞 鿟 鿠 鿡 鿢 鿣 鿤 鿥 鿦 鿧 鿨 鿩 鿪 鿫 鿬
+ 鿭 鿮 鿯 鿰 鿱 鿲 鿳 鿴 鿵 鿶 鿷 鿸 鿹 鿺 鿻 鿼 鿽 鿾 鿿 ꀀ
+ ꀁ ꀂ ꀃ ꀄ ꀅ ꀆ ꀇ ꀈ ꀉ ꀊ ꀋ ꀌ ꀍ ꀎ ꀏ ꀐ ꀑ ꀒ ꀓ ꀔ
+ ꀕ ꀖ ꀗ ꀘ ꀙ ꀚ ꀛ ꀜ ꀝ ꀞ ꀟ ꀠ ꀡ ꀢ ꀣ ꀤ ꀥ ꀦ ꀧ ꀨ
+ ꀩ ꀪ ꀫ ꀬ ꀭ ꀮ ꀯ ꀰ ꀱ ꀲ ꀳ ꀴ ꀵ ꀶ ꀷ ꀸ ꀹ ꀺ ꀻ ꀼ
+ ꀽ ꀾ ꀿ ꁀ ꁁ ꁂ ꁃ ꁄ ꁅ ꁆ ꁇ ꁈ ꁉ ꁊ ꁋ ꁌ ꁍ ꁎ ꁏ ꁐ
+ ꁑ ꁒ ꁓ ꁔ ꁕ ꁖ ꁗ ꁘ ꁙ ꁚ ꁛ ꁜ ꁝ ꁞ ꁟ ꁠ ꁡ ꁢ ꁣ ꁤ
+ ꁥ ꁦ ꁧ ꁨ ꁩ ꁪ ꁫ ꁬ ꁭ ꁮ ꁯ ꁰ ꁱ ꁲ ꁳ ꁴ ꁵ ꁶ ꁷ ꁸ
+ ꁹ ꁺ ꁻ ꁼ ꁽ ꁾ ꁿ ꂀ ꂁ ꂂ ꂃ ꂄ ꂅ ꂆ ꂇ ꂈ ꂉ ꂊ ꂋ ꂌ
+ ꂍ ꂎ ꂏ ꂐ ꂑ ꂒ ꂓ ꂔ ꂕ ꂖ ꂗ ꂘ ꂙ ꂚ ꂛ ꂜ ꂝ ꂞ ꂟ ꂠ
+ ꂡ ꂢ ꂣ ꂤ ꂥ ꂦ ꂧ ꂨ ꂩ ꂪ ꂫ ꂬ ꂭ ꂮ ꂯ ꂰ ꂱ ꂲ ꂳ ꂴ
+ ꂵ ꂶ ꂷ ꂸ ꂹ ꂺ ꂻ ꂼ ꂽ ꂾ ꂿ ꃀ ꃁ ꃂ ꃃ ꃄ ꃅ ꃆ ꃇ ꃈ
+ ꃉ ꃊ ꃋ ꃌ ꃍ ꃎ ꃏ ꃐ ꃑ ꃒ ꃓ ꃔ ꃕ ꃖ ꃗ ꃘ ꃙ ꃚ ꃛ ꃜ
+ ꃝ ꃞ ꃟ ꃠ ꃡ ꃢ ꃣ ꃤ ꃥ ꃦ ꃧ ꃨ ꃩ ꃪ ꃫ ꃬ ꃭ ꃮ ꃯ ꃰ
+ ꃱ ꃲ ꃳ ꃴ ꃵ ꃶ ꃷ ꃸ ꃹ ꃺ ꃻ ꃼ ꃽ ꃾ ꃿ ꄀ ꄁ ꄂ ꄃ ꄄ
+ ꄅ ꄆ ꄇ ꄈ ꄉ ꄊ ꄋ ꄌ ꄍ ꄎ ꄏ ꄐ ꄑ ꄒ ꄓ ꄔ ꄕ ꄖ ꄗ ꄘ
+ ꄙ ꄚ ꄛ ꄜ ꄝ ꄞ ꄟ ꄠ ꄡ ꄢ ꄣ ꄤ ꄥ ꄦ ꄧ ꄨ ꄩ ꄪ ꄫ ꄬ
+ ꄭ ꄮ ꄯ ꄰ ꄱ ꄲ ꄳ ꄴ ꄵ ꄶ ꄷ ꄸ ꄹ ꄺ ꄻ ꄼ ꄽ ꄾ ꄿ ꅀ
+ ꅁ ꅂ ꅃ ꅄ ꅅ ꅆ ꅇ ꅈ ꅉ ꅊ ꅋ ꅌ ꅍ ꅎ ꅏ ꅐ ꅑ ꅒ ꅓ ꅔ
+ ꅕ ꅖ ꅗ ꅘ ꅙ ꅚ ꅛ ꅜ ꅝ ꅞ ꅟ ꅠ ꅡ ꅢ ꅣ ꅤ ꅥ ꅦ ꅧ ꅨ
+ ꅩ ꅪ ꅫ ꅬ ꅭ ꅮ ꅯ ꅰ ꅱ ꅲ ꅳ ꅴ ꅵ ꅶ ꅷ ꅸ ꅹ ꅺ ꅻ ꅼ
+ ꅽ ꅾ ꅿ ꆀ ꆁ ꆂ ꆃ ꆄ ꆅ ꆆ ꆇ ꆈ ꆉ ꆊ ꆋ ꆌ ꆍ ꆎ ꆏ ꆐ
+ ꆑ ꆒ ꆓ ꆔ ꆕ ꆖ ꆗ ꆘ ꆙ ꆚ ꆛ ꆜ ꆝ ꆞ ꆟ ꆠ ꆡ ꆢ ꆣ ꆤ
+ ꆥ ꆦ ꆧ ꆨ ꆩ ꆪ ꆫ ꆬ ꆭ ꆮ ꆯ ꆰ ꆱ ꆲ ꆳ ꆴ ꆵ ꆶ ꆷ ꆸ
+ ꆹ ꆺ ꆻ ꆼ ꆽ ꆾ ꆿ ꇀ ꇁ ꇂ ꇃ ꇄ ꇅ ꇆ ꇇ ꇈ ꇉ ꇊ ꇋ ꇌ
+ ꇍ ꇎ ꇏ ꇐ ꇑ ꇒ ꇓ ꇔ ꇕ ꇖ ꇗ ꇘ ꇙ ꇚ ꇛ ꇜ ꇝ ꇞ ꇟ ꇠ
+ ꇡ ꇢ ꇣ ꇤ ꇥ ꇦ ꇧ ꇨ ꇩ ꇪ ꇫ ꇬ ꇭ ꇮ ꇯ ꇰ ꇱ ꇲ ꇳ ꇴ
+ ꇵ ꇶ ꇷ ꇸ ꇹ ꇺ ꇻ ꇼ ꇽ ꇾ ꇿ ꈀ ꈁ ꈂ ꈃ ꈄ ꈅ ꈆ ꈇ ꈈ
+ ꈉ ꈊ ꈋ ꈌ ꈍ ꈎ ꈏ ꈐ ꈑ ꈒ ꈓ ꈔ ꈕ ꈖ ꈗ ꈘ ꈙ ꈚ ꈛ ꈜ
+ ꈝ ꈞ ꈟ ꈠ ꈡ ꈢ ꈣ ꈤ ꈥ ꈦ ꈧ ꈨ ꈩ ꈪ ꈫ ꈬ ꈭ ꈮ ꈯ ꈰ
+ ꈱ ꈲ ꈳ ꈴ ꈵ ꈶ ꈷ ꈸ ꈹ ꈺ ꈻ ꈼ ꈽ ꈾ ꈿ ꉀ ꉁ ꉂ ꉃ ꉄ
+ ꉅ ꉆ ꉇ ꉈ ꉉ ꉊ ꉋ ꉌ ꉍ ꉎ ꉏ ꉐ ꉑ ꉒ ꉓ ꉔ ꉕ ꉖ ꉗ ꉘ
+ ꉙ ꉚ ꉛ ꉜ ꉝ ꉞ ꉟ ꉠ ꉡ ꉢ ꉣ ꉤ ꉥ ꉦ ꉧ ꉨ ꉩ ꉪ ꉫ ꉬ
+ ꉭ ꉮ ꉯ ꉰ ꉱ ꉲ ꉳ ꉴ ꉵ ꉶ ꉷ ꉸ ꉹ ꉺ ꉻ ꉼ ꉽ ꉾ ꉿ ꊀ
+ ꊁ ꊂ ꊃ ꊄ ꊅ ꊆ ꊇ ꊈ ꊉ ꊊ ꊋ ꊌ ꊍ ꊎ ꊏ ꊐ ꊑ ꊒ ꊓ ꊔ
+ ꊕ ꊖ ꊗ ꊘ ꊙ ꊚ ꊛ ꊜ ꊝ ꊞ ꊟ ꊠ ꊡ ꊢ ꊣ ꊤ ꊥ ꊦ ꊧ ꊨ
+ ꊩ ꊪ ꊫ ꊬ ꊭ ꊮ ꊯ ꊰ ꊱ ꊲ ꊳ ꊴ ꊵ ꊶ ꊷ ꊸ ꊹ ꊺ ꊻ ꊼ
+ ꊽ ꊾ ꊿ ꋀ ꋁ ꋂ ꋃ ꋄ ꋅ ꋆ ꋇ ꋈ ꋉ ꋊ ꋋ ꋌ ꋍ ꋎ ꋏ ꋐ
+ ꋑ ꋒ ꋓ ꋔ ꋕ ꋖ ꋗ ꋘ ꋙ ꋚ ꋛ ꋜ ꋝ ꋞ ꋟ ꋠ ꋡ ꋢ ꋣ ꋤ
+ ꋥ ꋦ ꋧ ꋨ ꋩ ꋪ ꋫ ꋬ ꋭ ꋮ ꋯ ꋰ ꋱ ꋲ ꋳ ꋴ ꋵ ꋶ ꋷ ꋸ
+ ꋹ ꋺ ꋻ ꋼ ꋽ ꋾ ꋿ ꌀ ꌁ ꌂ ꌃ ꌄ ꌅ ꌆ ꌇ ꌈ ꌉ ꌊ ꌋ ꌌ
+ ꌍ ꌎ ꌏ ꌐ ꌑ ꌒ ꌓ ꌔ ꌕ ꌖ ꌗ ꌘ ꌙ ꌚ ꌛ ꌜ ꌝ ꌞ ꌟ ꌠ
+ ꌡ ꌢ ꌣ ꌤ ꌥ ꌦ ꌧ ꌨ ꌩ ꌪ ꌫ ꌬ ꌭ ꌮ ꌯ ꌰ ꌱ ꌲ ꌳ ꌴ
+ ꌵ ꌶ ꌷ ꌸ ꌹ ꌺ ꌻ ꌼ ꌽ ꌾ ꌿ ꍀ ꍁ ꍂ ꍃ ꍄ ꍅ ꍆ ꍇ ꍈ
+ ꍉ ꍊ ꍋ ꍌ ꍍ ꍎ ꍏ ꍐ ꍑ ꍒ ꍓ ꍔ ꍕ ꍖ ꍗ ꍘ ꍙ ꍚ ꍛ ꍜ
+ ꍝ ꍞ ꍟ ꍠ ꍡ ꍢ ꍣ ꍤ ꍥ ꍦ ꍧ ꍨ ꍩ ꍪ ꍫ ꍬ ꍭ ꍮ ꍯ ꍰ
+ ꍱ ꍲ ꍳ ꍴ ꍵ ꍶ ꍷ ꍸ ꍹ ꍺ ꍻ ꍼ ꍽ ꍾ ꍿ ꎀ ꎁ ꎂ ꎃ ꎄ
+ ꎅ ꎆ ꎇ ꎈ ꎉ ꎊ ꎋ ꎌ ꎍ ꎎ ꎏ ꎐ ꎑ ꎒ ꎓ ꎔ ꎕ ꎖ ꎗ ꎘ
+ ꎙ ꎚ ꎛ ꎜ ꎝ ꎞ ꎟ ꎠ ꎡ ꎢ ꎣ ꎤ ꎥ ꎦ ꎧ ꎨ ꎩ ꎪ ꎫ ꎬ
+ ꎭ ꎮ ꎯ ꎰ ꎱ ꎲ ꎳ ꎴ ꎵ ꎶ ꎷ ꎸ ꎹ ꎺ ꎻ ꎼ ꎽ ꎾ ꎿ ꏀ
+ ꏁ ꏂ ꏃ ꏄ ꏅ ꏆ ꏇ ꏈ ꏉ ꏊ ꏋ ꏌ ꏍ ꏎ ꏏ ꏐ ꏑ ꏒ ꏓ ꏔ
+ ꏕ ꏖ ꏗ ꏘ ꏙ ꏚ ꏛ ꏜ ꏝ ꏞ ꏟ ꏠ ꏡ ꏢ ꏣ ꏤ ꏥ ꏦ ꏧ ꏨ
+ ꏩ ꏪ ꏫ ꏬ ꏭ ꏮ ꏯ ꏰ ꏱ ꏲ ꏳ ꏴ ꏵ ꏶ ꏷ ꏸ ꏹ ꏺ ꏻ ꏼ
+ ꏽ ꏾ ꏿ ꐀ ꐁ ꐂ ꐃ ꐄ ꐅ ꐆ ꐇ ꐈ ꐉ ꐊ ꐋ ꐌ ꐍ ꐎ ꐏ ꐐ
+ ꐑ ꐒ ꐓ ꐔ ꐕ ꐖ ꐗ ꐘ ꐙ ꐚ ꐛ ꐜ ꐝ ꐞ ꐟ ꐠ ꐡ ꐢ ꐣ ꐤ
+ ꐥ ꐦ ꐧ ꐨ ꐩ ꐪ ꐫ ꐬ ꐭ ꐮ ꐯ ꐰ ꐱ ꐲ ꐳ ꐴ ꐵ ꐶ ꐷ ꐸ
+ ꐹ ꐺ ꐻ ꐼ ꐽ ꐾ ꐿ ꑀ ꑁ ꑂ ꑃ ꑄ ꑅ ꑆ ꑇ ꑈ ꑉ ꑊ ꑋ ꑌ
+ ꑍ ꑎ ꑏ ꑐ ꑑ ꑒ ꑓ ꑔ ꑕ ꑖ ꑗ ꑘ ꑙ ꑚ ꑛ ꑜ ꑝ ꑞ ꑟ ꑠ
+ ꑡ ꑢ ꑣ ꑤ ꑥ ꑦ ꑧ ꑨ ꑩ ꑪ ꑫ ꑬ ꑭ ꑮ ꑯ ꑰ ꑱ ꑲ ꑳ ꑴ
+ ꑵ ꑶ ꑷ ꑸ ꑹ ꑺ ꑻ ꑼ ꑽ ꑾ ꑿ ꒀ ꒁ ꒂ ꒃ ꒄ ꒅ ꒆ ꒇ ꒈ
+ ꒉ ꒊ ꒋ ꒌ ꒍ ꒎ ꒏ ꒐ ꒑ ꒒ ꒓ ꒔ ꒕ ꒖ ꒗ ꒘ ꒙ ꒚ ꒛ ꒜
+ ꒝ ꒞ ꒟ ꒠ ꒡ ꒢ ꒣ ꒤ ꒥ ꒦ ꒧ ꒨ ꒩ ꒪ ꒫ ꒬ ꒭ ꒮ ꒯ ꒰
+ ꒱ ꒲ ꒳ ꒴ ꒵ ꒶ ꒷ ꒸ ꒹ ꒺ ꒻ ꒼ ꒽ ꒾ ꒿ ꓀ ꓁ ꓂ ꓃ ꓄
+ ꓅ ꓆ ꓇ ꓈ ꓉ ꓊ ꓋ ꓌ ꓍ ꓎ ꓏ ꓐ ꓑ ꓒ ꓓ ꓔ ꓕ ꓖ ꓗ ꓘ
+ ꓙ ꓚ ꓛ ꓜ ꓝ ꓞ ꓟ ꓠ ꓡ ꓢ ꓣ ꓤ ꓥ ꓦ ꓧ ꓨ ꓩ ꓪ ꓫ ꓬ
+ ꓭ ꓮ ꓯ ꓰ ꓱ ꓲ ꓳ ꓴ ꓵ ꓶ ꓷ ꓸ ꓹ ꓺ ꓻ ꓼ ꓽ ꓾ ꓿ ꔀ
+ ꔁ ꔂ ꔃ ꔄ ꔅ ꔆ ꔇ ꔈ ꔉ ꔊ ꔋ ꔌ ꔍ ꔎ ꔏ ꔐ ꔑ ꔒ ꔓ ꔔ
+ ꔕ ꔖ ꔗ ꔘ ꔙ ꔚ ꔛ ꔜ ꔝ ꔞ ꔟ ꔠ ꔡ ꔢ ꔣ ꔤ ꔥ ꔦ ꔧ ꔨ
+ ꔩ ꔪ ꔫ ꔬ ꔭ ꔮ ꔯ ꔰ ꔱ ꔲ ꔳ ꔴ ꔵ ꔶ ꔷ ꔸ ꔹ ꔺ ꔻ ꔼ
+ ꔽ ꔾ ꔿ ꕀ ꕁ ꕂ ꕃ ꕄ ꕅ ꕆ ꕇ ꕈ ꕉ ꕊ ꕋ ꕌ ꕍ ꕎ ꕏ ꕐ
+ ꕑ ꕒ ꕓ ꕔ ꕕ ꕖ ꕗ ꕘ ꕙ ꕚ ꕛ ꕜ ꕝ ꕞ ꕟ ꕠ ꕡ ꕢ ꕣ ꕤ
+ ꕥ ꕦ ꕧ ꕨ ꕩ ꕪ ꕫ ꕬ ꕭ ꕮ ꕯ ꕰ ꕱ ꕲ ꕳ ꕴ ꕵ ꕶ ꕷ ꕸ
+ ꕹ ꕺ ꕻ ꕼ ꕽ ꕾ ꕿ ꖀ ꖁ ꖂ ꖃ ꖄ ꖅ ꖆ ꖇ ꖈ ꖉ ꖊ ꖋ ꖌ
+ ꖍ ꖎ ꖏ ꖐ ꖑ ꖒ ꖓ ꖔ ꖕ ꖖ ꖗ ꖘ ꖙ ꖚ ꖛ ꖜ ꖝ ꖞ ꖟ ꖠ
+ ꖡ ꖢ ꖣ ꖤ ꖥ ꖦ ꖧ ꖨ ꖩ ꖪ ꖫ ꖬ ꖭ ꖮ ꖯ ꖰ ꖱ ꖲ ꖳ ꖴ
+ ꖵ ꖶ ꖷ ꖸ ꖹ ꖺ ꖻ ꖼ ꖽ ꖾ ꖿ ꗀ ꗁ ꗂ ꗃ ꗄ ꗅ ꗆ ꗇ ꗈ
+ ꗉ ꗊ ꗋ ꗌ ꗍ ꗎ ꗏ ꗐ ꗑ ꗒ ꗓ ꗔ ꗕ ꗖ ꗗ ꗘ ꗙ ꗚ ꗛ ꗜ
+ ꗝ ꗞ ꗟ ꗠ ꗡ ꗢ ꗣ ꗤ ꗥ ꗦ ꗧ ꗨ ꗩ ꗪ ꗫ ꗬ ꗭ ꗮ ꗯ ꗰ
+ ꗱ ꗲ ꗳ ꗴ ꗵ ꗶ ꗷ ꗸ ꗹ ꗺ ꗻ ꗼ ꗽ ꗾ ꗿ ꘀ ꘁ ꘂ ꘃ ꘄ
+ ꘅ ꘆ ꘇ ꘈ ꘉ ꘊ ꘋ ꘌ ꘍ ꘎ ꘏ ꘐ ꘑ ꘒ ꘓ ꘔ ꘕ ꘖ ꘗ ꘘ
+ ꘙ ꘚ ꘛ ꘜ ꘝ ꘞ ꘟ ꘠ ꘡ ꘢ ꘣ ꘤ ꘥ ꘦ ꘧ ꘨ ꘩ ꘪ ꘫ ꘬
+ ꘭ ꘮ ꘯ ꘰ ꘱ ꘲ ꘳ ꘴ ꘵ ꘶ ꘷ ꘸ ꘹ ꘺ ꘻ ꘼ ꘽ ꘾ ꘿ Ꙁ
+ ꙁ Ꙃ ꙃ Ꙅ ꙅ Ꙇ ꙇ Ꙉ ꙉ Ꙋ ꙋ Ꙍ ꙍ Ꙏ ꙏ Ꙑ ꙑ Ꙓ ꙓ Ꙕ
+ ꙕ Ꙗ ꙗ Ꙙ ꙙ Ꙛ ꙛ Ꙝ ꙝ Ꙟ ꙟ Ꙡ ꙡ Ꙣ ꙣ Ꙥ ꙥ Ꙧ ꙧ Ꙩ
+ ꙩ Ꙫ ꙫ Ꙭ ꙭ ꙮ ꙯ ꙰ ꙱ ꙲ ꙳ ꙴ ꙵ ꙶ ꙷ ꙸ ꙹ ꙺ ꙻ ꙼
+ ꙽ ꙾ ꙿ Ꚁ ꚁ Ꚃ ꚃ Ꚅ ꚅ Ꚇ ꚇ Ꚉ ꚉ Ꚋ ꚋ Ꚍ ꚍ Ꚏ ꚏ Ꚑ
+ ꚑ Ꚓ ꚓ Ꚕ ꚕ Ꚗ ꚗ Ꚙ ꚙ Ꚛ ꚛ ꚜ ꚝ ꚞ ꚟ ꚠ ꚡ ꚢ ꚣ ꚤ
+ ꚥ ꚦ ꚧ ꚨ ꚩ ꚪ ꚫ ꚬ ꚭ ꚮ ꚯ ꚰ ꚱ ꚲ ꚳ ꚴ ꚵ ꚶ ꚷ ꚸ
+ ꚹ ꚺ ꚻ ꚼ ꚽ ꚾ ꚿ ꛀ ꛁ ꛂ ꛃ ꛄ ꛅ ꛆ ꛇ ꛈ ꛉ ꛊ ꛋ ꛌ
+ ꛍ ꛎ ꛏ ꛐ ꛑ ꛒ ꛓ ꛔ ꛕ ꛖ ꛗ ꛘ ꛙ ꛚ ꛛ ꛜ ꛝ ꛞ ꛟ ꛠ
+ ꛡ ꛢ ꛣ ꛤ ꛥ ꛦ ꛧ ꛨ ꛩ ꛪ ꛫ ꛬ ꛭ ꛮ ꛯ ꛰ ꛱ ꛲ ꛳ ꛴
+ ꛵ ꛶ ꛷ ꛸ ꛹ ꛺ ꛻ ꛼ ꛽ ꛾ ꛿ ꜀ ꜁ ꜂ ꜃ ꜄ ꜅ ꜆ ꜇ ꜈
+ ꜉ ꜊ ꜋ ꜌ ꜍ ꜎ ꜏ ꜐ ꜑ ꜒ ꜓ ꜔ ꜕ ꜖ ꜗ ꜘ ꜙ ꜚ ꜛ ꜜ
+ ꜝ ꜞ ꜟ ꜠ ꜡ Ꜣ ꜣ Ꜥ ꜥ Ꜧ ꜧ Ꜩ ꜩ Ꜫ ꜫ Ꜭ ꜭ Ꜯ ꜯ ꜰ
+ ꜱ Ꜳ ꜳ Ꜵ ꜵ Ꜷ ꜷ Ꜹ ꜹ Ꜻ ꜻ Ꜽ ꜽ Ꜿ ꜿ Ꝁ ꝁ Ꝃ ꝃ Ꝅ
+ ꝅ Ꝇ ꝇ Ꝉ ꝉ Ꝋ ꝋ Ꝍ ꝍ Ꝏ ꝏ Ꝑ ꝑ Ꝓ ꝓ Ꝕ ꝕ Ꝗ ꝗ Ꝙ
+ ꝙ Ꝛ ꝛ Ꝝ ꝝ Ꝟ ꝟ Ꝡ ꝡ Ꝣ ꝣ Ꝥ ꝥ Ꝧ ꝧ Ꝩ ꝩ Ꝫ ꝫ Ꝭ
+ ꝭ Ꝯ ꝯ ꝰ ꝱ ꝲ ꝳ ꝴ ꝵ ꝶ ꝷ ꝸ Ꝺ ꝺ Ꝼ ꝼ Ᵹ Ꝿ ꝿ Ꞁ
+ ꞁ Ꞃ ꞃ Ꞅ ꞅ Ꞇ ꞇ ꞈ ꞉ ꞊ Ꞌ ꞌ Ɥ ꞎ ꞏ Ꞑ ꞑ Ꞓ ꞓ ꞔ
+ ꞕ Ꞗ ꞗ Ꞙ ꞙ Ꞛ ꞛ Ꞝ ꞝ Ꞟ ꞟ Ꞡ ꞡ Ꞣ ꞣ Ꞥ ꞥ Ꞧ ꞧ Ꞩ
+ ꞩ Ɦ Ɜ Ɡ Ɬ Ɪ ꞯ Ʞ Ʇ Ʝ Ꭓ Ꞵ ꞵ Ꞷ ꞷ Ꞹ ꞹ Ꞻ ꞻ Ꞽ
+ ꞽ Ꞿ ꞿ Ꟁ ꟁ Ꟃ ꟃ Ꞔ Ʂ Ᶎ Ꟈ ꟈ Ꟊ ꟊ Ɤ Ꟍ ꟍ ꟎ ꟏ Ꟑ
+ ꟑ ꟒ ꟓ ꟔ ꟕ Ꟗ ꟗ Ꟙ ꟙ Ꟛ ꟛ Ƛ ꟝ ꟞ ꟟ ꟠ ꟡ ꟢ ꟣ ꟤
+ ꟥ ꟦ ꟧ ꟨ ꟩ ꟪ ꟫ ꟬ ꟭ ꟮ ꟯ ꟰ ꟱ ꟲ ꟳ ꟴ Ꟶ ꟶ ꟷ ꟸ
+ ꟹ ꟺ ꟻ ꟼ ꟽ ꟾ ꟿ ꠀ ꠁ ꠂ ꠃ ꠄ ꠅ ꠆ ꠇ ꠈ ꠉ ꠊ ꠋ ꠌ
+ ꠍ ꠎ ꠏ ꠐ ꠑ ꠒ ꠓ ꠔ ꠕ ꠖ ꠗ ꠘ ꠙ ꠚ ꠛ ꠜ ꠝ ꠞ ꠟ ꠠ
+ ꠡ ꠢ ꠣ ꠤ ꠥ ꠦ ꠧ ꠨ ꠩ ꠪ ꠫ ꠬ ꠭ ꠮ ꠯ ꠰ ꠱ ꠲ ꠳ ꠴
+ ꠵ ꠶ ꠷ ꠸ ꠹ ꠺ ꠻ ꠼ ꠽ ꠾ ꠿ ꡀ ꡁ ꡂ ꡃ ꡄ ꡅ ꡆ ꡇ ꡈ
+ ꡉ ꡊ ꡋ ꡌ ꡍ ꡎ ꡏ ꡐ ꡑ ꡒ ꡓ ꡔ ꡕ ꡖ ꡗ ꡘ ꡙ ꡚ ꡛ ꡜ
+ ꡝ ꡞ ꡟ ꡠ ꡡ ꡢ ꡣ ꡤ ꡥ ꡦ ꡧ ꡨ ꡩ ꡪ ꡫ ꡬ ꡭ ꡮ ꡯ ꡰ
+ ꡱ ꡲ ꡳ ꡴ ꡵ ꡶ ꡷ ꡸ ꡹ ꡺ ꡻ ꡼ ꡽ ꡾ ꡿ ꢀ ꢁ ꢂ ꢃ ꢄ
+ ꢅ ꢆ ꢇ ꢈ ꢉ ꢊ ꢋ ꢌ ꢍ ꢎ ꢏ ꢐ ꢑ ꢒ ꢓ ꢔ ꢕ ꢖ ꢗ ꢘ
+ ꢙ ꢚ ꢛ ꢜ ꢝ ꢞ ꢟ ꢠ ꢡ ꢢ ꢣ ꢤ ꢥ ꢦ ꢧ ꢨ ꢩ ꢪ ꢫ ꢬ
+ ꢭ ꢮ ꢯ ꢰ ꢱ ꢲ ꢳ ꢴ ꢵ ꢶ ꢷ ꢸ ꢹ ꢺ ꢻ ꢼ ꢽ ꢾ ꢿ ꣀ
+ ꣁ ꣂ ꣃ ꣄ ꣅ ꣆ ꣇ ꣈ ꣉ ꣊ ꣋ ꣌ ꣍ ꣎ ꣏ ꣐ ꣑ ꣒ ꣓ ꣔
+ ꣕ ꣖ ꣗ ꣘ ꣙ ꣚ ꣛ ꣜ ꣝ ꣞ ꣟ ꣠ ꣡ ꣢ ꣣ ꣤ ꣥ ꣦ ꣧ ꣨
+ ꣩ ꣪ ꣫ ꣬ ꣭ ꣮ ꣯ ꣰ ꣱ ꣲ ꣳ ꣴ ꣵ ꣶ ꣷ ꣸ ꣹ ꣺ ꣻ ꣼
+ ꣽ ꣾ ꣿ ꤀ ꤁ ꤂ ꤃ ꤄ ꤅ ꤆ ꤇ ꤈ ꤉ ꤊ ꤋ ꤌ ꤍ ꤎ ꤏ ꤐ
+ ꤑ ꤒ ꤓ ꤔ ꤕ ꤖ ꤗ ꤘ ꤙ ꤚ ꤛ ꤜ ꤝ ꤞ ꤟ ꤠ ꤡ ꤢ ꤣ ꤤ
+ ꤥ ꤦ ꤧ ꤨ ꤩ ꤪ ꤫ ꤬ ꤭ ꤮ ꤯ ꤰ ꤱ ꤲ ꤳ ꤴ ꤵ ꤶ ꤷ ꤸ
+ ꤹ ꤺ ꤻ ꤼ ꤽ ꤾ ꤿ ꥀ ꥁ ꥂ ꥃ ꥄ ꥅ ꥆ ꥇ ꥈ ꥉ ꥊ ꥋ ꥌ
+ ꥍ ꥎ ꥏ ꥐ ꥑ ꥒ ꥓ ꥔ ꥕ ꥖ ꥗ ꥘ ꥙ ꥚ ꥛ ꥜ ꥝ ꥞ ꥟ ꥠ
+ ꥡ ꥢ ꥣ ꥤ ꥥ ꥦ ꥧ ꥨ ꥩ ꥪ ꥫ ꥬ ꥭ ꥮ ꥯ ꥰ ꥱ ꥲ ꥳ ꥴ
+ ꥵ ꥶ ꥷ ꥸ ꥹ ꥺ ꥻ ꥼ ꥽ ꥾ ꥿ ꦀ ꦁ ꦂ ꦃ ꦄ ꦅ ꦆ ꦇ ꦈ
+ ꦉ ꦊ ꦋ ꦌ ꦍ ꦎ ꦏ ꦐ ꦑ ꦒ ꦓ ꦔ ꦕ ꦖ ꦗ ꦘ ꦙ ꦚ ꦛ ꦜ
+ ꦝ ꦞ ꦟ ꦠ ꦡ ꦢ ꦣ ꦤ ꦥ ꦦ ꦧ ꦨ ꦩ ꦪ ꦫ ꦬ ꦭ ꦮ ꦯ ꦰ
+ ꦱ ꦲ ꦳ ꦴ ꦵ ꦶ ꦷ ꦸ ꦹ ꦺ ꦻ ꦼ ꦽ ꦾ ꦿ ꧀ ꧁ ꧂ ꧃ ꧄
+ ꧅ ꧆ ꧇ ꧈ ꧉ ꧊ ꧋ ꧌ ꧍ ꧎ ꧏ ꧐ ꧑ ꧒ ꧓ ꧔ ꧕ ꧖ ꧗ ꧘
+ ꧙ ꧚ ꧛ ꧜ ꧝ ꧞ ꧟ ꧠ ꧡ ꧢ ꧣ ꧤ ꧥ ꧦ ꧧ ꧨ ꧩ ꧪ ꧫ ꧬ
+ ꧭ ꧮ ꧯ ꧰ ꧱ ꧲ ꧳ ꧴ ꧵ ꧶ ꧷ ꧸ ꧹ ꧺ ꧻ ꧼ ꧽ ꧾ ꧿ ꨀ
+ ꨁ ꨂ ꨃ ꨄ ꨅ ꨆ ꨇ ꨈ ꨉ ꨊ ꨋ ꨌ ꨍ ꨎ ꨏ ꨐ ꨑ ꨒ ꨓ ꨔ
+ ꨕ ꨖ ꨗ ꨘ ꨙ ꨚ ꨛ ꨜ ꨝ ꨞ ꨟ ꨠ ꨡ ꨢ ꨣ ꨤ ꨥ ꨦ ꨧ ꨨ
+ ꨩ ꨪ ꨫ ꨬ ꨭ ꨮ ꨯ ꨰ ꨱ ꨲ ꨳ ꨴ ꨵ ꨶ ꨷ ꨸ ꨹ ꨺ ꨻ ꨼
+ ꨽ ꨾ ꨿ ꩀ ꩁ ꩂ ꩃ ꩄ ꩅ ꩆ ꩇ ꩈ ꩉ ꩊ ꩋ ꩌ ꩍ ꩎ ꩏ ꩐
+ ꩑ ꩒ ꩓ ꩔ ꩕ ꩖ ꩗ ꩘ ꩙ ꩚ ꩛ ꩜ ꩝ ꩞ ꩟ ꩠ ꩡ ꩢ ꩣ ꩤ
+ ꩥ ꩦ ꩧ ꩨ ꩩ ꩪ ꩫ ꩬ ꩭ ꩮ ꩯ ꩰ ꩱ ꩲ ꩳ ꩴ ꩵ ꩶ ꩷ ꩸
+ ꩹ ꩺ ꩻ ꩼ ꩽ ꩾ ꩿ ꪀ ꪁ ꪂ ꪃ ꪄ ꪅ ꪆ ꪇ ꪈ ꪉ ꪊ ꪋ ꪌ
+ ꪍ ꪎ ꪏ ꪐ ꪑ ꪒ ꪓ ꪔ ꪕ ꪖ ꪗ ꪘ ꪙ ꪚ ꪛ ꪜ ꪝ ꪞ ꪟ ꪠ
+ ꪡ ꪢ ꪣ ꪤ ꪥ ꪦ ꪧ ꪨ ꪩ ꪪ ꪫ ꪬ ꪭ ꪮ ꪯ ꪰ ꪱ ꪲ ꪳ ꪴ
+ ꪵ ꪶ ꪷ ꪸ ꪹ ꪺ ꪻ ꪼ ꪽ ꪾ ꪿ ꫀ ꫁ ꫂ ꫃ ꫄ ꫅ ꫆ ꫇ ꫈
+ ꫉ ꫊ ꫋ ꫌ ꫍ ꫎ ꫏ ꫐ ꫑ ꫒ ꫓ ꫔ ꫕ ꫖ ꫗ ꫘ ꫙ ꫚ ꫛ ꫜ
+ ꫝ ꫞ ꫟ ꫠ ꫡ ꫢ ꫣ ꫤ ꫥ ꫦ ꫧ ꫨ ꫩ ꫪ ꫫ ꫬ ꫭ ꫮ ꫯ ꫰
+ ꫱ ꫲ ꫳ ꫴ ꫵ ꫶ ꫷ ꫸ ꫹ ꫺ ꫻ ꫼ ꫽ ꫾ ꫿ ꬀ ꬁ ꬂ ꬃ ꬄ
+ ꬅ ꬆ ꬇ ꬈ ꬉ ꬊ ꬋ ꬌ ꬍ ꬎ ꬏ ꬐ ꬑ ꬒ ꬓ ꬔ ꬕ ꬖ ꬗ ꬘
+ ꬙ ꬚ ꬛ ꬜ ꬝ ꬞ ꬟ ꬠ ꬡ ꬢ ꬣ ꬤ ꬥ ꬦ ꬧ ꬨ ꬩ ꬪ ꬫ ꬬ
+ ꬭ ꬮ ꬯ ꬰ ꬱ ꬲ ꬳ ꬴ ꬵ ꬶ ꬷ ꬸ ꬹ ꬺ ꬻ ꬼ ꬽ ꬾ ꬿ ꭀ
+ ꭁ ꭂ ꭃ ꭄ ꭅ ꭆ ꭇ ꭈ ꭉ ꭊ ꭋ ꭌ ꭍ ꭎ ꭏ ꭐ ꭑ ꭒ ꭓ ꭔ
+ ꭕ ꭖ ꭗ ꭘ ꭙ ꭚ ꭛ ꭜ ꭝ ꭞ ꭟ ꭠ ꭡ ꭢ ꭣ ꭤ ꭥ ꭦ ꭧ ꭨ
+ ꭩ ꭪ ꭫ ꭬ ꭭ ꭮ ꭯ ꭰ ꭱ ꭲ ꭳ ꭴ ꭵ ꭶ ꭷ ꭸ ꭹ ꭺ ꭻ ꭼ
+ ꭽ ꭾ ꭿ ꮀ ꮁ ꮂ ꮃ ꮄ ꮅ ꮆ ꮇ ꮈ ꮉ ꮊ ꮋ ꮌ ꮍ ꮎ ꮏ ꮐ
+ ꮑ ꮒ ꮓ ꮔ ꮕ ꮖ ꮗ ꮘ ꮙ ꮚ ꮛ ꮜ ꮝ ꮞ ꮟ ꮠ ꮡ ꮢ ꮣ ꮤ
+ ꮥ ꮦ ꮧ ꮨ ꮩ ꮪ ꮫ ꮬ ꮭ ꮮ ꮯ ꮰ ꮱ ꮲ ꮳ ꮴ ꮵ ꮶ ꮷ ꮸ
+ ꮹ ꮺ ꮻ ꮼ ꮽ ꮾ ꮿ ꯀ ꯁ ꯂ ꯃ ꯄ ꯅ ꯆ ꯇ ꯈ ꯉ ꯊ ꯋ ꯌ
+ ꯍ ꯎ ꯏ ꯐ ꯑ ꯒ ꯓ ꯔ ꯕ ꯖ ꯗ ꯘ ꯙ ꯚ ꯛ ꯜ ꯝ ꯞ ꯟ ꯠ
+ ꯡ ꯢ ꯣ ꯤ ꯥ ꯦ ꯧ ꯨ ꯩ ꯪ ꯫ ꯬ ꯭ ꯮ ꯯ ꯰ ꯱ ꯲ ꯳ ꯴
+ ꯵ ꯶ ꯷ ꯸ ꯹ ꯺ ꯻ ꯼ ꯽ ꯾ ꯿ 가 각 갂 갃 간 갅 갆 갇 갈
+ 갉 갊 갋 갌 갍 갎 갏 감 갑 값 갓 갔 강 갖 갗 갘 같 갚 갛 개
+ 객 갞 갟 갠 갡 갢 갣 갤 갥 갦 갧 갨 갩 갪 갫 갬 갭 갮 갯 갰
+ 갱 갲 갳 갴 갵 갶 갷 갸 갹 갺 갻 갼 갽 갾 갿 걀 걁 걂 걃 걄
+ 걅 걆 걇 걈 걉 걊 걋 걌 걍 걎 걏 걐 걑 걒 걓 걔 걕 걖 걗 걘
+ 걙 걚 걛 걜 걝 걞 걟 걠 걡 걢 걣 걤 걥 걦 걧 걨 걩 걪 걫 걬
+ 걭 걮 걯 거 걱 걲 걳 건 걵 걶 걷 걸 걹 걺 걻 걼 걽 걾 걿 검
+ 겁 겂 것 겄 겅 겆 겇 겈 겉 겊 겋 게 겍 겎 겏 겐 겑 겒 겓 겔
+ 겕 겖 겗 겘 겙 겚 겛 겜 겝 겞 겟 겠 겡 겢 겣 겤 겥 겦 겧 겨
+ 격 겪 겫 견 겭 겮 겯 결 겱 겲 겳 겴 겵 겶 겷 겸 겹 겺 겻 겼
+ 경 겾 겿 곀 곁 곂 곃 계 곅 곆 곇 곈 곉 곊 곋 곌 곍 곎 곏 곐
+ 곑 곒 곓 곔 곕 곖 곗 곘 곙 곚 곛 곜 곝 곞 곟 고 곡 곢 곣 곤
+ 곥 곦 곧 골 곩 곪 곫 곬 곭 곮 곯 곰 곱 곲 곳 곴 공 곶 곷 곸
+ 곹 곺 곻 과 곽 곾 곿 관 괁 괂 괃 괄 괅 괆 괇 괈 괉 괊 괋 괌
+ 괍 괎 괏 괐 광 괒 괓 괔 괕 괖 괗 괘 괙 괚 괛 괜 괝 괞 괟 괠
+ 괡 괢 괣 괤 괥 괦 괧 괨 괩 괪 괫 괬 괭 괮 괯 괰 괱 괲 괳 괴
+ 괵 괶 괷 괸 괹 괺 괻 괼 괽 괾 괿 굀 굁 굂 굃 굄 굅 굆 굇 굈
+ 굉 굊 굋 굌 굍 굎 굏 교 굑 굒 굓 굔 굕 굖 굗 굘 굙 굚 굛 굜
+ 굝 굞 굟 굠 굡 굢 굣 굤 굥 굦 굧 굨 굩 굪 굫 구 국 굮 굯 군
+ 굱 굲 굳 굴 굵 굶 굷 굸 굹 굺 굻 굼 굽 굾 굿 궀 궁 궂 궃 궄
+ 궅 궆 궇 궈 궉 궊 궋 권 궍 궎 궏 궐 궑 궒 궓 궔 궕 궖 궗 궘
+ 궙 궚 궛 궜 궝 궞 궟 궠 궡 궢 궣 궤 궥 궦 궧 궨 궩 궪 궫 궬
+ 궭 궮 궯 궰 궱 궲 궳 궴 궵 궶 궷 궸 궹 궺 궻 궼 궽 궾 궿 귀
+ 귁 귂 귃 귄 귅 귆 귇 귈 귉 귊 귋 귌 귍 귎 귏 귐 귑 귒 귓 귔
+ 귕 귖 귗 귘 귙 귚 귛 규 귝 귞 귟 균 귡 귢 귣 귤 귥 귦 귧 귨
+ 귩 귪 귫 귬 귭 귮 귯 귰 귱 귲 귳 귴 귵 귶 귷 그 극 귺 귻 근
+ 귽 귾 귿 글 긁 긂 긃 긄 긅 긆 긇 금 급 긊 긋 긌 긍 긎 긏 긐
+ 긑 긒 긓 긔 긕 긖 긗 긘 긙 긚 긛 긜 긝 긞 긟 긠 긡 긢 긣 긤
+ 긥 긦 긧 긨 긩 긪 긫 긬 긭 긮 긯 기 긱 긲 긳 긴 긵 긶 긷 길
+ 긹 긺 긻 긼 긽 긾 긿 김 깁 깂 깃 깄 깅 깆 깇 깈 깉 깊 깋 까
+ 깍 깎 깏 깐 깑 깒 깓 깔 깕 깖 깗 깘 깙 깚 깛 깜 깝 깞 깟 깠
+ 깡 깢 깣 깤 깥 깦 깧 깨 깩 깪 깫 깬 깭 깮 깯 깰 깱 깲 깳 깴
+ 깵 깶 깷 깸 깹 깺 깻 깼 깽 깾 깿 꺀 꺁 꺂 꺃 꺄 꺅 꺆 꺇 꺈
+ 꺉 꺊 꺋 꺌 꺍 꺎 꺏 꺐 꺑 꺒 꺓 꺔 꺕 꺖 꺗 꺘 꺙 꺚 꺛 꺜
+ 꺝 꺞 꺟 꺠 꺡 꺢 꺣 꺤 꺥 꺦 꺧 꺨 꺩 꺪 꺫 꺬 꺭 꺮 꺯 꺰
+ 꺱 꺲 꺳 꺴 꺵 꺶 꺷 꺸 꺹 꺺 꺻 꺼 꺽 꺾 꺿 껀 껁 껂 껃 껄
+ 껅 껆 껇 껈 껉 껊 껋 껌 껍 껎 껏 껐 껑 껒 껓 껔 껕 껖 껗 께
+ 껙 껚 껛 껜 껝 껞 껟 껠 껡 껢 껣 껤 껥 껦 껧 껨 껩 껪 껫 껬
+ 껭 껮 껯 껰 껱 껲 껳 껴 껵 껶 껷 껸 껹 껺 껻 껼 껽 껾 껿 꼀
+ 꼁 꼂 꼃 꼄 꼅 꼆 꼇 꼈 꼉 꼊 꼋 꼌 꼍 꼎 꼏 꼐 꼑 꼒 꼓 꼔
+ 꼕 꼖 꼗 꼘 꼙 꼚 꼛 꼜 꼝 꼞 꼟 꼠 꼡 꼢 꼣 꼤 꼥 꼦 꼧 꼨
+ 꼩 꼪 꼫 꼬 꼭 꼮 꼯 꼰 꼱 꼲 꼳 꼴 꼵 꼶 꼷 꼸 꼹 꼺 꼻 꼼
+ 꼽 꼾 꼿 꽀 꽁 꽂 꽃 꽄 꽅 꽆 꽇 꽈 꽉 꽊 꽋 꽌 꽍 꽎 꽏 꽐
+ 꽑 꽒 꽓 꽔 꽕 꽖 꽗 꽘 꽙 꽚 꽛 꽜 꽝 꽞 꽟 꽠 꽡 꽢 꽣 꽤
+ 꽥 꽦 꽧 꽨 꽩 꽪 꽫 꽬 꽭 꽮 꽯 꽰 꽱 꽲 꽳 꽴 꽵 꽶 꽷 꽸
+ 꽹 꽺 꽻 꽼 꽽 꽾 꽿 꾀 꾁 꾂 꾃 꾄 꾅 꾆 꾇 꾈 꾉 꾊 꾋 꾌
+ 꾍 꾎 꾏 꾐 꾑 꾒 꾓 꾔 꾕 꾖 꾗 꾘 꾙 꾚 꾛 꾜 꾝 꾞 꾟 꾠
+ 꾡 꾢 꾣 꾤 꾥 꾦 꾧 꾨 꾩 꾪 꾫 꾬 꾭 꾮 꾯 꾰 꾱 꾲 꾳 꾴
+ 꾵 꾶 꾷 꾸 꾹 꾺 꾻 꾼 꾽 꾾 꾿 꿀 꿁 꿂 꿃 꿄 꿅 꿆 꿇 꿈
+ 꿉 꿊 꿋 꿌 꿍 꿎 꿏 꿐 꿑 꿒 꿓 꿔 꿕 꿖 꿗 꿘 꿙 꿚 꿛 꿜
+ 꿝 꿞 꿟 꿠 꿡 꿢 꿣 꿤 꿥 꿦 꿧 꿨 꿩 꿪 꿫 꿬 꿭 꿮 꿯 꿰
+ 꿱 꿲 꿳 꿴 꿵 꿶 꿷 꿸 꿹 꿺 꿻 꿼 꿽 꿾 꿿 뀀 뀁 뀂 뀃 뀄
+ 뀅 뀆 뀇 뀈 뀉 뀊 뀋 뀌 뀍 뀎 뀏 뀐 뀑 뀒 뀓 뀔 뀕 뀖 뀗 뀘
+ 뀙 뀚 뀛 뀜 뀝 뀞 뀟 뀠 뀡 뀢 뀣 뀤 뀥 뀦 뀧 뀨 뀩 뀪 뀫 뀬
+ 뀭 뀮 뀯 뀰 뀱 뀲 뀳 뀴 뀵 뀶 뀷 뀸 뀹 뀺 뀻 뀼 뀽 뀾 뀿 끀
+ 끁 끂 끃 끄 끅 끆 끇 끈 끉 끊 끋 끌 끍 끎 끏 끐 끑 끒 끓 끔
+ 끕 끖 끗 끘 끙 끚 끛 끜 끝 끞 끟 끠 끡 끢 끣 끤 끥 끦 끧 끨
+ 끩 끪 끫 끬 끭 끮 끯 끰 끱 끲 끳 끴 끵 끶 끷 끸 끹 끺 끻 끼
+ 끽 끾 끿 낀 낁 낂 낃 낄 낅 낆 낇 낈 낉 낊 낋 낌 낍 낎 낏 낐
+ 낑 낒 낓 낔 낕 낖 낗 나 낙 낚 낛 난 낝 낞 낟 날 낡 낢 낣 낤
+ 낥 낦 낧 남 납 낪 낫 났 낭 낮 낯 낰 낱 낲 낳 내 낵 낶 낷 낸
+ 낹 낺 낻 낼 낽 낾 낿 냀 냁 냂 냃 냄 냅 냆 냇 냈 냉 냊 냋 냌
+ 냍 냎 냏 냐 냑 냒 냓 냔 냕 냖 냗 냘 냙 냚 냛 냜 냝 냞 냟 냠
+ 냡 냢 냣 냤 냥 냦 냧 냨 냩 냪 냫 냬 냭 냮 냯 냰 냱 냲 냳 냴
+ 냵 냶 냷 냸 냹 냺 냻 냼 냽 냾 냿 넀 넁 넂 넃 넄 넅 넆 넇 너
+ 넉 넊 넋 넌 넍 넎 넏 널 넑 넒 넓 넔 넕 넖 넗 넘 넙 넚 넛 넜
+ 넝 넞 넟 넠 넡 넢 넣 네 넥 넦 넧 넨 넩 넪 넫 넬 넭 넮 넯 넰
+ 넱 넲 넳 넴 넵 넶 넷 넸 넹 넺 넻 넼 넽 넾 넿 녀 녁 녂 녃 년
+ 녅 녆 녇 녈 녉 녊 녋 녌 녍 녎 녏 념 녑 녒 녓 녔 녕 녖 녗 녘
+ 녙 녚 녛 녜 녝 녞 녟 녠 녡 녢 녣 녤 녥 녦 녧 녨 녩 녪 녫 녬
+ 녭 녮 녯 녰 녱 녲 녳 녴 녵 녶 녷 노 녹 녺 녻 논 녽 녾 녿 놀
+ 놁 놂 놃 놄 놅 놆 놇 놈 놉 놊 놋 놌 농 놎 놏 놐 놑 높 놓 놔
+ 놕 놖 놗 놘 놙 놚 놛 놜 놝 놞 놟 놠 놡 놢 놣 놤 놥 놦 놧 놨
+ 놩 놪 놫 놬 놭 놮 놯 놰 놱 놲 놳 놴 놵 놶 놷 놸 놹 놺 놻 놼
+ 놽 놾 놿 뇀 뇁 뇂 뇃 뇄 뇅 뇆 뇇 뇈 뇉 뇊 뇋 뇌 뇍 뇎 뇏 뇐
+ 뇑 뇒 뇓 뇔 뇕 뇖 뇗 뇘 뇙 뇚 뇛 뇜 뇝 뇞 뇟 뇠 뇡 뇢 뇣 뇤
+ 뇥 뇦 뇧 뇨 뇩 뇪 뇫 뇬 뇭 뇮 뇯 뇰 뇱 뇲 뇳 뇴 뇵 뇶 뇷 뇸
+ 뇹 뇺 뇻 뇼 뇽 뇾 뇿 눀 눁 눂 눃 누 눅 눆 눇 눈 눉 눊 눋 눌
+ 눍 눎 눏 눐 눑 눒 눓 눔 눕 눖 눗 눘 눙 눚 눛 눜 눝 눞 눟 눠
+ 눡 눢 눣 눤 눥 눦 눧 눨 눩 눪 눫 눬 눭 눮 눯 눰 눱 눲 눳 눴
+ 눵 눶 눷 눸 눹 눺 눻 눼 눽 눾 눿 뉀 뉁 뉂 뉃 뉄 뉅 뉆 뉇 뉈
+ 뉉 뉊 뉋 뉌 뉍 뉎 뉏 뉐 뉑 뉒 뉓 뉔 뉕 뉖 뉗 뉘 뉙 뉚 뉛 뉜
+ 뉝 뉞 뉟 뉠 뉡 뉢 뉣 뉤 뉥 뉦 뉧 뉨 뉩 뉪 뉫 뉬 뉭 뉮 뉯 뉰
+ 뉱 뉲 뉳 뉴 뉵 뉶 뉷 뉸 뉹 뉺 뉻 뉼 뉽 뉾 뉿 늀 늁 늂 늃 늄
+ 늅 늆 늇 늈 늉 늊 늋 늌 늍 늎 늏 느 늑 늒 늓 는 늕 늖 늗 늘
+ 늙 늚 늛 늜 늝 늞 늟 늠 늡 늢 늣 늤 능 늦 늧 늨 늩 늪 늫 늬
+ 늭 늮 늯 늰 늱 늲 늳 늴 늵 늶 늷 늸 늹 늺 늻 늼 늽 늾 늿 닀
+ 닁 닂 닃 닄 닅 닆 닇 니 닉 닊 닋 닌 닍 닎 닏 닐 닑 닒 닓 닔
+ 닕 닖 닗 님 닙 닚 닛 닜 닝 닞 닟 닠 닡 닢 닣 다 닥 닦 닧 단
+ 닩 닪 닫 달 닭 닮 닯 닰 닱 닲 닳 담 답 닶 닷 닸 당 닺 닻 닼
+ 닽 닾 닿 대 댁 댂 댃 댄 댅 댆 댇 댈 댉 댊 댋 댌 댍 댎 댏 댐
+ 댑 댒 댓 댔 댕 댖 댗 댘 댙 댚 댛 댜 댝 댞 댟 댠 댡 댢 댣 댤
+ 댥 댦 댧 댨 댩 댪 댫 댬 댭 댮 댯 댰 댱 댲 댳 댴 댵 댶 댷 댸
+ 댹 댺 댻 댼 댽 댾 댿 덀 덁 덂 덃 덄 덅 덆 덇 덈 덉 덊 덋 덌
+ 덍 덎 덏 덐 덑 덒 덓 더 덕 덖 덗 던 덙 덚 덛 덜 덝 덞 덟 덠
+ 덡 덢 덣 덤 덥 덦 덧 덨 덩 덪 덫 덬 덭 덮 덯 데 덱 덲 덳 덴
+ 덵 덶 덷 델 덹 덺 덻 덼 덽 덾 덿 뎀 뎁 뎂 뎃 뎄 뎅 뎆 뎇 뎈
+ 뎉 뎊 뎋 뎌 뎍 뎎 뎏 뎐 뎑 뎒 뎓 뎔 뎕 뎖 뎗 뎘 뎙 뎚 뎛 뎜
+ 뎝 뎞 뎟 뎠 뎡 뎢 뎣 뎤 뎥 뎦 뎧 뎨 뎩 뎪 뎫 뎬 뎭 뎮 뎯 뎰
+ 뎱 뎲 뎳 뎴 뎵 뎶 뎷 뎸 뎹 뎺 뎻 뎼 뎽 뎾 뎿 돀 돁 돂 돃 도
+ 독 돆 돇 돈 돉 돊 돋 돌 돍 돎 돏 돐 돑 돒 돓 돔 돕 돖 돗 돘
+ 동 돚 돛 돜 돝 돞 돟 돠 돡 돢 돣 돤 돥 돦 돧 돨 돩 돪 돫 돬
+ 돭 돮 돯 돰 돱 돲 돳 돴 돵 돶 돷 돸 돹 돺 돻 돼 돽 돾 돿 됀
+ 됁 됂 됃 됄 됅 됆 됇 됈 됉 됊 됋 됌 됍 됎 됏 됐 됑 됒 됓 됔
+ 됕 됖 됗 되 됙 됚 됛 된 됝 됞 됟 될 됡 됢 됣 됤 됥 됦 됧 됨
+ 됩 됪 됫 됬 됭 됮 됯 됰 됱 됲 됳 됴 됵 됶 됷 됸 됹 됺 됻 됼
+ 됽 됾 됿 둀 둁 둂 둃 둄 둅 둆 둇 둈 둉 둊 둋 둌 둍 둎 둏 두
+ 둑 둒 둓 둔 둕 둖 둗 둘 둙 둚 둛 둜 둝 둞 둟 둠 둡 둢 둣 둤
+ 둥 둦 둧 둨 둩 둪 둫 둬 둭 둮 둯 둰 둱 둲 둳 둴 둵 둶 둷 둸
+ 둹 둺 둻 둼 둽 둾 둿 뒀 뒁 뒂 뒃 뒄 뒅 뒆 뒇 뒈 뒉 뒊 뒋 뒌
+ 뒍 뒎 뒏 뒐 뒑 뒒 뒓 뒔 뒕 뒖 뒗 뒘 뒙 뒚 뒛 뒜 뒝 뒞 뒟 뒠
+ 뒡 뒢 뒣 뒤 뒥 뒦 뒧 뒨 뒩 뒪 뒫 뒬 뒭 뒮 뒯 뒰 뒱 뒲 뒳 뒴
+ 뒵 뒶 뒷 뒸 뒹 뒺 뒻 뒼 뒽 뒾 뒿 듀 듁 듂 듃 듄 듅 듆 듇 듈
+ 듉 듊 듋 듌 듍 듎 듏 듐 듑 듒 듓 듔 듕 듖 듗 듘 듙 듚 듛 드
+ 득 듞 듟 든 듡 듢 듣 들 듥 듦 듧 듨 듩 듪 듫 듬 듭 듮 듯 듰
+ 등 듲 듳 듴 듵 듶 듷 듸 듹 듺 듻 듼 듽 듾 듿 딀 딁 딂 딃 딄
+ 딅 딆 딇 딈 딉 딊 딋 딌 딍 딎 딏 딐 딑 딒 딓 디 딕 딖 딗 딘
+ 딙 딚 딛 딜 딝 딞 딟 딠 딡 딢 딣 딤 딥 딦 딧 딨 딩 딪 딫 딬
+ 딭 딮 딯 따 딱 딲 딳 딴 딵 딶 딷 딸 딹 딺 딻 딼 딽 딾 딿 땀
+ 땁 땂 땃 땄 땅 땆 땇 땈 땉 땊 땋 때 땍 땎 땏 땐 땑 땒 땓 땔
+ 땕 땖 땗 땘 땙 땚 땛 땜 땝 땞 땟 땠 땡 땢 땣 땤 땥 땦 땧 땨
+ 땩 땪 땫 땬 땭 땮 땯 땰 땱 땲 땳 땴 땵 땶 땷 땸 땹 땺 땻 땼
+ 땽 땾 땿 떀 떁 떂 떃 떄 떅 떆 떇 떈 떉 떊 떋 떌 떍 떎 떏 떐
+ 떑 떒 떓 떔 떕 떖 떗 떘 떙 떚 떛 떜 떝 떞 떟 떠 떡 떢 떣 떤
+ 떥 떦 떧 떨 떩 떪 떫 떬 떭 떮 떯 떰 떱 떲 떳 떴 떵 떶 떷 떸
+ 떹 떺 떻 떼 떽 떾 떿 뗀 뗁 뗂 뗃 뗄 뗅 뗆 뗇 뗈 뗉 뗊 뗋 뗌
+ 뗍 뗎 뗏 뗐 뗑 뗒 뗓 뗔 뗕 뗖 뗗 뗘 뗙 뗚 뗛 뗜 뗝 뗞 뗟 뗠
+ 뗡 뗢 뗣 뗤 뗥 뗦 뗧 뗨 뗩 뗪 뗫 뗬 뗭 뗮 뗯 뗰 뗱 뗲 뗳 뗴
+ 뗵 뗶 뗷 뗸 뗹 뗺 뗻 뗼 뗽 뗾 뗿 똀 똁 똂 똃 똄 똅 똆 똇 똈
+ 똉 똊 똋 똌 똍 똎 똏 또 똑 똒 똓 똔 똕 똖 똗 똘 똙 똚 똛 똜
+ 똝 똞 똟 똠 똡 똢 똣 똤 똥 똦 똧 똨 똩 똪 똫 똬 똭 똮 똯 똰
+ 똱 똲 똳 똴 똵 똶 똷 똸 똹 똺 똻 똼 똽 똾 똿 뙀 뙁 뙂 뙃 뙄
+ 뙅 뙆 뙇 뙈 뙉 뙊 뙋 뙌 뙍 뙎 뙏 뙐 뙑 뙒 뙓 뙔 뙕 뙖 뙗 뙘
+ 뙙 뙚 뙛 뙜 뙝 뙞 뙟 뙠 뙡 뙢 뙣 뙤 뙥 뙦 뙧 뙨 뙩 뙪 뙫 뙬
+ 뙭 뙮 뙯 뙰 뙱 뙲 뙳 뙴 뙵 뙶 뙷 뙸 뙹 뙺 뙻 뙼 뙽 뙾 뙿 뚀
+ 뚁 뚂 뚃 뚄 뚅 뚆 뚇 뚈 뚉 뚊 뚋 뚌 뚍 뚎 뚏 뚐 뚑 뚒 뚓 뚔
+ 뚕 뚖 뚗 뚘 뚙 뚚 뚛 뚜 뚝 뚞 뚟 뚠 뚡 뚢 뚣 뚤 뚥 뚦 뚧 뚨
+ 뚩 뚪 뚫 뚬 뚭 뚮 뚯 뚰 뚱 뚲 뚳 뚴 뚵 뚶 뚷 뚸 뚹 뚺 뚻 뚼
+ 뚽 뚾 뚿 뛀 뛁 뛂 뛃 뛄 뛅 뛆 뛇 뛈 뛉 뛊 뛋 뛌 뛍 뛎 뛏 뛐
+ 뛑 뛒 뛓 뛔 뛕 뛖 뛗 뛘 뛙 뛚 뛛 뛜 뛝 뛞 뛟 뛠 뛡 뛢 뛣 뛤
+ 뛥 뛦 뛧 뛨 뛩 뛪 뛫 뛬 뛭 뛮 뛯 뛰 뛱 뛲 뛳 뛴 뛵 뛶 뛷 뛸
+ 뛹 뛺 뛻 뛼 뛽 뛾 뛿 뜀 뜁 뜂 뜃 뜄 뜅 뜆 뜇 뜈 뜉 뜊 뜋 뜌
+ 뜍 뜎 뜏 뜐 뜑 뜒 뜓 뜔 뜕 뜖 뜗 뜘 뜙 뜚 뜛 뜜 뜝 뜞 뜟 뜠
+ 뜡 뜢 뜣 뜤 뜥 뜦 뜧 뜨 뜩 뜪 뜫 뜬 뜭 뜮 뜯 뜰 뜱 뜲 뜳 뜴
+ 뜵 뜶 뜷 뜸 뜹 뜺 뜻 뜼 뜽 뜾 뜿 띀 띁 띂 띃 띄 띅 띆 띇 띈
+ 띉 띊 띋 띌 띍 띎 띏 띐 띑 띒 띓 띔 띕 띖 띗 띘 띙 띚 띛 띜
+ 띝 띞 띟 띠 띡 띢 띣 띤 띥 띦 띧 띨 띩 띪 띫 띬 띭 띮 띯 띰
+ 띱 띲 띳 띴 띵 띶 띷 띸 띹 띺 띻 라 락 띾 띿 란 랁 랂 랃 랄
+ 랅 랆 랇 랈 랉 랊 랋 람 랍 랎 랏 랐 랑 랒 랓 랔 랕 랖 랗 래
+ 랙 랚 랛 랜 랝 랞 랟 랠 랡 랢 랣 랤 랥 랦 랧 램 랩 랪 랫 랬
+ 랭 랮 랯 랰 랱 랲 랳 랴 략 랶 랷 랸 랹 랺 랻 랼 랽 랾 랿 럀
+ 럁 럂 럃 럄 럅 럆 럇 럈 량 럊 럋 럌 럍 럎 럏 럐 럑 럒 럓 럔
+ 럕 럖 럗 럘 럙 럚 럛 럜 럝 럞 럟 럠 럡 럢 럣 럤 럥 럦 럧 럨
+ 럩 럪 럫 러 럭 럮 럯 런 럱 럲 럳 럴 럵 럶 럷 럸 럹 럺 럻 럼
+ 럽 럾 럿 렀 렁 렂 렃 렄 렅 렆 렇 레 렉 렊 렋 렌 렍 렎 렏 렐
+ 렑 렒 렓 렔 렕 렖 렗 렘 렙 렚 렛 렜 렝 렞 렟 렠 렡 렢 렣 려
+ 력 렦 렧 련 렩 렪 렫 렬 렭 렮 렯 렰 렱 렲 렳 렴 렵 렶 렷 렸
+ 령 렺 렻 렼 렽 렾 렿 례 롁 롂 롃 롄 롅 롆 롇 롈 롉 롊 롋 롌
+ 롍 롎 롏 롐 롑 롒 롓 롔 롕 롖 롗 롘 롙 롚 롛 로 록 롞 롟 론
+ 롡 롢 롣 롤 롥 롦 롧 롨 롩 롪 롫 롬 롭 롮 롯 롰 롱 롲 롳 롴
+ 롵 롶 롷 롸 롹 롺 롻 롼 롽 롾 롿 뢀 뢁 뢂 뢃 뢄 뢅 뢆 뢇 뢈
+ 뢉 뢊 뢋 뢌 뢍 뢎 뢏 뢐 뢑 뢒 뢓 뢔 뢕 뢖 뢗 뢘 뢙 뢚 뢛 뢜
+ 뢝 뢞 뢟 뢠 뢡 뢢 뢣 뢤 뢥 뢦 뢧 뢨 뢩 뢪 뢫 뢬 뢭 뢮 뢯 뢰
+ 뢱 뢲 뢳 뢴 뢵 뢶 뢷 뢸 뢹 뢺 뢻 뢼 뢽 뢾 뢿 룀 룁 룂 룃 룄
+ 룅 룆 룇 룈 룉 룊 룋 료 룍 룎 룏 룐 룑 룒 룓 룔 룕 룖 룗 룘
+ 룙 룚 룛 룜 룝 룞 룟 룠 룡 룢 룣 룤 룥 룦 룧 루 룩 룪 룫 룬
+ 룭 룮 룯 룰 룱 룲 룳 룴 룵 룶 룷 룸 룹 룺 룻 룼 룽 룾 룿 뤀
+ 뤁 뤂 뤃 뤄 뤅 뤆 뤇 뤈 뤉 뤊 뤋 뤌 뤍 뤎 뤏 뤐 뤑 뤒 뤓 뤔
+ 뤕 뤖 뤗 뤘 뤙 뤚 뤛 뤜 뤝 뤞 뤟 뤠 뤡 뤢 뤣 뤤 뤥 뤦 뤧 뤨
+ 뤩 뤪 뤫 뤬 뤭 뤮 뤯 뤰 뤱 뤲 뤳 뤴 뤵 뤶 뤷 뤸 뤹 뤺 뤻 뤼
+ 뤽 뤾 뤿 륀 륁 륂 륃 륄 륅 륆 륇 륈 륉 륊 륋 륌 륍 륎 륏 륐
+ 륑 륒 륓 륔 륕 륖 륗 류 륙 륚 륛 륜 륝 륞 륟 률 륡 륢 륣 륤
+ 륥 륦 륧 륨 륩 륪 륫 륬 륭 륮 륯 륰 륱 륲 륳 르 륵 륶 륷 른
+ 륹 륺 륻 를 륽 륾 륿 릀 릁 릂 릃 름 릅 릆 릇 릈 릉 릊 릋 릌
+ 릍 릎 릏 릐 릑 릒 릓 릔 릕 릖 릗 릘 릙 릚 릛 릜 릝 릞 릟 릠
+ 릡 릢 릣 릤 릥 릦 릧 릨 릩 릪 릫 리 릭 릮 릯 린 릱 릲 릳 릴
+ 릵 릶 릷 릸 릹 릺 릻 림 립 릾 릿 맀 링 맂 맃 맄 맅 맆 맇 마
+ 막 맊 맋 만 맍 많 맏 말 맑 맒 맓 맔 맕 맖 맗 맘 맙 맚 맛 맜
+ 망 맞 맟 맠 맡 맢 맣 매 맥 맦 맧 맨 맩 맪 맫 맬 맭 맮 맯 맰
+ 맱 맲 맳 맴 맵 맶 맷 맸 맹 맺 맻 맼 맽 맾 맿 먀 먁 먂 먃 먄
+ 먅 먆 먇 먈 먉 먊 먋 먌 먍 먎 먏 먐 먑 먒 먓 먔 먕 먖 먗 먘
+ 먙 먚 먛 먜 먝 먞 먟 먠 먡 먢 먣 먤 먥 먦 먧 먨 먩 먪 먫 먬
+ 먭 먮 먯 먰 먱 먲 먳 먴 먵 먶 먷 머 먹 먺 먻 먼 먽 먾 먿 멀
+ 멁 멂 멃 멄 멅 멆 멇 멈 멉 멊 멋 멌 멍 멎 멏 멐 멑 멒 멓 메
+ 멕 멖 멗 멘 멙 멚 멛 멜 멝 멞 멟 멠 멡 멢 멣 멤 멥 멦 멧 멨
+ 멩 멪 멫 멬 멭 멮 멯 며 멱 멲 멳 면 멵 멶 멷 멸 멹 멺 멻 멼
+ 멽 멾 멿 몀 몁 몂 몃 몄 명 몆 몇 몈 몉 몊 몋 몌 몍 몎 몏 몐
+ 몑 몒 몓 몔 몕 몖 몗 몘 몙 몚 몛 몜 몝 몞 몟 몠 몡 몢 몣 몤
+ 몥 몦 몧 모 목 몪 몫 몬 몭 몮 몯 몰 몱 몲 몳 몴 몵 몶 몷 몸
+ 몹 몺 못 몼 몽 몾 몿 뫀 뫁 뫂 뫃 뫄 뫅 뫆 뫇 뫈 뫉 뫊 뫋 뫌
+ 뫍 뫎 뫏 뫐 뫑 뫒 뫓 뫔 뫕 뫖 뫗 뫘 뫙 뫚 뫛 뫜 뫝 뫞 뫟 뫠
+ 뫡 뫢 뫣 뫤 뫥 뫦 뫧 뫨 뫩 뫪 뫫 뫬 뫭 뫮 뫯 뫰 뫱 뫲 뫳 뫴
+ 뫵 뫶 뫷 뫸 뫹 뫺 뫻 뫼 뫽 뫾 뫿 묀 묁 묂 묃 묄 묅 묆 묇 묈
+ 묉 묊 묋 묌 묍 묎 묏 묐 묑 묒 묓 묔 묕 묖 묗 묘 묙 묚 묛 묜
+ 묝 묞 묟 묠 묡 묢 묣 묤 묥 묦 묧 묨 묩 묪 묫 묬 묭 묮 묯 묰
+ 묱 묲 묳 무 묵 묶 묷 문 묹 묺 묻 물 묽 묾 묿 뭀 뭁 뭂 뭃 뭄
+ 뭅 뭆 뭇 뭈 뭉 뭊 뭋 뭌 뭍 뭎 뭏 뭐 뭑 뭒 뭓 뭔 뭕 뭖 뭗 뭘
+ 뭙 뭚 뭛 뭜 뭝 뭞 뭟 뭠 뭡 뭢 뭣 뭤 뭥 뭦 뭧 뭨 뭩 뭪 뭫 뭬
+ 뭭 뭮 뭯 뭰 뭱 뭲 뭳 뭴 뭵 뭶 뭷 뭸 뭹 뭺 뭻 뭼 뭽 뭾 뭿 뮀
+ 뮁 뮂 뮃 뮄 뮅 뮆 뮇 뮈 뮉 뮊 뮋 뮌 뮍 뮎 뮏 뮐 뮑 뮒 뮓 뮔
+ 뮕 뮖 뮗 뮘 뮙 뮚 뮛 뮜 뮝 뮞 뮟 뮠 뮡 뮢 뮣 뮤 뮥 뮦 뮧 뮨
+ 뮩 뮪 뮫 뮬 뮭 뮮 뮯 뮰 뮱 뮲 뮳 뮴 뮵 뮶 뮷 뮸 뮹 뮺 뮻 뮼
+ 뮽 뮾 뮿 므 믁 믂 믃 믄 믅 믆 믇 믈 믉 믊 믋 믌 믍 믎 믏 믐
+ 믑 믒 믓 믔 믕 믖 믗 믘 믙 믚 믛 믜 믝 믞 믟 믠 믡 믢 믣 믤
+ 믥 믦 믧 믨 믩 믪 믫 믬 믭 믮 믯 믰 믱 믲 믳 믴 믵 믶 믷 미
+ 믹 믺 믻 민 믽 믾 믿 밀 밁 밂 밃 밄 밅 밆 밇 밈 밉 밊 밋 밌
+ 밍 밎 및 밐 밑 밒 밓 바 박 밖 밗 반 밙 밚 받 발 밝 밞 밟 밠
+ 밡 밢 밣 밤 밥 밦 밧 밨 방 밪 밫 밬 밭 밮 밯 배 백 밲 밳 밴
+ 밵 밶 밷 밸 밹 밺 밻 밼 밽 밾 밿 뱀 뱁 뱂 뱃 뱄 뱅 뱆 뱇 뱈
+ 뱉 뱊 뱋 뱌 뱍 뱎 뱏 뱐 뱑 뱒 뱓 뱔 뱕 뱖 뱗 뱘 뱙 뱚 뱛 뱜
+ 뱝 뱞 뱟 뱠 뱡 뱢 뱣 뱤 뱥 뱦 뱧 뱨 뱩 뱪 뱫 뱬 뱭 뱮 뱯 뱰
+ 뱱 뱲 뱳 뱴 뱵 뱶 뱷 뱸 뱹 뱺 뱻 뱼 뱽 뱾 뱿 벀 벁 벂 벃 버
+ 벅 벆 벇 번 벉 벊 벋 벌 벍 벎 벏 벐 벑 벒 벓 범 법 벖 벗 벘
+ 벙 벚 벛 벜 벝 벞 벟 베 벡 벢 벣 벤 벥 벦 벧 벨 벩 벪 벫 벬
+ 벭 벮 벯 벰 벱 벲 벳 벴 벵 벶 벷 벸 벹 벺 벻 벼 벽 벾 벿 변
+ 볁 볂 볃 별 볅 볆 볇 볈 볉 볊 볋 볌 볍 볎 볏 볐 병 볒 볓 볔
+ 볕 볖 볗 볘 볙 볚 볛 볜 볝 볞 볟 볠 볡 볢 볣 볤 볥 볦 볧 볨
+ 볩 볪 볫 볬 볭 볮 볯 볰 볱 볲 볳 보 복 볶 볷 본 볹 볺 볻 볼
+ 볽 볾 볿 봀 봁 봂 봃 봄 봅 봆 봇 봈 봉 봊 봋 봌 봍 봎 봏 봐
+ 봑 봒 봓 봔 봕 봖 봗 봘 봙 봚 봛 봜 봝 봞 봟 봠 봡 봢 봣 봤
+ 봥 봦 봧 봨 봩 봪 봫 봬 봭 봮 봯 봰 봱 봲 봳 봴 봵 봶 봷 봸
+ 봹 봺 봻 봼 봽 봾 봿 뵀 뵁 뵂 뵃 뵄 뵅 뵆 뵇 뵈 뵉 뵊 뵋 뵌
+ 뵍 뵎 뵏 뵐 뵑 뵒 뵓 뵔 뵕 뵖 뵗 뵘 뵙 뵚 뵛 뵜 뵝 뵞 뵟 뵠
+ 뵡 뵢 뵣 뵤 뵥 뵦 뵧 뵨 뵩 뵪 뵫 뵬 뵭 뵮 뵯 뵰 뵱 뵲 뵳 뵴
+ 뵵 뵶 뵷 뵸 뵹 뵺 뵻 뵼 뵽 뵾 뵿 부 북 붂 붃 분 붅 붆 붇 불
+ 붉 붊 붋 붌 붍 붎 붏 붐 붑 붒 붓 붔 붕 붖 붗 붘 붙 붚 붛 붜
+ 붝 붞 붟 붠 붡 붢 붣 붤 붥 붦 붧 붨 붩 붪 붫 붬 붭 붮 붯 붰
+ 붱 붲 붳 붴 붵 붶 붷 붸 붹 붺 붻 붼 붽 붾 붿 뷀 뷁 뷂 뷃 뷄
+ 뷅 뷆 뷇 뷈 뷉 뷊 뷋 뷌 뷍 뷎 뷏 뷐 뷑 뷒 뷓 뷔 뷕 뷖 뷗 뷘
+ 뷙 뷚 뷛 뷜 뷝 뷞 뷟 뷠 뷡 뷢 뷣 뷤 뷥 뷦 뷧 뷨 뷩 뷪 뷫 뷬
+ 뷭 뷮 뷯 뷰 뷱 뷲 뷳 뷴 뷵 뷶 뷷 뷸 뷹 뷺 뷻 뷼 뷽 뷾 뷿 븀
+ 븁 븂 븃 븄 븅 븆 븇 븈 븉 븊 븋 브 븍 븎 븏 븐 븑 븒 븓 블
+ 븕 븖 븗 븘 븙 븚 븛 븜 븝 븞 븟 븠 븡 븢 븣 븤 븥 븦 븧 븨
+ 븩 븪 븫 븬 븭 븮 븯 븰 븱 븲 븳 븴 븵 븶 븷 븸 븹 븺 븻 븼
+ 븽 븾 븿 빀 빁 빂 빃 비 빅 빆 빇 빈 빉 빊 빋 빌 빍 빎 빏 빐
+ 빑 빒 빓 빔 빕 빖 빗 빘 빙 빚 빛 빜 빝 빞 빟 빠 빡 빢 빣 빤
+ 빥 빦 빧 빨 빩 빪 빫 빬 빭 빮 빯 빰 빱 빲 빳 빴 빵 빶 빷 빸
+ 빹 빺 빻 빼 빽 빾 빿 뺀 뺁 뺂 뺃 뺄 뺅 뺆 뺇 뺈 뺉 뺊 뺋 뺌
+ 뺍 뺎 뺏 뺐 뺑 뺒 뺓 뺔 뺕 뺖 뺗 뺘 뺙 뺚 뺛 뺜 뺝 뺞 뺟 뺠
+ 뺡 뺢 뺣 뺤 뺥 뺦 뺧 뺨 뺩 뺪 뺫 뺬 뺭 뺮 뺯 뺰 뺱 뺲 뺳 뺴
+ 뺵 뺶 뺷 뺸 뺹 뺺 뺻 뺼 뺽 뺾 뺿 뻀 뻁 뻂 뻃 뻄 뻅 뻆 뻇 뻈
+ 뻉 뻊 뻋 뻌 뻍 뻎 뻏 뻐 뻑 뻒 뻓 뻔 뻕 뻖 뻗 뻘 뻙 뻚 뻛 뻜
+ 뻝 뻞 뻟 뻠 뻡 뻢 뻣 뻤 뻥 뻦 뻧 뻨 뻩 뻪 뻫 뻬 뻭 뻮 뻯 뻰
+ 뻱 뻲 뻳 뻴 뻵 뻶 뻷 뻸 뻹 뻺 뻻 뻼 뻽 뻾 뻿 뼀 뼁 뼂 뼃 뼄
+ 뼅 뼆 뼇 뼈 뼉 뼊 뼋 뼌 뼍 뼎 뼏 뼐 뼑 뼒 뼓 뼔 뼕 뼖 뼗 뼘
+ 뼙 뼚 뼛 뼜 뼝 뼞 뼟 뼠 뼡 뼢 뼣 뼤 뼥 뼦 뼧 뼨 뼩 뼪 뼫 뼬
+ 뼭 뼮 뼯 뼰 뼱 뼲 뼳 뼴 뼵 뼶 뼷 뼸 뼹 뼺 뼻 뼼 뼽 뼾 뼿 뽀
+ 뽁 뽂 뽃 뽄 뽅 뽆 뽇 뽈 뽉 뽊 뽋 뽌 뽍 뽎 뽏 뽐 뽑 뽒 뽓 뽔
+ 뽕 뽖 뽗 뽘 뽙 뽚 뽛 뽜 뽝 뽞 뽟 뽠 뽡 뽢 뽣 뽤 뽥 뽦 뽧 뽨
+ 뽩 뽪 뽫 뽬 뽭 뽮 뽯 뽰 뽱 뽲 뽳 뽴 뽵 뽶 뽷 뽸 뽹 뽺 뽻 뽼
+ 뽽 뽾 뽿 뾀 뾁 뾂 뾃 뾄 뾅 뾆 뾇 뾈 뾉 뾊 뾋 뾌 뾍 뾎 뾏 뾐
+ 뾑 뾒 뾓 뾔 뾕 뾖 뾗 뾘 뾙 뾚 뾛 뾜 뾝 뾞 뾟 뾠 뾡 뾢 뾣 뾤
+ 뾥 뾦 뾧 뾨 뾩 뾪 뾫 뾬 뾭 뾮 뾯 뾰 뾱 뾲 뾳 뾴 뾵 뾶 뾷 뾸
+ 뾹 뾺 뾻 뾼 뾽 뾾 뾿 뿀 뿁 뿂 뿃 뿄 뿅 뿆 뿇 뿈 뿉 뿊 뿋 뿌
+ 뿍 뿎 뿏 뿐 뿑 뿒 뿓 뿔 뿕 뿖 뿗 뿘 뿙 뿚 뿛 뿜 뿝 뿞 뿟 뿠
+ 뿡 뿢 뿣 뿤 뿥 뿦 뿧 뿨 뿩 뿪 뿫 뿬 뿭 뿮 뿯 뿰 뿱 뿲 뿳 뿴
+ 뿵 뿶 뿷 뿸 뿹 뿺 뿻 뿼 뿽 뿾 뿿 쀀 쀁 쀂 쀃 쀄 쀅 쀆 쀇 쀈
+ 쀉 쀊 쀋 쀌 쀍 쀎 쀏 쀐 쀑 쀒 쀓 쀔 쀕 쀖 쀗 쀘 쀙 쀚 쀛 쀜
+ 쀝 쀞 쀟 쀠 쀡 쀢 쀣 쀤 쀥 쀦 쀧 쀨 쀩 쀪 쀫 쀬 쀭 쀮 쀯 쀰
+ 쀱 쀲 쀳 쀴 쀵 쀶 쀷 쀸 쀹 쀺 쀻 쀼 쀽 쀾 쀿 쁀 쁁 쁂 쁃 쁄
+ 쁅 쁆 쁇 쁈 쁉 쁊 쁋 쁌 쁍 쁎 쁏 쁐 쁑 쁒 쁓 쁔 쁕 쁖 쁗 쁘
+ 쁙 쁚 쁛 쁜 쁝 쁞 쁟 쁠 쁡 쁢 쁣 쁤 쁥 쁦 쁧 쁨 쁩 쁪 쁫 쁬
+ 쁭 쁮 쁯 쁰 쁱 쁲 쁳 쁴 쁵 쁶 쁷 쁸 쁹 쁺 쁻 쁼 쁽 쁾 쁿 삀
+ 삁 삂 삃 삄 삅 삆 삇 삈 삉 삊 삋 삌 삍 삎 삏 삐 삑 삒 삓 삔
+ 삕 삖 삗 삘 삙 삚 삛 삜 삝 삞 삟 삠 삡 삢 삣 삤 삥 삦 삧 삨
+ 삩 삪 삫 사 삭 삮 삯 산 삱 삲 삳 살 삵 삶 삷 삸 삹 삺 삻 삼
+ 삽 삾 삿 샀 상 샂 샃 샄 샅 샆 샇 새 색 샊 샋 샌 샍 샎 샏 샐
+ 샑 샒 샓 샔 샕 샖 샗 샘 샙 샚 샛 샜 생 샞 샟 샠 샡 샢 샣 샤
+ 샥 샦 샧 샨 샩 샪 샫 샬 샭 샮 샯 샰 샱 샲 샳 샴 샵 샶 샷 샸
+ 샹 샺 샻 샼 샽 샾 샿 섀 섁 섂 섃 섄 섅 섆 섇 섈 섉 섊 섋 섌
+ 섍 섎 섏 섐 섑 섒 섓 섔 섕 섖 섗 섘 섙 섚 섛 서 석 섞 섟 선
+ 섡 섢 섣 설 섥 섦 섧 섨 섩 섪 섫 섬 섭 섮 섯 섰 성 섲 섳 섴
+ 섵 섶 섷 세 섹 섺 섻 센 섽 섾 섿 셀 셁 셂 셃 셄 셅 셆 셇 셈
+ 셉 셊 셋 셌 셍 셎 셏 셐 셑 셒 셓 셔 셕 셖 셗 션 셙 셚 셛 셜
+ 셝 셞 셟 셠 셡 셢 셣 셤 셥 셦 셧 셨 셩 셪 셫 셬 셭 셮 셯 셰
+ 셱 셲 셳 셴 셵 셶 셷 셸 셹 셺 셻 셼 셽 셾 셿 솀 솁 솂 솃 솄
+ 솅 솆 솇 솈 솉 솊 솋 소 속 솎 솏 손 솑 솒 솓 솔 솕 솖 솗 솘
+ 솙 솚 솛 솜 솝 솞 솟 솠 송 솢 솣 솤 솥 솦 솧 솨 솩 솪 솫 솬
+ 솭 솮 솯 솰 솱 솲 솳 솴 솵 솶 솷 솸 솹 솺 솻 솼 솽 솾 솿 쇀
+ 쇁 쇂 쇃 쇄 쇅 쇆 쇇 쇈 쇉 쇊 쇋 쇌 쇍 쇎 쇏 쇐 쇑 쇒 쇓 쇔
+ 쇕 쇖 쇗 쇘 쇙 쇚 쇛 쇜 쇝 쇞 쇟 쇠 쇡 쇢 쇣 쇤 쇥 쇦 쇧 쇨
+ 쇩 쇪 쇫 쇬 쇭 쇮 쇯 쇰 쇱 쇲 쇳 쇴 쇵 쇶 쇷 쇸 쇹 쇺 쇻 쇼
+ 쇽 쇾 쇿 숀 숁 숂 숃 숄 숅 숆 숇 숈 숉 숊 숋 숌 숍 숎 숏 숐
+ 숑 숒 숓 숔 숕 숖 숗 수 숙 숚 숛 순 숝 숞 숟 술 숡 숢 숣 숤
+ 숥 숦 숧 숨 숩 숪 숫 숬 숭 숮 숯 숰 숱 숲 숳 숴 숵 숶 숷 숸
+ 숹 숺 숻 숼 숽 숾 숿 쉀 쉁 쉂 쉃 쉄 쉅 쉆 쉇 쉈 쉉 쉊 쉋 쉌
+ 쉍 쉎 쉏 쉐 쉑 쉒 쉓 쉔 쉕 쉖 쉗 쉘 쉙 쉚 쉛 쉜 쉝 쉞 쉟 쉠
+ 쉡 쉢 쉣 쉤 쉥 쉦 쉧 쉨 쉩 쉪 쉫 쉬 쉭 쉮 쉯 쉰 쉱 쉲 쉳 쉴
+ 쉵 쉶 쉷 쉸 쉹 쉺 쉻 쉼 쉽 쉾 쉿 슀 슁 슂 슃 슄 슅 슆 슇 슈
+ 슉 슊 슋 슌 슍 슎 슏 슐 슑 슒 슓 슔 슕 슖 슗 슘 슙 슚 슛 슜
+ 슝 슞 슟 슠 슡 슢 슣 스 슥 슦 슧 슨 슩 슪 슫 슬 슭 슮 슯 슰
+ 슱 슲 슳 슴 습 슶 슷 슸 승 슺 슻 슼 슽 슾 슿 싀 싁 싂 싃 싄
+ 싅 싆 싇 싈 싉 싊 싋 싌 싍 싎 싏 싐 싑 싒 싓 싔 싕 싖 싗 싘
+ 싙 싚 싛 시 식 싞 싟 신 싡 싢 싣 실 싥 싦 싧 싨 싩 싪 싫 심
+ 십 싮 싯 싰 싱 싲 싳 싴 싵 싶 싷 싸 싹 싺 싻 싼 싽 싾 싿 쌀
+ 쌁 쌂 쌃 쌄 쌅 쌆 쌇 쌈 쌉 쌊 쌋 쌌 쌍 쌎 쌏 쌐 쌑 쌒 쌓 쌔
+ 쌕 쌖 쌗 쌘 쌙 쌚 쌛 쌜 쌝 쌞 쌟 쌠 쌡 쌢 쌣 쌤 쌥 쌦 쌧 쌨
+ 쌩 쌪 쌫 쌬 쌭 쌮 쌯 쌰 쌱 쌲 쌳 쌴 쌵 쌶 쌷 쌸 쌹 쌺 쌻 쌼
+ 쌽 쌾 쌿 썀 썁 썂 썃 썄 썅 썆 썇 썈 썉 썊 썋 썌 썍 썎 썏 썐
+ 썑 썒 썓 썔 썕 썖 썗 썘 썙 썚 썛 썜 썝 썞 썟 썠 썡 썢 썣 썤
+ 썥 썦 썧 써 썩 썪 썫 썬 썭 썮 썯 썰 썱 썲 썳 썴 썵 썶 썷 썸
+ 썹 썺 썻 썼 썽 썾 썿 쎀 쎁 쎂 쎃 쎄 쎅 쎆 쎇 쎈 쎉 쎊 쎋 쎌
+ 쎍 쎎 쎏 쎐 쎑 쎒 쎓 쎔 쎕 쎖 쎗 쎘 쎙 쎚 쎛 쎜 쎝 쎞 쎟 쎠
+ 쎡 쎢 쎣 쎤 쎥 쎦 쎧 쎨 쎩 쎪 쎫 쎬 쎭 쎮 쎯 쎰 쎱 쎲 쎳 쎴
+ 쎵 쎶 쎷 쎸 쎹 쎺 쎻 쎼 쎽 쎾 쎿 쏀 쏁 쏂 쏃 쏄 쏅 쏆 쏇 쏈
+ 쏉 쏊 쏋 쏌 쏍 쏎 쏏 쏐 쏑 쏒 쏓 쏔 쏕 쏖 쏗 쏘 쏙 쏚 쏛 쏜
+ 쏝 쏞 쏟 쏠 쏡 쏢 쏣 쏤 쏥 쏦 쏧 쏨 쏩 쏪 쏫 쏬 쏭 쏮 쏯 쏰
+ 쏱 쏲 쏳 쏴 쏵 쏶 쏷 쏸 쏹 쏺 쏻 쏼 쏽 쏾 쏿 쐀 쐁 쐂 쐃 쐄
+ 쐅 쐆 쐇 쐈 쐉 쐊 쐋 쐌 쐍 쐎 쐏 쐐 쐑 쐒 쐓 쐔 쐕 쐖 쐗 쐘
+ 쐙 쐚 쐛 쐜 쐝 쐞 쐟 쐠 쐡 쐢 쐣 쐤 쐥 쐦 쐧 쐨 쐩 쐪 쐫 쐬
+ 쐭 쐮 쐯 쐰 쐱 쐲 쐳 쐴 쐵 쐶 쐷 쐸 쐹 쐺 쐻 쐼 쐽 쐾 쐿 쑀
+ 쑁 쑂 쑃 쑄 쑅 쑆 쑇 쑈 쑉 쑊 쑋 쑌 쑍 쑎 쑏 쑐 쑑 쑒 쑓 쑔
+ 쑕 쑖 쑗 쑘 쑙 쑚 쑛 쑜 쑝 쑞 쑟 쑠 쑡 쑢 쑣 쑤 쑥 쑦 쑧 쑨
+ 쑩 쑪 쑫 쑬 쑭 쑮 쑯 쑰 쑱 쑲 쑳 쑴 쑵 쑶 쑷 쑸 쑹 쑺 쑻 쑼
+ 쑽 쑾 쑿 쒀 쒁 쒂 쒃 쒄 쒅 쒆 쒇 쒈 쒉 쒊 쒋 쒌 쒍 쒎 쒏 쒐
+ 쒑 쒒 쒓 쒔 쒕 쒖 쒗 쒘 쒙 쒚 쒛 쒜 쒝 쒞 쒟 쒠 쒡 쒢 쒣 쒤
+ 쒥 쒦 쒧 쒨 쒩 쒪 쒫 쒬 쒭 쒮 쒯 쒰 쒱 쒲 쒳 쒴 쒵 쒶 쒷 쒸
+ 쒹 쒺 쒻 쒼 쒽 쒾 쒿 쓀 쓁 쓂 쓃 쓄 쓅 쓆 쓇 쓈 쓉 쓊 쓋 쓌
+ 쓍 쓎 쓏 쓐 쓑 쓒 쓓 쓔 쓕 쓖 쓗 쓘 쓙 쓚 쓛 쓜 쓝 쓞 쓟 쓠
+ 쓡 쓢 쓣 쓤 쓥 쓦 쓧 쓨 쓩 쓪 쓫 쓬 쓭 쓮 쓯 쓰 쓱 쓲 쓳 쓴
+ 쓵 쓶 쓷 쓸 쓹 쓺 쓻 쓼 쓽 쓾 쓿 씀 씁 씂 씃 씄 씅 씆 씇 씈
+ 씉 씊 씋 씌 씍 씎 씏 씐 씑 씒 씓 씔 씕 씖 씗 씘 씙 씚 씛 씜
+ 씝 씞 씟 씠 씡 씢 씣 씤 씥 씦 씧 씨 씩 씪 씫 씬 씭 씮 씯 씰
+ 씱 씲 씳 씴 씵 씶 씷 씸 씹 씺 씻 씼 씽 씾 씿 앀 앁 앂 앃 아
+ 악 앆 앇 안 앉 않 앋 알 앍 앎 앏 앐 앑 앒 앓 암 압 앖 앗 았
+ 앙 앚 앛 앜 앝 앞 앟 애 액 앢 앣 앤 앥 앦 앧 앨 앩 앪 앫 앬
+ 앭 앮 앯 앰 앱 앲 앳 앴 앵 앶 앷 앸 앹 앺 앻 야 약 앾 앿 얀
+ 얁 얂 얃 얄 얅 얆 얇 얈 얉 얊 얋 얌 얍 얎 얏 얐 양 얒 얓 얔
+ 얕 얖 얗 얘 얙 얚 얛 얜 얝 얞 얟 얠 얡 얢 얣 얤 얥 얦 얧 얨
+ 얩 얪 얫 얬 얭 얮 얯 얰 얱 얲 얳 어 억 얶 얷 언 얹 얺 얻 얼
+ 얽 얾 얿 엀 엁 엂 엃 엄 업 없 엇 었 엉 엊 엋 엌 엍 엎 엏 에
+ 엑 엒 엓 엔 엕 엖 엗 엘 엙 엚 엛 엜 엝 엞 엟 엠 엡 엢 엣 엤
+ 엥 엦 엧 엨 엩 엪 엫 여 역 엮 엯 연 엱 엲 엳 열 엵 엶 엷 엸
+ 엹 엺 엻 염 엽 엾 엿 였 영 옂 옃 옄 옅 옆 옇 예 옉 옊 옋 옌
+ 옍 옎 옏 옐 옑 옒 옓 옔 옕 옖 옗 옘 옙 옚 옛 옜 옝 옞 옟 옠
+ 옡 옢 옣 오 옥 옦 옧 온 옩 옪 옫 올 옭 옮 옯 옰 옱 옲 옳 옴
+ 옵 옶 옷 옸 옹 옺 옻 옼 옽 옾 옿 와 왁 왂 왃 완 왅 왆 왇 왈
+ 왉 왊 왋 왌 왍 왎 왏 왐 왑 왒 왓 왔 왕 왖 왗 왘 왙 왚 왛 왜
+ 왝 왞 왟 왠 왡 왢 왣 왤 왥 왦 왧 왨 왩 왪 왫 왬 왭 왮 왯 왰
+ 왱 왲 왳 왴 왵 왶 왷 외 왹 왺 왻 왼 왽 왾 왿 욀 욁 욂 욃 욄
+ 욅 욆 욇 욈 욉 욊 욋 욌 욍 욎 욏 욐 욑 욒 욓 요 욕 욖 욗 욘
+ 욙 욚 욛 욜 욝 욞 욟 욠 욡 욢 욣 욤 욥 욦 욧 욨 용 욪 욫 욬
+ 욭 욮 욯 우 욱 욲 욳 운 욵 욶 욷 울 욹 욺 욻 욼 욽 욾 욿 움
+ 웁 웂 웃 웄 웅 웆 웇 웈 웉 웊 웋 워 웍 웎 웏 원 웑 웒 웓 월
+ 웕 웖 웗 웘 웙 웚 웛 웜 웝 웞 웟 웠 웡 웢 웣 웤 웥 웦 웧 웨
+ 웩 웪 웫 웬 웭 웮 웯 웰 웱 웲 웳 웴 웵 웶 웷 웸 웹 웺 웻 웼
+ 웽 웾 웿 윀 윁 윂 윃 위 윅 윆 윇 윈 윉 윊 윋 윌 윍 윎 윏 윐
+ 윑 윒 윓 윔 윕 윖 윗 윘 윙 윚 윛 윜 윝 윞 윟 유 육 윢 윣 윤
+ 윥 윦 윧 율 윩 윪 윫 윬 윭 윮 윯 윰 윱 윲 윳 윴 융 윶 윷 윸
+ 윹 윺 윻 으 윽 윾 윿 은 읁 읂 읃 을 읅 읆 읇 읈 읉 읊 읋 음
+ 읍 읎 읏 읐 응 읒 읓 읔 읕 읖 읗 의 읙 읚 읛 읜 읝 읞 읟 읠
+ 읡 읢 읣 읤 읥 읦 읧 읨 읩 읪 읫 읬 읭 읮 읯 읰 읱 읲 읳 이
+ 익 읶 읷 인 읹 읺 읻 일 읽 읾 읿 잀 잁 잂 잃 임 입 잆 잇 있
+ 잉 잊 잋 잌 잍 잎 잏 자 작 잒 잓 잔 잕 잖 잗 잘 잙 잚 잛 잜
+ 잝 잞 잟 잠 잡 잢 잣 잤 장 잦 잧 잨 잩 잪 잫 재 잭 잮 잯 잰
+ 잱 잲 잳 잴 잵 잶 잷 잸 잹 잺 잻 잼 잽 잾 잿 쟀 쟁 쟂 쟃 쟄
+ 쟅 쟆 쟇 쟈 쟉 쟊 쟋 쟌 쟍 쟎 쟏 쟐 쟑 쟒 쟓 쟔 쟕 쟖 쟗 쟘
+ 쟙 쟚 쟛 쟜 쟝 쟞 쟟 쟠 쟡 쟢 쟣 쟤 쟥 쟦 쟧 쟨 쟩 쟪 쟫 쟬
+ 쟭 쟮 쟯 쟰 쟱 쟲 쟳 쟴 쟵 쟶 쟷 쟸 쟹 쟺 쟻 쟼 쟽 쟾 쟿 저
+ 적 젂 젃 전 젅 젆 젇 절 젉 젊 젋 젌 젍 젎 젏 점 접 젒 젓 젔
+ 정 젖 젗 젘 젙 젚 젛 제 젝 젞 젟 젠 젡 젢 젣 젤 젥 젦 젧 젨
+ 젩 젪 젫 젬 젭 젮 젯 젰 젱 젲 젳 젴 젵 젶 젷 져 젹 젺 젻 젼
+ 젽 젾 젿 졀 졁 졂 졃 졄 졅 졆 졇 졈 졉 졊 졋 졌 졍 졎 졏 졐
+ 졑 졒 졓 졔 졕 졖 졗 졘 졙 졚 졛 졜 졝 졞 졟 졠 졡 졢 졣 졤
+ 졥 졦 졧 졨 졩 졪 졫 졬 졭 졮 졯 조 족 졲 졳 존 졵 졶 졷 졸
+ 졹 졺 졻 졼 졽 졾 졿 좀 좁 좂 좃 좄 종 좆 좇 좈 좉 좊 좋 좌
+ 좍 좎 좏 좐 좑 좒 좓 좔 좕 좖 좗 좘 좙 좚 좛 좜 좝 좞 좟 좠
+ 좡 좢 좣 좤 좥 좦 좧 좨 좩 좪 좫 좬 좭 좮 좯 좰 좱 좲 좳 좴
+ 좵 좶 좷 좸 좹 좺 좻 좼 좽 좾 좿 죀 죁 죂 죃 죄 죅 죆 죇 죈
+ 죉 죊 죋 죌 죍 죎 죏 죐 죑 죒 죓 죔 죕 죖 죗 죘 죙 죚 죛 죜
+ 죝 죞 죟 죠 죡 죢 죣 죤 죥 죦 죧 죨 죩 죪 죫 죬 죭 죮 죯 죰
+ 죱 죲 죳 죴 죵 죶 죷 죸 죹 죺 죻 주 죽 죾 죿 준 줁 줂 줃 줄
+ 줅 줆 줇 줈 줉 줊 줋 줌 줍 줎 줏 줐 중 줒 줓 줔 줕 줖 줗 줘
+ 줙 줚 줛 줜 줝 줞 줟 줠 줡 줢 줣 줤 줥 줦 줧 줨 줩 줪 줫 줬
+ 줭 줮 줯 줰 줱 줲 줳 줴 줵 줶 줷 줸 줹 줺 줻 줼 줽 줾 줿 쥀
+ 쥁 쥂 쥃 쥄 쥅 쥆 쥇 쥈 쥉 쥊 쥋 쥌 쥍 쥎 쥏 쥐 쥑 쥒 쥓 쥔
+ 쥕 쥖 쥗 쥘 쥙 쥚 쥛 쥜 쥝 쥞 쥟 쥠 쥡 쥢 쥣 쥤 쥥 쥦 쥧 쥨
+ 쥩 쥪 쥫 쥬 쥭 쥮 쥯 쥰 쥱 쥲 쥳 쥴 쥵 쥶 쥷 쥸 쥹 쥺 쥻 쥼
+ 쥽 쥾 쥿 즀 즁 즂 즃 즄 즅 즆 즇 즈 즉 즊 즋 즌 즍 즎 즏 즐
+ 즑 즒 즓 즔 즕 즖 즗 즘 즙 즚 즛 즜 증 즞 즟 즠 즡 즢 즣 즤
+ 즥 즦 즧 즨 즩 즪 즫 즬 즭 즮 즯 즰 즱 즲 즳 즴 즵 즶 즷 즸
+ 즹 즺 즻 즼 즽 즾 즿 지 직 짂 짃 진 짅 짆 짇 질 짉 짊 짋 짌
+ 짍 짎 짏 짐 집 짒 짓 짔 징 짖 짗 짘 짙 짚 짛 짜 짝 짞 짟 짠
+ 짡 짢 짣 짤 짥 짦 짧 짨 짩 짪 짫 짬 짭 짮 짯 짰 짱 짲 짳 짴
+ 짵 짶 짷 째 짹 짺 짻 짼 짽 짾 짿 쨀 쨁 쨂 쨃 쨄 쨅 쨆 쨇 쨈
+ 쨉 쨊 쨋 쨌 쨍 쨎 쨏 쨐 쨑 쨒 쨓 쨔 쨕 쨖 쨗 쨘 쨙 쨚 쨛 쨜
+ 쨝 쨞 쨟 쨠 쨡 쨢 쨣 쨤 쨥 쨦 쨧 쨨 쨩 쨪 쨫 쨬 쨭 쨮 쨯 쨰
+ 쨱 쨲 쨳 쨴 쨵 쨶 쨷 쨸 쨹 쨺 쨻 쨼 쨽 쨾 쨿 쩀 쩁 쩂 쩃 쩄
+ 쩅 쩆 쩇 쩈 쩉 쩊 쩋 쩌 쩍 쩎 쩏 쩐 쩑 쩒 쩓 쩔 쩕 쩖 쩗 쩘
+ 쩙 쩚 쩛 쩜 쩝 쩞 쩟 쩠 쩡 쩢 쩣 쩤 쩥 쩦 쩧 쩨 쩩 쩪 쩫 쩬
+ 쩭 쩮 쩯 쩰 쩱 쩲 쩳 쩴 쩵 쩶 쩷 쩸 쩹 쩺 쩻 쩼 쩽 쩾 쩿 쪀
+ 쪁 쪂 쪃 쪄 쪅 쪆 쪇 쪈 쪉 쪊 쪋 쪌 쪍 쪎 쪏 쪐 쪑 쪒 쪓 쪔
+ 쪕 쪖 쪗 쪘 쪙 쪚 쪛 쪜 쪝 쪞 쪟 쪠 쪡 쪢 쪣 쪤 쪥 쪦 쪧 쪨
+ 쪩 쪪 쪫 쪬 쪭 쪮 쪯 쪰 쪱 쪲 쪳 쪴 쪵 쪶 쪷 쪸 쪹 쪺 쪻 쪼
+ 쪽 쪾 쪿 쫀 쫁 쫂 쫃 쫄 쫅 쫆 쫇 쫈 쫉 쫊 쫋 쫌 쫍 쫎 쫏 쫐
+ 쫑 쫒 쫓 쫔 쫕 쫖 쫗 쫘 쫙 쫚 쫛 쫜 쫝 쫞 쫟 쫠 쫡 쫢 쫣 쫤
+ 쫥 쫦 쫧 쫨 쫩 쫪 쫫 쫬 쫭 쫮 쫯 쫰 쫱 쫲 쫳 쫴 쫵 쫶 쫷 쫸
+ 쫹 쫺 쫻 쫼 쫽 쫾 쫿 쬀 쬁 쬂 쬃 쬄 쬅 쬆 쬇 쬈 쬉 쬊 쬋 쬌
+ 쬍 쬎 쬏 쬐 쬑 쬒 쬓 쬔 쬕 쬖 쬗 쬘 쬙 쬚 쬛 쬜 쬝 쬞 쬟 쬠
+ 쬡 쬢 쬣 쬤 쬥 쬦 쬧 쬨 쬩 쬪 쬫 쬬 쬭 쬮 쬯 쬰 쬱 쬲 쬳 쬴
+ 쬵 쬶 쬷 쬸 쬹 쬺 쬻 쬼 쬽 쬾 쬿 쭀 쭁 쭂 쭃 쭄 쭅 쭆 쭇 쭈
+ 쭉 쭊 쭋 쭌 쭍 쭎 쭏 쭐 쭑 쭒 쭓 쭔 쭕 쭖 쭗 쭘 쭙 쭚 쭛 쭜
+ 쭝 쭞 쭟 쭠 쭡 쭢 쭣 쭤 쭥 쭦 쭧 쭨 쭩 쭪 쭫 쭬 쭭 쭮 쭯 쭰
+ 쭱 쭲 쭳 쭴 쭵 쭶 쭷 쭸 쭹 쭺 쭻 쭼 쭽 쭾 쭿 쮀 쮁 쮂 쮃 쮄
+ 쮅 쮆 쮇 쮈 쮉 쮊 쮋 쮌 쮍 쮎 쮏 쮐 쮑 쮒 쮓 쮔 쮕 쮖 쮗 쮘
+ 쮙 쮚 쮛 쮜 쮝 쮞 쮟 쮠 쮡 쮢 쮣 쮤 쮥 쮦 쮧 쮨 쮩 쮪 쮫 쮬
+ 쮭 쮮 쮯 쮰 쮱 쮲 쮳 쮴 쮵 쮶 쮷 쮸 쮹 쮺 쮻 쮼 쮽 쮾 쮿 쯀
+ 쯁 쯂 쯃 쯄 쯅 쯆 쯇 쯈 쯉 쯊 쯋 쯌 쯍 쯎 쯏 쯐 쯑 쯒 쯓 쯔
+ 쯕 쯖 쯗 쯘 쯙 쯚 쯛 쯜 쯝 쯞 쯟 쯠 쯡 쯢 쯣 쯤 쯥 쯦 쯧 쯨
+ 쯩 쯪 쯫 쯬 쯭 쯮 쯯 쯰 쯱 쯲 쯳 쯴 쯵 쯶 쯷 쯸 쯹 쯺 쯻 쯼
+ 쯽 쯾 쯿 찀 찁 찂 찃 찄 찅 찆 찇 찈 찉 찊 찋 찌 찍 찎 찏 찐
+ 찑 찒 찓 찔 찕 찖 찗 찘 찙 찚 찛 찜 찝 찞 찟 찠 찡 찢 찣 찤
+ 찥 찦 찧 차 착 찪 찫 찬 찭 찮 찯 찰 찱 찲 찳 찴 찵 찶 찷 참
+ 찹 찺 찻 찼 창 찾 찿 챀 챁 챂 챃 채 책 챆 챇 챈 챉 챊 챋 챌
+ 챍 챎 챏 챐 챑 챒 챓 챔 챕 챖 챗 챘 챙 챚 챛 챜 챝 챞 챟 챠
+ 챡 챢 챣 챤 챥 챦 챧 챨 챩 챪 챫 챬 챭 챮 챯 챰 챱 챲 챳 챴
+ 챵 챶 챷 챸 챹 챺 챻 챼 챽 챾 챿 첀 첁 첂 첃 첄 첅 첆 첇 첈
+ 첉 첊 첋 첌 첍 첎 첏 첐 첑 첒 첓 첔 첕 첖 첗 처 척 첚 첛 천
+ 첝 첞 첟 철 첡 첢 첣 첤 첥 첦 첧 첨 첩 첪 첫 첬 청 첮 첯 첰
+ 첱 첲 첳 체 첵 첶 첷 첸 첹 첺 첻 첼 첽 첾 첿 쳀 쳁 쳂 쳃 쳄
+ 쳅 쳆 쳇 쳈 쳉 쳊 쳋 쳌 쳍 쳎 쳏 쳐 쳑 쳒 쳓 쳔 쳕 쳖 쳗 쳘
+ 쳙 쳚 쳛 쳜 쳝 쳞 쳟 쳠 쳡 쳢 쳣 쳤 쳥 쳦 쳧 쳨 쳩 쳪 쳫 쳬
+ 쳭 쳮 쳯 쳰 쳱 쳲 쳳 쳴 쳵 쳶 쳷 쳸 쳹 쳺 쳻 쳼 쳽 쳾 쳿 촀
+ 촁 촂 촃 촄 촅 촆 촇 초 촉 촊 촋 촌 촍 촎 촏 촐 촑 촒 촓 촔
+ 촕 촖 촗 촘 촙 촚 촛 촜 총 촞 촟 촠 촡 촢 촣 촤 촥 촦 촧 촨
+ 촩 촪 촫 촬 촭 촮 촯 촰 촱 촲 촳 촴 촵 촶 촷 촸 촹 촺 촻 촼
+ 촽 촾 촿 쵀 쵁 쵂 쵃 쵄 쵅 쵆 쵇 쵈 쵉 쵊 쵋 쵌 쵍 쵎 쵏 쵐
+ 쵑 쵒 쵓 쵔 쵕 쵖 쵗 쵘 쵙 쵚 쵛 최 쵝 쵞 쵟 쵠 쵡 쵢 쵣 쵤
+ 쵥 쵦 쵧 쵨 쵩 쵪 쵫 쵬 쵭 쵮 쵯 쵰 쵱 쵲 쵳 쵴 쵵 쵶 쵷 쵸
+ 쵹 쵺 쵻 쵼 쵽 쵾 쵿 춀 춁 춂 춃 춄 춅 춆 춇 춈 춉 춊 춋 춌
+ 춍 춎 춏 춐 춑 춒 춓 추 축 춖 춗 춘 춙 춚 춛 출 춝 춞 춟 춠
+ 춡 춢 춣 춤 춥 춦 춧 춨 충 춪 춫 춬 춭 춮 춯 춰 춱 춲 춳 춴
+ 춵 춶 춷 춸 춹 춺 춻 춼 춽 춾 춿 췀 췁 췂 췃 췄 췅 췆 췇 췈
+ 췉 췊 췋 췌 췍 췎 췏 췐 췑 췒 췓 췔 췕 췖 췗 췘 췙 췚 췛 췜
+ 췝 췞 췟 췠 췡 췢 췣 췤 췥 췦 췧 취 췩 췪 췫 췬 췭 췮 췯 췰
+ 췱 췲 췳 췴 췵 췶 췷 췸 췹 췺 췻 췼 췽 췾 췿 츀 츁 츂 츃 츄
+ 츅 츆 츇 츈 츉 츊 츋 츌 츍 츎 츏 츐 츑 츒 츓 츔 츕 츖 츗 츘
+ 츙 츚 츛 츜 츝 츞 츟 츠 측 츢 츣 츤 츥 츦 츧 츨 츩 츪 츫 츬
+ 츭 츮 츯 츰 츱 츲 츳 츴 층 츶 츷 츸 츹 츺 츻 츼 츽 츾 츿 칀
+ 칁 칂 칃 칄 칅 칆 칇 칈 칉 칊 칋 칌 칍 칎 칏 칐 칑 칒 칓 칔
+ 칕 칖 칗 치 칙 칚 칛 친 칝 칞 칟 칠 칡 칢 칣 칤 칥 칦 칧 침
+ 칩 칪 칫 칬 칭 칮 칯 칰 칱 칲 칳 카 칵 칶 칷 칸 칹 칺 칻 칼
+ 칽 칾 칿 캀 캁 캂 캃 캄 캅 캆 캇 캈 캉 캊 캋 캌 캍 캎 캏 캐
+ 캑 캒 캓 캔 캕 캖 캗 캘 캙 캚 캛 캜 캝 캞 캟 캠 캡 캢 캣 캤
+ 캥 캦 캧 캨 캩 캪 캫 캬 캭 캮 캯 캰 캱 캲 캳 캴 캵 캶 캷 캸
+ 캹 캺 캻 캼 캽 캾 캿 컀 컁 컂 컃 컄 컅 컆 컇 컈 컉 컊 컋 컌
+ 컍 컎 컏 컐 컑 컒 컓 컔 컕 컖 컗 컘 컙 컚 컛 컜 컝 컞 컟 컠
+ 컡 컢 컣 커 컥 컦 컧 컨 컩 컪 컫 컬 컭 컮 컯 컰 컱 컲 컳 컴
+ 컵 컶 컷 컸 컹 컺 컻 컼 컽 컾 컿 케 켁 켂 켃 켄 켅 켆 켇 켈
+ 켉 켊 켋 켌 켍 켎 켏 켐 켑 켒 켓 켔 켕 켖 켗 켘 켙 켚 켛 켜
+ 켝 켞 켟 켠 켡 켢 켣 켤 켥 켦 켧 켨 켩 켪 켫 켬 켭 켮 켯 켰
+ 켱 켲 켳 켴 켵 켶 켷 켸 켹 켺 켻 켼 켽 켾 켿 콀 콁 콂 콃 콄
+ 콅 콆 콇 콈 콉 콊 콋 콌 콍 콎 콏 콐 콑 콒 콓 코 콕 콖 콗 콘
+ 콙 콚 콛 콜 콝 콞 콟 콠 콡 콢 콣 콤 콥 콦 콧 콨 콩 콪 콫 콬
+ 콭 콮 콯 콰 콱 콲 콳 콴 콵 콶 콷 콸 콹 콺 콻 콼 콽 콾 콿 쾀
+ 쾁 쾂 쾃 쾄 쾅 쾆 쾇 쾈 쾉 쾊 쾋 쾌 쾍 쾎 쾏 쾐 쾑 쾒 쾓 쾔
+ 쾕 쾖 쾗 쾘 쾙 쾚 쾛 쾜 쾝 쾞 쾟 쾠 쾡 쾢 쾣 쾤 쾥 쾦 쾧 쾨
+ 쾩 쾪 쾫 쾬 쾭 쾮 쾯 쾰 쾱 쾲 쾳 쾴 쾵 쾶 쾷 쾸 쾹 쾺 쾻 쾼
+ 쾽 쾾 쾿 쿀 쿁 쿂 쿃 쿄 쿅 쿆 쿇 쿈 쿉 쿊 쿋 쿌 쿍 쿎 쿏 쿐
+ 쿑 쿒 쿓 쿔 쿕 쿖 쿗 쿘 쿙 쿚 쿛 쿜 쿝 쿞 쿟 쿠 쿡 쿢 쿣 쿤
+ 쿥 쿦 쿧 쿨 쿩 쿪 쿫 쿬 쿭 쿮 쿯 쿰 쿱 쿲 쿳 쿴 쿵 쿶 쿷 쿸
+ 쿹 쿺 쿻 쿼 쿽 쿾 쿿 퀀 퀁 퀂 퀃 퀄 퀅 퀆 퀇 퀈 퀉 퀊 퀋 퀌
+ 퀍 퀎 퀏 퀐 퀑 퀒 퀓 퀔 퀕 퀖 퀗 퀘 퀙 퀚 퀛 퀜 퀝 퀞 퀟 퀠
+ 퀡 퀢 퀣 퀤 퀥 퀦 퀧 퀨 퀩 퀪 퀫 퀬 퀭 퀮 퀯 퀰 퀱 퀲 퀳 퀴
+ 퀵 퀶 퀷 퀸 퀹 퀺 퀻 퀼 퀽 퀾 퀿 큀 큁 큂 큃 큄 큅 큆 큇 큈
+ 큉 큊 큋 큌 큍 큎 큏 큐 큑 큒 큓 큔 큕 큖 큗 큘 큙 큚 큛 큜
+ 큝 큞 큟 큠 큡 큢 큣 큤 큥 큦 큧 큨 큩 큪 큫 크 큭 큮 큯 큰
+ 큱 큲 큳 클 큵 큶 큷 큸 큹 큺 큻 큼 큽 큾 큿 킀 킁 킂 킃 킄
+ 킅 킆 킇 킈 킉 킊 킋 킌 킍 킎 킏 킐 킑 킒 킓 킔 킕 킖 킗 킘
+ 킙 킚 킛 킜 킝 킞 킟 킠 킡 킢 킣 키 킥 킦 킧 킨 킩 킪 킫 킬
+ 킭 킮 킯 킰 킱 킲 킳 킴 킵 킶 킷 킸 킹 킺 킻 킼 킽 킾 킿 타
+ 탁 탂 탃 탄 탅 탆 탇 탈 탉 탊 탋 탌 탍 탎 탏 탐 탑 탒 탓 탔
+ 탕 탖 탗 탘 탙 탚 탛 태 택 탞 탟 탠 탡 탢 탣 탤 탥 탦 탧 탨
+ 탩 탪 탫 탬 탭 탮 탯 탰 탱 탲 탳 탴 탵 탶 탷 탸 탹 탺 탻 탼
+ 탽 탾 탿 턀 턁 턂 턃 턄 턅 턆 턇 턈 턉 턊 턋 턌 턍 턎 턏 턐
+ 턑 턒 턓 턔 턕 턖 턗 턘 턙 턚 턛 턜 턝 턞 턟 턠 턡 턢 턣 턤
+ 턥 턦 턧 턨 턩 턪 턫 턬 턭 턮 턯 터 턱 턲 턳 턴 턵 턶 턷 털
+ 턹 턺 턻 턼 턽 턾 턿 텀 텁 텂 텃 텄 텅 텆 텇 텈 텉 텊 텋 테
+ 텍 텎 텏 텐 텑 텒 텓 텔 텕 텖 텗 텘 텙 텚 텛 템 텝 텞 텟 텠
+ 텡 텢 텣 텤 텥 텦 텧 텨 텩 텪 텫 텬 텭 텮 텯 텰 텱 텲 텳 텴
+ 텵 텶 텷 텸 텹 텺 텻 텼 텽 텾 텿 톀 톁 톂 톃 톄 톅 톆 톇 톈
+ 톉 톊 톋 톌 톍 톎 톏 톐 톑 톒 톓 톔 톕 톖 톗 톘 톙 톚 톛 톜
+ 톝 톞 톟 토 톡 톢 톣 톤 톥 톦 톧 톨 톩 톪 톫 톬 톭 톮 톯 톰
+ 톱 톲 톳 톴 통 톶 톷 톸 톹 톺 톻 톼 톽 톾 톿 퇀 퇁 퇂 퇃 퇄
+ 퇅 퇆 퇇 퇈 퇉 퇊 퇋 퇌 퇍 퇎 퇏 퇐 퇑 퇒 퇓 퇔 퇕 퇖 퇗 퇘
+ 퇙 퇚 퇛 퇜 퇝 퇞 퇟 퇠 퇡 퇢 퇣 퇤 퇥 퇦 퇧 퇨 퇩 퇪 퇫 퇬
+ 퇭 퇮 퇯 퇰 퇱 퇲 퇳 퇴 퇵 퇶 퇷 퇸 퇹 퇺 퇻 퇼 퇽 퇾 퇿 툀
+ 툁 툂 툃 툄 툅 툆 툇 툈 툉 툊 툋 툌 툍 툎 툏 툐 툑 툒 툓 툔
+ 툕 툖 툗 툘 툙 툚 툛 툜 툝 툞 툟 툠 툡 툢 툣 툤 툥 툦 툧 툨
+ 툩 툪 툫 투 툭 툮 툯 툰 툱 툲 툳 툴 툵 툶 툷 툸 툹 툺 툻 툼
+ 툽 툾 툿 퉀 퉁 퉂 퉃 퉄 퉅 퉆 퉇 퉈 퉉 퉊 퉋 퉌 퉍 퉎 퉏 퉐
+ 퉑 퉒 퉓 퉔 퉕 퉖 퉗 퉘 퉙 퉚 퉛 퉜 퉝 퉞 퉟 퉠 퉡 퉢 퉣 퉤
+ 퉥 퉦 퉧 퉨 퉩 퉪 퉫 퉬 퉭 퉮 퉯 퉰 퉱 퉲 퉳 퉴 퉵 퉶 퉷 퉸
+ 퉹 퉺 퉻 퉼 퉽 퉾 퉿 튀 튁 튂 튃 튄 튅 튆 튇 튈 튉 튊 튋 튌
+ 튍 튎 튏 튐 튑 튒 튓 튔 튕 튖 튗 튘 튙 튚 튛 튜 튝 튞 튟 튠
+ 튡 튢 튣 튤 튥 튦 튧 튨 튩 튪 튫 튬 튭 튮 튯 튰 튱 튲 튳 튴
+ 튵 튶 튷 트 특 튺 튻 튼 튽 튾 튿 틀 틁 틂 틃 틄 틅 틆 틇 틈
+ 틉 틊 틋 틌 틍 틎 틏 틐 틑 틒 틓 틔 틕 틖 틗 틘 틙 틚 틛 틜
+ 틝 틞 틟 틠 틡 틢 틣 틤 틥 틦 틧 틨 틩 틪 틫 틬 틭 틮 틯 티
+ 틱 틲 틳 틴 틵 틶 틷 틸 틹 틺 틻 틼 틽 틾 틿 팀 팁 팂 팃 팄
+ 팅 팆 팇 팈 팉 팊 팋 파 팍 팎 팏 판 팑 팒 팓 팔 팕 팖 팗 팘
+ 팙 팚 팛 팜 팝 팞 팟 팠 팡 팢 팣 팤 팥 팦 팧 패 팩 팪 팫 팬
+ 팭 팮 팯 팰 팱 팲 팳 팴 팵 팶 팷 팸 팹 팺 팻 팼 팽 팾 팿 퍀
+ 퍁 퍂 퍃 퍄 퍅 퍆 퍇 퍈 퍉 퍊 퍋 퍌 퍍 퍎 퍏 퍐 퍑 퍒 퍓 퍔
+ 퍕 퍖 퍗 퍘 퍙 퍚 퍛 퍜 퍝 퍞 퍟 퍠 퍡 퍢 퍣 퍤 퍥 퍦 퍧 퍨
+ 퍩 퍪 퍫 퍬 퍭 퍮 퍯 퍰 퍱 퍲 퍳 퍴 퍵 퍶 퍷 퍸 퍹 퍺 퍻 퍼
+ 퍽 퍾 퍿 펀 펁 펂 펃 펄 펅 펆 펇 펈 펉 펊 펋 펌 펍 펎 펏 펐
+ 펑 펒 펓 펔 펕 펖 펗 페 펙 펚 펛 펜 펝 펞 펟 펠 펡 펢 펣 펤
+ 펥 펦 펧 펨 펩 펪 펫 펬 펭 펮 펯 펰 펱 펲 펳 펴 펵 펶 펷 편
+ 펹 펺 펻 펼 펽 펾 펿 폀 폁 폂 폃 폄 폅 폆 폇 폈 평 폊 폋 폌
+ 폍 폎 폏 폐 폑 폒 폓 폔 폕 폖 폗 폘 폙 폚 폛 폜 폝 폞 폟 폠
+ 폡 폢 폣 폤 폥 폦 폧 폨 폩 폪 폫 포 폭 폮 폯 폰 폱 폲 폳 폴
+ 폵 폶 폷 폸 폹 폺 폻 폼 폽 폾 폿 퐀 퐁 퐂 퐃 퐄 퐅 퐆 퐇 퐈
+ 퐉 퐊 퐋 퐌 퐍 퐎 퐏 퐐 퐑 퐒 퐓 퐔 퐕 퐖 퐗 퐘 퐙 퐚 퐛 퐜
+ 퐝 퐞 퐟 퐠 퐡 퐢 퐣 퐤 퐥 퐦 퐧 퐨 퐩 퐪 퐫 퐬 퐭 퐮 퐯 퐰
+ 퐱 퐲 퐳 퐴 퐵 퐶 퐷 퐸 퐹 퐺 퐻 퐼 퐽 퐾 퐿 푀 푁 푂 푃 푄
+ 푅 푆 푇 푈 푉 푊 푋 푌 푍 푎 푏 푐 푑 푒 푓 푔 푕 푖 푗 푘
+ 푙 푚 푛 표 푝 푞 푟 푠 푡 푢 푣 푤 푥 푦 푧 푨 푩 푪 푫 푬
+ 푭 푮 푯 푰 푱 푲 푳 푴 푵 푶 푷 푸 푹 푺 푻 푼 푽 푾 푿 풀
+ 풁 풂 풃 풄 풅 풆 풇 품 풉 풊 풋 풌 풍 풎 풏 풐 풑 풒 풓 풔
+ 풕 풖 풗 풘 풙 풚 풛 풜 풝 풞 풟 풠 풡 풢 풣 풤 풥 풦 풧 풨
+ 풩 풪 풫 풬 풭 풮 풯 풰 풱 풲 풳 풴 풵 풶 풷 풸 풹 풺 풻 풼
+ 풽 풾 풿 퓀 퓁 퓂 퓃 퓄 퓅 퓆 퓇 퓈 퓉 퓊 퓋 퓌 퓍 퓎 퓏 퓐
+ 퓑 퓒 퓓 퓔 퓕 퓖 퓗 퓘 퓙 퓚 퓛 퓜 퓝 퓞 퓟 퓠 퓡 퓢 퓣 퓤
+ 퓥 퓦 퓧 퓨 퓩 퓪 퓫 퓬 퓭 퓮 퓯 퓰 퓱 퓲 퓳 퓴 퓵 퓶 퓷 퓸
+ 퓹 퓺 퓻 퓼 퓽 퓾 퓿 픀 픁 픂 픃 프 픅 픆 픇 픈 픉 픊 픋 플
+ 픍 픎 픏 픐 픑 픒 픓 픔 픕 픖 픗 픘 픙 픚 픛 픜 픝 픞 픟 픠
+ 픡 픢 픣 픤 픥 픦 픧 픨 픩 픪 픫 픬 픭 픮 픯 픰 픱 픲 픳 픴
+ 픵 픶 픷 픸 픹 픺 픻 피 픽 픾 픿 핀 핁 핂 핃 필 핅 핆 핇 핈
+ 핉 핊 핋 핌 핍 핎 핏 핐 핑 핒 핓 핔 핕 핖 핗 하 학 핚 핛 한
+ 핝 핞 핟 할 핡 핢 핣 핤 핥 핦 핧 함 합 핪 핫 핬 항 핮 핯 핰
+ 핱 핲 핳 해 핵 핶 핷 핸 핹 핺 핻 핼 핽 핾 핿 햀 햁 햂 햃 햄
+ 햅 햆 햇 했 행 햊 햋 햌 햍 햎 햏 햐 햑 햒 햓 햔 햕 햖 햗 햘
+ 햙 햚 햛 햜 햝 햞 햟 햠 햡 햢 햣 햤 향 햦 햧 햨 햩 햪 햫 햬
+ 햭 햮 햯 햰 햱 햲 햳 햴 햵 햶 햷 햸 햹 햺 햻 햼 햽 햾 햿 헀
+ 헁 헂 헃 헄 헅 헆 헇 허 헉 헊 헋 헌 헍 헎 헏 헐 헑 헒 헓 헔
+ 헕 헖 헗 험 헙 헚 헛 헜 헝 헞 헟 헠 헡 헢 헣 헤 헥 헦 헧 헨
+ 헩 헪 헫 헬 헭 헮 헯 헰 헱 헲 헳 헴 헵 헶 헷 헸 헹 헺 헻 헼
+ 헽 헾 헿 혀 혁 혂 혃 현 혅 혆 혇 혈 혉 혊 혋 혌 혍 혎 혏 혐
+ 협 혒 혓 혔 형 혖 혗 혘 혙 혚 혛 혜 혝 혞 혟 혠 혡 혢 혣 혤
+ 혥 혦 혧 혨 혩 혪 혫 혬 혭 혮 혯 혰 혱 혲 혳 혴 혵 혶 혷 호
+ 혹 혺 혻 혼 혽 혾 혿 홀 홁 홂 홃 홄 홅 홆 홇 홈 홉 홊 홋 홌
+ 홍 홎 홏 홐 홑 홒 홓 화 확 홖 홗 환 홙 홚 홛 활 홝 홞 홟 홠
+ 홡 홢 홣 홤 홥 홦 홧 홨 황 홪 홫 홬 홭 홮 홯 홰 홱 홲 홳 홴
+ 홵 홶 홷 홸 홹 홺 홻 홼 홽 홾 홿 횀 횁 횂 횃 횄 횅 횆 횇 횈
+ 횉 횊 횋 회 획 횎 횏 횐 횑 횒 횓 횔 횕 횖 횗 횘 횙 횚 횛 횜
+ 횝 횞 횟 횠 횡 횢 횣 횤 횥 횦 횧 효 횩 횪 횫 횬 횭 횮 횯 횰
+ 횱 횲 횳 횴 횵 횶 횷 횸 횹 횺 횻 횼 횽 횾 횿 훀 훁 훂 훃 후
+ 훅 훆 훇 훈 훉 훊 훋 훌 훍 훎 훏 훐 훑 훒 훓 훔 훕 훖 훗 훘
+ 훙 훚 훛 훜 훝 훞 훟 훠 훡 훢 훣 훤 훥 훦 훧 훨 훩 훪 훫 훬
+ 훭 훮 훯 훰 훱 훲 훳 훴 훵 훶 훷 훸 훹 훺 훻 훼 훽 훾 훿 휀
+ 휁 휂 휃 휄 휅 휆 휇 휈 휉 휊 휋 휌 휍 휎 휏 휐 휑 휒 휓 휔
+ 휕 휖 휗 휘 휙 휚 휛 휜 휝 휞 휟 휠 휡 휢 휣 휤 휥 휦 휧 휨
+ 휩 휪 휫 휬 휭 휮 휯 휰 휱 휲 휳 휴 휵 휶 휷 휸 휹 휺 휻 휼
+ 휽 휾 휿 흀 흁 흂 흃 흄 흅 흆 흇 흈 흉 흊 흋 흌 흍 흎 흏 흐
+ 흑 흒 흓 흔 흕 흖 흗 흘 흙 흚 흛 흜 흝 흞 흟 흠 흡 흢 흣 흤
+ 흥 흦 흧 흨 흩 흪 흫 희 흭 흮 흯 흰 흱 흲 흳 흴 흵 흶 흷 흸
+ 흹 흺 흻 흼 흽 흾 흿 힀 힁 힂 힃 힄 힅 힆 힇 히 힉 힊 힋 힌
+ 힍 힎 힏 힐 힑 힒 힓 힔 힕 힖 힗 힘 힙 힚 힛 힜 힝 힞 힟 힠
+ 힡 힢 힣 힤 힥 힦 힧 힨 힩 힪 힫 힬 힭 힮 힯 ힰ ힱ ힲ ힳ ힴ
+ ힵ ힶ ힷ ힸ ힹ ힺ ힻ ힼ ힽ ힾ ힿ ퟀ ퟁ ퟂ ퟃ ퟄ ퟅ ퟆ ퟇ ퟈
+ ퟉ ퟊ ퟋ ퟌ ퟍ ퟎ ퟏ ퟐ ퟑ ퟒ ퟓ ퟔ ퟕ ퟖ ퟗ ퟘ ퟙ ퟚ ퟛ ퟜ
+ ퟝ ퟞ ퟟ ퟠ ퟡ ퟢ ퟣ ퟤ ퟥ ퟦ ퟧ ퟨ ퟩ ퟪ ퟫ ퟬ ퟭ ퟮ ퟯ ퟰ
+ ퟱ ퟲ ퟳ ퟴ ퟵ ퟶ ퟷ ퟸ ퟹ ퟺ ퟻ ퟼ ퟽ ퟾ ퟿                 
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+                    
+    豈 更 車 賈 滑 串 句 龜 龜 契 金 喇 奈 懶 癩 羅 蘿
+ 螺 裸 邏 樂 洛 烙 珞 落 酪 駱 亂 卵 欄 爛 蘭 鸞 嵐 濫 藍 襤
+ 拉 臘 蠟 廊 朗 浪 狼 郎 來 冷 勞 擄 櫓 爐 盧 老 蘆 虜 路 露
+ 魯 鷺 碌 祿 綠 菉 錄 鹿 論 壟 弄 籠 聾 牢 磊 賂 雷 壘 屢 樓
+ 淚 漏 累 縷 陋 勒 肋 凜 凌 稜 綾 菱 陵 讀 拏 樂 諾 丹 寧 怒
+ 率 異 北 磻 便 復 不 泌 數 索 參 塞 省 葉 說 殺 辰 沈 拾 若
+ 掠 略 亮 兩 凉 梁 糧 良 諒 量 勵 呂 女 廬 旅 濾 礪 閭 驪 麗
+ 黎 力 曆 歷 轢 年 憐 戀 撚 漣 煉 璉 秊 練 聯 輦 蓮 連 鍊 列
+ 劣 咽 烈 裂 說 廉 念 捻 殮 簾 獵 令 囹 寧 嶺 怜 玲 瑩 羚 聆
+ 鈴 零 靈 領 例 禮 醴 隸 惡 了 僚 寮 尿 料 樂 燎 療 蓼 遼 龍
+ 暈 阮 劉 杻 柳 流 溜 琉 留 硫 紐 類 六 戮 陸 倫 崙 淪 輪 律
+ 慄 栗 率 隆 利 吏 履 易 李 梨 泥 理 痢 罹 裏 裡 里 離 匿 溺
+ 吝 燐 璘 藺 隣 鱗 麟 林 淋 臨 立 笠 粒 狀 炙 識 什 茶 刺 切
+ 度 拓 糖 宅 洞 暴 輻 行 降 見 廓 兀 嗀 﨎 﨏 塚 﨑 晴 﨓 﨔
+ 凞 猪 益 礼 神 祥 福 靖 精 羽 﨟 蘒 﨡 諸 﨣 﨤 逸 都 﨧 﨨
+ 﨩 飯 飼 館 鶴 郞 隷 侮 僧 免 勉 勤 卑 喝 嘆 器 塀 墨 層 屮
+ 悔 慨 憎 懲 敏 既 暑 梅 海 渚 漢 煮 爫 琢 碑 社 祉 祈 祐 祖
+ 祝 禍 禎 穀 突 節 練 縉 繁 署 者 臭 艹 艹 著 褐 視 謁 謹 賓
+ 贈 辶 逸 難 響 頻 恵 𤋮 舘 﩮 﩯 並 况 全 侀 充 冀 勇 勺 喝
+ 啕 喙 嗢 塚 墳 奄 奔 婢 嬨 廒 廙 彩 徭 惘 慎 愈 憎 慠 懲 戴
+ 揄 搜 摒 敖 晴 朗 望 杖 歹 殺 流 滛 滋 漢 瀞 煮 瞧 爵 犯 猪
+ 瑱 甆 画 瘝 瘟 益 盛 直 睊 着 磌 窱 節 类 絛 練 缾 者 荒 華
+ 蝹 襁 覆 視 調 諸 請 謁 諾 諭 謹 變 贈 輸 遲 醙 鉶 陼 難 靖
+ 韛 響 頋 頻 鬒 龜 𢡊 𢡄 𣏕 㮝 䀘 䀹 𥉉 𥳐 𧻓 齃 龎 﫚 﫛 﫜
+ 﫝 﫞 﫟 﫠 﫡 﫢 﫣 﫤 﫥 﫦 﫧 﫨 﫩 﫪 﫫 﫬 﫭 﫮 﫯 﫰
+ 﫱 﫲 﫳 﫴 﫵 﫶 﫷 﫸 﫹 﫺 﫻 﫼 﫽 﫾 﫿 ff fi fl ffi ffl
+ ſt st ﬇ ﬈ ﬉ ﬊ ﬋ ﬌ ﬍ ﬎ ﬏ ﬐ ﬑ ﬒ ﬓ ﬔ ﬕ ﬖ ﬗ ﬘
+ ﬙ ﬚ ﬛ ﬜ יִ ﬞ ײַ ﬠ ﬡ ﬢ ﬣ ﬤ ﬥ ﬦ ﬧ ﬨ ﬩ שׁ שׂ שּׁ
+ שּׂ אַ אָ אּ בּ גּ דּ הּ וּ זּ ﬷ טּ יּ ךּ כּ לּ ﬽ מּ ﬿ נּ
+ סּ ﭂ ףּ פּ ﭅ צּ קּ רּ שּ תּ וֹ בֿ כֿ פֿ ﭏ ﭐ ﭑ ﭒ ﭓ ﭔ
+ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ
+ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ
+ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ
+ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ
+ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﮲ ﮳ ﮴ ﮵ ﮶ ﮷ ﮸
+ ﮹ ﮺ ﮻ ﮼ ﮽ ﮾ ﮿ ﯀ ﯁ ﯂ ﯃ ﯄ ﯅ ﯆ ﯇ ﯈ ﯉ ﯊ ﯋ ﯌
+ ﯍ ﯎ ﯏ ﯐ ﯑ ﯒ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ
+ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯪ ﯫ ﯬ ﯭ ﯮ ﯯ ﯰ ﯱ ﯲ ﯳ ﯴ
+ ﯵ ﯶ ﯷ ﯸ ﯹ ﯺ ﯻ ﯼ ﯽ ﯾ ﯿ ﰀ ﰁ ﰂ ﰃ ﰄ ﰅ ﰆ ﰇ ﰈ
+ ﰉ ﰊ ﰋ ﰌ ﰍ ﰎ ﰏ ﰐ ﰑ ﰒ ﰓ ﰔ ﰕ ﰖ ﰗ ﰘ ﰙ ﰚ ﰛ ﰜ
+ ﰝ ﰞ ﰟ ﰠ ﰡ ﰢ ﰣ ﰤ ﰥ ﰦ ﰧ ﰨ ﰩ ﰪ ﰫ ﰬ ﰭ ﰮ ﰯ ﰰ
+ ﰱ ﰲ ﰳ ﰴ ﰵ ﰶ ﰷ ﰸ ﰹ ﰺ ﰻ ﰼ ﰽ ﰾ ﰿ ﱀ ﱁ ﱂ ﱃ ﱄ
+ ﱅ ﱆ ﱇ ﱈ ﱉ ﱊ ﱋ ﱌ ﱍ ﱎ ﱏ ﱐ ﱑ ﱒ ﱓ ﱔ ﱕ ﱖ ﱗ ﱘ
+ ﱙ ﱚ ﱛ ﱜ ﱝ ﱞ ﱟ ﱠ ﱡ ﱢ ﱣ ﱤ ﱥ ﱦ ﱧ ﱨ ﱩ ﱪ ﱫ ﱬ
+ ﱭ ﱮ ﱯ ﱰ ﱱ ﱲ ﱳ ﱴ ﱵ ﱶ ﱷ ﱸ ﱹ ﱺ ﱻ ﱼ ﱽ ﱾ ﱿ ﲀ
+ ﲁ ﲂ ﲃ ﲄ ﲅ ﲆ ﲇ ﲈ ﲉ ﲊ ﲋ ﲌ ﲍ ﲎ ﲏ ﲐ ﲑ ﲒ ﲓ ﲔ
+ ﲕ ﲖ ﲗ ﲘ ﲙ ﲚ ﲛ ﲜ ﲝ ﲞ ﲟ ﲠ ﲡ ﲢ ﲣ ﲤ ﲥ ﲦ ﲧ ﲨ
+ ﲩ ﲪ ﲫ ﲬ ﲭ ﲮ ﲯ ﲰ ﲱ ﲲ ﲳ ﲴ ﲵ ﲶ ﲷ ﲸ ﲹ ﲺ ﲻ ﲼ
+ ﲽ ﲾ ﲿ ﳀ ﳁ ﳂ ﳃ ﳄ ﳅ ﳆ ﳇ ﳈ ﳉ ﳊ ﳋ ﳌ ﳍ ﳎ ﳏ ﳐ
+ ﳑ ﳒ ﳓ ﳔ ﳕ ﳖ ﳗ ﳘ ﳙ ﳚ ﳛ ﳜ ﳝ ﳞ ﳟ ﳠ ﳡ ﳢ ﳣ ﳤ
+ ﳥ ﳦ ﳧ ﳨ ﳩ ﳪ ﳫ ﳬ ﳭ ﳮ ﳯ ﳰ ﳱ ﳲ ﳳ ﳴ ﳵ ﳶ ﳷ ﳸ
+ ﳹ ﳺ ﳻ ﳼ ﳽ ﳾ ﳿ ﴀ ﴁ ﴂ ﴃ ﴄ ﴅ ﴆ ﴇ ﴈ ﴉ ﴊ ﴋ ﴌ
+ ﴍ ﴎ ﴏ ﴐ ﴑ ﴒ ﴓ ﴔ ﴕ ﴖ ﴗ ﴘ ﴙ ﴚ ﴛ ﴜ ﴝ ﴞ ﴟ ﴠ
+ ﴡ ﴢ ﴣ ﴤ ﴥ ﴦ ﴧ ﴨ ﴩ ﴪ ﴫ ﴬ ﴭ ﴮ ﴯ ﴰ ﴱ ﴲ ﴳ ﴴ
+ ﴵ ﴶ ﴷ ﴸ ﴹ ﴺ ﴻ ﴼ ﴽ ﴾ ﴿ ﵀ ﵁ ﵂ ﵃ ﵄ ﵅ ﵆ ﵇ ﵈
+ ﵉ ﵊ ﵋ ﵌ ﵍ ﵎ ﵏ ﵐ ﵑ ﵒ ﵓ ﵔ ﵕ ﵖ ﵗ ﵘ ﵙ ﵚ ﵛ ﵜ
+ ﵝ ﵞ ﵟ ﵠ ﵡ ﵢ ﵣ ﵤ ﵥ ﵦ ﵧ ﵨ ﵩ ﵪ ﵫ ﵬ ﵭ ﵮ ﵯ ﵰ
+ ﵱ ﵲ ﵳ ﵴ ﵵ ﵶ ﵷ ﵸ ﵹ ﵺ ﵻ ﵼ ﵽ ﵾ ﵿ ﶀ ﶁ ﶂ ﶃ ﶄ
+ ﶅ ﶆ ﶇ ﶈ ﶉ ﶊ ﶋ ﶌ ﶍ ﶎ ﶏ ﶐ ﶑ ﶒ ﶓ ﶔ ﶕ ﶖ ﶗ ﶘ
+ ﶙ ﶚ ﶛ ﶜ ﶝ ﶞ ﶟ ﶠ ﶡ ﶢ ﶣ ﶤ ﶥ ﶦ ﶧ ﶨ ﶩ ﶪ ﶫ ﶬ
+ ﶭ ﶮ ﶯ ﶰ ﶱ ﶲ ﶳ ﶴ ﶵ ﶶ ﶷ ﶸ ﶹ ﶺ ﶻ ﶼ ﶽ ﶾ ﶿ ﷀ
+ ﷁ ﷂ ﷃ ﷄ ﷅ ﷆ ﷇ ﷈ ﷉ ﷊ ﷋ ﷌ ﷍ ﷎ ﷏ ﷰ ﷱ ﷲ ﷳ ﷴ ﷵ ﷶ ﷷ ﷸ ﷹ ﷺ ﷻ ﷼
+ ﷽ ﷾ ﷿ ︀ ︁ ︂ ︃ ︄ ︅ ︆ ︇ ︈ ︉ ︊ ︋ ︌ ︍ ︎ ️ ︐
+ ︑ ︒ ︓ ︔ ︕ ︖ ︗ ︘ ︙ ︚ ︛ ︜ ︝ ︞ ︟ ︠ ︡ ︢ ︣ ︤
+ ︥ ︦ ︧ ︨ ︩ ︪ ︫ ︬ ︭ ︮ ︯ ︰ ︱ ︲ ︳ ︴ ︵ ︶ ︷ ︸
+ ︹ ︺ ︻ ︼ ︽ ︾ ︿ ﹀ ﹁ ﹂ ﹃ ﹄ ﹅ ﹆ ﹇ ﹈ ﹉ ﹊ ﹋ ﹌
+ ﹍ ﹎ ﹏ ﹐ ﹑ ﹒ ﹓ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟ ﹠
+ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹧ ﹨ ﹩ ﹪ ﹫ ﹬ ﹭ ﹮ ﹯ ﹰ ﹱ ﹲ ﹳ ﹴ
+ ﹵ ﹶ ﹷ ﹸ ﹹ ﹺ ﹻ ﹼ ﹽ ﹾ ﹿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ
+ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ
+ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ
+ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ
+ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ
+ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ
+ ﻭ ﻮ ﻯ ﻰ ﻱ ﻲ ﻳ ﻴ ﻵ ﻶ ﻷ ﻸ ﻹ ﻺ ﻻ ﻼ ﻽ ﻾  ＀
+ ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4
+ 5 6 7 8 9 : ; < = > ? @ A B C D E F G H
+ I J K L M N O P Q R S T U V W X Y Z [ \
+ ] ^ _ ` a b c d e f g h i j k l m n o p
+ q r s t u v w x y z { | } ~ ⦅ ⦆ 。 「 」 、
+ ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ ー ア イ ウ エ オ カ キ ク
+ ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ
+ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゙ ゚ ᅠ
+ ᄀ ᄁ ᆪ ᄂ ᆬ ᆭ ᄃ ᄄ ᄅ ᆰ ᆱ ᆲ ᆳ ᆴ ᆵ ᄚ ᄆ ᄇ ᄈ ᄡ
+ ᄉ ᄊ ᄋ ᄌ ᄍ ᄎ ᄏ ᄐ ᄑ ᄒ ﾿ ￀ ￁ ᅡ ᅢ ᅣ ᅤ ᅥ ᅦ ￈
+ ￉ ᅧ ᅨ ᅩ ᅪ ᅫ ᅬ ￐ ￑ ᅭ ᅮ ᅯ ᅰ ᅱ ᅲ ￘ ￙ ᅳ ᅴ ᅵ
+ ￝ ￞ ￟ ¢ £ ¬  ̄ ¦ ¥ ₩ ￧ │ ← ↑ → ↓ ■ ○ ￯ ￰
+ ￱ ￲ ￳ ￴ ￵ ￶ ￷ ￸     �
diff --git a/tests/boundaries.utf8 b/tests/boundaries.utf8
new file mode 100755 (executable)
index 0000000..28782a8
--- /dev/null
@@ -0,0 +1,765 @@
+Testing sentence boundaries - this is a sentence ending in several exclamation points!!!    Several spaces there. Abbreviations such as Mr. or Mrs. should not result in sentence breaks, should they?! (Parentheses should be included in a sentence.) (((Even nested parentheses, with funny punctuation inside!!?!!...))) Anyhow, this should be enough testing.
+
+This text has carriage returns\r
+all over the \r\r\r\r freaking place \r\r
+\r\r\r such as here\rhere\rand \rhere\r
+\r     
+but not at the end of this line.
+
+This is some "quoted" text e.g. "this is some stuff in quotes" and 
+'this is some other stuff in single quotes' and ""this is some stuff with 
+two levels of double quotes"" and so on.
+
+Big string of Arabic:
+وقد بدأ ثلاث من أكثر المؤسسات تقدما في شبكة اكسيون برامجها كمنظمات لا تسعى للربح، ثم تحولت في السنوات الخمس الماضية إلى مؤسسات مالية منظمة، وباتت جزءا من النظام المالي في بلدانها، ولكنها تتخصص في خدمة قطاع المشروعات الصغيرة. وأحد أكثر هذه المؤسسات نجاحا هو »بانكوسول« في بوليفيا.
+
+
+Παν語
+
+This is a list of ways to say hello in various languages. Its purpose is to illustrate a number of scripts.
+
+(Converted into UTF-8)
+
+---------------------------------------------------------
+Arabic السلام عليكم 
+Bengali (বাঙ্লা)   ষাগতোম
+Burmese (မ္ရန္မာ)
+Cherokee       (ᏣᎳᎩ)     ᎣᏏᏲ
+Czech  (česky)        Dobrý den
+Danish (Dansk) Hej, Goddag
+English        Hello
+Esperanto      Saluton
+Estonian       Tere, Tervist
+FORTRAN        PROGRAM
+Finnish        (Suomi) Hei
+French (Français)     Bonjour, Salut
+German (Deutsch Nord)  Guten Tag
+German (Deutsch Süd)  Grüß Gott
+Georgian       (ქართველი)      გამარჯობა
+Gujarati     (ગુજરાતિ)
+Greek  (Ελληνικά)      Γειά σας
+Hebrew שלום
+Hindi  नमस्ते, नमस्कार।
+Italiano       Ciao, Buon giorno
+ɪŋglɪʃ       hɛləʊ
+Maltese        Ċaw, Saħħa
+Nederlands, Vlaams     Hallo, Dag
+Norwegian      (Norsk) Hei, God dag
+Punjabi     (ੁਪੁਂਜਾਬਿ)
+Polish Dzień dobry, Hej
+Russian        (Русский)        Здравствуйте!
+Slovak Dobrý deň
+Spanish        (Español)      ‎¡Hola!‎
+Swedish        (Svenska)       Hej, Goddag
+Thai   (ภาษาไทย) สวัสดีครับ, สวัสดีค่ะ
+Turkish        (Türkçe)      Merhaba
+Vietnamese     (Tiếng Việt)        Xin Chào
+Yiddish        (ײַדישע) דאָס הײַזעלע 
+
+Japanese       (日本語)     こんにちは, コンニチハ
+Chinese        (中文,普通话,汉语)       你好
+Cantonese      (粵語,廣東話)      早晨, 你好
+Korean (한글)        안녕하세요, 안녕하십니까
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:‎
+ GB    --      元气  开发
+ JIS   --      元気  開発
+ KSC   --      元氣  開發
+ BIG5  --      元氣  開發
+
+\r
+\rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r\r  ᅦ\r\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む ँ
+
ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r
+
\r
+ᆹ    
+\r
\r
          \r
+
\r
+
ँ 
+\r
+       
  
ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む

ᄀᅠᆨ깎렚ँ्က್⽔むᆩ က                      \r
+\r\r
+
 ᅠ         \r⽔   \r       
  ᄀᅠᆨ깎렚ँ्က್⽔む      
     \r\r\r\r\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r         \r
+   
ᅦ\r     \r
+        
\rᆹ ᄀᅠᆨ깎렚ँ्က್⽔むᅡ\r က
\r
+ᄅ

      
+ 
 
ᄀᅠᆨ깎렚ँ्က್⽔む

+
\r\r  
      \r
+\r
+ᆨ    
+
+ ᅡ \r ᆩ\r
+       
+ᄅ     
 \r\r
+
+\r
+\r\r\r
+       ⽔\r ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む
+
ᄀᅠᆨ깎렚ँ्က್⽔むᆹ     
+
+
+       
 
+
ᄀᅠᆨ깎렚ँ्က್⽔む
 \r\r\r
+\r
+ 
\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+  \r    ᅠ 
+
ᄀᅠᆨ깎렚ँ्က್⽔む       \r
+
+\r \r
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔む  ᄀ
+
    
     
\r
+\r\r
+\r 
\r \r
+         

+
ᄀᅠᆨ깎렚ँ्က್⽔む       ᄀᅠᆨ깎렚ँ्က್⽔む
\r\r
+
+
+\r 
ᄀᅠᆨ깎렚ँ्က್⽔む 
\r
+⽔
\r
+\r
+⽔
ᄀᅠᆨ깎렚ँ्က್⽔む             
    
     
ᄀᅠᆨ깎렚ँ्က್⽔む        

+        
+\r\r
+ᅠ\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+\r
 \r
+\r
ᆨ
+ ᆨ\r
+
 
+\r
+ ँ 
+       
\rᅦ्\rᄀᅠᆨ깎렚ँ्က್⽔む 
+\r
+\r
+
ँ 
+\r
   \r
+ᅠ\r
ᄀᅠᆨ깎렚ँ्က್⽔む   \r  ᅠ\r
+

ᄀᅠᆨ깎렚ँ्က್⽔む
+       \r
+       ᅦ
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+\r್ँ
\rᄀ 
\r \rᄀᅠᆨ깎렚ँ्က್⽔む್
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔む ᄅᄀᅠᆨ깎렚ँ्က್⽔む  
+ ᄀᅠᆨ깎렚ँ्က್⽔む 
+       \r
+
+ᅠ
+\rᄁ   
 
\rᆨᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r      むᆹ  
+\r
+ᆹ \r
+
\r
+
+
    
+        
+\r\r
+
+\rᄀᅠᆨ깎렚ँ्က್⽔む

 
+\r
+
    
       ᄀᅠᆨ깎렚ँ्က್⽔む
\r\r
+
+\r
+
+
+       
+
    ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+
+       ᄀᅠᆨ깎렚ँ्က್⽔む\r\r\r
+ᄀᅠᆨ깎렚ँ्က್⽔む \r
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む      \r
+\r
+\r
+ ᅠむ\r
+
\rᄀᅠᆨ깎렚ँ्က್⽔む              ᄀᅠᆨ깎렚ँ्က್⽔む
+\r
+\r
+
+\r
+\r
+\r 
+\r
\r     \r
+
\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+\r      \r 

+ᆩ
+ᅠ 
+
 
ᄀᅠᆨ깎렚ँ्က್⽔む \r
+ᄀᅠᆨ깎렚ँ्က್⽔むむ ᄀᅠᆨ깎렚ँ्က್⽔む \r
+
+್    \r
+\r
+ᅡ\r
+က\rᅠ        ᄀᅠᆨ깎렚ँ्က್⽔む\rᄀᅠᆨ깎렚ँ्က್⽔む\r
+
+
+ँᅦ
\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む
ᄀँᄀᅠᆨ깎렚ँ्က್⽔む \r
+
 ᄀᄀᅠᆨ깎렚ँ्က್⽔む           
\r 

      ᄀᅠᆨ깎렚ँ्က್⽔む ᆨᅦ
+
 ᄀᅠᆨ깎렚ँ्က್⽔む              \r
+ 
  
ᄀᅠᆨ깎렚ँ्က್⽔む
+
+
+\r    \r
+
+
ᅠ\r\r ᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
 \r\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+   \r
+
+\r\rᄀᅠᆨ깎렚ँ्က್⽔む्\r
+
\rँ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r     
+ᆨ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む
+
्  ᄁ     

+\r
+\rᄀᅠᆨ깎렚ँ्က್⽔む \r
+
    ᄀᅠᆨ깎렚ँ्က್⽔む   ್\r
\rᄀᅠᆨ깎렚ँ्က್⽔む\r
+   
+  \rᄀᅠᆨ깎렚ँ्က್⽔む
+        \rᄀᅠᆨ깎렚ँ्က್⽔む         
ᄀᅠᆨ깎렚ँ्က್⽔む                
+
ᄀᅠᆨ깎렚ँ्က್⽔む
\r
+       ᄀᅠᆨ깎렚ँ्က್⽔む
+ँ 
+        \r \r
+ᄀᄅ 
+ᄀ ᅡ\r
+ँ\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+
+\r
+       \rᅦ ᄀᅠᆨ깎렚ँ्က್⽔む
+ ್\r
+        
+\r      
+

+ᅠ
+
ᄀᅠᆨ깎렚ँ्က್⽔む\r ᄅ 
      \r\r
\r
+       
+       
+

+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む\r
\r
+
+ᄀ\r
+\r
+ᆩ  \rᆩ 
+  \r
+       \r⽔ᆩ
+ᅡ\r
+
    
+ᄀᅠᆨ깎렚ँ्က್⽔む  
ᄀᅠᆨ깎렚ँ्က್⽔むᅦ     \r
+\r
+ᄀ
\r        
     ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+ ᄀᅠᆨ깎렚ँ्က್⽔む         ᄀ
+   ᄀ
      \r
+\r
+       \r
+\r      むᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む \r
+\r
+\r
   \r       \r
+\r
+\rᆹᅠ         
+   ्\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む\r
ᅠ  \r
+
+\r
+
+\r\r
+  ᄀᅠᆨ깎렚ँ्က್⽔む \rᄀᅠᆨ깎렚ँ्က್⽔む
+ᄀᅠᆨ깎렚ँ्က್⽔む  ᄀᅠᆨ깎렚ँ्က್⽔む\r
+्\r
+       \r\r
+       \r 
    \r
+
  \rᅡ 
\rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+\r 
+\r       \r
+ᄅ
 \r
+
+ᄀᅠᆨ깎렚ँ्က್⽔む
+   ᄀᅠᆨ깎렚ँ्က್⽔む
+\r
+       
+\r\rᄀᅠᆨ깎렚ँ्က್⽔む 

+\r
+ᅡᄀᅠᆨ깎렚ँ्က್⽔む\r
+

+
 

+\r
+\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む   ᄀᅠᆨ깎렚ँ्က್⽔む   က   \r
+\rᄀᅠᆨ깎렚ँ्က್⽔む   ್ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ ँᄀᅠᆨ깎렚ँ्က್⽔む
\r
+\r  \r
+\r
+ᄀ
+ ᆹᄅ        
+\r
+  ᄀᅠᆨ깎렚ँ्က್⽔む\r
+  
+ᄀᅠᆨ깎렚ँ्က್⽔む
+
 ᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+्    
+
+   む
+
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r
ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む

+  \r
+\r\r
+  
+ᄀᅠᆨ깎렚ँ्က್⽔む \r         
+\r
\rᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+\r\r
+
ᄀᅠᆨ깎렚ँ्က್⽔む
+
+
 ᄀᅠᆨ깎렚ँ्က್⽔む
+む\r   \r\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᅦ \r
+ᄀᅠᆨ깎렚ँ्က್⽔む
         

+
+       

ᄀᅠᆨ깎렚ँ्က್⽔む 
\rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む ್
+ ᅦက ᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r
+  ᄀᅠᆨ깎렚ँ्က್⽔む         ᄀᅠᆨ깎렚ँ्က್⽔む \r
+ᄀᅠᆨ깎렚ँ्က್⽔む  \r
+
    ँ\r
\r
+\r
+
 
 
+ ᄀᅠᆨ깎렚ँ्က್⽔む\r 
\r
+
+ᅡ
+ᄀᅠᆨ깎렚ँ्က್⽔む

+ᄀᅠᆨ깎렚ँ्က್⽔む
\r
+       ᄀᅠᆨ깎렚ँ्က್⽔む \r\r
\rँᄀᅠᆨ깎렚ँ्က್⽔む      
\r
+್  \r ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む              
+
     
    
+्    ्
  \r\r
+\r
+
+       \r
+   ᄀᅠᆨ깎렚ँ्က್⽔む\r
\r
+

+\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む 
 
+       
 
 ᄀᅠᆨ깎렚ँ्က್⽔む   \r
+ᅠ
+\r
+
+
ᄀᅠᆨ깎렚ँ्က್⽔む
 ⽔ᅦᄁ \r        \r
+
က\r
+\r      
\rᄅᄀᅠᆨ깎렚ँ्က್⽔む\r\r  ್⽔          
+\r
+\r\r
+ むँ        ⽔ 
+\r
+\r
+

+\r
+
+  ್  \r\r
+\rᄀᅠᆨ깎렚ँ्က್⽔む\rᅡ                     ᄀᅠᆨ깎렚ँ्က್⽔むᄅ \r
\r
+ᅡ    \r ्

+
\r
+
+ᄀᅠᆨ깎렚ँ्က್⽔む
       
+       \rᄀᅠᆨ깎렚ँ्က್⽔む  

\r
+ᄀᅠᆨ깎렚ँ्က್⽔むँ\r
+ᄁᄀᅠᆨ깎렚ँ्က್⽔む
 む        ᅦᄀᅠᆨ깎렚ँ्က್⽔む
+       \r
+ᄁ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む   \r     ᄀ     
+्\r⽔ᄀ\r
+\r
+\r
+ ್ ᄀᅠᆨ깎렚ँ्က್⽔む
+ᄀᅠᆨ깎렚ँ्က್⽔む 
+\r
+\r\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᆹ ᆨ 
+        ᄀᅠᆨ깎렚ँ्က್⽔む\r
+
    \r
+ᅦᆹᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r
+

 ᄀ\r
+\rᄀᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔むむᄀᄀᅠᆨ깎렚ँ्က್⽔む್  \r
\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+  \r
+       
 ᄀᅠᆨ깎렚ँ्က್⽔む
्
ᄀᅠᆨ깎렚ँ्က್⽔むᅠᄀᅠᆨ깎렚ँ्က್⽔むᄀ
\r                  ँ   \r
+ᄀᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む್       ᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+ 


+\r
\r
+  ᄀᅠᆨ깎렚ँ्က್⽔む  ᄀᅠᆨ깎렚ँ्က್⽔むᅠ\r
+       
     \r
+\r
+\r
+   
+
    む  ᄀᅠᆨ깎렚ँ्က್⽔む      ᅦ             
က
        \r
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むむ 
 \r
+्
\r
+ 
    ᅠ     
+
+\r
   ᄀᅠᆨ깎렚ँ्က್⽔む   
+\r
+ 

ᄅ
+\rᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む 
+
+ᅠ    ᅠ     

+\r
+       
 \r      ᄀᅠᆨ깎렚ँ्က್⽔む        \r
+        
+  \rက
  
ᅠ
+\r ᄅ  ᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+               
+⽔む
+ᅦ\r
+\rᄀᅠᆨ깎렚ँ्က್⽔む
\r\r
+\r
+\r
+\rᄀᅠᆨ깎렚ँ्က್⽔むက
\r ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む್\r
+       ᄀᅠᆨ깎렚ँ्က್⽔む್

+       ᆩ\r
+ᆨ
+
\r
+

+\r
+\r

\r ᄀᅠᆨ깎렚ँ्က್⽔む
ᄀᅠᆨ깎렚ँ्က್⽔む
+ᅠ  \r         
+
+\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄅ \r\r
+က ᄀᅠᆨ깎렚ँ्က್⽔む
+್ 

\rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r  \r
+む ᄀᅠᆨ깎렚ँ्က್⽔むᄅᄀᅠᆨ깎렚ँ्က್⽔む
\r
+ ᆩ     \r
+\r
+\r \r
ᆨ्
        \r
+
\rᄀᅠᆨ깎렚ँ्က್⽔む

+
ᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r\r् 


\r
+\r \r            ᅦ 

\r
+\r
+
\r
+ ᆨ\r
+       
+\r
+       \r
+\r      \r \r
+ᄀᅠᆨ깎렚ँ्က್⽔む  む\r
+\r

\r
+
ᆹ\r 
\r\r 
\r
+ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
         
+\r\r
+
\r   
     \r 
\r
\rᄀᅠᆨ깎렚ँ्က್⽔む\r\r \r\rँ ᄀᅠᆨ깎렚ँ्က್⽔む  \r
+
\r
+
+ᄀᅠᆨ깎렚ँ्က್⽔む
+       
+\r
+
  
+⽔्\r  
+  ᄀᅠᆨ깎렚ँ्က್⽔む\r
+
+
     
ᅠᄀᅠᆨ깎렚ँ्က್⽔む
+
ᄁ\rᄀᅠᆨ깎렚ँ्က್⽔む
                ⽔ 
+ 

+
ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r  ᄀᅠᆨ깎렚ँ्က್⽔む                  \r
+       \r
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+⽔ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む
+ ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄀᅠᆨ깎렚ँ्က್⽔む

+
\r\r
 ᄅ
         ᄀ 
\r         \r\r
+ᄅ \rᄀᅠᆨ깎렚ँ्က್⽔む \r\r   
+ᄁ    \r
 
ᄁ
+ᄀᅠᆨ깎렚ँ्က್⽔む\r
+       
 
+       
+
+ᄁ    \r
\r
+
+  
   \r
+\r ကᄀ
\r\r\r
+        ᅦ\r
+
+       ᅡ     
+\r
+ 

\r
+\r
+\r
+ ँ ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む
+\r      ᄀᅠᆨ깎렚ँ्က್⽔む   
್

    
+ᅠ ᄀᅠᆨ깎렚ँ्က್⽔む      
+\r
+\r \r \r
+\r
+\r
+ ᄀᅠᆨ깎렚ँ्က್⽔む
\r
+

+
+

 ᅡᅦ    \r\r 
 ᄀᅠᆨ깎렚ँ्က್⽔む
\r
+         ᄀᅠᆨ깎렚ँ्က್⽔む
+       \r
+む\r
+
+
+   ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r 

ᆩ\r \r\r
+
+\r\r
+  ᄀᅠᆨ깎렚ँ्က್⽔む\r       ᆨ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄅ    \r
+\r
+ᆨ
 
      
+
+
むᄀᅠᆨ깎렚ँ्က್⽔む
 ᄀᅠᆨ깎렚ँ्က್⽔む   ⽔     \r ⽔   
+
+ᄀ
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+\r
+  
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\r    \rᆨ    \r \r⽔ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+むᄀᅠᆨ깎렚ँ्က್⽔む
 ᄀᄀ 
+ᅠ            
+ᆨ\r\r
+ 
  \r
+
+
+ᆩ\r \r\r\r ᄀᅠᆨ깎렚ँ्က್⽔む⽔
ᅡ
\r    
     
+  
  
\r\r\r
+\r\rᄅ    
+\rᄀᅠᆨ깎렚ँ्က್⽔む
+ᆩ\r
+       ᄅ     ᆹ     ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む्\r
+
    
\r
+
+ 
ᄀᅠᆨ깎렚ँ्က್⽔む \r
+\r
+\r\r\r    \r\rကᄀᅠᆨ깎렚ँ्က್⽔むᄀ   ᅠ\r
+\r\r
+ᄀᅠᆨ깎렚ँ्က್⽔むᆩ\r
+       

+

+ᆨᄅ         
+ᄅ    \r
+\rᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む    \r\r \r   
\r
+               \r
+
 \r
+ 
ᄀᅠᆨ깎렚ँ्က್⽔むᄅ\r
+
+ᄀᅠᆨ깎렚ँ्က್⽔む
+       \r
+ᅠ 
\rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+\r
+

+က
+       
ᄀᅠᆨ깎렚ँ्က್⽔む          ᄀᅠᆨ깎렚ँ्က್⽔む\r
+\r
+\r\r
+       \rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+       

  \rᄀᅠᆨ깎렚ँ्က್⽔むᅦ\r
   
ᄀᅠᆨ깎렚ँ्က್⽔む\r\r   
+ᄀᅠᆨ깎렚ँ्က್⽔む
+
   ँ      
+ᆨ  \rᄀ ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む   
+         
  \r
+ᅡ \r
+    \r\r
+ᆨ ᄀᅠᆨ깎렚ँ्က್⽔むむ   က\r
+\rᆹ           ᅡ     
\r
\r
+ँ\r

     ँᄀᅠᆨ깎렚ँ्က್⽔む\r\r
+
+   \r
+
+ᄀ  \r
+ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む む         
+\rँᄀᅠᆨ깎렚ँ्က್⽔む
+ᆩᄀᅠᆨ깎렚ँ्က್⽔む       
+\r
+                ्  
+  ᄀᅠᆨ깎렚ँ्က್⽔む \r
+ᆩᄀᅠᆨ깎렚ँ्က್⽔む\r 
+
\r
+ᅦ\r
+ 
 \r
+
     
+
+\r
+
\r
+\r
+  \r\r ᄀᅠᆨ깎렚ँ्က್⽔む
+\r\r
+\r\r
+ ्    \r ᄅ
 ᄁ 


ᄀᅠᆨ깎렚ँ्က್⽔むᄅ\r
+       \r       ᄀᅠᆨ깎렚ँ्က್⽔む \r\r ् ᄁ\rᅡ  ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔むᄅ
+ᄀᅠᆨ깎렚ँ्က್⽔むᆨ \rᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む\rᄀᅠᆨ깎렚ँ्က್⽔む
+               む
ᄀᅠᆨ깎렚ँ्က್⽔む
+  \r
\r\r\r\r
ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ ᄅ ᅠ\r
+ᄀᅠᆨ깎렚ँ्က್⽔む \r
+\r
+  \r
+\r
\r\r
+\r\r     \r
+       
\r
+\r        ᅦᄀᅠᆨ깎렚ँ्က್⽔む
+       \r
+       \rᄀᅠᆨ깎렚ँ्က್⽔む          ᄅ     \r
+\r
+\r\r
+ᄀᅠᆨ깎렚ँ्က್⽔む \r
+  
ᄀᅠᆨ깎렚ँ्က್⽔む\r
+
್ᄀᅠᆨ깎렚ँ्က್⽔む
+       
+\r
+  ್ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む \r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+
    ᄀ\r     ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む \r\r
+\r
 \r  \r
+\rᄀᅠᆨ깎렚ँ्က್⽔む
      \r
+
+
+

         \r        ⽔    ᅡ     ᄀᅠᆨ깎렚ँ्က್⽔む
+ᄀᅠᆨ깎렚ँ्က್⽔む\r  \r\r\r
+\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+
+\r
+       ᄀᅠᆨ깎렚ँ्က್⽔む   

  
⽔
 ᄀᅠᆨ깎렚ँ्က್⽔む
\rᄀᅠᆨ깎렚ँ्က್⽔む \r
+್
\r\r

      ᄀᅠᆨ깎렚ँ्က್⽔むᆨ  
+\r
+
 

+
+\r
+\r
+

+
ᄀᅠᆨ깎렚ँ्က್⽔む       \r\r
+        \r\r
+  ್\r
\r
+


+\r
+       
\r
  ᄀᅠᆨ깎렚ँ्က್⽔む 
+ ⽔ᄀᅠᆨ깎렚ँ्က್⽔む\rᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄀᄅ ᄅ ᆩ\r 
      
\r\r 

ᄀᅠᆨ깎렚ँ्က್⽔む 
 \r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+ᄀ 

\r     
+
+       \r
+
\r 
+
    ᄀᅠᆨ깎렚ँ्က್⽔むᄁ   \rᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+\r
+ ᆩ
+\rᄀᅠᆨ깎렚ँ्က್⽔むむ
ᄀᅠᆨ깎렚ँ्က್⽔むᆨ
ᄀᅠᆨ깎렚ँ्က್⽔む
+ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む     ᆩ\r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む 
+⽔
+ᄀᅠᆨ깎렚ँ्က್⽔む
\r
+ ᄀᅠᆨ깎렚ँ्က್⽔むᆨ      \r
+ᄀᅠᆨ깎렚ँ्က್⽔む
+
+       ᅡᄀᅠᆨ깎렚ँ्က್⽔む        \r
+ᄁ\r
+       က む ᄀᅠᆨ깎렚ँ्က್⽔む\r
+ᄀᅠᆨ깎렚ँ्က್⽔む   \r
+
+\r
+
  
+ᄀᅠᆨ깎렚ँ्က್⽔む  
+\r
ᄀᆩ      
+        \r
+
+\r\r\r
+\r
+ᆨ    ᄀᅠᆨ깎렚ँ्က್⽔む

\r \r
+ᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔む\rᅡᄀᅠᆨ깎렚ँ्က್⽔む \rᄀᅠᆨ깎렚ँ्က್⽔むᅠ
\r
+ᄀँᄀ್
ᅡ\r
+
+\r 
\r           ᄀᅠᆨ깎렚ँ्က್⽔む\r  \r
+
+        
+       
+       ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+むᅡ 
+\r  ᄀᅠᆨ깎렚ँ्က್⽔む\r ᅡᄀᅠᆨ깎렚ँ्က್⽔む््       \r ᄀᄀᅠᆨ깎렚ँ्က್⽔む

\r
\r
+ က   \r\r
+   ᄀᅠᆨ깎렚ँ्က್⽔む       
ᆩ 
ᄁ\rᄀᅠᆨ깎렚ँ्က್⽔む ᄀᅠᆨ깎렚ँ्က್⽔むᄀᅠᆨ깎렚ँ्က್⽔む
+ᆨ
diff --git a/tests/cxx-test.C b/tests/cxx-test.C
new file mode 100755 (executable)
index 0000000..62099b3
--- /dev/null
@@ -0,0 +1,33 @@
+/* This test makes sure that all Pango headers can be included
+ * and compiled in a C++ program.
+ */
+#define PANGO_ENABLE_ENGINE
+#define PANGO_ENABLE_BACKEND
+
+#include <pango/pango.h>
+
+#ifdef HAVE_WIN32
+#include <pango/pangowin32.h>
+#endif
+
+#ifdef HAVE_X
+#include <pango/pangox.h>
+#endif
+
+#ifdef HAVE_XFT
+#include <pango/pangoxft.h>
+#endif
+
+#ifdef HAVE_FREETYPE
+#include <pango/pangoft2.h>
+#endif
+
+#ifdef HAVE_CAIRO
+#include <pango/pangocairo.h>
+#endif
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/tests/dump-boundaries.c b/tests/dump-boundaries.c
new file mode 100755 (executable)
index 0000000..d71aa60
--- /dev/null
@@ -0,0 +1,129 @@
+/* Pango
+ * dump-boundaries.c: Dump text boundaries for a file
+ *
+ * Copyright (C) 1999-2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <pango/pango.h>
+
+#define CHFORMAT "%0#6x"
+
+static void fail (const char *format, ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN;
+static void fail (const char *format, ...)
+{
+  char *str;
+
+  va_list args;
+
+  va_start (args, format);
+  str = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  fprintf (stderr, "Error: %s\n", str);
+
+  g_free (str);
+
+  exit (1);
+}
+
+static void
+dump_text (const char *text)
+{
+  unsigned int len;
+  PangoLogAttr *attrs;
+  unsigned int i;
+  gunichar *ucs4;
+
+  if (!g_utf8_validate (text, -1, NULL))
+    fail ("Invalid UTF-8 in file");
+
+  len = g_utf8_strlen (text, -1);
+  attrs = g_new0 (PangoLogAttr, len + 1);
+
+  pango_get_log_attrs (text,
+                      -1,
+                      0,
+                      pango_language_from_string ("C"),
+                      attrs,
+                      len + 1);
+
+  ucs4 = g_utf8_to_ucs4 (text, -1, NULL, NULL, NULL);
+
+  for (i = 0; i < len + 1; i++)
+    {
+      char buf[7] = { '\0', };
+      char *loc;
+
+      g_unichar_to_utf8 (ucs4[i], buf);
+
+      if (*buf == '\n')
+       loc = g_strdup ("\\n");
+      else if (*buf == '\r')
+       loc = g_strdup ("\\r");
+      else
+       loc = g_locale_from_utf8 (buf, -1, NULL, NULL, NULL);
+
+      g_print (CHFORMAT " (%s):\t line_break = %d mandatory_break = %d char_break = %d\n"
+              "     \t\t white = %d cursor_position = %d\n"
+              "     \t\t word_start = %d word_end = %d\n"
+              "     \t\t sentence_boundary = %d sentence_start = %d sentence_end = %d\n",
+              ucs4[i], loc ? loc : "?",
+              attrs[i].is_line_break,
+              attrs[i].is_mandatory_break,
+              attrs[i].is_char_break,
+              attrs[i].is_white,
+              attrs[i].is_cursor_position,
+              attrs[i].is_word_start,
+              attrs[i].is_word_end,
+              attrs[i].is_sentence_boundary,
+              attrs[i].is_sentence_start,
+              attrs[i].is_sentence_end);
+
+      g_free (loc);
+    }
+
+  g_free (ucs4);
+  g_free (attrs);
+}
+
+int
+main (int    argc,
+      char **argv)
+{
+  gchar *text;
+
+  g_setenv ("PANGO_RC_FILE", "./pangorc", TRUE);
+
+  if (argc < 2)
+    fail ("must give a filename on the command line");
+
+  if (!g_file_get_contents (argv[1], &text, NULL, NULL))
+    fail ("Couldn't open sample text file");
+
+  dump_text (text);
+
+  g_free (text);
+
+  return 0;
+}
+
diff --git a/tests/gen-all-unicode.c b/tests/gen-all-unicode.c
new file mode 100755 (executable)
index 0000000..4139f23
--- /dev/null
@@ -0,0 +1,46 @@
+#include <glib.h>
+#include <stdio.h>
+
+int
+main (int argc G_GNUC_UNUSED,
+      char **argv G_GNUC_UNUSED)
+{
+  gunichar i;
+  gint j;
+
+  /* Output all characters in the BMP twice, once directly
+   * concatenated, once with spaces between them
+   */
+  for (j = 0 ; j < 2 ; j++)
+    {
+      for (i = 0; i < 65536; i++)
+       {
+         if (g_unichar_validate (i))
+           {
+             gchar buffer[7];
+             int len = g_unichar_to_utf8 (i, buffer);
+             buffer[len] = '\0';
+
+             if (j == 1)
+               fputs (" ", stdout);
+
+             fputs (buffer, stdout);
+
+             if (j == 0)
+               {
+                 if (i % 40 == 0 && i != 0)
+                   fputs ("\n", stdout);
+               }
+             else
+               {
+                 if (i % 20 == 0 && i != 0)
+                   fputs ("\n", stdout);
+               }
+           }
+       }
+    }
+  fputs ("\n", stdout);
+
+  return 0;
+}
+
diff --git a/tests/runtests.sh b/tests/runtests.sh
new file mode 100755 (executable)
index 0000000..8662492
--- /dev/null
@@ -0,0 +1,55 @@
+#! /bin/sh
+
+LOGFILE=runtests.log
+POTENTIAL_TESTS='testboundaries testcolor testboundaries_ucd'
+
+ECHO_C=''
+ECHO_N='-n'
+
+for I in $POTENTIAL_TESTS
+do
+    GOOD=yes
+    test -f $I || {
+        echo "WARNING: test program $I not found, not running"
+        GOOD=no
+    }
+
+    if test x$GOOD = xyes; then
+        test -x $I || {
+            echo "WARNING: test program $I is not executable, not running"
+            GOOD=no
+        }
+    fi
+    
+    if test x$GOOD = xyes; then
+        TESTS="$TESTS$I "
+    fi
+done
+
+echo "Logging to $LOGFILE"
+
+echo "Log file for Pango test programs." > $LOGFILE
+echo "" >> $LOGFILE
+echo "Tests are: "$TESTS >> $LOGFILE
+echo "" >> $LOGFILE
+
+for I in $TESTS
+do
+    echo $ECHO_N "Running test program \"$I\", please wait:$ECHO_C"
+    echo "" >> $LOGFILE
+    echo "Output of $I:" >> $LOGFILE
+    if ./$I >>$LOGFILE 2>&1; then
+        echo " passed"
+    else
+        echo
+        echo
+        echo '***'
+        echo " Test failed: $I"
+        echo " See $LOGFILE for errors"
+        echo 
+        exit 1
+    fi
+done
+
+echo 
+echo "All tests passed."
diff --git a/tests/runtests.sh.in b/tests/runtests.sh.in
new file mode 100755 (executable)
index 0000000..a6d6000
--- /dev/null
@@ -0,0 +1,55 @@
+#! @SHELL@
+
+LOGFILE=runtests.log
+POTENTIAL_TESTS='testboundaries testcolor testboundaries_ucd'
+
+ECHO_C='@ECHO_C@'
+ECHO_N='@ECHO_N@'
+
+for I in $POTENTIAL_TESTS
+do
+    GOOD=yes
+    test -f $I || {
+        echo "WARNING: test program $I not found, not running"
+        GOOD=no
+    }
+
+    if test x$GOOD = xyes; then
+        test -x $I || {
+            echo "WARNING: test program $I is not executable, not running"
+            GOOD=no
+        }
+    fi
+    
+    if test x$GOOD = xyes; then
+        TESTS="$TESTS$I "
+    fi
+done
+
+echo "Logging to $LOGFILE"
+
+echo "Log file for Pango test programs." > $LOGFILE
+echo "" >> $LOGFILE
+echo "Tests are: "$TESTS >> $LOGFILE
+echo "" >> $LOGFILE
+
+for I in $TESTS
+do
+    echo $ECHO_N "Running test program \"$I\", please wait:$ECHO_C"
+    echo "" >> $LOGFILE
+    echo "Output of $I:" >> $LOGFILE
+    if ./$I >>$LOGFILE 2>&1; then
+        echo " passed"
+    else
+        echo
+        echo
+        echo '***'
+        echo " Test failed: $I"
+        echo " See $LOGFILE for errors"
+        echo 
+        exit 1
+    fi
+done
+
+echo 
+echo "All tests passed."
diff --git a/tests/test-ot-tags.c b/tests/test-ot-tags.c
new file mode 100755 (executable)
index 0000000..511f892
--- /dev/null
@@ -0,0 +1,131 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* Pango
+ * testscript.c: Test cases for PangoScriptIter
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#define PANGO_ENABLE_ENGINE
+#include <pango/pango-ot.h>
+
+#undef VERBOSE
+
+#define ASSERT(stmt) G_STMT_START {                                    \
+    if (stmt) { }                                                      \
+    else                                                               \
+      {                                                                        \
+       g_warning ("%s:%d (%s): assertion '%s' failed",                 \
+                __FILE__, __LINE__, G_STRFUNC, #stmt);                 \
+       exit (1);                                                       \
+      }                                                                        \
+} G_STMT_END
+
+static void
+test_script_tags (void)
+{
+  gunichar ch;
+  PangoScript i, max_script;
+
+  /* we need to know what the maximum script number is.  but we don't
+   * provide an api for that.  instead of looking into internal tables,
+   * we'll go over all chars and see what their script is, taking the max!
+   */
+
+  max_script = PANGO_SCRIPT_INVALID_CODE;
+  for (ch = 0; ch <= 0x10FFFF; ch++)
+    max_script = MAX (max_script, pango_script_for_unichar (ch));
+
+  for (i = PANGO_SCRIPT_COMMON; i <= max_script; i++)
+    {
+      PangoOTTag tag = pango_ot_tag_from_script (i);
+      PangoScript j  = pango_ot_tag_to_script (tag);
+
+      if (i <= PANGO_SCRIPT_INHERITED || i == PANGO_SCRIPT_UNKNOWN)
+        {
+         ASSERT (tag == PANGO_OT_TAG_DEFAULT_SCRIPT);
+         ASSERT (j == PANGO_SCRIPT_COMMON);
+        }
+      else if (tag == FT_MAKE_TAG ('k', 'a', 'n', 'a'))
+        {
+         /* Hiragana and Katakana both map to tag 'kana' */
+        ASSERT (i == PANGO_SCRIPT_HIRAGANA || i == PANGO_SCRIPT_KATAKANA);
+        ASSERT (j == PANGO_SCRIPT_HIRAGANA || j == PANGO_SCRIPT_KATAKANA);
+       }
+      else
+        {
+         if (j != i)
+           g_error ("Got back %d for script %d (OT tag '%c%c%c%c')", j, i,
+                    tag>>24, (tag>>16)&255, (tag>>8)&255, tag&255);
+       }
+    }
+
+  ASSERT (pango_ot_tag_to_script (FT_MAKE_TAG ('X', 'Y', 'Z', ' ')) == PANGO_SCRIPT_UNKNOWN);
+}
+
+static void
+test_language_tags (void)
+{
+  /* just test it for a few known languages to make sure it's working */
+  const char languages[][6] = {
+    "xy", /* hopefully nonexistent */
+    "aa",
+    "az_IR",
+    "en",
+    "en_US",
+    "fa",
+    "fa_IR",
+    "fr",
+    "zh_CN",
+    "zu"
+  };
+  unsigned int i;
+
+  for (i = 0; i < G_N_ELEMENTS (languages); i++)
+    {
+      PangoLanguage *l = pango_language_from_string (languages[i]);
+      PangoOTTag tag   = pango_ot_tag_from_language (l);
+      PangoLanguage *m = pango_ot_tag_to_language (tag);
+
+      if (i == 0)
+        {
+         ASSERT (tag == PANGO_OT_TAG_DEFAULT_LANGUAGE);
+         ASSERT (strcmp (pango_language_to_string (m), "xx") == 0);
+       }
+      else
+        {
+         if (tag == PANGO_OT_TAG_DEFAULT_LANGUAGE)
+           g_error ("Got PANGO_OT_TAG_DEFAULT_LANGUAGE for language '%s'", pango_language_to_string (l));
+
+         if (!pango_language_matches (l, pango_language_to_string (m)))
+           g_error ("Got back %s for language %s (OT tag '%c%c%c%c')",
+                    pango_language_to_string (m), pango_language_to_string (l),
+                    tag>>24, (tag>>16)&255, (tag>>8)&255, tag&255);
+       }
+    }
+}
+
+int
+main (int argc, char **argv)
+{
+  g_setenv ("PANGO_RC_FILE", "./pangorc", TRUE);
+
+  test_script_tags ();
+  test_language_tags ();
+
+  return 0;
+}
diff --git a/tests/testboundaries.c b/tests/testboundaries.c
new file mode 100755 (executable)
index 0000000..30a9f31
--- /dev/null
@@ -0,0 +1,362 @@
+/* Pango
+ * testboundaries.c: Test text boundary algorithms
+ *
+ * Copyright (C) 1999-2000 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <pango/pango.h>
+
+#define CHFORMAT "%0#6x"
+
+/* FIXME for now this just tests that the breaking of some sample
+ * text conforms to certain rules and invariants. But eventually
+ * we should also have test-result pairs, i.e. a string and some
+ * encoding of the correct way to break the string, to check
+ * more precisely that things worked
+ */
+
+
+/* "virama script" is just an optimization; it includes a bunch of
+ * scripts without viramas in them
+ */
+#define VIRAMA_SCRIPT(wc)        ((wc) >= 0x0901 && (wc) <= 0x17FF)
+#define VIRAMA(wc) ((wc) == 0x094D || \
+                   (wc) == 0x09CD || \
+                   (wc) == 0x0A4D || \
+                   (wc) == 0x0ACD || \
+                   (wc) == 0x0B4D || \
+                   (wc) == 0x0BCD || \
+                   (wc) == 0x0C4D || \
+                   (wc) == 0x0CCD || \
+                   (wc) == 0x0D4D || \
+                   (wc) == 0x0DCA || \
+                   (wc) == 0x0E3A || \
+                   (wc) == 0x0F84 || \
+                   (wc) == 0x1039 || \
+                   (wc) == 0x17D2)
+/* Types of Japanese characters */
+#define JAPANESE(wc) ((wc) >= 0x2F00 && (wc) <= 0x30FF)
+#define KANJI(wc)    ((wc) >= 0x2F00 && (wc) <= 0x2FDF)
+#define HIRAGANA(wc) ((wc) >= 0x3040 && (wc) <= 0x309F)
+#define KATAKANA(wc) ((wc) >= 0x30A0 && (wc) <= 0x30FF)
+
+static int offset = 0;
+static int line = 0;
+static gunichar current_wc = 0;
+static const char *line_start = NULL;
+static const char *line_end = NULL;
+
+static void fail (const char *format, ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN;
+static void fail (const char *format, ...)
+{
+  char *str;
+  char *line_text;
+
+  va_list args;
+
+  va_start (args, format);
+  str = g_strdup_vprintf (format, args);
+  va_end (args);
+
+  line_text = g_strndup (line_start, line_end - line_start);
+
+  fprintf (stderr, "line %d offset %d char is " CHFORMAT ": %s\n (line is '%s')\n", line, offset, current_wc, str, line_text);
+  g_free (str);
+  g_free (line_text);
+
+  exit (1);
+}
+
+typedef void (* CharForeachFunc) (gunichar      wc,
+                                 gunichar      prev_wc,
+                                 gunichar      next_wc,
+                                 GUnicodeType  type,
+                                 GUnicodeType  prev_type,
+                                 GUnicodeType  next_type,
+                                 PangoLogAttr *attr,
+                                 PangoLogAttr *prev_attr,
+                                 PangoLogAttr *next_attr,
+                                 gpointer      data);
+
+static void
+log_attr_foreach (const char     *text,
+                 PangoLogAttr   *attrs,
+                 CharForeachFunc func,
+                 gpointer        data)
+{
+  const gchar *next = text;
+  gint length = strlen (text);
+  const gchar *end = text + length;
+  gint i = 0;
+  gunichar prev_wc;
+  gunichar next_wc;
+  GUnicodeType prev_type;
+  GUnicodeType next_type;
+
+  if (next == end)
+    return;
+
+  offset = 0;
+  line = 0;
+
+  prev_type = (GUnicodeType) -1;
+  prev_wc = 0;
+
+  next_wc = g_utf8_get_char (next);
+  next_type = g_unichar_type (next_wc);
+
+  line_start = text;
+  line_end = text;
+
+  while (next_wc != 0)
+    {
+      GUnicodeType type;
+      gunichar wc;
+
+      wc = next_wc;
+      type = next_type;
+
+      current_wc = wc;
+
+      next = g_utf8_next_char (next);
+      line_end = next;
+
+      if (next >= end)
+       next_wc = 0;
+      else
+       next_wc = g_utf8_get_char (next);
+
+      if (next_wc)
+       next_type = g_unichar_type (next_wc);
+
+      (* func) (wc, prev_wc, next_wc,
+               type, prev_type, next_type,
+               &attrs[i],
+               i != 0 ? &attrs[i-1] : NULL,
+               next_wc != 0 ? &attrs[i+1] : NULL,
+               data);
+
+      prev_type = type;
+      prev_wc = wc;
+      ++i;
+      ++offset;
+      if (wc == '\n')
+       {
+         ++line;
+         offset = 0;
+         line_start = next;
+         line_end = next;
+       }
+    }
+}
+
+static void
+check_line_char (gunichar      wc,
+                gunichar      prev_wc,
+                gunichar      next_wc,
+                GUnicodeType  type,
+                GUnicodeType  prev_type,
+                GUnicodeType  next_type,
+                PangoLogAttr *attr,
+                PangoLogAttr *prev_attr,
+                PangoLogAttr *next_attr,
+                gpointer      data)
+{
+  GUnicodeBreakType break_type;
+  GUnicodeBreakType prev_break_type;
+
+  break_type = g_unichar_break_type (wc);
+  if (prev_wc)
+    prev_break_type = g_unichar_break_type (prev_wc);
+  else
+    prev_break_type = G_UNICODE_BREAK_UNKNOWN;
+
+  if (wc == '\n')
+    {
+      if (prev_wc == '\r')
+       {
+         if (attr->is_line_break)
+           fail ("line break between \\r and \\n");
+       }
+
+      if (next_attr && !next_attr->is_line_break)
+       fail ("no line break after \\n");
+    }
+
+  if (attr->is_line_break && prev_wc == 0)
+    fail ("first char in string should not be marked as a line break");
+
+  if (break_type == G_UNICODE_BREAK_SPACE)
+    {
+      if (attr->is_line_break && prev_attr != NULL &&
+         !attr->is_mandatory_break &&
+         !(next_wc && g_unichar_break_type (next_wc) == G_UNICODE_BREAK_COMBINING_MARK))
+       fail ("can't break lines before a space unless a mandatory break char precedes it or a combining mark follows; prev char was " CHFORMAT, prev_wc);
+    }
+
+  if (attr->is_mandatory_break && !attr->is_line_break)
+    fail ("mandatory breaks must also be marked as regular breaks");
+
+
+
+  /* FIXME use the break tables from break.c to automatically
+   * check invariants for each cell in the table. Shouldn't
+   * be that hard to do.
+   */
+
+  if (break_type == G_UNICODE_BREAK_OPEN_PUNCTUATION &&
+      prev_break_type == G_UNICODE_BREAK_OPEN_PUNCTUATION &&
+      attr->is_line_break &&
+      !attr->is_mandatory_break)
+    fail ("can't break between two open punctuation chars");
+
+  if (break_type == G_UNICODE_BREAK_CLOSE_PUNCTUATION &&
+      prev_break_type == G_UNICODE_BREAK_CLOSE_PUNCTUATION &&
+      attr->is_line_break &&
+      !attr->is_mandatory_break)
+    fail ("can't break between two close punctuation chars");
+
+  if (break_type == G_UNICODE_BREAK_QUOTATION &&
+      prev_break_type == G_UNICODE_BREAK_ALPHABETIC &&
+      attr->is_line_break &&
+      !attr->is_mandatory_break)
+    fail ("can't break letter-quotemark sequence");
+}
+
+static void
+check_line_invariants (const char   *text,
+                      PangoLogAttr *attrs)
+{
+  log_attr_foreach (text, attrs, check_line_char, NULL);
+}
+
+static void
+check_word_invariants (const char   *text,
+                      PangoLogAttr *attrs)
+{
+
+
+}
+
+static void
+check_sentence_invariants (const char   *text,
+                          PangoLogAttr *attrs)
+{
+
+
+}
+
+static void
+check_grapheme_invariants (const char   *text,
+                          PangoLogAttr *attrs)
+{
+
+
+}
+
+static void print_sentences (const char   *text,
+                            PangoLogAttr *attrs);
+static void
+print_sentences (const char   *text,
+                PangoLogAttr *attrs)
+{
+  const char *p;
+  const char *last;
+  int i = 0;
+
+  last = text;
+  p = text;
+
+  while (*p)
+    {
+      if (attrs[i].is_sentence_boundary)
+       {
+         char *s = g_strndup (last, p - last);
+         printf ("%s\n", s);
+         g_free (s);
+         last = p;
+       }
+
+      p = g_utf8_next_char (p);
+      ++i;
+    }
+}
+
+static void
+check_invariants (const char *text)
+{
+  int len;
+  PangoLogAttr *attrs;
+
+  if (!g_utf8_validate (text, -1, NULL))
+    fail ("Invalid UTF-8 in test text");
+
+  len = g_utf8_strlen (text, -1);
+  attrs = g_new0 (PangoLogAttr, len + 1);
+
+  pango_get_log_attrs (text,
+                      -1,
+                      0,
+                      pango_language_from_string ("C"),
+                      attrs,
+                      len + 1);
+
+  check_line_invariants (text, attrs);
+  check_sentence_invariants (text, attrs);
+  check_grapheme_invariants (text, attrs);
+  check_word_invariants (text, attrs);
+
+#if 0
+  print_sentences (text, attrs);
+#endif
+
+  g_free (attrs);
+}
+
+int
+main (int argc, char *argv[])
+{
+  gchar *text;
+  const gchar *srcdir;
+  const gchar *filename;
+
+  g_setenv ("PANGO_RC_FILE", "./pangorc", TRUE);
+
+  srcdir = getenv ("srcdir");
+  if (!srcdir)
+    srcdir = ".";
+
+  filename = g_strdup_printf ("%s/boundaries.utf8", srcdir);
+
+  if (!g_file_get_contents (filename, &text, NULL, NULL))
+    fail ("Couldn't open sample text file");
+
+  check_invariants (text);
+
+  g_free (text);
+
+  printf ("testboundaries passed\n");
+
+  return 0;
+}
+
diff --git a/tests/testboundaries_ucd.c b/tests/testboundaries_ucd.c
new file mode 100755 (executable)
index 0000000..886974b
--- /dev/null
@@ -0,0 +1,363 @@
+/* Pango
+ * testboundaries_ucd.c: Test text boundary algorithms with test data from
+ *                       Unicode Character Database.
+ *
+ * Copyright (C) 2003 Noah Levitt
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <pango/pango.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+static gboolean failed = FALSE;
+
+/* PangoLogAttr has to be the same size as guint or this hack breaks */
+typedef union
+{
+  PangoLogAttr attr;
+  guint bits;
+}
+AttrBits;
+
+/* counts the number of multiplication and divison signs up to the first
+ * '#' or null character */
+static gint
+count_attrs (gchar *line)
+{
+  gunichar ch;
+  gchar *p = line;
+  gint count = 0;
+
+  for (;;)
+    {
+      ch = g_utf8_get_char (p);
+
+      switch (ch)
+        {
+        /* MULTIPLICATION SIGN, DIVISION SIGN */
+        case 0x00d7: case 0x00f7:
+          count++;
+          break;
+
+        /* null char, NUMBER SIGN */
+        case 0x0000: case 0x0023:
+          return count;
+
+        default:
+          break;
+        }
+
+      p = g_utf8_next_char (p);
+    }
+  /* not reached */
+}
+
+static gboolean
+parse_line (gchar *line,
+            AttrBits bits,
+            gchar **str_return,
+            PangoLogAttr **attr_return,
+            gint *num_attrs)
+{
+  GString *gs;
+  gunichar ch, character;
+  gchar *p, *q;
+  gint i;
+  AttrBits temp_attr;
+
+  *num_attrs = count_attrs (line);
+  *attr_return = g_new (PangoLogAttr, *num_attrs);
+
+  p = line;
+  i = 0;
+  gs = g_string_new (NULL);
+
+  for (;;)
+    {
+      temp_attr.bits = 0;
+
+      /* skip white space */
+      do
+        {
+          ch = g_utf8_get_char (p);
+          p = g_utf8_next_char (p);
+        }
+      while (g_unichar_isspace (ch));
+
+      switch (ch)
+        {
+        case 0x00f7: /* DIVISION SIGN: boundary here */
+          temp_attr.bits |= bits.bits;
+          /* fall through */
+
+        case 0x00d7: /* MULTIPLICATION SIGN: no boundary here */
+          break;
+
+        case 0x0000:
+        case 0x0023: 
+          *str_return = g_string_free (gs, FALSE);
+          return TRUE;
+
+        default: /* unexpected character */
+          g_free (*attr_return);
+          return FALSE;
+        }
+
+      (*attr_return)[i] = temp_attr.attr;
+
+      /* skip white space */
+      do
+        {
+          ch = g_utf8_get_char (p);
+          p = g_utf8_next_char (p);
+        }
+      while (g_unichar_isspace (ch));
+      p = g_utf8_prev_char (p);
+
+      if (ch == 0x0023 || ch == 0x0000)
+        {
+          *str_return = g_string_free (gs, FALSE);
+          return TRUE;
+        }
+
+      character = strtoul (p, &q, 16);
+      if (q < p + 4 || q > p + 6 || character > 0x10ffff)
+        {
+          g_free (*attr_return);
+          return FALSE;
+        }
+
+      p = q;
+
+      gs = g_string_append_unichar (gs, character);
+
+      i++;
+    }
+}
+
+static gboolean
+attrs_equal (PangoLogAttr *attrs1,
+             PangoLogAttr *attrs2,
+             gint len,
+             AttrBits bits)
+{
+  AttrBits a, b;
+  gint i;
+
+  for (i = 0;  i < len;  i++)
+    {
+      a.bits = 0;
+      a.attr = attrs1[i];
+
+      b.bits = 0;
+      b.attr = attrs2[i];
+
+      /* can't do a straight comparison because the bitmask may have
+       * multiple bits set, and as long as attr&bitmask is not zero, it
+       * counts as being set */
+      if (((a.bits & bits.bits) && !(b.bits & bits.bits)) ||
+          !(a.bits & bits.bits) && (b.bits & bits.bits))
+        return FALSE;
+    }
+
+  return TRUE;
+}
+
+static gchar *
+make_test_string (gchar *string, 
+                  PangoLogAttr *attrs, 
+                  AttrBits bits)
+{
+  GString *gs = g_string_new (NULL);
+  gint i = 0;
+  AttrBits a;
+  gchar *p = string;
+  gunichar ch;
+
+  for (;;)
+    {
+      a.bits = 0;
+      a.attr = attrs[i];
+      if ((a.bits & bits.bits) != 0)
+        gs = g_string_append_unichar (gs, 0x00f7);
+      else
+        gs = g_string_append_unichar (gs, 0x00d7);
+
+      g_string_append_c (gs, ' ');
+
+      if (*p == '\0')
+        break;
+
+      ch = g_utf8_get_char (p);
+      g_string_append_printf (gs, "%04X ", ch);
+
+      p = g_utf8_next_char (p);
+      i++;
+    }
+
+  return g_string_free (gs, FALSE);
+}
+
+static void
+do_test (gchar *filename,
+         AttrBits bits,
+        gboolean fixup_broken_linebreaktest)
+{
+  GIOChannel *channel;
+  GIOStatus status;
+  gchar *line;
+  gsize length, terminator_pos;
+  GError *error;
+  gchar *string;
+  PangoLogAttr *expected_attrs;
+  gint num_attrs;
+  gint i;
+
+  error = NULL;
+  channel = g_io_channel_new_file (filename, "r", &error);
+  if (!channel)
+    {
+      if (error->domain == G_FILE_ERROR && error->code == G_FILE_ERROR_NOENT)
+        {
+         g_print ("%s not found.  Skipping test.\n", filename);
+         goto done;
+       }
+      else
+        {
+         g_printerr ("%s: %s\n", filename, error->message);
+         exit (1);
+       }
+    }
+
+  i = 1;
+  for (;;)
+    {
+      error = NULL;
+      status = g_io_channel_read_line (channel, &line, &length, &terminator_pos, &error);
+
+      switch (status)
+        {
+          case G_IO_STATUS_ERROR:
+            g_printerr ("%s: %s\n", filename, error->message);
+            exit (1);
+
+          case G_IO_STATUS_EOF:
+           goto done;
+
+          case G_IO_STATUS_AGAIN:
+            continue;
+
+          case G_IO_STATUS_NORMAL:
+            line[terminator_pos] = '\0';
+            break;
+        }
+
+      if (! parse_line (line, bits, &string, &expected_attrs, &num_attrs))
+        {
+          g_printerr ("%s: error parsing line %d: %s\n", filename, i, line);
+          exit (1);
+        }
+      
+      if (num_attrs > 0)
+        {
+          PangoLogAttr *attrs = g_new (PangoLogAttr, num_attrs);
+          pango_get_log_attrs (string, -1, 0, pango_language_from_string ("C"), attrs, num_attrs);
+
+         /* LineBreakTest.txt from Unicode 5.1.0 has this bug that it says
+          * breaking is allowed at the beginning of the strings, while the
+          * algorithm says it's not.  Fix that up. */
+         if (fixup_broken_linebreaktest)
+           memset (expected_attrs, 0, sizeof (expected_attrs[0]));
+
+          if (! attrs_equal (attrs, expected_attrs, num_attrs, bits))
+            {
+              gchar *str = make_test_string (string, attrs, bits);
+              gchar *comments = strchr (line, '#');
+              if (comments) /* don't print the # comment in the error message.  print it separately */
+               {
+                 *comments = '\0';
+                 comments++;
+               }
+             else
+               {
+                 comments = "";
+               }
+
+              g_printerr ("%s: line %d failed\n"
+                          "   expected: %s\n"
+                          "   returned: %s\n"
+                         "   comments: %s\n\n",
+                          filename, i, line, str, comments);
+
+              g_free (str);
+              failed = TRUE;
+            }
+          g_free (attrs);
+        }
+      g_free (string);
+      g_free (expected_attrs);
+
+      i++;
+    }
+
+done:
+  if (channel)
+    g_io_channel_unref (channel);
+  if (error)
+    g_error_free (error);
+  g_free (filename);
+}
+
+gint
+main (gint argc,
+      gchar **argv)
+{
+  gchar *srcdir;
+  gchar *filename;
+  AttrBits bits;
+
+  setlocale (LC_ALL, "");
+
+  srcdir = getenv ("srcdir");
+  if (!srcdir)
+    srcdir = ".";
+
+  filename = g_strdup_printf ("%s/GraphemeBreakTest.txt", srcdir);
+  bits.bits = 0;
+  bits.attr.is_cursor_position = 1;
+  do_test (filename, bits, FALSE);
+
+  filename = g_strdup_printf ("%s/WordBreakTest.txt", srcdir);
+  bits.bits = 0;
+  bits.attr.is_word_boundary = 1;
+  do_test (filename, bits, FALSE);
+
+  filename = g_strdup_printf ("%s/SentenceBreakTest.txt", srcdir);
+  bits.bits = 0;
+  bits.attr.is_sentence_boundary = 1;
+  do_test (filename, bits, FALSE);
+
+  filename = g_strdup_printf ("%s/LineBreakTest.txt", srcdir);
+  bits.bits = 0;
+  bits.attr.is_line_break = 1;
+  bits.attr.is_mandatory_break = 1;
+  do_test (filename, bits, TRUE);
+
+  exit (failed);
+}
diff --git a/tests/testcolor.c b/tests/testcolor.c
new file mode 100755 (executable)
index 0000000..1995d3d
--- /dev/null
@@ -0,0 +1,94 @@
+/* Pango
+ * test-color.c: Test program for pango_color_parse()
+ *
+ * Copyright (C) 2002 Matthias Clasen
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include <pango/pango.h>
+
+typedef struct _ColorSpec {
+  const gchar *spec;
+  gboolean valid;
+  guint16 red;
+  guint16 green;
+  guint16 blue;
+} ColorSpec;
+
+static gboolean test_color (ColorSpec *spec)
+{
+  PangoColor color;
+  gboolean accepted;
+
+  accepted = pango_color_parse (&color, spec->spec);
+
+  if (accepted == spec->valid &&
+      (!accepted ||
+      (color.red == spec->red &&
+       color.green == spec->green &&
+       color.blue == spec->blue)))
+    return TRUE;
+  else
+    return FALSE;
+}
+
+
+ColorSpec specs [] = {
+  { "#abc",          1, 0xaaaa, 0xbbbb, 0xcccc },
+  { "#aabbcc",       1, 0xaaaa, 0xbbbb, 0xcccc },
+  { "#aaabbbccc",    1, 0xaaaa, 0xbbbb, 0xcccc },
+  { "#100100100",    1, 0x1001, 0x1001, 0x1001 },
+  { "#aaaabbbbcccc", 1, 0xaaaa, 0xbbbb, 0xcccc },
+  { "#fff",          1, 0xffff, 0xffff, 0xffff },
+  { "#ffffff",       1, 0xffff, 0xffff, 0xffff },
+  { "#fffffffff",    1, 0xffff, 0xffff, 0xffff },
+  { "#ffffffffffff", 1, 0xffff, 0xffff, 0xffff },
+  { "#000",          1, 0x0000, 0x0000, 0x0000 },
+  { "#000000",       1, 0x0000, 0x0000, 0x0000 },
+  { "#000000000",    1, 0x0000, 0x0000, 0x0000 },
+  { "#000000000000", 1, 0x0000, 0x0000, 0x0000 },
+  { "#AAAABBBBCCCC", 1, 0xaaaa, 0xbbbb, 0xcccc },
+  { "#aa bb cc ",    0, 0, 0, 0 },
+  { "#aa bb ccc",    0, 0, 0, 0 },
+  { "#ab",           0, 0, 0, 0 },
+  { "#aabb",         0, 0, 0, 0 },
+  { "#aaabb",        0, 0, 0, 0 },
+  { "aaabb",         0, 0, 0, 0 },
+  { "",              0, 0, 0, 0 },
+  { "#",             0, 0, 0, 0 },
+  { "##fff",         0, 0, 0, 0 },
+  { "#0000ff+",      0, 0, 0, 0 },
+  { "#0000f+",       0, 0, 0, 0 },
+  { "#0x00x10x2",    0, 0, 0, 0 },
+  { NULL,            0, 0, 0, 0 }
+};
+
+int
+main (int argc, char *argv[])
+{
+  gboolean success;
+  ColorSpec *spec;
+
+  g_setenv ("PANGO_RC_FILE", "./pangorc", TRUE);
+
+  success = TRUE;
+  for (spec = specs; spec->spec; spec++)
+    success &= test_color (spec);
+
+  return !success;
+}
diff --git a/tests/testiter.c b/tests/testiter.c
new file mode 100755 (executable)
index 0000000..65986d5
--- /dev/null
@@ -0,0 +1,243 @@
+/* Pango
+ * testiter.c: Test pangolayoutiter.c
+ *
+ * Copyright (C) 2005 Amit Aronovitch
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include <pango/pangocairo.h>
+
+#undef VERBOSE
+
+static void verbose (const char *format, ...) G_GNUC_PRINTF (1, 2);
+static void
+verbose (const char *format, ...)
+{
+#ifdef VERBOSE
+  va_list vap;
+
+  va_start (vap, format);
+  vfprintf (stderr, format, vap);
+  va_end (vap);
+#endif
+}
+
+#define LAYOUT_WIDTH (80 * PANGO_SCALE)
+
+/* Note: The test expects that any newline sequence is of length 1
+ * use \n (not \r\n) in the test texts.
+ * I think the iterator itself should support \r\n without trouble,
+ * but there are comments in layout-iter.c suggesting otherwise.
+ */
+const char *test_texts[] =
+  {
+    /* English with embedded RTL runs (from ancient-hebrew.org) */
+    "The Hebrew word \xd7\x90\xd7\x93\xd7\x9d\xd7\x94 (adamah) is the feminine form of \xd7\x90\xd7\x93\xd7\x9d meaning \"ground\"\n",
+    /* Arabic, with vowel marks (from Sura Al Fatiha) */
+    "\xd8\xa8\xd9\x90\xd8\xb3\xd9\x92\xd9\x85\xd9\x90 \xd8\xa7\xd9\x84\xd9\x84\xd9\x91\xd9\x87\xd9\x90 \xd8\xa7\xd9\x84\xd8\xb1\xd9\x91\xd9\x8e\xd8\xad\xd9\x92\xd9\x85\xd9\x80\xd9\x8e\xd9\x86\xd9\x90 \xd8\xa7\xd9\x84\xd8\xb1\xd9\x91\xd9\x8e\xd8\xad\xd9\x90\xd9\x8a\xd9\x85\xd9\x90\n\xd8\xa7\xd9\x84\xd9\x92\xd8\xad\xd9\x8e\xd9\x85\xd9\x92\xd8\xaf\xd9\x8f \xd9\x84\xd9\x84\xd9\x91\xd9\x87\xd9\x90 \xd8\xb1\xd9\x8e\xd8\xa8\xd9\x91\xd9\x90 \xd8\xa7\xd9\x84\xd9\x92\xd8\xb9\xd9\x8e\xd8\xa7\xd9\x84\xd9\x8e\xd9\x85\xd9\x90\xd9\x8a\xd9\x86\xd9\x8e\n",
+    /* Arabic, with embedded LTR runs (from a Linux guide) */
+    "\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xba\xd9\x8a\xd8\xb1 LC_ALL \xd9\x8a\xd8\xba\xd9\x8a\xd9\x8a\xd8\xb1 \xd9\x83\xd9\x84 \xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xba\xd9\x8a\xd8\xb1\xd8\xa7\xd8\xaa \xd8\xa7\xd9\x84\xd8\xaa\xd9\x8a \xd8\xaa\xd8\xa8\xd8\xaf\xd8\xa3 \xd8\xa8\xd8\xa7\xd9\x84\xd8\xb1\xd9\x85\xd8\xb2 LC.",
+    /* Hebrew, with vowel marks (from Genesis) */
+    "\xd7\x91\xd6\xbc\xd6\xb0\xd7\xa8\xd6\xb5\xd7\x90\xd7\xa9\xd7\x81\xd6\xb4\xd7\x99\xd7\xaa, \xd7\x91\xd6\xbc\xd6\xb8\xd7\xa8\xd6\xb8\xd7\x90 \xd7\x90\xd6\xb1\xd7\x9c\xd6\xb9\xd7\x94\xd6\xb4\xd7\x99\xd7\x9d, \xd7\x90\xd6\xb5\xd7\xaa \xd7\x94\xd6\xb7\xd7\xa9\xd6\xbc\xd7\x81\xd6\xb8\xd7\x9e\xd6\xb7\xd7\x99\xd6\xb4\xd7\x9d, \xd7\x95\xd6\xb0\xd7\x90\xd6\xb5\xd7\xaa \xd7\x94\xd6\xb8\xd7\x90\xd6\xb8\xd7\xa8\xd6\xb6\xd7\xa5",
+    /* Hebrew, with embedded LTR runs (from a Linux guide) */
+    "\xd7\x94\xd7\xa7\xd7\x9c\xd7\x93\xd7\x94 \xd7\xa2\xd7\x9c \xd7\xa9\xd7\xa0\xd7\x99 \xd7\x94 SHIFT\xd7\x99\xd7\x9d (\xd7\x99\xd7\x9e\xd7\x99\xd7\x9f \xd7\x95\xd7\xa9\xd7\x9e\xd7\x90\xd7\x9c \xd7\x91\xd7\x99\xd7\x97\xd7\x93) \xd7\x90\xd7\x9e\xd7\x95\xd7\xa8\xd7\x99\xd7\x9d \xd7\x9c\xd7\x94\xd7\x93\xd7\x9c\xd7\x99\xd7\xa7 \xd7\x90\xd7\xaa \xd7\xa0\xd7\x95\xd7\xa8\xd7\xaa \xd7\x94 Scroll Lock , \xd7\x95\xd7\x9c\xd7\x94\xd7\xa2\xd7\x91\xd7\x99\xd7\xa8 \xd7\x90\xd7\x95\xd7\xaa\xd7\xa0\xd7\x95 \xd7\x9c\xd7\x9e\xd7\xa6\xd7\x91 \xd7\x9b\xd7\xaa\xd7\x99\xd7\x91\xd7\x94 \xd7\x91\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa.",
+    /* Different line terminators */
+    "AAAA\nBBBB\nCCCC\n",
+    "DDDD\rEEEE\rFFFF\r",
+    "GGGG\r\nHHHH\r\nIIII\r\n",
+    NULL
+  };
+
+static void
+iter_char_test (PangoLayout *layout)
+{
+  PangoRectangle   extents, run_extents;
+  PangoLayoutIter *iter;
+  PangoLayoutRun  *run;
+  int              num_chars;
+  int              i, index, offset;
+  int              leading_x, trailing_x, x0, x1;
+  gboolean         iter_next_ok, rtl;
+  const char      *text, *ptr;
+
+  text = pango_layout_get_text (layout);
+  num_chars = g_utf8_strlen (text, -1);
+
+  iter = pango_layout_get_iter (layout);
+  iter_next_ok = TRUE;
+
+  for (i = 0 ; i < num_chars; ++i)
+    {
+      gchar *char_str;
+      g_assert (iter_next_ok);
+
+      index = pango_layout_iter_get_index (iter);
+      ptr = text + index;
+      char_str = g_strndup (ptr, g_utf8_next_char (ptr) - ptr);
+      verbose ("i=%d (visual), index = %d '%s':\n",
+              i, index, char_str);
+      g_free (char_str);
+
+      pango_layout_iter_get_char_extents (iter, &extents);
+      verbose ("  char extents: x=%d,y=%d w=%d,h=%d\n",
+              extents.x, extents.y,
+              extents.width, extents.height);
+
+      run = pango_layout_iter_get_run (iter);
+
+      if (run)
+       {
+         /* Get needed data for the GlyphString */
+         pango_layout_iter_get_run_extents(iter, NULL, &run_extents);
+         offset = run->item->offset;
+         rtl = run->item->analysis.level%2;
+         verbose ("  (current run: offset=%d,x=%d,len=%d,rtl=%d)\n",
+                  offset, run_extents.x, run->item->length, rtl);
+
+         /* Calculate expected x result using index_to_x */
+         pango_glyph_string_index_to_x (run->glyphs,
+                                        (char *)(text + offset), run->item->length,
+                                        &run->item->analysis,
+                                        index - offset, FALSE, &leading_x);
+         pango_glyph_string_index_to_x (run->glyphs,
+                                        (char *)(text + offset), run->item->length,
+                                        &run->item->analysis,
+                                        index - offset, TRUE, &trailing_x);
+
+         x0 = run_extents.x + MIN (leading_x, trailing_x);
+         x1 = run_extents.x + MAX (leading_x, trailing_x);
+
+         verbose ("  (index_to_x ind=%d: expected x=%d, width=%d)\n",
+                  index - offset, x0, x1 - x0);
+
+         g_assert (extents.x == x0);
+         g_assert (extents.width == x1 - x0);
+       }
+      else
+       {
+         /* We're on a line terminator */
+       }
+
+      iter_next_ok = pango_layout_iter_next_char (iter);
+      verbose ("more to go? %d\n", iter_next_ok);
+    }
+
+  /* There should be one character position iterator for each character in the
+   * input string */
+  g_assert (!iter_next_ok);
+
+  pango_layout_iter_free (iter);
+}
+
+/* char iteration test:
+ *  - Total num of iterations match number of chars
+ *  - GlyphString's index_to_x positions match those returned by the Iter
+ */
+static void
+iter_cluster_test (PangoLayout *layout)
+{
+  PangoRectangle   extents;
+  PangoLayoutIter *iter;
+  int              index;
+  gboolean         iter_next_ok;
+  const char      *text;
+  PangoLayoutLine *last_line = NULL;
+  int              expected_next_x = 0;
+
+  text = pango_layout_get_text (layout);
+
+  iter = pango_layout_get_iter (layout);
+  iter_next_ok = TRUE;
+
+  while (iter_next_ok)
+    {
+      PangoLayoutLine *line = pango_layout_iter_get_line (iter);
+
+      /* Every cluster is part of a run */
+      g_assert (pango_layout_iter_get_run (iter));
+
+      index = pango_layout_iter_get_index (iter);
+
+      pango_layout_iter_get_cluster_extents (iter, NULL, &extents);
+
+      iter_next_ok = pango_layout_iter_next_cluster (iter);
+
+      verbose ("index = %d:\n", index);
+      verbose ("  cluster extents: x=%d,y=%d w=%d,h=%d\n",
+              extents.x, extents.y,
+              extents.width, extents.height);
+      verbose ("more to go? %d\n", iter_next_ok);
+
+      /* All the clusters on a line should be next to each other and occupy
+       * the entire line. They advance linearly from left to right */
+      g_assert (extents.width >= 0);
+
+      if (last_line == line)
+       g_assert (extents.x == expected_next_x);
+
+      expected_next_x = extents.x + extents.width;
+
+      last_line = line;
+    }
+
+  g_assert (!iter_next_ok);
+
+  pango_layout_iter_free (iter);
+}
+
+int
+main (int argc, char *argv[])
+{
+  const char  **ptext;
+  PangoFontMap *fontmap;
+  PangoContext *context;
+  PangoLayout  *layout;
+
+  g_setenv ("PANGO_RC_FILE", "./pangorc", TRUE);
+
+  fontmap = pango_cairo_font_map_get_default ();
+  context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+
+  layout = pango_layout_new (context);
+  pango_layout_set_width (layout, LAYOUT_WIDTH);
+
+  for (ptext = test_texts; *ptext != NULL; ++ptext)
+    {
+      verbose ("--------- checking next text ----------\n");
+      verbose (" <%s>\n", *ptext);
+      verbose ( "len=%ld, bytes=%ld\n",
+               (long)g_utf8_strlen (*ptext, -1), (long)strlen (*ptext));
+
+      pango_layout_set_text (layout, *ptext, -1);
+      iter_char_test (layout);
+      iter_cluster_test (layout);
+    }
+
+  g_object_unref (layout);
+  return 0;
+}
diff --git a/tests/testscript.c b/tests/testscript.c
new file mode 100755 (executable)
index 0000000..4106e9a
--- /dev/null
@@ -0,0 +1,230 @@
+/* -*- mode: C; c-file-style: "gnu" -*- */
+/* Pango
+ * testscript.c: Test cases for PangoScriptIter
+ *
+ * Copyright (C) 2002 Red Hat Software
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * The test strings here come from ICU:
+ *
+ *  icu/sources/test/cintltst/cucdtst.c
+ *
+ ********************************************************************
+ * COPYRIGHT:
+ * Copyright (c) 1997-2001, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ ********************************************************************
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, and/or sell copies of the Software, and to permit persons
+ * to whom the Software is furnished to do so, provided that the above
+ * copyright notice(s) and this permission notice appear in all copies of
+ * the Software and that both the above copyright notice(s) and this
+ * permission notice appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+ * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale, use
+ * or other dealings in this Software without prior written authorization
+ * of the copyright holder.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "pango/pango-script.h"
+
+#undef VERBOSE
+
+#define ASSERT(stmt) G_STMT_START {                                    \
+    if (stmt) { }                                                      \
+    else                                                               \
+      {                                                                        \
+       g_warning ("%s:%d (%s): assertion '%s' failed",                 \
+                __FILE__, __LINE__, G_STRFUNC, #stmt);                 \
+       exit (1);                                                       \
+      }                                                                        \
+} G_STMT_END
+
+typedef struct
+{
+  const char *run_text_escaped;
+  char *run_text;
+  PangoScript run_code;
+} RunTestData;
+
+static gchar *
+unescape (const char *text)
+{
+  gboolean escaped = FALSE;
+  GString *result = g_string_new (NULL);
+  const gchar *p;
+
+  for (p = text; *p; p = g_utf8_next_char (p))
+    {
+      gunichar ch = g_utf8_get_char (p);
+
+      if (escaped)
+       {
+         if (ch == 'u' || ch == 'U')
+           {
+             int n_chars = ch == 'u' ? 4 : 8;
+             int i;
+
+             ch = 0;
+             for (i = 0; i < n_chars; i++)
+               {
+                 p++;
+                 ch <<= 4;
+                 if (*p <= '9' && *p >= '0')
+                   ch += *p - '0';
+                 else if (*p <= 'F' && *p >= 'A')
+                   ch += 10 + *p - 'A';
+                 else if (*p <= 'f' && *p >= 'a')
+                   ch += 10 + *p - 'a';
+                 else
+                   g_assert_not_reached ();
+               }
+           }
+         else if (ch == '\\')
+           {
+             ch = '\\';
+           }
+         else
+           {
+             g_assert_not_reached ();
+           }
+
+         escaped = FALSE;
+       }
+      else
+       {
+         if (ch == '\\')
+           {
+             escaped = TRUE;
+             continue;
+           }
+       }
+
+      g_string_append_unichar (result, ch);
+    }
+
+  return g_string_free (result, FALSE);
+}
+
+static void
+test_script_iter (void)
+{
+  static RunTestData test_data[] = {
+    { "\\u0020\\u0946\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940\\u0020", NULL, PANGO_SCRIPT_DEVANAGARI },
+    { "\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\\u0020", NULL, PANGO_SCRIPT_ARABIC },
+    { "\\u0420\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\\u0020", NULL, PANGO_SCRIPT_CYRILLIC },
+    { "English (", NULL, PANGO_SCRIPT_LATIN },
+    { "\\u0E44\\u0E17\\u0E22", NULL, PANGO_SCRIPT_THAI },
+    { ") ", NULL, PANGO_SCRIPT_LATIN },
+    { "\\u6F22\\u5B75", NULL, PANGO_SCRIPT_HAN },
+    { "\\u3068\\u3072\\u3089\\u304C\\u306A\\u3068", NULL, PANGO_SCRIPT_HIRAGANA },
+    { "\\u30AB\\u30BF\\u30AB\\u30CA", NULL, PANGO_SCRIPT_KATAKANA },
+    { "\\U00010400\\U00010401\\U00010402\\U00010403", NULL, PANGO_SCRIPT_DESERET }
+  };
+
+  PangoScriptIter *iter;
+  GString *all = g_string_new (FALSE);
+  char *pos;
+  const char *start;
+  const char *end;
+  PangoScript script;
+  unsigned int i;
+
+  for (i = 0; i < G_N_ELEMENTS(test_data); i++)
+    {
+      test_data[i].run_text = unescape (test_data[i].run_text_escaped);
+      g_string_append (all, test_data[i].run_text);
+    }
+
+  iter = pango_script_iter_new (all->str, -1);
+
+#ifdef VERBOSE
+  g_print ("Total length: %d\n", all->len);
+#endif
+
+  pos = all->str;
+  for (i = 0; i < G_N_ELEMENTS(test_data); i++)
+    {
+      char *next_pos = pos + strlen (test_data[i].run_text);
+      gboolean result;
+
+      pango_script_iter_get_range (iter, &start, &end, &script);
+#ifdef VERBOSE
+      g_print ("Range: %d-%d: %d\n", start - all->str, end - all->str, script);
+#endif
+
+      ASSERT (start == pos);
+      ASSERT (end == next_pos);
+      ASSERT (script == test_data[i].run_code);
+
+      result = pango_script_iter_next (iter);
+      ASSERT (result == (i != G_N_ELEMENTS (test_data) - 1));
+
+      pos = next_pos;
+    }
+
+  pango_script_iter_free (iter);
+
+  /*
+   * Test an empty string.
+   */
+  iter = pango_script_iter_new (all->str, 0);
+
+  pango_script_iter_get_range (iter, &start, &end, &script);
+
+  ASSERT (start == all->str);
+  ASSERT (end == all->str);
+  ASSERT (script == PANGO_SCRIPT_COMMON);
+  ASSERT (!pango_script_iter_next (iter));
+
+  pango_script_iter_free (iter);
+
+  /* Cleanup */
+
+  for (i = 0; i < G_N_ELEMENTS (test_data); i++)
+    g_free (test_data[i].run_text);
+
+  g_string_free (all, TRUE);
+}
+
+int
+main (int argc, char **argv)
+{
+  g_setenv ("PANGO_RC_FILE", "./pangorc", TRUE);
+
+  test_script_iter ();
+
+  return 0;
+}
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100755 (executable)
index 0000000..f8319e7
--- /dev/null
@@ -0,0 +1,19 @@
+## Process this file with automake to create Makefile.in.
+
+INCLUDES =                                     \
+       -I$(top_srcdir)                         \
+       $(GLIB_CFLAGS)                          \
+       $(FREETYPE_CFLAGS)                      \
+       -DPANGO_DISABLE_DEPRECATED              \
+       $(PANGO_DEBUG_FLAGS)
+
+EXTRA_PROGRAMS =               \
+       gen-script-for-lang
+
+EXTRA_DIST=                    \
+       gen-color-table.pl
+
+gen_script_for_lang_SOURCES = gen-script-for-lang.c
+gen_script_for_lang_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la $(FREETYPE_LIBS)
+
+-include $(top_srcdir)/git.mk
diff --git a/tools/Makefile.in b/tools/Makefile.in
new file mode 100644 (file)
index 0000000..9bab9a9
--- /dev/null
@@ -0,0 +1,604 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+EXTRA_PROGRAMS = gen-script-for-lang$(EXEEXT)
+subdir = tools
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am_gen_script_for_lang_OBJECTS = gen-script-for-lang.$(OBJEXT)
+gen_script_for_lang_OBJECTS = $(am_gen_script_for_lang_OBJECTS)
+am__DEPENDENCIES_1 =
+gen_script_for_lang_DEPENDENCIES =  \
+       ../pango/libpango-$(PANGO_API_VERSION).la \
+       $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(gen_script_for_lang_SOURCES)
+DIST_SOURCES = $(gen_script_for_lang_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CAIRO_CFLAGS = @CAIRO_CFLAGS@
+CAIRO_LIBS = @CAIRO_LIBS@
+CAIRO_PREFIX = @CAIRO_PREFIX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
+CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_EXPLICIT_DEPS_FALSE = @DISABLE_EXPLICIT_DEPS_FALSE@
+DISABLE_EXPLICIT_DEPS_TRUE = @DISABLE_EXPLICIT_DEPS_TRUE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DYNAMIC_ARABIC_FC_FALSE = @DYNAMIC_ARABIC_FC_FALSE@
+DYNAMIC_ARABIC_FC_TRUE = @DYNAMIC_ARABIC_FC_TRUE@
+DYNAMIC_ARABIC_LANG_FALSE = @DYNAMIC_ARABIC_LANG_FALSE@
+DYNAMIC_ARABIC_LANG_TRUE = @DYNAMIC_ARABIC_LANG_TRUE@
+DYNAMIC_BASIC_ATSUI_FALSE = @DYNAMIC_BASIC_ATSUI_FALSE@
+DYNAMIC_BASIC_ATSUI_TRUE = @DYNAMIC_BASIC_ATSUI_TRUE@
+DYNAMIC_BASIC_FC_FALSE = @DYNAMIC_BASIC_FC_FALSE@
+DYNAMIC_BASIC_FC_TRUE = @DYNAMIC_BASIC_FC_TRUE@
+DYNAMIC_BASIC_WIN32_FALSE = @DYNAMIC_BASIC_WIN32_FALSE@
+DYNAMIC_BASIC_WIN32_TRUE = @DYNAMIC_BASIC_WIN32_TRUE@
+DYNAMIC_BASIC_X_FALSE = @DYNAMIC_BASIC_X_FALSE@
+DYNAMIC_BASIC_X_TRUE = @DYNAMIC_BASIC_X_TRUE@
+DYNAMIC_HANGUL_FC_FALSE = @DYNAMIC_HANGUL_FC_FALSE@
+DYNAMIC_HANGUL_FC_TRUE = @DYNAMIC_HANGUL_FC_TRUE@
+DYNAMIC_HEBREW_FC_FALSE = @DYNAMIC_HEBREW_FC_FALSE@
+DYNAMIC_HEBREW_FC_TRUE = @DYNAMIC_HEBREW_FC_TRUE@
+DYNAMIC_INDIC_FC_FALSE = @DYNAMIC_INDIC_FC_FALSE@
+DYNAMIC_INDIC_FC_TRUE = @DYNAMIC_INDIC_FC_TRUE@
+DYNAMIC_INDIC_LANG_FALSE = @DYNAMIC_INDIC_LANG_FALSE@
+DYNAMIC_INDIC_LANG_TRUE = @DYNAMIC_INDIC_LANG_TRUE@
+DYNAMIC_KHMER_FC_FALSE = @DYNAMIC_KHMER_FC_FALSE@
+DYNAMIC_KHMER_FC_TRUE = @DYNAMIC_KHMER_FC_TRUE@
+DYNAMIC_SYRIAC_FC_FALSE = @DYNAMIC_SYRIAC_FC_FALSE@
+DYNAMIC_SYRIAC_FC_TRUE = @DYNAMIC_SYRIAC_FC_TRUE@
+DYNAMIC_THAI_FC_FALSE = @DYNAMIC_THAI_FC_FALSE@
+DYNAMIC_THAI_FC_TRUE = @DYNAMIC_THAI_FC_TRUE@
+DYNAMIC_THAI_LANG_FALSE = @DYNAMIC_THAI_LANG_FALSE@
+DYNAMIC_THAI_LANG_TRUE = @DYNAMIC_THAI_LANG_TRUE@
+DYNAMIC_TIBETAN_FC_FALSE = @DYNAMIC_TIBETAN_FC_FALSE@
+DYNAMIC_TIBETAN_FC_TRUE = @DYNAMIC_TIBETAN_FC_TRUE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_DOC_CROSS_REFERENCES_FALSE = @ENABLE_DOC_CROSS_REFERENCES_FALSE@
+ENABLE_DOC_CROSS_REFERENCES_TRUE = @ENABLE_DOC_CROSS_REFERENCES_TRUE@
+ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@
+ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@
+ENABLE_MAN_FALSE = @ENABLE_MAN_FALSE@
+ENABLE_MAN_TRUE = @ENABLE_MAN_TRUE@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
+FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GIRDIR = @GIRDIR@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GREP = @GREP@
+GTK_DOC_USE_LIBTOOL_FALSE = @GTK_DOC_USE_LIBTOOL_FALSE@
+GTK_DOC_USE_LIBTOOL_TRUE = @GTK_DOC_USE_LIBTOOL_TRUE@
+G_IR_COMPILER = @G_IR_COMPILER@
+G_IR_GENERATE = @G_IR_GENERATE@
+G_IR_SCANNER = @G_IR_SCANNER@
+HAVE_CAIRO_ATSUI_FALSE = @HAVE_CAIRO_ATSUI_FALSE@
+HAVE_CAIRO_ATSUI_TRUE = @HAVE_CAIRO_ATSUI_TRUE@
+HAVE_CAIRO_FALSE = @HAVE_CAIRO_FALSE@
+HAVE_CAIRO_FREETYPE_FALSE = @HAVE_CAIRO_FREETYPE_FALSE@
+HAVE_CAIRO_FREETYPE_TRUE = @HAVE_CAIRO_FREETYPE_TRUE@
+HAVE_CAIRO_PDF_FALSE = @HAVE_CAIRO_PDF_FALSE@
+HAVE_CAIRO_PDF_TRUE = @HAVE_CAIRO_PDF_TRUE@
+HAVE_CAIRO_PNG_FALSE = @HAVE_CAIRO_PNG_FALSE@
+HAVE_CAIRO_PNG_TRUE = @HAVE_CAIRO_PNG_TRUE@
+HAVE_CAIRO_PS_FALSE = @HAVE_CAIRO_PS_FALSE@
+HAVE_CAIRO_PS_TRUE = @HAVE_CAIRO_PS_TRUE@
+HAVE_CAIRO_TRUE = @HAVE_CAIRO_TRUE@
+HAVE_CAIRO_WIN32_FALSE = @HAVE_CAIRO_WIN32_FALSE@
+HAVE_CAIRO_WIN32_TRUE = @HAVE_CAIRO_WIN32_TRUE@
+HAVE_CAIRO_XLIB_FALSE = @HAVE_CAIRO_XLIB_FALSE@
+HAVE_CAIRO_XLIB_TRUE = @HAVE_CAIRO_XLIB_TRUE@
+HAVE_CXX_FALSE = @HAVE_CXX_FALSE@
+HAVE_CXX_TRUE = @HAVE_CXX_TRUE@
+HAVE_DYNAMIC_MODULES_FALSE = @HAVE_DYNAMIC_MODULES_FALSE@
+HAVE_DYNAMIC_MODULES_TRUE = @HAVE_DYNAMIC_MODULES_TRUE@
+HAVE_FREETYPE_FALSE = @HAVE_FREETYPE_FALSE@
+HAVE_FREETYPE_TRUE = @HAVE_FREETYPE_TRUE@
+HAVE_INCLUDED_MODULES_FALSE = @HAVE_INCLUDED_MODULES_FALSE@
+HAVE_INCLUDED_MODULES_TRUE = @HAVE_INCLUDED_MODULES_TRUE@
+HAVE_INTROSPECTION_FALSE = @HAVE_INTROSPECTION_FALSE@
+HAVE_INTROSPECTION_TRUE = @HAVE_INTROSPECTION_TRUE@
+HAVE_WIN32_FALSE = @HAVE_WIN32_FALSE@
+HAVE_WIN32_TRUE = @HAVE_WIN32_TRUE@
+HAVE_XFT_FALSE = @HAVE_XFT_FALSE@
+HAVE_XFT_TRUE = @HAVE_XFT_TRUE@
+HAVE_X_FALSE = @HAVE_X_FALSE@
+HAVE_X_TRUE = @HAVE_X_TRUE@
+HTML_DIR = @HTML_DIR@
+INCLUDED_ATSUI_MODULES = @INCLUDED_ATSUI_MODULES@
+INCLUDED_FC_MODULES = @INCLUDED_FC_MODULES@
+INCLUDED_LANG_MODULES = @INCLUDED_LANG_MODULES@
+INCLUDED_WIN32_MODULES = @INCLUDED_WIN32_MODULES@
+INCLUDED_X_MODULES = @INCLUDED_X_MODULES@
+INCLUDE_ARABIC_FC_FALSE = @INCLUDE_ARABIC_FC_FALSE@
+INCLUDE_ARABIC_FC_TRUE = @INCLUDE_ARABIC_FC_TRUE@
+INCLUDE_ARABIC_LANG_FALSE = @INCLUDE_ARABIC_LANG_FALSE@
+INCLUDE_ARABIC_LANG_TRUE = @INCLUDE_ARABIC_LANG_TRUE@
+INCLUDE_BASIC_ATSUI_FALSE = @INCLUDE_BASIC_ATSUI_FALSE@
+INCLUDE_BASIC_ATSUI_TRUE = @INCLUDE_BASIC_ATSUI_TRUE@
+INCLUDE_BASIC_FC_FALSE = @INCLUDE_BASIC_FC_FALSE@
+INCLUDE_BASIC_FC_TRUE = @INCLUDE_BASIC_FC_TRUE@
+INCLUDE_BASIC_WIN32_FALSE = @INCLUDE_BASIC_WIN32_FALSE@
+INCLUDE_BASIC_WIN32_TRUE = @INCLUDE_BASIC_WIN32_TRUE@
+INCLUDE_BASIC_X_FALSE = @INCLUDE_BASIC_X_FALSE@
+INCLUDE_BASIC_X_TRUE = @INCLUDE_BASIC_X_TRUE@
+INCLUDE_HANGUL_FC_FALSE = @INCLUDE_HANGUL_FC_FALSE@
+INCLUDE_HANGUL_FC_TRUE = @INCLUDE_HANGUL_FC_TRUE@
+INCLUDE_HEBREW_FC_FALSE = @INCLUDE_HEBREW_FC_FALSE@
+INCLUDE_HEBREW_FC_TRUE = @INCLUDE_HEBREW_FC_TRUE@
+INCLUDE_INDIC_FC_FALSE = @INCLUDE_INDIC_FC_FALSE@
+INCLUDE_INDIC_FC_TRUE = @INCLUDE_INDIC_FC_TRUE@
+INCLUDE_INDIC_LANG_FALSE = @INCLUDE_INDIC_LANG_FALSE@
+INCLUDE_INDIC_LANG_TRUE = @INCLUDE_INDIC_LANG_TRUE@
+INCLUDE_KHMER_FC_FALSE = @INCLUDE_KHMER_FC_FALSE@
+INCLUDE_KHMER_FC_TRUE = @INCLUDE_KHMER_FC_TRUE@
+INCLUDE_SYRIAC_FC_FALSE = @INCLUDE_SYRIAC_FC_FALSE@
+INCLUDE_SYRIAC_FC_TRUE = @INCLUDE_SYRIAC_FC_TRUE@
+INCLUDE_THAI_FC_FALSE = @INCLUDE_THAI_FC_FALSE@
+INCLUDE_THAI_FC_TRUE = @INCLUDE_THAI_FC_TRUE@
+INCLUDE_THAI_LANG_FALSE = @INCLUDE_THAI_LANG_FALSE@
+INCLUDE_THAI_LANG_TRUE = @INCLUDE_THAI_LANG_TRUE@
+INCLUDE_TIBETAN_FC_FALSE = @INCLUDE_TIBETAN_FC_FALSE@
+INCLUDE_TIBETAN_FC_TRUE = @INCLUDE_TIBETAN_FC_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBRARY_LIBTOOL_OPTIONS = @LIBRARY_LIBTOOL_OPTIONS@
+LIBS = @LIBS@
+LIBTHAI_CFLAGS = @LIBTHAI_CFLAGS@
+LIBTHAI_LIBS = @LIBTHAI_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_EXE_MACHINE_FLAG = @LIB_EXE_MACHINE_FLAG@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MODULE_LIBTOOL_OPTIONS = @MODULE_LIBTOOL_OPTIONS@
+MS_LIB_AVAILABLE_FALSE = @MS_LIB_AVAILABLE_FALSE@
+MS_LIB_AVAILABLE_TRUE = @MS_LIB_AVAILABLE_TRUE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_WIN32_FALSE = @OS_WIN32_FALSE@
+OS_WIN32_TRUE = @OS_WIN32_TRUE@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANGO_API_VERSION = @PANGO_API_VERSION@
+PANGO_BINARY_AGE = @PANGO_BINARY_AGE@
+PANGO_CURRENT_MINUS_AGE = @PANGO_CURRENT_MINUS_AGE@
+PANGO_DEBUG_FLAGS = @PANGO_DEBUG_FLAGS@
+PANGO_INTERFACE_AGE = @PANGO_INTERFACE_AGE@
+PANGO_MODULE_VERSION = @PANGO_MODULE_VERSION@
+PANGO_VERSION = @PANGO_VERSION@
+PANGO_VERSION_MAJOR = @PANGO_VERSION_MAJOR@
+PANGO_VERSION_MICRO = @PANGO_VERSION_MICRO@
+PANGO_VERSION_MINOR = @PANGO_VERSION_MINOR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKGCONFIG_CAIRO_REQUIRES = @PKGCONFIG_CAIRO_REQUIRES@
+PKGCONFIG_MATH_LIBS = @PKGCONFIG_MATH_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PLATFORM_WIN32_FALSE = @PLATFORM_WIN32_FALSE@
+PLATFORM_WIN32_TRUE = @PLATFORM_WIN32_TRUE@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TYPELIBDIR = @TYPELIBDIR@
+VERSION = @VERSION@
+WIN32_LIBS = @WIN32_LIBS@
+WINDRES = @WINDRES@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XMKMF = @XMKMF@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+ms_librarian = @ms_librarian@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+INCLUDES = \
+       -I$(top_srcdir)                         \
+       $(GLIB_CFLAGS)                          \
+       $(FREETYPE_CFLAGS)                      \
+       -DPANGO_DISABLE_DEPRECATED              \
+       $(PANGO_DEBUG_FLAGS)
+
+EXTRA_DIST = \
+       gen-color-table.pl
+
+gen_script_for_lang_SOURCES = gen-script-for-lang.c
+gen_script_for_lang_LDADD = ../pango/libpango-$(PANGO_API_VERSION).la $(FREETYPE_LIBS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  tools/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnits  tools/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+gen-script-for-lang$(EXEEXT): $(gen_script_for_lang_OBJECTS) $(gen_script_for_lang_DEPENDENCIES) 
+       @rm -f gen-script-for-lang$(EXEEXT)
+       $(LINK) $(gen_script_for_lang_LDFLAGS) $(gen_script_for_lang_OBJECTS) $(gen_script_for_lang_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen-script-for-lang.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+       list='$(DISTFILES)'; for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+         esac; \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+           dir="/$$dir"; \
+           $(mkdir_p) "$(distdir)$$dir"; \
+         else \
+           dir=''; \
+         fi; \
+         if test -d $$d/$$file; then \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-exec install-exec-am \
+       install-info install-info-am install-man install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-info-am
+
+
+-include $(top_srcdir)/git.mk
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tools/gen-color-table.pl b/tools/gen-color-table.pl
new file mode 100755 (executable)
index 0000000..e62994e
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/perl -w
+
+if (@ARGV != 1) {
+    die "Usage: gen-colors.pl rgb.txt > pango-color-table.h\n";
+}
+
+open IN, $ARGV[0] || die "Cannot open $ARGV[0]: $!\n";
+
+@colors = ();
+while (defined($_ = <IN>)) {
+    next if /^!/;
+    if (!/^\s*([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+(.*\S)\s+$/) {
+       die "Cannot parse line $_";
+    }
+
+    push @colors, [$1, $2, $3, $4];
+}
+
+@colors = sort { lc($a->[3]) cmp lc($b->[3]) } @colors;
+
+$offset = 0;
+
+$date = gmtime;
+
+print <<EOT;
+/* pango-color-table.h: Generated by gen-color-table.pl from rgb.txt
+ *
+ *  Date: $date
+ *
+ * Do not edit.   
+ */
+static const char color_names[] =
+EOT
+
+for $color (@colors) {
+    $name = $color->[3];
+
+    if ($offset != 0) {
+       print qq(\n);
+    }
+    print qq(  "$name\\0");
+
+    $color->[4] = $offset;
+    $offset += length($name) + 1;
+}
+
+print ";\n\n";
+
+print <<EOT;
+typedef struct {
+    guint16 name_offset;
+    guchar red;
+    guchar green;
+    guchar blue;
+} ColorEntry;
+
+static const ColorEntry color_entries[] = {
+EOT
+
+$i = 0;
+for $color (@colors) {
+    $red = $color->[0];
+    $green = $color->[1];
+    $blue = $color->[2];
+    $offset = $color->[4];
+
+    if ($i != 0) {
+       print ",\n";
+    }
+    print "  { $offset, $red, $green, $blue }";
+    $i++;
+}
+
+print "\n};\n";
diff --git a/tools/gen-script-for-lang.c b/tools/gen-script-for-lang.c
new file mode 100755 (executable)
index 0000000..b3cfa7b
--- /dev/null
@@ -0,0 +1,311 @@
+/* Pango
+ * gen-script-for-lang.c: Utility program to generate pango-script-lang-table.h
+ *
+ * Copyright (C) 2003 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include <pango/pango-enum-types.h>
+#include <pango/pango-script.h>
+#include <pango/pango-types.h>
+
+#include <fontconfig/fontconfig.h>
+
+#define MAX_SCRIPTS 3
+
+typedef struct {
+  PangoScript script;
+  int freq;
+} ScriptInfo;
+
+typedef struct {
+  PangoLanguage *lang;
+  ScriptInfo scripts[MAX_SCRIPTS];
+} LangInfo;
+
+static const char *get_script_name (PangoScript script)
+{
+  static GEnumClass *class = NULL;
+  GEnumValue *value;
+  if (!class)
+    class = g_type_class_ref (PANGO_TYPE_SCRIPT);
+  
+  value = g_enum_get_value (class, script);
+  g_assert (value);
+
+  return value->value_name;
+}
+
+static void fail (const char *format, ...) G_GNUC_PRINTF (1, 2) G_GNUC_NORETURN;
+static void fail (const char *format, ...)
+{
+  va_list vap;
+  
+  va_start (vap, format);
+  vfprintf (stderr, format, vap);
+  va_end (vap);
+  
+  exit (1);
+}
+
+static void
+script_for_char (gunichar   ch,
+                LangInfo  *info)
+{
+  PangoScript script = pango_script_for_unichar (ch);
+  if (script != PANGO_SCRIPT_COMMON &&
+      script != PANGO_SCRIPT_INHERITED)
+    {
+      int j;
+
+      if (script == PANGO_SCRIPT_UNKNOWN)
+       {
+          g_message ("Script unknown for U+%04X", ch);
+          return;
+       }
+
+      for (j = 0; j < MAX_SCRIPTS; j++)
+       {
+         if (info->scripts[j].script == script)
+           break;
+         if (info->scripts[j].script == PANGO_SCRIPT_COMMON)
+           {
+             info->scripts[j].script = script;
+             break;
+           }
+       }
+
+      if (j == MAX_SCRIPTS)
+       fail ("More than %d scripts found for %s.  Increase MAX_SCRIPTS.\n", MAX_SCRIPTS, pango_language_to_string (info->lang));
+
+      info->scripts[j].freq++;
+    }
+}
+     
+static void
+scripts_for_lang (LangInfo   *info)
+{
+  const FcCharSet *charset;
+  FcChar32  ucs4, pos;
+  FcChar32  map[FC_CHARSET_MAP_SIZE];
+  int i;
+
+  charset = FcLangGetCharSet ((const FcChar8 *) info->lang);
+  if (!charset)
+    return;
+
+  for (ucs4 = FcCharSetFirstPage (charset, map, &pos);
+       ucs4 != FC_CHARSET_DONE;
+       ucs4 = FcCharSetNextPage (charset, map, &pos))
+    {
+
+      for (i = 0; i < FC_CHARSET_MAP_SIZE; i++)
+       {
+         FcChar32  bits = map[i];
+         FcChar32  base = ucs4 + i * 32;
+         int b = 0;
+         bits = map[i];
+         while (bits)
+           {
+             if (bits & 1)
+               script_for_char (base + b, info);
+
+             bits >>= 1;
+             b++;
+           }
+       }
+    }
+}
+
+static void
+do_lang (GArray        *script_array,
+        const FcChar8 *lang)
+{
+  LangInfo info;
+  int j;
+
+  info.lang = pango_language_from_string ((const char *)lang);
+
+  for (j = 0; j < MAX_SCRIPTS; j++)
+    {
+      info.scripts[j].script = PANGO_SCRIPT_COMMON;
+      info.scripts[j].freq = 0;
+    }
+  
+  scripts_for_lang (&info);
+
+  g_array_append_val (script_array, info);
+}
+
+static int
+compare_script (gconstpointer a,
+               gconstpointer b,
+               gpointer      data)
+{
+  const ScriptInfo *info_a = a;
+  const ScriptInfo *info_b = b;
+  G_GNUC_UNUSED LangInfo *lang_info = data;
+
+  /* first compare frequencies, higher first */
+  if (info_a->freq > info_b->freq)
+    return -1;
+  if (info_a->freq < info_b->freq)
+    return +1;
+
+  /* next compare script indices, higher first (it's more specific) */
+  if (info_a->script > info_b->script)
+    return -1;
+  if (info_a->script < info_b->script)
+    return +1;
+
+  /* for stability, next compare pointers themselves, smaller first */
+  if (info_a < info_b)
+    return -1;
+  if (info_a > info_b)
+    return +1;
+
+  return 0;
+}
+
+static int
+compare_lang (gconstpointer a,
+             gconstpointer b)
+{
+  const LangInfo *info_a = a;
+  const LangInfo *info_b = b;
+
+  return strcmp (pango_language_to_string (info_a->lang),
+                pango_language_to_string (info_b->lang));
+}
+
+int main (void)
+{
+  GArray *script_array;
+
+  unsigned int i;
+  int j;
+  int max_lang_len = 0;
+  int max_script_len = 0;
+
+  FcStrSet *langs_set;
+  FcStrList *langs;
+  FcChar8* lang;
+
+  char date_buf[200];
+  const char *date_str = "unknown";
+  time_t t;
+  struct tm *tmp;
+  int fc_version;
+
+  g_type_init ();
+
+  script_array = g_array_new (FALSE, FALSE, sizeof (LangInfo));
+  
+
+  langs_set = FcGetLangs ();
+  langs = FcStrListCreate (langs_set);
+  FcStrSetDestroy (langs_set);
+
+  while ((lang = FcStrListNext (langs)))
+    do_lang (script_array, lang);
+
+  FcStrListDone (langs);
+
+
+  g_array_sort (script_array, compare_lang);
+
+  for (i = 0; i < script_array->len; i++)
+    {
+      LangInfo *info = &g_array_index (script_array, LangInfo, i);
+
+      max_lang_len = MAX (max_lang_len,
+                         (int)strlen (pango_language_to_string (info->lang)));
+
+      g_qsort_with_data (info->scripts,
+                        G_N_ELEMENTS (info->scripts),
+                        sizeof (info->scripts[0]), 
+                        compare_script,
+                        info);
+
+      for (j = 0; j < MAX_SCRIPTS; j++)
+        if (!info->scripts[j].freq)
+         break;
+      
+      max_script_len = MAX (max_script_len, j);
+    }
+
+  if ((t = time(NULL), tmp = localtime (&t)) && strftime(date_buf, sizeof(date_buf), "%F", tmp))
+    date_str = date_buf;
+
+  fc_version = FcGetVersion ();
+
+  g_print ("/* pango-script-lang-table.h:\n"
+          " * \n"
+          " * Generated by %s\n"
+          " * Date: %s\n"
+          " * Source: fontconfig-%d.%d.%d\n"
+          " * \n"
+          " * Do not edit.\n"
+          " */\n",
+          __FILE__,
+          date_str,
+          fc_version / 10000, (fc_version / 100) % 100, fc_version % 100);
+
+  g_print ("typedef struct _PangoScriptForLang {\n"
+          "  const char lang[%d];\n"
+          "  PangoScript scripts[%d];\n"
+          "} PangoScriptForLang;\n"
+          "\n"
+          "static const PangoScriptForLang pango_script_for_lang[] = {\n",
+          max_lang_len + 1,
+          max_script_len);
+  
+  for (i = 0; i < script_array->len; i++)
+    {
+      LangInfo *info = &g_array_index (script_array, LangInfo, i);
+      
+      g_print ("  { \"%s\", %*s{ ",
+              pango_language_to_string (info->lang),
+              max_lang_len - strlen (pango_language_to_string (info->lang)), "");
+      for (j = 0; j < MAX_SCRIPTS; j++)
+       {
+         if (!info->scripts[j].freq)
+           break;
+
+         if (j != 0)
+           g_print (", ");
+         g_print ("%s/*%d*/",
+                  get_script_name (info->scripts[j].script),
+                  info->scripts[j].freq);
+       }
+      g_print (" } }");
+      if (i + 1 != script_array->len)
+       g_print (",");
+      g_print ("\n");
+    }
+
+  g_print ("};\n");
+
+  return 0;
+}
diff --git a/xmldocs.make b/xmldocs.make
new file mode 100644 (file)
index 0000000..b93e3f3
--- /dev/null
@@ -0,0 +1,101 @@
+#
+# No modifications of this Makefile should be necessary.
+#
+# To use this template:
+#     1) Define: figdir, docname, lang, omffile, and entities in
+#        your Makefile.am file for each document directory,
+#        although figdir, omffile, and entities may be empty
+#     2) Make sure the Makefile in (1) also includes 
+#       "include $(top_srcdir)/xmldocs.make" and
+#       "dist-hook: app-dist-hook".
+#     3) Optionally define 'entities' to hold xml entities which
+#        you would also like installed
+#     4) Figures must go under $(figdir)/ and be in PNG format
+#     5) You should only have one document per directory 
+#     6) Note that the figure directory, $(figdir)/, should not have its
+#        own Makefile since this Makefile installs those figures.
+#
+# example Makefile.am:
+#   figdir = figures
+#   docname = scrollkeeper-manual
+#   lang = C
+#   omffile=scrollkeeper-manual-C.omf
+#   entities = fdl.xml
+#   include $(top_srcdir)/xmldocs.make
+#   dist-hook: app-dist-hook
+#
+# About this file:
+#      This file was taken from scrollkeeper_example2, a package illustrating
+#      how to install documentation and OMF files for use with ScrollKeeper 
+#      0.3.x and 0.4.x.  For more information, see:
+#              http://scrollkeeper.sourceforge.net/
+#      Version: 0.1.2 (last updated: March 20, 2002)
+#
+
+
+# **********  Begin of section some packagers may need to modify  **********
+# This variable (docdir) specifies where the documents should be installed.
+# This default value should work for most packages.
+docdir = $(datadir)/gnome/help/$(docname)/$(lang)
+
+# **********  You should not have to edit below this line  **********
+xml_files = $(entities) $(docname).xml
+
+EXTRA_DIST = $(xml_files) $(omffile)
+CLEANFILES = omf_timestamp
+
+include $(top_srcdir)/omf.make
+
+all: omf
+
+$(docname).xml: $(entities)
+       -ourdir=`pwd`;  \
+       cd $(srcdir);   \
+       cp $(entities) $$ourdir
+
+app-dist-hook:
+       if test "$(figdir)"; then \
+         $(mkinstalldirs) $(distdir)/$(figdir); \
+         for file in $(srcdir)/$(figdir)/*.png; do \
+           basefile=`echo $$file | sed -e  's,^.*/,,'`; \
+           $(INSTALL_DATA) $$file $(distdir)/$(figdir)/$$basefile; \
+         done \
+       fi
+
+install-data-local: omf
+       $(mkinstalldirs) $(DESTDIR)$(docdir)
+       for file in $(xml_files); do \
+         cp $(srcdir)/$$file $(DESTDIR)$(docdir); \
+       done
+       if test "$(figdir)"; then \
+         $(mkinstalldirs) $(DESTDIR)$(docdir)/$(figdir); \
+         for file in $(srcdir)/$(figdir)/*.png; do \
+           basefile=`echo $$file | sed -e  's,^.*/,,'`; \
+           $(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \
+         done \
+       fi
+
+install-data-hook: install-data-hook-omf
+
+uninstall-local: uninstall-local-doc uninstall-local-omf
+
+uninstall-local-doc:
+       -if test "$(figdir)"; then \
+         for file in $(srcdir)/$(figdir)/*.png; do \
+           basefile=`echo $$file | sed -e  's,^.*/,,'`; \
+           rm -f $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \
+         done; \
+         rmdir $(DESTDIR)$(docdir)/$(figdir); \
+       fi
+       -for file in $(xml_files); do \
+         rm -f $(DESTDIR)$(docdir)/$$file; \
+       done
+       -rmdir $(DESTDIR)$(docdir)
+
+clean-local: clean-local-doc clean-local-omf
+
+# for non-srcdir builds, remove the copied entities.
+clean-local-doc:
+       if test $(srcdir) != .; then \
+         rm -f $(entities); \
+       fi